From be83a8f382cf2fea98161bfd6d51719aacbf9aa9 Mon Sep 17 00:00:00 2001 From: Fulup Ar Foll Date: Thu, 28 Jan 2016 16:30:12 +0100 Subject: Update JSON API --- afm-client/dist.prod/opa/AFBclient.min.css | 4 ++-- afm-client/dist.prod/opa/AFBclient.min.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'afm-client/dist.prod/opa') diff --git a/afm-client/dist.prod/opa/AFBclient.min.css b/afm-client/dist.prod/opa/AFBclient.min.css index dbc5b6e..e7c2e7b 100644 --- a/afm-client/dist.prod/opa/AFBclient.min.css +++ b/afm-client/dist.prod/opa/AFBclient.min.css @@ -1,8 +1,8 @@ submit-button{float:right;display:inline-block;border:1px solid #676767;box-shadow:2px 2px 1px gray;color:grey;border-radius:5px;font-style:italic;padding:0 .5rem;margin:.5rem;background:#d1d1e0}submit-button i{padding-right:.3rem;font-size:2rem}submit-button span{font-size:1rem}submit-button:hover{background:#f3f3f3;border:2px solid #4d4d4d}zf-modal{background-color:rgba(180,180,180,.5)}.box-content{border:2px solid #dcdcdc!important;border-radius:5px;min-width:98%!important;margin:.5rem;background:rgba(200,205,200,.3)}.box-content .box-title{display:block;font-size:1.3rem}.ui-notification{width:auto;border-radius:5px}.ibz-right{float:right!important}.ibz-left{float:left!important} token-refresh{display:block;float:right;margin:.5rem 1rem 0 0}.button-box{height:4.5rem}.button-box .session-button{float:left;width:5rem}.button-box .response>span{display:block;margin:.3rem .5rem}.button-box .fail{color:red;border:1px solid #c00}.button-box .success{color:green;border:1px solid #004d00}.message-box{height:auto;width:100%;font-size:.75rem}.message-box .response .err-no{color:grey}.message-box .response .res.err-ok{color:#00f}.message-box .response .req.err-ok{color:#8a2be2}.message-box .response .status.err-ok{color:green}.message-box .response .status.err-fx{color:red} -.upload-file{display:inline-block;border:1px solid #676767;box-shadow:2px 2px 1px gray;color:grey;border-radius:5px;font-style:italic;padding:0 .5rem;background:#d1d1e0;float:right;height:3rem;margin:.5rem}.upload-file span{font-size:1rem}.upload-file:hover{background:#f3f3f3;border:2px solid #4d4d4d}.upload-file i{padding-right:.3rem;font-size:2rem}.upload-file .ibz-range-slider{height:10%!important;border-radius:5px;background-color:#d3d3d3!important}.upload-file .ibz-range-slider .range-slider-handle{width:10%!important;height:100%!important;margin-top:.2rem;background-color:purple!important}.upload-file .ibz-range-slider .range-slider-active-segment{height:80%!important;background-color:#90ee90}input-text alert{position:fixed;margin:-2.2rem 0 0 15rem;border-radius:5px;font-style:italic;border-color:rgba(175,175,175,.6);color:#00008b;background-color:rgba(200,200,200,.6)!important;padding:.2rem!important}input-text input{margin-bottom:.5rem!important}input-text label{margin-top:1rem!important}input-text .required{float:right;color:#87cefa}input-text .required.valid{color:green}input-text .required.invalid{color:plum}input-text .status-untouch{border-color:rgba(200,200,200,.6)!important;box-shadow:0 1px 1px rgba(0,0,0,.075) inset,0 0 8px rgba(200,200,200,.6)!important;color:#696969!important}input-text input:focus{border-color:rgba(82,168,236,.8);box-shadow:0 1px 1px rgba(0,0,0,.075) inset,0 0 8px rgba(82,168,236,.8)!important;transition:border .2s linear 0s,box-shadow .2s linear 0s;color:#483d8b!important}input-text .status-valid{border-color:rgba(154,205,50,.6)!important;box-shadow:0 1px 1px rgba(0,0,0,.075) inset,0 0 8px rgba(154,205,50,.6)!important}input-text .status-invalid{border-color:rgba(154,17,69,.6);box-shadow:0 1px 1px rgba(0,0,0,.075) inset,0 0 8px rgba(154,17,69,.6)!important;color:#9a1145} appli-button i,appli-button span{font-size:1rem}appli-button{display:inline-block;border:1px solid #676767;box-shadow:2px 2px 1px gray;color:grey;border-radius:5px;font-style:italic;padding:0 .5rem;margin:.5rem;background:#d1d1e0}appli-button i{padding-right:.3rem}appli-button:hover{background:#f3f3f3;border:2px solid #4d4d4d}appli-button img{height:3rem} +.upload-file{display:inline-block;border:1px solid #676767;box-shadow:2px 2px 1px gray;color:grey;border-radius:5px;font-style:italic;padding:0 .5rem;background:#d1d1e0;float:right;height:3rem;margin:.5rem}.upload-file span{font-size:1rem}.upload-file:hover{background:#f3f3f3;border:2px solid #4d4d4d}.upload-file i{padding-right:.3rem;font-size:2rem}.upload-file .ibz-range-slider{height:10%!important;border-radius:5px;background-color:#d3d3d3!important}.upload-file .ibz-range-slider .range-slider-handle{width:10%!important;height:100%!important;margin-top:.2rem;background-color:purple!important}.upload-file .ibz-range-slider .range-slider-active-segment{height:80%!important;background-color:#90ee90}input-text alert{position:fixed;margin:-2.2rem 0 0 15rem;border-radius:5px;font-style:italic;border-color:rgba(175,175,175,.6);color:#00008b;background-color:rgba(200,200,200,.6)!important;padding:.2rem!important}input-text input{margin-bottom:.5rem!important}input-text label{margin-top:1rem!important}input-text .required{float:right;color:#87cefa}input-text .required.valid{color:green}input-text .required.invalid{color:plum}input-text .status-untouch{border-color:rgba(200,200,200,.6)!important;box-shadow:0 1px 1px rgba(0,0,0,.075) inset,0 0 8px rgba(200,200,200,.6)!important;color:#696969!important}input-text input:focus{border-color:rgba(82,168,236,.8);box-shadow:0 1px 1px rgba(0,0,0,.075) inset,0 0 8px rgba(82,168,236,.8)!important;transition:border .2s linear 0s,box-shadow .2s linear 0s;color:#483d8b!important}input-text .status-valid{border-color:rgba(154,205,50,.6)!important;box-shadow:0 1px 1px rgba(0,0,0,.075) inset,0 0 8px rgba(154,205,50,.6)!important}input-text .status-invalid{border-color:rgba(154,17,69,.6);box-shadow:0 1px 1px rgba(0,0,0,.075) inset,0 0 8px rgba(154,17,69,.6)!important;color:#9a1145} link-button,link-button.secondary{display:inline-block;font-style:italic;margin:.5rem}link-button i,link-button span,link-button.secondary span{font-size:1rem}link-button{border:1px solid #0040ff;box-shadow:2px 2px 1px #43f;color:#36f;border-radius:5px;padding:0 .5rem;background:#d1d1e0}link-button i{padding-right:.3rem}link-button:hover{background:#fff;border:2px solid #03c}link-button.secondary{border:1px solid #668dff;box-shadow:2px 2px 1px #a199ff;color:#99b3ff;border-radius:5px;padding:0 .5rem;background:#d1d1e0}link-button.secondary i{padding-right:.3rem;font-size:1rem}link-button.secondary:hover{background:#fff;border:2px solid #3367ff} link-button i,link-button span,token-refresh span{font-size:1rem}link-button{display:inline-block;border:1px solid #0040ff;box-shadow:2px 2px 1px #43f;color:#36f;border-radius:5px;font-style:italic;padding:0 .5rem;margin:.5rem;background:#d1d1e0}link-button i{padding-right:.3rem}link-button:hover{background:#fff;border:2px solid #03c}tip-modal{position:relative}.tip-modal-popup{width:20rem;position:absolute;top:1em;padding:.2em .6em;border:1px solid #963;background-color:#e5ffff;color:#000;opacity:0;transition:visibility .5s linear 1s,opacity 1s linear;border-radius:5px}.tip-modal-popup i{margin:0 .3rem 0 0;display:inline}token-refresh{display:inline-block;border:1px solid #676767;box-shadow:2px 2px 1px gray;color:grey;border-radius:5px;font-style:italic;padding:0 .5rem;margin:.5rem 1rem .5rem .5rem;background:#d1d1e0}token-refresh i{padding-right:.3rem;font-size:1rem;margin-left:.5rem}token-refresh:hover{background:#f3f3f3;border:2px solid #4d4d4d}token-refresh.online{color:#06c}token-refresh.online i{color:#0f0}token-refresh.offline{color:#f0f}token-refresh.offline i{color:red} .range-slider-handle{display:inline-block;position:absolute;z-index:1;top:-.2rem;width:2rem;height:1.375rem;border:1px solid;cursor:pointer;background:#008cba}.range-slider-handle,.range-slider.radius{background:#008cba;-webkit-border-radius:3px;border-radius:3px}.range-slider-active-segment{display:inline-block;top:.07rem;position:absolute;height:.8rem;background:#e5e5e5}.ibz-range-slider{background-color:rgba(154,205,50,.6)!important;height:1rem;position:relative}.ibz-range-slider .range-slider-active-segment{background-color:rgba(82,168,200,.6)}.ibz-range-slider-display{background-color:rgba(82,168,200,.6)!important;width:4rem!important;padding:.25rem;text-align:center}.ibz-range-slider-start,.ibz-range-slider-stop{display:inline-block;position:absolute;padding-top:2px;height:95%;background:repeating-linear-gradient(45deg,#606dbc,#606dbc 10px,#465298 10px,#465298 20px)} -/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0eWxlcy9hcHAvaWJ6LWdsb2JhbC5zY3NzIiwic3R5bGVzL2FwcC9faWJ6LW1peGlucy5zY3NzIiwicGFnZXMvRGFzaGJvYXJkL0Rhc2hib2FyZE1vZHVsZS5zY3NzIiwid2lkZ2V0cy9Gb3JtSW5wdXQvRm9ybUlucHV0LnNjc3MiLCJ3aWRnZXRzL0FjdGlvbkJ1dHRvbnMvQWN0aW9uQnV0dG9ucy5zY3NzIiwid2lkZ2V0cy9OYXZpZ2F0aW9uL05hdmlnYXRpb24uc2NzcyIsIndpZGdldHMvTm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25zLnNjc3MiLCJ3aWRnZXRzL1JhbmdlU2xpZGVycy9SYW5nZXNsaWRlci5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW9CYSxjQUNULE1BQU8sTUNEUCxRQUFTLGFBQ1QsT0FBVyxJQUFNLE1BQUMsUUFDbEIsV0FBZSxJQUFJLElBQUksSUFBQyxLQUN4QixNRERvQixLQ0VwQixjQUFlLElBQ2YsV0FBWSxPQUNaLFFBQVMsRUFBQSxNQUNULE9BQU8sTUFDUCxXQUFZLFFBQ1gsZ0JBQ0csY0FBZSxNQUNmLFVBWnlCLEtBY3pCLG1CQUFFLFVBQVcsS0FFVixvQkFDTCxXQUFZLFFBQ1osT0FBVyxJQUFNLE1BQUMsUURaaEIsU0FDTixpQkFBa0IscUJBR1IsYUNwQlIsT0FBUSxJQUFBLE1BQUEsa0JBQ1IsY0FBZSxJQUlmLFVBQVcsY0FDWCxPQUFRLE1BQ1IsV0FBWSxxQkRnQkYsd0JBQ04sUUFBUyxNQUNULFVBQVcsT0FLSCxpQkFDWixNQUFPLEtBQ1AsY0FBZSxJQUdULFdBQ04sTUFBTyxnQkFHRixVQUNMLE1BQU87QUUxQkUsY0FDVCxRQUFTLE1BQ1QsTUFBTyxNQUNQLE9BQVEsTUFBQSxLQUFBLEVBQUEsRUFHRCxZQUNQLE9BQVUsT0FFSyw0QkFDYixNQUFPLEtBQ1AsTUFBTyxLQUdPLDJCQUNaLFFBQVMsTUFDVCxPQUFRLE1BQUEsTUFHUCxrQkFDRCxNQXRCSyxJQXVCTCxPQUFXLElBQU0sTUFBQyxLQUVk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Yix3QkFBZSx1QkFpQmQsUUFBUyxhQUNULFNBQVUsU0FDVixZQUFhLElBQ2IsT0FBUSxJQUNSLFdBQVkiLCJmaWxlIjoiQUZCY2xpZW50LmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKEMpIDIwMTUgXCJJb1QuYnpoXCJcbkF1dGhvciBcIkZ1bHVwIEFyIEZvbGxcIlxuXG5UaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbnRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4oYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG5UaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbmJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG5NRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG5HTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG5Zb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5AaW1wb3J0IFwiYXBwL2liei1taXhpbnNcIjtcblxuc3VibWl0LWJ1dHRvbiB7XG4gICAgZmxvYXQ6IHJpZ2h0O1xuICAgIEBpbmNsdWRlIGliei1idXR0b24oZ3JleSk7XG59XG5cbnpmLW1vZGFsIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgxODAsMTgwLDE4MCwuNSk7XG59XG5cbi5ib3gtY29udGVudCB7XG4gICAgIEBpbmNsdWRlIGliei1ib3gtY29udGVudDtcblxuICAgIC5ib3gtdGl0bGUge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgZm9udC1zaXplOiAxLjNyZW07XG4gICAgfVxufVxuXG4vLyBDaGFuZ2UgTm90aWZpY2F0aW9ucyBkZWZhdWx0IHNpemVcbi51aS1ub3RpZmljYXRpb24ge1xuICAgIHdpZHRoOiBhdXRvO1xuICAgIGJvcmRlci1yYWRpdXM6IDVweDtcbn1cblxuLmliei1yaWdodCB7XG4gICAgZmxvYXQ6IHJpZ2h0ICFpbXBvcnRhbnQ7XG59XG5cbi5pYnotbGVmdCB7XG4gICAgZmxvYXQ6IGxlZnQgIWltcG9ydGFudDtcbn0iLCIvKlxuICAgIEV2ZXJ5IFNDU1MgZmlsZXMgd2lsbCBiZSBpbmplY3RlZCBpbnRvIG1haW4gSFRNTCBwYWdlXG4qL1xuJXNoYWRvdy10cmFuc2l0aW9uIHtcbiAgICB0cmFuc2l0aW9uOiBib3JkZXIgMC4ycyBsaW5lYXIgMHMsIGJveC1zaGFkb3cgMC4ycyBsaW5lYXIgMHM7XG4gICAgYm9yZGVyLXJhZGl1czogNXB4O1xufVxuXG5AbWl4aW4gaWJ6LWJveC1jb250ZW50IHtcbiAgICBib3JkZXI6IDJweCBzb2xpZCBnYWluc2Jvcm8gIWltcG9ydGFudDtcbiAgICBib3JkZXItcmFkaXVzOiA1cHg7XG4gICAgXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xuICAgIG1pbi13aWR0aDogOTglICFpbXBvcnRhbnQ7IFxuICAgIG1hcmdpbjogLjVyZW0gLjVyZW0gLjVyZW0gLjVyZW07XG4gICAgYmFja2dyb3VuZDogcmdiYSgyMDAsMjA1LDIwMCwuMyk7XG59XG5cbkBtaXhpbiBpYnotYnV0dG9uICgkY29sb3IsICRzaXplOjJyZW0pIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgYm9yZGVyOiAxcHggc29saWQgZGFya2VuKCRjb2xvciwxMCUpO1xuICAgIGJveC1zaGFkb3c6IDJweCAycHggMXB4IGFkanVzdC1odWUoJGNvbG9yLDIwZGVnKTtcbiAgICBjb2xvcjogJGNvbG9yO1xuICAgIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gICAgcGFkZGluZzogMHJlbSAuNXJlbSAwcmVtIC41cmVtO1xuICAgIG1hcmdpbjouNXJlbTtcbiAgICBiYWNrZ3JvdW5kOiBsaWdodGVuKCM5NDk0YjcsIDIwJSk7XG4gICAgaSB7XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDAuM3JlbTtcbiAgICAgICAgZm9udC1zaXplOiAkc2l6ZTtcbiAgICB9XG4gICAgc3BhbiB7Zm9udC1zaXplOiAxcmVtfVxuICAgIFxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogbGlnaHRlbigkY29sb3IsIDQ1JSk7XG4gICAgICBib3JkZXI6IDJweCBzb2xpZCBkYXJrZW4oJGNvbG9yLDIwJSk7XG4gICAgICBcbiAgICB9XG59XG5cbkBtaXhpbiBpYnotaW5wdXQtYWxlcnQgKCRjb2xvciwgJGJhY2tncm91bmQpIHtcbiAgICBwb3NpdGlvbiAgOmZpeGVkO1xuICAgIG1hcmdpbjogLTIuMnJlbSAwIDAgMTVyZW07XG4gICAgYm9yZGVyLXJhZGl1czogNXB4O1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICBib3JkZXItY29sb3I6IGRhcmtlbigkYmFja2dyb3VuZCwxMCUpO1xuICAgIGNvbG9yOiAkY29sb3I7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQgIWltcG9ydGFudDtcbiAgICBwYWRkaW5nOiAwLjJyZW0gIWltcG9ydGFudDtcbn1cbiIsIi8qIFxuICogQ29weXJpZ2h0IChDKSAyMDE1IFwiSW9ULmJ6aFwiXG4gKiBBdXRob3IgXCJGdWx1cCBBciBGb2xsXCJcbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuICovXG5cbkBpbXBvcnQgXCJhcHAvaWJ6LW1peGluc1wiO1xuXG4kQ09MT1JfU1VDQ0VTUzogZ3JlZW47XG4kQ09MT1JfRkFJTDogcmVkO1xuXG50b2tlbi1yZWZyZXNoIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBmbG9hdDogcmlnaHQ7XG4gICAgbWFyZ2luOiAuNXJlbSAxcmVtIDAgMDtcbn1cblxuLmJ1dHRvbi1ib3gge1xuICAgIGhlaWdodCAgOiA0LjVyZW07XG4gICAgXG4gICAgLnNlc3Npb24tYnV0dG9uIHtcbiAgICAgIGZsb2F0OiBsZWZ0O1xuICAgICAgd2lkdGg6IDVyZW07XG4gICAgfTtcbiAgICBcbiAgICAucmVzcG9uc2UgPiBzcGFue1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgbWFyZ2luOiAuM3JlbSAuNXJlbSAuM3JlbSAuNXJlbTsgICAgICAgIFxuICAgIH0gIFxuICAgIFxuICAgIC5mYWlsIHsgXG4gICAgICAgIGNvbG9yOiRDT0xPUl9GQUlMO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCBkYXJrZW4oJENPTE9SX0ZBSUwsMTAlKTtcbiAgICB9XG4gICAgLnN1Y2Nlc3MgeyBcbiAgICAgICAgY29sb3I6JENPTE9SX1NVQ0NFU1M7IFxuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCBkYXJrZW4oJENPTE9SX1NVQ0NFU1MsMTAlKTtcbiAgICB9XG5cbn07XG5cbi5tZXNzYWdlLWJveCB7XG4gICAgaGVpZ2h0ICA6IGF1dG87XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgZm9udC1zaXplOiAuNzVyZW07XG4gIFxuICAgIC5yZXNwb25zZSB7XG4gICAgICAgIC5lcnItbm8geyBjb2xvcjpncmV5OyB9XG4gICAgICAgIC5yZXMuZXJyLW9rIHsgY29sb3I6IGJsdWU7IH1cbiAgICAgICAgLnJlcS5lcnItb2sgeyBjb2xvcjpibHVldmlvbGV0OyB9XG4gICAgICAgIC5zdGF0dXMuZXJyLW9rIHsgY29sb3I6Z3JlZW47IH1cbiAgICAgICAgLnN0YXR1cy5lcnItZnggeyBjb2xvcjpyZWQ7IH0gICAgICAgXG4gICAgfSBcbiAgICBcblxufTtcblxuXG5cbiIsIi8qXG4gICAgU2FtcGxlIG9mIHN0eWxlIG92ZXJsb2FkIGZvciBhIHNwZWNpZmljIHdpZGdldFxuXG4gICAgTm90ZTogdGhpcyBTQ1NTIGlzIGluamVjdGVkIHdpdGggbWFpbiBIVE1MIHBhZ2UsIGl0IHNjb3BlIHNob3VsZCBiZSByZWR1Y2VcbiAgICB0byBhIHNwZWNpZmljIHdpZGdldCBvciBpdCB2YWx1ZSB3aWxsIGJlIHByb3BhZ2F0ZWQgYXQgYSBnbG9iYWwgbGV2ZWwuXG4qL1xuXG5AaW1wb3J0IFwiYXBwL2liei1taXhpbnNcIjtcblxuLnVwbG9hZC1maWxlIHtcbiAgICBAaW5jbHVkZSBpYnotYnV0dG9uKGdyZXksMXJlbSlcbiAgICBmbG9hdDogcmlnaHQ7XG4gICAgaGVpZ2h0ICA6IDNyZW07XG4gICAgbWFyZ2luOiAwLjVyZW07XG5cbiAgICBpIHsgZm9udC1zaXplOiAycmVtfVxuICAgIFxuICAgIC5pYnotcmFuZ2Utc2xpZGVyIHtcbiAgICAgICAgaGVpZ2h0OiAxMCUgIWltcG9ydGFudDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNXB4O1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGdyZXkgIWltcG9ydGFudDtcbiAgICBcbiAgICAgICAgLnJhbmdlLXNsaWRlci1oYW5kbGUge1xuICAgICAgICAgICAgd2lkdGg6IDEwJSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgaGVpZ2h0OiAxMDAlICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICBtYXJnaW4tdG9wOiAuMnJlbTtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHB1cnBsZSAhaW1wb3J0YW50O1xuICAgICAgICB9XG5cbiAgICAgICAgLnJhbmdlLXNsaWRlci1hY3RpdmUtc2VnbWVudCB7XG4gICAgICAgICAgICBoZWlnaHQ6IDgwJSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogbGlnaHRncmVlbjtcbiAgICAgICAgfVxuICAgIH1cblxufVxuXG5pbnB1dC10ZXh0IHtcbiAgXG4gICAgYWxlcnQge0BpbmNsdWRlIGliei1pbnB1dC1hbGVydChkYXJrYmx1ZSwgcmdiYSgyMDAsIDIwMCwgMjAwLCAwLjYpKX07XG5cbiAgICBpbnB1dCB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IC41cmVtICFpbXBvcnRhbnQ7XG4gICAgfVxuXG4gICAgbGFiZWwge1xuICAgICAgICBtYXJnaW4tdG9wOiAxcmVtICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIFxuICAgIC5yZXF1aXJlZCB7XG4gICAgICAgIGNvbG9yOiBibHVlO1xuICAgICAgICBmbG9hdDogcmlnaHQ7XG4gICAgICAgIGNvbG9yOiBsaWdodHNreWJsdWU7XG4gICAgfVxuICAgIC5yZXF1aXJlZC52YWxpZCB7XG4gICAgICAgIGNvbG9yOiBncmVlbjtcbiAgICB9XG4gICAgXG4gICAgLnJlcXVpcmVkLmludmFsaWQge1xuICAgICAgICBjb2xvcjogcGx1bTtcbiAgICB9ICBcblxuICAgIC5zdGF0dXMtdW50b3VjaCB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgyMDAsIDIwMCwgMjAwLCAwLjYpICFpbXBvcnRhbnQ7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KSBpbnNldCwgMCAwIDhweCByZ2JhKDIwMCwgMjAwLCAyMDAsIDAuNikgIWltcG9ydGFudDtcbiAgICAgICAgY29sb3I6ICM2OTY5NjkgIWltcG9ydGFudDtcbiAgICB9XG5cbiAgICBpbnB1dDpmb2N1cyB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSg4MiwxNjgsMjM2LDAuOCkgO1xuICAgICAgICBib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSkgaW5zZXQsIDAgMCA4cHggcmdiYSg4MiwxNjgsMjM2LDAuOCkgIWltcG9ydGFudDtcbiAgICAgICAgdHJhbnNpdGlvbjogYm9yZGVyIDAuMnMgbGluZWFyIDBzLCBib3gtc2hhZG93IDAuMnMgbGluZWFyIDBzO1xuICAgICAgICBjb2xvcjogZGFya3NsYXRlYmx1ZSAhaW1wb3J0YW50O1xuICAgICAgICBAZXh0ZW5kIHNoYWRvdy10cmFuc2l0aW9uO1xuICAgIH1cblxuICAgIC5zdGF0dXMtdmFsaWQge1xuICAgICAgICBib3JkZXItY29sb3I6IHJnYmEoMTU0LCAyMDUsIDUwLCAwLjYpIWltcG9ydGFudDtcbiAgICAgICAgYm94LXNoYWRvdzogMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpIGluc2V0LCAwIDAgOHB4IHJnYmEoMTU0LCAyMDUsIDUwLCAwLjYpIWltcG9ydGFudDtcbiAgICAgICAgQGV4dGVuZCBzaGFkb3ctdHJhbnNpdGlvbjtcbiAgICB9XG5cbiAgICAuc3RhdHVzLWludmFsaWQge1xuICAgICAgICBib3JkZXItY29sb3I6IHJnYmEoMTU0LCAxNywgNjksIDAuNik7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KSBpbnNldCwgMCAwIDhweCByZ2JhKDE1NCwgMTcsIDY5LCAwLjYpIWltcG9ydGFudDtcbiAgICAgICAgY29sb3I6IHJnYigxNTQsIDE3LCA2OSk7XG4gICAgICAgIEBleHRlbmQgc2hhZG93LXRyYW5zaXRpb247XG4gICAgfVxuXG59XG4iLCIvKiBcbiAqIENvcHlyaWdodCAoQykgMjAxNSBcIklvVC5iemhcIlxuICogQXV0aG9yIFwiRnVsdXAgQXIgRm9sbFwiXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiAqL1xuXG5AaW1wb3J0IFwiYXBwL2liei1taXhpbnNcIjtcblxuLy8gcGxhY2UgaGVyZSB5b3VyIHN1Ym1pdCBidXR0b25zIGN1c3RvbWl6YXRpb25cbmFwcGxpLWJ1dHRvbiB7XG4gICAgQGluY2x1ZGUgaWJ6LWJ1dHRvbihncmV5LDFyZW0pXG4gICAgaW1nIHtcbiAgICAgICAgaGVpZ2h0OiAzcmVtO1xuICAgIH1cbn1cbiIsIi8qIFxuICogQ29weXJpZ2h0IChDKSAyMDE1IFwiSW9ULmJ6aFwiXG4gKiBBdXRob3IgXCJGdWx1cCBBciBGb2xsXCJcbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuICovXG5cbkBpbXBvcnQgXCJhcHAvaWJ6LW1peGluc1wiO1xuXG5cbmxpbmstYnV0dG9uIHtAaW5jbHVkZSBpYnotYnV0dG9uKCMzMzY2ZmYsMXJlbSl9O1xuXG4vL3BhbGUgYmx1ZSBmb3Igc2Vjb25kYXR5IGxpbmtcbmxpbmstYnV0dG9uLnNlY29uZGFyeSB7QGluY2x1ZGUgaWJ6LWJ1dHRvbigjOTliM2ZmLDFyZW0pfTtcblxuIiwiLyogXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgXCJJb1QuYnpoXCJcbiAqIEF1dGhvciBcIkZ1bHVwIEFyIEZvbGxcIlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4gKiBcbiAqIFJlZmVyZW5jZTogaHR0cDovL3d3dy5ncmV5d3l2ZXJuLmNvbS8/cG9zdD0zMzdcbiAqL1xuXG5AaW1wb3J0IFwiYXBwL2liei1taXhpbnNcIjtcblxuXG5saW5rLWJ1dHRvbiB7QGluY2x1ZGUgaWJ6LWJ1dHRvbigjMzM2NmZmLDFyZW0pfTtcblxuLy8gTW9kYWwgc2hvdWxkIGJlIHJlbGF0aXZlIGFuZCB0aXAtbW9kYWwtcG9wdXAgYWJzb2x1dGVcbnRpcC1tb2RhbCB7XG4gICAgcG9zaXRpb246cmVsYXRpdmU7XG59XG5cbi50aXAtbW9kYWwtcG9wdXAge1xuICAgIC8vdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgIHdpZHRoOiAyMHJlbTtcbiAgICBwb3NpdGlvbjphYnNvbHV0ZTtcbiAgICB0b3A6MWVtO1xuICAgIHBhZGRpbmc6IDAuMmVtIDAuNmVtO1xuICAgIGJvcmRlcjoxcHggc29saWQgIzk5NjYzMztcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiNlNWZmZmY7XG4gICAgY29sb3I6IzAwMDtcbiAgICBvcGFjaXR5OjA7XG4gICAgdHJhbnNpdGlvbjp2aXNpYmlsaXR5IC41cyBsaW5lYXIgMXMsb3BhY2l0eSAxcyBsaW5lYXI7XG4gICAgYm9yZGVyLXJhZGl1czogNXB4O1xuICAgIGkge1xuICAgICAgICBtYXJnaW46IDAgLjNyZW0gMCAwO1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmU7XG4gICAgfVxufVxuXG50b2tlbi1yZWZyZXNoIHtcbiAgICBAaW5jbHVkZSBpYnotYnV0dG9uKGdyZXksMXJlbSlcbiAgICBpIHttYXJnaW4tbGVmdDogLjVyZW07fVxuICAgIG1hcmdpbi1yaWdodDogMXJlbTtcbn1cblxudG9rZW4tcmVmcmVzaC5vbmxpbmUge1xuICAgIGNvbG9yOiAjMDA2NmNjO1xuICAgIGkge2NvbG9yOiBsaW1lO30gICAgXG59XG5cbnRva2VuLXJlZnJlc2gub2ZmbGluZSB7XG4gICAgY29sb3I6ICNmZjAwZmY7XG4gICAgaSB7Y29sb3I6IHJlZDt9ICAgIFxufVxuIiwiLypcbiAqIGliei1EYXRlcGlja2VyIGZvciBGb3VuZGF0aW9uXG4gKlxuICogQXV0aG9yOiBGdWx1cCBBciBGb2xsXG4gKiBEYXRlICA6IE1hcmNoLTIwMTVcbiAqIE9iamVjdDogU0FTUyBzdHlsZXNoZWV0LCBjdXN0b21pemVkIHRvIEZvdW5kYXRpb25cbiAqIFJlZmVyZW5jZXM6IGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vc3RyaXBlcy1jc3MvXG4gKlxuICovXG5AaW1wb3J0IFwiYXBwL2liei1taXhpbnNcIjtcblxuLnJhbmdlLXNsaWRlci1oYW5kbGUge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMTtcbiAgdG9wOiAtMC4ycmVtO1xuICB3aWR0aDogMnJlbTtcbiAgaGVpZ2h0OiAxLjM3NXJlbTtcbiAgYm9yZGVyOiAxcHggc29saWQgbm9uZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBiYWNrZ3JvdW5kOiAjMDA4Y2JhO1xufVxuXG4ucmFuZ2Utc2xpZGVyLnJhZGl1cywgLnJhbmdlLXNsaWRlci1oYW5kbGUge1xuICBiYWNrZ3JvdW5kOiAjMDA4Y2JhO1xuICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDNweDtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xufVxuXG4ucmFuZ2Utc2xpZGVyLWFjdGl2ZS1zZWdtZW50IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB0b3A6IDAuMDdyZW07XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgaGVpZ2h0OiAwLjgwcmVtO1xuICBiYWNrZ3JvdW5kOiAjZTVlNWU1O1xufVxuXG4uaWJ6LXJhbmdlLXNsaWRlciB7XG4gICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDE1NCwgMjA1LCA1MCwgMC42KSAhaW1wb3J0YW50O1xuICAgaGVpZ2h0OiAxcmVtO1xuICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgXG4gIC5yYW5nZS1zbGlkZXItYWN0aXZlLXNlZ21lbnQge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoODIsIDE2OCwgMjAwLCAwLjYpO1xuICB9XG4gIFxuICAmLWRpc3BsYXkge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoODIsIDE2OCwgMjAwLCAwLjYpICFpbXBvcnRhbnQ7XG4gICAgd2lkdGggOiA0cmVtICFpbXBvcnRhbnQ7XG4gICAgcGFkZGluZzogLjI1cmVtO1xuICAgIHRleHQtYWxpZ246Y2VudGVyXG4gICB9XG5cbiAgICYtc3RhcnQsJi1zdG9wIHtcbiAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgIHBhZGRpbmctdG9wOiAycHg7XG4gICBoZWlnaHQ6IDk1JTtcbiAgIGJhY2tncm91bmQ6IHJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQoXG4gICAgNDVkZWcsXG4gICAgIzYwNmRiYyxcbiAgICAjNjA2ZGJjIDEwcHgsXG4gICAgIzQ2NTI5OCAxMHB4LFxuICAgICM0NjUyOTggMjBweFxuICApO31cblxufVxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 */ +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0eWxlcy9hcHAvaWJ6LWdsb2JhbC5zY3NzIiwic3R5bGVzL2FwcC9faWJ6LW1peGlucy5zY3NzIiwicGFnZXMvRGFzaGJvYXJkL0Rhc2hib2FyZE1vZHVsZS5zY3NzIiwid2lkZ2V0cy9BY3Rpb25CdXR0b25zL0FjdGlvbkJ1dHRvbnMuc2NzcyIsIndpZGdldHMvRm9ybUlucHV0L0Zvcm1JbnB1dC5zY3NzIiwid2lkZ2V0cy9OYXZpZ2F0aW9uL05hdmlnYXRpb24uc2NzcyIsIndpZGdldHMvTm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb25zLnNjc3MiLCJ3aWRnZXRzL1JhbmdlU2xpZGVycy9SYW5nZXNsaWRlci5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW9CYSxjQUNULE1BQU8sTUNEUCxRQUFTLGFBQ1QsT0FBVyxJQUFNLE1BQUMsUUFDbEIsV0FBZSxJQUFJLElBQUksSUFBQyxLQUN4QixNRERvQixLQ0VwQixjQUFlLElBQ2YsV0FBWSxPQUNaLFFBQVMsRUFBQSxNQUNULE9BQU8sTUFDUCxXQUFZLFFBQ1gsZ0JBQ0csY0FBZSxNQUNmLFVBWnlCLEtBY3pCLG1CQUFFLFVBQVcsS0FFVixvQkFDTCxXQUFZLFFBQ1osT0FBVyxJQUFNLE1BQUMsUURaaEIsU0FDTixpQkFBa0IscUJBR1IsYUNwQlIsT0FBUSxJQUFBLE1BQUEsa0JBQ1IsY0FBZSxJQUlmLFVBQVcsY0FDWCxPQUFRLE1BQ1IsV0FBWSxxQkRnQkYsd0JBQ04sUUFBUyxNQUNULFVBQVcsT0FLSCxpQkFDWixNQUFPLEtBQ1AsY0FBZSxJQUdULFdBQ04sTUFBTyxnQkFHRixVQUNMLE1BQU87QUUxQkUsY0FDVCxRQUFTLE1BQ1QsTUFBTyxNQUNQLE9BQVEsTUFBQSxLQUFBLEVBQUEsRUFHRCxZQUNQLE9BQVUsT0FFSyw0QkFDYixNQUFPLEtBQ1AsTUFBTyxLQUdPLDJCQUNaLFFBQVMsTUFDVCxPQUFRLE1BQUEsTUFHUCxrQkFDRCxNQXRCSyxJQXVCTCxPQUFXLElBQU0sTUFBQyxLQUVk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Yix3QkFBZSx1QkFpQmQsUUFBUyxhQUNULFNBQVUsU0FDVixZQUFhLElBQ2IsT0FBUSxJQUNSLFdBQVkiLCJmaWxlIjoiQUZCY2xpZW50LmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgKEMpIDIwMTUgXCJJb1QuYnpoXCJcbkF1dGhvciBcIkZ1bHVwIEFyIEZvbGxcIlxuXG5UaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbnRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4oYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG5UaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbmJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG5NRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG5HTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuXG5Zb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4qL1xuXG5AaW1wb3J0IFwiYXBwL2liei1taXhpbnNcIjtcblxuc3VibWl0LWJ1dHRvbiB7XG4gICAgZmxvYXQ6IHJpZ2h0O1xuICAgIEBpbmNsdWRlIGliei1idXR0b24oZ3JleSk7XG59XG5cbnpmLW1vZGFsIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgxODAsMTgwLDE4MCwuNSk7XG59XG5cbi5ib3gtY29udGVudCB7XG4gICAgIEBpbmNsdWRlIGliei1ib3gtY29udGVudDtcblxuICAgIC5ib3gtdGl0bGUge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgZm9udC1zaXplOiAxLjNyZW07XG4gICAgfVxufVxuXG4vLyBDaGFuZ2UgTm90aWZpY2F0aW9ucyBkZWZhdWx0IHNpemVcbi51aS1ub3RpZmljYXRpb24ge1xuICAgIHdpZHRoOiBhdXRvO1xuICAgIGJvcmRlci1yYWRpdXM6IDVweDtcbn1cblxuLmliei1yaWdodCB7XG4gICAgZmxvYXQ6IHJpZ2h0ICFpbXBvcnRhbnQ7XG59XG5cbi5pYnotbGVmdCB7XG4gICAgZmxvYXQ6IGxlZnQgIWltcG9ydGFudDtcbn0iLCIvKlxuICAgIEV2ZXJ5IFNDU1MgZmlsZXMgd2lsbCBiZSBpbmplY3RlZCBpbnRvIG1haW4gSFRNTCBwYWdlXG4qL1xuJXNoYWRvdy10cmFuc2l0aW9uIHtcbiAgICB0cmFuc2l0aW9uOiBib3JkZXIgMC4ycyBsaW5lYXIgMHMsIGJveC1zaGFkb3cgMC4ycyBsaW5lYXIgMHM7XG4gICAgYm9yZGVyLXJhZGl1czogNXB4O1xufVxuXG5AbWl4aW4gaWJ6LWJveC1jb250ZW50IHtcbiAgICBib3JkZXI6IDJweCBzb2xpZCBnYWluc2Jvcm8gIWltcG9ydGFudDtcbiAgICBib3JkZXItcmFkaXVzOiA1cHg7XG4gICAgXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xuICAgIG1pbi13aWR0aDogOTglICFpbXBvcnRhbnQ7IFxuICAgIG1hcmdpbjogLjVyZW0gLjVyZW0gLjVyZW0gLjVyZW07XG4gICAgYmFja2dyb3VuZDogcmdiYSgyMDAsMjA1LDIwMCwuMyk7XG59XG5cbkBtaXhpbiBpYnotYnV0dG9uICgkY29sb3IsICRzaXplOjJyZW0pIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgYm9yZGVyOiAxcHggc29saWQgZGFya2VuKCRjb2xvciwxMCUpO1xuICAgIGJveC1zaGFkb3c6IDJweCAycHggMXB4IGFkanVzdC1odWUoJGNvbG9yLDIwZGVnKTtcbiAgICBjb2xvcjogJGNvbG9yO1xuICAgIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gICAgcGFkZGluZzogMHJlbSAuNXJlbSAwcmVtIC41cmVtO1xuICAgIG1hcmdpbjouNXJlbTtcbiAgICBiYWNrZ3JvdW5kOiBsaWdodGVuKCM5NDk0YjcsIDIwJSk7XG4gICAgaSB7XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDAuM3JlbTtcbiAgICAgICAgZm9udC1zaXplOiAkc2l6ZTtcbiAgICB9XG4gICAgc3BhbiB7Zm9udC1zaXplOiAxcmVtfVxuICAgIFxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogbGlnaHRlbigkY29sb3IsIDQ1JSk7XG4gICAgICBib3JkZXI6IDJweCBzb2xpZCBkYXJrZW4oJGNvbG9yLDIwJSk7XG4gICAgICBcbiAgICB9XG59XG5cbkBtaXhpbiBpYnotaW5wdXQtYWxlcnQgKCRjb2xvciwgJGJhY2tncm91bmQpIHtcbiAgICBwb3NpdGlvbiAgOmZpeGVkO1xuICAgIG1hcmdpbjogLTIuMnJlbSAwIDAgMTVyZW07XG4gICAgYm9yZGVyLXJhZGl1czogNXB4O1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICBib3JkZXItY29sb3I6IGRhcmtlbigkYmFja2dyb3VuZCwxMCUpO1xuICAgIGNvbG9yOiAkY29sb3I7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJGJhY2tncm91bmQgIWltcG9ydGFudDtcbiAgICBwYWRkaW5nOiAwLjJyZW0gIWltcG9ydGFudDtcbn1cbiIsIi8qIFxuICogQ29weXJpZ2h0IChDKSAyMDE1IFwiSW9ULmJ6aFwiXG4gKiBBdXRob3IgXCJGdWx1cCBBciBGb2xsXCJcbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuICovXG5cbkBpbXBvcnQgXCJhcHAvaWJ6LW1peGluc1wiO1xuXG4kQ09MT1JfU1VDQ0VTUzogZ3JlZW47XG4kQ09MT1JfRkFJTDogcmVkO1xuXG50b2tlbi1yZWZyZXNoIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBmbG9hdDogcmlnaHQ7XG4gICAgbWFyZ2luOiAuNXJlbSAxcmVtIDAgMDtcbn1cblxuLmJ1dHRvbi1ib3gge1xuICAgIGhlaWdodCAgOiA0LjVyZW07XG4gICAgXG4gICAgLnNlc3Npb24tYnV0dG9uIHtcbiAgICAgIGZsb2F0OiBsZWZ0O1xuICAgICAgd2lkdGg6IDVyZW07XG4gICAgfTtcbiAgICBcbiAgICAucmVzcG9uc2UgPiBzcGFue1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgbWFyZ2luOiAuM3JlbSAuNXJlbSAuM3JlbSAuNXJlbTsgICAgICAgIFxuICAgIH0gIFxuICAgIFxuICAgIC5mYWlsIHsgXG4gICAgICAgIGNvbG9yOiRDT0xPUl9GQUlMO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCBkYXJrZW4oJENPTE9SX0ZBSUwsMTAlKTtcbiAgICB9XG4gICAgLnN1Y2Nlc3MgeyBcbiAgICAgICAgY29sb3I6JENPTE9SX1NVQ0NFU1M7IFxuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCBkYXJrZW4oJENPTE9SX1NVQ0NFU1MsMTAlKTtcbiAgICB9XG5cbn07XG5cbi5tZXNzYWdlLWJveCB7XG4gICAgaGVpZ2h0ICA6IGF1dG87XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgZm9udC1zaXplOiAuNzVyZW07XG4gIFxuICAgIC5yZXNwb25zZSB7XG4gICAgICAgIC5lcnItbm8geyBjb2xvcjpncmV5OyB9XG4gICAgICAgIC5yZXMuZXJyLW9rIHsgY29sb3I6IGJsdWU7IH1cbiAgICAgICAgLnJlcS5lcnItb2sgeyBjb2xvcjpibHVldmlvbGV0OyB9XG4gICAgICAgIC5zdGF0dXMuZXJyLW9rIHsgY29sb3I6Z3JlZW47IH1cbiAgICAgICAgLnN0YXR1cy5lcnItZnggeyBjb2xvcjpyZWQ7IH0gICAgICAgXG4gICAgfSBcbiAgICBcblxufTtcblxuXG5cbiIsIi8qIFxuICogQ29weXJpZ2h0IChDKSAyMDE1IFwiSW9ULmJ6aFwiXG4gKiBBdXRob3IgXCJGdWx1cCBBciBGb2xsXCJcbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuICovXG5cbkBpbXBvcnQgXCJhcHAvaWJ6LW1peGluc1wiO1xuXG4vLyBwbGFjZSBoZXJlIHlvdXIgc3VibWl0IGJ1dHRvbnMgY3VzdG9taXphdGlvblxuYXBwbGktYnV0dG9uIHtcbiAgICBAaW5jbHVkZSBpYnotYnV0dG9uKGdyZXksMXJlbSlcbiAgICBpbWcge1xuICAgICAgICBoZWlnaHQ6IDNyZW07XG4gICAgfVxufVxuIiwiLypcbiAgICBTYW1wbGUgb2Ygc3R5bGUgb3ZlcmxvYWQgZm9yIGEgc3BlY2lmaWMgd2lkZ2V0XG5cbiAgICBOb3RlOiB0aGlzIFNDU1MgaXMgaW5qZWN0ZWQgd2l0aCBtYWluIEhUTUwgcGFnZSwgaXQgc2NvcGUgc2hvdWxkIGJlIHJlZHVjZVxuICAgIHRvIGEgc3BlY2lmaWMgd2lkZ2V0IG9yIGl0IHZhbHVlIHdpbGwgYmUgcHJvcGFnYXRlZCBhdCBhIGdsb2JhbCBsZXZlbC5cbiovXG5cbkBpbXBvcnQgXCJhcHAvaWJ6LW1peGluc1wiO1xuXG4udXBsb2FkLWZpbGUge1xuICAgIEBpbmNsdWRlIGliei1idXR0b24oZ3JleSwxcmVtKVxuICAgIGZsb2F0OiByaWdodDtcbiAgICBoZWlnaHQgIDogM3JlbTtcbiAgICBtYXJnaW46IDAuNXJlbTtcblxuICAgIGkgeyBmb250LXNpemU6IDJyZW19XG4gICAgXG4gICAgLmliei1yYW5nZS1zbGlkZXIge1xuICAgICAgICBoZWlnaHQ6IDEwJSAhaW1wb3J0YW50O1xuICAgICAgICBib3JkZXItcmFkaXVzOiA1cHg7XG4gICAgICAgIGJhY2tncm91bmQtY29sb3I6IGxpZ2h0Z3JleSAhaW1wb3J0YW50O1xuICAgIFxuICAgICAgICAucmFuZ2Utc2xpZGVyLWhhbmRsZSB7XG4gICAgICAgICAgICB3aWR0aDogMTAlICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICBoZWlnaHQ6IDEwMCUgIWltcG9ydGFudDtcbiAgICAgICAgICAgIG1hcmdpbi10b3A6IC4ycmVtO1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcHVycGxlICFpbXBvcnRhbnQ7XG4gICAgICAgIH1cblxuICAgICAgICAucmFuZ2Utc2xpZGVyLWFjdGl2ZS1zZWdtZW50IHtcbiAgICAgICAgICAgIGhlaWdodDogODAlICFpbXBvcnRhbnQ7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGdyZWVuO1xuICAgICAgICB9XG4gICAgfVxuXG59XG5cbmlucHV0LXRleHQge1xuICBcbiAgICBhbGVydCB7QGluY2x1ZGUgaWJ6LWlucHV0LWFsZXJ0KGRhcmtibHVlLCByZ2JhKDIwMCwgMjAwLCAyMDAsIDAuNikpfTtcblxuICAgIGlucHV0IHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogLjVyZW0gIWltcG9ydGFudDtcbiAgICB9XG5cbiAgICBsYWJlbCB7XG4gICAgICAgIG1hcmdpbi10b3A6IDFyZW0gIWltcG9ydGFudDtcbiAgICB9XG4gICAgXG4gICAgLnJlcXVpcmVkIHtcbiAgICAgICAgY29sb3I6IGJsdWU7XG4gICAgICAgIGZsb2F0OiByaWdodDtcbiAgICAgICAgY29sb3I6IGxpZ2h0c2t5Ymx1ZTtcbiAgICB9XG4gICAgLnJlcXVpcmVkLnZhbGlkIHtcbiAgICAgICAgY29sb3I6IGdyZWVuO1xuICAgIH1cbiAgICBcbiAgICAucmVxdWlyZWQuaW52YWxpZCB7XG4gICAgICAgIGNvbG9yOiBwbHVtO1xuICAgIH0gIFxuXG4gICAgLnN0YXR1cy11bnRvdWNoIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDIwMCwgMjAwLCAyMDAsIDAuNikgIWltcG9ydGFudDtcbiAgICAgICAgYm94LXNoYWRvdzogMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpIGluc2V0LCAwIDAgOHB4IHJnYmEoMjAwLCAyMDAsIDIwMCwgMC42KSAhaW1wb3J0YW50O1xuICAgICAgICBjb2xvcjogIzY5Njk2OSAhaW1wb3J0YW50O1xuICAgIH1cblxuICAgIGlucHV0OmZvY3VzIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDgyLDE2OCwyMzYsMC44KSA7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDc1KSBpbnNldCwgMCAwIDhweCByZ2JhKDgyLDE2OCwyMzYsMC44KSAhaW1wb3J0YW50O1xuICAgICAgICB0cmFuc2l0aW9uOiBib3JkZXIgMC4ycyBsaW5lYXIgMHMsIGJveC1zaGFkb3cgMC4ycyBsaW5lYXIgMHM7XG4gICAgICAgIGNvbG9yOiBkYXJrc2xhdGVibHVlICFpbXBvcnRhbnQ7XG4gICAgICAgIEBleHRlbmQgc2hhZG93LXRyYW5zaXRpb247XG4gICAgfVxuXG4gICAgLnN0YXR1cy12YWxpZCB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgxNTQsIDIwNSwgNTAsIDAuNikhaW1wb3J0YW50O1xuICAgICAgICBib3gtc2hhZG93OiAwIDFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjA3NSkgaW5zZXQsIDAgMCA4cHggcmdiYSgxNTQsIDIwNSwgNTAsIDAuNikhaW1wb3J0YW50O1xuICAgICAgICBAZXh0ZW5kIHNoYWRvdy10cmFuc2l0aW9uO1xuICAgIH1cblxuICAgIC5zdGF0dXMtaW52YWxpZCB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgxNTQsIDE3LCA2OSwgMC42KTtcbiAgICAgICAgYm94LXNoYWRvdzogMCAxcHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wNzUpIGluc2V0LCAwIDAgOHB4IHJnYmEoMTU0LCAxNywgNjksIDAuNikhaW1wb3J0YW50O1xuICAgICAgICBjb2xvcjogcmdiKDE1NCwgMTcsIDY5KTtcbiAgICAgICAgQGV4dGVuZCBzaGFkb3ctdHJhbnNpdGlvbjtcbiAgICB9XG5cbn1cbiIsIi8qIFxuICogQ29weXJpZ2h0IChDKSAyMDE1IFwiSW9ULmJ6aFwiXG4gKiBBdXRob3IgXCJGdWx1cCBBciBGb2xsXCJcbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VcbiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuICovXG5cbkBpbXBvcnQgXCJhcHAvaWJ6LW1peGluc1wiO1xuXG5cbmxpbmstYnV0dG9uIHtAaW5jbHVkZSBpYnotYnV0dG9uKCMzMzY2ZmYsMXJlbSl9O1xuXG4vL3BhbGUgYmx1ZSBmb3Igc2Vjb25kYXR5IGxpbmtcbmxpbmstYnV0dG9uLnNlY29uZGFyeSB7QGluY2x1ZGUgaWJ6LWJ1dHRvbigjOTliM2ZmLDFyZW0pfTtcblxuIiwiLyogXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgXCJJb1QuYnpoXCJcbiAqIEF1dGhvciBcIkZ1bHVwIEFyIEZvbGxcIlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4gKiBcbiAqIFJlZmVyZW5jZTogaHR0cDovL3d3dy5ncmV5d3l2ZXJuLmNvbS8/cG9zdD0zMzdcbiAqL1xuXG5AaW1wb3J0IFwiYXBwL2liei1taXhpbnNcIjtcblxuXG5saW5rLWJ1dHRvbiB7QGluY2x1ZGUgaWJ6LWJ1dHRvbigjMzM2NmZmLDFyZW0pfTtcblxuLy8gTW9kYWwgc2hvdWxkIGJlIHJlbGF0aXZlIGFuZCB0aXAtbW9kYWwtcG9wdXAgYWJzb2x1dGVcbnRpcC1tb2RhbCB7XG4gICAgcG9zaXRpb246cmVsYXRpdmU7XG59XG5cbi50aXAtbW9kYWwtcG9wdXAge1xuICAgIC8vdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgIHdpZHRoOiAyMHJlbTtcbiAgICBwb3NpdGlvbjphYnNvbHV0ZTtcbiAgICB0b3A6MWVtO1xuICAgIHBhZGRpbmc6IDAuMmVtIDAuNmVtO1xuICAgIGJvcmRlcjoxcHggc29saWQgIzk5NjYzMztcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiNlNWZmZmY7XG4gICAgY29sb3I6IzAwMDtcbiAgICBvcGFjaXR5OjA7XG4gICAgdHJhbnNpdGlvbjp2aXNpYmlsaXR5IC41cyBsaW5lYXIgMXMsb3BhY2l0eSAxcyBsaW5lYXI7XG4gICAgYm9yZGVyLXJhZGl1czogNXB4O1xuICAgIGkge1xuICAgICAgICBtYXJnaW46IDAgLjNyZW0gMCAwO1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmU7XG4gICAgfVxufVxuXG50b2tlbi1yZWZyZXNoIHtcbiAgICBAaW5jbHVkZSBpYnotYnV0dG9uKGdyZXksMXJlbSlcbiAgICBpIHttYXJnaW4tbGVmdDogLjVyZW07fVxuICAgIG1hcmdpbi1yaWdodDogMXJlbTtcbn1cblxudG9rZW4tcmVmcmVzaC5vbmxpbmUge1xuICAgIGNvbG9yOiAjMDA2NmNjO1xuICAgIGkge2NvbG9yOiBsaW1lO30gICAgXG59XG5cbnRva2VuLXJlZnJlc2gub2ZmbGluZSB7XG4gICAgY29sb3I6ICNmZjAwZmY7XG4gICAgaSB7Y29sb3I6IHJlZDt9ICAgIFxufVxuIiwiLypcbiAqIGliei1EYXRlcGlja2VyIGZvciBGb3VuZGF0aW9uXG4gKlxuICogQXV0aG9yOiBGdWx1cCBBciBGb2xsXG4gKiBEYXRlICA6IE1hcmNoLTIwMTVcbiAqIE9iamVjdDogU0FTUyBzdHlsZXNoZWV0LCBjdXN0b21pemVkIHRvIEZvdW5kYXRpb25cbiAqIFJlZmVyZW5jZXM6IGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vc3RyaXBlcy1jc3MvXG4gKlxuICovXG5AaW1wb3J0IFwiYXBwL2liei1taXhpbnNcIjtcblxuLnJhbmdlLXNsaWRlci1oYW5kbGUge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMTtcbiAgdG9wOiAtMC4ycmVtO1xuICB3aWR0aDogMnJlbTtcbiAgaGVpZ2h0OiAxLjM3NXJlbTtcbiAgYm9yZGVyOiAxcHggc29saWQgbm9uZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBiYWNrZ3JvdW5kOiAjMDA4Y2JhO1xufVxuXG4ucmFuZ2Utc2xpZGVyLnJhZGl1cywgLnJhbmdlLXNsaWRlci1oYW5kbGUge1xuICBiYWNrZ3JvdW5kOiAjMDA4Y2JhO1xuICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDNweDtcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xufVxuXG4ucmFuZ2Utc2xpZGVyLWFjdGl2ZS1zZWdtZW50IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB0b3A6IDAuMDdyZW07XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgaGVpZ2h0OiAwLjgwcmVtO1xuICBiYWNrZ3JvdW5kOiAjZTVlNWU1O1xufVxuXG4uaWJ6LXJhbmdlLXNsaWRlciB7XG4gICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDE1NCwgMjA1LCA1MCwgMC42KSAhaW1wb3J0YW50O1xuICAgaGVpZ2h0OiAxcmVtO1xuICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgXG4gIC5yYW5nZS1zbGlkZXItYWN0aXZlLXNlZ21lbnQge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoODIsIDE2OCwgMjAwLCAwLjYpO1xuICB9XG4gIFxuICAmLWRpc3BsYXkge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoODIsIDE2OCwgMjAwLCAwLjYpICFpbXBvcnRhbnQ7XG4gICAgd2lkdGggOiA0cmVtICFpbXBvcnRhbnQ7XG4gICAgcGFkZGluZzogLjI1cmVtO1xuICAgIHRleHQtYWxpZ246Y2VudGVyXG4gICB9XG5cbiAgICYtc3RhcnQsJi1zdG9wIHtcbiAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgIHBhZGRpbmctdG9wOiAycHg7XG4gICBoZWlnaHQ6IDk1JTtcbiAgIGJhY2tncm91bmQ6IHJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQoXG4gICAgNDVkZWcsXG4gICAgIzYwNmRiYyxcbiAgICAjNjA2ZGJjIDEwcHgsXG4gICAgIzQ2NTI5OCAxMHB4LFxuICAgICM0NjUyOTggMjBweFxuICApO31cblxufVxuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 */ diff --git a/afm-client/dist.prod/opa/AFBclient.min.js b/afm-client/dist.prod/opa/AFBclient.min.js index 2535295..0649d11 100644 --- a/afm-client/dist.prod/opa/AFBclient.min.js +++ b/afm-client/dist.prod/opa/AFBclient.min.js @@ -1,2 +1,2 @@ -!function(){"use strict";function e(e){var t=[],a=[];this.getId=function(){return e.sliderid},this.getCbHandle=function(){return e.cbhandle},this.getView=function(n){return n||(n=0),e.value[n]===t[n]?a[n]:(t[n]=e.value[n],e.formatter?a[n]=e.formatter(e.value[n],e.ctrlhandle):a[n]=e.value[n],a[n])},this.updateClass=function(t,a){e.updateClass(t,a)},this.forceRefresh=function(t){e.forceRefresh(t)},this.getValue=function(t){return t||(t=0),e.value[t]},this.getRelative=function(t){return t||(t=0),e.relative[t]},this.setValue=function(t,a){a||(a=0),e.setValue(t,a)},this.setDisable=function(t){e.setDisable(t)}}var t=angular.module("RangeSlider",[]);t.directive("rangeSlider",["$log","$document","$timeout",function(t,a,n){function i(t,i,s,l){t.initWidget=function(e){e.byStep&&(t.byStep=parseInt(e.byStep)),e.notMore&&(t.notMore=parseInt(e.notMore)),e.notLess&&(t.notLess=parseInt(e.notLess)),e.id&&(t.sliderid=e.id),void 0!==e.value&&(t.value=e.value,t.forceRefresh(50))},t.forceRefresh=function(e){var a=t.value;t.value=[void 0,void 0],n(function(){t.setValue(a[0],0),t.dual&&t.setValue(a[1],1)},e)},t.updateClass=function(e,t){t?i.addClass(e):i.removeClass(e)},t.setDisable=function(e){e?(i.addClass("disable"),t.handles[0].css("visibility","hidden"),t.dual&&t.handles[1].css("visibility","hidden")):(i.removeClass("disable"),t.handles[0].css("visibility","visible"),t.dual&&t.handles[1].css("visibility","visible"))},t.normalize=function(e){var a,n=t.notMore-t.notLess,i=e*n;if(t.byStep>0){var s=(i-i%t.byStep)/t.byStep,l=i%t.byStep,o=l>=.5*t.byStep?t.byStep:0;return a=s*t.byStep+o+t.notLess}if(t.byStep<0){var r=Math.pow(10,-1*t.byStep);return a=t.notLess+parseInt(i*r)/r}return i},t.getValue=function(e,a){t.vertical?t.relative[a]=(e-t.bounds.handles[a].getBoundingClientRect().height)/(t.bounds.bar.getBoundingClientRect().height-t.bounds.handles[a].getBoundingClientRect().height):t.relative[a]=e/(t.bounds.bar.getBoundingClientRect().width-t.bounds.handles[a].getBoundingClientRect().width);var n=t.normalize(t.relative[a]);n!==t.value[a]&&(nt.stopValue&&(n=t.stopValue),t.formatter?t.viewValue=t.formatter(n,t.ctrlhandle):t.viewValue=n,t.displays[a]&&t.displays[a].html(t.viewValue),t.value[a]=n,l&&l.$setViewValue(t.viewValue),t.$apply(),n>t.startValue&&nt.value[0]&&(t.dual?t.setValue(e,1):t.setValue(e,0)),t.vertical?(a=t.bounds.bar.getBoundingClientRect().height*(e-t.notLess)/(t.notMore-t.notLess),t.start.css("height",a+"px")):(a=t.bounds.bar.getBoundingClientRect().width*(e-t.notLess)/(t.notMore-t.notLess),t.start.css("width",a+"px")),t.startValue=e},t.setStop=function(e){var a;et.notMore&&(e=t.notMore),e0&&t.$apply(t.setValue(t.value[t.actif]+t.byStep,t.actif)),t.byStep<0&&t.$apply(t.setValue(t.value[t.actif]+1/Math.pow(10,-1*t.byStep),t.actif)),t.callback&&t.callback(t.value[t.actif],t.ctrlhandle);break;case 37:case 40:t.byStep>0&&t.$apply(t.setValue(t.value[t.actif]-t.byStep,t.actif)),t.byStep<0&&t.$apply(t.setValue(t.value[t.actif]-1/Math.pow(10,-1*t.byStep),t.actif)),t.callback&&t.callback(t.value[t.actif],t.ctrlhandle);break;case 27:t.handles[t.actif][0].blur()}},t.moveHandle=function(e,a,n){var i;t.vertical?(i=t.bounds.bar.getBoundingClientRect().bottom-n,i>t.bounds.bar.getBoundingClientRect().height&&(i=t.bounds.bar.getBoundingClientRect().height),ii&&(i=0),a+t.bounds.handles[e].getBoundingClientRect().width>t.bounds.bar.getBoundingClientRect().right&&(i=t.bounds.bar.getBoundingClientRect().width-t.bounds.handles[e].getBoundingClientRect().width)),t.getValue(i,e),t.dual&&t.value[0]>t.value[1]&&(0===e?t.setValue(t.value[0],1):t.setValue(t.value[1],0))},t.focusCB=function(e){e?a.on("keydown",t.keydown):a.unbind("keydown",t.keydown)},t.touchBarCB=function(e){var a,n=0,i=e.changedTouches,s=t.value[n];if(e.preventDefault(),t.dual){a=t.vertical?(i[0].pageY-t.bounds.bar.getBoundingClientRect().bottom)/t.bounds.bar.getBoundingClientRect().height:(i[0].pageX-t.bounds.bar.getBoundingClientRect().left)/t.bounds.bar.getBoundingClientRect().width;var l=Math.abs(a-t.relative[0]),o=Math.abs(a-t.relative[1]);l>o&&(n=1)}t.moveHandle(n,i[0].pageX,i[0].pageY),t.callback&&s!==t.value[n]&&t.callback(t.value[n],t.ctrlhandle)},t.touchHandleCB=function(e,n){function s(e){e.preventDefault();for(var a=e.changedTouches,i=0;it.stopAt,t.stopAt&&t.setStop(t.stopAt)}),t.initialSettings(t.initial)},t.init(),t.$watch("inithook",function(){t.inithook&&t.inithook(t.ctrlhandle)}),t.$watch("initvalues",function(){t.initvalues&&t.initWidget(t.initvalues)}),t.$watch("ngModel",function(e){t.setValue(e,0)})}var s='
';return{restrict:"E",scope:{startAt:"=",stopAt:"=",callback:"=",formatter:"=",inithook:"=",cbhandle:"=",initvalues:"=",ngModel:"="},require:"?ngModel",template:s,replace:!0,link:i}}])}(),function(){"use strict";var e='
afb://{{hostname}}:{{httpdport}}
';angular.module("TokenRefresh",["AppConfig","ModalNotification"]).directive("tokenRefresh",["$timeout","$http","$location","Notification","AppConfig",function(t,a,n,i,s){function l(e,l,o){e.status=void 0,e.online=function(){l.addClass("online"),l.removeClass("offline")},e.offline=function(){l.addClass("offline"),l.removeClass("online")},e.onerror=function(t,a,n){e.status!==!1&&(i.warning({message:"AppFramework Binder Lost",delay:5e3}),e.offline()),e.status=0},e.onsuccess=function(t,a,n,l){e.status!==!0&&(t.request.token&&(s.session.token=t.request.token),t.request.uuid&&(s.session.uuid=t.request.uuid),t.request.timeout&&(s.session.timeout=t.request.timeout),i.success({message:"AppFramework Binder Back to Live",delay:3e3}),e.online(),e.callback&&e.callback()),e.status=1},e.getping=function(){var n=a.get(s.session.ping+"?token="+s.session.token);n.success(e.onsuccess),n.error(e.onerror),t(e.getping,1e3*s.session.pingrate)},e.refresh=function(){var n=a.get(s.session.refresh+"?token="+s.session.token);n.success(e.onsuccess),n.error(e.onerror),t(e.refresh,250*s.session.timeout)},e.tkcreate=function(){var t=a.get(s.session.create+"?token="+s.session.initial);t.success(e.onsuccess),t.error(e.onerror)},e.icon=o.icon||"fi-lightbulb",e.hostname=n.host(),e.httpdport=n.port(),e.autolog=JSON.parse(o.autolog||!1),e.autolog&&e.tkcreate(),t(e.getping,1e3*s.session.pingrate),t(e.refresh,250*s.session.timeout)}return{template:e,scope:{callback:"="},restrict:"E",link:l}}])}(),function(){"use strict";var e='
{{tip}}
';angular.module("ModalNotification",[]).directive("tipModal",["$timeout",function(t){function a(e,a,n){function i(){function a(){e.show&&e.modal.css({opacity:1,visibility:"visible"})}e.show=!0,e.timeout=t(a,e.delay)}function s(){e.show=!1,e.modal.css({opacity:0,visibility:"hidden"})}e.parent=a.parent(),e.modal=a.find("div"),e.icon=n.icon||"fi-lightbulb",e.parent.addClass("as-modal-tip"),e.parent.bind("click",s),e.parent.bind("focus",i),e.parent.bind("mouseover",i),e.parent.bind("mouseleave",s),e.parent.bind("blur",s),e.delay=n.delay||1e3}return{restrict:"E",template:e,link:a,scope:{tip:"="}}}])}(),function(){"use strict";var e='{{label}}';angular.module("LinkButton",[]).directive("linkButton",["$location",function(t){function a(e,a,n){e.clicked=function(){n.query?t.path(n.href).search(n.query):t.path(n.href)},e.icon=n.icon||"fi-link",e.label=n.label||"Jump",e.href=n.href||"/home",a.addClass(e.label.toLowerCase())}return{restrict:"E",template:e,link:a,scope:{}}}])}(),function(){"use strict";var e='
{{label}}
';angular.module("SubmitButton",[]).directive("submitButton",function(){function t(e,t,a){e.icon=a.icon||"fi-foot",e.label=a.label||"Next",t.addClass(e.label.toLowerCase())}return{restrict:"E",template:e,link:t,scope:{clicked:"="}}})}(),function(){"use strict";var e='
{{label}}
',t='×Application {{name}}';angular.module("AppliButton",[]).directive("appliButton",["AppConfig","AppCall","ModalFactory","Notification","$timeout",function(a,n,i,s,l){function o(e,o,r){e.clicked=function(){var a=function(){e.modal.deactivate(),l(function(){e.modal.destroy()},1e3)},r=function(t){switch(t){case"start":n.get("afm-main","start",{id:e.appliID},function(t){return 200!==t.status?(s.error({message:"Fail to start application="+e.label+" ID="+e.appliID,delay:5e3}),o.addClass("fail"),o.removeClass("success"),void e.callback(e.appliID,"/api/afm-main/start",t)):"AJB_reply"!==t.data.request.jtype&&"start"!==t.data.request.api?(s.error({message:"Invalid Respond to /opa/afm-main/start response.data="+t.data,delay:5e3}),o.addClass("fail"),o.removeClass("success"),void e.callback(e.appliID,"/api/afm-main/start",t)):(o.addClass("success"),o.removeClass("fail"),e.runID=t.data.response.runid,void e.callback(e.appliID,"/api/afm-main/start",t))});break;case"stop":}a()},u={animationIn:"slideInFromTop",contentScope:{action:r,close:a,icon:e.icon,label:e.label},template:t};e.modal=new i(u),e.modal.activate()},r.handle&&e.store[r.handle].name?(e.icon=a.paths.icons+e.store[r.handle].name.toLowerCase()+"-ico.png",e.label=e.store[r.handle].name,e.appliID=r.handle):(e.icon=a.paths.icons+"w3c-ico.png",e.label=r.handle),o.addClass(e.label.toLowerCase())}return{restrict:"E",template:e,link:o,scope:{callback:"=",store:"="}}}])}(),function(){"use strict";function e(e,t,a){var n=new XMLHttpRequest,i=new FormData;n.upload.onprogress=function(t){var a=Math.round(t.lengthComputable?100*t.loaded/t.total:0);e.slider&&e.slider.setValue(a)},n.onload=function(){e.divElem.addClass("success"),e.divElem.removeClass("error");var t={status:n.status,headers:n.getAllResponseHeaders()};e.callback(t)},n.onerror=function(){e.divElem.addClass("error"),e.divElem.removeClass("success")},n.onabort=function(){e.divElem.addClass("error"),e.divElem.removeClass("success");var t={status:n.status,headers:n.getAllResponseHeaders()};e.callback(t)},this.postfile=function(e){n.open("POST",e,!0),n.send(i)};for(var s=0;s1024*e.maxsize)setTimeout(a,100);else{var l=new FileReader;l.readAsArrayBuffer(this.file),l.onload=a,i.append(e.name,this.file,this.file.name)}}var t='
{{label}}
',a='Upload Application {{appname}} ?
',n='Invalid Application {{appname}} ?
';angular.module("UploadFiles",["AppConfig","ModalNotification","RangeSlider"]).directive("uploadAppli",["AppConfig","JQemu","Notification","ModalFactory","$timeout",function(i,s,l,o,r){function u(t,s,l){if(t.inputElem=s.find("input"),t.divElem=s.find("div"),t.imgClicked=function(){t.inputElem[0].click()},t.SliderInitCB=function(e){t.slider=e},t.UpLoadFile=function(s){var u,c,d,p=function(){u.postfile(l.posturl+"?token="+i.session.token),t.modal.deactivate(),r(function(){t.modal.destroy()},1e3)},f=function(){t.modal.deactivate(),r(function(){t.modal.destroy()},1e3)},g=function(e){if(e){var i=new JSZip(e.target.result),s=i.file("icon_128.png");s?(c=window.URL.createObjectURL(new Blob([s.asArrayBuffer()],{type:"image"})),d=a):(c=t.isnotvalid,d=n)}else u.file.size>1024*t.maxsize&&(c=t.istoobig,d=n),isNaN(u.file.size)&&(c=t.isnotvalid,d=n);var l={animationIn:"slideInFromTop",contentScope:{success:p,abandon:f,icon:c,appname:u.basename},template:d};t.modal=new o(l),t.modal.activate()};u=new e(t,s,g)},t.name=l.name||"appli",t.category=l.category||"appli",t.mimetype=l.accept||".wgt",t.maxsize=l.maxsize||1e5,t.regexp=new RegExp(l.accept+".*","i"),t.icon=l.icon||"fi-upload",t.label=l.label||"Upload",l.thumbnail?t.isnotvalid=i.paths[t.category]+l.isnotvalid:t.isnotvalid=i.paths[t.category]+"w3c-widget.png",l.istoobig?t.istoobig=i.paths[t.category]+l.istoobig:t.istoobig=i.paths[t.category]+"istoobig.png",t.noslider=l.noslider||!1,!l.posturl)throw new TypeError("file-upload %s posturl=/api/xxxx/xxxx required",t.attrs)}return{restrict:"E",template:t,link:u,scope:{callback:"="}}}])}(),function(){"use strict";var e='{{errmsg}}',t=/^(([^<>()[\]\.,;:\s@\"]+(\.[^<>()[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i;angular.module("InputText",["JQueryEmu"]).directive("inputText",["JQemu",function(a){function n(e,n,i){e.error=!1,e.valid=!1,e.status="untouch",e.input=n.find("input"),e.required=0,"required"in i&&(e.required=1,n.addClass("required")),e.selected=function(){e.error=!1,e.errmsg=!1,e.status="touch"},e.validate=function(){e.parent.removeClass("ng-pristine"),e.value?(e.error=!1,e.value=e.value.trim(),"nospace"in i&&(e.value=e.value.replace(/\s/g,"")),"lowercase"in i&&(e.value=e.value.toLowerCase()),"minlen"in i&&e.value.length0&&e.l4acounter.validated--),e.callback(i.name,null,e.done)):(e.required&&!e.valid&&e.l4acounter.validated++,e.status="valid",e.valid=!0,e.callback(i.name,e.value,e.done))},e.done=function(t){for(var a in t)e[a]=t[a]},e.label=i.label,e.name=i.name,e.placeholder=i.placeholder,e.type=i.type||"text",e.tip=i.tip,e.parent=a.parent(n,"FORM"),"email"in i&&(i.lowercase=!0,i.nospace=!0,i.minlen=6),e.required&&(e.l4acounter=e.parent.data("l4acounter"),e.l4acounter?e.l4acounter.required++:(e.l4acounter={required:1,validated:0},e.parent.data("l4acounter",e.l4acounter))),e.$watch("value",function(){e.value&&e.validate()})}return{restrict:"E",template:e,link:n,scope:{callback:"=",value:"="}}}])}(),function(){"use strict";var e=' ';angular.module("InputPassword",[]).directive("inputPassword",function(){function t(e,t,a){e.valid1=function(t,a){e.firstpwd=a},e.valid2=function(t,n,i){e.firstpwd!==n?i({valid:!1,status:"invalid",errmsg:"both password should match"}):e.callback(a.name,n)},e.done=function(t){for(var a in t)e[a]=t[a]},e.name=a.name,e.label1=a.label||"Password",e.label2=a.label||"Password Verification",e.place1=a.placeholder1||"User Password",e.tip1=a.tip||"Choose a Password",e.place2=a.placeholder1||"Password Verification",e.tip2=a.tip||"Confirme your Password",e.minlen=a.minlen||10,"required"in a&&(e.required="required")}return{restrict:"E",template:e,link:t,scope:{callback:"="}}})}(),function(){"use strict";angular.module("DashboardModule",["SubmitButton","TokenRefresh","AppliButton"]).controller("DashboardController",["AppCall","Notification",function(e,t){var a=this;a.uuid="none",a.token="none",a.session="none",a.status="err-no",a.appliIDs=[],a.appliStore={},a.AppliCB=function(e,t,n){a.request=t,a.errcode=n.status,n.data&&(a.response=n.data)},a.GetRunnables=function(){e.get("afm-main","runnables",{},function(e){if(a.request="/api/afm-main/runnable",a.response=e.data,a.errcode=e.status,200===e.status){if("AJB_reply"!==e.data.request.jtype&&"runnables"!==e.data.request.api)return void t.error({message:"Invalid Respond to /opa/afm-main/runnable response.data="+e.data,delay:5e3});for(var n=[],i=0;i\n \n \n\n')}])}(),function(){angular.module("AFBclient").run(["$templateCache",function(e){e.put("pages/Dashboard/Dashboard.html",'

Application Framework Manager Simple Client

req= {{ctrl.request}} res= {{ctrl.response}} status= {{ctrl.errcode}}
')}])}(); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndpZGdldHMvUmFuZ2VTbGlkZXJzL1JhbmdlU2xpZGVyTW9kLmpzIiwid2lkZ2V0cy9Ob3RpZmljYXRpb25zL1Rva2VuUmVmcmVzaFN2Yy5qcyIsIndpZGdldHMvTm90aWZpY2F0aW9ucy9Nb2RhbE5vdGlmaWNhdGlvbi5qcyIsIndpZGdldHMvTmF2aWdhdGlvbi9MaW5rQnV0dG9uLmpzIiwid2lkZ2V0cy9BY3Rpb25CdXR0b25zL1N1Ym1pdEJ1dHRvbi5qcyIsIndpZGdldHMvQWN0aW9uQnV0dG9ucy9BcHBsaUJ1dHRvbi5qcyIsIndpZGdldHMvRm9ybUlucHV0L1VwbG9hZEFwcGxpLmpzIiwid2lkZ2V0cy9Gb3JtSW5wdXQvSW5wdXRUZXh0LmpzIiwid2lkZ2V0cy9Gb3JtSW5wdXQvSW5wdXRQYXNzd29yZC5qcyIsInBhZ2VzL0Rhc2hib2FyZC9EYXNoYm9hcmRNb2R1bGUuanMiLCJzZXJ2aWNlcy9KUXVlcnlFbXUuanMiLCJldGMvcm91dGVzLmpzIiwiZXRjL0FwcENvbmZpZy5qcyIsImFwcC5qcyIsInBhZ2VzL0Rhc2hib2FyZC9EYXNoYm9hcmQuanMiXSwibmFtZXMiOlsiUmFuZ2VTbGlkZXJIYW5kbGUiLCJzY29wZSIsImludGVybmFscyIsImV4dGVybmFscyIsInRoaXMiLCJnZXRJZCIsInNsaWRlcmlkIiwiZ2V0Q2JIYW5kbGUiLCJjYmhhbmRsZSIsImdldFZpZXciLCJoYW5kbGUiLCJ2YWx1ZSIsImZvcm1hdHRlciIsImN0cmxoYW5kbGUiLCJ1cGRhdGVDbGFzcyIsImNsYXNzZSIsInN0YXR1cyIsImZvcmNlUmVmcmVzaCIsInRpbWVyIiwiZ2V0VmFsdWUiLCJnZXRSZWxhdGl2ZSIsInJlbGF0aXZlIiwic2V0VmFsdWUiLCJzZXREaXNhYmxlIiwiZmxhZyIsIlJhbmdlU2xpZGVyIiwiYW5ndWxhciIsIm1vZHVsZSIsImRpcmVjdGl2ZSIsIiRsb2ciLCIkZG9jdW1lbnQiLCIkdGltZW91dCIsImxpbmsiLCJlbGVtZW50IiwiYXR0cnMiLCJtb2RlbCIsImluaXRXaWRnZXQiLCJpbml0dmFsdWVzIiwiYnlTdGVwIiwicGFyc2VJbnQiLCJub3RNb3JlIiwibm90TGVzcyIsImlkIiwidW5kZWZpbmVkIiwiZHVhbCIsImFkZENsYXNzIiwicmVtb3ZlQ2xhc3MiLCJkaXNhYmxlZCIsImhhbmRsZXMiLCJjc3MiLCJub3JtYWxpemUiLCJyZXN1bHQiLCJyYW5nZSIsInBvaW50IiwibW9kIiwicmVtIiwicm91bmQiLCJwb3dlciIsIk1hdGgiLCJwb3ciLCJvZmZzZXQiLCJ2ZXJ0aWNhbCIsImJvdW5kcyIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImhlaWdodCIsImJhciIsIndpZHRoIiwibmV3dmFsdWUiLCJzdGFydFZhbHVlIiwic3RvcFZhbHVlIiwidmlld1ZhbHVlIiwiZGlzcGxheXMiLCJodG1sIiwiJHNldFZpZXdWYWx1ZSIsIiRhcHBseSIsInRyYW5zbGF0ZSIsInNldFN0YXJ0Iiwic3RhcnQiLCJzZXRTdG9wIiwic3RvcCIsInJpZ2h0Iiwidm9mZnNldCIsIi13ZWJraXQtdHJhbnNmb3JtIiwiLW1vei10cmFuc2Zvcm0iLCItbXMtdHJhbnNmb3JtIiwiLW8tdHJhbnNmb3JtIiwidHJhbnNmb3JtIiwic2xpZGVyIiwiYm90dG9tIiwibGVmdCIsImtleWRvd24iLCJlIiwia2V5Q29kZSIsImFjdGlmIiwiY2FsbGJhY2siLCJibHVyIiwibW92ZUhhbmRsZSIsImNsaWVudFgiLCJjbGllbnRZIiwiZm9jdXNDQiIsImluc2lkZSIsIm9uIiwidW5iaW5kIiwidG91Y2hCYXJDQiIsImV2ZW50IiwidG91Y2hlcyIsImNoYW5nZWRUb3VjaGVzIiwib2xkdmFsdWUiLCJwcmV2ZW50RGVmYXVsdCIsInBhZ2VZIiwicGFnZVgiLCJkaXN0YW5jZTAiLCJhYnMiLCJkaXN0YW5jZTEiLCJ0b3VjaEhhbmRsZUNCIiwidG91Y2hldnQiLCJ0b3VjaG1vdmUiLCJpZHgiLCJsZW5ndGgiLCJ0b3VjaGVuZCIsImhhbmRsZUNCIiwiY2xpY2tldmVudCIsIm1vdXNlbW92ZSIsIm1vdXNldXAiLCJhdXRvbWF0aWMiLCJmb2N1cyIsImZpbmQiLCJzZWxlY3QiLCJlbGVtIiwiZG9tZWxlbSIsInF1ZXJ5U2VsZWN0b3IiLCJhbmdlbGVtIiwiaW5pdGlhbFNldHRpbmdzIiwiaW5pdGlhbCIsImRlY2ltYWxfcGxhY2VzX21hdGNoX3Jlc3VsdCIsInByZWNpc2lvbiIsIm1hdGNoIiwiZXZ0IiwiaW5pdCIsInJhbmRvbSIsIkluZmluaXR5IiwiZHVhbEhhbmRsZXMiLCJ0cmlnZ2VyX2lucHV0X2NoYW5nZSIsImRpc2FibGUiLCJkaXNwbGF5VGFyZ2V0IiwiZ2V0RWxlbWVudEJ5SWQiLCJzcGxpdCIsIm5nTW9kZWwiLCIkd2F0Y2giLCJzdGFydEF0Iiwic3RvcEF0IiwiaW5pdGhvb2siLCJuZXdWYWx1ZSIsInRlbXBsYXRlIiwicmVzdHJpY3QiLCJyZXF1aXJlIiwicmVwbGFjZSIsIiRodHRwIiwiJGxvY2F0aW9uIiwiTm90aWZpY2F0aW9uIiwiQXBwQ29uZmlnIiwibXltZXRob2RzIiwib25saW5lIiwib2ZmbGluZSIsIm9uZXJyb3IiLCJkYXRhIiwiZXJyY29kZSIsImhlYWRlcnMiLCJ3YXJuaW5nIiwibWVzc2FnZSIsImRlbGF5Iiwib25zdWNjZXNzIiwiY29uZmlnIiwicmVxdWVzdCIsInRva2VuIiwic2Vzc2lvbiIsInV1aWQiLCJ0aW1lb3V0Iiwic3VjY2VzcyIsImdldHBpbmciLCJoYW5kbGVyIiwiZ2V0IiwicGluZyIsImVycm9yIiwicGluZ3JhdGUiLCJyZWZyZXNoIiwidGtjcmVhdGUiLCJjcmVhdGUiLCJpY29uIiwiaG9zdG5hbWUiLCJob3N0IiwiaHR0cGRwb3J0IiwicG9ydCIsImF1dG9sb2ciLCJKU09OIiwicGFyc2UiLCJ0bXBsIiwiZGlzcGxheSIsImFjdGlvbiIsInNob3ciLCJtb2RhbCIsIm9wYWNpdHkiLCJ2aXNpYmlsaXR5IiwiY2xvc2UiLCJwYXJlbnQiLCJiaW5kIiwidGlwIiwiY2xpY2tlZCIsInF1ZXJ5IiwicGF0aCIsImhyZWYiLCJzZWFyY2giLCJsYWJlbCIsInRvTG93ZXJDYXNlIiwidG1wbEFwcGxpIiwidG1wbE1vZGFsIiwiQXBwQ2FsbCIsIk1vZGFsRmFjdG9yeSIsImNsb3NlTW9kYWwiLCJkZWFjdGl2YXRlIiwiZGVzdHJveSIsImFjdGlvbk1vZGFsIiwiYXBwbGlJRCIsInJlc3BvbnNlIiwianR5cGUiLCJhcGkiLCJydW5JRCIsInJ1bmlkIiwiYW5pbWF0aW9uSW4iLCJjb250ZW50U2NvcGUiLCJhY3RpdmF0ZSIsInN0b3JlIiwibmFtZSIsInBhdGhzIiwiaWNvbnMiLCJMb2FkRmlsZVN2YyIsImZpbGVzIiwiZmlsZUNCIiwieG1sUmVxIiwiWE1MSHR0cFJlcXVlc3QiLCJ4Zm9ybSIsIkZvcm1EYXRhIiwidXBsb2FkIiwib25wcm9ncmVzcyIsInByb2dyZXNzIiwibGVuZ3RoQ29tcHV0YWJsZSIsImxvYWRlZCIsInRvdGFsIiwib25sb2FkIiwiZGl2RWxlbSIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsIm9uYWJvcnQiLCJwb3N0ZmlsZSIsInBvc3R1cmwiLCJvcGVuIiwic2VuZCIsImkiLCJmaWxlIiwiYmFzZW5hbWUiLCJyZXZlcnNlIiwiaXNOYU4iLCJzaXplIiwibWF4c2l6ZSIsInNldFRpbWVvdXQiLCJyZWFkZXIiLCJGaWxlUmVhZGVyIiwicmVhZEFzQXJyYXlCdWZmZXIiLCJhcHBlbmQiLCJ0bXBsRXJyb3IiLCJKUWVtdSIsImlucHV0RWxlbSIsImltZ0NsaWNrZWQiLCJjbGljayIsIlNsaWRlckluaXRDQiIsIlVwTG9hZEZpbGUiLCJhcHBpY29uIiwiYWJhbmRvbiIsInJlYWRlckNCIiwiemlwYXBwIiwiSlNaaXAiLCJ0YXJnZXQiLCJ0aHVtYm5haWwiLCJ3aW5kb3ciLCJVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCJCbG9iIiwiYXNBcnJheUJ1ZmZlciIsInR5cGUiLCJpc25vdHZhbGlkIiwiaXN0b29iaWciLCJhcHBuYW1lIiwiY2F0ZWdvcnkiLCJtaW1ldHlwZSIsImFjY2VwdCIsInJlZ2V4cCIsIlJlZ0V4cCIsIm5vc2xpZGVyIiwiVHlwZUVycm9yIiwiZW1haWxwYXRlcm4iLCJ2YWxpZCIsImlucHV0IiwicmVxdWlyZWQiLCJzZWxlY3RlZCIsImVycm1zZyIsInZhbGlkYXRlIiwidHJpbSIsIm1pbmxlbiIsInRlc3QiLCJsNGFjb3VudGVyIiwidmFsaWRhdGVkIiwiZG9uZSIsInBsYWNlaG9sZGVyIiwibG93ZXJjYXNlIiwibm9zcGFjZSIsInZhbGlkMSIsImZpcnN0cHdkIiwidmFsaWQyIiwibGFiZWwxIiwibGFiZWwyIiwicGxhY2UxIiwicGxhY2Vob2xkZXIxIiwidGlwMSIsInBsYWNlMiIsInRpcDIiLCJjb250cm9sbGVyIiwiYXBwbGlJRHMiLCJhcHBsaVN0b3JlIiwiQXBwbGlDQiIsIkdldFJ1bm5hYmxlcyIsIkZpbGVVcGxvYWRlZCIsIkF1dG9TdGFydCIsImZhY3RvcnkiLCJGaW5kSW5QYXJlbnQiLCJzZWxlY3RvciIsInRvVXBwZXJDYXNlIiwidGFnTmFtZSIsIkZpbmRCeVRhZyIsInRhZyIsImNoaWxkcmVuIiwibmV4dCIsIkZpbmRCeUNsYXNzIiwiaGFzQ2xhc3MiLCJteU1ldGhvZHMiLCJmb3VuZGF0aW9uUm91dGVzIiwidXJsIiwibXlDb25maWciLCJpbWFnZSIsImF2YXRhciIsImF1ZGlvIiwiYXBwbGkiLCJteWFwaSIsImNoZWNrIiwicmVzZXQiLCJteUNhbGxzIiwicGx1Z2luIiwicGFyYW1zIiwidGhlbiIsIiR1cmxQcm92aWRlciIsIiRsb2NhdGlvblByb3ZpZGVyIiwib3RoZXJ3aXNlIiwiaHRtbDVNb2RlIiwiaGFzaFByZWZpeCIsInJ1biIsIkZhc3RDbGljayIsImF0dGFjaCIsImRvY3VtZW50IiwiYm9keSIsIiRpbmplY3QiLCIkdGVtcGxhdGVDYWNoZSIsInB1dCJdLCJtYXBwaW5ncyI6IkNBa0RBLFdBQ0EsWUFJQSxTQUFBQSxHQUFBQyxHQUNBLEdBQUFDLE1BQ0FDLElBRUFDLE1BQUFDLE1BQUEsV0FDQSxNQUFBSixHQUFBSyxVQUdBRixLQUFBRyxZQUFBLFdBQ0EsTUFBQU4sR0FBQU8sVUFHQUos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LEVBQUF0TSxHQUNBcU0sRUFBQUUsVUFBQSxjQUdBRCxFQUFBRSxXQUFBLEdBQUFDLFdBQUEsS0FJQSxRQUFBQyxLQUNBQyxVQUFBQyxPQUFBQyxTQUFBQyxNQXZDQXBWLFFBQUFDLE9BQUEsYUFDQSxZQUNBLFlBR0EsYUFDQSw0QkFDQSx1Q0FHQSxrQkFHQSxZQUNBLFlBQ0Esa0JBQ0EsY0FDQSxhQUNBLGVBQ0EsY0FDQSxzQkFFQWlKLE9BQUFBLEdBQ0E4TCxJQUFBQSxHQUdBOUwsRUFBQW1NLFNBQUEscUJBQUEscUJBa0JBclYsUUFBQUMsT0FBQSxjQUFBK1UsS0FBQSxpQkFBQSxTQUFBTSxHQUNBQSxFQUFBQyxJQUFBLDhCQUNBLHFMQ2pEQSxXQUFBdlYsUUFBQUMsT0FBQSxhQUFBK1UsS0FBQSxpQkFBQSxTQUFBTSxHQUFBQSxFQUFBQyxJQUFBLGlDQUNBIiwiZmlsZSI6IkFGQmNsaWVudC5taW4uanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBcbiAqIENvcHlyaWdodCAoQykgMjAxNSBcIklvVC5iemhcIlxuICogQXV0aG9yIFwiRnVsdXAgQXIgRm9sbFwiXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiAqIFxuICogQnVnczogSW5wdXQgd2l0aCBDYWxsYmFjayBTSE9VTEQgQkUgZ2V0ICdyZXF1aXJlZCcgY2xhc3NcbiAqIFxuICogcmVmOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9FdmVudHMvbW91c2VvdmVyXG4gKiBcbiAqIHVzYWdlOiBcblVzYWdlICA8cmFuZ2Utc2xpZGVyPlxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICA8cmFuZ2Utc2xpZGVyXG4gICAgICBpZD1cIm15LXNsaWRlci1uYW1lXCIgICAgICAgICAgICAgICAgICAgICAvLyBvbmx5IHVzZSBhcyBhbiBhcmd1bWVudCB0byBjYWxsYmFja1xuICAgICAgY2xhc3M9XCJteS1jdXN0b20tY2xhc3NcIiAgICAgICAgICAgICAgICAgLy8gZGVmYXVsdCBjbGFzcyBpcyBpYnotcmFuZ2Utc2xpZGVyXG4gICAgICBwbGFjZWhvbGRlcj1cIlRyYWNrIERhdGUgU2VsZWN0aW9uXCIgICAgICAvLyBwbGFjZSBob2xkZXIgZm9yIGRhdGUgcmVhZG9ubHkgaW5wdXQgem9uZVxuXG4gICAgICA8IS0tIEZvdW5kYXRpb24gY2xhc3NlcyAtLT5cbiAgICAgIGNsYXNzPVwicmFkaXVzXCIgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIFp1cmIgZm91bmRhdGlvbiBkb2MgZm9yIGZ1cnRoZXIgaW5mby5cbiAgICAgIGNsYXNzPVwiaWJ6LWhhbmRsZS1kaXNwbGF5XCIgICAgICAgICAgICAgIC8vIGluY3JlYXNlIGhhbmRsZSB3aWR0aCB0byBob2xkIHNsaWRlciBjdXJyZW50IHZhbHVlXG5cbiAgICAgIDwhLS0gQW5ndWxhciBTY29wZSBWYXJpYWJsZXMgLS0+XG4gICAgICBjYWxsYmFjaz1cIm15Q2FsbEJhY2tcIiAgICAgICAgICAgICAgICAgICAgLy8gJHNjb3BlLm15Q2FsbEJhY2soc2xpZGVyaGFuZGxlKSBpcyBjYWxsZWQgd2hlbiBldmVyIHNsaWRlciBoYW5kbGUgYmx1clxuICAgICAgZm9ybWF0dGVyPVwiU2xpZGVyRm9ybWF0Q0JcIiAgICAgICAgICAgICAgIC8vICRzY29wZS5teUZvcm1hdHRlcih2YWx1ZSwgc2xpZGVyaWQpIHdoZW4gZXhpc3QgaXMgY2FsbCB3aGVuIGV2ZXIgc2xpZGVyIGhhbmRsZSBtb3Zlcy4gU2hvdWxkIHJldHVybiBleHRlcm5hbCBmb3JtIG9mIHNsaWRlciB2YWx1ZS5cbiAgICAgIG5nLW1vZGVsPVwieHh4eHh4XCIgICAgICAgICAgICAgICAgICAgICAgICAvLyB4eHggTXVzdCBiZSBkZWZpbmVkLCBzY3JpcHQgd2lsbCBzdG9yZSBhIG5ldyBSYW5nZXJPYmplY3Qgd2l0aGluIHByb3ZpZGVkIG5nLW1vZGVsIHZhcmlhYmxlLlxuICAgICAgc3RhcnQtYXQ9XCJTY29wZVZhclwiICAgICAgICAgICAgICAgICAgICAgIC8vIER5bmFtaWMgbGltaXRhdGlvbiB3aGVuIHNsaWRlciBpcyBjb25zdHJhaW5zIGJ5IGFuIGV4dGVybmFsIGNvbXBvbmFudCBbZXg6IGNoZWNrIGluL291dF1cbiAgICAgIHN0b3AtYXQ9XCJTY29wZVZhclwiICAgICAgICAgICAgICAgICAgICAgICAvLyBJZGVtIGJ1dCBmb3IgZW5kLlxuXG4gICAgICA8IS0tIEFuZ3VsYXIgRGlyZWN0aXZlIEF0dHJpYnV0ZXMgLS0+XG4gICAgICBub3QtbGVzcz1cImludGVnZXJcIiAgICAgICAgICAgICAgICAgICAgICAgLy8gRml4ZWQgc3RhcnRpbmcgdmFsdWUgZm9yIHNsaWRlciBbZGVmYXVsdCAwXVxuICAgICAgbm90LW1vcmU9XCJpbnRlZ2VyXCIgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpeGVkIGVuZCB2YWx1ZSBmb3Igc2xpZGVycyBbZGVmYXVsdCAxMDBdXG4gICAgICBieS1zdGVwPVwiKy1pbnRlZ2VyXCIgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgYnktc3RlcCBpcyA+MCB0aGVuIHNsaWRlciB1c2UgaXQgYXMgc3RlcC12YWx1ZSwgd2hlbiBuZWdhdGl2ZSB1c2UgaXQgZm9yIGRlY2ltYWwgcHJlY2lzaW9uXG4gICAgICBkaXNwbGF5LXRhcmdldD1cImhhbmRsZVwiICAgICAgICAgICAgICAgICAgLy8gZGlzcGxheSBzbGlkZXIgZXh0ZXJuYWwgZm9ybWF0ZWQgdmFsdWUgaW4gdGhlIGhhbmRsZSBbcmVxdWlyZXIgY2Fsc3M9XCJpYnotaGFuZGxlLWRpc3BsYXlcIl1cbiAgICAgIGR1YWwtaGFuZGxlcz0ndHJ1ZScgICAgICAgICAgICAgICAgICAgICAgLy8gYWRkIGEgc2Vjb25kIGhhbmRsZSB0byBzbGlkZXIgZm9yIG1pbi9tYXggcmFuZ2VcbiAgICAgIGluaXRpYWw9J3ZhbHVlfFtzdGFydC9zdG9wXScgICAgICAgICAgICAgLy8gc2xpZGVyIGluaXRpYWwgdmFsdWUgW2R1YWwtaGFuZGxlc10gbWF5IGhhdmUgaW5pdGlhbCB2YWx1ZXNcbiAgIC8+PC9yYW5nZS1zbGlkZXI+XG4gKi9cblxuKGZ1bmN0aW9uICgpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbnZhciBSYW5nZVNsaWRlciA9IGFuZ3VsYXIubW9kdWxlKCdSYW5nZVNsaWRlcicsW10pO1xuXG5mdW5jdGlvbiBSYW5nZVNsaWRlckhhbmRsZSAoc2NvcGUpIHtcbiAgICB2YXIgaW50ZXJuYWxzID0gW107XG4gICAgdmFyIGV4dGVybmFscyA9IFtdO1xuXG4gICAgdGhpcy5nZXRJZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gc2NvcGUuc2xpZGVyaWQ7XG4gICAgfTtcblxuICAgIHRoaXMuZ2V0Q2JIYW5kbGUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHNjb3BlLmNiaGFuZGxlO1xuICAgIH07XG5cbiAgICB0aGlzLmdldFZpZXc9IGZ1bmN0aW9uIChoYW5kbGUpIHtcbiAgICAgICAgaWYgKCFoYW5kbGUpIGhhbmRsZSA9IDA7XG5cbiAgICAgICAgLy8gaWYgdmFsdWUgZGlkIG5vdCBjaGFuZ2UgcmV0dXJuIGN1cnJlbnQgZXh0ZXJuYWwgcmVwcmVzZW50YXRpb25cbiAgICAgICAgaWYgKHNjb3BlLnZhbHVlW2hhbmRsZV0gPT09IGludGVybmFsc1toYW5kbGVdKSByZXR1cm4gZXh0ZXJuYWxzW2hhbmRsZV07XG5cbiAgICAgICAgLy8gYnVpbGQgZXh0ZXJuYWwgcmVwcmVzZW50YXRpb24gYW5kIHNhdmUgaXQgZm9yIGZ1cnRoZXIgcmVxdWVzdHNcbiAgICAgICAgaW50ZXJuYWxzW2hhbmRsZV0gPSBzY29wZS52YWx1ZVtoYW5kbGVdO1xuICAgICAgICBpZiAoc2NvcGUuZm9ybWF0dGVyKSBleHRlcm5hbHNbaGFuZGxlXSA9IHNjb3BlLmZvcm1hdHRlcihzY29wZS52YWx1ZVtoYW5kbGVdLCBzY29wZS5jdHJsaGFuZGxlKTtcbiAgICAgICAgZWxzZSAgZXh0ZXJuYWxzW2hhbmRsZV0gPSBzY29wZS52YWx1ZVtoYW5kbGVdO1xuXG4gICAgICAgIHJldHVybiBleHRlcm5hbHNbaGFuZGxlXTtcbiAgICB9O1xuXG4gICAgdGhpcy51cGRhdGVDbGFzcyA9IGZ1bmN0aW9uIChjbGFzc2UsIHN0YXR1cykge1xuICAgICAgIHNjb3BlLnVwZGF0ZUNsYXNzIChjbGFzc2UsIHN0YXR1cyk7XG4gICAgfTtcblxuICAgIHRoaXMuZm9yY2VSZWZyZXNoID0gZnVuY3Rpb24gKHRpbWVyKSB7XG4gICAgICAgc2NvcGUuZm9yY2VSZWZyZXNoKHRpbWVyKTtcbiAgICB9O1xuXG4gICAgdGhpcy5nZXRWYWx1ZT0gZnVuY3Rpb24gKGhhbmRsZSkge1xuICAgICAgICBpZiAoIWhhbmRsZSkgaGFuZGxlID0gMDtcbiAgICAgICAgcmV0dXJuIHNjb3BlLnZhbHVlW2hhbmRsZV07XG4gICAgfTtcblxuICAgIHRoaXMuZ2V0UmVsYXRpdmU9IGZ1bmN0aW9uIChoYW5kbGUpIHtcbiAgICAgICAgaWYgKCFoYW5kbGUpIGhhbmRsZSA9IDA7XG4gICAgICAgIHJldHVybiBzY29wZS5yZWxhdGl2ZVtoYW5kbGVdO1xuICAgIH07XG5cbiAgICB0aGlzLnNldFZhbHVlPSBmdW5jdGlvbiAodmFsdWUsIGhhbmRsZSkge1xuICAgICAgICBpZiAoIWhhbmRsZSkgaGFuZGxlID0gMDtcbiAgICAgICAgc2NvcGUuc2V0VmFsdWUgKHZhbHVlLCBoYW5kbGUpO1xuICAgIH07XG5cbiAgICB0aGlzLnNldERpc2FibGU9IGZ1bmN0aW9uIChmbGFnKSB7XG4gICAgICAgIHNjb3BlLnNldERpc2FibGUoZmxhZyk7XG4gICAgfTtcbn1cblxuUmFuZ2VTbGlkZXIuZGlyZWN0aXZlKCdyYW5nZVNsaWRlcicsIFtcIiRsb2dcIiwgXCIkZG9jdW1lbnRcIiwgXCIkdGltZW91dFwiLCBmdW5jdGlvbiAoJGxvZywgJGRvY3VtZW50LCAkdGltZW91dCkge1xuXG4gICAgdmFyIHRlbXBsYXRlPSAnPGRpdiBjbGFzcz1cImliei1yYW5nZS1zbGlkZXIgcmFuZ2Utc2xpZGVyXCIgdGl0bGU9XCJ7e3RpdGxlfX1cImRhdGEtc2xpZGVyPicrXG4gICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJyYW5nZS1zbGlkZXItaGFuZGxlIGhhbmRsZS1taW5cIiBuZy1tb3VzZWRvd249XCJoYW5kbGVDQigkZXZlbnQsMClcIiBuZy1mb2N1cz1cImZvY3VzQ0IodHJ1ZSlcIiBuZy1ibHVyPVwiZm9jdXNDQihmYWxzZSlcIiByb2xlPVwic2xpZGVyXCIgdGFiaW5kZXg9XCIwXCI+PC9zcGFuPicrXG4gICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJoYW5kbGUtbWF4XCIgbmctbW91c2Vkb3duPVwiaGFuZGxlQ0IoJGV2ZW50LDEpXCIgbmctZm9jdXM9XCJmb2N1c0NCKHRydWUpXCIgbmctYmx1cj1cImZvY3VzQ0IoZmFsc2UpXCIgcm9sZT1cInNsaWRlclwiIHRhYmluZGV4PVwiMFwiPjwvc3Bhbj4nK1xuICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwicmFuZ2Utc2xpZGVyLWFjdGl2ZS1zZWdtZW50XCI+PC9zcGFuPicrXG4gICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJpYnotcmFuZ2Utc2xpZGVyLXN0YXJ0XCIgPjwvc3Bhbj4gJytcbiAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cImliei1yYW5nZS1zbGlkZXItc3RvcFwiPjwvc3Bhbj4gJytcbiAgICAgICAgICAgICAgICAgICc8aW5wdXQgaWQ9e3tzbGlkZXJpZH19IHR5cGU9XCJoaWRkZW5cIj4nK1xuICAgICAgICAgICAgICAgICAgJzwvZGl2Pic7XG5cblxuICAgIGZ1bmN0aW9uIGxpbmsgKHNjb3BlLCBlbGVtZW50LCBhdHRycywgbW9kZWwpIHtcbiAgICAgICAgLy8gZnVsbCBpbml0aWFsaXNhdGlvbiBvZiBzbGlkZXIgZnJvbSBhIHNpbmdsZSBvYmplY3RcbiAgICAgICAgc2NvcGUuaW5pdFdpZGdldCA9IGZ1bmN0aW9uIChpbml0dmFsdWVzKSB7XG5cbiAgICAgICAgICAgIGlmIChpbml0dmFsdWVzLmJ5U3RlcCkgIHNjb3BlLmJ5U3RlcCAgPSBwYXJzZUludChpbml0dmFsdWVzLmJ5U3RlcCk7XG4gICAgICAgICAgICBpZiAoaW5pdHZhbHVlcy5ub3RNb3JlKSBzY29wZS5ub3RNb3JlID0gcGFyc2VJbnQoaW5pdHZhbHVlcy5ub3RNb3JlKTtcbiAgICAgICAgICAgIGlmIChpbml0dmFsdWVzLm5vdExlc3MpIHNjb3BlLm5vdExlc3MgPSBwYXJzZUludChpbml0dmFsdWVzLm5vdExlc3MpO1xuICAgICAgICAgICAgaWYgKGluaXR2YWx1ZXMuaWQpICAgICAgc2NvcGUuc2xpZGVyaWQ9IGluaXR2YWx1ZXMuaWQ7XG5cbiAgICAgICAgICAgIC8vIGh1Z2VseSBidXQgaW4gc29tZSBjYXNlIERPTSBpcyBub3QgZmluaXNoIHdoZW4gd2UgdHJ5IHRvIHNldCB2YWx1ZXMgISEhXG4gICAgICAgICAgICBpZiAoaW5pdHZhbHVlcy52YWx1ZSAhPT0gdW5kZWZpbmVkKSAgIHtcbiAgICAgICAgICAgICAgICBzY29wZS52YWx1ZSA9IGluaXR2YWx1ZXMudmFsdWU7XG4gICAgICAgICAgICAgICAgc2NvcGUuZm9yY2VSZWZyZXNoICg1MCk7IC8vIHdhaXQgNTBtcyBmb3IgRE9NIHRvIGJlIHJlYWR5XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gdGhpcyBmdW5jdGlvbiByZWNvbXB1dGUgc2xpZGUgcG9zaXRpb25pbmdcbiAgICAgICAgc2NvcGUuZm9yY2VSZWZyZXNoID0gZnVuY3Rpb24gKHRpbWVyKSB7XG4gICAgICAgICAgIHZhciB2YWx1ZSA9IHNjb3BlLnZhbHVlO1xuICAgICAgICAgICBzY29wZS52YWx1ZSA9IFt1bmRlZmluZWQsdW5kZWZpbmVkXTtcbiAgICAgICAgICAgJHRpbWVvdXQgKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgc2NvcGUuc2V0VmFsdWUodmFsdWVbMF0sMCk7XG4gICAgICAgICAgICAgICBpZiAoc2NvcGUuZHVhbCkgIHNjb3BlLnNldFZhbHVlKHZhbHVlWzFdLDEpO1xuICAgICAgICAgICB9LCB0aW1lcik7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gaGFuZGxlciB0byBjaGFuZ2UgY2xhc3MgZnJvbSBzbGlkZXIgaGFuZGxlXG4gICAgICAgIHNjb3BlLnVwZGF0ZUNsYXNzID0gZnVuY3Rpb24gKGNsYXNzZSwgc3RhdHVzKSB7XG5cbiAgICAgICAgICAgIGlmIChzdGF0dXMpIGVsZW1lbnQuYWRkQ2xhc3MgKGNsYXNzZSk7XG4gICAgICAgICAgICBlbHNlICBlbGVtZW50LnJlbW92ZUNsYXNzIChjbGFzc2UpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHNjb3BlLnNldERpc2FibGUgPSBmdW5jdGlvbiAoZGlzYWJsZWQpIHtcblxuICAgICAgICAgICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5hZGRDbGFzcyAoXCJkaXNhYmxlXCIpO1xuICAgICAgICAgICAgICAgIHNjb3BlLmhhbmRsZXNbMF0uY3NzICgndmlzaWJpbGl0eScsJ2hpZGRlbicpO1xuICAgICAgICAgICAgICAgIGlmIChzY29wZS5kdWFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLmhhbmRsZXNbMV0uY3NzICgndmlzaWJpbGl0eScsJ2hpZGRlbicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVDbGFzcyAoXCJkaXNhYmxlXCIpO1xuICAgICAgICAgICAgICAgIHNjb3BlLmhhbmRsZXNbMF0uY3NzICgndmlzaWJpbGl0eScsJ3Zpc2libGUnKTtcbiAgICAgICAgICAgICAgICBpZiAoc2NvcGUuZHVhbCkgc2NvcGUuaGFuZGxlc1sxXS5jc3MgKCd2aXNpYmlsaXR5JywndmlzaWJsZScpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH07XG5cbiAgICAgICAgc2NvcGUubm9ybWFsaXplID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0O1xuICAgICAgICAgICAgdmFyIHJhbmdlID0gc2NvcGUubm90TW9yZSAtIHNjb3BlLm5vdExlc3M7XG4gICAgICAgICAgICB2YXIgcG9pbnQgPSB2YWx1ZSAqIHJhbmdlO1xuXG4gICAgICAgICAgICAvLyBpZiBzdGVwIGlzIHBvc2l0aXZlIGxldCdzIHJvdW5kIHN0ZXAgYnkgc3RlcFxuICAgICAgICAgICAgaWYgKHNjb3BlLmJ5U3RlcCA+ICAwKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1vZCA9IChwb2ludCAtIChwb2ludCAlIHNjb3BlLmJ5U3RlcCkpIC8gc2NvcGUuYnlTdGVwO1xuICAgICAgICAgICAgICAgIHZhciByZW0gPSBwb2ludCAlIHNjb3BlLmJ5U3RlcDtcblxuICAgICAgICAgICAgICAgIHZhciByb3VuZCA9IChyZW0gPj0gc2NvcGUuYnlTdGVwICogMC41ID8gc2NvcGUuYnlTdGVwIDogMCk7XG4gICAgICAgICAgICAgICAgcmVzdWx0PSAobW9kICogc2NvcGUuYnlTdGVwICsgcm91bmQpICsgc2NvcGUubm90TGVzcztcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nIChcInJhbmdlPSVkIHZhbHVlPSVkIHBvaW50PSVkIG1vZD0lZCByZW09JWQgcm91bmQ9JWQgcmVzdWx0PSVkXCIsIHJhbmdlLCB2YWx1ZSwgcG9pbnQsIG1vZCwgcmVtLCByb3VuZCwgcmVzdWx0KVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGlmIHN0ZXAgaXMgbmVnYXRpdmUgcmV0dXJuIHJvdW5kIHRvIGFza2VkIGRlY2ltYWxcbiAgICAgICAgICAgIGlmIChzY29wZS5ieVN0ZXAgPCAgMCkge1xuICAgICAgICAgICAgICAgIHZhciBwb3dlciAgPSAgTWF0aC5wb3cgKDEwLChzY29wZS5ieVN0ZXAgKiAtMSkpO1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNjb3BlLm5vdExlc3MgKyBwYXJzZUludCAocG9pbnQgKiBwb3dlcikgLyBwb3dlcjtcbiAgICAgICAgICAgICAgICByZXR1cm4gKHJlc3VsdCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGlmIHN0ZXAgaXMgbnVsbCByZXR1cm4gZnVsbCB2YWx1ZVxuICAgICAgICAgICAgcmV0dXJuIHBvaW50O1xuICAgICAgIH07XG5cbiAgICAgICAgLy8gcmV0dXJuIGN1cnJlbnQgdmFsdWVcbiAgICAgICAgc2NvcGUuZ2V0VmFsdWUgPSBmdW5jdGlvbiAob2Zmc2V0LCBoYW5kbGUpIHtcbiAgICAgICAgICAgIGlmIChzY29wZS52ZXJ0aWNhbCkge1xuICAgICAgICAgICAgICAgIHNjb3BlLnJlbGF0aXZlW2hhbmRsZV0gPSAob2Zmc2V0IC0gc2NvcGUuYm91bmRzLmhhbmRsZXNbaGFuZGxlXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQpIC8gKHNjb3BlLmJvdW5kcy5iYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0IC0gc2NvcGUuYm91bmRzLmhhbmRsZXNbaGFuZGxlXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzY29wZS5yZWxhdGl2ZVtoYW5kbGVdID0gb2Zmc2V0IC8gIChzY29wZS5ib3VuZHMuYmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIC0gc2NvcGUuYm91bmRzLmhhbmRsZXNbaGFuZGxlXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBuZXd2YWx1ZSA9IHNjb3BlLm5vcm1hbGl6ZSAoc2NvcGUucmVsYXRpdmVbaGFuZGxlXSk7XG5cblxuICAgICAgICAgICAgLy8gaWYgaW50ZXJuYWwgdmFsdWUgY2hhbmdlIHVwZGF0ZSBvciBtb2RlbFxuICAgICAgICAgICAgaWYgKG5ld3ZhbHVlICE9PSBzY29wZS52YWx1ZVtoYW5kbGVdKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5ld3ZhbHVlIDwgc2NvcGUuc3RhcnRWYWx1ZSkgbmV3dmFsdWU9c2NvcGUuc3RhcnRWYWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAobmV3dmFsdWUgPiBzY29wZS5zdG9wVmFsdWUpICBuZXd2YWx1ZT1zY29wZS5zdG9wVmFsdWU7XG5cblxuICAgICAgICAgICAgICAgIGlmIChzY29wZS5mb3JtYXR0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUudmlld1ZhbHVlID0gc2NvcGUuZm9ybWF0dGVyIChuZXd2YWx1ZSwgc2NvcGUuY3RybGhhbmRsZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUudmlld1ZhbHVlID0gbmV3dmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzY29wZS5kaXNwbGF5c1toYW5kbGVdKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLmRpc3BsYXlzW2hhbmRsZV0uaHRtbCAoc2NvcGUudmlld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyB1cGRhdGUgZXh0ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsXG4gICAgICAgICAgICAgICAgc2NvcGUudmFsdWVbaGFuZGxlXSA9IG5ld3ZhbHVlO1xuICAgICAgICAgICAgICAgIGlmIChtb2RlbCkgbW9kZWwuJHNldFZpZXdWYWx1ZSAoc2NvcGUudmlld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICBzY29wZS4kYXBwbHkoKTtcbiAgICAgICAgICAgICAgICBpZiAobmV3dmFsdWUgPiBzY29wZS5zdGFydFZhbHVlICYmIG5ld3ZhbHVlIDwgc2NvcGUuc3RvcFZhbHVlKSBzY29wZS50cmFuc2xhdGUob2Zmc2V0LCBoYW5kbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG5cbiAgICAgICAgc2NvcGUuc2V0U3RhcnQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBvZmZzZXQ7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmICh2YWx1ZSA+IHNjb3BlLnZhbHVlWzBdKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFzY29wZS5kdWFsKSBzY29wZS5zZXRWYWx1ZSAodmFsdWUsMCk7XG4gICAgICAgICAgICAgICAgZWxzZSBzY29wZS5zZXRWYWx1ZSAodmFsdWUsMSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzY29wZS52ZXJ0aWNhbCkge1xuICAgICAgICAgICAgICAgIG9mZnNldCA9IHNjb3BlLmJvdW5kcy5iYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0ICogKHZhbHVlIC0gc2NvcGUubm90TGVzcykgLyAoc2NvcGUubm90TW9yZSAtIHNjb3BlLm5vdExlc3MpO1xuICAgICAgICAgICAgICAgIHNjb3BlLnN0YXJ0LmNzcygnaGVpZ2h0JyxvZmZzZXQgKyAncHgnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gc2NvcGUuYm91bmRzLmJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCAqICh2YWx1ZSAtIHNjb3BlLm5vdExlc3MpIC8gKHNjb3BlLm5vdE1vcmUgLSBzY29wZS5ub3RMZXNzKTtcbiAgICAgICAgICAgICAgICBzY29wZS5zdGFydC5jc3MoJ3dpZHRoJyxvZmZzZXQgKyAncHgnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2NvcGUuc3RhcnRWYWx1ZT0gdmFsdWU7XG4gICAgICAgIH07XG5cbiAgICAgICAgc2NvcGUuc2V0U3RvcCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIG9mZnNldDtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKHZhbHVlIDwgc2NvcGUudmFsdWVbMF0pIHtcbiAgICAgICAgICAgICAgICBpZiAoIXNjb3BlLmR1YWwpIHNjb3BlLnNldFZhbHVlICh2YWx1ZSwwKTtcbiAgICAgICAgICAgICAgICBlbHNlIHNjb3BlLnNldFZhbHVlICh2YWx1ZSwxKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHNjb3BlLnZlcnRpY2FsKSB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gc2NvcGUuYm91bmRzLmJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQgKiAodmFsdWUgLSBzY29wZS5ub3RMZXNzKSAvIChzY29wZS5ub3RNb3JlIC0gc2NvcGUubm90TGVzcyk7XG4gICAgICAgICAgICAgICAgc2NvcGUuc3RhcnQuY3NzKCdoZWlnaHQnLG9mZnNldCArICdweCcpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvZmZzZXQgPSBzY29wZS5ib3VuZHMuYmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoICogKHZhbHVlIC0gc2NvcGUubm90TGVzcykgLyAoc2NvcGUubm90TW9yZSAtIHNjb3BlLm5vdExlc3MpO1xuICAgICAgICAgICAgICAgIHNjb3BlLnN0b3AuY3NzKHsncmlnaHQnOiAwLCAnd2lkdGgnOiAoc2NvcGUuYm91bmRzLmJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCAgLSBvZmZzZXQpICsgJ3B4J30pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzY29wZS5zdG9wVmFsdWU9IHZhbHVlO1xuICAgICAgICB9O1xuXG4gICAgICAgIHNjb3BlLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uIChvZmZzZXQsIGhhbmRsZSkge1xuICAgICAgICAgICAgdmFyIHN0YXJ0O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAoc2NvcGUudmVydGljYWwpIHtcbiAgICAgICAgICAgICAgICAvLyB0YWtlIGhhbmRsZSBzaXplIGluIGFjY291bnQgdG8gY29tcHV0ZSBtaWRkbGVcbiAgICAgICAgICAgICAgICB2YXIgdm9mZnNldCA9IHNjb3BlLmJvdW5kcy5iYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0IC0gb2Zmc2V0O1xuXG4gICAgICAgICAgICAgICAgc2NvcGUuaGFuZGxlc1toYW5kbGVdLmNzcyh7XG4gICAgICAgICAgICAgICAgICAgICctd2Via2l0LXRyYW5zZm9ybSc6ICd0cmFuc2xhdGVZKCcgKyB2b2Zmc2V0ICsgJ3B4KScsXG4gICAgICAgICAgICAgICAgICAgICctbW96LXRyYW5zZm9ybSc6ICd0cmFuc2xhdGVZKCcgKyB2b2Zmc2V0ICsgJ3B4KScsXG4gICAgICAgICAgICAgICAgICAgICctbXMtdHJhbnNmb3JtJzogJ3RyYW5zbGF0ZVkoJyArIHZvZmZzZXQgKyAncHgpJyxcbiAgICAgICAgICAgICAgICAgICAgJy1vLXRyYW5zZm9ybSc6ICd0cmFuc2xhdGVZKCcgKyB2b2Zmc2V0ICsgJ3B4KScsXG4gICAgICAgICAgICAgICAgICAgICd0cmFuc2Zvcm0nOiAndHJhbnNsYXRlWSgnICsgdm9mZnNldCArICdweCknXG4gICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgIGlmICghc2NvcGUuZHVhbCkgc2NvcGUuc2xpZGVyLmNzcygnaGVpZ2h0Jywgb2Zmc2V0ICsgJ3B4Jyk7XG4gICAgICAgICAgICAgICBlbHNlIGlmIChzY29wZS5yZWxhdGl2ZVsxXSAmJiBzY29wZS5yZWxhdGl2ZVswXSkge1xuICAgICAgICAgICAgICAgICAgIHZhciBoZWlnaHQgPSAoc2NvcGUucmVsYXRpdmVbMV0gLSBzY29wZS5yZWxhdGl2ZVswXSkgKiAgc2NvcGUuYm91bmRzLmJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgc3RhcnQgID0gKHNjb3BlLnJlbGF0aXZlWzBdICogIHNjb3BlLmJvdW5kcy5iYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICBzY29wZS5zbGlkZXIuY3NzICh7J2JvdHRvbSc6IHN0YXJ0KydweCcsJ2hlaWdodCc6IGhlaWdodCArICdweCd9KTtcbiAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgICAgICBzY29wZS5oYW5kbGVzW2hhbmRsZV0uY3NzKHtcbiAgICAgICAgICAgICAgICAgICAgJy13ZWJraXQtdHJhbnNmb3JtJzogJ3RyYW5zbGF0ZVgoJyArIG9mZnNldCArICdweCknLFxuICAgICAgICAgICAgICAgICAgICAnLW1vei10cmFuc2Zvcm0nOiAndHJhbnNsYXRlWCgnICsgb2Zmc2V0ICsgJ3B4KScsXG4gICAgICAgICAgICAgICAgICAgICctbXMtdHJhbnNmb3JtJzogJ3RyYW5zbGF0ZVgoJyArIG9mZnNldCArICdweCknLFxuICAgICAgICAgICAgICAgICAgICAnLW8tdHJhbnNmb3JtJzogJ3RyYW5zbGF0ZVgoJyArIG9mZnNldCArICdweCknLFxuICAgICAgICAgICAgICAgICAgICAndHJhbnNmb3JtJzogJ3RyYW5zbGF0ZVgoJyArIG9mZnNldCArICdweCknXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKCFzY29wZS5kdWFsKSBzY29wZS5zbGlkZXIuY3NzKCd3aWR0aCcsb2Zmc2V0ICsgJ3B4Jyk7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2NvcGUucmVsYXRpdmVbMV0gJiYgc2NvcGUucmVsYXRpdmVbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHdpZHRoID0gKHNjb3BlLnJlbGF0aXZlWzFdIC0gc2NvcGUucmVsYXRpdmVbMF0pICogIHNjb3BlLmJvdW5kcy5iYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gKHNjb3BlLnJlbGF0aXZlWzBdICogIHNjb3BlLmJvdW5kcy5iYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpO1xuICAgICAgICAgICAgICAgICAgICBzY29wZS5zbGlkZXIuY3NzICh7J2xlZnQnOiBzdGFydCsncHgnLCd3aWR0aCc6IHdpZHRoICsgJ3B4J30pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICAvLyBwb3NpdGlvbiBoYW5kbGUgb24gdGhlIGJhciBkZXBlbmRpbmcgYSBnaXZlbiB2YWx1ZVxuICAgICAgICBzY29wZS5zZXRWYWx1ZSA9IGZ1bmN0aW9uICh2YWx1ZSAsIGhhbmRsZSkge1xuICAgICAgICAgICAgdmFyIG9mZnNldDtcblxuICAgICAgICAgICAgLy8gaWYgdmFsdWUgZGlkIG5vdCBjaGFuZ2UgaWdub3JlXG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IHNjb3BlLnZhbHVlW2hhbmRsZV0pIHJldHVybjtcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSAgIHZhbHVlPTA7XG4gICAgICAgICAgICBpZiAodmFsdWUgPiBzY29wZS5ub3RNb3JlKSB2YWx1ZT1zY29wZS5ub3RNb3JlO1xuICAgICAgICAgICAgaWYgKHZhbHVlIDwgc2NvcGUubm90TGVzcykgdmFsdWU9c2NvcGUubm90TGVzcztcblxuICAgICAgICAgICAgaWYgKHNjb3BlLnZlcnRpY2FsKSB7XG4gICAgICAgICAgICAgICAgc2NvcGUucmVsYXRpdmVbaGFuZGxlXSA9ICh2YWx1ZSAtIHNjb3BlLm5vdExlc3MpIC8gKHNjb3BlLm5vdE1vcmUgLSBzY29wZS5ub3RMZXNzKTtcbiAgICAgICAgICAgICAgICBpZiAoaGFuZGxlID09PSAwKSBvZmZzZXQgPSAoc2NvcGUucmVsYXRpdmVbaGFuZGxlXSAqIHNjb3BlLmJvdW5kcy5iYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KSArIHNjb3BlLmJvdW5kcy5oYW5kbGVzW2hhbmRsZV0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0LzI7XG4gICAgICAgICAgICAgICAgaWYgKGhhbmRsZSA9PT0gMSkgb2Zmc2V0ID0gc2NvcGUucmVsYXRpdmVbaGFuZGxlXSAqIHNjb3BlLmJvdW5kcy5iYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNjb3BlLnJlbGF0aXZlW2hhbmRsZV0gPSAodmFsdWUgLSBzY29wZS5ub3RMZXNzKSAvIChzY29wZS5ub3RNb3JlIC0gc2NvcGUubm90TGVzcyk7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gc2NvcGUucmVsYXRpdmVbaGFuZGxlXSAqICAoc2NvcGUuYm91bmRzLmJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCAtIHNjb3BlLmJvdW5kcy5oYW5kbGVzW2hhbmRsZV0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzY29wZS50cmFuc2xhdGUgKG9mZnNldCxoYW5kbGUpO1xuICAgICAgICAgICAgc2NvcGUudmFsdWVbaGFuZGxlXSA9IHZhbHVlO1xuXG4gICAgICAgICAgICBpZiAoc2NvcGUuZm9ybWF0dGVyKSB7XG4gICAgICAgICAgICAgICAgLy8gd2hlbiBjYWxsIHRocm91Z2ggc2V0VmFsdWUgd2UgZG8gbm90IHBhc3MgY2JIYW5kbGVcbiAgICAgICAgICAgICAgICBzY29wZS52aWV3VmFsdWUgPSBzY29wZS5mb3JtYXR0ZXIgKHZhbHVlLCB1bmRlZmluZWQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzY29wZS52aWV3VmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG1vZGVsKSBtb2RlbC4kc2V0Vmlld1ZhbHVlKCBzY29wZS52aWV3VmFsdWUpO1xuXG4gICAgICAgICAgICBpZiAoc2NvcGUuZGlzcGxheXNbaGFuZGxlXSkge1xuICAgICAgICAgICAgICAgIHNjb3BlLmRpc3BsYXlzW2hhbmRsZV0uaHRtbCAoc2NvcGUudmlld1ZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuXG4gICAgICAgIC8vIE1pbmltYWwga2V5c3Ryb2tlIGhhbmRsaW5nIHRvIGNsb3NlIHBpY2tlciB3aXRoIEVTQyBbc2NvcGUuYWN0aWYgaXMgY3VycmVudCBoYW5kbGUgaW5kZXhdXG4gICAgICAgIHNjb3BlLmtleWRvd249ICBmdW5jdGlvbihlKXtcblxuICAgICAgICAgICAgc3dpdGNoKGUua2V5Q29kZSl7XG4gICAgICAgICAgICAgICAgY2FzZSAzOTogLy8gUmlnaHRcbiAgICAgICAgICAgICAgICBjYXNlIDM4OiAvLyB1cFxuICAgICAgICAgICAgICAgICAgICAgaWYgKHNjb3BlLmJ5U3RlcCA+IDApIHNjb3BlLiRhcHBseShzY29wZS5zZXRWYWx1ZSAoKHNjb3BlLnZhbHVlW3Njb3BlLmFjdGlmXStzY29wZS5ieVN0ZXApLCBzY29wZS5hY3RpZikpO1xuICAgICAgICAgICAgICAgICAgICAgaWYgKHNjb3BlLmJ5U3RlcCA8IDApIHNjb3BlLiRhcHBseShzY29wZS5zZXRWYWx1ZSAoKHNjb3BlLnZhbHVlW3Njb3BlLmFjdGlmXSsoMSAvIE1hdGgucG93KDEwLCBzY29wZS5ieVN0ZXAqLTEpKSksc2NvcGUuYWN0aWYpKTtcbiAgICAgICAgICAgICAgICAgICAgIGlmIChzY29wZS5jYWxsYmFjaykgIHNjb3BlLmNhbGxiYWNrIChzY29wZS52YWx1ZVtzY29wZS5hY3RpZl0sIHNjb3BlLmN0cmxoYW5kbGUpO1xuICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAzNzogLy8gbGVmdFxuICAgICAgICAgICAgICAgIGNhc2UgNDA6IC8vIGRvd25cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNjb3BlLmJ5U3RlcCA+IDApIHNjb3BlLiRhcHBseShzY29wZS5zZXRWYWx1ZSAoKHNjb3BlLnZhbHVlW3Njb3BlLmFjdGlmXSAtIHNjb3BlLmJ5U3RlcCksIHNjb3BlLmFjdGlmKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzY29wZS5ieVN0ZXAgPCAwKSBzY29wZS4kYXBwbHkoc2NvcGUuc2V0VmFsdWUgKChzY29wZS52YWx1ZVtzY29wZS5hY3RpZl0gLSAoMSAvIE1hdGgucG93KDEwLCBzY29wZS5ieVN0ZXAqLTEpKSksc2NvcGUuYWN0aWYpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNjb3BlLmNhbGxiYWNrKSAgc2NvcGUuY2FsbGJhY2sgKHNjb3BlLnZhbHVlW3Njb3BlLmFjdGlmXSwgc2NvcGUuY3RybGhhbmRsZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgMjc6IC8vIGVzY1xuICAgICAgICAgICAgICAgICAgICBzY29wZS5oYW5kbGVzW3Njb3BlLmFjdGlmXVswXS5ibHVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgc2NvcGUubW92ZUhhbmRsZSA9IGZ1bmN0aW9uIChoYW5kbGUsIGNsaWVudFgsIGNsaWVudFkpIHtcbiAgICAgICAgICAgIHZhciBvZmZzZXQ7XG4gICAgICAgICAgICBpZiAoc2NvcGUudmVydGljYWwpIHtcbiAgICAgICAgICAgICAgICBvZmZzZXQgPSBzY29wZS5ib3VuZHMuYmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbSAtIGNsaWVudFk7XG4gICAgICAgICAgICAgICAgaWYgKG9mZnNldCA+IHNjb3BlLmJvdW5kcy5iYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KSBvZmZzZXQgPSBzY29wZS5ib3VuZHMuYmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcbiAgICAgICAgICAgICAgICBpZiAob2Zmc2V0IDwgc2NvcGUuYm91bmRzLmhhbmRsZXNbaGFuZGxlXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQpIG9mZnNldCA9IHNjb3BlLmJvdW5kcy5oYW5kbGVzW2hhbmRsZV0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvZmZzZXQgPSBjbGllbnRYIC0gc2NvcGUuYm91bmRzLmJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuXG4gICAgICAgICAgICAgICAgaWYgKG9mZnNldCA8IDApIG9mZnNldCA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKChjbGllbnRYICsgc2NvcGUuYm91bmRzLmhhbmRsZXNbaGFuZGxlXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCkgPiBzY29wZS5ib3VuZHMuYmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IHNjb3BlLmJvdW5kcy5iYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggLSBzY29wZS5ib3VuZHMuaGFuZGxlc1toYW5kbGVdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2NvcGUuZ2V0VmFsdWUgIChvZmZzZXQsIGhhbmRsZSk7XG5cbiAgICAgICAgICAgIC8vIHByZXZlbnQgZHVhbCBoYW5kbGUgdG8gY3Jvc3NcbiAgICAgICAgICAgIGlmIChzY29wZS5kdWFsICYmIHNjb3BlLnZhbHVlIFswXSA+IHNjb3BlLnZhbHVlWzFdKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhhbmRsZSA9PT0gMCkgc2NvcGUuc2V0VmFsdWUgKHNjb3BlLnZhbHVlWzBdICwgMSk7XG4gICAgICAgICAgICAgICAgZWxzZSBzY29wZS5zZXRWYWx1ZShzY29wZS52YWx1ZVsxXSwwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuXG4gICAgICAgIHNjb3BlLmZvY3VzQ0IgPSBmdW5jdGlvbiAoaW5zaWRlKSB7XG4gICAgICAgICAgICBpZiAoaW5zaWRlKSB7XG4gICAgICAgICAgICAgICAgJGRvY3VtZW50Lm9uKCdrZXlkb3duJyxzY29wZS5rZXlkb3duKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgJGRvY3VtZW50LnVuYmluZCgna2V5ZG93bicsc2NvcGUua2V5ZG93bik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gYmFyIHdhcyB0b3VjaCBsZXQgbW92ZSBoYW5kbGUgdG8gdGhpcyBwb2ludFxuICAgICAgICBzY29wZS50b3VjaEJhckNCID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICB2YXIgaGFuZGxlPTA7XG4gICAgICAgICAgICB2YXIgcmVsYXRpdmU7XG4gICAgICAgICAgICB2YXIgdG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuICAgICAgICAgICAgdmFyIG9sZHZhbHVlID0gc2NvcGUudmFsdWVbaGFuZGxlXTtcblxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgLy8gaWYgd2UgaGF2ZSB0d28gaGFuZGxlcyBzZWxlY3QgY2xvc2VzdCBvbmUgZnJvbSB0b3VjaCBwb2ludFxuICAgICAgICAgICAgaWYgKHNjb3BlLmR1YWwpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2NvcGUudmVydGljYWwpIHJlbGF0aXZlID0gKHRvdWNoZXNbMF0ucGFnZVkgLSBzY29wZS5ib3VuZHMuYmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbSkgLyBzY29wZS5ib3VuZHMuYmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcbiAgICAgICAgICAgICAgICBlbHNlIHJlbGF0aXZlPSAodG91Y2hlc1swXS5wYWdlWCAtIHNjb3BlLmJvdW5kcy5iYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCkgLyBzY29wZS5ib3VuZHMuYmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuXG4gICAgICAgICAgICAgICAgdmFyIGRpc3RhbmNlMCA9IE1hdGguYWJzKHJlbGF0aXZlIC0gc2NvcGUucmVsYXRpdmVbMF0pO1xuICAgICAgICAgICAgICAgIHZhciBkaXN0YW5jZTEgPSBNYXRoLmFicyhyZWxhdGl2ZSAtIHNjb3BlLnJlbGF0aXZlWzFdKTtcbiAgICAgICAgICAgICAgICBpZiAoZGlzdGFuY2UxIDwgZGlzdGFuY2UwKSBoYW5kbGU9MTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gbW92ZSBoYW5kbGUgdG8gbmV3IHBsYWNlXG4gICAgICAgICAgICBzY29wZS5tb3ZlSGFuZGxlIChoYW5kbGUsdG91Y2hlc1swXS5wYWdlWCwgdG91Y2hlc1swXS5wYWdlWSk7XG4gICAgICAgICAgICBpZiAoc2NvcGUuY2FsbGJhY2sgJiYgb2xkdmFsdWUgIT09IHNjb3BlLnZhbHVlW2hhbmRsZV0pIHNjb3BlLmNhbGxiYWNrIChzY29wZS52YWx1ZVtoYW5kbGVdLCBzY29wZS5jdHJsaGFuZGxlKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBoYW5kbGUgd2FzIHRvdWNoIGFuZCBkcmFnXG4gICAgICAgIHNjb3BlLnRvdWNoSGFuZGxlQ0IgPSBmdW5jdGlvbiAodG91Y2hldnQsIGhhbmRsZSkge1xuICAgICAgICAgICAgdmFyIG9sZHZhbHVlID0gc2NvcGUudmFsdWVbaGFuZGxlXTtcblxuICAgICAgICAgICAgdG91Y2hldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICRkb2N1bWVudC5vbigndG91Y2htb3ZlJyx0b3VjaG1vdmUpO1xuICAgICAgICAgICAgJGRvY3VtZW50Lm9uKCd0b3VjaGVuZCcgLHRvdWNoZW5kKTtcbiAgICAgICAgICAgIGVsZW1lbnQudW5iaW5kKCd0b3VjaHN0YXJ0Jywgc2NvcGUudG91Y2hCYXJDQik7XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHRvdWNobW92ZShldmVudCkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdmFyIHRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpZHggPSAwOyBpZHggPCB0b3VjaGVzLmxlbmd0aDsgaWR4KyspIHtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUubW92ZUhhbmRsZSAoaGFuZGxlLHRvdWNoZXNbaWR4XS5wYWdlWCwgdG91Y2hlc1tpZHhdLnBhZ2VZKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHRvdWNoZW5kKGV2ZW50KSB7XG4gICAgICAgICAgICAgICAkZG9jdW1lbnQudW5iaW5kKCd0b3VjaG1vdmUnLHRvdWNobW92ZSk7XG4gICAgICAgICAgICAgICAkZG9jdW1lbnQudW5iaW5kKCd0b3VjaGVuZCcgLHRvdWNoZW5kKTtcbiAgICAgICAgICAgICAgIGVsZW1lbnQub24oJ3RvdWNoc3RhcnQnLCBzY29wZS50b3VjaEJhckNCKTtcblxuICAgICAgICAgICAgICAgIC8vIGlmIHZhbHVlIGNoYW5nZSBub3RpZnkgYXBwbGljYXRpb24gY2FsbGJhY2tcbiAgICAgICAgICAgICAgICBpZiAoc2NvcGUuY2FsbGJhY2sgJiYgb2xkdmFsdWUgIT09IHNjb3BlLnZhbHVlW2hhbmRsZV0pIHNjb3BlLmNhbGxiYWNrIChzY29wZS52YWx1ZVtoYW5kbGVdLCBzY29wZS5jdHJsaGFuZGxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBzY29wZS5oYW5kbGVDQiA9IGZ1bmN0aW9uIChjbGlja2V2ZW50LCBoYW5kbGUpIHtcblxuICAgICAgICAgICAgaWYgKGF0dHJzLmF1dG9tYXRpYykgcmV0dXJuO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgb2xkdmFsdWUgPSBzY29wZS52YWx1ZVtoYW5kbGVdO1xuICAgICAgICAgICAgLy8gcmVnaXN0ZXIgbW91c2UgZXZlbnQgdG8gdHJhY2sgaGFuZGxlXG4gICAgICAgICAgICBjbGlja2V2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgICRkb2N1bWVudC5vbignbW91c2Vtb3ZlJyxtb3VzZW1vdmUpO1xuICAgICAgICAgICAgJGRvY3VtZW50Lm9uKCdtb3VzZXVwJywgbW91c2V1cCk7XG4gICAgICAgICAgICBzY29wZS5oYW5kbGVzW2hhbmRsZV1bMF0uZm9jdXMoKTtcbiAgICAgICAgICAgIHNjb3BlLmFjdGlmPWhhbmRsZTtcblxuICAgICAgICAgICAgLy8gc2xpZGVyIGhhbmRsZSBpcyBtb3ZpbmdcbiAgICAgICAgICAgIGZ1bmN0aW9uIG1vdXNlbW92ZShldmVudCkge1xuICAgICAgICAgICAgICAgIHNjb3BlLm1vdmVIYW5kbGUgKGhhbmRsZSwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIG1vdXNlIGlzIHVwIGRhbnMgbGVhdmUgc2xpZGVyIHNlbmQgcmVzaXplIGV2ZW50c1xuICAgICAgICAgICAgZnVuY3Rpb24gbW91c2V1cCgpIHtcbiAgICAgICAgICAgICAgICAkZG9jdW1lbnQudW5iaW5kKCdtb3VzZW1vdmUnLCBtb3VzZW1vdmUpO1xuICAgICAgICAgICAgICAgICRkb2N1bWVudC51bmJpbmQoJ21vdXNldXAnLCBtb3VzZXVwKTtcblxuICAgICAgICAgICAgICAgIC8vIGlmIHZhbHVlIGNoYW5nZSBub3RpZnkgYXBwbGljYXRpb24gY2FsbGJhY2tcbiAgICAgICAgICAgICAgICBpZiAoc2NvcGUuY2FsbGJhY2sgJiYgb2xkdmFsdWUgIT09IHNjb3BlLnZhbHVlW2hhbmRsZV0pIHNjb3BlLmNhbGxiYWNrIChzY29wZS52YWx1ZVtoYW5kbGVdLCBzY29wZS5jdHJsaGFuZGxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICAvLyBzaW11bGF0ZSBqcXVlcnkgZmluZCBieSBjbGFzc2VzIGNhcGFiaWxpdGllcyBbd2FybmluZyBvbmx5IHJldHVybiAxc3QgZWxlbWVudHNdXG4gICAgICAgIHNjb3BlLmZpbmQgPSBmdW5jdGlvbiAoc2VsZWN0LCBlbGVtKSB7XG4gICAgICAgICAgICB2YXIgZG9tZWxlbTtcblxuICAgICAgICAgICAgaWYgKGVsZW0pIGRvbWVsZW0gPSBlbGVtWzBdLnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0KTtcbiAgICAgICAgICAgIGVsc2UgZG9tZWxlbSA9IGVsZW1lbnRbMF0ucXVlcnlTZWxlY3RvcihzZWxlY3QpO1xuXG4gICAgICAgICAgICB2YXIgYW5nZWxlbSA9IGFuZ3VsYXIuZWxlbWVudChkb21lbGVtKTtcbiAgICAgICAgICAgIHJldHVybiAoYW5nZWxlbSk7XG4gICAgICAgIH07XG5cblxuXG4gICAgICAgIHNjb3BlLmluaXRpYWxTZXR0aW5ncyA9IGZ1bmN0aW9uIChpbml0aWFsKSB7XG4gICAgICAgICAgICB2YXIgZGVjaW1hbF9wbGFjZXNfbWF0Y2hfcmVzdWx0O1xuICAgICAgICAgICAgc2NvcGUudmFsdWU9W107ICAvLyBzdG9yZSBsb3cvaGVpZ2h0IHZhbHVlIHdoZW4gdHdvIGhhbmRsZXNcbiAgICAgICAgICAgIHNjb3BlLnJlbGF0aXZlPVtdO1xuXG4gICAgICAgICAgICBpZiAoc2NvcGUucHJlY2lzaW9uID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgZGVjaW1hbF9wbGFjZXNfbWF0Y2hfcmVzdWx0ID0gKCcnICsgc2NvcGUuYnlTdGVwKS5tYXRjaCgvXFwuKFtcXGRdKikvKTtcbiAgICAgICAgICAgICAgICBzY29wZS5wcmVjaXNpb24gPSBkZWNpbWFsX3BsYWNlc19tYXRjaF9yZXN1bHQgJiYgZGVjaW1hbF9wbGFjZXNfbWF0Y2hfcmVzdWx0WzFdID8gZGVjaW1hbF9wbGFjZXNfbWF0Y2hfcmVzdWx0WzFdLmxlbmd0aCA6IDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHBvc2l0aW9uIGhhbmRsZSB0byBpbml0aWFsIHZhbHVlKHMpXG4gICAgICAgICAgICBlbGVtZW50Lm9uKCd0b3VjaHN0YXJ0Jywgc2NvcGUudG91Y2hCYXJDQik7XG4gICAgICAgICAgICBzY29wZS5oYW5kbGVzWzBdLm9uKCd0b3VjaHN0YXJ0JywgZnVuY3Rpb24oZXZ0KXtzY29wZS50b3VjaEhhbmRsZUNCKGV2dCwwKTt9KTtcblxuICAgICAgICAgICAgLy8gdGhpcyBzbGlkZXIgaGFzIHR3byBoYW5kbGVzIGxvdy9oaWdodFxuICAgICAgICAgICAgaWYgKHNjb3BlLmR1YWwpIHtcbiAgICAgICAgICAgICAgICBzY29wZS5oYW5kbGVzWzFdLmFkZENsYXNzKCdyYW5nZS1zbGlkZXItaGFuZGxlJyk7XG4gICAgICAgICAgICAgICAgc2NvcGUuaGFuZGxlc1sxXS5vbigndG91Y2hzdGFydCcsIGZ1bmN0aW9uKGV2dCl7c2NvcGUudG91Y2hIYW5kbGVDQihldnQsMSk7fSk7XG4gICAgICAgICAgICAgICAgaWYgKCFzY29wZS5pbml0dmFsdWVzKSBzY29wZS5zZXRWYWx1ZSAoaW5pdGlhbFsxXSwxKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaWYgd2UgaGF2ZSBhbiBpbml0c3RhdGUgb2JqZWN0IGFwcGx5IGl0XG4gICAgICAgICAgICBpZiAoc2NvcGUuaW5pdHZhbHVlcykgc2NvcGUuaW5pdFdpZGdldCAoc2NvcGUuaW5pdHZhbHVlcyk7XG4gICAgICAgICAgICBlbHNlICAgc2NvcGUuc2V0VmFsdWUgKGluaXRpYWxbMF0sMCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgc2NvcGUuaW5pdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNjb3BlLnNsaWRlcmlkICAgPSBhdHRycy5pZCB8fCBcInNsaWRlci1cIiArIHBhcnNlSW50IChNYXRoLnJhbmRvbSgpICogMTAwMCk7XG4gICAgICAgICAgICBzY29wZS5zdGFydFZhbHVlID0gLUluZmluaXR5O1xuICAgICAgICAgICAgc2NvcGUuc3RvcFZhbHVlICA9IEluZmluaXR5O1xuICAgICAgICAgICAgc2NvcGUuYnlTdGVwICAgPSBwYXJzZUludChhdHRycy5ieVN0ZXApIHx8IDE7XG4gICAgICAgICAgICBzY29wZS52ZXJ0aWNhbCA9IGF0dHJzLnZlcnRpY2FsICAgfHwgZmFsc2U7XG4gICAgICAgICAgICBzY29wZS5kdWFsICAgICA9IGF0dHJzLmR1YWxIYW5kbGVzfHwgZmFsc2U7XG4gICAgICAgICAgICBzY29wZS50cmlnZ2VyX2lucHV0X2NoYW5nZT0gZmFsc2U7XG4gICAgICAgICAgICBzY29wZS5ub3RNb3JlICA9IHBhcnNlSW50KGF0dHJzLm5vdE1vcmUpICAgfHwgMTAwO1xuICAgICAgICAgICAgc2NvcGUubm90TGVzcyAgPSBwYXJzZUludChhdHRycy5ub3RMZXNzKSAgIHx8IDA7XG5cbiAgICAgICAgICAgIGlmIChzY29wZS52ZXJ0aWNhbCkgZWxlbWVudC5hZGRDbGFzcyhcInZlcnRpY2FsLXJhbmdlXCIpO1xuXG4gICAgICAgICAgICBzY29wZS5oYW5kbGVzPSBbc2NvcGUuZmluZCgnLmhhbmRsZS1taW4nKSwgc2NvcGUuZmluZCgnLmhhbmRsZS1tYXgnKV07XG4gICAgICAgICAgICBzY29wZS5iYXIgICAgPSBlbGVtZW50O1xuICAgICAgICAgICAgc2NvcGUuc2xpZGVyID0gc2NvcGUuZmluZCgnLnJhbmdlLXNsaWRlci1hY3RpdmUtc2VnbWVudCcpO1xuICAgICAgICAgICAgc2NvcGUuc3RhcnQgID0gc2NvcGUuZmluZCgnLmliei1yYW5nZS1zbGlkZXItc3RhcnQnKTtcbiAgICAgICAgICAgIHNjb3BlLnN0b3AgICA9IHNjb3BlLmZpbmQoJy5pYnotcmFuZ2Utc2xpZGVyLXN0b3AnKTtcbiAgICAgICAgICAgIHNjb3BlLmRpc2FibGU9IGF0dHJzLmRpc2FibGUgfHwgZmFsc2U7XG5cbiAgICAgICAgICAgIHNjb3BlLmN0cmxoYW5kbGUgPSBuZXcgUmFuZ2VTbGlkZXJIYW5kbGUgKHNjb3BlKTtcblxuICAgICAgICAgICAgLy8gcHJlcGFyZSBET00gb2JqZWN0IHBvaW50ZXIgdG8gY29tcHV0ZSBzaXplIGR5bmFtaWNhbGx5XG4gICAgICAgICAgICBzY29wZS5ib3VuZHMgPSB7XG4gICAgICAgICAgICAgICAgYmFyICAgIDogZWxlbWVudFswXSxcbiAgICAgICAgICAgICAgICBoYW5kbGVzOiBbc2NvcGUuaGFuZGxlc1swXVswXSwgc2NvcGUuaGFuZGxlc1sxXVswXV1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmIChhdHRycy5kaXNhYmxlID09PSAndHJ1ZScpIHNjb3BlLnNldERpc2FibGUodHJ1ZSk7XG5cbiAgICAgICAgICAgIGlmIChhdHRycy5kaXNwbGF5VGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChhdHRycy5kaXNwbGF5VGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgdHJ1ZSA6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2hhbmRsZScgOlxuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUuZGlzcGxheXMgPSBzY29wZS5oYW5kbGVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUuaGFuZGxlc1swXS5hZGRDbGFzcygnaWJ6LXJhbmdlLXNsaWRlci1kaXNwbGF5Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NvcGUuZHVhbCkgc2NvcGUuaGFuZGxlc1sxXS5hZGRDbGFzcygnaWJ6LXJhbmdlLXNsaWRlci1kaXNwbGF5Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLmRpc3BsYXlzID0gIFskZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQgKGF0dHJzLmRpc3BsYXlUYXJnZXQpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Ugc2NvcGUuZGlzcGxheXM9W107XG5cbiAgICAgICAgICAgIC8vIGV4dHJhY3QgaW5pdGlhbCB2YWx1ZXMgZnJvbSBhdHRycyBhbmQgcGFyc2UgaW50byBpbnRcbiAgICAgICAgICAgIGlmICghYXR0cnMuaW5pdGlhbCkge1xuICAgICAgICAgICAgICAgIHNjb3BlLmluaXRpYWwgID0gW3Njb3BlLm5nTW9kZWwsIHNjb3BlLm5nTW9kZWxdOyAvLyBpbml0aWFsaXplIHRvIG1vZGVsIHZhbHVlc1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgaW5pdGlhbCAgPSBhdHRycy5pbml0aWFsLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICAgICAgc2NvcGUuaW5pdGlhbCA9IFtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFswXSAhPT0gdW5kZWZpbmVkID8gcGFyc2VJbnQgKGluaXRpYWxbMF0pIDogc2NvcGUubm90TGVzcyxcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFsxXSAhPT0gdW5kZWZpbmVkID8gcGFyc2VJbnQgKGluaXRpYWxbMV0pIDogc2NvcGUubm90TW9yZVxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE1vbml0b3IgYW55IGNoYW5nZXMgb24gc3RhcnQvc3RvcCBkYXRlcy5cbiAgICAgICAgICAgIHNjb3BlLiR3YXRjaCgnc3RhcnRBdCcsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGlmIChzY29wZS52YWx1ZSA8IHNjb3BlLnN0YXJ0QXQgKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vc2NvcGUuc2V0VmFsdWUgKHNjb3BlLnN0YXJ0QXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc2NvcGUuc3RhcnRBdCkgc2NvcGUuc2V0U3RhcnQgKHNjb3BlLnN0YXJ0QXQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHNjb3BlLiR3YXRjaCgnc3RvcEF0JyAsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGlmIChzY29wZS52YWx1ZSA+IHNjb3BlLnN0b3BBdCkge1xuICAgICAgICAgICAgICAgICAgICAvL3Njb3BlLnNldFZhbHVlIChzY29wZS5zdG9wQXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc2NvcGUuc3RvcEF0KSBzY29wZS5zZXRTdG9wIChzY29wZS5zdG9wQXQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIGZpbmlzaCB3aWRnZXQgaW5pdGlhbGlzYXRpb25cbiAgICAgICAgICAgIHNjb3BlLmluaXRpYWxTZXR0aW5ncyAoc2NvcGUuaW5pdGlhbCk7XG5cbiAgICAgICAgfTtcblxuICAgICAgICBzY29wZS5pbml0KCk7XG4gICAgICAgIFxuICAgICAgICAgLy8gc2xpZGVyIGlzIHJlYWR5IHByb3ZpZGUgY29udHJvbCBoYW5kbGUgdG8gYXBwbGljYXRpb24gY29udHJvbGxlclxuICAgICAgICBzY29wZS4kd2F0Y2ggKCdpbml0aG9vaycsIGZ1bmN0aW9uICgpIHsgICAgICAgICAvLyBpbml0IFZhbHVlcyBtYXkgYXJyaXZlIGxhdGVcbiAgICAgICAgICAgIGlmIChzY29wZS5pbml0aG9vaykgc2NvcGUuaW5pdGhvb2sgKHNjb3BlLmN0cmxoYW5kbGUpO1xuICAgICAgICB9KTtcblxuICAgICAgICBzY29wZS4kd2F0Y2ggKCdpbml0dmFsdWVzJywgZnVuY3Rpb24gKCkgeyBcdC8vIGluaXQgVmFsdWVzIG1heSBhcnJpdmUgbGF0ZVxuICAgICAgICAgICAgaWYgKHNjb3BlLmluaXR2YWx1ZXMpIHNjb3BlLmluaXRXaWRnZXQoc2NvcGUuaW5pdHZhbHVlcyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIHR3by13YXkgYmluZGluZyBpZiBtb2RlbCB2YWx1ZSBjaGFuZ2VzXG4gICAgICAgIHNjb3BlLiR3YXRjaCAoJ25nTW9kZWwnLCBmdW5jdGlvbiAobmV3VmFsdWUpIHtcbiAgICAgICAgICBzY29wZS5zZXRWYWx1ZShuZXdWYWx1ZSwgMCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxucmV0dXJuIHtcbiAgICByZXN0cmljdDogXCJFXCIsICAgIC8vIHJlc3RyaWN0IHRvIDxyYW5nZS1zbGlkZXI+IEhUTUwgZWxlbWVudCBuYW1lXG4gICAgc2NvcGU6IHtcbiAgICAgICAgc3RhcnRBdCAgOic9JywgIC8vIEZpcnN0IGFjY2VwdGFibGUgZGF0ZVxuICAgICAgICBzdG9wQXQgICA6Jz0nLCAgLy8gTGFzdCBhY2NlcHRhYmxlIGRhdGVcbiAgICAgICAgY2FsbGJhY2sgOic9JywgIC8vIENhbGxiYWNrIHRvIGFjdGlmIHdoZW4gYSBkYXRlIGlzIHNlbGVjdGVkXG4gICAgICAgIGZvcm1hdHRlcjonPScsICAvLyBDYWxsYmFjayBmb3IgZHJhZyBldmVudCBjYWxsIGVhY2ggdGltZSBpbnRlcm5hbCB2YWx1ZSBjaGFuZ2VzXG4gICAgICAgIGluaXRob29rIDonPScsICAvLyBIb29rIHBvaW50IHRvIGNvbnRyb2wgc2xpZGVyIGZyb20gQVBJXG4gICAgICAgIGNiaGFuZGxlIDonPScsICAvLyBBcmd1bWVudCBhZGRlZCB0byBldmVyeSBjYWxsYmFja1xuICAgICAgICBpbml0dmFsdWVzOic9JywgICAvLyBJbml0aWFsIHZhbHVlcyBhcyBhIHNpbmdsZSBvYmplY3RcbiAgICAgICAgbmdNb2RlbDogJz0nICAgIC8vIHRoZSBtb2RlbCB2YWx1ZVxuICAgIH0sXG4gICAgcmVxdWlyZTogJz9uZ01vZGVsJyxcbiAgICB0ZW1wbGF0ZTogdGVtcGxhdGUsIC8vIGh0bWwgdGVtcGxhdGUgaXMgYnVpbGQgZnJvbSBKU1xuICAgIHJlcGxhY2U6IHRydWUsICAgICAgLy8gcmVwbGFjZSBjdXJyZW50IGRpcmVjdGl2ZSB3aXRoIHRlbXBsYXRlIHdoaWxlIGluaGVyaXRpbmcgb2YgY2xhc3NcbiAgICBsaW5rOiBsaW5rICAgICAgICAgIC8vIHBpY2thZGF0ZSBvYmplY3QncyBtZXRob2RzXG59O1xufV0pO1xuXG5jb25zb2xlLmxvZyAoXCJSYW5nZVNsaWRlciBMb2FkZWRcIik7XG5cbn0pKCk7IiwiLypcbiBhbHNhLWdhdGV3YXkgLS0gcHJvdmlkZSBhIFJFU1QvSFRUUCBpbnRlcmZhY2UgdG8gQUxTQS1NaXhlclxuXG4gQ29weXJpZ2h0IChDKSAyMDE1LCBGdWx1cCBBciBGb2xsXG5cbiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3JcbiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gYWxvbmcgd2l0aCBzY29wZSBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4gRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuXG5cbiBSZWZlcmVuY2VzOlxuXG4gKi9cblxuKGZ1bmN0aW9uICgpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgdGVtcGxhdGUgPVxuICAgICAgICAgICc8ZGl2IGNsYXNzPVwiYWZiLW1vbml0b3JcIiBuZy1jbGljaz1cImdldHBpbmcoKVwiPicgK1xuICAgICAgICAgJzxzcGFuIGNsYXNzPVwiYWZiLXJlZnJlc2gtdG9rZW5cIiAgPmFmYjovL3t7aG9zdG5hbWV9fTp7e2h0dHBkcG9ydH19PC9zcGFuPicgK1xuICAgICAgICAgJzxpIGNsYXNzPVwie3tpY29ufX1cIj48L2k+JyArXG4gICAgICAgICAnPC9kaXY+JztcblxuXG4vLyBzY29wZSBtb2R1bGUgaXMgbG9hZCBzdGF0aWNhbGx5IGJlZm9yZSBhbnkgcm91dGUgaXMgY2F0aXZhdGVkXG5hbmd1bGFyLm1vZHVsZSgnVG9rZW5SZWZyZXNoJywgWydBcHBDb25maWcnLCAnTW9kYWxOb3RpZmljYXRpb24nXSlcblxuICAgIC5kaXJlY3RpdmUgKCd0b2tlblJlZnJlc2gnLCBbXCIkdGltZW91dFwiLCBcIiRodHRwXCIsIFwiJGxvY2F0aW9uXCIsIFwiTm90aWZpY2F0aW9uXCIsIFwiQXBwQ29uZmlnXCIsIGZ1bmN0aW9uKCR0aW1lb3V0LCAkaHR0cCwgJGxvY2F0aW9uLCBOb3RpZmljYXRpb24sIEFwcENvbmZpZykge1xuXG4gICAgZnVuY3Rpb24gbXltZXRob2RzKHNjb3BlLCBlbGVtLCBhdHRycykge1xuICAgICAgICBzY29wZS5zdGF0dXM9dW5kZWZpbmVkOyAvLyBuZWl0aGVyIHRodSBuZWl0aGVyIGZhbHNlXG4gICAgICAgIFxuICAgIFxuICAgICAgICBzY29wZS5vbmxpbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBlbGVtLmFkZENsYXNzICAgIChcIm9ubGluZVwiKTtcbiAgICAgICAgICAgIGVsZW0ucmVtb3ZlQ2xhc3MgKFwib2ZmbGluZVwiKTtcbiAgICAgICAgfTtcblxuICAgICAgICBzY29wZS5vZmZsaW5lID0gZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIGVsZW0uYWRkQ2xhc3MgICAgKFwib2ZmbGluZVwiKTtcbiAgICAgICAgICAgIGVsZW0ucmVtb3ZlQ2xhc3MgKFwib25saW5lXCIpO1xuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgc2NvcGUub25lcnJvciA9IGZ1bmN0aW9uKGRhdGEsIGVycmNvZGUsIGhlYWRlcnMpIHtcbiAgICAgICAgICAgIGlmIChzY29wZS5zdGF0dXMgIT09IGZhbHNlKSAge1xuICAgICAgICAgICAgICAgIE5vdGlmaWNhdGlvbi53YXJuaW5nICh7bWVzc2FnZTogXCJBcHBGcmFtZXdvcmsgQmluZGVyIExvc3RcIiwgZGVsYXk6IDUwMDB9KTtcbiAgICAgICAgICAgICAgICBzY29wZS5vZmZsaW5lKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzY29wZS5zdGF0dXMgPSAwO1xuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgc2NvcGUub25zdWNjZXNzID0gZnVuY3Rpb24oZGF0YSwgZXJyY29kZSwgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICBpZiAoc2NvcGUuc3RhdHVzICE9PSB0cnVlKSAge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLnJlcXVlc3QudG9rZW4pIEFwcENvbmZpZy5zZXNzaW9uLnRva2VuID0gZGF0YS5yZXF1ZXN0LnRva2VuO1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLnJlcXVlc3QudXVpZCkgIEFwcENvbmZpZy5zZXNzaW9uLnV1aWQgID0gZGF0YS5yZXF1ZXN0LnV1aWQ7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEucmVxdWVzdC50aW1lb3V0KSAgQXBwQ29uZmlnLnNlc3Npb24udGltZW91dCAgPSBkYXRhLnJlcXVlc3QudGltZW91dDtcblxuICAgICAgICAgICAgICAgIE5vdGlmaWNhdGlvbi5zdWNjZXNzICh7bWVzc2FnZTogXCJBcHBGcmFtZXdvcmsgQmluZGVyIEJhY2sgdG8gTGl2ZVwiLCBkZWxheTogMzAwMH0pO1xuICAgICAgICAgICAgICAgIHNjb3BlLm9ubGluZSgpO1xuICAgICAgICAgICAgICAgIGlmIChzY29wZS5jYWxsYmFjaykgc2NvcGUuY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNjb3BlLnN0YXR1cyA9IDE7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gQ2hlY2sgQmluZGVyIHN0YXR1c1xuICAgICAgICBzY29wZS5nZXRwaW5nID0gZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgICAgIHZhciBoYW5kbGVyID0gJGh0dHAuZ2V0KEFwcENvbmZpZy5zZXNzaW9uLnBpbmcrJz90b2tlbj0nKyBBcHBDb25maWcuc2Vzc2lvbi50b2tlbik7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIHByb2Nlc3Mgc3VjY2VzcyBhbmQgZXJyb3JcbiAgICAgICAgICAgIGhhbmRsZXIuc3VjY2VzcyhzY29wZS5vbnN1Y2Nlc3MpO1xuICAgICAgICAgICAgaGFuZGxlci5lcnJvcihzY29wZS5vbmVycm9yKTtcblxuICAgICAgICAgICAgLy8gcmVzdGFydCBhIG5ldyB0aW1lciBmb3IgbmV4dCBwaW5nXG4gICAgICAgICAgICAkdGltZW91dCAoc2NvcGUuZ2V0cGluZywgQXBwQ29uZmlnLnNlc3Npb24ucGluZ3JhdGUqMTAwMCk7XG4gICAgICAgIH07XG4gICAgICAgIFxuICAgICAgICAvLyBDaGVjayBCaW5kZXIgc3RhdHVzXG4gICAgICAgIHNjb3BlLnJlZnJlc2ggPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBoYW5kbGVyID0gJGh0dHAuZ2V0KEFwcENvbmZpZy5zZXNzaW9uLnJlZnJlc2grJz90b2tlbj0nKyBBcHBDb25maWcuc2Vzc2lvbi50b2tlbik7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIHByb2Nlc3Mgc3VjY2VzcyBhbmQgZXJyb3JcbiAgICAgICAgICAgIGhhbmRsZXIuc3VjY2VzcyhzY29wZS5vbnN1Y2Nlc3MpO1xuICAgICAgICAgICAgaGFuZGxlci5lcnJvcihzY29wZS5vbmVycm9yKTtcbiAgICAgICAgICAgIC8vIHJlc3RhcnQgYSBuZXcgdGltZXIgZm9yIG5leHQgcmVmcmVzaCB0byAxLzQgb2YgdGltZW91dCBzZXNzaW9uXG4gICAgICAgICAgICAkdGltZW91dCAoc2NvcGUucmVmcmVzaCwgQXBwQ29uZmlnLnNlc3Npb24udGltZW91dCAqMjUwKTtcbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgICAgIC8vIEluaXRpYWwgY29ubmVjdGlvblxuICAgICAgICBzY29wZS50a2NyZWF0ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGhhbmRsZXIgPSAkaHR0cC5nZXQoQXBwQ29uZmlnLnNlc3Npb24uY3JlYXRlKyc/dG9rZW49JysgQXBwQ29uZmlnLnNlc3Npb24uaW5pdGlhbCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIHByb2Nlc3Mgc3VjY2VzcyBhbmQgZXJyb3JcbiAgICAgICAgICAgIGhhbmRsZXIuc3VjY2VzcyhzY29wZS5vbnN1Y2Nlc3MpO1xuICAgICAgICAgICAgaGFuZGxlci5lcnJvcihzY29wZS5vbmVycm9yKTtcbiAgICAgICAgfTtcbiBcbiAgICAgICAgc2NvcGUuaWNvbiAgICAgID0gYXR0cnMuaWNvbiAgIHx8IFwiZmktbGlnaHRidWxiXCI7XG4gICAgICAgIHNjb3BlLmhvc3RuYW1lICA9ICRsb2NhdGlvbi5ob3N0KCk7XG4gICAgICAgIHNjb3BlLmh0dHBkcG9ydCA9ICRsb2NhdGlvbi5wb3J0KCk7XG4gICAgICAgIHNjb3BlLmF1dG9sb2cgICA9IEpTT04ucGFyc2UoYXR0cnMuYXV0b2xvZyB8fCBmYWxzZSk7XG4gICAgICAgIFxuICAgICAgICBpZiAoc2NvcGUuYXV0b2xvZykgc2NvcGUudGtjcmVhdGUoKTtcblxuICAgICAgICAvLyBJbml0IHBpbmcgYW5kIHJlZnJlc2ggcHJvY2Vzc1xuICAgICAgICAkdGltZW91dCAoc2NvcGUuZ2V0cGluZywgQXBwQ29uZmlnLnNlc3Npb24ucGluZ3JhdGUqMTAwMCk7XG4gICAgICAgICR0aW1lb3V0IChzY29wZS5yZWZyZXNoLCBBcHBDb25maWcuc2Vzc2lvbi50aW1lb3V0ICoyNTApO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIHRlbXBsYXRlOiB0ZW1wbGF0ZSxcbiAgICAgICAgc2NvcGU6IHtcbiAgICAgICAgICAgIGNhbGxiYWNrIDogXCI9XCJcbiAgICAgICAgfSxcbiAgICAgICAgcmVzdHJpY3Q6ICdFJyxcbiAgICAgICAgbGluazogbXltZXRob2RzXG4gICAgfTtcbn1dKTtcblxufSkoKTtcbmNvbnNvbGUubG9nIChcIlRva2VuIFJlZnJlc2ggTG9hZGVkXCIpO1xuXG4iLCIvKiBcbiAqIENvcHlyaWdodCAoQykgMjAxNSBcIklvVC5iemhcIlxuICogQXV0aG9yIFwiRnVsdXAgQXIgRm9sbFwiXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiAqIFxuICogQnVnczogSW5wdXQgd2l0aCBDYWxsYmFjayBTSE9VTEQgQkUgZ2V0ICdyZXF1aXJlZCcgY2xhc3NcbiAqIFxuICogcmVmOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9FdmVudHMvbW91c2VvdmVyXG4gKiBcbiAqIHVzYWdlOiBcbiAqIFxuICogdGlwTW9kYWw6IGxpc3RlbiBldmVudCBmcm9tIGVsZW0ucGFyZW50KCkgdG8gZGlzcGxheSB0aXAtbW9kYWxcbiAqICAgICAgPGRpdiBjbGFzcz1cInh4eHhcIj5cbiAqICAgICAgICAgIDx0aXAtbW9kYWwgdGlwPXh4eHg+PC90aXAtbW9kYWw+XG4gKiAgICAgICAgICA8aW5wdXQtdGV4dCAuLi4uPjwvaW5wdXQtdGV4dD5cbiAqICAgICAgPC9kaXY+XG4gKiAgICAgIFxuICogTm90ZTogdXNlIENTUy52aXNpYmlsaXR5IHRvIGF2b2lkIGRpc3BsYXkgZmxpY2tlcmluZyBhdCBpbml0aWFsIGRpc3BsYXkuXG4gKi9cblxuKGZ1bmN0aW9uICgpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgdG1wbCA9ICc8ZGl2IGNsYXNzPVwidGlwLW1vZGFsLXBvcHVwXCI+JyArXG4gICAgICAgICAgICAnPGkgY2xhc3M9XCJ7e2ljb259fVwiPjwvaT4nICtcbiAgICAgICAgICAgICc8c3Bhbj57e3RpcH19PC9zcGFuPicgK1xuICAgICAgICAgICAgJzwvc3Bhbj48L2Rpdj4nIDtcblxuICAgIGFuZ3VsYXIubW9kdWxlKCdNb2RhbE5vdGlmaWNhdGlvbicsIFtdKVxuICAgICAgICAgICAgLmRpcmVjdGl2ZSgndGlwTW9kYWwnLCBbXCIkdGltZW91dFwiLCBmdW5jdGlvbiAoJHRpbWVvdXQpIHtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIG15bWV0aG9kcyhzY29wZSwgZWxlbSwgYXR0cnMpIHtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUucGFyZW50ID0gZWxlbS5wYXJlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUubW9kYWwgICAgPSBlbGVtLmZpbmQoXCJkaXZcIik7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgIFxuICAgICAgICAgICAgICAgICAgICAvLyBkZWxheSB0aXAgZGlzcGxheSB0byBhdm9pZCBibGlua2luZyB3aGVuIG1vdmluZyBtb3VzZSBmYXN0XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRpc3BsYXkgKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gYWN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NvcGUuc2hvdykgc2NvcGUubW9kYWwuY3NzKHtvcGFjaXR5OiAxLCB2aXNpYmlsaXR5Oid2aXNpYmxlJ30pOyAgXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5zaG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLnRpbWVvdXQgPSAkdGltZW91dChhY3Rpb24sIHNjb3BlLmRlbGF5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gY2xvc2UgKCkge1xuICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLnNob3cgPSBmYWxzZTsgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICBzY29wZS5tb2RhbC5jc3Moe29wYWNpdHk6IDAsIHZpc2liaWxpdHk6J2hpZGRlbid9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBcblxuICAgICAgICAgICAgICAgICAgICAvLyBhanVzdCBpY29uIG9yIHVzZSBkZWZhdWx0XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLmljb24gID0gYXR0cnMuaWNvbiB8fCAnZmktbGlnaHRidWxiJztcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBQYXJlbnQgZWxlbWVudCB0byBnZXQgbW91c2UgZXZlbnRcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUucGFyZW50LmFkZENsYXNzICgnYXMtbW9kYWwtdGlwJyk7XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLnBhcmVudC5iaW5kKCdjbGljaycsIGNsb3NlKTtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUucGFyZW50LmJpbmQoJ2ZvY3VzJywgZGlzcGxheSk7XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLnBhcmVudC5iaW5kKCdtb3VzZW92ZXInLCBkaXNwbGF5KTtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUucGFyZW50LmJpbmQoJ21vdXNlbGVhdmUnLCBjbG9zZSk7XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLnBhcmVudC5iaW5kKCdibHVyJywgY2xvc2UpO1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUuZGVsYXkgPSBhdHRycy5kZWxheSB8fCAxMDAwOyAvLyB3YWl0IDFzIGJlZm9yZSBkaXNwbGF5aW5nIHRpcFxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3RyaWN0OiAnRScsXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlOiB0bXBsLFxuICAgICAgICAgICAgICAgICAgICBsaW5rOiBteW1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIHNjb3BlOiB7dGlwOiBcIj1cIn0gLy8gdGlwIG1heSBub3QgYmUgZGVmaW5lZCB3aGVuIHdpZGdldCBpcyBkaXNwbGF5XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1dKTtcbn0pKCk7XG4iLCIvKiBcbiAqIENvcHlyaWdodCAoQykgMjAxNSBcIklvVC5iemhcIlxuICogQXV0aG9yIFwiRnVsdXAgQXIgRm9sbFwiXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiAqIFxuICogQnVnczogSW5wdXQgd2l0aCBDYWxsYmFjayBTSE9VTEQgQkUgZ2V0ICdyZXF1aXJlZCcgY2xhc3NcbiAqL1xuXG4oZnVuY3Rpb24gKCkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciB0bXBsID0gJzxzcGFuIHRpdGxlPVwiR290bzoge3tocmVmfX1cIiBuZy1jbGljaz1cImNsaWNrZWQoKVwiPicgK1xuICAgICAgICAgICAgJzxpIGNsYXNzPVwie3tpY29ufX1cIj48L2k+JyArXG4gICAgICAgICAgICAnPHNwYW4+e3tsYWJlbH19PC9zcGFuPicgK1xuICAgICAgICAgICAgJzwvc3Bhbj4nO1xuXG5cbiAgICBhbmd1bGFyLm1vZHVsZSgnTGlua0J1dHRvbicsIFtdKVxuICAgICAgICAgICAgLmRpcmVjdGl2ZSgnbGlua0J1dHRvbicsIFtcIiRsb2NhdGlvblwiLCBmdW5jdGlvbiAoJGxvY2F0aW9uKSB7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gbXltZXRob2RzKHNjb3BlLCBlbGVtLCBhdHRycykge1xuXG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLmNsaWNrZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXR0cnMucXVlcnkpICRsb2NhdGlvbi5wYXRoKGF0dHJzLmhyZWYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSAkbG9jYXRpb24ucGF0aChhdHRycy5ocmVmKS5zZWFyY2goYXR0cnMucXVlcnkpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIGFqdXN0IGljb24gb3IgdXNlIGRlZmF1bHRcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUuaWNvbiA9IGF0dHJzLmljb24gICB8fCAnZmktbGluayc7XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLmxhYmVsID0gYXR0cnMubGFiZWwgfHwgJ0p1bXAnO1xuICAgICAgICAgICAgICAgICAgICBzY29wZS5ocmVmICA9IGF0dHJzLmhyZWYgIHx8ICcvaG9tZSc7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAvLyBhZGQgbGFiZWwgYXMgY2xhc3NcbiAgICAgICAgICAgICAgICAgICAgZWxlbS5hZGRDbGFzcyAoc2NvcGUubGFiZWwudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdHJpY3Q6ICdFJyxcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGU6IHRtcGwsXG4gICAgICAgICAgICAgICAgICAgIGxpbms6IG15bWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgc2NvcGU6IHt9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1dKTtcbn0pKCk7XG4iLCIvKiBcbiAqIENvcHlyaWdodCAoQykgMjAxNSBcIklvVC5iemhcIlxuICogQXV0aG9yIFwiRnVsdXAgQXIgRm9sbFwiXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiAqIFxuICogQnVnczogSW5wdXQgd2l0aCBDYWxsYmFjayBTSE9VTEQgQkUgZ2V0ICdyZXF1aXJlZCcgY2xhc3NcbiAqL1xuXG4oZnVuY3Rpb24gKCkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciB0bXBsID0gJzxkaXYgIG5nLWNsaWNrPVwiY2xpY2tlZCgpXCI+JyArXG4gICAgICAgICAgICAnPGkgY2xhc3M9XCJ7e2ljb259fVwiPjwvaT4nICtcbiAgICAgICAgICAgICc8c3Bhbj57e2xhYmVsfX08L3NwYW4+JyArXG4gICAgICAgICAgICAnPC9kaXY+JztcblxuICAgIGFuZ3VsYXIubW9kdWxlKCdTdWJtaXRCdXR0b24nLCBbXSlcbiAgICAgICAgICAgIC5kaXJlY3RpdmUoJ3N1Ym1pdEJ1dHRvbicsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIG15bWV0aG9kcyhzY29wZSwgZWxlbSwgYXR0cnMpIHtcblxuICAgICAgICAgICAgICAgICAgICAvLyBhanVzdCBpY29uIG9yIHVzZSBkZWZhdWx0XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLmljb24gPSBhdHRycy5pY29uIHx8ICdmaS1mb290JztcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUubGFiZWwgPSBhdHRycy5sYWJlbCB8fCAnTmV4dCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAvLyBhZGQgbGFiZWwgYXMgY2xhc3NcbiAgICAgICAgICAgICAgICAgICAgZWxlbS5hZGRDbGFzcyAoc2NvcGUubGFiZWwudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAvLyBub3RlOiBjbGlja2VkIGluIGltcG9ydGVkIGFuZCB3aGVuIHRlbXBsYXRlIGlzIGNsaWNrZWRcbiAgICAgICAgICAgICAgICAgICAgLy8gaXQgd2lsbCBjYWxsIGNsaWNrZWQgbWV0aG9kIHBhc3NlZCBpbiBwYXJhbS5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdHJpY3Q6ICdFJyxcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGU6IHRtcGwsXG4gICAgICAgICAgICAgICAgICAgIGxpbms6IG15bWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgc2NvcGU6IHtjbGlja2VkIDogJz0nfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbn0pKCk7XG4iLCIvKiBcbiAqIENvcHlyaWdodCAoQykgMjAxNSBcIklvVC5iemhcIlxuICogQXV0aG9yIFwiRnVsdXAgQXIgRm9sbFwiXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiAqIFxuICogQnVnczogSW5wdXQgd2l0aCBDYWxsYmFjayBTSE9VTEQgQkUgZ2V0ICdyZXF1aXJlZCcgY2xhc3NcbiAqL1xuXG4oZnVuY3Rpb24gKCkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciB0bXBsQXBwbGkgPSAnPGRpdiAgbmctY2xpY2s9XCJjbGlja2VkKClcIj4nICtcbiAgICAgICAgICAgICc8aW1nIG5nLXNyYz1cInt7aWNvbn19XCI+JyArXG4gICAgICAgICAgICAnPHNwYW4+e3tsYWJlbH19PC9zcGFuPicgK1xuICAgICAgICAgICAgJzwvZGl2Pic7XG4gICAgXG4gICAgdmFyIHRtcGxNb2RhbCA9IFxuICAgICAgICAgICAgJzxiIGNsYXNzPVwiY2xvc2UtYnV0dG9uXCIgbmctY2xpY2s9XCJjbG9zZSgpXCI+w5c8L2I+JyArXG4gICAgICAgICAgICAnPGltZyBuZy1zcmM9XCJ7e2ljb259fVwiPicgK1xuICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwibW9kYWwtdGV4dFwiPkFwcGxpY2F0aW9uIDxiPnt7bmFtZX19PC9iPjwvc3Bhbj4nICtcbiAgICAgICAgICAgICc8dWwgY2xhc3M9XCJ2ZXJ0aWNhbCBpY29uLWxlZnQgcHJpbWFyeSBtZW51LWJhclwiPicgK1xuICAgICAgICAgICAgJzxsaT48YSBuZy1jbGljaz1hY3Rpb24oXCJzdGFydFwiKT48aSBjbGFzcz1cImZpLWNoZWNrXCI+IFN0YXJ0PC9pPjwvYT48L2xpPicgK1xuICAgICAgICAgICAgJzxsaT48YSBuZy1jbGljaz1hY3Rpb24oXCJzdG9wXCIpPjxpIGNsYXNzPVwiZmkteFwiPiBTdG9wPC9pPjwvYT48L2xpPicgK1xuICAgICAgICAgICAgJzxsaT48YSBuZy1jbGljaz1hY3Rpb24oXCJpbmZvXCIpPjxpIGNsYXNzPVwiZmktaW5mb1wiPiBJbmZvPC9pPjwvYT48L2xpPicgK1xuICAgICAgICAgICAgJzwvdWw+JyArXG4gICAgICAgICAgICAnJztcblxuICAgIGFuZ3VsYXIubW9kdWxlKCdBcHBsaUJ1dHRvbicsIFtdKVxuICAgICAgICAgICAgLmRpcmVjdGl2ZSgnYXBwbGlCdXR0b24nLCBbXCJBcHBDb25maWdcIiwgXCJBcHBDYWxsXCIsIFwiTW9kYWxGYWN0b3J5XCIsIFwiTm90aWZpY2F0aW9uXCIsIFwiJHRpbWVvdXRcIiwgZnVuY3Rpb24gKEFwcENvbmZpZywgQXBwQ2FsbCwgTW9kYWxGYWN0b3J5LCBOb3RpZmljYXRpb24sICR0aW1lb3V0KSB7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBteW1ldGhvZHMoc2NvcGUsIGVsZW0sIGF0dHJzKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLmNsaWNrZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjbG9zZU1vZGFsID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cgKFwiTW9kYWwgQ2xvc2luZ1wiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5tb2RhbC5kZWFjdGl2YXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRpbWVvdXQgKGZ1bmN0aW9uKCkge3Njb3BlLm1vZGFsLmRlc3Ryb3koKTt9LCAxMDAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhY3Rpb25Nb2RhbCA9IGZ1bmN0aW9uKGFjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nIChcIk1vZGFsIEFjdGlvbj0lc1wiLCBhY3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwic3RhcnRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwcENhbGwuZ2V0IChcImFmbS1tYWluXCIsIFwic3RhcnRcIiwge2lkOiBzY29wZS5hcHBsaUlEfSwgZnVuY3Rpb24ocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90aWZpY2F0aW9uLmVycm9yICh7bWVzc2FnZTogXCJGYWlsIHRvIHN0YXJ0IGFwcGxpY2F0aW9uPVwiICsgc2NvcGUubGFiZWwgK1wiIElEPVwiKyBzY29wZS5hcHBsaUlELCBkZWxheTogNTAwMH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLmFkZENsYXNzIChcImZhaWxcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0ucmVtb3ZlQ2xhc3MgKFwic3VjY2Vzc1wiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUuY2FsbGJhY2sgKHNjb3BlLmFwcGxpSUQsIFwiL2FwaS9hZm0tbWFpbi9zdGFydFwiLCByZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayB0aGlzIGlzIGEgdmFsaWQgcmVzcG9uc2UgZnJvbSBCaW5kZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5yZXF1ZXN0Lmp0eXBlICE9PSBcIkFKQl9yZXBseVwiICYmIHJlc3BvbnNlLmRhdGEucmVxdWVzdC5hcGkgIT09IFwic3RhcnRcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3RpZmljYXRpb24uZXJyb3IgKHttZXNzYWdlOiBcIkludmFsaWQgUmVzcG9uZCB0byAvb3BhL2FmbS1tYWluL3N0YXJ0IHJlc3BvbnNlLmRhdGE9XCIrcmVzcG9uc2UuZGF0YSwgZGVsYXk6IDUwMDB9KTsgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uYWRkQ2xhc3MgKFwiZmFpbFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5yZW1vdmVDbGFzcyAoXCJzdWNjZXNzXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5jYWxsYmFjayAoc2NvcGUuYXBwbGlJRCwgXCIvYXBpL2FmbS1tYWluL3N0YXJ0XCIsIHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBcHBsaWNhdGlvbiB3YXMgc3RhcnRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0uYWRkQ2xhc3MgKFwic3VjY2Vzc1wiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtLnJlbW92ZUNsYXNzIChcImZhaWxcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUucnVuSUQgPSByZXNwb25zZS5kYXRhLnJlc3BvbnNlLnJ1bmlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLmNhbGxiYWNrIChzY29wZS5hcHBsaUlELCBcIi9hcGkvYWZtLW1haW4vc3RhcnRcIiwgcmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwic3RvcFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nIChcIkFjdGlvbk1vZGFsIHVua25vd24gYWN0aW9uPVslc11cIiwgYWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZU1vZGFsKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyByZWZlcmVuY2UgaHR0cDovL2ZvdW5kYXRpb24uenVyYi5jb20vYXBwcy9kb2NzLyMhL2FuZ3VsYXItbW9kdWxlc1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25JbjogJ3NsaWRlSW5Gcm9tVG9wJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50U2NvcGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uICA6IGFjdGlvbk1vZGFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZSAgIDogY2xvc2VNb2RhbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbiAgICA6IHNjb3BlLmljb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsICAgOiBzY29wZS5sYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRlbXBsYXRlIDogdG1wbE1vZGFsXG4gICAgICAgICAgICAgICAgICAgICAgICB9OyBcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFBvcHVwIE1vZGFsIHRvIHJlbmRlciBhcHBsaWNhdGlvbiBkYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5tb2RhbCA9IG5ldyBNb2RhbEZhY3RvcnkoY29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLm1vZGFsLmFjdGl2YXRlICgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIGV4dHJhY3QgYXBwbGljYXRpb24gaW5mb3JtYXRpb24gZnJvbSBBcHBJRCtTdG9yZVxuICAgICAgICAgICAgICAgICAgICBpZiAoYXR0cnMuaGFuZGxlICYmIHNjb3BlLnN0b3JlIFthdHRycy5oYW5kbGVdLm5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLmljb24gID0gQXBwQ29uZmlnLnBhdGhzLmljb25zICsgc2NvcGUuc3RvcmUgW2F0dHJzLmhhbmRsZV0ubmFtZS50b0xvd2VyQ2FzZSgpICsgJy1pY28ucG5nJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLmxhYmVsID0gc2NvcGUuc3RvcmUgW2F0dHJzLmhhbmRsZV0ubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLmFwcGxpSUQ9IGF0dHJzLmhhbmRsZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5pY29uICA9IEFwcENvbmZpZy5wYXRocy5pY29ucyArICd3M2MtaWNvLnBuZyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUubGFiZWwgPSBhdHRycy5oYW5kbGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIC8vIGFkZCBsYWJlbCBhcyBjbGFzc1xuICAgICAgICAgICAgICAgICAgICBlbGVtLmFkZENsYXNzIChzY29wZS5sYWJlbC50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIC8vIG5vdGU6IGNsaWNrZWQgaW4gaW1wb3J0ZWQgYW5kIHdoZW4gdGVtcGxhdGUgaXMgY2xpY2tlZFxuICAgICAgICAgICAgICAgICAgICAvLyBpdCB3aWxsIGNhbGwgY2xpY2tlZCBtZXRob2QgcGFzc2VkIGluIHBhcmFtLlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICByZXN0cmljdDogJ0UnLFxuICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogdG1wbEFwcGxpLFxuICAgICAgICAgICAgICAgICAgICBsaW5rOiBteW1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIHNjb3BlOiB7Y2FsbGJhY2s6ICc9Jywgc3RvcmU6ICc9J31cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfV0pO1xufSkoKTtcbiIsIlxuLyogXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgXCJJb1QuYnpoXCJcbiAqIEF1dGhvciBcIkZ1bHVwIEFyIEZvbGxcIlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4uXG4gKiBcbiAqIFJlZmVyZW5jZTpcbiAqICAgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vZG9jcy9XZWIvQVBJL0ZpbGVSZWFkZXIgXG4gKiAgIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvVXNpbmdfZmlsZXNfZnJvbV93ZWJfYXBwbGljYXRpb25zI1VzaW5nX2hpZGRlbl9maWxlX2lucHV0X2VsZW1lbnRzX3VzaW5nX3RoZV9jbGljayUyOCUyOV9tZXRob2RcbiAqICAgaHR0cHM6Ly91bmNvcmtlZHN0dWRpb3MuY29tL2Jsb2cvbXVsdGlwYXJ0Zm9ybWRhdGEtZmlsZS11cGxvYWQtd2l0aC1hbmd1bGFyanNcbiAqICAgaHR0cHM6Ly93d3cudGVybGljaS5jb20vMjAxNS8wNS8xNi91cGxvYWRpbmctZmlsZXMtbG9jYWxseS5odG1sXG4gKiAgIGh0dHBzOi8vZ2l0aHViLmNvbS9uZXJ2Z2gvYW5ndWxhci1maWxlLXVwbG9hZC9ibG9iL21hc3Rlci9zcmMvc2VydmljZXMvRmlsZVVwbG9hZGVyLmpzXG4gKiAgIGh0dHBzOi8vc3R1ay5naXRodWIuaW8vanN6aXAvZG9jdW1lbnRhdGlvbi9ob3d0by9yZWFkX3ppcC5odG1sXG4gKiAgIGh0dHA6Ly9vbmVodW5ncnltaW5kLmNvbS96aXAtcGFyc2luZy1qc3ppcC1hbmd1bGFyL1xuICogICBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE1MzQxOTEyL2hvdy10by1nby1mcm9tLWJsb2ItdG8tYXJyYXlidWZmZXJcbiAqICAgXG4gKiAgIEJ1Z3M6IHppcCBmaWxlIHNlbnQgZXZlbiB3aGVuIGZsYWcgYXMgaW52YWxpZCBcbiAqL1xuXG4gXG5cbihmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxudmFyIHRtcGxBcHBsaSA9ICc8aW5wdXQgdHlwZT1cImZpbGVcIiBuYW1lPVwie3tuYW1lfX0taW5wdXRcIiBvbmNoYW5nZT1cImFuZ3VsYXIuZWxlbWVudCh0aGlzKS5zY29wZSgpLlVwTG9hZEZpbGUodGhpcy5maWxlcylcIiBhY2NlcHQ9XCJ7e21pbWV0eXBlfX1cIiBzdHlsZT1cImRpc3BsYXk6bm9uZVwiPicrXG4gICAgICAgICAgICAnPGRpdiBjbGFzcz1cInVwbG9hZC1maWxlXCIgbmctY2xpY2s9XCJpbWdDbGlja2VkKClcIj4nICtcbiAgICAgICAgICAgICc8aSBjbGFzcz1cInt7aWNvbn19XCI+PC9pPiA8c3Bhbj57e2xhYmVsfX08L3NwYW4+JyArXG4gICAgICAgICAgICAnPHJhbmdlLXNsaWRlciBuZy1zaG93PVwiIW5vc2xpZGVyXCIgaWQ9XCJ7e25hbWV9fS1zbGlkZXJcIiBhdXRvbWF0aWM9dHJ1ZSBpbml0aG9vaz1cIlNsaWRlckluaXRDQlwiPjwvcmFuZ2Utc2xpZGVyPicgK1xuICAgICAgICAgICAgJzwvZGl2Pic7XG4gICAgXG52YXIgdG1wbE1vZGFsID0gJzxzcGFuIGNsYXNzPVwibW9kYWwtdGV4dFwiPlVwbG9hZCBBcHBsaWNhdGlvbiA8Yj57e2FwcG5hbWV9fTwvYj4gPzwvc3Bhbj4nICtcbiAgICAgICAgICAgICc8ZGl2PicrXG4gICAgICAgICAgICAnPGltZyBuZy1zcmM9XCJ7e2ljb259fVwiPicgK1xuICAgICAgICAgICAgJzxzdWJtaXQtYnV0dG9uIGljb249XCJmaS14XCIgbGFiZWw9XCJDYW5jZWxcIiBjbGlja2VkPVwiYWJhbmRvblwiPjwvc3VibWl0LWJ1dHRvbj4nK1xuICAgICAgICAgICAgJzxzdWJtaXQtYnV0dG9uIGljb249XCJmaS1saWtlXCIgbGFiZWw9XCJJbnN0YWxsXCIgY2xpY2tlZD1cInN1Y2Nlc3NcIj48L3N1Ym1pdC1idXR0b24+ICcgK1xuICAgICAgICAgICAgJzwvZGl2Pic7XG4gICAgXG52YXIgdG1wbEVycm9yID0gJzxzcGFuIGNsYXNzPVwibW9kYWwtdGV4dFwiPkludmFsaWQgQXBwbGljYXRpb24gPGI+e3thcHBuYW1lfX08L2I+ID88L3NwYW4+JyArXG4gICAgICAgICAgICAnPGRpdj4nK1xuICAgICAgICAgICAgJzxpbWcgbmctc3JjPVwie3tpY29ufX1cIj4nICtcbiAgICAgICAgICAgICc8c3VibWl0LWJ1dHRvbiBpY29uPVwiZmkteFwiIGxhYmVsPVwiQ2xvc2VcIiBjbGlja2VkPVwiYWJhbmRvblwiPjwvc3VibWl0LWJ1dHRvbj4nK1xuICAgICAgICAgICAgJzwvZGl2Pic7XG4gICAgXG5cbi8vIFNlcnZpY2UgQ3JlYXRlIHhmb3JtIGluc2VydCBmaWxlcyBpbiBhbmQgUG9zdCBpdCB0byB1cmxcbmZ1bmN0aW9uIExvYWRGaWxlU3ZjIChzY29wZSwgZmlsZXMsIGZpbGVDQikge1xuICAgIHZhciB4bWxSZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICB2YXIgeGZvcm0gID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgXG4gICAgLy8gVXBkYXRlIHNsaWRlciBkdXJpbmcgVXBsb2FkXG4gICAgeG1sUmVxLnVwbG9hZC5vbnByb2dyZXNzID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHZhciBwcm9ncmVzcyA9IE1hdGgucm91bmQoZXZlbnQubGVuZ3RoQ29tcHV0YWJsZSA/IGV2ZW50LmxvYWRlZCAqIDEwMCAvIGV2ZW50LnRvdGFsIDogMCk7XG4gICAgICAgIGlmIChzY29wZS5zbGlkZXIpIHNjb3BlLnNsaWRlci5zZXRWYWx1ZSAocHJvZ3Jlc3MpO1xuICAgIH07XG5cbiAgICAvLyBVcGxvYWQgaXMgZmluaXNoIGxldCdzIG5vdGlmeSBjb250cm9sZXIgY2FsbGJhY2tcbiAgICB4bWxSZXEub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBzY29wZS5kaXZFbGVtLmFkZENsYXNzIChcInN1Y2Nlc3NcIik7XG4gICAgICAgIHNjb3BlLmRpdkVsZW0ucmVtb3ZlQ2xhc3MgKFwiZXJyb3JcIik7XG4gICAgICAgIHZhciByZXNwb25zZSA9e1xuICAgICAgICAgICAgc3RhdHVzIDogeG1sUmVxLnN0YXR1cyxcbiAgICAgICAgICAgIGhlYWRlcnM6IHhtbFJlcS5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSBcbiAgICAgICAgfTtcbiAgICAgICAgc2NvcGUuY2FsbGJhY2sgKHJlc3BvbnNlKTtcbiAgICB9O1xuXG4gICAgeG1sUmVxLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNjb3BlLmRpdkVsZW0uYWRkQ2xhc3MgKFwiZXJyb3JcIik7XG4gICAgICAgIHNjb3BlLmRpdkVsZW0ucmVtb3ZlQ2xhc3MgKFwic3VjY2Vzc1wiKTtcbiAgICB9O1xuXG4gICAgeG1sUmVxLm9uYWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNjb3BlLmRpdkVsZW0uYWRkQ2xhc3MgKFwiZXJyb3JcIik7XG4gICAgICAgIHNjb3BlLmRpdkVsZW0ucmVtb3ZlQ2xhc3MgKFwic3VjY2Vzc1wiKTtcbiAgICAgICAgdmFyIHJlc3BvbnNlID17XG4gICAgICAgICAgICBzdGF0dXMgOiB4bWxSZXEuc3RhdHVzLFxuICAgICAgICAgICAgaGVhZGVyczogeG1sUmVxLmdldEFsbFJlc3BvbnNlSGVhZGVycygpIFxuICAgICAgICB9O1xuICAgICAgICBzY29wZS5jYWxsYmFjayAocmVzcG9uc2UpO1xuICAgIH07XG4gICAgXG4gICAgdGhpcy5wb3N0ZmlsZSA9IGZ1bmN0aW9uKHBvc3R1cmwpIHsgXG4gICAgICAgIC8vIGV2ZXJ5dGhpbmcgbG9va3MgT0sgbGV0J3MgUG9zdCBpdFxuICAgICAgICB4bWxSZXEub3BlbihcIlBPU1RcIiwgcG9zdHVybCAsIHRydWUpO1xuICAgICAgICB4bWxSZXEuc2VuZCh4Zm9ybSk7XG4gICAgfTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmlsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy5maWxlID0gZmlsZXNbaV07XG4gICAgICAgIC8vIFVua25vdyBUeXBlICEhISBpZiAoIXRoaXMuZmlsZS50eXBlLm1hdGNoKHNjb3BlLm1pbWV0eXBlKSkgY29udGludWU7XG5cbiAgICAgICAgY29uc29sZS5sb2cgKFwiU2VsZWN0ZWQgZmlsZT1cIiArIHRoaXMuZmlsZS5uYW1lICsgXCIgc2l6ZT1cIisgdGhpcy5maWxlLnNpemUvMTAyNCArIFwiIFR5cGU9XCIrIHRoaXMuZmlsZS50eXBlKTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuYmFzZW5hbWU9IHRoaXMuZmlsZS5uYW1lLnNwbGl0KCcvJykucmV2ZXJzZSgpWzBdO1xuXG4gICAgICAgIC8vIEZpbGUgdG8gdXBsb2FkIGlzIHRvbyBiaWdcbiAgICAgICAgaWYgKGlzTmFOKHRoaXMuZmlsZS5zaXplKSB8fCB0aGlzLmZpbGUuc2l6ZSA+IHNjb3BlLm1heHNpemUqMTAyNCkge1xuICAgICAgICAgICAgc2V0VGltZW91dCAoZmlsZUNCLDEwMCk7ICAvLyBPbiBlcnJvciBhc3luY2hyb25vdXMgY2FsbGJhY2sgd2l0aG91dCBhcmd1bWVudFxuICAgICAgICAgICAgXG4gICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgIC8vIElmIEZpbGUgaXMgcmVhZGFibGUgbGV0J3MgcmVhZCBpdFxuICAgICAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICAgICAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIodGhpcy5maWxlKTtcbiAgICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSBmaWxlQ0I7XG5cbiAgICAgICAgICAgIC8vIGlmIGV2ZXJ5dGhpbmcgaXMgT0sgbGV0J3MgYWRkIGZpbGUgdG8geGZvcm1cbiAgICAgICAgICAgIHhmb3JtLmFwcGVuZChzY29wZS5uYW1lLCB0aGlzLmZpbGUsIHRoaXMuZmlsZS5uYW1lKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuYW5ndWxhci5tb2R1bGUoJ1VwbG9hZEZpbGVzJyxbJ0FwcENvbmZpZycsICdNb2RhbE5vdGlmaWNhdGlvbicsICdSYW5nZVNsaWRlciddKVxuXG4uZGlyZWN0aXZlKCd1cGxvYWRBcHBsaScsIFtcIkFwcENvbmZpZ1wiLCBcIkpRZW11XCIsIFwiTm90aWZpY2F0aW9uXCIsIFwiTW9kYWxGYWN0b3J5XCIsIFwiJHRpbWVvdXRcIiwgZnVuY3Rpb24oQXBwQ29uZmlnLCAgSlFlbXUsIE5vdGlmaWNhdGlvbiwgTW9kYWxGYWN0b3J5LCAkdGltZW91dCkge1xuICAgIGZ1bmN0aW9uIG15bWV0aG9kcyhzY29wZSwgZWxlbSwgYXR0cnMpIHtcbiAgICAgICAgXG4gICAgICAgIC8vIGdldCB3aWRnZXQgaW1hZ2UgaGFuZGxlIGZyb20gdGVtcGxhdGVcbiAgICAgICAgc2NvcGUuaW5wdXRFbGVtICA9IGVsZW0uZmluZCgnaW5wdXQnKTtcbiAgICAgICAgc2NvcGUuZGl2RWxlbSAgICA9IGVsZW0uZmluZCgnZGl2Jyk7XG4gICAgICAgIFxuICAgICAgICAvLyBJbWFnZSB3YXMgY2tpY2sgbGV0J3Mgc2ltdWxhdGUgYW4gaW5wdXQgKGZpbGUpIGNsaWNrXG4gICAgICAgIHNjb3BlLmltZ0NsaWNrZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzY29wZS5pbnB1dEVsZW1bMF0uY2xpY2soKTsgLy8gV2FybmluZyBBbmd1bGFyIFRyaWdnZXJFdmVudCBkb2VzIG5vdCB3b3JrISEhXG4gICAgICAgIH07XG4gICAgICAgIFxuICAgICAgICAvLyBTbGlkZXIgY29udHJvbCBoYW5kbGUgcmVnaXN0cmF0aW9uIGFmdGVyIGNyZWF0aW9uXG4gICAgICAgIHNjb3BlLlNsaWRlckluaXRDQj1mdW5jdGlvbiAoc2xpZGVyKSB7XG4gICAgICAgICAgIHNjb3BlLnNsaWRlcj0gc2xpZGVyOyBcbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgICAgIC8vIFVwbG9hZCBpcyBkZWxlZ2F0ZWQgdG8gYSBzaGFyZWQgZnVuY3Rpb25cbiAgICAgICAgc2NvcGUuVXBMb2FkRmlsZT1mdW5jdGlvbiAoZmlsZXMpIHtcbiAgICAgICAgICAgIHZhciBoYW5kbGU7IFxuICAgICAgICAgICAgdmFyIGFwcGljb247XG4gICAgICAgICAgICB2YXIgdGVtcGxhdGU7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHZhciBzdWNjZXNzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhpcyBMb29rcyBPSyBsZXQncyBQb3N0IFhmb3JtL0ZpbGVcbiAgICAgICAgICAgICAgICBoYW5kbGUucG9zdGZpbGUoYXR0cnMucG9zdHVybCArIFwiP3Rva2VuPVwiICsgQXBwQ29uZmlnLnNlc3Npb24udG9rZW4pO1xuXG4gICAgICAgICAgICAgICAgc2NvcGUubW9kYWwuZGVhY3RpdmF0ZSgpO1xuICAgICAgICAgICAgICAgICR0aW1lb3V0IChmdW5jdGlvbigpIHtzY29wZS5tb2RhbC5kZXN0cm95KCk7fSwgMTAwMCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgYWJhbmRvbiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHNjb3BlLm1vZGFsLmRlYWN0aXZhdGUoKTtcbiAgICAgICAgICAgICAgICAkdGltZW91dCAoZnVuY3Rpb24oKSB7c2NvcGUubW9kYWwuZGVzdHJveSgpO30sIDEwMDApO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgcmVhZGVyQ0IgPSBmdW5jdGlvbiAodXBsb2FkKSB7XG4gICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBGaWxlIHVwbG9hZCBmYWlsIGhhbmRsZSBlcnJvclxuICAgICAgICAgICAgICAgIGlmICghIHVwbG9hZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaGFuZGxlLmZpbGUuc2l6ZSA+IHNjb3BlLm1heHNpemUqMTAyNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBwaWNvbiA9IHNjb3BlLmlzdG9vYmlnO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGU9IHRtcGxFcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTmFOKGhhbmRsZS5maWxlLnNpemUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBpY29uID0gc2NvcGUuaXNub3R2YWxpZDsgXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZT0gdG1wbEVycm9yO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgemlwYXBwID0gbmV3IEpTWmlwICh1cGxvYWQudGFyZ2V0LnJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0aHVtYm5haWwgPSB6aXBhcHAuZmlsZShcImljb25fMTI4LnBuZ1wiKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBpcyB3ZSBoYXZlIGEgdGh1bWJuYWlsIHdpdGhpbiBsb2FkZWQgWmlwZmlsZVxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRodW1ibmFpbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cgKFwiVGhpcyBpcyBub3QgYSB2YWxpZCBBcHBsaWNhdGlvbiBGcmFtZXdvcmsgQVBQXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBwaWNvbiA9IHNjb3BlLmlzbm90dmFsaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZT0gdG1wbEVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvL3Njb3BlLmltZ0VsZW1bMF0uc3JjID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW3RodW1ibmFpbC5hc0FycmF5QnVmZmVyKCldLCB7dHlwZTogXCJpbWFnZVwifSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBwaWNvbiA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFt0aHVtYm5haWwuYXNBcnJheUJ1ZmZlcigpXSwge3R5cGU6IFwiaW1hZ2VcIn0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlID0gdG1wbE1vZGFsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIHJlZmVyZW5jZSBodHRwOi8vZm91bmRhdGlvbi56dXJiLmNvbS9hcHBzL2RvY3MvIyEvYW5ndWxhci1tb2R1bGVzXG4gICAgICAgICAgICAgICAgdmFyIGNvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uSW46ICdzbGlkZUluRnJvbVRvcCcsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnRTY29wZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzcyA6IHN1Y2Nlc3MsXG4gICAgICAgICAgICAgICAgICAgICAgICBhYmFuZG9uIDogYWJhbmRvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb24gICAgOiBhcHBpY29uLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwbmFtZSA6IGhhbmRsZS5iYXNlbmFtZVxuICAgICAgICAgICAgICAgICAgICB9LCB0ZW1wbGF0ZSA6IHRlbXBsYXRlXG4gICAgICAgICAgICAgICAgfTsgXG4gICAgICAgICAgICAgICAgLy8gUG9wdXAgTW9kYWwgdG8gcmVuZGVyIGFwcGxpY2F0aW9uIGRhdGFcbiAgICAgICAgICAgICAgICBzY29wZS5tb2RhbCA9IG5ldyBNb2RhbEZhY3RvcnkoY29uZmlnKTtcbiAgICAgICAgICAgICAgICBzY29wZS5tb2RhbC5hY3RpdmF0ZSAoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIExvYWQgZmlsZSB3aXRoaW4gYnJvd3NlciBhbmQgaWYgT0sgY2FsbCByZWFkZXJDQlxuICAgICAgICAgICAgaGFuZGxlID0gbmV3IExvYWRGaWxlU3ZjIChzY29wZSwgZmlsZXMsIHJlYWRlckNCKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nIChoYW5kbGUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEluaXRpYWxsaXplIGRlZmF1bHQgdmFsdWVzIGZyb20gYXR0cmlidXRlcyB2YWx1ZXNcbiAgICAgICAgc2NvcGUubmFtZT0gYXR0cnMubmFtZSB8fCAnYXBwbGknO1xuICAgICAgICBzY29wZS5jYXRlZ29yeT0gYXR0cnMuY2F0ZWdvcnkgIHx8ICdhcHBsaSc7XG4gICAgICAgIHNjb3BlLm1pbWV0eXBlPSAoYXR0cnMuYWNjZXB0IHx8ICcud2d0Jyk7XG4gICAgICAgIHNjb3BlLm1heHNpemUgPSBhdHRycy5tYXhzaXplIHx8IDEwMDAwMDsgLy8gZGVmYXVsdCBtYXggc2l6ZSAxMDBNQlxuICAgICAgICBzY29wZS5yZWdleHAgID0gbmV3IFJlZ0V4cCAoYXR0cnMuYWNjZXB0KyAnLionLCdpJyk7XG4gICAgICAgIHNjb3BlLmljb24gICAgPSBhdHRycy5pY29uIHx8ICdmaS11cGxvYWQnO1xuICAgICAgICBzY29wZS5sYWJlbCAgID0gYXR0cnMubGFiZWwgfHwgJ1VwbG9hZCc7XG4gICAgICAgIFxuICAgICAgICBpZiAoYXR0cnMudGh1bWJuYWlsKSBzY29wZS5pc25vdHZhbGlkPSBBcHBDb25maWcucGF0aHNbc2NvcGUuY2F0ZWdvcnldICsgIGF0dHJzLmlzbm90dmFsaWQ7XG4gICAgICAgIGVsc2UgIHNjb3BlLmlzbm90dmFsaWQ9QXBwQ29uZmlnLnBhdGhzW3Njb3BlLmNhdGVnb3J5XSArICd3M2Mtd2lkZ2V0LnBuZyc7XG5cbiAgICAgICAgaWYgKGF0dHJzLmlzdG9vYmlnKSBzY29wZS5pc3Rvb2JpZz0gQXBwQ29uZmlnLnBhdGhzW3Njb3BlLmNhdGVnb3J5XSArICBhdHRycy5pc3Rvb2JpZztcbiAgICAgICAgZWxzZSAgc2NvcGUuaXN0b29iaWc9QXBwQ29uZmlnLnBhdGhzW3Njb3BlLmNhdGVnb3J5XSArICdpc3Rvb2JpZy5wbmcnO1xuICAgICAgICBzY29wZS5ub3NsaWRlciA9IGF0dHJzLm5vc2xpZGVyIHx8IGZhbHNlO1xuXG4gICAgICAgIGlmICghYXR0cnMucG9zdHVybCkgdGhyb3cgbmV3IFR5cGVFcnJvcignZmlsZS11cGxvYWQgJXMgcG9zdHVybD0vYXBpL3h4eHgveHh4eCByZXF1aXJlZCcsIHNjb3BlLmF0dHJzKTsgICAgICAgICAgICBcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcmVzdHJpY3Q6ICdFJyxcbiAgICAgICAgdGVtcGxhdGU6IHRtcGxBcHBsaSxcbiAgICAgICAgbGluazogbXltZXRob2RzLFxuICAgICAgICBzY29wZToge1xuICAgICAgICAgICAgY2FsbGJhY2sgOiAnPSdcbiAgICAgICAgfVxuICAgIH07XG4gICAgXG59XSk7XG5cbmNvbnNvbGUubG9nIChcIlVwbG9hZEZpbGUgTG9hZGVkXCIpO1xufSkoKTtcbiIsIlxuLyogXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgXCJJb1QuYnpoXCJcbiAqIEF1dGhvciBcIkZ1bHVwIEFyIEZvbGxcIlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4uXG4gKi9cblxuXG5cbihmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxudmFyIHRtcGwgPSAnPHRpcC1tb2RhbCB0aXA9XCJ0aXBcIj48L3RpcC1tb2RhbD4nICtcbiAgICAgICAgICAgJzxsYWJlbCBmb3I9XCJ7e25hbWV9fS1pbnRleHRcIj57e2xhYmVsfX0gPGkgbmctc2hvdz1cInJlcXVpcmVkXCIgbmctY2xpY2s9XCJUb0JlRGVmaW5lZFwiICcgK1xuICAgICAgICAgICAnY2xhc3M9XCJyZXF1aXJlZCB7e3N0YXR1c319IGZpLWNoZWNrYm94XCIgdGl0bGU9XCJGcmVlIFZhbHVlIEJ1dCBNYW5kYXRvcnkgQXJndW1lbnRcIiBhbHQ9XCI/XCI+ICZuYnNwOyA8L2k+PC9sYWJlbD4nKyAgICAgICAgICBcbiAgICAgICAgICAgJzxpbnB1dCAnK1xuICAgICAgICAgICAnIHR5cGU9XCJ7e3R5cGV9fVwiIGlkPVwie3tuYW1lfX0taW50ZXh0XCIgcGxhY2Vob2xkZXI9XCJ7e3BsYWNlaG9sZGVyfX1cIiAgY2xhc3M9XCJzdGF0dXMte3tzdGF0dXN9fVwiJytcbiAgICAgICAgICAgJyBuZy1tb2RlbD1cInZhbHVlXCIgbmctYmx1cj1cInZhbGlkYXRlKClcIiBuZy1mb2N1cz1cInNlbGVjdGVkKClcIiAnK1xuICAgICAgICAgICAnIG5nLW1vZGVsLW9wdGlvbnM9XCJ7IHVwZGF0ZU9uOiBcXCdkZWZhdWx0IGJsdXJcXCcsIGRlYm91bmNlOiB7ZGVmYXVsdDogNTAwLCBibHVyOiAwfSB9XCInICtcbiAgICAgICAgICAgJz48YWxlcnQgZGF0YS1uZy1zaG93PVwiIXZhbGlkJiZlcnJtc2dcIj57e2Vycm1zZ319PC9hbGVydD4nO1xuXG52YXIgZW1haWxwYXRlcm4gPSAvXigoW148PigpW1xcXVxcLiw7Olxcc0BcXFwiXSsoXFwuW148PigpW1xcXVxcLiw7Olxcc0BcXFwiXSspKil8KFxcXCIuK1xcXCIpKUAoKFtePD4oKVtcXF1cXC4sOzpcXHNAXFxcIl0rXFwuKStbXjw+KClbXFxdXFwuLDs6XFxzQFxcXCJdezIsfSkkL2k7XG5cbmFuZ3VsYXIubW9kdWxlKCdJbnB1dFRleHQnLFsnSlF1ZXJ5RW11J10pXG5cbi5kaXJlY3RpdmUoJ2lucHV0VGV4dCcsIFtcIkpRZW11XCIsIGZ1bmN0aW9uKEpRZW11KSB7XG4gICAgZnVuY3Rpb24gbXltZXRob2RzKHNjb3BlLCBlbGVtLCBhdHRycykge1xuICAgIFxuICAgIC8vIGRlZmF1bHQgdmFsdWUgYXQgMXN0IHJlbmRlcmluZ1xuICAgIHNjb3BlLmVycm9yICA9IGZhbHNlO1xuICAgIHNjb3BlLnZhbGlkICA9IGZhbHNlO1xuICAgIHNjb3BlLnN0YXR1cyA9ICd1bnRvdWNoJztcbiAgIFxuICAgIHNjb3BlLmlucHV0ID0gZWxlbS5maW5kIChcImlucHV0XCIpO1xuICAgIHNjb3BlLnJlcXVpcmVkID0gMDtcbiAgICBcbiAgICAvLyByZXF1aXJlciBpcyB1c2UgdG8gaW5jcmVtZW50IHJlcXVlc3RlZCBjb3VudGVyXG4gICAgaWYgKFwicmVxdWlyZWRcIiBpbiBhdHRycykge1xuICAgICAgICBzY29wZS5yZXF1aXJlZCA9IDE7XG4gICAgICAgIGVsZW0uYWRkQ2xhc3MgKFwicmVxdWlyZWRcIik7XG4gICAgfVxuICAgICAgIFxuICAgICAvLyB1c2VyIGVudGVyIGlucHV0IHJlc2V0IGVycm9yIHN0YXR1c1xuICAgICBzY29wZS5zZWxlY3RlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2NvcGUuZXJyb3I9ZmFsc2U7IFxuICAgICAgICBzY29wZS5lcnJtc2c9ZmFsc2U7IFxuICAgICAgICBzY29wZS5zdGF0dXMgPSAndG91Y2gnO1xuICAgICB9OyAgIFxuICAgICAgICAgICAgXG4gICAgIHNjb3BlLnZhbGlkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgXG4gICAgICAgICAvLyBnZXQgdmFsdWUgZnJvbSBpbnB1dCBmaWVsZCBieXBhc3NpbmcgQW5ndWxhciBuZy1tb2RlbFxuICAgICAgICAgY29uc29sZS5sb2cgKFwiQ2xpY2tlZCBJbnB1dFRleHQgbmFtZT0lcyB2YWx1ZT0lcyB2YWxpZD0lc1wiLCBzY29wZS5uYW1lLCBzY29wZS52YWx1ZSwgc2NvcGUudmFsaWQpOyAgICAgICAgXG5cbiAgICAgICAgIC8vIGZvcm0gaXMgbm90IHVudG91Y2hlZCBhbnltb3JlXG4gICAgICAgICBzY29wZS5wYXJlbnQucmVtb3ZlQ2xhc3MgKFwibmctcHJpc3RpbmVcIik7XG5cbiAgICAgICAgIC8vIGlmIHZhbHVlIG5vdCBudWxsIGNsZWFuIHVwIHN0cmluZ1xuICAgICAgICAgaWYgKHNjb3BlLnZhbHVlKSB7XG4gICAgICAgICAgICAgc2NvcGUuZXJyb3I9ZmFsc2U7IFxuICAgICAgICAgICAgLy8gcmVtb3ZlIGxlYWRpbmcgYW5kIHRyYWlsbGluZyBzcGFjZVxuICAgICAgICAgICAgc2NvcGUudmFsdWUgPSBzY29wZS52YWx1ZS50cmltKCk7XG4gICAgICAgICBcbiAgICAgICAgICAgIC8vIHJlbW92ZSBhbnkgc3BhY2UgaXMgbm90IGFsbG93ZWRcbiAgICAgICAgICAgIGlmICgnbm9zcGFjZScgaW4gYXR0cnMpIHtcbiAgICAgICAgICAgICAgIHNjb3BlLnZhbHVlPXNjb3BlLnZhbHVlLnJlcGxhY2UoL1xccy9nLCAnJyk7ICAgIFxuICAgICAgICAgICAgfVxuICAgICAgICAgXG4gICAgICAgICAgICBpZiAoJ2xvd2VyY2FzZScgaW4gYXR0cnMpIHtcbiAgICAgICAgICAgICAgIHNjb3BlLnZhbHVlID0gc2NvcGUudmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgIFxuICAgICAgICAgICAgLy8gY2hlY2sgbWluaW11bSBsZW5naHRcbiAgICAgICAgICAgIGlmIChcIm1pbmxlblwiIGluIGF0dHJzKSB7XG4gICAgICAgICAgICAgIGlmIChzY29wZS52YWx1ZS5sZW5ndGggPCBhdHRycy5taW5sZW4pIHtcbiAgICAgICAgICAgICAgICAgc2NvcGUuc3RhdHVzPSdpbnZhbGlkJztcbiAgICAgICAgICAgICAgICAgc2NvcGUuZXJybXNnPXNjb3BlLm5hbWUgKyAnOiBNaW5pbnVtIExlbmdoPSAnICsgYXR0cnMubWlubGVuICsgJyBDaGFyYWN0ZXJzJztcbiAgICAgICAgICAgICAgICAgc2NvcGUuZXJyb3I9dHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAoJ2VtYWlsJyBpbiBhdHRycykge1xuICAgICAgICAgICAgaWYgKCFlbWFpbHBhdGVybi50ZXN0IChzY29wZS52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBzY29wZS5zdGF0dXM9J2ludmFsaWQnO1xuICAgICAgICAgICAgICAgIHNjb3BlLmVycm1zZz0naW52YWxpZCBlbWFpbCBhZGRyZXNzJztcbiAgICAgICAgICAgICAgICBzY29wZS5lcnJvcj10cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgfVxuICAgICAgICAgXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoc2NvcGUucmVxdWlyZWQpIHtcbiAgICAgICAgICAgICAgICAgc2NvcGUuc3RhdHVzPSdpbnZhbGlkJztcbiAgICAgICAgICAgICAgICAgc2NvcGUuZXJybXNnPXNjb3BlLm5hbWUgKyAnOiBSZXF1aXJlZCBBdHRyaWJ1dGUnO1xuICAgICAgICAgICAgICAgICBzY29wZS5lcnJvcj10cnVlOyBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAvLyBJZiBsb2NhbCBjb250cm9sIGZhaWwgbGV0J3MgcmVmdXNlIGlucHV0XG4gICAgICAgICBpZiAoc2NvcGUuZXJyb3IpIHtcbiAgICAgICAgICAgICBpZiAoc2NvcGUucmVxdWlyZWQgJiYgc2NvcGUudmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgc2NvcGUudmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgaWYgKHNjb3BlLmw0YWNvdW50ZXIudmFsaWRhdGVkID4gMCkgc2NvcGUubDRhY291bnRlci52YWxpZGF0ZWQgLS07XG4gICAgICAgICAgICAgfSBcbiAgICAgICAgICAgICAvLyB1c2UgY2FsbCB0byB1cGRhdGUgZm9ybSBzY29wZSBvbiBmb3JtIGNvbXBsZXRlbmVzc1xuICAgICAgICAgICAgIHNjb3BlLmNhbGxiYWNrIChhdHRycy5uYW1lLCBudWxsLCBzY29wZS5kb25lKTtcbiAgICAgICAgIH0gZWxzZSB7IFxuICAgICAgICAgICAgIC8vIGxvY2FsY2hlY2sgaXMgT0sgYmFja3VwIG1heSBuZXZlcnRoZWxlc3MgY2hhbmdlIHN0YXR1cyB0byBmYWxzZVxuICAgICAgICAgICAgaWYgKHNjb3BlLnJlcXVpcmVkICAmJiAhc2NvcGUudmFsaWQpIHNjb3BlLmw0YWNvdW50ZXIudmFsaWRhdGVkICsrO1xuICAgICAgICAgICAgc2NvcGUuc3RhdHVzPSd2YWxpZCc7XG4gICAgICAgICAgICBzY29wZS52YWxpZD10cnVlO1xuICAgICAgICAgICAgc2NvcGUuY2FsbGJhY2sgKGF0dHJzLm5hbWUsIHNjb3BlLnZhbHVlLCBzY29wZS5kb25lKTtcbiAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgfTtcbiAgICAgXG4gICAgIC8vIHRoaXMgbWV0aG9kIGNhbiBiZSBjYWxsZWQgZnJvbSBjb250cm9sbGVyIHRvIHVwZGF0ZSB3aWRnZXQgc3RhdHVzXG4gICAgIHNjb3BlLmRvbmU9ZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICBjb25zb2xlLmxvZyAoXCJUZXh0LUlucHV0IENhbGxiYWNrIElEPVwiKyBhdHRycy5uYW1lICsgXCIgZGF0YT1cIiwgZGF0YSk7XG4gICAgICAgZm9yICh2YXIgaSBpbiBkYXRhKSBzY29wZVtpXSA9IGRhdGFbaV07ICAgICAgICAgXG4gICAgIH07XG4gICAgIFxuICAgICAvLyBFeHBvcnQgc29tZSBhdHRyaWJ1dGVzIHdpdGhpbiBkaXJlY3RpdmUgc2NvcGUgZm9yIHRlbXBsYXRlXG4gICAgIHNjb3BlLmxhYmVsICAgICAgID0gYXR0cnMubGFiZWw7XG4gICAgIHNjb3BlLm5hbWUgICAgICAgID0gYXR0cnMubmFtZTtcbiAgICAgc2NvcGUucGxhY2Vob2xkZXIgPSBhdHRycy5wbGFjZWhvbGRlcjtcbiAgICAgc2NvcGUudHlwZSAgICAgICAgPSBhdHRycy50eXBlIHx8IFwidGV4dFwiO1xuICAgICBzY29wZS50aXAgICAgICAgICA9IGF0dHJzLnRpcDtcblxuICAgICAvLyBzZWFyY2ggZm9yIGZvcm0gd2l0aGluIHBhcmVudCBlbGVtbnRzXG4gICAgIHNjb3BlLnBhcmVudCA9IEpRZW11LnBhcmVudCAoZWxlbSwgXCJGT1JNXCIpO1xuXG4gICAgIC8vIGVtYWlsIGVuZm9yY2UgbG93ZXJjYXNlIGFuZCBub3NwYWNlICAgXG4gICAgIGlmIChcImVtYWlsXCIgaW4gYXR0cnMpIHtcbiAgICAgICAgYXR0cnMubG93ZXJjYXNlPXRydWU7IFxuICAgICAgICBhdHRycy5ub3NwYWNlPXRydWU7IFxuICAgICAgICBhdHRycy5taW5sZW49NjsgXG4gICAgIH1cblxuICAgICBpZiAoc2NvcGUucmVxdWlyZWQpIHtcbiAgICAgICAgIHNjb3BlLmw0YWNvdW50ZXIgPSBzY29wZS5wYXJlbnQuZGF0YSAoXCJsNGFjb3VudGVyXCIpO1xuICAgICAgICAgaWYgKCFzY29wZS5sNGFjb3VudGVyKSB7IFxuICAgICAgICAgICAgc2NvcGUubDRhY291bnRlciA9ICB7cmVxdWlyZWQ6MSwgdmFsaWRhdGVkOjB9O1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJGaWVsZCBcIitzY29wZS5uYW1lK1wiIGlzIHJlcXVpcmVkICgxc3QpXCIpO1xuICAgICAgICAgICAgc2NvcGUucGFyZW50LmRhdGEgKFwibDRhY291bnRlclwiLCBzY29wZS5sNGFjb3VudGVyKTsgXG4gICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRmllbGQgXCIrc2NvcGUubmFtZStcIiBpcyByZXF1aXJlZFwiKTtcbiAgICAgICAgICAgICBzY29wZS5sNGFjb3VudGVyLnJlcXVpcmVkICsrO1xuICAgICAgICAgfVxuICAgICB9XG4gICAgICAgICBcbiAgICAgLy8gcmVmcmVzaCB2YWxpZGF0aW9uIGVhY2ggdGltZSBjb250cm9sZXIgdXBkYXRlIHZhbHVlXG4gICAgIHNjb3BlLiR3YXRjaCAoJ3ZhbHVlJywgZnVuY3Rpb24oKXtcbiAgICAgICAgIGlmKHNjb3BlLnZhbHVlKSBzY29wZS52YWxpZGF0ZSgpOyB9XG4gICAgICk7XG4gICAgXG4gICAgfVxuICAgIFxuICAgIHJldHVybiB7XG4gICAgICAgIHJlc3RyaWN0OiAnRScsXG4gICAgICAgIHRlbXBsYXRlOiB0bXBsLFxuICAgICAgICBsaW5rOiBteW1ldGhvZHMsXG4gICAgICAgIHNjb3BlOiB7XG4gICAgICAgICAgICBjYWxsYmFjayA6ICc9JyxcbiAgICAgICAgICAgIHZhbHVlOiAnPSdcbiAgICAgICAgfVxuICAgIH07XG59XSk7XG5cbmNvbnNvbGUubG9nIChcIklucHV0VGV4dCBMb2FkZWRcIik7XG59KSgpO1xuIiwiLyogXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgXCJJb1QuYnpoXCJcbiAqIEF1dGhvciBcIkZ1bHVwIEFyIEZvbGxcIlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqL1xuXG4oZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbnZhciB0bXBsID0gJzxpbnB1dC10ZXh0ICBjbGFzcz1cInBhc3N3b3JkXCIgdGlwPVwie3t0aXAxfX1cIiAgcGxhY2Vob2xkZXI9XCJ7e3BsYWNlMX19XCInICtcbiAgICAgICAgICAgJ2xhYmVsPVwie3tsYWJlbDF9fVwiIGNhbGxiYWNrPVwidmFsaWQxXCIgbmFtZT1cInt7bmFtZX19LTFcIiB2YWx1ZT1cInBhc3MxXCIgcmVxdWlyZWQgbWlubGVuPVwie3ttaW5sZW59fVwiIHR5cGU9XCJwYXNzd29yZFwiID4nICtcbiAgICAgICAgICAgJzwvaW5wdXQtdGV4dD4nICsgXG4gICAgICAgICAgICc8aW5wdXQtdGV4dCAgY2xhc3M9XCJwYXNzd29yZFwiIHRpcD1cInRpcDJcIiAgcGxhY2Vob2xkZXI9XCJ7e3BsYWNlMn19XCInICtcbiAgICAgICAgICAgJ2xhYmVsPVwie3tsYWJlbDJ9fVwiIGNhbGxiYWNrPVwidmFsaWQyXCIgbmFtZT1cInt7bmFtZX19LTJcIiB2YWx1ZT1cInBhc3MyXCIgcmVxdWlyZWQgbWlubGVuPVwie3ttaW5sZW59fVwiIHR5cGU9XCJwYXNzd29yZFwiID4gJytcbiAgICAgICAgICAgJzwvaW5wdXQtdGV4dD4nO1xuXG5hbmd1bGFyLm1vZHVsZSgnSW5wdXRQYXNzd29yZCcsW10pXG5cbi5kaXJlY3RpdmUoJ2lucHV0UGFzc3dvcmQnLCBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBteW1ldGhvZHMoc2NvcGUsIGVsZW0sIGF0dHJzKSB7XG4gICAgXG4gICAgc2NvcGUudmFsaWQxID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nIChcIkNsaWNrZWQgSW5wdXRQYXNzd29yZDEgbmFtZT0lcyB2YWx1ZT0lc1wiLCBuYW1lLCB2YWx1ZSk7ICAgICAgICBcbiAgICAgICAgc2NvcGUuZmlyc3Rwd2QgPSB2YWx1ZTtcbiAgICB9O1xuICAgIFxuICAgIHNjb3BlLnZhbGlkMiA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSwgZG9uZSkgeyAgICAgICAgXG4gICAgICAgIGNvbnNvbGUubG9nIChcIkNsaWNrZWQgSW5wdXRQYXNzd29yZDIgbmFtZT0lcyB2YWx1ZT0lc1wiLCBuYW1lLCB2YWx1ZSk7ICAgICAgICBcbiAgICAgICAgXG4gICAgICAgIC8vIGlmIGJvdGggcGFzc3dkIGVxdWFsIHRoZW4gY2FsbCBmb3JtIENCXG4gICAgICAgIGlmIChzY29wZS5maXJzdHB3ZCAhPT0gdmFsdWUpIHtcbiAgICAgICAgICBkb25lKHt2YWxpZDogZmFsc2UsIHN0YXR1czogJ2ludmFsaWQnLCBlcnJtc2c6IFwiYm90aCBwYXNzd29yZCBzaG91bGQgbWF0Y2hcIn0pOyAgXG4gICAgICAgIH0gZWxzZSB7ICBcbiAgICAgICAgICBzY29wZS5jYWxsYmFjayAoYXR0cnMubmFtZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBcbiAgICAgfTtcbiAgICAgXG4gICAgIC8vIHRoaXMgbWV0aG9kIGNhbiBiZSBjYWxsZWQgZnJvbSBjb250cm9sbGVyIHRvIHVwZGF0ZSB3aWRnZXQgc3RhdHVzXG4gICAgIHNjb3BlLmRvbmU9ZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICBjb25zb2xlLmxvZyAoXCJUZXh0LUlucHV0IENhbGxiYWNrIElEPVwiKyBhdHRycy5uYW1lICsgXCIgZGF0YT1cIiwgZGF0YSk7XG4gICAgICAgZm9yICh2YXIgaSBpbiBkYXRhKSBzY29wZVtpXSA9IGRhdGFbaV07ICAgICAgICAgXG4gICAgIH07XG4gICAgIFxuICAgICAvLyBFeHBvcnQgc29tZSBhdHRyaWJ1dGVzIHdpdGhpbiBkaXJlY3RpdmUgc2NvcGUgZm9yIHRlbXBsYXRlXG4gICAgIHNjb3BlLm5hbWUgICA9IGF0dHJzLm5hbWU7XG4gICAgIHNjb3BlLmxhYmVsMSA9IGF0dHJzLmxhYmVsIHx8ICdQYXNzd29yZCc7XG4gICAgIHNjb3BlLmxhYmVsMiA9IGF0dHJzLmxhYmVsIHx8ICdQYXNzd29yZCBWZXJpZmljYXRpb24nO1xuICAgICBzY29wZS5wbGFjZTEgPSBhdHRycy5wbGFjZWhvbGRlcjEgfHwgJ1VzZXIgUGFzc3dvcmQnO1xuICAgICBzY29wZS50aXAxICAgPSBhdHRycy50aXAgfHwgJ0Nob29zZSBhIFBhc3N3b3JkJztcbiAgICAgc2NvcGUucGxhY2UyID0gYXR0cnMucGxhY2Vob2xkZXIxIHx8ICdQYXNzd29yZCBWZXJpZmljYXRpb24nO1xuICAgICBzY29wZS50aXAyICAgPSBhdHRycy50aXAgICAgfHwgJ0NvbmZpcm1lIHlvdXIgUGFzc3dvcmQnO1xuICAgICBzY29wZS5taW5sZW4gPSBhdHRycy5taW5sZW4gfHwgMTA7XG4gICAgIFxuICAgICBpZiAoXCJyZXF1aXJlZFwiIGluIGF0dHJzKSBzY29wZS5yZXF1aXJlZCA9ICdyZXF1aXJlZCc7XG4gICAgICAgICBcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHtcbiAgICAgICAgcmVzdHJpY3Q6ICdFJyxcbiAgICAgICAgdGVtcGxhdGU6IHRtcGwsXG4gICAgICAgIGxpbms6IG15bWV0aG9kcyxcbiAgICAgICAgc2NvcGU6IHtcbiAgICAgICAgICAgIGNhbGxiYWNrIDogJz0nLFxuICAgICAgICB9XG4gICAgfTtcbn0pO1xuXG5jb25zb2xlLmxvZyAoXCJJbnB1dFBhc3N3b3JkIExvYWRlZFwiKTtcbn0pKCk7XG4iLCIoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbi8vIFdBUk5JTkc6IG1ha2Ugc3VyZSB0aGFuIGFwcC9mcm9udGVuZC9zZXJ2aWNlcy9BcHBDb25maWcuanMgbWF0Y2ggeW91ciBzZXJ2ZXJcblxuLy8gbGlzdCBhbGwgcmVwZW5kZW5jaWVzIHdpdGhpbiB0aGUgcGFnZSArIGNvbnRyb2xlciBpZiBuZWVkZWRcbmFuZ3VsYXIubW9kdWxlKCdEYXNoYm9hcmRNb2R1bGUnLCBbJ1N1Ym1pdEJ1dHRvbicsICdUb2tlblJlZnJlc2gnLCAnQXBwbGlCdXR0b24nXSlcblxuICAuY29udHJvbGxlcignRGFzaGJvYXJkQ29udHJvbGxlcicsIFtcIkFwcENhbGxcIiwgXCJOb3RpZmljYXRpb25cIiwgZnVuY3Rpb24gKEFwcENhbGwsIE5vdGlmaWNhdGlvbikge1xuICAgICAgICB2YXIgc2NvcGUgPSB0aGlzOyAvLyBJIGhhdGUgSmF2YVNjcmlwdFxuICAgICAgICBzY29wZS51dWlkICAgPVwibm9uZVwiO1xuICAgICAgICBzY29wZS50b2tlbiAgPVwibm9uZVwiO1xuICAgICAgICBzY29wZS5zZXNzaW9uPVwibm9uZVwiO1xuICAgICAgICBzY29wZS5zdGF0dXMgPVwiZXJyLW5vXCI7XG4gICAgICAgIHNjb3BlLmFwcGxpSURzID1bXTsgLy8gYXJyYXkgdG8gaG9sZCBhcHBsaWNhdGlvbnMgSURcbiAgICAgICAgc2NvcGUuYXBwbGlTdG9yZT17fTsgLy8gYXJyYXkgdG8gaG9sZCBhcHBsaWNhdGlvbnMganNvbiBkZXNjcmlwdGlvblxuXG4gICAgICAgXG4gICAgICAgIHNjb3BlLkFwcGxpQ0IgPSBmdW5jdGlvbihhcHBsaUlELCBhY3Rpb24sIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgLy8gQWN0aW9uIGlzIGRvbmUgd2l0aGluIFdpZGdldCBDb250cm9sbGVyIG9ubHkgdXBkYXRlIGRlYnVnIFVJIHpvbmVcbiAgICAgICAgICAgICAgICBzY29wZS5yZXF1ZXN0ICA9IGFjdGlvbjsgXG4gICAgICAgICAgICAgICAgc2NvcGUuZXJyY29kZSAgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEpIHNjb3BlLnJlc3BvbnNlID0gcmVzcG9uc2UuZGF0YTtcbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgICAgIHNjb3BlLkdldFJ1bm5hYmxlcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2cgKFwiRGFzaGJvYXJkIEdldFJ1bm5hYmxlc1wiKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgQXBwQ2FsbC5nZXQgKFwiYWZtLW1haW5cIiwgXCJydW5uYWJsZXNcIiwgey8qcXVlcnkqL30sIGZ1bmN0aW9uKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gdXBkYXRlIGRlYnVnIFVJIHpvbmVcbiAgICAgICAgICAgICAgICBzY29wZS5yZXF1ZXN0ICA9IFwiL2FwaS9hZm0tbWFpbi9ydW5uYWJsZVwiOyBcbiAgICAgICAgICAgICAgICBzY29wZS5yZXNwb25zZSA9IHJlc3BvbnNlLmRhdGE7XG4gICAgICAgICAgICAgICAgc2NvcGUuZXJyY29kZSAgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nIChcIkhvb3AgR2V0UnVubmFibGUgZmFpbGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIENoZWNrIHRoaXMgaXMgYSB2YWxpZCByZXNwb25zZSBmcm9tIEJpbmRlclxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhLnJlcXVlc3QuanR5cGUgIT09IFwiQUpCX3JlcGx5XCIgJiYgcmVzcG9uc2UuZGF0YS5yZXF1ZXN0LmFwaSAhPT0gXCJydW5uYWJsZXNcIikge1xuICAgICAgICAgICAgICAgICAgTm90aWZpY2F0aW9uLmVycm9yICh7bWVzc2FnZTogXCJJbnZhbGlkIFJlc3BvbmQgdG8gL29wYS9hZm0tbWFpbi9ydW5uYWJsZSByZXNwb25zZS5kYXRhPVwiK3Jlc3BvbnNlLmRhdGEsIGRlbGF5OiA1MDAwfSk7IFxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBsb29wIG9uIHJ1bm5hYmxlIGFwcGxpY2F0aW9uIHRvIHByZXBhcmUgZm9yIGRpc3BsYXlcbiAgICAgICAgICAgICAgICB2YXIgIGFwcGxpSURzPVtdO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGlkeD0wOyBpZHggPCByZXNwb25zZS5kYXRhLnJlc3BvbnNlLmxlbmd0aDsgaWR4ICsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFwcGxpSURzW2lkeF0gPSByZXNwb25zZS5kYXRhLnJlc3BvbnNlIFtpZHhdLmlkO1xuICAgICAgICAgICAgICAgICAgICBzY29wZS5hcHBsaVN0b3JlIFtyZXNwb25zZS5kYXRhLnJlc3BvbnNlIFtpZHhdLmlkXSA9ICByZXNwb25zZS5kYXRhLnJlc3BvbnNlIFtpZHhdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzY29wZS5hcHBsaUlEcyA9IGFwcGxpSURzOyAvLyBhdm9pZCBwYXJ0aWFsIHVwZGF0ZSB0byBsaW1pdCBVSSByZWZyZXNoXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9KTsgICAgICAgICAgICBcbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgICAgIHNjb3BlLkZpbGVVcGxvYWRlZCA9IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2cgKFwiZmlsZSBVcGxvYWRlZFwiKTtcbiAgICAgICAgICAgIC8vIENhbm5vdCBkaXNwbGF5IHBvc3QgcmVzdWx0cyBhcyBHZXRSdW5uYWJsZSB3aWxsIG92ZXJsb2FkIHRoZW1cbiAgICAgICAgICAgIHNjb3BlLnJlcXVlc3QgID0gXCIvYXBpL2FmbS1tYWluL3J1bm5hYmxlXCI7IFxuICAgICAgICAgICAgc2NvcGUucmVzcG9uc2UgPSByZXNwb25zZS5oZWFkZXJzO1xuICAgICAgICAgICAgc2NvcGUuZXJyY29kZSAgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIGV2ZXJ5dGhpbmcgbG9va3MgT0sgdXBkYXRlIGFwcCBsaXN0XG4gICAgICAgICAgICBzY29wZS5HZXRSdW5uYWJsZXMoKTtcbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgICAgIHNjb3BlLkF1dG9TdGFydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nIChcIkF1dG9TdGFydCByZXF1ZXN0aW5nIEFwcHMgbGlzdFwiKTtcbiAgICAgICAgICAgIHNjb3BlLkdldFJ1bm5hYmxlcygpO1xuICAgICAgICB9O1xuICAgICAgICAgIFxuICAgfV0pO1xuXG5jb25zb2xlLmxvZyAoXCJEYXNoYm9hcmQgQ29udHJvbGxlciBMb2FkZWRcIik7XG59KSgpOyAiLCIvKiBcbiAqIENvcHlyaWdodCAoQykgMjAxNSBcIklvVC5iemhcIlxuICogQXV0aG9yIFwiRnVsdXAgQXIgRm9sbFwiXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICogXG4gKiBVc2FnZTpcbiAqIFxuICogICAvLyBtb3VzZSBldmVudCBwcm9iYWJseSBwb2ludCBvbiBpY29uIGFuZCBub3Qgb24gYnV0dG9uIGRpdlxuICogICAuLi4gbmctY2xpY2s9XCJMb2NrQ2hhbm5lbCgkZXZlbnQpXG4gICAgIHZhciB0YXJnZXQ9IGFuZ3VsYXIuZWxlbWVudChldmVudC5jdXJyZW50VGFyZ2V0KTtcbiAgICAgdmFyIGJ1dHRvbj0gSlFlbXUuRmluZEluUGFyZW50ICh0YXJnZXQsICdkaXYnKTtcbiAqIFxuICovXG5cblxuKGZ1bmN0aW9uICgpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cblxuICAgICAgICAgIFxuICAgIC8vIF9hbGwgbW9kdWxlcyBvbmx5IHJlZmVyZW5jZSBkZXBlbmRlbmNpZXNcbiAgICBhbmd1bGFyLm1vZHVsZSgnSlF1ZXJ5RW11JywgW10pXG5cbiAgICAgICAgICAgIC8vIEZhY3RvcnkgaXMgYSBzaW5nbGV0b24gYW5kIHNoYXJlIGl0cyBjb250ZXh0IHdpdGhpbiBhbGwgaW5zdGFuY2VzLlxuICAgICAgICAgICAgLmZhY3RvcnkoJ0pRZW11JywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgdmFyIEZpbmRJblBhcmVudCA9IGZ1bmN0aW9uIChlbGVtZW50LCBzZWxlY3Rvcikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcGFyZW50ID0gZWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNlYXJjaCA9IHNlbGVjdG9yLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChwYXJlbnRbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWFyY2ggPT09IHBhcmVudFswXS50YWdOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gIC8vIEhUTUxEaXZFbGVtZW50IHByb3BlcnRpZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgdmFyICBGaW5kQnlUYWc9IGZ1bmN0aW9uIChlbGVtZW50LCB0YWcsIHNlbGVjdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzZWFyY2ggPSBzZWxlY3Rvci50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZSAgID0gdGFnLnRvTG93ZXJDYXNlKCkrIFwiTmFtZVwiO1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSBlbGVtZW50LmNoaWxkcmVuKCk7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChjaGlsZHJlblswXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlYXJjaCA9PT0gY2hpbGRyZW5bMF1bdHlwZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgICAgICAgICB9ICAvLyBIVE1MRGl2RWxlbWVudCBwcm9wZXJ0aWVzXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbiA9IGNoaWxkcmVuLm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgdmFyICBGaW5kQnlDbGFzcz0gZnVuY3Rpb24gKGVsZW1lbnQsIHNlbGVjdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzZWFyY2ggPSBzZWxlY3Rvci50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSBlbGVtZW50LmNoaWxkcmVuKCk7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChjaGlsZHJlblswXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuLmhhc0NsYXNzKHNlYXJjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgICAgICAgICB9ICAvLyBIVE1MRGl2RWxlbWVudCBwcm9wZXJ0aWVzXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbiA9IGNoaWxkcmVuLm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB2YXIgbXlNZXRob2RzID0ge1xuICAgICAgICAgICAgICAgICAgICBGaW5kSW5QYXJlbnQ6IEZpbmRJblBhcmVudCxcbiAgICAgICAgICAgICAgICAgICAgRmluZEJ5VGFnOiBGaW5kQnlUYWcsXG4gICAgICAgICAgICAgICAgICAgIEZpbmRCeUNsYXNzOiBGaW5kQnlDbGFzc1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbXlNZXRob2RzO1xuICAgICAgICAgICAgfSk7XG5cbn0pKCk7IiwidmFyIGZvdW5kYXRpb25Sb3V0ZXMgPSBbe1wibmFtZVwiOlwiRGFzaGJvYXJkXCIsXCJ1cmxcIjpcIi9kYXNoYm9hcmRcIixcImNvbnRyb2xsZXJcIjpcIkRhc2hib2FyZENvbnRyb2xsZXIgYXMgY3RybFwiLFwiYW5pbWF0aW9uSW5cIjpcInNsaWRlSW5SaWdodFwiLFwicGF0aFwiOlwicGFnZXMvRGFzaGJvYXJkL0Rhc2hib2FyZC5odG1sXCJ9XTsgXG4iLCIoZnVuY3Rpb24gKCkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIC8vIF9hbGwgbW9kdWxlcyBvbmx5IHJlZmVyZW5jZSBkZXBlbmRlbmNpZXNcbiAgICBhbmd1bGFyLm1vZHVsZSgnQXBwQ29uZmlnJywgW10pXG4gICAgXG4gICAgICAgICAgICAvLyBGYWN0b3J5IGlzIGEgc2luZ2xldG9uIGFuZCBzaGFyZSBpdHMgY29udGV4dCB3aXRoaW4gYWxsIGluc3RhbmNlcy5cbiAgICAgICAgICAgIC5mYWN0b3J5KCdBcHBDb25maWcnLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyAoXCJVUkw9XCIrICRsb2NhdGlvbi51cmwoKSArIFwiIFF1ZXJ5PVwiICsgbG9jYXRpb24uaHJlZisgXCIgd2luZG93PVwiICsgZG9jdW1lbnQucmVmZXJyZXIpO1xuXG4gICAgICAgICAgICAgICAgdmFyIG15Q29uZmlnID0ge1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgcGF0aHM6IHsgLy8gV2FybmluZyBwYXRocyBzaG91bGQgZW5kIHdpdGggL1xuICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UgOiAnaW1hZ2VzLycsXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29ucyA6ICdpbWFnZXMvaWNvbnMvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF2YXRhcjogJ2ltYWdlcy9hdmF0YXJzLycsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdWRpbyA6ICdpbWFnZXMvYXVkaW8vJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpIDogJ2ltYWdlcy9hcHBsaS8nXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBteWFwaTogeyAvLyBXYXJuaW5nIHBhdGhzIHNob3VsZCBlbmQgd2l0aCAvXG4gICAgICAgICAgICAgICAgICAgICAgIHRva2VuIDogJy9hcGkvbXlwbHVnaW4veHh4eCdcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIHNlc3Npb246IHsgLy8gVGhvc2UgZGF0YSBhcmUgdXBkYXRlZCBieSBzZXNzaW9uIHNlcnZpY2VcbiAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlICA6ICcvYXBpL3Rva2VuL2NyZWF0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2ggOiAnL2FwaS90b2tlbi9yZWZyZXNoJyxcbiAgICAgICAgICAgICAgICAgICAgICAgY2hlY2sgICA6ICcvYXBpL3Rva2VuL2NoZWNrJyxcbiAgICAgICAgICAgICAgICAgICAgICAgcmVzZXQgICA6ICcvYXBpL3Rva2VuL3Jlc2V0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgcGluZyAgICA6ICcvYXBpL3Rva2VuL2NoZWNrJyxcbiAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbCA6ICcxMjM0NTY3ODknLCAgLy8gdHlwaWNhbCBkZXYgaW5pdGlhbCB0b2tlblxuICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0IDogMzYwMCwgICAgICAgICAvLyB0aW1lb3V0IGlzIHVwZGF0ZWQgY2xpZW50IHNlc3NpbiBjb250ZXh0IGNyZWF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgIHBpbmdyYXRlOiA2MCwgICAgICAgICAgIC8vIFBpbmcgcmF0ZSB0byBjaGVjayBpZiBzZXJ2ZXIgaXMgc3RpbGwgYWxpdmVcbiAgICAgICAgICAgICAgICAgICAgICAgdXVpZCAgICA6ICcnLCAgICAgICAgICAgLy8gdXVpZCBtYXAgd2l0aCBjb29raWUgb3IgbG9uZyB0ZXJtIHNlc3Npb24gYWNjZXNzIGtleVxuICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiAgIDogJycgICAgICAgICAgICAvLyB3aWxsIGJlIHJldHVybmVkIGZyb20gYXV0aGVudGljYXRpb24gICAgXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG15Q29uZmlnO1xuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgLy8gRmFjdG9yeSBpcyBhIHNpbmdsZXRvbiBhbmQgc2hhcmUgaXRzIGNvbnRleHQgd2l0aGluIGFsbCBpbnN0YW5jZXMuXG4gICAgICAgICAgICAuZmFjdG9yeSgnQXBwQ2FsbCcsIFtcIiRodHRwXCIsIFwiQXBwQ29uZmlnXCIsIGZ1bmN0aW9uICgkaHR0cCwgQXBwQ29uZmlnKSB7XG4gICAgICAgICAgICAgICAgdmFyIG15Q2FsbHMgPSB7XG4gICAgICAgICAgICAgICAgICAgIGdldCA6IGZ1bmN0aW9uKHBsdWdpbiwgYWN0aW9uLCBxdWVyeSwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5LnRva2VuID0gQXBwQ29uZmlnLnNlc3Npb24udG9rZW47IC8vIGFkZCB0b2tlbiB0byBwcm92aWRlZCBxdWVyeSAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgJGh0dHAuZ2V0KCcvYXBpLycgKyBwbHVnaW4gKyAnLycgKyBhY3Rpb24gLCB7cGFyYW1zOiBxdWVyeX0pLnRoZW4gKGNhbGxiYWNrLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcmV0dXJuIG15Q2FsbHM7XG4gICAgICAgICAgICB9XSk7XG4gICAgXG4gXG59KSgpOyIsIihmdW5jdGlvbigpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIGFuZ3VsYXIubW9kdWxlKCdBRkJjbGllbnQnLCBbIC8vIFdhcm5pbmc6IEFwcG5hbWUgc2hvdWxkIGZpdCB3aXRoIGd1bHBmaWxlLmpzICYgaW5kZXguaHRtbFxuICAgICd1aS5yb3V0ZXInLFxuICAgICduZ0FuaW1hdGUnLFxuXG4gICAgLy9mb3VuZGF0aW9uXG4gICAgJ2ZvdW5kYXRpb24nLFxuICAgICdmb3VuZGF0aW9uLmR5bmFtaWNSb3V0aW5nJyxcbiAgICAnZm91bmRhdGlvbi5keW5hbWljUm91dGluZy5hbmltYXRpb25zJyxcbiAgICBcbiAgICAvLyBleHRlcm5hbCBjb21wb25lbnRzXG4gICAgJ3VpLW5vdGlmaWNhdGlvbicsXG4gICAgXG4gICAgLy8gQXBwbGljYXRpb24gQ29tcG9uZW50c1xuICAgICdBcHBDb25maWcnLFxuICAgICdKUXVlcnlFbXUnLFxuICAgICdEYXNoYm9hcmRNb2R1bGUnLFxuICAgICdVcGxvYWRGaWxlcycsXG4gICAgJ0xpbmtCdXR0b24nLFxuICAgICdUb2tlblJlZnJlc2gnLFxuICAgICdSYW5nZVNsaWRlcicsXG4gICAgJ01vZGFsTm90aWZpY2F0aW9uJ1xuICBdKVxuICAgIC5jb25maWcoY29uZmlnKVxuICAgIC5ydW4ocnVuKVxuICA7XG5cbiAgY29uZmlnLiRpbmplY3QgPSBbJyR1cmxSb3V0ZXJQcm92aWRlcicsICckbG9jYXRpb25Qcm92aWRlciddO1xuICBcbiAgY29uc29sZS5sb2cgKFwiKioqbG9jYXRpb249XCIgKyB3aW5kb3cubG9jYXRpb24gKyBcIiBzZWFyY2hcIiArIHdpbmRvdy5zZWFyY2gpO1xuXG4gIGZ1bmN0aW9uIGNvbmZpZygkdXJsUHJvdmlkZXIsICRsb2NhdGlvblByb3ZpZGVyLCBBcHBDb25maWcpIHtcbiAgICAkdXJsUHJvdmlkZXIub3RoZXJ3aXNlKCcvZGFzaGJvYXJkJyk7XG5cbiAgICAvLyBodHRwczovL2RvY3MuYW5ndWxhcmpzLm9yZy9lcnJvci8kbG9jYXRpb24vbm9iYXNlXG4gICAgJGxvY2F0aW9uUHJvdmlkZXIuaHRtbDVNb2RlKHRydWUpLmhhc2hQcmVmaXgoJyEnKTtcbiAgICBcbiAgfVxuXG4gIGZ1bmN0aW9uIHJ1bigpIHtcbiAgICBGYXN0Q2xpY2suYXR0YWNoKGRvY3VtZW50LmJvZHkpO1xuICB9XG4gIFxuLy8gRm9uZGF0aW9uLWFwcC50ZW1wbGF0ZSBpcyBub3QgaW5jbHVkZWQgY29ycmVjdGx5IGJ5IGd1bHAgXG4vLyBJbmNsdWRlIGhlcmUgbWlzc2luZyB0ZW1wbGF0ZXMgZnJvbSBmb3VuZGF0aW9uLWFwcHMvZGlzdC9qcy9mb3VuZGF0aW9uLWFwcHMtdGVtcGxhdGVzLmpzXG5hbmd1bGFyLm1vZHVsZSgnZm91bmRhdGlvbicpLnJ1bihbJyR0ZW1wbGF0ZUNhY2hlJywgZnVuY3Rpb24oJHRlbXBsYXRlQ2FjaGUpIHtcbiAgJHRlbXBsYXRlQ2FjaGUucHV0KCdjb21wb25lbnRzL21vZGFsL21vZGFsLmh0bWwnLFxuICAgICc8ZGl2XFxuJyArXG4gICAgJyAgY2xhc3M9XCJtb2RhbC1vdmVybGF5XCJcXG4nICtcbiAgICAnICBuZy1jbGljaz1cImhpZGVPdmVybGF5KClcIj5cXG4nICtcbiAgICAnICA8YXNpZGVcXG4nICtcbiAgICAnICAgIGNsYXNzPVwibW9kYWxcIlxcbicgK1xuICAgICcgICAgbmctY2xpY2s9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XCJcXG4nICtcbiAgICAnICAgIG5nLXRyYW5zY2x1ZGU+XFxuJyArXG4gICAgJyAgPC9hc2lkZT5cXG4nICtcbiAgICAnPC9kaXY+XFxuJyArXG4gICAgJycpO1xufV0pO1xuXG5jb25zb2xlLmxvZyAoXCJvcGE9QUZCY2xpZW50IExvYWRlZFwiKTtcbn0pKCk7XG4iLCIoZnVuY3Rpb24oKSB7YW5ndWxhci5tb2R1bGUoJ0FGQmNsaWVudCcpLnJ1bihbJyR0ZW1wbGF0ZUNhY2hlJywgZnVuY3Rpb24oJHRlbXBsYXRlQ2FjaGUpIHskdGVtcGxhdGVDYWNoZS5wdXQoJ3BhZ2VzL0Rhc2hib2FyZC9EYXNoYm9hcmQuaHRtbCcsXG4gICAgJzxoMz48aW1nIGNsYXNzPVwibG9nb1wiIHNyYz1cImltYWdlcy9sb2dvL3RyaXNrZWxfaW90X2J6aHgyNTAucG5nXCIgYWx0PVwiSW9ULmJ6aCBMb2dvXCIgc3R5bGU9XCJoZWlnaHQ6MTUwcHhcIj4gQXBwbGljYXRpb24gRnJhbWV3b3JrIE1hbmFnZXIgU2ltcGxlIENsaWVudDwvaDM+PGRpdiBjbGFzcz1cImJ1dHRvbi1ib3ggYm94LWNvbnRlbnRcIj48YXBwbGktYnV0dG9uIG5nLXJlcGVhdD1cImFwcGxpSUQgaW4gY3RybC5hcHBsaUlEc1wiIHN0b3JlPVwiY3RybC5hcHBsaVN0b3JlXCIgaGFuZGxlPVwie3thcHBsaUlEfX1cIiBjYWxsYmFjaz1cImN0cmwuQXBwbGlDQlwiPjwvYXBwbGktYnV0dG9uPjx1cGxvYWQtYXBwbGkgY2xhc3M9XCJpYnotcmlnaHRcIiBsYWJlbD1cIlVwbG9hZFwiIGljb249XCJmaS11cGxvYWRcIiBwb3N0dXJsPVwiL2FwaS9wb3N0L3VwbG9hZC1hcHBsaVwiIGNhbGxiYWNrPVwiY3RybC5GaWxlVXBsb2FkZWRcIiB0aXRsZT1cIlVwbG9hZCBBR0wgQXBwXCI+PC91cGxvYWQtYXBwbGk+PC9kaXY+PGRpdiBjbGFzcz1cIm1lc3NhZ2UtYm94IGJveC1jb250ZW50IHZlcnRpY2FsIGdyaWQtZnJhbWVcIj48ZGl2IGNsYXNzPVwicmVzcG9uc2VcIj48c3BhbiBjbGFzcz1cImdyaWQtY29udGVudCBub3Njcm9sbCByZXEge3tjdHJsLnN0YXR1c319XCI+cmVxPSB7e2N0cmwucmVxdWVzdH19PC9zcGFuPiA8c3BhbiBjbGFzcz1cImdyaWQtY29udGVudCBub3Njcm9sbCByZXMge3tjdHJsLnN0YXR1c319XCI+cmVzPSB7e2N0cmwucmVzcG9uc2V9fTwvc3Bhbj4gPHNwYW4gY2xhc3M9XCJncmlkLWNvbnRlbnQgbm9zY3JvbGwgc3RhdHVzIHt7Y3RybC5zdGF0dXN9fVwiPnN0YXR1cz0ge3tjdHJsLmVycmNvZGV9fTwvc3Bhbj48L2Rpdj48L2Rpdj48dG9rZW4tcmVmcmVzaCBhdXRvbG9nPVwidHJ1ZVwiIGNhbGxiYWNrPVwiY3RybC5BdXRvU3RhcnRcIj48L3Rva2VuLXJlZnJlc2g+Jyk7fV0pO1xufSkoKTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== +!function(){"use strict";function e(e){var t=[],a=[];this.getId=function(){return e.sliderid},this.getCbHandle=function(){return e.cbhandle},this.getView=function(n){return n||(n=0),e.value[n]===t[n]?a[n]:(t[n]=e.value[n],e.formatter?a[n]=e.formatter(e.value[n],e.ctrlhandle):a[n]=e.value[n],a[n])},this.updateClass=function(t,a){e.updateClass(t,a)},this.forceRefresh=function(t){e.forceRefresh(t)},this.getValue=function(t){return t||(t=0),e.value[t]},this.getRelative=function(t){return t||(t=0),e.relative[t]},this.setValue=function(t,a){a||(a=0),e.setValue(t,a)},this.setDisable=function(t){e.setDisable(t)}}var t=angular.module("RangeSlider",[]);t.directive("rangeSlider",["$log","$document","$timeout",function(t,a,n){function i(t,i,s,l){t.initWidget=function(e){e.byStep&&(t.byStep=parseInt(e.byStep)),e.notMore&&(t.notMore=parseInt(e.notMore)),e.notLess&&(t.notLess=parseInt(e.notLess)),e.id&&(t.sliderid=e.id),void 0!==e.value&&(t.value=e.value,t.forceRefresh(50))},t.forceRefresh=function(e){var a=t.value;t.value=[void 0,void 0],n(function(){t.setValue(a[0],0),t.dual&&t.setValue(a[1],1)},e)},t.updateClass=function(e,t){t?i.addClass(e):i.removeClass(e)},t.setDisable=function(e){e?(i.addClass("disable"),t.handles[0].css("visibility","hidden"),t.dual&&t.handles[1].css("visibility","hidden")):(i.removeClass("disable"),t.handles[0].css("visibility","visible"),t.dual&&t.handles[1].css("visibility","visible"))},t.normalize=function(e){var a,n=t.notMore-t.notLess,i=e*n;if(t.byStep>0){var s=(i-i%t.byStep)/t.byStep,l=i%t.byStep,o=l>=.5*t.byStep?t.byStep:0;return a=s*t.byStep+o+t.notLess}if(t.byStep<0){var r=Math.pow(10,-1*t.byStep);return a=t.notLess+parseInt(i*r)/r}return i},t.getValue=function(e,a){t.vertical?t.relative[a]=(e-t.bounds.handles[a].getBoundingClientRect().height)/(t.bounds.bar.getBoundingClientRect().height-t.bounds.handles[a].getBoundingClientRect().height):t.relative[a]=e/(t.bounds.bar.getBoundingClientRect().width-t.bounds.handles[a].getBoundingClientRect().width);var n=t.normalize(t.relative[a]);n!==t.value[a]&&(nt.stopValue&&(n=t.stopValue),t.formatter?t.viewValue=t.formatter(n,t.ctrlhandle):t.viewValue=n,t.displays[a]&&t.displays[a].html(t.viewValue),t.value[a]=n,l&&l.$setViewValue(t.viewValue),t.$apply(),n>t.startValue&&nt.value[0]&&(t.dual?t.setValue(e,1):t.setValue(e,0)),t.vertical?(a=t.bounds.bar.getBoundingClientRect().height*(e-t.notLess)/(t.notMore-t.notLess),t.start.css("height",a+"px")):(a=t.bounds.bar.getBoundingClientRect().width*(e-t.notLess)/(t.notMore-t.notLess),t.start.css("width",a+"px")),t.startValue=e},t.setStop=function(e){var a;et.notMore&&(e=t.notMore),e0&&t.$apply(t.setValue(t.value[t.actif]+t.byStep,t.actif)),t.byStep<0&&t.$apply(t.setValue(t.value[t.actif]+1/Math.pow(10,-1*t.byStep),t.actif)),t.callback&&t.callback(t.value[t.actif],t.ctrlhandle);break;case 37:case 40:t.byStep>0&&t.$apply(t.setValue(t.value[t.actif]-t.byStep,t.actif)),t.byStep<0&&t.$apply(t.setValue(t.value[t.actif]-1/Math.pow(10,-1*t.byStep),t.actif)),t.callback&&t.callback(t.value[t.actif],t.ctrlhandle);break;case 27:t.handles[t.actif][0].blur()}},t.moveHandle=function(e,a,n){var i;t.vertical?(i=t.bounds.bar.getBoundingClientRect().bottom-n,i>t.bounds.bar.getBoundingClientRect().height&&(i=t.bounds.bar.getBoundingClientRect().height),ii&&(i=0),a+t.bounds.handles[e].getBoundingClientRect().width>t.bounds.bar.getBoundingClientRect().right&&(i=t.bounds.bar.getBoundingClientRect().width-t.bounds.handles[e].getBoundingClientRect().width)),t.getValue(i,e),t.dual&&t.value[0]>t.value[1]&&(0===e?t.setValue(t.value[0],1):t.setValue(t.value[1],0))},t.focusCB=function(e){e?a.on("keydown",t.keydown):a.unbind("keydown",t.keydown)},t.touchBarCB=function(e){var a,n=0,i=e.changedTouches,s=t.value[n];if(e.preventDefault(),t.dual){a=t.vertical?(i[0].pageY-t.bounds.bar.getBoundingClientRect().bottom)/t.bounds.bar.getBoundingClientRect().height:(i[0].pageX-t.bounds.bar.getBoundingClientRect().left)/t.bounds.bar.getBoundingClientRect().width;var l=Math.abs(a-t.relative[0]),o=Math.abs(a-t.relative[1]);l>o&&(n=1)}t.moveHandle(n,i[0].pageX,i[0].pageY),t.callback&&s!==t.value[n]&&t.callback(t.value[n],t.ctrlhandle)},t.touchHandleCB=function(e,n){function s(e){e.preventDefault();for(var a=e.changedTouches,i=0;it.stopAt,t.stopAt&&t.setStop(t.stopAt)}),t.initialSettings(t.initial)},t.init(),t.$watch("inithook",function(){t.inithook&&t.inithook(t.ctrlhandle)}),t.$watch("initvalues",function(){t.initvalues&&t.initWidget(t.initvalues)}),t.$watch("ngModel",function(e){t.setValue(e,0)})}var s='
';return{restrict:"E",scope:{startAt:"=",stopAt:"=",callback:"=",formatter:"=",inithook:"=",cbhandle:"=",initvalues:"=",ngModel:"="},require:"?ngModel",template:s,replace:!0,link:i}}])}(),function(){"use strict";var e='
afb://{{hostname}}:{{httpdport}}
';angular.module("TokenRefresh",["AppConfig","ModalNotification"]).directive("tokenRefresh",["$timeout","$http","$location","Notification","AppConfig",function(t,a,n,i,s){function l(e,l,o){e.status=void 0,e.online=function(){l.addClass("online"),l.removeClass("offline")},e.offline=function(){l.addClass("offline"),l.removeClass("online")},e.onerror=function(t,a,n){e.status!==!1&&(i.warning({message:"AppFramework Binder Lost",delay:5e3}),e.offline()),e.status=0},e.onsuccess=function(t,a,n,l){e.status!==!0&&(t.request.token&&(s.session.token=t.request.token),t.request.uuid&&(s.session.uuid=t.request.uuid),t.request.timeout&&(s.session.timeout=t.request.timeout),i.success({message:"AppFramework Binder Back to Live",delay:3e3}),e.online(),e.callback&&e.callback()),e.status=1},e.getping=function(){var n=a.get(s.session.ping+"?token="+s.session.token);n.success(e.onsuccess),n.error(e.onerror),t(e.getping,1e3*s.session.pingrate)},e.refresh=function(){var n=a.get(s.session.refresh+"?token="+s.session.token);n.success(e.onsuccess),n.error(e.onerror),t(e.refresh,250*s.session.timeout)},e.tkcreate=function(){var t=a.get(s.session.create+"?token="+s.session.initial);t.success(e.onsuccess),t.error(e.onerror)},e.icon=o.icon||"fi-lightbulb",e.hostname=n.host(),e.httpdport=n.port(),e.autolog=JSON.parse(o.autolog||!1),e.autolog&&e.tkcreate(),t(e.getping,1e3*s.session.pingrate),t(e.refresh,250*s.session.timeout)}return{template:e,scope:{callback:"="},restrict:"E",link:l}}])}(),function(){"use strict";var e='
{{tip}}
';angular.module("ModalNotification",[]).directive("tipModal",["$timeout",function(t){function a(e,a,n){function i(){function a(){e.show&&e.modal.css({opacity:1,visibility:"visible"})}e.show=!0,e.timeout=t(a,e.delay)}function s(){e.show=!1,e.modal.css({opacity:0,visibility:"hidden"})}e.parent=a.parent(),e.modal=a.find("div"),e.icon=n.icon||"fi-lightbulb",e.parent.addClass("as-modal-tip"),e.parent.bind("click",s),e.parent.bind("focus",i),e.parent.bind("mouseover",i),e.parent.bind("mouseleave",s),e.parent.bind("blur",s),e.delay=n.delay||1e3}return{restrict:"E",template:e,link:a,scope:{tip:"="}}}])}(),function(){"use strict";var e='{{label}}';angular.module("LinkButton",[]).directive("linkButton",["$location",function(t){function a(e,a,n){e.clicked=function(){n.query?t.path(n.href).search(n.query):t.path(n.href)},e.icon=n.icon||"fi-link",e.label=n.label||"Jump",e.href=n.href||"/home",a.addClass(e.label.toLowerCase())}return{restrict:"E",template:e,link:a,scope:{}}}])}(),function(){"use strict";function e(e,t,a){var n=new XMLHttpRequest,i=new FormData;n.upload.onprogress=function(t){var a=Math.round(t.lengthComputable?100*t.loaded/t.total:0);e.slider&&e.slider.setValue(a)},n.onload=function(){e.divElem.addClass("success"),e.divElem.removeClass("error");var t={status:n.status,headers:n.getAllResponseHeaders()};e.callback(t)},n.onerror=function(){e.divElem.addClass("error"),e.divElem.removeClass("success")},n.onabort=function(){e.divElem.addClass("error"),e.divElem.removeClass("success");var t={status:n.status,headers:n.getAllResponseHeaders()};e.callback(t)},this.postfile=function(e){n.open("POST",e,!0),n.send(i)};for(var s=0;s1024*e.maxsize)setTimeout(a,100);else{var l=new FileReader;l.readAsArrayBuffer(this.file),l.onload=a,i.append(e.name,this.file,this.file.name)}}var t='
{{label}}
',a='Upload Application {{appname}} ?
',n='Invalid Application {{appname}} ?
';angular.module("UploadFiles",["AppConfig","ModalNotification","RangeSlider"]).directive("uploadAppli",["AppConfig","JQemu","Notification","ModalFactory","$timeout",function(i,s,l,o,r){function u(t,s,l){if(t.inputElem=s.find("input"),t.divElem=s.find("div"),t.imgClicked=function(){t.inputElem[0].click()},t.SliderInitCB=function(e){t.slider=e},t.UpLoadFile=function(s){var u,c,d,p=function(){u.postfile(l.posturl+"?token="+i.session.token),t.modal.deactivate(),r(function(){t.modal.destroy()},1e3)},f=function(){t.modal.deactivate(),r(function(){t.modal.destroy()},1e3)},g=function(e){if(e){var i=new JSZip(e.target.result),s=i.file("icon_128.png");s?(c=window.URL.createObjectURL(new Blob([s.asArrayBuffer()],{type:"image"})),d=a):(c=t.isnotvalid,d=n)}else u.file.size>1024*t.maxsize&&(c=t.istoobig,d=n),isNaN(u.file.size)&&(c=t.isnotvalid,d=n);var l={animationIn:"slideInFromTop",contentScope:{success:p,abandon:f,icon:c,appname:u.basename},template:d};t.modal=new o(l),t.modal.activate()};u=new e(t,s,g)},t.name=l.name||"appli",t.category=l.category||"appli",t.mimetype=l.accept||".wgt",t.maxsize=l.maxsize||1e5,t.regexp=new RegExp(l.accept+".*","i"),t.icon=l.icon||"fi-upload",t.label=l.label||"Upload",l.thumbnail?t.isnotvalid=i.paths[t.category]+l.isnotvalid:t.isnotvalid=i.paths[t.category]+"w3c-widget.png",l.istoobig?t.istoobig=i.paths[t.category]+l.istoobig:t.istoobig=i.paths[t.category]+"istoobig.png",t.noslider=l.noslider||!1,!l.posturl)throw new TypeError("file-upload %s posturl=/api/xxxx/xxxx required",t.attrs)}return{restrict:"E",template:t,link:u,scope:{callback:"="}}}])}(),function(){"use strict";var e='{{errmsg}}',t=/^(([^<>()[\]\.,;:\s@\"]+(\.[^<>()[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i;angular.module("InputText",["JQueryEmu"]).directive("inputText",["JQemu",function(a){function n(e,n,i){e.error=!1,e.valid=!1,e.status="untouch",e.input=n.find("input"),e.required=0,"required"in i&&(e.required=1,n.addClass("required")),e.selected=function(){e.error=!1,e.errmsg=!1,e.status="touch"},e.validate=function(){e.parent.removeClass("ng-pristine"),e.value?(e.error=!1,e.value=e.value.trim(),"nospace"in i&&(e.value=e.value.replace(/\s/g,"")),"lowercase"in i&&(e.value=e.value.toLowerCase()),"minlen"in i&&e.value.length0&&e.l4acounter.validated--),e.callback(i.name,null,e.done)):(e.required&&!e.valid&&e.l4acounter.validated++,e.status="valid",e.valid=!0,e.callback(i.name,e.value,e.done))},e.done=function(t){for(var a in t)e[a]=t[a]},e.label=i.label,e.name=i.name,e.placeholder=i.placeholder,e.type=i.type||"text",e.tip=i.tip,e.parent=a.parent(n,"FORM"),"email"in i&&(i.lowercase=!0,i.nospace=!0,i.minlen=6),e.required&&(e.l4acounter=e.parent.data("l4acounter"),e.l4acounter?e.l4acounter.required++:(e.l4acounter={required:1,validated:0},e.parent.data("l4acounter",e.l4acounter))),e.$watch("value",function(){e.value&&e.validate()})}return{restrict:"E",template:e,link:n,scope:{callback:"=",value:"="}}}])}(),function(){"use strict";var e=' ';angular.module("InputPassword",[]).directive("inputPassword",function(){function t(e,t,a){e.valid1=function(t,a){e.firstpwd=a},e.valid2=function(t,n,i){e.firstpwd!==n?i({valid:!1,status:"invalid",errmsg:"both password should match"}):e.callback(a.name,n)},e.done=function(t){for(var a in t)e[a]=t[a]},e.name=a.name,e.label1=a.label||"Password",e.label2=a.label||"Password Verification",e.place1=a.placeholder1||"User Password",e.tip1=a.tip||"Choose a Password",e.place2=a.placeholder1||"Password Verification",e.tip2=a.tip||"Confirme your Password",e.minlen=a.minlen||10,"required"in a&&(e.required="required")}return{restrict:"E",template:e,link:t,scope:{callback:"="}}})}(),function(){"use strict";var e='
{{label}}
';angular.module("SubmitButton",[]).directive("submitButton",function(){function t(e,t,a){e.icon=a.icon||"fi-foot",e.label=a.label||"Next",t.addClass(e.label.toLowerCase())}return{restrict:"E",template:e,link:t,scope:{clicked:"="}}})}(),function(){"use strict";var e='
{{label}}
',t='×Application {{name}}';angular.module("AppliButton",[]).directive("appliButton",["AppConfig","AppCall","ModalFactory","Notification","$timeout",function(a,n,i,s,l){function o(e,o,r){e.clicked=function(){var a=function(t,a){s.error({message:"Fail /api/afm-main"+t+"="+e.label+" RunID="+e.appID,delay:5e3}),o.addClass("fail"),o.removeClass("success"),e.callback(e.appliID,t,a)},r=function(t,a){o.removeClass("fail"),e.runID=a.data.response.runid,e.callback(e.appliID,"/api/afm-main/start",a)},u=function(){e.modal.deactivate(),l(function(){e.modal.destroy()},1e3)},c=function(t){switch(t){case"start":n.get("afm-main","start",{id:e.appliID},function(e){return 200!==e.status||"AJB_reply"!==e.data.request.jtype?void a("start",e):void r("start",e)});break;case"stop":n.get("afm-main","stop",{id:e.runID},function(e){return 200!==e.status||"AJB_reply"!==e.data.request.jtype?void a("stop",e):void r("stop",e)});break;case"info":n.get("afm-main","detail",{id:e.appID},function(e){return 200!==e.status||"AJB_reply"!==e.data.request.jtype?void a("detail",e):void r("detail",e)})}u()},d={animationIn:"slideInFromTop",contentScope:{action:c,close:u,icon:e.icon,label:e.label},template:t};e.modal=new i(d),e.modal.activate()},r.handle&&e.store[r.handle].name?(e.icon=a.paths.icons+e.store[r.handle].name.toLowerCase()+"-ico.png",e.label=e.store[r.handle].name,e.appliID=r.handle):(e.icon=a.paths.icons+"w3c-ico.png",e.label=r.handle),o.addClass(e.label.toLowerCase())}return{restrict:"E",template:e,link:o,scope:{callback:"=",store:"="}}}])}(),function(){"use strict";angular.module("DashboardModule",["SubmitButton","TokenRefresh","AppliButton"]).controller("DashboardController",["AppCall","Notification",function(e,t){var a=this;a.uuid="none",a.token="none",a.session="none",a.status="err-no",a.appliIDs=[],a.appliStore={},a.AppliCB=function(e,t,n){a.request=t,a.errcode=n.status,n.data&&(a.response=n.data)},a.GetRunnables=function(){e.get("afm-main","runnables",{},function(e){if(a.request="/api/afm-main/runnable",a.response=e.data,a.errcode=e.status,200===e.status){if("AJB_reply"!==e.data.request.jtype&&"runnables"!==e.data.request.api)return void t.error({message:"Invalid Respond to /opa/afm-main/runnable response.data="+e.data,delay:5e3});for(var n=[],i=e.data.response.runnables,s=0;s\n \n \n\n')}])}(),function(){angular.module("AFBclient").run(["$templateCache",function(e){e.put("pages/Dashboard/Dashboard.html",'

Application Framework Manager Simple Client

req= {{ctrl.request}} res= {{ctrl.response}} status= {{ctrl.errcode}}
')}])}(); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndpZGdldHMvUmFuZ2VTbGlkZXJzL1JhbmdlU2xpZGVyTW9kLmpzIiwid2lkZ2V0cy9Ob3RpZmljYXRpb25zL1Rva2VuUmVmcmVzaFN2Yy5qcyIsIndpZGdldHMvTm90aWZpY2F0aW9ucy9Nb2RhbE5vdGlmaWNhdGlvbi5qcyIsIndpZGdldHMvTmF2aWdhdGlvbi9MaW5rQnV0dG9uLmpzIiwid2lkZ2V0cy9Gb3JtSW5wdXQvVXBsb2FkQXBwbGkuanMiLCJ3aWRnZXRzL0Zvcm1JbnB1dC9JbnB1dFRleHQuanMiLCJ3aWRnZXRzL0Zvcm1JbnB1dC9JbnB1dFBhc3N3b3JkLmpzIiwid2lkZ2V0cy9BY3Rpb25CdXR0b25zL1N1Ym1pdEJ1dHRvbi5qcyIsIndpZGdldHMvQWN0aW9uQnV0dG9ucy9BcHBsaUJ1dHRvbi5qcyIsInBhZ2VzL0Rhc2hib2FyZC9EYXNoYm9hcmRNb2R1bGUuanMiLCJzZXJ2aWNlcy9KUXVlcnlFbXUuanMiLCJldGMvcm91dGVzLmpzIiwiZXRjL0FwcENvbmZpZy5qcyIsImFwcC5qcyIsInBhZ2VzL0Rhc2hib2FyZC9EYXNoYm9hcmQuanMiXSwibmFtZXMiOlsiUmFuZ2VTbGlkZXJIYW5kbGUiLCJzY29wZSIsImludGVybmFscyIsImV4dGVybmFscyIsInRoaXMiLCJnZXRJZCIsInNsaWRlcmlkIiwiZ2V0Q2JIYW5kbGUiLCJjYmhhbmRsZSIsImdldFZpZXciLCJoYW5kbGUiLCJ2YWx1ZSIsImZvcm1hdHRlciIsImN0cmxoYW5kbGUiLCJ1cGRhdGVDbGFzcyIsImNsYXNzZSIsInN0YXR1cyIsImZvcmNlUmVmcmVzaCIsInRpbWVyIiwiZ2V0VmFsdWUiLCJnZXRSZWxhdGl2ZSIsInJlbGF0aXZlIiwic2V0VmFsdWUiLCJzZXREaXNhYmxlIiwiZmxhZyIsIlJhbmdlU2xpZGVyIiwiYW5ndWxhciIsIm1vZHVsZSIsImRpcmVjdGl2ZSIsIiRsb2ciLCIkZG9jdW1lbnQiLCIkdGltZW91dCIsImxpbmsiLCJlbGVtZW50IiwiYXR0cnMiLCJtb2RlbCIsImluaXRXaWRnZXQiLCJpbml0dmFsdWVzIiwiYnlTdGVwIiwicGFyc2VJbnQiLCJub3RNb3JlIiwibm90TGVzcyIsImlkIiwidW5kZWZpbmVkIiwiZHVhbCIsImFkZENsYXNzIiwicmVtb3ZlQ2xhc3MiLCJkaXNhYmxlZCIsImhhbmRsZXMiLCJjc3MiLCJub3JtYWxpemUiLCJyZXN1bHQiLCJyYW5nZSIsInBvaW50IiwibW9kIiwicmVtIiwicm91bmQiLCJwb3dlciIsIk1hdGgiLCJwb3ciLCJvZmZzZXQiLCJ2ZXJ0aWNhbCIsImJvdW5kcyIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImhlaWdodCIsImJhciIsIndpZHRoIiwibmV3dmFsdWUiLCJzdGFydFZhbHVlIiwic3RvcFZhbHVlIiwidmlld1ZhbHVlIiwiZGlzcGxheXMiLCJodG1sIiwiJHNldFZpZXdWYWx1ZSIsIiRhcHBseSIsInRyYW5zbGF0ZSIsInNldFN0YXJ0Iiwic3RhcnQiLCJzZXRTdG9wIiwic3RvcCIsInJpZ2h0Iiwidm9mZnNldCIsIi13ZWJraXQtdHJhbnNmb3JtIiwiLW1vei10cmFuc2Zvcm0iLCItbXMtdHJhbnNmb3JtIiwiLW8tdHJhbnNmb3JtIiwidHJhbnNmb3JtIiwic2xpZGVyIiwiYm90dG9tIiwibGVmdCIsImtleWRvd24iLCJlIiwia2V5Q29kZSIsImFjdGlmIiwiY2FsbGJhY2siLCJibHVyIiwibW92ZUhhbmRsZSIsImNsaWVudFgiLCJjbGllbnRZIiwiZm9jdXNDQiIsImluc2lkZSIsIm9uIiwidW5iaW5kIiwidG91Y2hCYXJDQiIsImV2ZW50IiwidG91Y2hlcyIsImNoYW5nZWRUb3VjaGVzIiwib2xkdmFsdWUiLCJwcmV2ZW50RGVmYXVsdCIsInBhZ2VZIiwicGFnZVgiLCJkaXN0YW5jZTAiLCJhYnMiLCJkaXN0YW5jZTEiLCJ0b3VjaEhhbmRsZUNCIiwidG91Y2hldnQiLCJ0b3VjaG1vdmUiLCJpZHgiLCJsZW5ndGgiLCJ0b3VjaGVuZCIsImhhbmRsZUNCIiwiY2xpY2tldmVudCIsIm1vdXNlbW92ZSIsIm1vdXNldXAiLCJhdXRvbWF0aWMiLCJmb2N1cyIsImZpbmQiLCJzZWxlY3QiLCJlbGVtIiwiZG9tZWxlbSIsInF1ZXJ5U2VsZWN0b3IiLCJhbmdlbGVtIiwiaW5pdGlhbFNldHRpbmdzIiwiaW5pdGlhbCIsImRlY2ltYWxfcGxhY2VzX21hdGNoX3Jlc3VsdCIsInByZWNpc2lvbiIsIm1hdGNoIiwiZXZ0IiwiaW5pdCIsInJhbmRvbSIsIkluZmluaXR5IiwiZHVhbEhhbmRsZXMiLCJ0cmlnZ2VyX2lucHV0X2NoYW5nZSIsImRpc2FibGUiLCJkaXNwbGF5VGFyZ2V0IiwiZ2V0RWxlbWVudEJ5SWQiLCJzcGxpdCIsIm5nTW9kZWwiLCIkd2F0Y2giLCJzdGFydEF0Iiwic3RvcEF0IiwiaW5pdGhvb2siLCJuZXdWYWx1ZSIsInRlbXBsYXRlIiwicmVzdHJpY3QiLCJyZXF1aXJlIiwicmVwbGFjZSIsIiRodHRwIiwiJGxvY2F0aW9uIiwiTm90aWZpY2F0aW9uIiwiQXBwQ29uZmlnIiwibXltZXRob2RzIiwib25saW5lIiwib2ZmbGluZSIsIm9uZXJyb3IiLCJkYXRhIiwiZXJyY29kZSIsImhlYWRlcnMiLCJ3YXJuaW5nIiwibWVzc2FnZSIsImRlbGF5Iiwib25zdWNjZXNzIiwiY29uZmlnIiwicmVxdWVzdCIsInRva2VuIiwic2Vzc2lvbiIsInV1aWQiLCJ0aW1lb3V0Iiwic3VjY2VzcyIsImdldHBpbmciLCJoYW5kbGVyIiwiZ2V0IiwicGluZyIsImVycm9yIiwicGluZ3JhdGUiLCJyZWZyZXNoIiwidGtjcmVhdGUiLCJjcmVhdGUiLCJpY29uIiwiaG9zdG5hbWUiLCJob3N0IiwiaHR0cGRwb3J0IiwicG9ydCIsImF1dG9sb2ciLCJKU09OIiwicGFyc2UiLCJ0bXBsIiwiZGlzcGxheSIsImFjdGlvbiIsInNob3ciLCJtb2RhbCIsIm9wYWNpdHkiLCJ2aXNpYmlsaXR5IiwiY2xvc2UiLCJwYXJlbnQiLCJiaW5kIiwidGlwIiwiY2xpY2tlZCIsInF1ZXJ5IiwicGF0aCIsImhyZWYiLCJzZWFyY2giLCJsYWJlbCIsInRvTG93ZXJDYXNlIiwiTG9hZEZpbGVTdmMiLCJmaWxlcyIsImZpbGVDQiIsInhtbFJlcSIsIlhNTEh0dHBSZXF1ZXN0IiwieGZvcm0iLCJGb3JtRGF0YSIsInVwbG9hZCIsIm9ucHJvZ3Jlc3MiLCJwcm9ncmVzcyIsImxlbmd0aENvbXB1dGFibGUiLCJsb2FkZWQiLCJ0b3RhbCIsIm9ubG9hZCIsImRpdkVsZW0iLCJyZXNwb25zZSIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsIm9uYWJvcnQiLCJwb3N0ZmlsZSIsInBvc3R1cmwiLCJvcGVuIiwic2VuZCIsImkiLCJmaWxlIiwiYmFzZW5hbWUiLCJuYW1lIiwicmV2ZXJzZSIsImlzTmFOIiwic2l6ZSIsIm1heHNpemUiLCJzZXRUaW1lb3V0IiwicmVhZGVyIiwiRmlsZVJlYWRlciIsInJlYWRBc0FycmF5QnVmZmVyIiwiYXBwZW5kIiwidG1wbEFwcGxpIiwidG1wbE1vZGFsIiwidG1wbEVycm9yIiwiSlFlbXUiLCJNb2RhbEZhY3RvcnkiLCJpbnB1dEVsZW0iLCJpbWdDbGlja2VkIiwiY2xpY2siLCJTbGlkZXJJbml0Q0IiLCJVcExvYWRGaWxlIiwiYXBwaWNvbiIsImRlYWN0aXZhdGUiLCJkZXN0cm95IiwiYWJhbmRvbiIsInJlYWRlckNCIiwiemlwYXBwIiwiSlNaaXAiLCJ0YXJnZXQiLCJ0aHVtYm5haWwiLCJ3aW5kb3ciLCJVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCJCbG9iIiwiYXNBcnJheUJ1ZmZlciIsInR5cGUiLCJpc25vdHZhbGlkIiwiaXN0b29iaWciLCJhbmltYXRpb25JbiIsImNvbnRlbnRTY29wZSIsImFwcG5hbWUiLCJhY3RpdmF0ZSIsImNhdGVnb3J5IiwibWltZXR5cGUiLCJhY2NlcHQiLCJyZWdleHAiLCJSZWdFeHAiLCJwYXRocyIsIm5vc2xpZGVyIiwiVHlwZUVycm9yIiwiZW1haWxwYXRlcm4iLCJ2YWxpZCIsImlucHV0IiwicmVxdWlyZWQiLCJzZWxlY3RlZCIsImVycm1zZyIsInZhbGlkYXRlIiwidHJpbSIsIm1pbmxlbiIsInRlc3QiLCJsNGFjb3VudGVyIiwidmFsaWRhdGVkIiwiZG9uZSIsInBsYWNlaG9sZGVyIiwibG93ZXJjYXNlIiwibm9zcGFjZSIsInZhbGlkMSIsImZpcnN0cHdkIiwidmFsaWQyIiwibGFiZWwxIiwibGFiZWwyIiwicGxhY2UxIiwicGxhY2Vob2xkZXIxIiwidGlwMSIsInBsYWNlMiIsInRpcDIiLCJBcHBDYWxsIiwibm90aWZ5RXJyb3IiLCJhcGkiLCJhcHBJRCIsImFwcGxpSUQiLCJub3RpZnlTdWNjZXNzIiwicnVuSUQiLCJydW5pZCIsImNsb3NlTW9kYWwiLCJhY3Rpb25Nb2RhbCIsImp0eXBlIiwic3RvcmUiLCJpY29ucyIsImNvbnRyb2xsZXIiLCJhcHBsaUlEcyIsImFwcGxpU3RvcmUiLCJBcHBsaUNCIiwiR2V0UnVubmFibGVzIiwicnVubmFibGVzIiwiRmlsZVVwbG9hZGVkIiwiQXV0b1N0YXJ0IiwiZmFjdG9yeSIsIkZpbmRJblBhcmVudCIsInNlbGVjdG9yIiwidG9VcHBlckNhc2UiLCJ0YWdOYW1lIiwiRmluZEJ5VGFnIiwidGFnIiwiY2hpbGRyZW4iLCJuZXh0IiwiRmluZEJ5Q2xhc3MiLCJoYXNDbGFzcyIsIm15TWV0aG9kcyIsImZvdW5kYXRpb25Sb3V0ZXMiLCJ1cmwiLCJteUNvbmZpZyIsImltYWdlIiwiYXZhdGFyIiwiYXVkaW8iLCJhcHBsaSIsIm15YXBpIiwiY2hlY2siLCJyZXNldCIsIm15Q2FsbHMiLCJwbHVnaW4iLCJwYXJhbXMiLCJ0aGVuIiwiJHVybFByb3ZpZGVyIiwiJGxvY2F0aW9uUHJvdmlkZXIiLCJvdGhlcndpc2UiLCJodG1sNU1vZGUiLCJoYXNoUHJlZml4IiwicnVuIiwiRmFzdENsaWNrIiwiYXR0YWNoIiwiZG9jdW1lbnQiLCJib2R5IiwiJGluamVjdCIsIiR0ZW1wbGF0ZUNhY2hlIiwicHV0Il0sIm1hcHBpbmdzIjoiQ0FrREEsV0FDQSxZQUlBLFNBQUFBLEdBQUFDLEdBQ0EsR0FBQUMsTUFDQUMsSUFFQUMsTUFBQUMsTUFBQSxXQUNBLE1BQUFKLEdBQUFLLFVBR0FGLEtBQUFHLFlBQUEsV0FDQSxNQUFBTixHQUFBTyxVQUdBSixLQUFBSyxRQUFBLFNBQUFDLEdBSUEsTUFIQUEsS0FBQUEsRUFBQSxHQUdBVCxFQUFBVSxNQUFBRCxLQUFBUixFQUFBUSxHQUFBUCxFQUFBTyxJQUdBUixFQUFBUSxHQUFBVCxFQUFBVSxNQUFBRCxHQUNBVCxFQUFBVyxVQUFBVCxFQUFBTyxHQUFBVCxFQUFBVyxVQUFBWCxFQUFBVSxNQUFBRCxHQUFBVCxFQUFBWSxZQUNBVixFQUFBTyxHQUFBVCxFQUFBVSxNQUFBRCxHQUVBUCxFQUFBTyxLQUdBTixLQUFBVSxZQUFBLFNBQUFDLEVBQUFDLEdBQ0FmLEVBQUFhLFlBQUFDLEVBQUFDLElBR0FaLEtBQUFhLGFBQUEsU0FBQUMsR0FDQWpCLEVBQUFnQixhQUFBQyxJQUdBZCxLQUFBZSxTQUFBLFNBQUFULEdBRUEsTUFEQUEsS0FBQUEsRUFBQSxHQUNBVCxFQUFBVSxNQUFBRCxJQUdBTixLQUFBZ0IsWUFBQSxTQUFBVixHQUVBLE1BREFBLEtBQUFBLEVBQUEsR0FDQVQsRUFBQW9CLFNBQUFYLElBR0FOLEtBQUFrQixTQUFBLFNBQUFYLEVBQUFELEdBQ0FBLElBQUFBLEVBQUEsR0FDQVQsRUFBQXFCLFNBQUFYLEVBQUFELElBR0FOLEtBQUFtQixXQUFBLFNBQUFDLEdBQ0F2QixFQUFBc0IsV0FBQUMsSUFwREEsR0FBQUMsR0FBQUMsUUFBQUMsT0FBQSxpQkF3REFGLEdBQUFHLFVBQUEsZUFBQSxPQUFBLFlBQUEsV0FBQSxTQUFBQyxFQUFBQyxFQUFBQyxHQVlBLFFBQUFDLEdBQUEvQixFQUFBZ0MsRUFBQUMsRUFBQUMsR0FFQWxDLEVBQUFtQyxXQUFBLFNBQUFDLEdBRUFBLEVBQUFDLFNBQUFyQyxFQUFBcUMsT0FBQUMsU0FBQUYsRUFBQUMsU0FDQUQsRUFBQUcsVUFBQXZDLEVBQUF1QyxRQUFBRCxTQUFBRixFQUFBRyxVQUNBSCxFQUFBSSxVQUFBeEMsRUFBQXdDLFFBQUFGLFNBQUFGLEVBQUFJLFVBQ0FKLEVBQUFLLEtBQUF6QyxFQUFBSyxTQUFBK0IsRUFBQUssSUFHQUMsU0FBQU4sRUFBQTFCLFFBQ0FWLEVBQUFVLE1BQUEwQixFQUFBMUIsTUFDQVYsRUFBQWdCLGFBQUEsTUFLQWhCLEVBQUFnQixhQUFBLFNBQUFDLEdBQ0EsR0FBQVAsR0FBQVYsRUFBQVUsS0FDQVYsR0FBQVUsT0FBQWdDLE9BQUFBLFFBQ0FaLEVBQUEsV0FDQTlCLEVBQUFxQixTQUFBWCxFQUFBLEdBQUEsR0FDQVYsRUFBQTJDLE1BQUEzQyxFQUFBcUIsU0FBQVgsRUFBQSxHQUFBLElBQ0FPLElBSUFqQixFQUFBYSxZQUFBLFNBQUFDLEVBQUFDLEdBRUFBLEVBQUFpQixFQUFBWSxTQUFBOUIsR0FDQWtCLEVBQUFhLFlBQUEvQixJQUdBZCxFQUFBc0IsV0FBQSxTQUFBd0IsR0FFQUEsR0FDQWQsRUFBQVksU0FBQSxXQUNBNUMsRUFBQStDLFFBQUEsR0FBQUMsSUFBQSxhQUFBLFVBQ0FoRCxFQUFBMkMsTUFDQTNDLEVBQUErQyxRQUFBLEdBQUFDLElBQUEsYUFBQSxZQUdBaEIsRUFBQWEsWUFBQSxXQUNBN0MsRUFBQStDLFFBQUEsR0FBQUMsSUFBQSxhQUFBLFdBQ0FoRCxFQUFBMkMsTUFBQTNDLEVBQUErQyxRQUFBLEdBQUFDLElBQUEsYUFBQSxhQUtBaEQsRUFBQWlELFVBQUEsU0FBQXZDLEdBQ0EsR0FBQXdDLEdBQ0FDLEVBQUFuRCxFQUFBdUMsUUFBQXZDLEVBQUF3QyxRQUNBWSxFQUFBMUMsRUFBQXlDLENBR0EsSUFBQW5ELEVBQUFxQyxPQUFBLEVBQUEsQ0FDQSxHQUFBZ0IsSUFBQUQsRUFBQUEsRUFBQXBELEVBQUFxQyxRQUFBckMsRUFBQXFDLE9BQ0FpQixFQUFBRixFQUFBcEQsRUFBQXFDLE9BRUFrQixFQUFBRCxHQUFBLEdBQUF0RCxFQUFBcUMsT0FBQXJDLEVBQUFxQyxPQUFBLENBR0EsT0FGQWEsR0FBQUcsRUFBQXJELEVBQUFxQyxPQUFBa0IsRUFBQXZELEVBQUF3QyxRQU1BLEdBQUF4QyxFQUFBcUMsT0FBQSxFQUFBLENBQ0EsR0FBQW1CLEdBQUFDLEtBQUFDLElBQUEsR0FBQSxHQUFBMUQsRUFBQXFDLE9BRUEsT0FEQWEsR0FBQWxELEVBQUF3QyxRQUFBRixTQUFBYyxFQUFBSSxHQUFBQSxFQUtBLE1BQUFKLElBSUFwRCxFQUFBa0IsU0FBQSxTQUFBeUMsRUFBQWxELEdBQ0FULEVBQUE0RCxTQUNBNUQsRUFBQW9CLFNBQUFYLElBQUFrRCxFQUFBM0QsRUFBQTZELE9BQUFkLFFBQUF0QyxHQUFBcUQsd0JBQUFDLFNBQUEvRCxFQUFBNkQsT0FBQUcsSUFBQUYsd0JBQUFDLE9BQUEvRCxFQUFBNkQsT0FBQWQsUUFBQXRDLEdBQUFxRCx3QkFBQUMsUUFFQS9ELEVBQUFvQixTQUFBWCxHQUFBa0QsR0FBQTNELEVBQUE2RCxPQUFBRyxJQUFBRix3QkFBQUcsTUFBQWpFLEVBQUE2RCxPQUFBZCxRQUFBdEMsR0FBQXFELHdCQUFBRyxNQUdBLElBQUFDLEdBQUFsRSxFQUFBaUQsVUFBQWpELEVBQUFvQixTQUFBWCxHQUlBeUQsS0FBQWxFLEVBQUFVLE1BQUFELEtBQ0F5RCxFQUFBbEUsRUFBQW1FLGFBQUFELEVBQUFsRSxFQUFBbUUsWUFDQUQsRUFBQWxFLEVBQUFvRSxZQUFBRixFQUFBbEUsRUFBQW9FLFdBR0FwRSxFQUFBVyxVQUNBWCxFQUFBcUUsVUFBQXJFLEVBQUFXLFVBQUF1RCxFQUFBbEUsRUFBQVksWUFFQVosRUFBQXFFLFVBQUFILEVBRUFsRSxFQUFBc0UsU0FBQTdELElBQ0FULEVBQUFzRSxTQUFBN0QsR0FBQThELEtBQUF2RSxFQUFBcUUsV0FJQXJFLEVBQUFVLE1BQUFELEdBQUF5RCxFQUNBaEMsR0FBQUEsRUFBQXNDLGNBQUF4RSxFQUFBcUUsV0FDQXJFLEVBQUF5RSxTQUNBUCxFQUFBbEUsRUFBQW1FLFlBQUFELEVBQUFsRSxFQUFBb0UsV0FBQXBFLEVBQUEwRSxVQUFBZixFQUFBbEQsS0FLQVQsRUFBQTJFLFNBQUEsU0FBQWpFLEdBQ0EsR0FBQWlELEVBRUFqRCxHQUFBVixFQUFBVSxNQUFBLEtBQ0FWLEVBQUEyQyxLQUNBM0MsRUFBQXFCLFNBQUFYLEVBQUEsR0FEQVYsRUFBQXFCLFNBQUFYLEVBQUEsSUFJQVYsRUFBQTRELFVBQ0FELEVBQUEzRCxFQUFBNkQsT0FBQUcsSUFBQUYsd0JBQUFDLFFBQUFyRCxFQUFBVixFQUFBd0MsVUFBQXhDLEVBQUF1QyxRQUFBdkMsRUFBQXdDLFNBQ0F4QyxFQUFBNEUsTUFBQTVCLElBQUEsU0FBQVcsRUFBQSxRQUVBQSxFQUFBM0QsRUFBQTZELE9BQUFHLElBQUFGLHdCQUFBRyxPQUFBdkQsRUFBQVYsRUFBQXdDLFVBQUF4QyxFQUFBdUMsUUFBQXZDLEVBQUF3QyxTQUNBeEMsRUFBQTRFLE1BQUE1QixJQUFBLFFBQUFXLEVBQUEsT0FHQTNELEVBQUFtRSxXQUFBekQsR0FHQVYsRUFBQTZFLFFBQUEsU0FBQW5FLEdBQ0EsR0FBQWlELEVBRUFqRCxHQUFBVixFQUFBVSxNQUFBLEtBQ0FWLEVBQUEyQyxLQUNBM0MsRUFBQXFCLFNBQUFYLEVBQUEsR0FEQVYsRUFBQXFCLFNBQUFYLEVBQUEsSUFJQVYsRUFBQTRELFVBQ0FELEVBQUEzRCxFQUFBNkQsT0FBQUcsSUFBQUYsd0JBQUFDLFFBQUFyRCxFQUFBVixFQUFBd0MsVUFBQXhDLEVBQUF1QyxRQUFBdkMsRUFBQXdDLFNBQ0F4QyxFQUFBNEUsTUFBQTVCLElBQUEsU0FBQVcsRUFBQSxRQUVBQSxFQUFBM0QsRUFBQTZELE9BQUFHLElBQUFGLHdCQUFBRyxPQUFBdkQsRUFBQVYsRUFBQXdDLFVBQUF4QyxFQUFBdUMsUUFBQXZDLEVBQUF3QyxTQUNBeEMsRUFBQThFLEtBQUE5QixLQUFBK0IsTUFBQSxFQUFBZCxNQUFBakUsRUFBQTZELE9BQUFHLElBQUFGLHdCQUFBRyxNQUFBTixFQUFBLFFBR0EzRCxFQUFBb0UsVUFBQTFELEdBR0FWLEVBQUEwRSxVQUFBLFNBQUFmLEVBQUFsRCxHQUNBLEdBQUFtRSxFQUVBLElBQUE1RSxFQUFBNEQsU0FBQSxDQUVBLEdBQUFvQixHQUFBaEYsRUFBQTZELE9BQUFHLElBQUFGLHdCQUFBQyxPQUFBSixDQVNBLElBUEEzRCxFQUFBK0MsUUFBQXRDLEdBQUF1QyxLQUNBaUMsb0JBQUEsY0FBQUQsRUFBQSxNQUNBRSxpQkFBQSxjQUFBRixFQUFBLE1BQ0FHLGdCQUFBLGNBQUFILEVBQUEsTUFDQUksZUFBQSxjQUFBSixFQUFBLE1BQ0FLLFVBQUEsY0FBQUwsRUFBQSxRQUVBaEYsRUFBQTJDLE1BQ0EsR0FBQTNDLEVBQUFvQixTQUFBLElBQUFwQixFQUFBb0IsU0FBQSxHQUFBLENBQ0EsR0FBQTJDLElBQUEvRCxFQUFBb0IsU0FBQSxHQUFBcEIsRUFBQW9CLFNBQUEsSUFBQXBCLEVBQUE2RCxPQUFBRyxJQUFBRix3QkFBQUMsTUFDQWEsR0FBQTVFLEVBQUFvQixTQUFBLEdBQUFwQixFQUFBNkQsT0FBQUcsSUFBQUYsd0JBQUFDLE9BQ0EvRCxFQUFBc0YsT0FBQXRDLEtBQUF1QyxPQUFBWCxFQUFBLEtBQUFiLE9BQUFBLEVBQUEsWUFKQS9ELEdBQUFzRixPQUFBdEMsSUFBQSxTQUFBVyxFQUFBLFVBZUEsSUFQQTNELEVBQUErQyxRQUFBdEMsR0FBQXVDLEtBQ0FpQyxvQkFBQSxjQUFBdEIsRUFBQSxNQUNBdUIsaUJBQUEsY0FBQXZCLEVBQUEsTUFDQXdCLGdCQUFBLGNBQUF4QixFQUFBLE1BQ0F5QixlQUFBLGNBQUF6QixFQUFBLE1BQ0EwQixVQUFBLGNBQUExQixFQUFBLFFBRUEzRCxFQUFBMkMsTUFDQSxHQUFBM0MsRUFBQW9CLFNBQUEsSUFBQXBCLEVBQUFvQixTQUFBLEdBQUEsQ0FDQSxHQUFBNkMsSUFBQWpFLEVBQUFvQixTQUFBLEdBQUFwQixFQUFBb0IsU0FBQSxJQUFBcEIsRUFBQTZELE9BQUFHLElBQUFGLHdCQUFBRyxLQUNBVyxHQUFBNUUsRUFBQW9CLFNBQUEsR0FBQXBCLEVBQUE2RCxPQUFBRyxJQUFBRix3QkFBQUcsTUFDQWpFLEVBQUFzRixPQUFBdEMsS0FBQXdDLEtBQUFaLEVBQUEsS0FBQVgsTUFBQUEsRUFBQSxZQUpBakUsR0FBQXNGLE9BQUF0QyxJQUFBLFFBQUFXLEVBQUEsT0FVQTNELEVBQUFxQixTQUFBLFNBQUFYLEVBQUFELEdBQ0EsR0FBQWtELEVBR0FqRCxLQUFBVixFQUFBVSxNQUFBRCxLQUNBaUMsU0FBQWhDLElBQUFBLEVBQUEsR0FDQUEsRUFBQVYsRUFBQXVDLFVBQUE3QixFQUFBVixFQUFBdUMsU0FDQTdCLEVBQUFWLEVBQUF3QyxVQUFBOUIsRUFBQVYsRUFBQXdDLFNBRUF4QyxFQUFBNEQsVUFDQTVELEVBQUFvQixTQUFBWCxJQUFBQyxFQUFBVixFQUFBd0MsVUFBQXhDLEVBQUF1QyxRQUFBdkMsRUFBQXdDLFNBQ0EsSUFBQS9CLElBQUFrRCxFQUFBM0QsRUFBQW9CLFNBQUFYLEdBQUFULEVBQUE2RCxPQUFBRyxJQUFBRix3QkFBQUMsT0FBQS9ELEVBQUE2RCxPQUFBZCxRQUFBdEMsR0FBQXFELHdCQUFBQyxPQUFBLEdBQ0EsSUFBQXRELElBQUFrRCxFQUFBM0QsRUFBQW9CLFNBQUFYLEdBQUFULEVBQUE2RCxPQUFBRyxJQUFBRix3QkFBQUMsVUFHQS9ELEVBQUFvQixTQUFBWCxJQUFBQyxFQUFBVixFQUFBd0MsVUFBQXhDLEVBQUF1QyxRQUFBdkMsRUFBQXdDLFNBQ0FtQixFQUFBM0QsRUFBQW9CLFNBQUFYLElBQUFULEVBQUE2RCxPQUFBRyxJQUFBRix3QkFBQUcsTUFBQWpFLEVBQUE2RCxPQUFBZCxRQUFBdEMsR0FBQXFELHdCQUFBRyxRQUdBakUsRUFBQTBFLFVBQUFmLEVBQUFsRCxHQUNBVCxFQUFBVSxNQUFBRCxHQUFBQyxFQUVBVixFQUFBVyxVQUVBWCxFQUFBcUUsVUFBQXJFLEVBQUFXLFVBQUFELEVBQUFnQyxRQUVBMUMsRUFBQXFFLFVBQUEzRCxFQUdBd0IsR0FBQUEsRUFBQXNDLGNBQUF4RSxFQUFBcUUsV0FFQXJFLEVBQUFzRSxTQUFBN0QsSUFDQVQsRUFBQXNFLFNBQUE3RCxHQUFBOEQsS0FBQXZFLEVBQUFxRSxhQU1BckUsRUFBQXlGLFFBQUEsU0FBQUMsR0FFQSxPQUFBQSxFQUFBQyxTQUNBLElBQUEsSUFDQSxJQUFBLElBQ0EzRixFQUFBcUMsT0FBQSxHQUFBckMsRUFBQXlFLE9BQUF6RSxFQUFBcUIsU0FBQXJCLEVBQUFVLE1BQUFWLEVBQUE0RixPQUFBNUYsRUFBQXFDLE9BQUFyQyxFQUFBNEYsUUFDQTVGLEVBQUFxQyxPQUFBLEdBQUFyQyxFQUFBeUUsT0FBQXpFLEVBQUFxQixTQUFBckIsRUFBQVUsTUFBQVYsRUFBQTRGLE9BQUEsRUFBQW5DLEtBQUFDLElBQUEsR0FBQSxHQUFBMUQsRUFBQXFDLFFBQUFyQyxFQUFBNEYsUUFDQTVGLEVBQUE2RixVQUFBN0YsRUFBQTZGLFNBQUE3RixFQUFBVSxNQUFBVixFQUFBNEYsT0FBQTVGLEVBQUFZLFdBQ0EsTUFDQSxLQUFBLElBQ0EsSUFBQSxJQUNBWixFQUFBcUMsT0FBQSxHQUFBckMsRUFBQXlFLE9BQUF6RSxFQUFBcUIsU0FBQXJCLEVBQUFVLE1BQUFWLEVBQUE0RixPQUFBNUYsRUFBQXFDLE9BQUFyQyxFQUFBNEYsUUFDQTVGLEVBQUFxQyxPQUFBLEdBQUFyQyxFQUFBeUUsT0FBQXpFLEVBQUFxQixTQUFBckIsRUFBQVUsTUFBQVYsRUFBQTRGLE9BQUEsRUFBQW5DLEtBQUFDLElBQUEsR0FBQSxHQUFBMUQsRUFBQXFDLFFBQUFyQyxFQUFBNEYsUUFDQTVGLEVBQUE2RixVQUFBN0YsRUFBQTZGLFNBQUE3RixFQUFBVSxNQUFBVixFQUFBNEYsT0FBQTVGLEVBQUFZLFdBQ0EsTUFDQSxLQUFBLElBQ0FaLEVBQUErQyxRQUFBL0MsRUFBQTRGLE9BQUEsR0FBQUUsU0FJQTlGLEVBQUErRixXQUFBLFNBQUF0RixFQUFBdUYsRUFBQUMsR0FDQSxHQUFBdEMsRUFDQTNELEdBQUE0RCxVQUNBRCxFQUFBM0QsRUFBQTZELE9BQUFHLElBQUFGLHdCQUFBeUIsT0FBQVUsRUFDQXRDLEVBQUEzRCxFQUFBNkQsT0FBQUcsSUFBQUYsd0JBQUFDLFNBQUFKLEVBQUEzRCxFQUFBNkQsT0FBQUcsSUFBQUYsd0JBQUFDLFFBQ0FKLEVBQUEzRCxFQUFBNkQsT0FBQWQsUUFBQXRDLEdBQUFxRCx3QkFBQUMsU0FBQUosRUFBQTNELEVBQUE2RCxPQUFBZCxRQUFBdEMsR0FBQXFELHdCQUFBQyxVQUVBSixFQUFBcUMsRUFBQWhHLEVBQUE2RCxPQUFBRyxJQUFBRix3QkFBQTBCLEtBRUEsRUFBQTdCLElBQUFBLEVBQUEsR0FDQXFDLEVBQUFoRyxFQUFBNkQsT0FBQWQsUUFBQXRDLEdBQUFxRCx3QkFBQUcsTUFBQWpFLEVBQUE2RCxPQUFBRyxJQUFBRix3QkFBQWlCLFFBQ0FwQixFQUFBM0QsRUFBQTZELE9BQUFHLElBQUFGLHdCQUFBRyxNQUFBakUsRUFBQTZELE9BQUFkLFFBQUF0QyxHQUFBcUQsd0JBQUFHLFFBSUFqRSxFQUFBa0IsU0FBQXlDLEVBQUFsRCxHQUdBVCxFQUFBMkMsTUFBQTNDLEVBQUFVLE1BQUEsR0FBQVYsRUFBQVUsTUFBQSxLQUNBLElBQUFELEVBQUFULEVBQUFxQixTQUFBckIsRUFBQVUsTUFBQSxHQUFBLEdBQ0FWLEVBQUFxQixTQUFBckIsRUFBQVUsTUFBQSxHQUFBLEtBS0FWLEVBQUFrRyxRQUFBLFNBQUFDLEdBQ0FBLEVBQ0F0RSxFQUFBdUUsR0FBQSxVQUFBcEcsRUFBQXlGLFNBRUE1RCxFQUFBd0UsT0FBQSxVQUFBckcsRUFBQXlGLFVBS0F6RixFQUFBc0csV0FBQSxTQUFBQyxHQUNBLEdBQ0FuRixHQURBWCxFQUFBLEVBRUErRixFQUFBRCxFQUFBRSxlQUNBQyxFQUFBMUcsRUFBQVUsTUFBQUQsRUFLQSxJQUhBOEYsRUFBQUksaUJBR0EzRyxFQUFBMkMsS0FBQSxDQUNBdkIsRUFBQXBCLEVBQUE0RCxVQUFBNEMsRUFBQSxHQUFBSSxNQUFBNUcsRUFBQTZELE9BQUFHLElBQUFGLHdCQUFBeUIsUUFBQXZGLEVBQUE2RCxPQUFBRyxJQUFBRix3QkFBQUMsUUFDQXlDLEVBQUEsR0FBQUssTUFBQTdHLEVBQUE2RCxPQUFBRyxJQUFBRix3QkFBQTBCLE1BQUF4RixFQUFBNkQsT0FBQUcsSUFBQUYsd0JBQUFHLEtBRUEsSUFBQTZDLEdBQUFyRCxLQUFBc0QsSUFBQTNGLEVBQUFwQixFQUFBb0IsU0FBQSxJQUNBNEYsRUFBQXZELEtBQUFzRCxJQUFBM0YsRUFBQXBCLEVBQUFvQixTQUFBLEdBQ0EwRixHQUFBRSxJQUFBdkcsRUFBQSxHQUlBVCxFQUFBK0YsV0FBQXRGLEVBQUErRixFQUFBLEdBQUFLLE1BQUFMLEVBQUEsR0FBQUksT0FDQTVHLEVBQUE2RixVQUFBYSxJQUFBMUcsRUFBQVUsTUFBQUQsSUFBQVQsRUFBQTZGLFNBQUE3RixFQUFBVSxNQUFBRCxHQUFBVCxFQUFBWSxhQUlBWixFQUFBaUgsY0FBQSxTQUFBQyxFQUFBekcsR0FRQSxRQUFBMEcsR0FBQVosR0FDQUEsRUFBQUksZ0JBRUEsS0FBQSxHQURBSCxHQUFBRCxFQUFBRSxlQUNBVyxFQUFBLEVBQUFBLEVBQUFaLEVBQUFhLE9BQUFELElBQ0FwSCxFQUFBK0YsV0FBQXRGLEVBQUErRixFQUFBWSxHQUFBUCxNQUFBTCxFQUFBWSxHQUFBUixPQUlBLFFBQUFVLEdBQUFmLEdBQ0ExRSxFQUFBd0UsT0FBQSxZQUFBYyxHQUNBdEYsRUFBQXdFLE9BQUEsV0FBQWlCLEdBQ0F0RixFQUFBb0UsR0FBQSxhQUFBcEcsRUFBQXNHLFlBR0F0RyxFQUFBNkYsVUFBQWEsSUFBQTFHLEVBQUFVLE1BQUFELElBQUFULEVBQUE2RixTQUFBN0YsRUFBQVUsTUFBQUQsR0FBQVQsRUFBQVksWUFyQkEsR0FBQThGLEdBQUExRyxFQUFBVSxNQUFBRCxFQUVBeUcsR0FBQVAsaUJBQ0E5RSxFQUFBdUUsR0FBQSxZQUFBZSxHQUNBdEYsRUFBQXVFLEdBQUEsV0FBQWtCLEdBQ0F0RixFQUFBcUUsT0FBQSxhQUFBckcsRUFBQXNHLGFBb0JBdEcsRUFBQXVILFNBQUEsU0FBQUMsRUFBQS9HLEdBY0EsUUFBQWdILEdBQUFsQixHQUNBdkcsRUFBQStGLFdBQUF0RixFQUFBOEYsRUFBQVAsUUFBQU8sRUFBQU4sU0FJQSxRQUFBeUIsS0FDQTdGLEVBQUF3RSxPQUFBLFlBQUFvQixHQUNBNUYsRUFBQXdFLE9BQUEsVUFBQXFCLEdBR0ExSCxFQUFBNkYsVUFBQWEsSUFBQTFHLEVBQUFVLE1BQUFELElBQUFULEVBQUE2RixTQUFBN0YsRUFBQVUsTUFBQUQsR0FBQVQsRUFBQVksWUF0QkEsSUFBQXFCLEVBQUEwRixVQUFBLENBRUEsR0FBQWpCLEdBQUExRyxFQUFBVSxNQUFBRCxFQUVBK0csR0FBQWIsaUJBRUE5RSxFQUFBdUUsR0FBQSxZQUFBcUIsR0FDQTVGLEVBQUF1RSxHQUFBLFVBQUFzQixHQUNBMUgsRUFBQStDLFFBQUF0QyxHQUFBLEdBQUFtSCxRQUNBNUgsRUFBQTRGLE1BQUFuRixJQWtCQVQsRUFBQTZILEtBQUEsU0FBQUMsRUFBQUMsR0FDQSxHQUFBQyxFQUVBQSxHQUFBRCxFQUFBQSxFQUFBLEdBQUFFLGNBQUFILEdBQ0E5RixFQUFBLEdBQUFpRyxjQUFBSCxFQUVBLElBQUFJLEdBQUF6RyxRQUFBTyxRQUFBZ0csRUFDQSxPQUFBLElBS0FoSSxFQUFBbUksZ0JBQUEsU0FBQUMsR0FDQSxHQUFBQyxFQUNBckksR0FBQVUsU0FDQVYsRUFBQW9CLFlBRUEsT0FBQXBCLEVBQUFzSSxZQUNBRCxHQUFBLEdBQUFySSxFQUFBcUMsUUFBQWtHLE1BQUEsYUFDQXZJLEVBQUFzSSxVQUFBRCxHQUFBQSxFQUFBLEdBQUFBLEVBQUEsR0FBQWhCLE9BQUEsR0FJQXJGLEVBQUFvRSxHQUFBLGFBQUFwRyxFQUFBc0csWUFDQXRHLEVBQUErQyxRQUFBLEdBQUFxRCxHQUFBLGFBQUEsU0FBQW9DLEdBQUF4SSxFQUFBaUgsY0FBQXVCLEVBQUEsS0FHQXhJLEVBQUEyQyxPQUNBM0MsRUFBQStDLFFBQUEsR0FBQUgsU0FBQSx1QkFDQTVDLEVBQUErQyxRQUFBLEdBQUFxRCxHQUFBLGFBQUEsU0FBQW9DLEdBQUF4SSxFQUFBaUgsY0FBQXVCLEVBQUEsS0FDQXhJLEVBQUFvQyxZQUFBcEMsRUFBQXFCLFNBQUErRyxFQUFBLEdBQUEsSUFJQXBJLEVBQUFvQyxXQUFBcEMsRUFBQW1DLFdBQUFuQyxFQUFBb0MsWUFDQXBDLEVBQUFxQixTQUFBK0csRUFBQSxHQUFBLElBR0FwSSxFQUFBeUksS0FBQSxXQThCQSxHQTdCQXpJLEVBQUFLLFNBQUE0QixFQUFBUSxJQUFBLFVBQUFILFNBQUEsSUFBQW1CLEtBQUFpRixVQUNBMUksRUFBQW1FLGFBQUF3RSxFQUFBQSxHQUNBM0ksRUFBQW9FLFVBQUF1RSxFQUFBQSxFQUNBM0ksRUFBQXFDLE9BQUFDLFNBQUFMLEVBQUFJLFNBQUEsRUFDQXJDLEVBQUE0RCxTQUFBM0IsRUFBQTJCLFdBQUEsRUFDQTVELEVBQUEyQyxLQUFBVixFQUFBMkcsY0FBQSxFQUNBNUksRUFBQTZJLHNCQUFBLEVBQ0E3SSxFQUFBdUMsUUFBQUQsU0FBQUwsRUFBQU0sVUFBQSxJQUNBdkMsRUFBQXdDLFFBQUFGLFNBQUFMLEVBQUFPLFVBQUEsRUFFQXhDLEVBQUE0RCxVQUFBNUIsRUFBQVksU0FBQSxrQkFFQTVDLEVBQUErQyxTQUFBL0MsRUFBQTZILEtBQUEsZUFBQTdILEVBQUE2SCxLQUFBLGdCQUNBN0gsRUFBQWdFLElBQUFoQyxFQUNBaEMsRUFBQXNGLE9BQUF0RixFQUFBNkgsS0FBQSxnQ0FDQTdILEVBQUE0RSxNQUFBNUUsRUFBQTZILEtBQUEsMkJBQ0E3SCxFQUFBOEUsS0FBQTlFLEVBQUE2SCxLQUFBLDBCQUNBN0gsRUFBQThJLFFBQUE3RyxFQUFBNkcsVUFBQSxFQUVBOUksRUFBQVksV0FBQSxHQUFBYixHQUFBQyxHQUdBQSxFQUFBNkQsUUFDQUcsSUFBQWhDLEVBQUEsR0FDQWUsU0FBQS9DLEVBQUErQyxRQUFBLEdBQUEsR0FBQS9DLEVBQUErQyxRQUFBLEdBQUEsS0FHQSxTQUFBZCxFQUFBNkcsU0FBQTlJLEVBQUFzQixZQUFBLEdBRUFXLEVBQUE4RyxjQUNBLE9BQUE5RyxFQUFBOEcsZUFDQSxLQUFBLEVBQ0EsSUFBQSxTQUNBL0ksRUFBQXNFLFNBQUF0RSxFQUFBK0MsUUFDQS9DLEVBQUErQyxRQUFBLEdBQUFILFNBQUEsNEJBQ0E1QyxFQUFBMkMsTUFBQTNDLEVBQUErQyxRQUFBLEdBQUFILFNBQUEsMkJBQ0EsTUFDQSxTQUNBNUMsRUFBQXNFLFVBQUF6QyxFQUFBbUgsZUFBQS9HLEVBQUE4RyxvQkFFQS9JLEdBQUFzRSxXQUdBLElBQUFyQyxFQUFBbUcsUUFFQSxDQUNBLEdBQUFBLEdBQUFuRyxFQUFBbUcsUUFBQWEsTUFBQSxJQUNBakosR0FBQW9JLFNBQ0ExRixTQUFBMEYsRUFBQSxHQUFBOUYsU0FBQThGLEVBQUEsSUFBQXBJLEVBQUF3QyxRQUNBRSxTQUFBMEYsRUFBQSxHQUFBOUYsU0FBQThGLEVBQUEsSUFBQXBJLEVBQUF1QyxhQUxBdkMsR0FBQW9JLFNBQUFwSSxFQUFBa0osUUFBQWxKLEVBQUFrSixRQVVBbEosR0FBQW1KLE9BQUEsVUFBQSxXQUNBbkosRUFBQVUsTUFBQVYsRUFBQW9KLFFBR0FwSixFQUFBb0osU0FBQXBKLEVBQUEyRSxTQUFBM0UsRUFBQW9KLFdBR0FwSixFQUFBbUosT0FBQSxTQUFBLFdBQ0FuSixFQUFBVSxNQUFBVixFQUFBcUosT0FHQXJKLEVBQUFxSixRQUFBckosRUFBQTZFLFFBQUE3RSxFQUFBcUosVUFJQXJKLEVBQUFtSSxnQkFBQW5JLEVBQUFvSSxVQUlBcEksRUFBQXlJLE9BR0F6SSxFQUFBbUosT0FBQSxXQUFBLFdBQ0FuSixFQUFBc0osVUFBQXRKLEVBQUFzSixTQUFBdEosRUFBQVksY0FHQVosRUFBQW1KLE9BQUEsYUFBQSxXQUNBbkosRUFBQW9DLFlBQUFwQyxFQUFBbUMsV0FBQW5DLEVBQUFvQyxjQUlBcEMsRUFBQW1KLE9BQUEsVUFBQSxTQUFBSSxHQUNBdkosRUFBQXFCLFNBQUFrSSxFQUFBLEtBOWVBLEdBQUFDLEdBQUEsa2pCQWtmQSxRQUNBQyxTQUFBLElBQ0F6SixPQUNBb0osUUFBQSxJQUNBQyxPQUFBLElBQ0F4RCxTQUFBLElBQ0FsRixVQUFBLElBQ0EySSxTQUFBLElBQ0EvSSxTQUFBLElBQ0E2QixXQUFBLElBQ0E4RyxRQUFBLEtBRUFRLFFBQUEsV0FDQUYsU0FBQUEsRUFDQUcsU0FBQSxFQUNBNUgsS0FBQUEsU0N6bEJBLFdBQ0EsWUFFQSxJQUFBeUgsR0FDQSx1SkFPQS9ILFNBQUFDLE9BQUEsZ0JBQUEsWUFBQSxzQkFFQUMsVUFBQSxnQkFBQSxXQUFBLFFBQUEsWUFBQSxlQUFBLFlBQUEsU0FBQUcsRUFBQThILEVBQUFDLEVBQUFDLEVBQUFDLEdBRUEsUUFBQUMsR0FBQWhLLEVBQUErSCxFQUFBOUYsR0FDQWpDLEVBQUFlLE9BQUEyQixPQUdBMUMsRUFBQWlLLE9BQUEsV0FDQWxDLEVBQUFuRixTQUFBLFVBQ0FtRixFQUFBbEYsWUFBQSxZQUdBN0MsRUFBQWtLLFFBQUEsV0FDQW5DLEVBQUFuRixTQUFBLFdBQ0FtRixFQUFBbEYsWUFBQSxXQUdBN0MsRUFBQW1LLFFBQUEsU0FBQUMsRUFBQUMsRUFBQUMsR0FDQXRLLEVBQUFlLFVBQUEsSUFDQStJLEVBQUFTLFNBQUFDLFFBQUEsMkJBQUFDLE1BQUEsTUFDQXpLLEVBQUFrSyxXQUVBbEssRUFBQWUsT0FBQSxHQUdBZixFQUFBMEssVUFBQSxTQUFBTixFQUFBQyxFQUFBQyxFQUFBSyxHQUNBM0ssRUFBQWUsVUFBQSxJQUNBcUosRUFBQVEsUUFBQUMsUUFBQWQsRUFBQWUsUUFBQUQsTUFBQVQsRUFBQVEsUUFBQUMsT0FDQVQsRUFBQVEsUUFBQUcsT0FBQWhCLEVBQUFlLFFBQUFDLEtBQUFYLEVBQUFRLFFBQUFHLE1BQ0FYLEVBQUFRLFFBQUFJLFVBQUFqQixFQUFBZSxRQUFBRSxRQUFBWixFQUFBUSxRQUFBSSxTQUVBbEIsRUFBQW1CLFNBQUFULFFBQUEsbUNBQUFDLE1BQUEsTUFDQXpLLEVBQUFpSyxTQUNBakssRUFBQTZGLFVBQUE3RixFQUFBNkYsWUFFQTdGLEVBQUFlLE9BQUEsR0FJQWYsRUFBQWtMLFFBQUEsV0FFQSxHQUFBQyxHQUFBdkIsRUFBQXdCLElBQUFyQixFQUFBZSxRQUFBTyxLQUFBLFVBQUF0QixFQUFBZSxRQUFBRCxNQUdBTSxHQUFBRixRQUFBakwsRUFBQTBLLFdBQ0FTLEVBQUFHLE1BQUF0TCxFQUFBbUssU0FHQXJJLEVBQUE5QixFQUFBa0wsUUFBQSxJQUFBbkIsRUFBQWUsUUFBQVMsV0FJQXZMLEVBQUF3TCxRQUFBLFdBQ0EsR0FBQUwsR0FBQXZCLEVBQUF3QixJQUFBckIsRUFBQWUsUUFBQVUsUUFBQSxVQUFBekIsRUFBQWUsUUFBQUQsTUFHQU0sR0FBQUYsUUFBQWpMLEVBQUEwSyxXQUNBUyxFQUFBRyxNQUFBdEwsRUFBQW1LLFNBRUFySSxFQUFBOUIsRUFBQXdMLFFBQUEsSUFBQXpCLEVBQUFlLFFBQUFFLFVBSUFoTCxFQUFBeUwsU0FBQSxXQUNBLEdBQUFOLEdBQUF2QixFQUFBd0IsSUFBQXJCLEVBQUFlLFFBQUFZLE9BQUEsVUFBQTNCLEVBQUFlLFFBQUExQyxRQUdBK0MsR0FBQUYsUUFBQWpMLEVBQUEwSyxXQUNBUyxFQUFBRyxNQUFBdEwsRUFBQW1LLFVBR0FuSyxFQUFBMkwsS0FBQTFKLEVBQUEwSixNQUFBLGVBQ0EzTCxFQUFBNEwsU0FBQS9CLEVBQUFnQyxPQUNBN0wsRUFBQThMLFVBQUFqQyxFQUFBa0MsT0FDQS9MLEVBQUFnTSxRQUFBQyxLQUFBQyxNQUFBakssRUFBQStKLFVBQUEsR0FFQWhNLEVBQUFnTSxTQUFBaE0sRUFBQXlMLFdBR0EzSixFQUFBOUIsRUFBQWtMLFFBQUEsSUFBQW5CLEVBQUFlLFFBQUFTLFVBQ0F6SixFQUFBOUIsRUFBQXdMLFFBQUEsSUFBQXpCLEVBQUFlLFFBQUFFLFNBR0EsT0FDQXhCLFNBQUFBLEVBQ0F4SixPQUNBNkYsU0FBQSxLQUVBNEQsU0FBQSxJQUNBMUgsS0FBQWlJLFNDNUZBLFdBQ0EsWUFFQSxJQUFBbUMsR0FBQSx3RkFLQTFLLFNBQUFDLE9BQUEsd0JBQ0FDLFVBQUEsWUFBQSxXQUFBLFNBQUFHLEdBRUEsUUFBQWtJLEdBQUFoSyxFQUFBK0gsRUFBQTlGLEdBTUEsUUFBQW1LLEtBQ0EsUUFBQUMsS0FDQXJNLEVBQUFzTSxNQUFBdE0sRUFBQXVNLE1BQUF2SixLQUFBd0osUUFBQSxFQUFBQyxXQUFBLFlBRUF6TSxFQUFBc00sTUFBQSxFQUNBdE0sRUFBQWdMLFFBQUFsSixFQUFBdUssRUFBQXJNLEVBQUF5SyxPQUdBLFFBQUFpQyxLQUNBMU0sRUFBQXNNLE1BQUEsRUFDQXRNLEVBQUF1TSxNQUFBdkosS0FBQXdKLFFBQUEsRUFBQUMsV0FBQSxXQWZBek0sRUFBQTJNLE9BQUE1RSxFQUFBNEUsU0FDQTNNLEVBQUF1TSxNQUFBeEUsRUFBQUYsS0FBQSxPQW1CQTdILEVBQUEyTCxLQUFBMUosRUFBQTBKLE1BQUEsZUFHQTNMLEVBQUEyTSxPQUFBL0osU0FBQSxnQkFDQTVDLEVBQUEyTSxPQUFBQyxLQUFBLFFBQUFGLEdBQ0ExTSxFQUFBMk0sT0FBQUMsS0FBQSxRQUFBUixHQUNBcE0sRUFBQTJNLE9BQUFDLEtBQUEsWUFBQVIsR0FDQXBNLEVBQUEyTSxPQUFBQyxLQUFBLGFBQUFGLEdBQ0ExTSxFQUFBMk0sT0FBQUMsS0FBQSxPQUFBRixHQUVBMU0sRUFBQXlLLE1BQUF4SSxFQUFBd0ksT0FBQSxJQUdBLE9BQ0FoQixTQUFBLElBQ0FELFNBQUEyQyxFQUNBcEssS0FBQWlJLEVBQ0FoSyxPQUFBNk0sSUFBQSxZQzdEQSxXQUNBLFlBRUEsSUFBQVYsR0FBQSx5R0FNQTFLLFNBQUFDLE9BQUEsaUJBQ0FDLFVBQUEsY0FBQSxZQUFBLFNBQUFrSSxHQUVBLFFBQUFHLEdBQUFoSyxFQUFBK0gsRUFBQTlGLEdBRUFqQyxFQUFBOE0sUUFBQSxXQUVBN0ssRUFBQThLLE1BQ0FsRCxFQUFBbUQsS0FBQS9LLEVBQUFnTCxNQUFBQyxPQUFBakwsRUFBQThLLE9BREFsRCxFQUFBbUQsS0FBQS9LLEVBQUFnTCxPQUtBak4sRUFBQTJMLEtBQUExSixFQUFBMEosTUFBQSxVQUNBM0wsRUFBQW1OLE1BQUFsTCxFQUFBa0wsT0FBQSxPQUNBbk4sRUFBQWlOLEtBQUFoTCxFQUFBZ0wsTUFBQSxRQUdBbEYsRUFBQW5GLFNBQUE1QyxFQUFBbU4sTUFBQUMsZUFHQSxPQUNBM0QsU0FBQSxJQUNBRCxTQUFBMkMsRUFDQXBLLEtBQUFpSSxFQUNBaEssZ0JDdkJBLFdBQ0EsWUF1QkEsU0FBQXFOLEdBQUFyTixFQUFBc04sRUFBQUMsR0FDQSxHQUFBQyxHQUFBLEdBQUFDLGdCQUNBQyxFQUFBLEdBQUFDLFNBR0FILEdBQUFJLE9BQUFDLFdBQUEsU0FBQXRILEdBQ0EsR0FBQXVILEdBQUFySyxLQUFBRixNQUFBZ0QsRUFBQXdILGlCQUFBLElBQUF4SCxFQUFBeUgsT0FBQXpILEVBQUEwSCxNQUFBLEVBQ0FqTyxHQUFBc0YsUUFBQXRGLEVBQUFzRixPQUFBakUsU0FBQXlNLElBSUFOLEVBQUFVLE9BQUEsV0FDQWxPLEVBQUFtTyxRQUFBdkwsU0FBQSxXQUNBNUMsRUFBQW1PLFFBQUF0TCxZQUFBLFFBQ0EsSUFBQXVMLElBQ0FyTixPQUFBeU0sRUFBQXpNLE9BQ0F1SixRQUFBa0QsRUFBQWEsd0JBRUFyTyxHQUFBNkYsU0FBQXVJLElBR0FaLEVBQUFyRCxRQUFBLFdBQ0FuSyxFQUFBbU8sUUFBQXZMLFNBQUEsU0FDQTVDLEVBQUFtTyxRQUFBdEwsWUFBQSxZQUdBMkssRUFBQWMsUUFBQSxXQUNBdE8sRUFBQW1PLFFBQUF2TCxTQUFBLFNBQ0E1QyxFQUFBbU8sUUFBQXRMLFlBQUEsVUFDQSxJQUFBdUwsSUFDQXJOLE9BQUF5TSxFQUFBek0sT0FDQXVKLFFBQUFrRCxFQUFBYSx3QkFFQXJPLEdBQUE2RixTQUFBdUksSUFHQWpPLEtBQUFvTyxTQUFBLFNBQUFDLEdBRUFoQixFQUFBaUIsS0FBQSxPQUFBRCxHQUFBLEdBQ0FoQixFQUFBa0IsS0FBQWhCLEdBR0EsS0FBQSxHQUFBaUIsR0FBQSxFQUFBQSxFQUFBckIsRUFBQWpHLE9BQUFzSCxJQVNBLEdBUkF4TyxLQUFBeU8sS0FBQXRCLEVBQUFxQixHQUtBeE8sS0FBQTBPLFNBQUExTyxLQUFBeU8sS0FBQUUsS0FBQTdGLE1BQUEsS0FBQThGLFVBQUEsR0FHQUMsTUFBQTdPLEtBQUF5TyxLQUFBSyxPQUFBOU8sS0FBQXlPLEtBQUFLLEtBQUEsS0FBQWpQLEVBQUFrUCxRQUNBQyxXQUFBNUIsRUFBQSxTQUVBLENBR0EsR0FBQTZCLEdBQUEsR0FBQUMsV0FDQUQsR0FBQUUsa0JBQUFuUCxLQUFBeU8sTUFDQVEsRUFBQWxCLE9BQUFYLEVBR0FHLEVBQUE2QixPQUFBdlAsRUFBQThPLEtBQUEzTyxLQUFBeU8sS0FBQXpPLEtBQUF5TyxLQUFBRSxPQW5GQSxHQUFBVSxHQUFBLDBXQU1BQyxFQUFBLHlRQU9BQyxFQUFBLHVMQTJFQWpPLFNBQUFDLE9BQUEsZUFBQSxZQUFBLG9CQUFBLGdCQUVBQyxVQUFBLGVBQUEsWUFBQSxRQUFBLGVBQUEsZUFBQSxXQUFBLFNBQUFvSSxFQUFBNEYsRUFBQTdGLEVBQUE4RixFQUFBOU4sR0FDQSxRQUFBa0ksR0FBQWhLLEVBQUErSCxFQUFBOUYsR0F1R0EsR0FwR0FqQyxFQUFBNlAsVUFBQTlILEVBQUFGLEtBQUEsU0FDQTdILEVBQUFtTyxRQUFBcEcsRUFBQUYsS0FBQSxPQUdBN0gsRUFBQThQLFdBQUEsV0FDQTlQLEVBQUE2UCxVQUFBLEdBQUFFLFNBSUEvUCxFQUFBZ1EsYUFBQSxTQUFBMUssR0FDQXRGLEVBQUFzRixPQUFBQSxHQUlBdEYsRUFBQWlRLFdBQUEsU0FBQTNDLEdBQ0EsR0FBQTdNLEdBQ0F5UCxFQUNBMUcsRUFFQXlCLEVBQUEsV0FFQXhLLEVBQUE4TixTQUFBdE0sRUFBQXVNLFFBQUEsVUFBQXpFLEVBQUFlLFFBQUFELE9BRUE3SyxFQUFBdU0sTUFBQTRELGFBQ0FyTyxFQUFBLFdBQUE5QixFQUFBdU0sTUFBQTZELFdBQUEsTUFHQUMsRUFBQSxXQUNBclEsRUFBQXVNLE1BQUE0RCxhQUNBck8sRUFBQSxXQUFBOUIsRUFBQXVNLE1BQUE2RCxXQUFBLE1BR0FFLEVBQUEsU0FBQTFDLEdBR0EsR0FBQUEsRUFXQSxDQUVBLEdBQUEyQyxHQUFBLEdBQUFDLE9BQUE1QyxFQUFBNkMsT0FBQXZOLFFBQ0F3TixFQUFBSCxFQUFBM0IsS0FBQSxlQUdBOEIsSUFPQVIsRUFBQVMsT0FBQUMsSUFBQUMsZ0JBQUEsR0FBQUMsT0FBQUosRUFBQUssa0JBQUFDLEtBQUEsV0FDQXhILEVBQUFpRyxJQU5BUyxFQUFBbFEsRUFBQWlSLFdBQ0F6SCxFQUFBa0csT0FuQkFqUCxHQUFBbU8sS0FBQUssS0FBQSxLQUFBalAsRUFBQWtQLFVBQ0FnQixFQUFBbFEsRUFBQWtSLFNBQ0ExSCxFQUFBa0csR0FHQVYsTUFBQXZPLEVBQUFtTyxLQUFBSyxRQUNBaUIsRUFBQWxRLEVBQUFpUixXQUNBekgsRUFBQWtHLEVBc0JBLElBQUEvRSxJQUNBd0csWUFBQSxpQkFDQUMsY0FDQW5HLFFBQUFBLEVBQ0FvRixRQUFBQSxFQUNBMUUsS0FBQXVFLEVBQ0FtQixRQUFBNVEsRUFBQW9PLFVBQ0FyRixTQUFBQSxFQUdBeEosR0FBQXVNLE1BQUEsR0FBQXFELEdBQUFqRixHQUNBM0ssRUFBQXVNLE1BQUErRSxXQUlBN1EsR0FBQSxHQUFBNE0sR0FBQXJOLEVBQUFzTixFQUFBZ0QsSUFLQXRRLEVBQUE4TyxLQUFBN00sRUFBQTZNLE1BQUEsUUFDQTlPLEVBQUF1UixTQUFBdFAsRUFBQXNQLFVBQUEsUUFDQXZSLEVBQUF3UixTQUFBdlAsRUFBQXdQLFFBQUEsT0FDQXpSLEVBQUFrUCxRQUFBak4sRUFBQWlOLFNBQUEsSUFDQWxQLEVBQUEwUixPQUFBLEdBQUFDLFFBQUExUCxFQUFBd1AsT0FBQSxLQUFBLEtBQ0F6UixFQUFBMkwsS0FBQTFKLEVBQUEwSixNQUFBLFlBQ0EzTCxFQUFBbU4sTUFBQWxMLEVBQUFrTCxPQUFBLFNBRUFsTCxFQUFBeU8sVUFBQTFRLEVBQUFpUixXQUFBbEgsRUFBQTZILE1BQUE1UixFQUFBdVIsVUFBQXRQLEVBQUFnUCxXQUNBalIsRUFBQWlSLFdBQUFsSCxFQUFBNkgsTUFBQTVSLEVBQUF1UixVQUFBLGlCQUVBdFAsRUFBQWlQLFNBQUFsUixFQUFBa1IsU0FBQW5ILEVBQUE2SCxNQUFBNVIsRUFBQXVSLFVBQUF0UCxFQUFBaVAsU0FDQWxSLEVBQUFrUixTQUFBbkgsRUFBQTZILE1BQUE1UixFQUFBdVIsVUFBQSxlQUNBdlIsRUFBQTZSLFNBQUE1UCxFQUFBNFAsV0FBQSxHQUVBNVAsRUFBQXVNLFFBQUEsS0FBQSxJQUFBc0QsV0FBQSxpREFBQTlSLEVBQUFpQyxPQUVBLE9BQ0F3SCxTQUFBLElBQ0FELFNBQUFnRyxFQUNBek4sS0FBQWlJLEVBQ0FoSyxPQUNBNkYsU0FBQSxZQ3hOQSxXQUNBLFlBRUEsSUFBQXNHLEdBQUEscWhCQVNBNEYsRUFBQSxzSEFFQXRRLFNBQUFDLE9BQUEsYUFBQSxjQUVBQyxVQUFBLGFBQUEsUUFBQSxTQUFBZ08sR0FDQSxRQUFBM0YsR0FBQWhLLEVBQUErSCxFQUFBOUYsR0FHQWpDLEVBQUFzTCxPQUFBLEVBQ0F0TCxFQUFBZ1MsT0FBQSxFQUNBaFMsRUFBQWUsT0FBQSxVQUVBZixFQUFBaVMsTUFBQWxLLEVBQUFGLEtBQUEsU0FDQTdILEVBQUFrUyxTQUFBLEVBR0EsWUFBQWpRLEtBQ0FqQyxFQUFBa1MsU0FBQSxFQUNBbkssRUFBQW5GLFNBQUEsYUFJQTVDLEVBQUFtUyxTQUFBLFdBQ0FuUyxFQUFBc0wsT0FBQSxFQUNBdEwsRUFBQW9TLFFBQUEsRUFDQXBTLEVBQUFlLE9BQUEsU0FHQWYsRUFBQXFTLFNBQUEsV0FNQXJTLEVBQUEyTSxPQUFBOUosWUFBQSxlQUdBN0MsRUFBQVUsT0FDQVYsRUFBQXNMLE9BQUEsRUFFQXRMLEVBQUFVLE1BQUFWLEVBQUFVLE1BQUE0UixPQUdBLFdBQUFyUSxLQUNBakMsRUFBQVUsTUFBQVYsRUFBQVUsTUFBQWlKLFFBQUEsTUFBQSxLQUdBLGFBQUExSCxLQUNBakMsRUFBQVUsTUFBQVYsRUFBQVUsTUFBQTBNLGVBSUEsVUFBQW5MLElBQ0FqQyxFQUFBVSxNQUFBMkcsT0FBQXBGLEVBQUFzUSxTQUNBdlMsRUFBQWUsT0FBQSxVQUNBZixFQUFBb1MsT0FBQXBTLEVBQUE4TyxLQUFBLG9CQUFBN00sRUFBQXNRLE9BQUEsY0FDQXZTLEVBQUFzTCxPQUFBLEdBSUEsU0FBQXJKLEtBQ0E4UCxFQUFBUyxLQUFBeFMsRUFBQVUsU0FDQVYsRUFBQWUsT0FBQSxVQUNBZixFQUFBb1MsT0FBQSx3QkFDQXBTLEVBQUFzTCxPQUFBLEtBS0F0TCxFQUFBa1MsV0FDQWxTLEVBQUFlLE9BQUEsVUFDQWYsRUFBQW9TLE9BQUFwUyxFQUFBOE8sS0FBQSx1QkFDQTlPLEVBQUFzTCxPQUFBLEdBS0F0TCxFQUFBc0wsT0FDQXRMLEVBQUFrUyxVQUFBbFMsRUFBQWdTLFFBQ0FoUyxFQUFBZ1MsT0FBQSxFQUNBaFMsRUFBQXlTLFdBQUFDLFVBQUEsR0FBQTFTLEVBQUF5UyxXQUFBQyxhQUdBMVMsRUFBQTZGLFNBQUE1RCxFQUFBNk0sS0FBQSxLQUFBOU8sRUFBQTJTLFFBR0EzUyxFQUFBa1MsV0FBQWxTLEVBQUFnUyxPQUFBaFMsRUFBQXlTLFdBQUFDLFlBQ0ExUyxFQUFBZSxPQUFBLFFBQ0FmLEVBQUFnUyxPQUFBLEVBQ0FoUyxFQUFBNkYsU0FBQTVELEVBQUE2TSxLQUFBOU8sRUFBQVUsTUFBQVYsRUFBQTJTLFFBTUEzUyxFQUFBMlMsS0FBQSxTQUFBdkksR0FFQSxJQUFBLEdBQUF1RSxLQUFBdkUsR0FBQXBLLEVBQUEyTyxHQUFBdkUsRUFBQXVFLElBSUEzTyxFQUFBbU4sTUFBQWxMLEVBQUFrTCxNQUNBbk4sRUFBQThPLEtBQUE3TSxFQUFBNk0sS0FDQTlPLEVBQUE0UyxZQUFBM1EsRUFBQTJRLFlBQ0E1UyxFQUFBZ1IsS0FBQS9PLEVBQUErTyxNQUFBLE9BQ0FoUixFQUFBNk0sSUFBQTVLLEVBQUE0SyxJQUdBN00sRUFBQTJNLE9BQUFnRCxFQUFBaEQsT0FBQTVFLEVBQUEsUUFHQSxTQUFBOUYsS0FDQUEsRUFBQTRRLFdBQUEsRUFDQTVRLEVBQUE2USxTQUFBLEVBQ0E3USxFQUFBc1EsT0FBQSxHQUdBdlMsRUFBQWtTLFdBQ0FsUyxFQUFBeVMsV0FBQXpTLEVBQUEyTSxPQUFBdkMsS0FBQSxjQUNBcEssRUFBQXlTLFdBTUF6UyxFQUFBeVMsV0FBQVAsWUFMQWxTLEVBQUF5UyxZQUFBUCxTQUFBLEVBQUFRLFVBQUEsR0FFQTFTLEVBQUEyTSxPQUFBdkMsS0FBQSxhQUFBcEssRUFBQXlTLGNBUUF6UyxFQUFBbUosT0FBQSxRQUFBLFdBQ0FuSixFQUFBVSxPQUFBVixFQUFBcVMsYUFLQSxPQUNBNUksU0FBQSxJQUNBRCxTQUFBMkMsRUFDQXBLLEtBQUFpSSxFQUNBaEssT0FDQTZGLFNBQUEsSUFDQW5GLE1BQUEsWUM3SkEsV0FDQSxZQUVBLElBQUF5TCxHQUFBLDJZQU9BMUssU0FBQUMsT0FBQSxvQkFFQUMsVUFBQSxnQkFBQSxXQUNBLFFBQUFxSSxHQUFBaEssRUFBQStILEVBQUE5RixHQUVBakMsRUFBQStTLE9BQUEsU0FBQWpFLEVBQUFwTyxHQUVBVixFQUFBZ1QsU0FBQXRTLEdBR0FWLEVBQUFpVCxPQUFBLFNBQUFuRSxFQUFBcE8sRUFBQWlTLEdBSUEzUyxFQUFBZ1QsV0FBQXRTLEVBQ0FpUyxHQUFBWCxPQUFBLEVBQUFqUixPQUFBLFVBQUFxUixPQUFBLCtCQUVBcFMsRUFBQTZGLFNBQUE1RCxFQUFBNk0sS0FBQXBPLElBTUFWLEVBQUEyUyxLQUFBLFNBQUF2SSxHQUVBLElBQUEsR0FBQXVFLEtBQUF2RSxHQUFBcEssRUFBQTJPLEdBQUF2RSxFQUFBdUUsSUFJQTNPLEVBQUE4TyxLQUFBN00sRUFBQTZNLEtBQ0E5TyxFQUFBa1QsT0FBQWpSLEVBQUFrTCxPQUFBLFdBQ0FuTixFQUFBbVQsT0FBQWxSLEVBQUFrTCxPQUFBLHdCQUNBbk4sRUFBQW9ULE9BQUFuUixFQUFBb1IsY0FBQSxnQkFDQXJULEVBQUFzVCxLQUFBclIsRUFBQTRLLEtBQUEsb0JBQ0E3TSxFQUFBdVQsT0FBQXRSLEVBQUFvUixjQUFBLHdCQUNBclQsRUFBQXdULEtBQUF2UixFQUFBNEssS0FBQSx5QkFDQTdNLEVBQUF1UyxPQUFBdFEsRUFBQXNRLFFBQUEsR0FFQSxZQUFBdFEsS0FBQWpDLEVBQUFrUyxTQUFBLFlBSUEsT0FDQXpJLFNBQUEsSUFDQUQsU0FBQTJDLEVBQ0FwSyxLQUFBaUksRUFDQWhLLE9BQ0E2RixTQUFBLFdDcERBLFdBQ0EsWUFFQSxJQUFBc0csR0FBQSxpRkFLQTFLLFNBQUFDLE9BQUEsbUJBQ0FDLFVBQUEsZUFBQSxXQUVBLFFBQUFxSSxHQUFBaEssRUFBQStILEVBQUE5RixHQUdBakMsRUFBQTJMLEtBQUExSixFQUFBMEosTUFBQSxVQUNBM0wsRUFBQW1OLE1BQUFsTCxFQUFBa0wsT0FBQSxPQUdBcEYsRUFBQW5GLFNBQUE1QyxFQUFBbU4sTUFBQUMsZUFNQSxPQUNBM0QsU0FBQSxJQUNBRCxTQUFBMkMsRUFDQXBLLEtBQUFpSSxFQUNBaEssT0FBQThNLFFBQUEsV0M1QkEsV0FDQSxZQUVBLElBQUEwQyxHQUFBLGlGQUtBQyxFQUNBLHFZQVVBaE8sU0FBQUMsT0FBQSxrQkFDQUMsVUFBQSxlQUFBLFlBQUEsVUFBQSxlQUFBLGVBQUEsV0FBQSxTQUFBb0ksRUFBQTBKLEVBQUE3RCxFQUFBOUYsRUFBQWhJLEdBRUEsUUFBQWtJLEdBQUFoSyxFQUFBK0gsRUFBQTlGLEdBQ0FqQyxFQUFBOE0sUUFBQSxXQUVBLEdBQUE0RyxHQUFBLFNBQUFDLEVBQUF2RixHQUNBdEUsRUFBQXdCLE9BQUFkLFFBQUEscUJBQUFtSixFQUFBLElBQUEzVCxFQUFBbU4sTUFBQSxVQUFBbk4sRUFBQTRULE1BQUFuSixNQUFBLE1BQ0ExQyxFQUFBbkYsU0FBQSxRQUNBbUYsRUFBQWxGLFlBQUEsV0FDQTdDLEVBQUE2RixTQUFBN0YsRUFBQTZULFFBQUFGLEVBQUF2RixJQUdBMEYsRUFBQSxTQUFBSCxFQUFBdkYsR0FDQXJHLEVBQUFsRixZQUFBLFFBQ0E3QyxFQUFBK1QsTUFBQTNGLEVBQUFoRSxLQUFBZ0UsU0FBQTRGLE1BQ0FoVSxFQUFBNkYsU0FBQTdGLEVBQUE2VCxRQUFBLHNCQUFBekYsSUFHQTZGLEVBQUEsV0FFQWpVLEVBQUF1TSxNQUFBNEQsYUFDQXJPLEVBQUEsV0FBQTlCLEVBQUF1TSxNQUFBNkQsV0FBQSxNQUdBOEQsRUFBQSxTQUFBN0gsR0FFQSxPQUFBQSxHQUVBLElBQUEsUUFDQW9ILEVBQUFySSxJQUFBLFdBQUEsU0FBQTNJLEdBQUF6QyxFQUFBNlQsU0FBQSxTQUFBekYsR0FDQSxNQUFBLE9BQUFBLEVBQUFyTixRQUFBLGNBQUFxTixFQUFBaEUsS0FBQVEsUUFBQXVKLFVBQ0FULEdBQUEsUUFBQXRGLE9BSUEwRixHQUFBLFFBQUExRixJQUVBLE1BRUEsS0FBQSxPQUNBcUYsRUFBQXJJLElBQUEsV0FBQSxRQUFBM0ksR0FBQXpDLEVBQUErVCxPQUFBLFNBQUEzRixHQUNBLE1BQUEsT0FBQUEsRUFBQXJOLFFBQUEsY0FBQXFOLEVBQUFoRSxLQUFBUSxRQUFBdUosVUFDQVQsR0FBQSxPQUFBdEYsT0FJQTBGLEdBQUEsT0FBQTFGLElBRUEsTUFFQSxLQUFBLE9BQ0FxRixFQUFBckksSUFBQSxXQUFBLFVBQUEzSSxHQUFBekMsRUFBQTRULE9BQUEsU0FBQXhGLEdBQ0EsTUFBQSxPQUFBQSxFQUFBck4sUUFBQSxjQUFBcU4sRUFBQWhFLEtBQUFRLFFBQUF1SixVQUNBVCxHQUFBLFNBQUF0RixPQUlBMEYsR0FBQSxTQUFBMUYsS0FVQTZGLEtBSUF0SixHQUNBd0csWUFBQSxpQkFDQUMsY0FDQS9FLE9BQUE2SCxFQUNBeEgsTUFBQXVILEVBQ0F0SSxLQUFBM0wsRUFBQTJMLEtBQ0F3QixNQUFBbk4sRUFBQW1OLE9BQ0EzRCxTQUFBaUcsRUFHQXpQLEdBQUF1TSxNQUFBLEdBQUFxRCxHQUFBakYsR0FDQTNLLEVBQUF1TSxNQUFBK0UsWUFJQXJQLEVBQUF4QixRQUFBVCxFQUFBb1UsTUFBQW5TLEVBQUF4QixRQUFBcU8sTUFDQTlPLEVBQUEyTCxLQUFBNUIsRUFBQTZILE1BQUF5QyxNQUFBclUsRUFBQW9VLE1BQUFuUyxFQUFBeEIsUUFBQXFPLEtBQUExQixjQUFBLFdBQ0FwTixFQUFBbU4sTUFBQW5OLEVBQUFvVSxNQUFBblMsRUFBQXhCLFFBQUFxTyxLQUNBOU8sRUFBQTZULFFBQUE1UixFQUFBeEIsU0FFQVQsRUFBQTJMLEtBQUE1QixFQUFBNkgsTUFBQXlDLE1BQUEsY0FDQXJVLEVBQUFtTixNQUFBbEwsRUFBQXhCLFFBSUFzSCxFQUFBbkYsU0FBQTVDLEVBQUFtTixNQUFBQyxlQU1BLE9BQ0EzRCxTQUFBLElBQ0FELFNBQUFnRyxFQUNBek4sS0FBQWlJLEVBQ0FoSyxPQUFBNkYsU0FBQSxJQUFBdU8sTUFBQSxZQ2xKQSxXQUNBLFlBS0EzUyxTQUFBQyxPQUFBLG1CQUFBLGVBQUEsZUFBQSxnQkFFQTRTLFdBQUEsdUJBQUEsVUFBQSxlQUFBLFNBQUFiLEVBQUEzSixHQUNBLEdBQUE5SixHQUFBRyxJQUNBSCxHQUFBK0ssS0FBQSxPQUNBL0ssRUFBQTZLLE1BQUEsT0FDQTdLLEVBQUE4SyxRQUFBLE9BQ0E5SyxFQUFBZSxPQUFBLFNBQ0FmLEVBQUF1VSxZQUNBdlUsRUFBQXdVLGNBR0F4VSxFQUFBeVUsUUFBQSxTQUFBWixFQUFBeEgsRUFBQStCLEdBRUFwTyxFQUFBNEssUUFBQXlCLEVBQ0FyTSxFQUFBcUssUUFBQStELEVBQUFyTixPQUNBcU4sRUFBQWhFLE9BQUFwSyxFQUFBb08sU0FBQUEsRUFBQWhFLE9BR0FwSyxFQUFBMFUsYUFBQSxXQUdBakIsRUFBQXJJLElBQUEsV0FBQSxlQUFBLFNBQUFnRCxHQU9BLEdBSkFwTyxFQUFBNEssUUFBQSx5QkFDQTVLLEVBQUFvTyxTQUFBQSxFQUFBaEUsS0FDQXBLLEVBQUFxSyxRQUFBK0QsRUFBQXJOLE9BRUEsTUFBQXFOLEVBQUFyTixPQUFBLENBTUEsR0FBQSxjQUFBcU4sRUFBQWhFLEtBQUFRLFFBQUF1SixPQUFBLGNBQUEvRixFQUFBaEUsS0FBQVEsUUFBQStJLElBRUEsV0FEQTdKLEdBQUF3QixPQUFBZCxRQUFBLDJEQUFBNEQsRUFBQWhFLEtBQUFLLE1BQUEsS0FPQSxLQUFBLEdBRkE4SixNQUNBSSxFQUFBdkcsRUFBQWhFLEtBQUFnRSxTQUFBdUcsVUFDQXZOLEVBQUEsRUFBQUEsRUFBQXVOLEVBQUF0TixPQUFBRCxJQUNBbU4sRUFBQW5OLEdBQUF1TixFQUFBdk4sR0FBQTNFLEdBQ0F6QyxFQUFBd1UsV0FBQUcsRUFBQXZOLEdBQUEzRSxJQUFBa1MsRUFBQXZOLEVBRUFwSCxHQUFBdVUsU0FBQUEsTUFLQXZVLEVBQUE0VSxhQUFBLFNBQUF4RyxHQUdBcE8sRUFBQTRLLFFBQUEsd0JBQ0E1SyxFQUFBb08sU0FBQUEsRUFBQTlELFFBQ0F0SyxFQUFBcUssUUFBQStELEVBQUFyTixPQUdBZixFQUFBMFUsZ0JBR0ExVSxFQUFBNlUsVUFBQSxXQUVBN1UsRUFBQTBVLHNCQy9DQSxXQUNBLFlBS0FqVCxTQUFBQyxPQUFBLGdCQUdBb1QsUUFBQSxRQUFBLFdBRUEsR0FBQUMsR0FBQSxTQUFBL1MsRUFBQWdULEdBR0EsSUFGQSxHQUFBckksR0FBQTNLLEVBQ0FrTCxFQUFBOEgsRUFBQUMsY0FDQXRJLEVBQUEsSUFBQSxDQUNBLEdBQUFPLElBQUFQLEVBQUEsR0FBQXVJLFFBQ0EsTUFBQXZJLEVBRUFBLEdBQUFBLEVBQUFBLFdBSUF3SSxFQUFBLFNBQUFuVCxFQUFBb1QsRUFBQUosR0FJQSxJQUhBLEdBQUE5SCxHQUFBOEgsRUFBQTVILGNBQ0E0RCxFQUFBb0UsRUFBQWhJLGNBQUEsT0FDQWlJLEVBQUFyVCxFQUFBcVQsV0FDQUEsRUFBQSxJQUFBLENBQ0EsR0FBQW5JLElBQUFtSSxFQUFBLEdBQUFyRSxHQUNBLE1BQUFxRSxFQUVBQSxHQUFBQSxFQUFBQyxTQUlBQyxFQUFBLFNBQUF2VCxFQUFBZ1QsR0FHQSxJQUZBLEdBQUE5SCxHQUFBOEgsRUFBQTVILGNBQ0FpSSxFQUFBclQsRUFBQXFULFdBQ0FBLEVBQUEsSUFBQSxDQUNBLEdBQUFBLEVBQUFHLFNBQUF0SSxHQUNBLE1BQUFtSSxFQUVBQSxHQUFBQSxFQUFBQyxTQUlBRyxHQUNBVixhQUFBQSxFQUNBSSxVQUFBQSxFQUNBSSxZQUFBQSxFQUdBLE9BQUFFLE9DM0VBLElBQUFDLG9CQUFBNUcsS0FBQSxZQUFBNkcsSUFBQSxhQUFBckIsV0FBQSw4QkFBQW5ELFlBQUEsZUFBQW5FLEtBQUEsb0NDQUEsV0FDQSxZQUdBdkwsU0FBQUMsT0FBQSxnQkFHQW9ULFFBQUEsWUFBQSxXQUlBLEdBQUFjLElBRUFoRSxPQUNBaUUsTUFBQSxVQUNBeEIsTUFBQSxnQkFDQXlCLE9BQUEsa0JBQ0FDLE1BQUEsZ0JBQ0FDLE1BQUEsaUJBR0FDLE9BQ0FwTCxNQUFBLHNCQUdBQyxTQUNBWSxPQUFBLG9CQUNBRixRQUFBLHFCQUNBMEssTUFBQSxtQkFDQUMsTUFBQSxtQkFDQTlLLEtBQUEsbUJBQ0FqRCxRQUFBLFlBQ0E0QyxRQUFBLEtBQ0FPLFNBQUEsR0FDQVIsS0FBQSxHQUNBRixNQUFBLElBSUEsT0FBQStLLEtBSUFkLFFBQUEsV0FBQSxRQUFBLFlBQUEsU0FBQWxMLEVBQUFHLEdBQ0EsR0FBQXFNLElBQ0FoTCxJQUFBLFNBQUFpTCxFQUFBaEssRUFBQVUsRUFBQWxILEdBQ0FrSCxFQUFBbEMsTUFBQWQsRUFBQWUsUUFBQUQsTUFDQWpCLEVBQUF3QixJQUFBLFFBQUFpTCxFQUFBLElBQUFoSyxHQUFBaUssT0FBQXZKLElBQUF3SixLQUFBMVEsRUFBQUEsSUFJQSxPQUFBdVEsU0NuREEsV0FDQSxZQWdDQSxTQUFBekwsR0FBQTZMLEVBQUFDLEVBQUExTSxHQUNBeU0sRUFBQUUsVUFBQSxjQUdBRCxFQUFBRSxXQUFBLEdBQUFDLFdBQUEsS0FJQSxRQUFBQyxLQUNBQyxVQUFBQyxPQUFBQyxTQUFBQyxNQXZDQXhWLFFBQUFDLE9BQUEsYUFDQSxZQUNBLFlBR0EsYUFDQSw0QkFDQSx1Q0FHQSxrQkFHQSxZQUNBLFlBQ0Esa0JBQ0EsY0FDQSxhQUNBLGVBQ0EsY0FDQSxzQkFFQWlKLE9BQUFBLEdBQ0FrTSxJQUFBQSxHQUdBbE0sRUFBQXVNLFNBQUEscUJBQUEscUJBa0JBelYsUUFBQUMsT0FBQSxjQUFBbVYsS0FBQSxpQkFBQSxTQUFBTSxHQUNBQSxFQUFBQyxJQUFBLDhCQUNBLHFMQ2pEQSxXQUFBM1YsUUFBQUMsT0FBQSxhQUFBbVYsS0FBQSxpQkFBQSxTQUFBTSxHQUFBQSxFQUFBQyxJQUFBLGlDQUNBIiwiZmlsZSI6IkFGQmNsaWVudC5taW4uanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBcbiAqIENvcHlyaWdodCAoQykgMjAxNSBcIklvVC5iemhcIlxuICogQXV0aG9yIFwiRnVsdXAgQXIgRm9sbFwiXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiAqIFxuICogQnVnczogSW5wdXQgd2l0aCBDYWxsYmFjayBTSE9VTEQgQkUgZ2V0ICdyZXF1aXJlZCcgY2xhc3NcbiAqIFxuICogcmVmOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9FdmVudHMvbW91c2VvdmVyXG4gKiBcbiAqIHVzYWdlOiBcblVzYWdlICA8cmFuZ2Utc2xpZGVyPlxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICA8cmFuZ2Utc2xpZGVyXG4gICAgICBpZD1cIm15LXNsaWRlci1uYW1lXCIgICAgICAgICAgICAgICAgICAgICAvLyBvbmx5IHVzZSBhcyBhbiBhcmd1bWVudCB0byBjYWxsYmFja1xuICAgICAgY2xhc3M9XCJteS1jdXN0b20tY2xhc3NcIiAgICAgICAgICAgICAgICAgLy8gZGVmYXVsdCBjbGFzcyBpcyBpYnotcmFuZ2Utc2xpZGVyXG4gICAgICBwbGFjZWhvbGRlcj1cIlRyYWNrIERhdGUgU2VsZWN0aW9uXCIgICAgICAvLyBwbGFjZSBob2xkZXIgZm9yIGRhdGUgcmVhZG9ubHkgaW5wdXQgem9uZVxuXG4gICAgICA8IS0tIEZvdW5kYXRpb24gY2xhc3NlcyAtLT5cbiAgICAgIGNsYXNzPVwicmFkaXVzXCIgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIFp1cmIgZm91bmRhdGlvbiBkb2MgZm9yIGZ1cnRoZXIgaW5mby5cbiAgICAgIGNsYXNzPVwiaWJ6LWhhbmRsZS1kaXNwbGF5XCIgICAgICAgICAgICAgIC8vIGluY3JlYXNlIGhhbmRsZSB3aWR0aCB0byBob2xkIHNsaWRlciBjdXJyZW50IHZhbHVlXG5cbiAgICAgIDwhLS0gQW5ndWxhciBTY29wZSBWYXJpYWJsZXMgLS0+XG4gICAgICBjYWxsYmFjaz1cIm15Q2FsbEJhY2tcIiAgICAgICAgICAgICAgICAgICAgLy8gJHNjb3BlLm15Q2FsbEJhY2soc2xpZGVyaGFuZGxlKSBpcyBjYWxsZWQgd2hlbiBldmVyIHNsaWRlciBoYW5kbGUgYmx1clxuICAgICAgZm9ybWF0dGVyPVwiU2xpZGVyRm9ybWF0Q0JcIiAgICAgICAgICAgICAgIC8vICRzY29wZS5teUZvcm1hdHRlcih2YWx1ZSwgc2xpZGVyaWQpIHdoZW4gZXhpc3QgaXMgY2FsbCB3aGVuIGV2ZXIgc2xpZGVyIGhhbmRsZSBtb3Zlcy4gU2hvdWxkIHJldHVybiBleHRlcm5hbCBmb3JtIG9mIHNsaWRlciB2YWx1ZS5cbiAgICAgIG5nLW1vZGVsPVwieHh4eHh4XCIgICAgICAgICAgICAgICAgICAgICAgICAvLyB4eHggTXVzdCBiZSBkZWZpbmVkLCBzY3JpcHQgd2lsbCBzdG9yZSBhIG5ldyBSYW5nZXJPYmplY3Qgd2l0aGluIHByb3ZpZGVkIG5nLW1vZGVsIHZhcmlhYmxlLlxuICAgICAgc3RhcnQtYXQ9XCJTY29wZVZhclwiICAgICAgICAgICAgICAgICAgICAgIC8vIER5bmFtaWMgbGltaXRhdGlvbiB3aGVuIHNsaWRlciBpcyBjb25zdHJhaW5zIGJ5IGFuIGV4dGVybmFsIGNvbXBvbmFudCBbZXg6IGNoZWNrIGluL291dF1cbiAgICAgIHN0b3AtYXQ9XCJTY29wZVZhclwiICAgICAgICAgICAgICAgICAgICAgICAvLyBJZGVtIGJ1dCBmb3IgZW5kLlxuXG4gICAgICA8IS0tIEFuZ3VsYXIgRGlyZWN0aXZlIEF0dHJpYnV0ZXMgLS0+XG4gICAgICBub3QtbGVzcz1cImludGVnZXJcIiAgICAgICAgICAgICAgICAgICAgICAgLy8gRml4ZWQgc3RhcnRpbmcgdmFsdWUgZm9yIHNsaWRlciBbZGVmYXVsdCAwXVxuICAgICAgbm90LW1vcmU9XCJpbnRlZ2VyXCIgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpeGVkIGVuZCB2YWx1ZSBmb3Igc2xpZGVycyBbZGVmYXVsdCAxMDBdXG4gICAgICBieS1zdGVwPVwiKy1pbnRlZ2VyXCIgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgYnktc3RlcCBpcyA+MCB0aGVuIHNsaWRlciB1c2UgaXQgYXMgc3RlcC12YWx1ZSwgd2hlbiBuZWdhdGl2ZSB1c2UgaXQgZm9yIGRlY2ltYWwgcHJlY2lzaW9uXG4gICAgICBkaXNwbGF5LXRhcmdldD1cImhhbmRsZVwiICAgICAgICAgICAgICAgICAgLy8gZGlzcGxheSBzbGlkZXIgZXh0ZXJuYWwgZm9ybWF0ZWQgdmFsdWUgaW4gdGhlIGhhbmRsZSBbcmVxdWlyZXIgY2Fsc3M9XCJpYnotaGFuZGxlLWRpc3BsYXlcIl1cbiAgICAgIGR1YWwtaGFuZGxlcz0ndHJ1ZScgICAgICAgICAgICAgICAgICAgICAgLy8gYWRkIGEgc2Vjb25kIGhhbmRsZSB0byBzbGlkZXIgZm9yIG1pbi9tYXggcmFuZ2VcbiAgICAgIGluaXRpYWw9J3ZhbHVlfFtzdGFydC9zdG9wXScgICAgICAgICAgICAgLy8gc2xpZGVyIGluaXRpYWwgdmFsdWUgW2R1YWwtaGFuZGxlc10gbWF5IGhhdmUgaW5pdGlhbCB2YWx1ZXNcbiAgIC8+PC9yYW5nZS1zbGlkZXI+XG4gKi9cblxuKGZ1bmN0aW9uICgpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbnZhciBSYW5nZVNsaWRlciA9IGFuZ3VsYXIubW9kdWxlKCdSYW5nZVNsaWRlcicsW10pO1xuXG5mdW5jdGlvbiBSYW5nZVNsaWRlckhhbmRsZSAoc2NvcGUpIHtcbiAgICB2YXIgaW50ZXJuYWxzID0gW107XG4gICAgdmFyIGV4dGVybmFscyA9IFtdO1xuXG4gICAgdGhpcy5nZXRJZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gc2NvcGUuc2xpZGVyaWQ7XG4gICAgfTtcblxuICAgIHRoaXMuZ2V0Q2JIYW5kbGUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHNjb3BlLmNiaGFuZGxlO1xuICAgIH07XG5cbiAgICB0aGlzLmdldFZpZXc9IGZ1bmN0aW9uIChoYW5kbGUpIHtcbiAgICAgICAgaWYgKCFoYW5kbGUpIGhhbmRsZSA9IDA7XG5cbiAgICAgICAgLy8gaWYgdmFsdWUgZGlkIG5vdCBjaGFuZ2UgcmV0dXJuIGN1cnJlbnQgZXh0ZXJuYWwgcmVwcmVzZW50YXRpb25cbiAgICAgICAgaWYgKHNjb3BlLnZhbHVlW2hhbmRsZV0gPT09IGludGVybmFsc1toYW5kbGVdKSByZXR1cm4gZXh0ZXJuYWxzW2hhbmRsZV07XG5cbiAgICAgICAgLy8gYnVpbGQgZXh0ZXJuYWwgcmVwcmVzZW50YXRpb24gYW5kIHNhdmUgaXQgZm9yIGZ1cnRoZXIgcmVxdWVzdHNcbiAgICAgICAgaW50ZXJuYWxzW2hhbmRsZV0gPSBzY29wZS52YWx1ZVtoYW5kbGVdO1xuICAgICAgICBpZiAoc2NvcGUuZm9ybWF0dGVyKSBleHRlcm5hbHNbaGFuZGxlXSA9IHNjb3BlLmZvcm1hdHRlcihzY29wZS52YWx1ZVtoYW5kbGVdLCBzY29wZS5jdHJsaGFuZGxlKTtcbiAgICAgICAgZWxzZSAgZXh0ZXJuYWxzW2hhbmRsZV0gPSBzY29wZS52YWx1ZVtoYW5kbGVdO1xuXG4gICAgICAgIHJldHVybiBleHRlcm5hbHNbaGFuZGxlXTtcbiAgICB9O1xuXG4gICAgdGhpcy51cGRhdGVDbGFzcyA9IGZ1bmN0aW9uIChjbGFzc2UsIHN0YXR1cykge1xuICAgICAgIHNjb3BlLnVwZGF0ZUNsYXNzIChjbGFzc2UsIHN0YXR1cyk7XG4gICAgfTtcblxuICAgIHRoaXMuZm9yY2VSZWZyZXNoID0gZnVuY3Rpb24gKHRpbWVyKSB7XG4gICAgICAgc2NvcGUuZm9yY2VSZWZyZXNoKHRpbWVyKTtcbiAgICB9O1xuXG4gICAgdGhpcy5nZXRWYWx1ZT0gZnVuY3Rpb24gKGhhbmRsZSkge1xuICAgICAgICBpZiAoIWhhbmRsZSkgaGFuZGxlID0gMDtcbiAgICAgICAgcmV0dXJuIHNjb3BlLnZhbHVlW2hhbmRsZV07XG4gICAgfTtcblxuICAgIHRoaXMuZ2V0UmVsYXRpdmU9IGZ1bmN0aW9uIChoYW5kbGUpIHtcbiAgICAgICAgaWYgKCFoYW5kbGUpIGhhbmRsZSA9IDA7XG4gICAgICAgIHJldHVybiBzY29wZS5yZWxhdGl2ZVtoYW5kbGVdO1xuICAgIH07XG5cbiAgICB0aGlzLnNldFZhbHVlPSBmdW5jdGlvbiAodmFsdWUsIGhhbmRsZSkge1xuICAgICAgICBpZiAoIWhhbmRsZSkgaGFuZGxlID0gMDtcbiAgICAgICAgc2NvcGUuc2V0VmFsdWUgKHZhbHVlLCBoYW5kbGUpO1xuICAgIH07XG5cbiAgICB0aGlzLnNldERpc2FibGU9IGZ1bmN0aW9uIChmbGFnKSB7XG4gICAgICAgIHNjb3BlLnNldERpc2FibGUoZmxhZyk7XG4gICAgfTtcbn1cblxuUmFuZ2VTbGlkZXIuZGlyZWN0aXZlKCdyYW5nZVNsaWRlcicsIFtcIiRsb2dcIiwgXCIkZG9jdW1lbnRcIiwgXCIkdGltZW91dFwiLCBmdW5jdGlvbiAoJGxvZywgJGRvY3VtZW50LCAkdGltZW91dCkge1xuXG4gICAgdmFyIHRlbXBsYXRlPSAnPGRpdiBjbGFzcz1cImliei1yYW5nZS1zbGlkZXIgcmFuZ2Utc2xpZGVyXCIgdGl0bGU9XCJ7e3RpdGxlfX1cImRhdGEtc2xpZGVyPicrXG4gICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJyYW5nZS1zbGlkZXItaGFuZGxlIGhhbmRsZS1taW5cIiBuZy1tb3VzZWRvd249XCJoYW5kbGVDQigkZXZlbnQsMClcIiBuZy1mb2N1cz1cImZvY3VzQ0IodHJ1ZSlcIiBuZy1ibHVyPVwiZm9jdXNDQihmYWxzZSlcIiByb2xlPVwic2xpZGVyXCIgdGFiaW5kZXg9XCIwXCI+PC9zcGFuPicrXG4gICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJoYW5kbGUtbWF4XCIgbmctbW91c2Vkb3duPVwiaGFuZGxlQ0IoJGV2ZW50LDEpXCIgbmctZm9jdXM9XCJmb2N1c0NCKHRydWUpXCIgbmctYmx1cj1cImZvY3VzQ0IoZmFsc2UpXCIgcm9sZT1cInNsaWRlclwiIHRhYmluZGV4PVwiMFwiPjwvc3Bhbj4nK1xuICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwicmFuZ2Utc2xpZGVyLWFjdGl2ZS1zZWdtZW50XCI+PC9zcGFuPicrXG4gICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJpYnotcmFuZ2Utc2xpZGVyLXN0YXJ0XCIgPjwvc3Bhbj4gJytcbiAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cImliei1yYW5nZS1zbGlkZXItc3RvcFwiPjwvc3Bhbj4gJytcbiAgICAgICAgICAgICAgICAgICc8aW5wdXQgaWQ9e3tzbGlkZXJpZH19IHR5cGU9XCJoaWRkZW5cIj4nK1xuICAgICAgICAgICAgICAgICAgJzwvZGl2Pic7XG5cblxuICAgIGZ1bmN0aW9uIGxpbmsgKHNjb3BlLCBlbGVtZW50LCBhdHRycywgbW9kZWwpIHtcbiAgICAgICAgLy8gZnVsbCBpbml0aWFsaXNhdGlvbiBvZiBzbGlkZXIgZnJvbSBhIHNpbmdsZSBvYmplY3RcbiAgICAgICAgc2NvcGUuaW5pdFdpZGdldCA9IGZ1bmN0aW9uIChpbml0dmFsdWVzKSB7XG5cbiAgICAgICAgICAgIGlmIChpbml0dmFsdWVzLmJ5U3RlcCkgIHNjb3BlLmJ5U3RlcCAgPSBwYXJzZUludChpbml0dmFsdWVzLmJ5U3RlcCk7XG4gICAgICAgICAgICBpZiAoaW5pdHZhbHVlcy5ub3RNb3JlKSBzY29wZS5ub3RNb3JlID0gcGFyc2VJbnQoaW5pdHZhbHVlcy5ub3RNb3JlKTtcbiAgICAgICAgICAgIGlmIChpbml0dmFsdWVzLm5vdExlc3MpIHNjb3BlLm5vdExlc3MgPSBwYXJzZUludChpbml0dmFsdWVzLm5vdExlc3MpO1xuICAgICAgICAgICAgaWYgKGluaXR2YWx1ZXMuaWQpICAgICAgc2NvcGUuc2xpZGVyaWQ9IGluaXR2YWx1ZXMuaWQ7XG5cbiAgICAgICAgICAgIC8vIGh1Z2VseSBidXQgaW4gc29tZSBjYXNlIERPTSBpcyBub3QgZmluaXNoIHdoZW4gd2UgdHJ5IHRvIHNldCB2YWx1ZXMgISEhXG4gICAgICAgICAgICBpZiAoaW5pdHZhbHVlcy52YWx1ZSAhPT0gdW5kZWZpbmVkKSAgIHtcbiAgICAgICAgICAgICAgICBzY29wZS52YWx1ZSA9IGluaXR2YWx1ZXMudmFsdWU7XG4gICAgICAgICAgICAgICAgc2NvcGUuZm9yY2VSZWZyZXNoICg1MCk7IC8vIHdhaXQgNTBtcyBmb3IgRE9NIHRvIGJlIHJlYWR5XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gdGhpcyBmdW5jdGlvbiByZWNvbXB1dGUgc2xpZGUgcG9zaXRpb25pbmdcbiAgICAgICAgc2NvcGUuZm9yY2VSZWZyZXNoID0gZnVuY3Rpb24gKHRpbWVyKSB7XG4gICAgICAgICAgIHZhciB2YWx1ZSA9IHNjb3BlLnZhbHVlO1xuICAgICAgICAgICBzY29wZS52YWx1ZSA9IFt1bmRlZmluZWQsdW5kZWZpbmVkXTtcbiAgICAgICAgICAgJHRpbWVvdXQgKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgc2NvcGUuc2V0VmFsdWUodmFsdWVbMF0sMCk7XG4gICAgICAgICAgICAgICBpZiAoc2NvcGUuZHVhbCkgIHNjb3BlLnNldFZhbHVlKHZhbHVlWzFdLDEpO1xuICAgICAgICAgICB9LCB0aW1lcik7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gaGFuZGxlciB0byBjaGFuZ2UgY2xhc3MgZnJvbSBzbGlkZXIgaGFuZGxlXG4gICAgICAgIHNjb3BlLnVwZGF0ZUNsYXNzID0gZnVuY3Rpb24gKGNsYXNzZSwgc3RhdHVzKSB7XG5cbiAgICAgICAgICAgIGlmIChzdGF0dXMpIGVsZW1lbnQuYWRkQ2xhc3MgKGNsYXNzZSk7XG4gICAgICAgICAgICBlbHNlICBlbGVtZW50LnJlbW92ZUNsYXNzIChjbGFzc2UpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHNjb3BlLnNldERpc2FibGUgPSBmdW5jdGlvbiAoZGlzYWJsZWQpIHtcblxuICAgICAgICAgICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5hZGRDbGFzcyAoXCJkaXNhYmxlXCIpO1xuICAgICAgICAgICAgICAgIHNjb3BlLmhhbmRsZXNbMF0uY3NzICgndmlzaWJpbGl0eScsJ2hpZGRlbicpO1xuICAgICAgICAgICAgICAgIGlmIChzY29wZS5kdWFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLmhhbmRsZXNbMV0uY3NzICgndmlzaWJpbGl0eScsJ2hpZGRlbicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVDbGFzcyAoXCJkaXNhYmxlXCIpO1xuICAgICAgICAgICAgICAgIHNjb3BlLmhhbmRsZXNbMF0uY3NzICgndmlzaWJpbGl0eScsJ3Zpc2libGUnKTtcbiAgICAgICAgICAgICAgICBpZiAoc2NvcGUuZHVhbCkgc2NvcGUuaGFuZGxlc1sxXS5jc3MgKCd2aXNpYmlsaXR5JywndmlzaWJsZScpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH07XG5cbiAgICAgICAgc2NvcGUubm9ybWFsaXplID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0O1xuICAgICAgICAgICAgdmFyIHJhbmdlID0gc2NvcGUubm90TW9yZSAtIHNjb3BlLm5vdExlc3M7XG4gICAgICAgICAgICB2YXIgcG9pbnQgPSB2YWx1ZSAqIHJhbmdlO1xuXG4gICAgICAgICAgICAvLyBpZiBzdGVwIGlzIHBvc2l0aXZlIGxldCdzIHJvdW5kIHN0ZXAgYnkgc3RlcFxuICAgICAgICAgICAgaWYgKHNjb3BlLmJ5U3RlcCA+ICAwKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1vZCA9IChwb2ludCAtIChwb2ludCAlIHNjb3BlLmJ5U3RlcCkpIC8gc2NvcGUuYnlTdGVwO1xuICAgICAgICAgICAgICAgIHZhciByZW0gPSBwb2ludCAlIHNjb3BlLmJ5U3RlcDtcblxuICAgICAgICAgICAgICAgIHZhciByb3VuZCA9IChyZW0gPj0gc2NvcGUuYnlTdGVwICogMC41ID8gc2NvcGUuYnlTdGVwIDogMCk7XG4gICAgICAgICAgICAgICAgcmVzdWx0PSAobW9kICogc2NvcGUuYnlTdGVwICsgcm91bmQpICsgc2NvcGUubm90TGVzcztcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nIChcInJhbmdlPSVkIHZhbHVlPSVkIHBvaW50PSVkIG1vZD0lZCByZW09JWQgcm91bmQ9JWQgcmVzdWx0PSVkXCIsIHJhbmdlLCB2YWx1ZSwgcG9pbnQsIG1vZCwgcmVtLCByb3VuZCwgcmVzdWx0KVxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGlmIHN0ZXAgaXMgbmVnYXRpdmUgcmV0dXJuIHJvdW5kIHRvIGFza2VkIGRlY2ltYWxcbiAgICAgICAgICAgIGlmIChzY29wZS5ieVN0ZXAgPCAgMCkge1xuICAgICAgICAgICAgICAgIHZhciBwb3dlciAgPSAgTWF0aC5wb3cgKDEwLChzY29wZS5ieVN0ZXAgKiAtMSkpO1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNjb3BlLm5vdExlc3MgKyBwYXJzZUludCAocG9pbnQgKiBwb3dlcikgLyBwb3dlcjtcbiAgICAgICAgICAgICAgICByZXR1cm4gKHJlc3VsdCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGlmIHN0ZXAgaXMgbnVsbCByZXR1cm4gZnVsbCB2YWx1ZVxuICAgICAgICAgICAgcmV0dXJuIHBvaW50O1xuICAgICAgIH07XG5cbiAgICAgICAgLy8gcmV0dXJuIGN1cnJlbnQgdmFsdWVcbiAgICAgICAgc2NvcGUuZ2V0VmFsdWUgPSBmdW5jdGlvbiAob2Zmc2V0LCBoYW5kbGUpIHtcbiAgICAgICAgICAgIGlmIChzY29wZS52ZXJ0aWNhbCkge1xuICAgICAgICAgICAgICAgIHNjb3BlLnJlbGF0aXZlW2hhbmRsZV0gPSAob2Zmc2V0IC0gc2NvcGUuYm91bmRzLmhhbmRsZXNbaGFuZGxlXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQpIC8gKHNjb3BlLmJvdW5kcy5iYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0IC0gc2NvcGUuYm91bmRzLmhhbmRsZXNbaGFuZGxlXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzY29wZS5yZWxhdGl2ZVtoYW5kbGVdID0gb2Zmc2V0IC8gIChzY29wZS5ib3VuZHMuYmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIC0gc2NvcGUuYm91bmRzLmhhbmRsZXNbaGFuZGxlXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBuZXd2YWx1ZSA9IHNjb3BlLm5vcm1hbGl6ZSAoc2NvcGUucmVsYXRpdmVbaGFuZGxlXSk7XG5cblxuICAgICAgICAgICAgLy8gaWYgaW50ZXJuYWwgdmFsdWUgY2hhbmdlIHVwZGF0ZSBvciBtb2RlbFxuICAgICAgICAgICAgaWYgKG5ld3ZhbHVlICE9PSBzY29wZS52YWx1ZVtoYW5kbGVdKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5ld3ZhbHVlIDwgc2NvcGUuc3RhcnRWYWx1ZSkgbmV3dmFsdWU9c2NvcGUuc3RhcnRWYWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAobmV3dmFsdWUgPiBzY29wZS5zdG9wVmFsdWUpICBuZXd2YWx1ZT1zY29wZS5zdG9wVmFsdWU7XG5cblxuICAgICAgICAgICAgICAgIGlmIChzY29wZS5mb3JtYXR0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUudmlld1ZhbHVlID0gc2NvcGUuZm9ybWF0dGVyIChuZXd2YWx1ZSwgc2NvcGUuY3RybGhhbmRsZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUudmlld1ZhbHVlID0gbmV3dmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzY29wZS5kaXNwbGF5c1toYW5kbGVdKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLmRpc3BsYXlzW2hhbmRsZV0uaHRtbCAoc2NvcGUudmlld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyB1cGRhdGUgZXh0ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vZGVsXG4gICAgICAgICAgICAgICAgc2NvcGUudmFsdWVbaGFuZGxlXSA9IG5ld3ZhbHVlO1xuICAgICAgICAgICAgICAgIGlmIChtb2RlbCkgbW9kZWwuJHNldFZpZXdWYWx1ZSAoc2NvcGUudmlld1ZhbHVlKTtcbiAgICAgICAgICAgICAgICBzY29wZS4kYXBwbHkoKTtcbiAgICAgICAgICAgICAgICBpZiAobmV3dmFsdWUgPiBzY29wZS5zdGFydFZhbHVlICYmIG5ld3ZhbHVlIDwgc2NvcGUuc3RvcFZhbHVlKSBzY29wZS50cmFuc2xhdGUob2Zmc2V0LCBoYW5kbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG5cbiAgICAgICAgc2NvcGUuc2V0U3RhcnQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBvZmZzZXQ7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmICh2YWx1ZSA+IHNjb3BlLnZhbHVlWzBdKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFzY29wZS5kdWFsKSBzY29wZS5zZXRWYWx1ZSAodmFsdWUsMCk7XG4gICAgICAgICAgICAgICAgZWxzZSBzY29wZS5zZXRWYWx1ZSAodmFsdWUsMSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzY29wZS52ZXJ0aWNhbCkge1xuICAgICAgICAgICAgICAgIG9mZnNldCA9IHNjb3BlLmJvdW5kcy5iYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0ICogKHZhbHVlIC0gc2NvcGUubm90TGVzcykgLyAoc2NvcGUubm90TW9yZSAtIHNjb3BlLm5vdExlc3MpO1xuICAgICAgICAgICAgICAgIHNjb3BlLnN0YXJ0LmNzcygnaGVpZ2h0JyxvZmZzZXQgKyAncHgnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gc2NvcGUuYm91bmRzLmJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCAqICh2YWx1ZSAtIHNjb3BlLm5vdExlc3MpIC8gKHNjb3BlLm5vdE1vcmUgLSBzY29wZS5ub3RMZXNzKTtcbiAgICAgICAgICAgICAgICBzY29wZS5zdGFydC5jc3MoJ3dpZHRoJyxvZmZzZXQgKyAncHgnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2NvcGUuc3RhcnRWYWx1ZT0gdmFsdWU7XG4gICAgICAgIH07XG5cbiAgICAgICAgc2NvcGUuc2V0U3RvcCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIG9mZnNldDtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKHZhbHVlIDwgc2NvcGUudmFsdWVbMF0pIHtcbiAgICAgICAgICAgICAgICBpZiAoIXNjb3BlLmR1YWwpIHNjb3BlLnNldFZhbHVlICh2YWx1ZSwwKTtcbiAgICAgICAgICAgICAgICBlbHNlIHNjb3BlLnNldFZhbHVlICh2YWx1ZSwxKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHNjb3BlLnZlcnRpY2FsKSB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gc2NvcGUuYm91bmRzLmJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQgKiAodmFsdWUgLSBzY29wZS5ub3RMZXNzKSAvIChzY29wZS5ub3RNb3JlIC0gc2NvcGUubm90TGVzcyk7XG4gICAgICAgICAgICAgICAgc2NvcGUuc3RhcnQuY3NzKCdoZWlnaHQnLG9mZnNldCArICdweCcpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvZmZzZXQgPSBzY29wZS5ib3VuZHMuYmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoICogKHZhbHVlIC0gc2NvcGUubm90TGVzcykgLyAoc2NvcGUubm90TW9yZSAtIHNjb3BlLm5vdExlc3MpO1xuICAgICAgICAgICAgICAgIHNjb3BlLnN0b3AuY3NzKHsncmlnaHQnOiAwLCAnd2lkdGgnOiAoc2NvcGUuYm91bmRzLmJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCAgLSBvZmZzZXQpICsgJ3B4J30pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzY29wZS5zdG9wVmFsdWU9IHZhbHVlO1xuICAgICAgICB9O1xuXG4gICAgICAgIHNjb3BlLnRyYW5zbGF0ZSA9IGZ1bmN0aW9uIChvZmZzZXQsIGhhbmRsZSkge1xuICAgICAgICAgICAgdmFyIHN0YXJ0O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAoc2NvcGUudmVydGljYWwpIHtcbiAgICAgICAgICAgICAgICAvLyB0YWtlIGhhbmRsZSBzaXplIGluIGFjY291bnQgdG8gY29tcHV0ZSBtaWRkbGVcbiAgICAgICAgICAgICAgICB2YXIgdm9mZnNldCA9IHNjb3BlLmJvdW5kcy5iYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0IC0gb2Zmc2V0O1xuXG4gICAgICAgICAgICAgICAgc2NvcGUuaGFuZGxlc1toYW5kbGVdLmNzcyh7XG4gICAgICAgICAgICAgICAgICAgICctd2Via2l0LXRyYW5zZm9ybSc6ICd0cmFuc2xhdGVZKCcgKyB2b2Zmc2V0ICsgJ3B4KScsXG4gICAgICAgICAgICAgICAgICAgICctbW96LXRyYW5zZm9ybSc6ICd0cmFuc2xhdGVZKCcgKyB2b2Zmc2V0ICsgJ3B4KScsXG4gICAgICAgICAgICAgICAgICAgICctbXMtdHJhbnNmb3JtJzogJ3RyYW5zbGF0ZVkoJyArIHZvZmZzZXQgKyAncHgpJyxcbiAgICAgICAgICAgICAgICAgICAgJy1vLXRyYW5zZm9ybSc6ICd0cmFuc2xhdGVZKCcgKyB2b2Zmc2V0ICsgJ3B4KScsXG4gICAgICAgICAgICAgICAgICAgICd0cmFuc2Zvcm0nOiAndHJhbnNsYXRlWSgnICsgdm9mZnNldCArICdweCknXG4gICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgIGlmICghc2NvcGUuZHVhbCkgc2NvcGUuc2xpZGVyLmNzcygnaGVpZ2h0Jywgb2Zmc2V0ICsgJ3B4Jyk7XG4gICAgICAgICAgICAgICBlbHNlIGlmIChzY29wZS5yZWxhdGl2ZVsxXSAmJiBzY29wZS5yZWxhdGl2ZVswXSkge1xuICAgICAgICAgICAgICAgICAgIHZhciBoZWlnaHQgPSAoc2NvcGUucmVsYXRpdmVbMV0gLSBzY29wZS5yZWxhdGl2ZVswXSkgKiAgc2NvcGUuYm91bmRzLmJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgc3RhcnQgID0gKHNjb3BlLnJlbGF0aXZlWzBdICogIHNjb3BlLmJvdW5kcy5iYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICBzY29wZS5zbGlkZXIuY3NzICh7J2JvdHRvbSc6IHN0YXJ0KydweCcsJ2hlaWdodCc6IGhlaWdodCArICdweCd9KTtcbiAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgICAgICBzY29wZS5oYW5kbGVzW2hhbmRsZV0uY3NzKHtcbiAgICAgICAgICAgICAgICAgICAgJy13ZWJraXQtdHJhbnNmb3JtJzogJ3RyYW5zbGF0ZVgoJyArIG9mZnNldCArICdweCknLFxuICAgICAgICAgICAgICAgICAgICAnLW1vei10cmFuc2Zvcm0nOiAndHJhbnNsYXRlWCgnICsgb2Zmc2V0ICsgJ3B4KScsXG4gICAgICAgICAgICAgICAgICAgICctbXMtdHJhbnNmb3JtJzogJ3RyYW5zbGF0ZVgoJyArIG9mZnNldCArICdweCknLFxuICAgICAgICAgICAgICAgICAgICAnLW8tdHJhbnNmb3JtJzogJ3RyYW5zbGF0ZVgoJyArIG9mZnNldCArICdweCknLFxuICAgICAgICAgICAgICAgICAgICAndHJhbnNmb3JtJzogJ3RyYW5zbGF0ZVgoJyArIG9mZnNldCArICdweCknXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKCFzY29wZS5kdWFsKSBzY29wZS5zbGlkZXIuY3NzKCd3aWR0aCcsb2Zmc2V0ICsgJ3B4Jyk7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2NvcGUucmVsYXRpdmVbMV0gJiYgc2NvcGUucmVsYXRpdmVbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHdpZHRoID0gKHNjb3BlLnJlbGF0aXZlWzFdIC0gc2NvcGUucmVsYXRpdmVbMF0pICogIHNjb3BlLmJvdW5kcy5iYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gKHNjb3BlLnJlbGF0aXZlWzBdICogIHNjb3BlLmJvdW5kcy5iYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpO1xuICAgICAgICAgICAgICAgICAgICBzY29wZS5zbGlkZXIuY3NzICh7J2xlZnQnOiBzdGFydCsncHgnLCd3aWR0aCc6IHdpZHRoICsgJ3B4J30pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICAvLyBwb3NpdGlvbiBoYW5kbGUgb24gdGhlIGJhciBkZXBlbmRpbmcgYSBnaXZlbiB2YWx1ZVxuICAgICAgICBzY29wZS5zZXRWYWx1ZSA9IGZ1bmN0aW9uICh2YWx1ZSAsIGhhbmRsZSkge1xuICAgICAgICAgICAgdmFyIG9mZnNldDtcblxuICAgICAgICAgICAgLy8gaWYgdmFsdWUgZGlkIG5vdCBjaGFuZ2UgaWdub3JlXG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IHNjb3BlLnZhbHVlW2hhbmRsZV0pIHJldHVybjtcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSAgIHZhbHVlPTA7XG4gICAgICAgICAgICBpZiAodmFsdWUgPiBzY29wZS5ub3RNb3JlKSB2YWx1ZT1zY29wZS5ub3RNb3JlO1xuICAgICAgICAgICAgaWYgKHZhbHVlIDwgc2NvcGUubm90TGVzcykgdmFsdWU9c2NvcGUubm90TGVzcztcblxuICAgICAgICAgICAgaWYgKHNjb3BlLnZlcnRpY2FsKSB7XG4gICAgICAgICAgICAgICAgc2NvcGUucmVsYXRpdmVbaGFuZGxlXSA9ICh2YWx1ZSAtIHNjb3BlLm5vdExlc3MpIC8gKHNjb3BlLm5vdE1vcmUgLSBzY29wZS5ub3RMZXNzKTtcbiAgICAgICAgICAgICAgICBpZiAoaGFuZGxlID09PSAwKSBvZmZzZXQgPSAoc2NvcGUucmVsYXRpdmVbaGFuZGxlXSAqIHNjb3BlLmJvdW5kcy5iYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KSArIHNjb3BlLmJvdW5kcy5oYW5kbGVzW2hhbmRsZV0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0LzI7XG4gICAgICAgICAgICAgICAgaWYgKGhhbmRsZSA9PT0gMSkgb2Zmc2V0ID0gc2NvcGUucmVsYXRpdmVbaGFuZGxlXSAqIHNjb3BlLmJvdW5kcy5iYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNjb3BlLnJlbGF0aXZlW2hhbmRsZV0gPSAodmFsdWUgLSBzY29wZS5ub3RMZXNzKSAvIChzY29wZS5ub3RNb3JlIC0gc2NvcGUubm90TGVzcyk7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gc2NvcGUucmVsYXRpdmVbaGFuZGxlXSAqICAoc2NvcGUuYm91bmRzLmJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCAtIHNjb3BlLmJvdW5kcy5oYW5kbGVzW2hhbmRsZV0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzY29wZS50cmFuc2xhdGUgKG9mZnNldCxoYW5kbGUpO1xuICAgICAgICAgICAgc2NvcGUudmFsdWVbaGFuZGxlXSA9IHZhbHVlO1xuXG4gICAgICAgICAgICBpZiAoc2NvcGUuZm9ybWF0dGVyKSB7XG4gICAgICAgICAgICAgICAgLy8gd2hlbiBjYWxsIHRocm91Z2ggc2V0VmFsdWUgd2UgZG8gbm90IHBhc3MgY2JIYW5kbGVcbiAgICAgICAgICAgICAgICBzY29wZS52aWV3VmFsdWUgPSBzY29wZS5mb3JtYXR0ZXIgKHZhbHVlLCB1bmRlZmluZWQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzY29wZS52aWV3VmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG1vZGVsKSBtb2RlbC4kc2V0Vmlld1ZhbHVlKCBzY29wZS52aWV3VmFsdWUpO1xuXG4gICAgICAgICAgICBpZiAoc2NvcGUuZGlzcGxheXNbaGFuZGxlXSkge1xuICAgICAgICAgICAgICAgIHNjb3BlLmRpc3BsYXlzW2hhbmRsZV0uaHRtbCAoc2NvcGUudmlld1ZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuXG4gICAgICAgIC8vIE1pbmltYWwga2V5c3Ryb2tlIGhhbmRsaW5nIHRvIGNsb3NlIHBpY2tlciB3aXRoIEVTQyBbc2NvcGUuYWN0aWYgaXMgY3VycmVudCBoYW5kbGUgaW5kZXhdXG4gICAgICAgIHNjb3BlLmtleWRvd249ICBmdW5jdGlvbihlKXtcblxuICAgICAgICAgICAgc3dpdGNoKGUua2V5Q29kZSl7XG4gICAgICAgICAgICAgICAgY2FzZSAzOTogLy8gUmlnaHRcbiAgICAgICAgICAgICAgICBjYXNlIDM4OiAvLyB1cFxuICAgICAgICAgICAgICAgICAgICAgaWYgKHNjb3BlLmJ5U3RlcCA+IDApIHNjb3BlLiRhcHBseShzY29wZS5zZXRWYWx1ZSAoKHNjb3BlLnZhbHVlW3Njb3BlLmFjdGlmXStzY29wZS5ieVN0ZXApLCBzY29wZS5hY3RpZikpO1xuICAgICAgICAgICAgICAgICAgICAgaWYgKHNjb3BlLmJ5U3RlcCA8IDApIHNjb3BlLiRhcHBseShzY29wZS5zZXRWYWx1ZSAoKHNjb3BlLnZhbHVlW3Njb3BlLmFjdGlmXSsoMSAvIE1hdGgucG93KDEwLCBzY29wZS5ieVN0ZXAqLTEpKSksc2NvcGUuYWN0aWYpKTtcbiAgICAgICAgICAgICAgICAgICAgIGlmIChzY29wZS5jYWxsYmFjaykgIHNjb3BlLmNhbGxiYWNrIChzY29wZS52YWx1ZVtzY29wZS5hY3RpZl0sIHNjb3BlLmN0cmxoYW5kbGUpO1xuICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAzNzogLy8gbGVmdFxuICAgICAgICAgICAgICAgIGNhc2UgNDA6IC8vIGRvd25cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNjb3BlLmJ5U3RlcCA+IDApIHNjb3BlLiRhcHBseShzY29wZS5zZXRWYWx1ZSAoKHNjb3BlLnZhbHVlW3Njb3BlLmFjdGlmXSAtIHNjb3BlLmJ5U3RlcCksIHNjb3BlLmFjdGlmKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzY29wZS5ieVN0ZXAgPCAwKSBzY29wZS4kYXBwbHkoc2NvcGUuc2V0VmFsdWUgKChzY29wZS52YWx1ZVtzY29wZS5hY3RpZl0gLSAoMSAvIE1hdGgucG93KDEwLCBzY29wZS5ieVN0ZXAqLTEpKSksc2NvcGUuYWN0aWYpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNjb3BlLmNhbGxiYWNrKSAgc2NvcGUuY2FsbGJhY2sgKHNjb3BlLnZhbHVlW3Njb3BlLmFjdGlmXSwgc2NvcGUuY3RybGhhbmRsZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgMjc6IC8vIGVzY1xuICAgICAgICAgICAgICAgICAgICBzY29wZS5oYW5kbGVzW3Njb3BlLmFjdGlmXVswXS5ibHVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgc2NvcGUubW92ZUhhbmRsZSA9IGZ1bmN0aW9uIChoYW5kbGUsIGNsaWVudFgsIGNsaWVudFkpIHtcbiAgICAgICAgICAgIHZhciBvZmZzZXQ7XG4gICAgICAgICAgICBpZiAoc2NvcGUudmVydGljYWwpIHtcbiAgICAgICAgICAgICAgICBvZmZzZXQgPSBzY29wZS5ib3VuZHMuYmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbSAtIGNsaWVudFk7XG4gICAgICAgICAgICAgICAgaWYgKG9mZnNldCA+IHNjb3BlLmJvdW5kcy5iYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KSBvZmZzZXQgPSBzY29wZS5ib3VuZHMuYmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcbiAgICAgICAgICAgICAgICBpZiAob2Zmc2V0IDwgc2NvcGUuYm91bmRzLmhhbmRsZXNbaGFuZGxlXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQpIG9mZnNldCA9IHNjb3BlLmJvdW5kcy5oYW5kbGVzW2hhbmRsZV0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvZmZzZXQgPSBjbGllbnRYIC0gc2NvcGUuYm91bmRzLmJhci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuXG4gICAgICAgICAgICAgICAgaWYgKG9mZnNldCA8IDApIG9mZnNldCA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKChjbGllbnRYICsgc2NvcGUuYm91bmRzLmhhbmRsZXNbaGFuZGxlXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCkgPiBzY29wZS5ib3VuZHMuYmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnJpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IHNjb3BlLmJvdW5kcy5iYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggLSBzY29wZS5ib3VuZHMuaGFuZGxlc1toYW5kbGVdLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2NvcGUuZ2V0VmFsdWUgIChvZmZzZXQsIGhhbmRsZSk7XG5cbiAgICAgICAgICAgIC8vIHByZXZlbnQgZHVhbCBoYW5kbGUgdG8gY3Jvc3NcbiAgICAgICAgICAgIGlmIChzY29wZS5kdWFsICYmIHNjb3BlLnZhbHVlIFswXSA+IHNjb3BlLnZhbHVlWzFdKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhhbmRsZSA9PT0gMCkgc2NvcGUuc2V0VmFsdWUgKHNjb3BlLnZhbHVlWzBdICwgMSk7XG4gICAgICAgICAgICAgICAgZWxzZSBzY29wZS5zZXRWYWx1ZShzY29wZS52YWx1ZVsxXSwwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuXG4gICAgICAgIHNjb3BlLmZvY3VzQ0IgPSBmdW5jdGlvbiAoaW5zaWRlKSB7XG4gICAgICAgICAgICBpZiAoaW5zaWRlKSB7XG4gICAgICAgICAgICAgICAgJGRvY3VtZW50Lm9uKCdrZXlkb3duJyxzY29wZS5rZXlkb3duKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgJGRvY3VtZW50LnVuYmluZCgna2V5ZG93bicsc2NvcGUua2V5ZG93bik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gYmFyIHdhcyB0b3VjaCBsZXQgbW92ZSBoYW5kbGUgdG8gdGhpcyBwb2ludFxuICAgICAgICBzY29wZS50b3VjaEJhckNCID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICB2YXIgaGFuZGxlPTA7XG4gICAgICAgICAgICB2YXIgcmVsYXRpdmU7XG4gICAgICAgICAgICB2YXIgdG91Y2hlcyA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzO1xuICAgICAgICAgICAgdmFyIG9sZHZhbHVlID0gc2NvcGUudmFsdWVbaGFuZGxlXTtcblxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgLy8gaWYgd2UgaGF2ZSB0d28gaGFuZGxlcyBzZWxlY3QgY2xvc2VzdCBvbmUgZnJvbSB0b3VjaCBwb2ludFxuICAgICAgICAgICAgaWYgKHNjb3BlLmR1YWwpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2NvcGUudmVydGljYWwpIHJlbGF0aXZlID0gKHRvdWNoZXNbMF0ucGFnZVkgLSBzY29wZS5ib3VuZHMuYmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbSkgLyBzY29wZS5ib3VuZHMuYmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcbiAgICAgICAgICAgICAgICBlbHNlIHJlbGF0aXZlPSAodG91Y2hlc1swXS5wYWdlWCAtIHNjb3BlLmJvdW5kcy5iYXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCkgLyBzY29wZS5ib3VuZHMuYmFyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuXG4gICAgICAgICAgICAgICAgdmFyIGRpc3RhbmNlMCA9IE1hdGguYWJzKHJlbGF0aXZlIC0gc2NvcGUucmVsYXRpdmVbMF0pO1xuICAgICAgICAgICAgICAgIHZhciBkaXN0YW5jZTEgPSBNYXRoLmFicyhyZWxhdGl2ZSAtIHNjb3BlLnJlbGF0aXZlWzFdKTtcbiAgICAgICAgICAgICAgICBpZiAoZGlzdGFuY2UxIDwgZGlzdGFuY2UwKSBoYW5kbGU9MTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gbW92ZSBoYW5kbGUgdG8gbmV3IHBsYWNlXG4gICAgICAgICAgICBzY29wZS5tb3ZlSGFuZGxlIChoYW5kbGUsdG91Y2hlc1swXS5wYWdlWCwgdG91Y2hlc1swXS5wYWdlWSk7XG4gICAgICAgICAgICBpZiAoc2NvcGUuY2FsbGJhY2sgJiYgb2xkdmFsdWUgIT09IHNjb3BlLnZhbHVlW2hhbmRsZV0pIHNjb3BlLmNhbGxiYWNrIChzY29wZS52YWx1ZVtoYW5kbGVdLCBzY29wZS5jdHJsaGFuZGxlKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBoYW5kbGUgd2FzIHRvdWNoIGFuZCBkcmFnXG4gICAgICAgIHNjb3BlLnRvdWNoSGFuZGxlQ0IgPSBmdW5jdGlvbiAodG91Y2hldnQsIGhhbmRsZSkge1xuICAgICAgICAgICAgdmFyIG9sZHZhbHVlID0gc2NvcGUudmFsdWVbaGFuZGxlXTtcblxuICAgICAgICAgICAgdG91Y2hldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICRkb2N1bWVudC5vbigndG91Y2htb3ZlJyx0b3VjaG1vdmUpO1xuICAgICAgICAgICAgJGRvY3VtZW50Lm9uKCd0b3VjaGVuZCcgLHRvdWNoZW5kKTtcbiAgICAgICAgICAgIGVsZW1lbnQudW5iaW5kKCd0b3VjaHN0YXJ0Jywgc2NvcGUudG91Y2hCYXJDQik7XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHRvdWNobW92ZShldmVudCkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdmFyIHRvdWNoZXMgPSBldmVudC5jaGFuZ2VkVG91Y2hlcztcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpZHggPSAwOyBpZHggPCB0b3VjaGVzLmxlbmd0aDsgaWR4KyspIHtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUubW92ZUhhbmRsZSAoaGFuZGxlLHRvdWNoZXNbaWR4XS5wYWdlWCwgdG91Y2hlc1tpZHhdLnBhZ2VZKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHRvdWNoZW5kKGV2ZW50KSB7XG4gICAgICAgICAgICAgICAkZG9jdW1lbnQudW5iaW5kKCd0b3VjaG1vdmUnLHRvdWNobW92ZSk7XG4gICAgICAgICAgICAgICAkZG9jdW1lbnQudW5iaW5kKCd0b3VjaGVuZCcgLHRvdWNoZW5kKTtcbiAgICAgICAgICAgICAgIGVsZW1lbnQub24oJ3RvdWNoc3RhcnQnLCBzY29wZS50b3VjaEJhckNCKTtcblxuICAgICAgICAgICAgICAgIC8vIGlmIHZhbHVlIGNoYW5nZSBub3RpZnkgYXBwbGljYXRpb24gY2FsbGJhY2tcbiAgICAgICAgICAgICAgICBpZiAoc2NvcGUuY2FsbGJhY2sgJiYgb2xkdmFsdWUgIT09IHNjb3BlLnZhbHVlW2hhbmRsZV0pIHNjb3BlLmNhbGxiYWNrIChzY29wZS52YWx1ZVtoYW5kbGVdLCBzY29wZS5jdHJsaGFuZGxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBzY29wZS5oYW5kbGVDQiA9IGZ1bmN0aW9uIChjbGlja2V2ZW50LCBoYW5kbGUpIHtcblxuICAgICAgICAgICAgaWYgKGF0dHJzLmF1dG9tYXRpYykgcmV0dXJuO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgb2xkdmFsdWUgPSBzY29wZS52YWx1ZVtoYW5kbGVdO1xuICAgICAgICAgICAgLy8gcmVnaXN0ZXIgbW91c2UgZXZlbnQgdG8gdHJhY2sgaGFuZGxlXG4gICAgICAgICAgICBjbGlja2V2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgICRkb2N1bWVudC5vbignbW91c2Vtb3ZlJyxtb3VzZW1vdmUpO1xuICAgICAgICAgICAgJGRvY3VtZW50Lm9uKCdtb3VzZXVwJywgbW91c2V1cCk7XG4gICAgICAgICAgICBzY29wZS5oYW5kbGVzW2hhbmRsZV1bMF0uZm9jdXMoKTtcbiAgICAgICAgICAgIHNjb3BlLmFjdGlmPWhhbmRsZTtcblxuICAgICAgICAgICAgLy8gc2xpZGVyIGhhbmRsZSBpcyBtb3ZpbmdcbiAgICAgICAgICAgIGZ1bmN0aW9uIG1vdXNlbW92ZShldmVudCkge1xuICAgICAgICAgICAgICAgIHNjb3BlLm1vdmVIYW5kbGUgKGhhbmRsZSwgZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIG1vdXNlIGlzIHVwIGRhbnMgbGVhdmUgc2xpZGVyIHNlbmQgcmVzaXplIGV2ZW50c1xuICAgICAgICAgICAgZnVuY3Rpb24gbW91c2V1cCgpIHtcbiAgICAgICAgICAgICAgICAkZG9jdW1lbnQudW5iaW5kKCdtb3VzZW1vdmUnLCBtb3VzZW1vdmUpO1xuICAgICAgICAgICAgICAgICRkb2N1bWVudC51bmJpbmQoJ21vdXNldXAnLCBtb3VzZXVwKTtcblxuICAgICAgICAgICAgICAgIC8vIGlmIHZhbHVlIGNoYW5nZSBub3RpZnkgYXBwbGljYXRpb24gY2FsbGJhY2tcbiAgICAgICAgICAgICAgICBpZiAoc2NvcGUuY2FsbGJhY2sgJiYgb2xkdmFsdWUgIT09IHNjb3BlLnZhbHVlW2hhbmRsZV0pIHNjb3BlLmNhbGxiYWNrIChzY29wZS52YWx1ZVtoYW5kbGVdLCBzY29wZS5jdHJsaGFuZGxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICAvLyBzaW11bGF0ZSBqcXVlcnkgZmluZCBieSBjbGFzc2VzIGNhcGFiaWxpdGllcyBbd2FybmluZyBvbmx5IHJldHVybiAxc3QgZWxlbWVudHNdXG4gICAgICAgIHNjb3BlLmZpbmQgPSBmdW5jdGlvbiAoc2VsZWN0LCBlbGVtKSB7XG4gICAgICAgICAgICB2YXIgZG9tZWxlbTtcblxuICAgICAgICAgICAgaWYgKGVsZW0pIGRvbWVsZW0gPSBlbGVtWzBdLnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0KTtcbiAgICAgICAgICAgIGVsc2UgZG9tZWxlbSA9IGVsZW1lbnRbMF0ucXVlcnlTZWxlY3RvcihzZWxlY3QpO1xuXG4gICAgICAgICAgICB2YXIgYW5nZWxlbSA9IGFuZ3VsYXIuZWxlbWVudChkb21lbGVtKTtcbiAgICAgICAgICAgIHJldHVybiAoYW5nZWxlbSk7XG4gICAgICAgIH07XG5cblxuXG4gICAgICAgIHNjb3BlLmluaXRpYWxTZXR0aW5ncyA9IGZ1bmN0aW9uIChpbml0aWFsKSB7XG4gICAgICAgICAgICB2YXIgZGVjaW1hbF9wbGFjZXNfbWF0Y2hfcmVzdWx0O1xuICAgICAgICAgICAgc2NvcGUudmFsdWU9W107ICAvLyBzdG9yZSBsb3cvaGVpZ2h0IHZhbHVlIHdoZW4gdHdvIGhhbmRsZXNcbiAgICAgICAgICAgIHNjb3BlLnJlbGF0aXZlPVtdO1xuXG4gICAgICAgICAgICBpZiAoc2NvcGUucHJlY2lzaW9uID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgZGVjaW1hbF9wbGFjZXNfbWF0Y2hfcmVzdWx0ID0gKCcnICsgc2NvcGUuYnlTdGVwKS5tYXRjaCgvXFwuKFtcXGRdKikvKTtcbiAgICAgICAgICAgICAgICBzY29wZS5wcmVjaXNpb24gPSBkZWNpbWFsX3BsYWNlc19tYXRjaF9yZXN1bHQgJiYgZGVjaW1hbF9wbGFjZXNfbWF0Y2hfcmVzdWx0WzFdID8gZGVjaW1hbF9wbGFjZXNfbWF0Y2hfcmVzdWx0WzFdLmxlbmd0aCA6IDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIHBvc2l0aW9uIGhhbmRsZSB0byBpbml0aWFsIHZhbHVlKHMpXG4gICAgICAgICAgICBlbGVtZW50Lm9uKCd0b3VjaHN0YXJ0Jywgc2NvcGUudG91Y2hCYXJDQik7XG4gICAgICAgICAgICBzY29wZS5oYW5kbGVzWzBdLm9uKCd0b3VjaHN0YXJ0JywgZnVuY3Rpb24oZXZ0KXtzY29wZS50b3VjaEhhbmRsZUNCKGV2dCwwKTt9KTtcblxuICAgICAgICAgICAgLy8gdGhpcyBzbGlkZXIgaGFzIHR3byBoYW5kbGVzIGxvdy9oaWdodFxuICAgICAgICAgICAgaWYgKHNjb3BlLmR1YWwpIHtcbiAgICAgICAgICAgICAgICBzY29wZS5oYW5kbGVzWzFdLmFkZENsYXNzKCdyYW5nZS1zbGlkZXItaGFuZGxlJyk7XG4gICAgICAgICAgICAgICAgc2NvcGUuaGFuZGxlc1sxXS5vbigndG91Y2hzdGFydCcsIGZ1bmN0aW9uKGV2dCl7c2NvcGUudG91Y2hIYW5kbGVDQihldnQsMSk7fSk7XG4gICAgICAgICAgICAgICAgaWYgKCFzY29wZS5pbml0dmFsdWVzKSBzY29wZS5zZXRWYWx1ZSAoaW5pdGlhbFsxXSwxKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaWYgd2UgaGF2ZSBhbiBpbml0c3RhdGUgb2JqZWN0IGFwcGx5IGl0XG4gICAgICAgICAgICBpZiAoc2NvcGUuaW5pdHZhbHVlcykgc2NvcGUuaW5pdFdpZGdldCAoc2NvcGUuaW5pdHZhbHVlcyk7XG4gICAgICAgICAgICBlbHNlICAgc2NvcGUuc2V0VmFsdWUgKGluaXRpYWxbMF0sMCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgc2NvcGUuaW5pdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNjb3BlLnNsaWRlcmlkICAgPSBhdHRycy5pZCB8fCBcInNsaWRlci1cIiArIHBhcnNlSW50IChNYXRoLnJhbmRvbSgpICogMTAwMCk7XG4gICAgICAgICAgICBzY29wZS5zdGFydFZhbHVlID0gLUluZmluaXR5O1xuICAgICAgICAgICAgc2NvcGUuc3RvcFZhbHVlICA9IEluZmluaXR5O1xuICAgICAgICAgICAgc2NvcGUuYnlTdGVwICAgPSBwYXJzZUludChhdHRycy5ieVN0ZXApIHx8IDE7XG4gICAgICAgICAgICBzY29wZS52ZXJ0aWNhbCA9IGF0dHJzLnZlcnRpY2FsICAgfHwgZmFsc2U7XG4gICAgICAgICAgICBzY29wZS5kdWFsICAgICA9IGF0dHJzLmR1YWxIYW5kbGVzfHwgZmFsc2U7XG4gICAgICAgICAgICBzY29wZS50cmlnZ2VyX2lucHV0X2NoYW5nZT0gZmFsc2U7XG4gICAgICAgICAgICBzY29wZS5ub3RNb3JlICA9IHBhcnNlSW50KGF0dHJzLm5vdE1vcmUpICAgfHwgMTAwO1xuICAgICAgICAgICAgc2NvcGUubm90TGVzcyAgPSBwYXJzZUludChhdHRycy5ub3RMZXNzKSAgIHx8IDA7XG5cbiAgICAgICAgICAgIGlmIChzY29wZS52ZXJ0aWNhbCkgZWxlbWVudC5hZGRDbGFzcyhcInZlcnRpY2FsLXJhbmdlXCIpO1xuXG4gICAgICAgICAgICBzY29wZS5oYW5kbGVzPSBbc2NvcGUuZmluZCgnLmhhbmRsZS1taW4nKSwgc2NvcGUuZmluZCgnLmhhbmRsZS1tYXgnKV07XG4gICAgICAgICAgICBzY29wZS5iYXIgICAgPSBlbGVtZW50O1xuICAgICAgICAgICAgc2NvcGUuc2xpZGVyID0gc2NvcGUuZmluZCgnLnJhbmdlLXNsaWRlci1hY3RpdmUtc2VnbWVudCcpO1xuICAgICAgICAgICAgc2NvcGUuc3RhcnQgID0gc2NvcGUuZmluZCgnLmliei1yYW5nZS1zbGlkZXItc3RhcnQnKTtcbiAgICAgICAgICAgIHNjb3BlLnN0b3AgICA9IHNjb3BlLmZpbmQoJy5pYnotcmFuZ2Utc2xpZGVyLXN0b3AnKTtcbiAgICAgICAgICAgIHNjb3BlLmRpc2FibGU9IGF0dHJzLmRpc2FibGUgfHwgZmFsc2U7XG5cbiAgICAgICAgICAgIHNjb3BlLmN0cmxoYW5kbGUgPSBuZXcgUmFuZ2VTbGlkZXJIYW5kbGUgKHNjb3BlKTtcblxuICAgICAgICAgICAgLy8gcHJlcGFyZSBET00gb2JqZWN0IHBvaW50ZXIgdG8gY29tcHV0ZSBzaXplIGR5bmFtaWNhbGx5XG4gICAgICAgICAgICBzY29wZS5ib3VuZHMgPSB7XG4gICAgICAgICAgICAgICAgYmFyICAgIDogZWxlbWVudFswXSxcbiAgICAgICAgICAgICAgICBoYW5kbGVzOiBbc2NvcGUuaGFuZGxlc1swXVswXSwgc2NvcGUuaGFuZGxlc1sxXVswXV1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmIChhdHRycy5kaXNhYmxlID09PSAndHJ1ZScpIHNjb3BlLnNldERpc2FibGUodHJ1ZSk7XG5cbiAgICAgICAgICAgIGlmIChhdHRycy5kaXNwbGF5VGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChhdHRycy5kaXNwbGF5VGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgdHJ1ZSA6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2hhbmRsZScgOlxuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUuZGlzcGxheXMgPSBzY29wZS5oYW5kbGVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUuaGFuZGxlc1swXS5hZGRDbGFzcygnaWJ6LXJhbmdlLXNsaWRlci1kaXNwbGF5Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NvcGUuZHVhbCkgc2NvcGUuaGFuZGxlc1sxXS5hZGRDbGFzcygnaWJ6LXJhbmdlLXNsaWRlci1kaXNwbGF5Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLmRpc3BsYXlzID0gIFskZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQgKGF0dHJzLmRpc3BsYXlUYXJnZXQpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Ugc2NvcGUuZGlzcGxheXM9W107XG5cbiAgICAgICAgICAgIC8vIGV4dHJhY3QgaW5pdGlhbCB2YWx1ZXMgZnJvbSBhdHRycyBhbmQgcGFyc2UgaW50byBpbnRcbiAgICAgICAgICAgIGlmICghYXR0cnMuaW5pdGlhbCkge1xuICAgICAgICAgICAgICAgIHNjb3BlLmluaXRpYWwgID0gW3Njb3BlLm5nTW9kZWwsIHNjb3BlLm5nTW9kZWxdOyAvLyBpbml0aWFsaXplIHRvIG1vZGVsIHZhbHVlc1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgaW5pdGlhbCAgPSBhdHRycy5pbml0aWFsLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICAgICAgc2NvcGUuaW5pdGlhbCA9IFtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFswXSAhPT0gdW5kZWZpbmVkID8gcGFyc2VJbnQgKGluaXRpYWxbMF0pIDogc2NvcGUubm90TGVzcyxcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFsxXSAhPT0gdW5kZWZpbmVkID8gcGFyc2VJbnQgKGluaXRpYWxbMV0pIDogc2NvcGUubm90TW9yZVxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE1vbml0b3IgYW55IGNoYW5nZXMgb24gc3RhcnQvc3RvcCBkYXRlcy5cbiAgICAgICAgICAgIHNjb3BlLiR3YXRjaCgnc3RhcnRBdCcsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGlmIChzY29wZS52YWx1ZSA8IHNjb3BlLnN0YXJ0QXQgKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vc2NvcGUuc2V0VmFsdWUgKHNjb3BlLnN0YXJ0QXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc2NvcGUuc3RhcnRBdCkgc2NvcGUuc2V0U3RhcnQgKHNjb3BlLnN0YXJ0QXQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHNjb3BlLiR3YXRjaCgnc3RvcEF0JyAsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGlmIChzY29wZS52YWx1ZSA+IHNjb3BlLnN0b3BBdCkge1xuICAgICAgICAgICAgICAgICAgICAvL3Njb3BlLnNldFZhbHVlIChzY29wZS5zdG9wQXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc2NvcGUuc3RvcEF0KSBzY29wZS5zZXRTdG9wIChzY29wZS5zdG9wQXQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIGZpbmlzaCB3aWRnZXQgaW5pdGlhbGlzYXRpb25cbiAgICAgICAgICAgIHNjb3BlLmluaXRpYWxTZXR0aW5ncyAoc2NvcGUuaW5pdGlhbCk7XG5cbiAgICAgICAgfTtcblxuICAgICAgICBzY29wZS5pbml0KCk7XG4gICAgICAgIFxuICAgICAgICAgLy8gc2xpZGVyIGlzIHJlYWR5IHByb3ZpZGUgY29udHJvbCBoYW5kbGUgdG8gYXBwbGljYXRpb24gY29udHJvbGxlclxuICAgICAgICBzY29wZS4kd2F0Y2ggKCdpbml0aG9vaycsIGZ1bmN0aW9uICgpIHsgICAgICAgICAvLyBpbml0IFZhbHVlcyBtYXkgYXJyaXZlIGxhdGVcbiAgICAgICAgICAgIGlmIChzY29wZS5pbml0aG9vaykgc2NvcGUuaW5pdGhvb2sgKHNjb3BlLmN0cmxoYW5kbGUpO1xuICAgICAgICB9KTtcblxuICAgICAgICBzY29wZS4kd2F0Y2ggKCdpbml0dmFsdWVzJywgZnVuY3Rpb24gKCkgeyBcdC8vIGluaXQgVmFsdWVzIG1heSBhcnJpdmUgbGF0ZVxuICAgICAgICAgICAgaWYgKHNjb3BlLmluaXR2YWx1ZXMpIHNjb3BlLmluaXRXaWRnZXQoc2NvcGUuaW5pdHZhbHVlcyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIHR3by13YXkgYmluZGluZyBpZiBtb2RlbCB2YWx1ZSBjaGFuZ2VzXG4gICAgICAgIHNjb3BlLiR3YXRjaCAoJ25nTW9kZWwnLCBmdW5jdGlvbiAobmV3VmFsdWUpIHtcbiAgICAgICAgICBzY29wZS5zZXRWYWx1ZShuZXdWYWx1ZSwgMCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxucmV0dXJuIHtcbiAgICByZXN0cmljdDogXCJFXCIsICAgIC8vIHJlc3RyaWN0IHRvIDxyYW5nZS1zbGlkZXI+IEhUTUwgZWxlbWVudCBuYW1lXG4gICAgc2NvcGU6IHtcbiAgICAgICAgc3RhcnRBdCAgOic9JywgIC8vIEZpcnN0IGFjY2VwdGFibGUgZGF0ZVxuICAgICAgICBzdG9wQXQgICA6Jz0nLCAgLy8gTGFzdCBhY2NlcHRhYmxlIGRhdGVcbiAgICAgICAgY2FsbGJhY2sgOic9JywgIC8vIENhbGxiYWNrIHRvIGFjdGlmIHdoZW4gYSBkYXRlIGlzIHNlbGVjdGVkXG4gICAgICAgIGZvcm1hdHRlcjonPScsICAvLyBDYWxsYmFjayBmb3IgZHJhZyBldmVudCBjYWxsIGVhY2ggdGltZSBpbnRlcm5hbCB2YWx1ZSBjaGFuZ2VzXG4gICAgICAgIGluaXRob29rIDonPScsICAvLyBIb29rIHBvaW50IHRvIGNvbnRyb2wgc2xpZGVyIGZyb20gQVBJXG4gICAgICAgIGNiaGFuZGxlIDonPScsICAvLyBBcmd1bWVudCBhZGRlZCB0byBldmVyeSBjYWxsYmFja1xuICAgICAgICBpbml0dmFsdWVzOic9JywgICAvLyBJbml0aWFsIHZhbHVlcyBhcyBhIHNpbmdsZSBvYmplY3RcbiAgICAgICAgbmdNb2RlbDogJz0nICAgIC8vIHRoZSBtb2RlbCB2YWx1ZVxuICAgIH0sXG4gICAgcmVxdWlyZTogJz9uZ01vZGVsJyxcbiAgICB0ZW1wbGF0ZTogdGVtcGxhdGUsIC8vIGh0bWwgdGVtcGxhdGUgaXMgYnVpbGQgZnJvbSBKU1xuICAgIHJlcGxhY2U6IHRydWUsICAgICAgLy8gcmVwbGFjZSBjdXJyZW50IGRpcmVjdGl2ZSB3aXRoIHRlbXBsYXRlIHdoaWxlIGluaGVyaXRpbmcgb2YgY2xhc3NcbiAgICBsaW5rOiBsaW5rICAgICAgICAgIC8vIHBpY2thZGF0ZSBvYmplY3QncyBtZXRob2RzXG59O1xufV0pO1xuXG5jb25zb2xlLmxvZyAoXCJSYW5nZVNsaWRlciBMb2FkZWRcIik7XG5cbn0pKCk7IiwiLypcbiBhbHNhLWdhdGV3YXkgLS0gcHJvdmlkZSBhIFJFU1QvSFRUUCBpbnRlcmZhY2UgdG8gQUxTQS1NaXhlclxuXG4gQ29weXJpZ2h0IChDKSAyMDE1LCBGdWx1cCBBciBGb2xsXG5cbiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3JcbiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuXG4gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cblxuIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gYWxvbmcgd2l0aCBzY29wZSBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlXG4gRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuXG5cbiBSZWZlcmVuY2VzOlxuXG4gKi9cblxuKGZ1bmN0aW9uICgpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgdGVtcGxhdGUgPVxuICAgICAgICAgICc8ZGl2IGNsYXNzPVwiYWZiLW1vbml0b3JcIiBuZy1jbGljaz1cImdldHBpbmcoKVwiPicgK1xuICAgICAgICAgJzxzcGFuIGNsYXNzPVwiYWZiLXJlZnJlc2gtdG9rZW5cIiAgPmFmYjovL3t7aG9zdG5hbWV9fTp7e2h0dHBkcG9ydH19PC9zcGFuPicgK1xuICAgICAgICAgJzxpIGNsYXNzPVwie3tpY29ufX1cIj48L2k+JyArXG4gICAgICAgICAnPC9kaXY+JztcblxuXG4vLyBzY29wZSBtb2R1bGUgaXMgbG9hZCBzdGF0aWNhbGx5IGJlZm9yZSBhbnkgcm91dGUgaXMgY2F0aXZhdGVkXG5hbmd1bGFyLm1vZHVsZSgnVG9rZW5SZWZyZXNoJywgWydBcHBDb25maWcnLCAnTW9kYWxOb3RpZmljYXRpb24nXSlcblxuICAgIC5kaXJlY3RpdmUgKCd0b2tlblJlZnJlc2gnLCBbXCIkdGltZW91dFwiLCBcIiRodHRwXCIsIFwiJGxvY2F0aW9uXCIsIFwiTm90aWZpY2F0aW9uXCIsIFwiQXBwQ29uZmlnXCIsIGZ1bmN0aW9uKCR0aW1lb3V0LCAkaHR0cCwgJGxvY2F0aW9uLCBOb3RpZmljYXRpb24sIEFwcENvbmZpZykge1xuXG4gICAgZnVuY3Rpb24gbXltZXRob2RzKHNjb3BlLCBlbGVtLCBhdHRycykge1xuICAgICAgICBzY29wZS5zdGF0dXM9dW5kZWZpbmVkOyAvLyBuZWl0aGVyIHRodSBuZWl0aGVyIGZhbHNlXG4gICAgICAgIFxuICAgIFxuICAgICAgICBzY29wZS5vbmxpbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBlbGVtLmFkZENsYXNzICAgIChcIm9ubGluZVwiKTtcbiAgICAgICAgICAgIGVsZW0ucmVtb3ZlQ2xhc3MgKFwib2ZmbGluZVwiKTtcbiAgICAgICAgfTtcblxuICAgICAgICBzY29wZS5vZmZsaW5lID0gZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIGVsZW0uYWRkQ2xhc3MgICAgKFwib2ZmbGluZVwiKTtcbiAgICAgICAgICAgIGVsZW0ucmVtb3ZlQ2xhc3MgKFwib25saW5lXCIpO1xuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgc2NvcGUub25lcnJvciA9IGZ1bmN0aW9uKGRhdGEsIGVycmNvZGUsIGhlYWRlcnMpIHtcbiAgICAgICAgICAgIGlmIChzY29wZS5zdGF0dXMgIT09IGZhbHNlKSAge1xuICAgICAgICAgICAgICAgIE5vdGlmaWNhdGlvbi53YXJuaW5nICh7bWVzc2FnZTogXCJBcHBGcmFtZXdvcmsgQmluZGVyIExvc3RcIiwgZGVsYXk6IDUwMDB9KTtcbiAgICAgICAgICAgICAgICBzY29wZS5vZmZsaW5lKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzY29wZS5zdGF0dXMgPSAwO1xuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgc2NvcGUub25zdWNjZXNzID0gZnVuY3Rpb24oZGF0YSwgZXJyY29kZSwgaGVhZGVycywgY29uZmlnKSB7XG4gICAgICAgICAgICBpZiAoc2NvcGUuc3RhdHVzICE9PSB0cnVlKSAge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLnJlcXVlc3QudG9rZW4pIEFwcENvbmZpZy5zZXNzaW9uLnRva2VuID0gZGF0YS5yZXF1ZXN0LnRva2VuO1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLnJlcXVlc3QudXVpZCkgIEFwcENvbmZpZy5zZXNzaW9uLnV1aWQgID0gZGF0YS5yZXF1ZXN0LnV1aWQ7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEucmVxdWVzdC50aW1lb3V0KSAgQXBwQ29uZmlnLnNlc3Npb24udGltZW91dCAgPSBkYXRhLnJlcXVlc3QudGltZW91dDtcblxuICAgICAgICAgICAgICAgIE5vdGlmaWNhdGlvbi5zdWNjZXNzICh7bWVzc2FnZTogXCJBcHBGcmFtZXdvcmsgQmluZGVyIEJhY2sgdG8gTGl2ZVwiLCBkZWxheTogMzAwMH0pO1xuICAgICAgICAgICAgICAgIHNjb3BlLm9ubGluZSgpO1xuICAgICAgICAgICAgICAgIGlmIChzY29wZS5jYWxsYmFjaykgc2NvcGUuY2FsbGJhY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNjb3BlLnN0YXR1cyA9IDE7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gQ2hlY2sgQmluZGVyIHN0YXR1c1xuICAgICAgICBzY29wZS5nZXRwaW5nID0gZnVuY3Rpb24oKSB7XG5cbiAgICAgICAgICAgIHZhciBoYW5kbGVyID0gJGh0dHAuZ2V0KEFwcENvbmZpZy5zZXNzaW9uLnBpbmcrJz90b2tlbj0nKyBBcHBDb25maWcuc2Vzc2lvbi50b2tlbik7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIHByb2Nlc3Mgc3VjY2VzcyBhbmQgZXJyb3JcbiAgICAgICAgICAgIGhhbmRsZXIuc3VjY2VzcyhzY29wZS5vbnN1Y2Nlc3MpO1xuICAgICAgICAgICAgaGFuZGxlci5lcnJvcihzY29wZS5vbmVycm9yKTtcblxuICAgICAgICAgICAgLy8gcmVzdGFydCBhIG5ldyB0aW1lciBmb3IgbmV4dCBwaW5nXG4gICAgICAgICAgICAkdGltZW91dCAoc2NvcGUuZ2V0cGluZywgQXBwQ29uZmlnLnNlc3Npb24ucGluZ3JhdGUqMTAwMCk7XG4gICAgICAgIH07XG4gICAgICAgIFxuICAgICAgICAvLyBDaGVjayBCaW5kZXIgc3RhdHVzXG4gICAgICAgIHNjb3BlLnJlZnJlc2ggPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBoYW5kbGVyID0gJGh0dHAuZ2V0KEFwcENvbmZpZy5zZXNzaW9uLnJlZnJlc2grJz90b2tlbj0nKyBBcHBDb25maWcuc2Vzc2lvbi50b2tlbik7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIHByb2Nlc3Mgc3VjY2VzcyBhbmQgZXJyb3JcbiAgICAgICAgICAgIGhhbmRsZXIuc3VjY2VzcyhzY29wZS5vbnN1Y2Nlc3MpO1xuICAgICAgICAgICAgaGFuZGxlci5lcnJvcihzY29wZS5vbmVycm9yKTtcbiAgICAgICAgICAgIC8vIHJlc3RhcnQgYSBuZXcgdGltZXIgZm9yIG5leHQgcmVmcmVzaCB0byAxLzQgb2YgdGltZW91dCBzZXNzaW9uXG4gICAgICAgICAgICAkdGltZW91dCAoc2NvcGUucmVmcmVzaCwgQXBwQ29uZmlnLnNlc3Npb24udGltZW91dCAqMjUwKTtcbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgICAgIC8vIEluaXRpYWwgY29ubmVjdGlvblxuICAgICAgICBzY29wZS50a2NyZWF0ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGhhbmRsZXIgPSAkaHR0cC5nZXQoQXBwQ29uZmlnLnNlc3Npb24uY3JlYXRlKyc/dG9rZW49JysgQXBwQ29uZmlnLnNlc3Npb24uaW5pdGlhbCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIHByb2Nlc3Mgc3VjY2VzcyBhbmQgZXJyb3JcbiAgICAgICAgICAgIGhhbmRsZXIuc3VjY2VzcyhzY29wZS5vbnN1Y2Nlc3MpO1xuICAgICAgICAgICAgaGFuZGxlci5lcnJvcihzY29wZS5vbmVycm9yKTtcbiAgICAgICAgfTtcbiBcbiAgICAgICAgc2NvcGUuaWNvbiAgICAgID0gYXR0cnMuaWNvbiAgIHx8IFwiZmktbGlnaHRidWxiXCI7XG4gICAgICAgIHNjb3BlLmhvc3RuYW1lICA9ICRsb2NhdGlvbi5ob3N0KCk7XG4gICAgICAgIHNjb3BlLmh0dHBkcG9ydCA9ICRsb2NhdGlvbi5wb3J0KCk7XG4gICAgICAgIHNjb3BlLmF1dG9sb2cgICA9IEpTT04ucGFyc2UoYXR0cnMuYXV0b2xvZyB8fCBmYWxzZSk7XG4gICAgICAgIFxuICAgICAgICBpZiAoc2NvcGUuYXV0b2xvZykgc2NvcGUudGtjcmVhdGUoKTtcblxuICAgICAgICAvLyBJbml0IHBpbmcgYW5kIHJlZnJlc2ggcHJvY2Vzc1xuICAgICAgICAkdGltZW91dCAoc2NvcGUuZ2V0cGluZywgQXBwQ29uZmlnLnNlc3Npb24ucGluZ3JhdGUqMTAwMCk7XG4gICAgICAgICR0aW1lb3V0IChzY29wZS5yZWZyZXNoLCBBcHBDb25maWcuc2Vzc2lvbi50aW1lb3V0ICoyNTApO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIHRlbXBsYXRlOiB0ZW1wbGF0ZSxcbiAgICAgICAgc2NvcGU6IHtcbiAgICAgICAgICAgIGNhbGxiYWNrIDogXCI9XCJcbiAgICAgICAgfSxcbiAgICAgICAgcmVzdHJpY3Q6ICdFJyxcbiAgICAgICAgbGluazogbXltZXRob2RzXG4gICAgfTtcbn1dKTtcblxufSkoKTtcbmNvbnNvbGUubG9nIChcIlRva2VuIFJlZnJlc2ggTG9hZGVkXCIpO1xuXG4iLCIvKiBcbiAqIENvcHlyaWdodCAoQykgMjAxNSBcIklvVC5iemhcIlxuICogQXV0aG9yIFwiRnVsdXAgQXIgRm9sbFwiXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiAqIFxuICogQnVnczogSW5wdXQgd2l0aCBDYWxsYmFjayBTSE9VTEQgQkUgZ2V0ICdyZXF1aXJlZCcgY2xhc3NcbiAqIFxuICogcmVmOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9FdmVudHMvbW91c2VvdmVyXG4gKiBcbiAqIHVzYWdlOiBcbiAqIFxuICogdGlwTW9kYWw6IGxpc3RlbiBldmVudCBmcm9tIGVsZW0ucGFyZW50KCkgdG8gZGlzcGxheSB0aXAtbW9kYWxcbiAqICAgICAgPGRpdiBjbGFzcz1cInh4eHhcIj5cbiAqICAgICAgICAgIDx0aXAtbW9kYWwgdGlwPXh4eHg+PC90aXAtbW9kYWw+XG4gKiAgICAgICAgICA8aW5wdXQtdGV4dCAuLi4uPjwvaW5wdXQtdGV4dD5cbiAqICAgICAgPC9kaXY+XG4gKiAgICAgIFxuICogTm90ZTogdXNlIENTUy52aXNpYmlsaXR5IHRvIGF2b2lkIGRpc3BsYXkgZmxpY2tlcmluZyBhdCBpbml0aWFsIGRpc3BsYXkuXG4gKi9cblxuKGZ1bmN0aW9uICgpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgdG1wbCA9ICc8ZGl2IGNsYXNzPVwidGlwLW1vZGFsLXBvcHVwXCI+JyArXG4gICAgICAgICAgICAnPGkgY2xhc3M9XCJ7e2ljb259fVwiPjwvaT4nICtcbiAgICAgICAgICAgICc8c3Bhbj57e3RpcH19PC9zcGFuPicgK1xuICAgICAgICAgICAgJzwvc3Bhbj48L2Rpdj4nIDtcblxuICAgIGFuZ3VsYXIubW9kdWxlKCdNb2RhbE5vdGlmaWNhdGlvbicsIFtdKVxuICAgICAgICAgICAgLmRpcmVjdGl2ZSgndGlwTW9kYWwnLCBbXCIkdGltZW91dFwiLCBmdW5jdGlvbiAoJHRpbWVvdXQpIHtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIG15bWV0aG9kcyhzY29wZSwgZWxlbSwgYXR0cnMpIHtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUucGFyZW50ID0gZWxlbS5wYXJlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUubW9kYWwgICAgPSBlbGVtLmZpbmQoXCJkaXZcIik7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgIFxuICAgICAgICAgICAgICAgICAgICAvLyBkZWxheSB0aXAgZGlzcGxheSB0byBhdm9pZCBibGlua2luZyB3aGVuIG1vdmluZyBtb3VzZSBmYXN0XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRpc3BsYXkgKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gYWN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NvcGUuc2hvdykgc2NvcGUubW9kYWwuY3NzKHtvcGFjaXR5OiAxLCB2aXNpYmlsaXR5Oid2aXNpYmxlJ30pOyAgXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5zaG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLnRpbWVvdXQgPSAkdGltZW91dChhY3Rpb24sIHNjb3BlLmRlbGF5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gY2xvc2UgKCkge1xuICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLnNob3cgPSBmYWxzZTsgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICBzY29wZS5tb2RhbC5jc3Moe29wYWNpdHk6IDAsIHZpc2liaWxpdHk6J2hpZGRlbid9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBcblxuICAgICAgICAgICAgICAgICAgICAvLyBhanVzdCBpY29uIG9yIHVzZSBkZWZhdWx0XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLmljb24gID0gYXR0cnMuaWNvbiB8fCAnZmktbGlnaHRidWxiJztcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBQYXJlbnQgZWxlbWVudCB0byBnZXQgbW91c2UgZXZlbnRcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUucGFyZW50LmFkZENsYXNzICgnYXMtbW9kYWwtdGlwJyk7XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLnBhcmVudC5iaW5kKCdjbGljaycsIGNsb3NlKTtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUucGFyZW50LmJpbmQoJ2ZvY3VzJywgZGlzcGxheSk7XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLnBhcmVudC5iaW5kKCdtb3VzZW92ZXInLCBkaXNwbGF5KTtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUucGFyZW50LmJpbmQoJ21vdXNlbGVhdmUnLCBjbG9zZSk7XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLnBhcmVudC5iaW5kKCdibHVyJywgY2xvc2UpO1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUuZGVsYXkgPSBhdHRycy5kZWxheSB8fCAxMDAwOyAvLyB3YWl0IDFzIGJlZm9yZSBkaXNwbGF5aW5nIHRpcFxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3RyaWN0OiAnRScsXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlOiB0bXBsLFxuICAgICAgICAgICAgICAgICAgICBsaW5rOiBteW1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIHNjb3BlOiB7dGlwOiBcIj1cIn0gLy8gdGlwIG1heSBub3QgYmUgZGVmaW5lZCB3aGVuIHdpZGdldCBpcyBkaXNwbGF5XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1dKTtcbn0pKCk7XG4iLCIvKiBcbiAqIENvcHlyaWdodCAoQykgMjAxNSBcIklvVC5iemhcIlxuICogQXV0aG9yIFwiRnVsdXAgQXIgRm9sbFwiXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCxcbiAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlXG4gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlXG4gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi5cbiAqIFxuICogQnVnczogSW5wdXQgd2l0aCBDYWxsYmFjayBTSE9VTEQgQkUgZ2V0ICdyZXF1aXJlZCcgY2xhc3NcbiAqL1xuXG4oZnVuY3Rpb24gKCkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciB0bXBsID0gJzxzcGFuIHRpdGxlPVwiR290bzoge3tocmVmfX1cIiBuZy1jbGljaz1cImNsaWNrZWQoKVwiPicgK1xuICAgICAgICAgICAgJzxpIGNsYXNzPVwie3tpY29ufX1cIj48L2k+JyArXG4gICAgICAgICAgICAnPHNwYW4+e3tsYWJlbH19PC9zcGFuPicgK1xuICAgICAgICAgICAgJzwvc3Bhbj4nO1xuXG5cbiAgICBhbmd1bGFyLm1vZHVsZSgnTGlua0J1dHRvbicsIFtdKVxuICAgICAgICAgICAgLmRpcmVjdGl2ZSgnbGlua0J1dHRvbicsIFtcIiRsb2NhdGlvblwiLCBmdW5jdGlvbiAoJGxvY2F0aW9uKSB7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gbXltZXRob2RzKHNjb3BlLCBlbGVtLCBhdHRycykge1xuXG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLmNsaWNrZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXR0cnMucXVlcnkpICRsb2NhdGlvbi5wYXRoKGF0dHJzLmhyZWYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSAkbG9jYXRpb24ucGF0aChhdHRycy5ocmVmKS5zZWFyY2goYXR0cnMucXVlcnkpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIGFqdXN0IGljb24gb3IgdXNlIGRlZmF1bHRcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUuaWNvbiA9IGF0dHJzLmljb24gICB8fCAnZmktbGluayc7XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLmxhYmVsID0gYXR0cnMubGFiZWwgfHwgJ0p1bXAnO1xuICAgICAgICAgICAgICAgICAgICBzY29wZS5ocmVmICA9IGF0dHJzLmhyZWYgIHx8ICcvaG9tZSc7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAvLyBhZGQgbGFiZWwgYXMgY2xhc3NcbiAgICAgICAgICAgICAgICAgICAgZWxlbS5hZGRDbGFzcyAoc2NvcGUubGFiZWwudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdHJpY3Q6ICdFJyxcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGU6IHRtcGwsXG4gICAgICAgICAgICAgICAgICAgIGxpbms6IG15bWV0aG9kcyxcbiAgICAgICAgICAgICAgICAgICAgc2NvcGU6IHt9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1dKTtcbn0pKCk7XG4iLCJcbi8qIFxuICogQ29weXJpZ2h0IChDKSAyMDE1IFwiSW9ULmJ6aFwiXG4gKiBBdXRob3IgXCJGdWx1cCBBciBGb2xsXCJcbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuLlxuICogXG4gKiBSZWZlcmVuY2U6XG4gKiAgIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL2RvY3MvV2ViL0FQSS9GaWxlUmVhZGVyIFxuICogICBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1VzaW5nX2ZpbGVzX2Zyb21fd2ViX2FwcGxpY2F0aW9ucyNVc2luZ19oaWRkZW5fZmlsZV9pbnB1dF9lbGVtZW50c191c2luZ190aGVfY2xpY2slMjglMjlfbWV0aG9kXG4gKiAgIGh0dHBzOi8vdW5jb3JrZWRzdHVkaW9zLmNvbS9ibG9nL211bHRpcGFydGZvcm1kYXRhLWZpbGUtdXBsb2FkLXdpdGgtYW5ndWxhcmpzXG4gKiAgIGh0dHBzOi8vd3d3LnRlcmxpY2kuY29tLzIwMTUvMDUvMTYvdXBsb2FkaW5nLWZpbGVzLWxvY2FsbHkuaHRtbFxuICogICBodHRwczovL2dpdGh1Yi5jb20vbmVydmdoL2FuZ3VsYXItZmlsZS11cGxvYWQvYmxvYi9tYXN0ZXIvc3JjL3NlcnZpY2VzL0ZpbGVVcGxvYWRlci5qc1xuICogICBodHRwczovL3N0dWsuZ2l0aHViLmlvL2pzemlwL2RvY3VtZW50YXRpb24vaG93dG8vcmVhZF96aXAuaHRtbFxuICogICBodHRwOi8vb25laHVuZ3J5bWluZC5jb20vemlwLXBhcnNpbmctanN6aXAtYW5ndWxhci9cbiAqICAgaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNTM0MTkxMi9ob3ctdG8tZ28tZnJvbS1ibG9iLXRvLWFycmF5YnVmZmVyXG4gKiAgIFxuICogICBCdWdzOiB6aXAgZmlsZSBzZW50IGV2ZW4gd2hlbiBmbGFnIGFzIGludmFsaWQgXG4gKi9cblxuIFxuXG4oZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbnZhciB0bXBsQXBwbGkgPSAnPGlucHV0IHR5cGU9XCJmaWxlXCIgbmFtZT1cInt7bmFtZX19LWlucHV0XCIgb25jaGFuZ2U9XCJhbmd1bGFyLmVsZW1lbnQodGhpcykuc2NvcGUoKS5VcExvYWRGaWxlKHRoaXMuZmlsZXMpXCIgYWNjZXB0PVwie3ttaW1ldHlwZX19XCIgc3R5bGU9XCJkaXNwbGF5Om5vbmVcIj4nK1xuICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJ1cGxvYWQtZmlsZVwiIG5nLWNsaWNrPVwiaW1nQ2xpY2tlZCgpXCI+JyArXG4gICAgICAgICAgICAnPGkgY2xhc3M9XCJ7e2ljb259fVwiPjwvaT4gPHNwYW4+e3tsYWJlbH19PC9zcGFuPicgK1xuICAgICAgICAgICAgJzxyYW5nZS1zbGlkZXIgbmctc2hvdz1cIiFub3NsaWRlclwiIGlkPVwie3tuYW1lfX0tc2xpZGVyXCIgYXV0b21hdGljPXRydWUgaW5pdGhvb2s9XCJTbGlkZXJJbml0Q0JcIj48L3JhbmdlLXNsaWRlcj4nICtcbiAgICAgICAgICAgICc8L2Rpdj4nO1xuICAgIFxudmFyIHRtcGxNb2RhbCA9ICc8c3BhbiBjbGFzcz1cIm1vZGFsLXRleHRcIj5VcGxvYWQgQXBwbGljYXRpb24gPGI+e3thcHBuYW1lfX08L2I+ID88L3NwYW4+JyArXG4gICAgICAgICAgICAnPGRpdj4nK1xuICAgICAgICAgICAgJzxpbWcgbmctc3JjPVwie3tpY29ufX1cIj4nICtcbiAgICAgICAgICAgICc8c3VibWl0LWJ1dHRvbiBpY29uPVwiZmkteFwiIGxhYmVsPVwiQ2FuY2VsXCIgY2xpY2tlZD1cImFiYW5kb25cIj48L3N1Ym1pdC1idXR0b24+JytcbiAgICAgICAgICAgICc8c3VibWl0LWJ1dHRvbiBpY29uPVwiZmktbGlrZVwiIGxhYmVsPVwiSW5zdGFsbFwiIGNsaWNrZWQ9XCJzdWNjZXNzXCI+PC9zdWJtaXQtYnV0dG9uPiAnICtcbiAgICAgICAgICAgICc8L2Rpdj4nO1xuICAgIFxudmFyIHRtcGxFcnJvciA9ICc8c3BhbiBjbGFzcz1cIm1vZGFsLXRleHRcIj5JbnZhbGlkIEFwcGxpY2F0aW9uIDxiPnt7YXBwbmFtZX19PC9iPiA/PC9zcGFuPicgK1xuICAgICAgICAgICAgJzxkaXY+JytcbiAgICAgICAgICAgICc8aW1nIG5nLXNyYz1cInt7aWNvbn19XCI+JyArXG4gICAgICAgICAgICAnPHN1Ym1pdC1idXR0b24gaWNvbj1cImZpLXhcIiBsYWJlbD1cIkNsb3NlXCIgY2xpY2tlZD1cImFiYW5kb25cIj48L3N1Ym1pdC1idXR0b24+JytcbiAgICAgICAgICAgICc8L2Rpdj4nO1xuICAgIFxuXG4vLyBTZXJ2aWNlIENyZWF0ZSB4Zm9ybSBpbnNlcnQgZmlsZXMgaW4gYW5kIFBvc3QgaXQgdG8gdXJsXG5mdW5jdGlvbiBMb2FkRmlsZVN2YyAoc2NvcGUsIGZpbGVzLCBmaWxlQ0IpIHtcbiAgICB2YXIgeG1sUmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgdmFyIHhmb3JtICA9IG5ldyBGb3JtRGF0YSgpO1xuICAgIFxuICAgIC8vIFVwZGF0ZSBzbGlkZXIgZHVyaW5nIFVwbG9hZFxuICAgIHhtbFJlcS51cGxvYWQub25wcm9ncmVzcyA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICB2YXIgcHJvZ3Jlc3MgPSBNYXRoLnJvdW5kKGV2ZW50Lmxlbmd0aENvbXB1dGFibGUgPyBldmVudC5sb2FkZWQgKiAxMDAgLyBldmVudC50b3RhbCA6IDApO1xuICAgICAgICBpZiAoc2NvcGUuc2xpZGVyKSBzY29wZS5zbGlkZXIuc2V0VmFsdWUgKHByb2dyZXNzKTtcbiAgICB9O1xuXG4gICAgLy8gVXBsb2FkIGlzIGZpbmlzaCBsZXQncyBub3RpZnkgY29udHJvbGVyIGNhbGxiYWNrXG4gICAgeG1sUmVxLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2NvcGUuZGl2RWxlbS5hZGRDbGFzcyAoXCJzdWNjZXNzXCIpO1xuICAgICAgICBzY29wZS5kaXZFbGVtLnJlbW92ZUNsYXNzIChcImVycm9yXCIpO1xuICAgICAgICB2YXIgcmVzcG9uc2UgPXtcbiAgICAgICAgICAgIHN0YXR1cyA6IHhtbFJlcS5zdGF0dXMsXG4gICAgICAgICAgICBoZWFkZXJzOiB4bWxSZXEuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkgXG4gICAgICAgIH07XG4gICAgICAgIHNjb3BlLmNhbGxiYWNrIChyZXNwb25zZSk7XG4gICAgfTtcblxuICAgIHhtbFJlcS5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBzY29wZS5kaXZFbGVtLmFkZENsYXNzIChcImVycm9yXCIpO1xuICAgICAgICBzY29wZS5kaXZFbGVtLnJlbW92ZUNsYXNzIChcInN1Y2Nlc3NcIik7XG4gICAgfTtcblxuICAgIHhtbFJlcS5vbmFib3J0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBzY29wZS5kaXZFbGVtLmFkZENsYXNzIChcImVycm9yXCIpO1xuICAgICAgICBzY29wZS5kaXZFbGVtLnJlbW92ZUNsYXNzIChcInN1Y2Nlc3NcIik7XG4gICAgICAgIHZhciByZXNwb25zZSA9e1xuICAgICAgICAgICAgc3RhdHVzIDogeG1sUmVxLnN0YXR1cyxcbiAgICAgICAgICAgIGhlYWRlcnM6IHhtbFJlcS5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSBcbiAgICAgICAgfTtcbiAgICAgICAgc2NvcGUuY2FsbGJhY2sgKHJlc3BvbnNlKTtcbiAgICB9O1xuICAgIFxuICAgIHRoaXMucG9zdGZpbGUgPSBmdW5jdGlvbihwb3N0dXJsKSB7IFxuICAgICAgICAvLyBldmVyeXRoaW5nIGxvb2tzIE9LIGxldCdzIFBvc3QgaXRcbiAgICAgICAgeG1sUmVxLm9wZW4oXCJQT1NUXCIsIHBvc3R1cmwgLCB0cnVlKTtcbiAgICAgICAgeG1sUmVxLnNlbmQoeGZvcm0pO1xuICAgIH07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpbGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRoaXMuZmlsZSA9IGZpbGVzW2ldO1xuICAgICAgICAvLyBVbmtub3cgVHlwZSAhISEgaWYgKCF0aGlzLmZpbGUudHlwZS5tYXRjaChzY29wZS5taW1ldHlwZSkpIGNvbnRpbnVlO1xuXG4gICAgICAgIGNvbnNvbGUubG9nIChcIlNlbGVjdGVkIGZpbGU9XCIgKyB0aGlzLmZpbGUubmFtZSArIFwiIHNpemU9XCIrIHRoaXMuZmlsZS5zaXplLzEwMjQgKyBcIiBUeXBlPVwiKyB0aGlzLmZpbGUudHlwZSk7XG4gICAgICAgIFxuICAgICAgICB0aGlzLmJhc2VuYW1lPSB0aGlzLmZpbGUubmFtZS5zcGxpdCgnLycpLnJldmVyc2UoKVswXTtcblxuICAgICAgICAvLyBGaWxlIHRvIHVwbG9hZCBpcyB0b28gYmlnXG4gICAgICAgIGlmIChpc05hTih0aGlzLmZpbGUuc2l6ZSkgfHwgdGhpcy5maWxlLnNpemUgPiBzY29wZS5tYXhzaXplKjEwMjQpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQgKGZpbGVDQiwxMDApOyAgLy8gT24gZXJyb3IgYXN5bmNocm9ub3VzIGNhbGxiYWNrIHdpdGhvdXQgYXJndW1lbnRcbiAgICAgICAgICAgIFxuICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICAvLyBJZiBGaWxlIGlzIHJlYWRhYmxlIGxldCdzIHJlYWQgaXRcbiAgICAgICAgICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICAgICAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKHRoaXMuZmlsZSk7XG4gICAgICAgICAgICByZWFkZXIub25sb2FkID0gZmlsZUNCO1xuXG4gICAgICAgICAgICAvLyBpZiBldmVyeXRoaW5nIGlzIE9LIGxldCdzIGFkZCBmaWxlIHRvIHhmb3JtXG4gICAgICAgICAgICB4Zm9ybS5hcHBlbmQoc2NvcGUubmFtZSwgdGhpcy5maWxlLCB0aGlzLmZpbGUubmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmFuZ3VsYXIubW9kdWxlKCdVcGxvYWRGaWxlcycsWydBcHBDb25maWcnLCAnTW9kYWxOb3RpZmljYXRpb24nLCAnUmFuZ2VTbGlkZXInXSlcblxuLmRpcmVjdGl2ZSgndXBsb2FkQXBwbGknLCBbXCJBcHBDb25maWdcIiwgXCJKUWVtdVwiLCBcIk5vdGlmaWNhdGlvblwiLCBcIk1vZGFsRmFjdG9yeVwiLCBcIiR0aW1lb3V0XCIsIGZ1bmN0aW9uKEFwcENvbmZpZywgIEpRZW11LCBOb3RpZmljYXRpb24sIE1vZGFsRmFjdG9yeSwgJHRpbWVvdXQpIHtcbiAgICBmdW5jdGlvbiBteW1ldGhvZHMoc2NvcGUsIGVsZW0sIGF0dHJzKSB7XG4gICAgICAgIFxuICAgICAgICAvLyBnZXQgd2lkZ2V0IGltYWdlIGhhbmRsZSBmcm9tIHRlbXBsYXRlXG4gICAgICAgIHNjb3BlLmlucHV0RWxlbSAgPSBlbGVtLmZpbmQoJ2lucHV0Jyk7XG4gICAgICAgIHNjb3BlLmRpdkVsZW0gICAgPSBlbGVtLmZpbmQoJ2RpdicpO1xuICAgICAgICBcbiAgICAgICAgLy8gSW1hZ2Ugd2FzIGNraWNrIGxldCdzIHNpbXVsYXRlIGFuIGlucHV0IChmaWxlKSBjbGlja1xuICAgICAgICBzY29wZS5pbWdDbGlja2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2NvcGUuaW5wdXRFbGVtWzBdLmNsaWNrKCk7IC8vIFdhcm5pbmcgQW5ndWxhciBUcmlnZ2VyRXZlbnQgZG9lcyBub3Qgd29yayEhIVxuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgLy8gU2xpZGVyIGNvbnRyb2wgaGFuZGxlIHJlZ2lzdHJhdGlvbiBhZnRlciBjcmVhdGlvblxuICAgICAgICBzY29wZS5TbGlkZXJJbml0Q0I9ZnVuY3Rpb24gKHNsaWRlcikge1xuICAgICAgICAgICBzY29wZS5zbGlkZXI9IHNsaWRlcjsgXG4gICAgICAgIH07XG4gICAgICAgIFxuICAgICAgICAvLyBVcGxvYWQgaXMgZGVsZWdhdGVkIHRvIGEgc2hhcmVkIGZ1bmN0aW9uXG4gICAgICAgIHNjb3BlLlVwTG9hZEZpbGU9ZnVuY3Rpb24gKGZpbGVzKSB7XG4gICAgICAgICAgICB2YXIgaGFuZGxlOyBcbiAgICAgICAgICAgIHZhciBhcHBpY29uO1xuICAgICAgICAgICAgdmFyIHRlbXBsYXRlO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgc3VjY2VzcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIC8vIFRoaXMgTG9va3MgT0sgbGV0J3MgUG9zdCBYZm9ybS9GaWxlXG4gICAgICAgICAgICAgICAgaGFuZGxlLnBvc3RmaWxlKGF0dHJzLnBvc3R1cmwgKyBcIj90b2tlbj1cIiArIEFwcENvbmZpZy5zZXNzaW9uLnRva2VuKTtcblxuICAgICAgICAgICAgICAgIHNjb3BlLm1vZGFsLmRlYWN0aXZhdGUoKTtcbiAgICAgICAgICAgICAgICAkdGltZW91dCAoZnVuY3Rpb24oKSB7c2NvcGUubW9kYWwuZGVzdHJveSgpO30sIDEwMDApO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIGFiYW5kb24gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBzY29wZS5tb2RhbC5kZWFjdGl2YXRlKCk7XG4gICAgICAgICAgICAgICAgJHRpbWVvdXQgKGZ1bmN0aW9uKCkge3Njb3BlLm1vZGFsLmRlc3Ryb3koKTt9LCAxMDAwKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIHJlYWRlckNCID0gZnVuY3Rpb24gKHVwbG9hZCkge1xuICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gRmlsZSB1cGxvYWQgZmFpbCBoYW5kbGUgZXJyb3JcbiAgICAgICAgICAgICAgICBpZiAoISB1cGxvYWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZS5maWxlLnNpemUgPiBzY29wZS5tYXhzaXplKjEwMjQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcGljb24gPSBzY29wZS5pc3Rvb2JpZztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlPSB0bXBsRXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc05hTihoYW5kbGUuZmlsZS5zaXplKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBwaWNvbiA9IHNjb3BlLmlzbm90dmFsaWQ7IFxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGU9IHRtcGxFcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIHppcGFwcCA9IG5ldyBKU1ppcCAodXBsb2FkLnRhcmdldC5yZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdGh1bWJuYWlsID0gemlwYXBwLmZpbGUoXCJpY29uXzEyOC5wbmdcIik7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaXMgd2UgaGF2ZSBhIHRodW1ibmFpbCB3aXRoaW4gbG9hZGVkIFppcGZpbGVcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aHVtYm5haWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nIChcIlRoaXMgaXMgbm90IGEgdmFsaWQgQXBwbGljYXRpb24gRnJhbWV3b3JrIEFQUFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcGljb24gPSBzY29wZS5pc25vdHZhbGlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGU9IHRtcGxFcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy9zY29wZS5pbWdFbGVtWzBdLnNyYyA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFt0aHVtYm5haWwuYXNBcnJheUJ1ZmZlcigpXSwge3R5cGU6IFwiaW1hZ2VcIn0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcGljb24gPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbdGh1bWJuYWlsLmFzQXJyYXlCdWZmZXIoKV0sIHt0eXBlOiBcImltYWdlXCJ9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZSA9IHRtcGxNb2RhbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyByZWZlcmVuY2UgaHR0cDovL2ZvdW5kYXRpb24uenVyYi5jb20vYXBwcy9kb2NzLyMhL2FuZ3VsYXItbW9kdWxlc1xuICAgICAgICAgICAgICAgIHZhciBjb25maWcgPSB7XG4gICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbkluOiAnc2xpZGVJbkZyb21Ub3AnLFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50U2NvcGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgOiBzdWNjZXNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWJhbmRvbiA6IGFiYW5kb24sXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uICAgIDogYXBwaWNvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcG5hbWUgOiBoYW5kbGUuYmFzZW5hbWVcbiAgICAgICAgICAgICAgICAgICAgfSwgdGVtcGxhdGUgOiB0ZW1wbGF0ZVxuICAgICAgICAgICAgICAgIH07IFxuICAgICAgICAgICAgICAgIC8vIFBvcHVwIE1vZGFsIHRvIHJlbmRlciBhcHBsaWNhdGlvbiBkYXRhXG4gICAgICAgICAgICAgICAgc2NvcGUubW9kYWwgPSBuZXcgTW9kYWxGYWN0b3J5KGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgc2NvcGUubW9kYWwuYWN0aXZhdGUgKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBMb2FkIGZpbGUgd2l0aGluIGJyb3dzZXIgYW5kIGlmIE9LIGNhbGwgcmVhZGVyQ0JcbiAgICAgICAgICAgIGhhbmRsZSA9IG5ldyBMb2FkRmlsZVN2YyAoc2NvcGUsIGZpbGVzLCByZWFkZXJDQik7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyAoaGFuZGxlKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBJbml0aWFsbGl6ZSBkZWZhdWx0IHZhbHVlcyBmcm9tIGF0dHJpYnV0ZXMgdmFsdWVzXG4gICAgICAgIHNjb3BlLm5hbWU9IGF0dHJzLm5hbWUgfHwgJ2FwcGxpJztcbiAgICAgICAgc2NvcGUuY2F0ZWdvcnk9IGF0dHJzLmNhdGVnb3J5ICB8fCAnYXBwbGknO1xuICAgICAgICBzY29wZS5taW1ldHlwZT0gKGF0dHJzLmFjY2VwdCB8fCAnLndndCcpO1xuICAgICAgICBzY29wZS5tYXhzaXplID0gYXR0cnMubWF4c2l6ZSB8fCAxMDAwMDA7IC8vIGRlZmF1bHQgbWF4IHNpemUgMTAwTUJcbiAgICAgICAgc2NvcGUucmVnZXhwICA9IG5ldyBSZWdFeHAgKGF0dHJzLmFjY2VwdCsgJy4qJywnaScpO1xuICAgICAgICBzY29wZS5pY29uICAgID0gYXR0cnMuaWNvbiB8fCAnZmktdXBsb2FkJztcbiAgICAgICAgc2NvcGUubGFiZWwgICA9IGF0dHJzLmxhYmVsIHx8ICdVcGxvYWQnO1xuICAgICAgICBcbiAgICAgICAgaWYgKGF0dHJzLnRodW1ibmFpbCkgc2NvcGUuaXNub3R2YWxpZD0gQXBwQ29uZmlnLnBhdGhzW3Njb3BlLmNhdGVnb3J5XSArICBhdHRycy5pc25vdHZhbGlkO1xuICAgICAgICBlbHNlICBzY29wZS5pc25vdHZhbGlkPUFwcENvbmZpZy5wYXRoc1tzY29wZS5jYXRlZ29yeV0gKyAndzNjLXdpZGdldC5wbmcnO1xuXG4gICAgICAgIGlmIChhdHRycy5pc3Rvb2JpZykgc2NvcGUuaXN0b29iaWc9IEFwcENvbmZpZy5wYXRoc1tzY29wZS5jYXRlZ29yeV0gKyAgYXR0cnMuaXN0b29iaWc7XG4gICAgICAgIGVsc2UgIHNjb3BlLmlzdG9vYmlnPUFwcENvbmZpZy5wYXRoc1tzY29wZS5jYXRlZ29yeV0gKyAnaXN0b29iaWcucG5nJztcbiAgICAgICAgc2NvcGUubm9zbGlkZXIgPSBhdHRycy5ub3NsaWRlciB8fCBmYWxzZTtcblxuICAgICAgICBpZiAoIWF0dHJzLnBvc3R1cmwpIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ZpbGUtdXBsb2FkICVzIHBvc3R1cmw9L2FwaS94eHh4L3h4eHggcmVxdWlyZWQnLCBzY29wZS5hdHRycyk7ICAgICAgICAgICAgXG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHJlc3RyaWN0OiAnRScsXG4gICAgICAgIHRlbXBsYXRlOiB0bXBsQXBwbGksXG4gICAgICAgIGxpbms6IG15bWV0aG9kcyxcbiAgICAgICAgc2NvcGU6IHtcbiAgICAgICAgICAgIGNhbGxiYWNrIDogJz0nXG4gICAgICAgIH1cbiAgICB9O1xuICAgIFxufV0pO1xuXG5jb25zb2xlLmxvZyAoXCJVcGxvYWRGaWxlIExvYWRlZFwiKTtcbn0pKCk7XG4iLCJcbi8qIFxuICogQ29weXJpZ2h0IChDKSAyMDE1IFwiSW9ULmJ6aFwiXG4gKiBBdXRob3IgXCJGdWx1cCBBciBGb2xsXCJcbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuLlxuICovXG5cblxuXG4oZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbnZhciB0bXBsID0gJzx0aXAtbW9kYWwgdGlwPVwidGlwXCI+PC90aXAtbW9kYWw+JyArXG4gICAgICAgICAgICc8bGFiZWwgZm9yPVwie3tuYW1lfX0taW50ZXh0XCI+e3tsYWJlbH19IDxpIG5nLXNob3c9XCJyZXF1aXJlZFwiIG5nLWNsaWNrPVwiVG9CZURlZmluZWRcIiAnICtcbiAgICAgICAgICAgJ2NsYXNzPVwicmVxdWlyZWQge3tzdGF0dXN9fSBmaS1jaGVja2JveFwiIHRpdGxlPVwiRnJlZSBWYWx1ZSBCdXQgTWFuZGF0b3J5IEFyZ3VtZW50XCIgYWx0PVwiP1wiPiAmbmJzcDsgPC9pPjwvbGFiZWw+JysgICAgICAgICAgXG4gICAgICAgICAgICc8aW5wdXQgJytcbiAgICAgICAgICAgJyB0eXBlPVwie3t0eXBlfX1cIiBpZD1cInt7bmFtZX19LWludGV4dFwiIHBsYWNlaG9sZGVyPVwie3twbGFjZWhvbGRlcn19XCIgIGNsYXNzPVwic3RhdHVzLXt7c3RhdHVzfX1cIicrXG4gICAgICAgICAgICcgbmctbW9kZWw9XCJ2YWx1ZVwiIG5nLWJsdXI9XCJ2YWxpZGF0ZSgpXCIgbmctZm9jdXM9XCJzZWxlY3RlZCgpXCIgJytcbiAgICAgICAgICAgJyBuZy1tb2RlbC1vcHRpb25zPVwieyB1cGRhdGVPbjogXFwnZGVmYXVsdCBibHVyXFwnLCBkZWJvdW5jZToge2RlZmF1bHQ6IDUwMCwgYmx1cjogMH0gfVwiJyArXG4gICAgICAgICAgICc+PGFsZXJ0IGRhdGEtbmctc2hvdz1cIiF2YWxpZCYmZXJybXNnXCI+e3tlcnJtc2d9fTwvYWxlcnQ+JztcblxudmFyIGVtYWlscGF0ZXJuID0gL14oKFtePD4oKVtcXF1cXC4sOzpcXHNAXFxcIl0rKFxcLltePD4oKVtcXF1cXC4sOzpcXHNAXFxcIl0rKSopfChcXFwiLitcXFwiKSlAKChbXjw+KClbXFxdXFwuLDs6XFxzQFxcXCJdK1xcLikrW148PigpW1xcXVxcLiw7Olxcc0BcXFwiXXsyLH0pJC9pO1xuXG5hbmd1bGFyLm1vZHVsZSgnSW5wdXRUZXh0JyxbJ0pRdWVyeUVtdSddKVxuXG4uZGlyZWN0aXZlKCdpbnB1dFRleHQnLCBbXCJKUWVtdVwiLCBmdW5jdGlvbihKUWVtdSkge1xuICAgIGZ1bmN0aW9uIG15bWV0aG9kcyhzY29wZSwgZWxlbSwgYXR0cnMpIHtcbiAgICBcbiAgICAvLyBkZWZhdWx0IHZhbHVlIGF0IDFzdCByZW5kZXJpbmdcbiAgICBzY29wZS5lcnJvciAgPSBmYWxzZTtcbiAgICBzY29wZS52YWxpZCAgPSBmYWxzZTtcbiAgICBzY29wZS5zdGF0dXMgPSAndW50b3VjaCc7XG4gICBcbiAgICBzY29wZS5pbnB1dCA9IGVsZW0uZmluZCAoXCJpbnB1dFwiKTtcbiAgICBzY29wZS5yZXF1aXJlZCA9IDA7XG4gICAgXG4gICAgLy8gcmVxdWlyZXIgaXMgdXNlIHRvIGluY3JlbWVudCByZXF1ZXN0ZWQgY291bnRlclxuICAgIGlmIChcInJlcXVpcmVkXCIgaW4gYXR0cnMpIHtcbiAgICAgICAgc2NvcGUucmVxdWlyZWQgPSAxO1xuICAgICAgICBlbGVtLmFkZENsYXNzIChcInJlcXVpcmVkXCIpO1xuICAgIH1cbiAgICAgICBcbiAgICAgLy8gdXNlciBlbnRlciBpbnB1dCByZXNldCBlcnJvciBzdGF0dXNcbiAgICAgc2NvcGUuc2VsZWN0ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHNjb3BlLmVycm9yPWZhbHNlOyBcbiAgICAgICAgc2NvcGUuZXJybXNnPWZhbHNlOyBcbiAgICAgICAgc2NvcGUuc3RhdHVzID0gJ3RvdWNoJztcbiAgICAgfTsgICBcbiAgICAgICAgICAgIFxuICAgICBzY29wZS52YWxpZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgIFxuICAgICAgICAgLy8gZ2V0IHZhbHVlIGZyb20gaW5wdXQgZmllbGQgYnlwYXNzaW5nIEFuZ3VsYXIgbmctbW9kZWxcbiAgICAgICAgIGNvbnNvbGUubG9nIChcIkNsaWNrZWQgSW5wdXRUZXh0IG5hbWU9JXMgdmFsdWU9JXMgdmFsaWQ9JXNcIiwgc2NvcGUubmFtZSwgc2NvcGUudmFsdWUsIHNjb3BlLnZhbGlkKTsgICAgICAgIFxuXG4gICAgICAgICAvLyBmb3JtIGlzIG5vdCB1bnRvdWNoZWQgYW55bW9yZVxuICAgICAgICAgc2NvcGUucGFyZW50LnJlbW92ZUNsYXNzIChcIm5nLXByaXN0aW5lXCIpO1xuXG4gICAgICAgICAvLyBpZiB2YWx1ZSBub3QgbnVsbCBjbGVhbiB1cCBzdHJpbmdcbiAgICAgICAgIGlmIChzY29wZS52YWx1ZSkge1xuICAgICAgICAgICAgIHNjb3BlLmVycm9yPWZhbHNlOyBcbiAgICAgICAgICAgIC8vIHJlbW92ZSBsZWFkaW5nIGFuZCB0cmFpbGxpbmcgc3BhY2VcbiAgICAgICAgICAgIHNjb3BlLnZhbHVlID0gc2NvcGUudmFsdWUudHJpbSgpO1xuICAgICAgICAgXG4gICAgICAgICAgICAvLyByZW1vdmUgYW55IHNwYWNlIGlzIG5vdCBhbGxvd2VkXG4gICAgICAgICAgICBpZiAoJ25vc3BhY2UnIGluIGF0dHJzKSB7XG4gICAgICAgICAgICAgICBzY29wZS52YWx1ZT1zY29wZS52YWx1ZS5yZXBsYWNlKC9cXHMvZywgJycpOyAgICBcbiAgICAgICAgICAgIH1cbiAgICAgICAgIFxuICAgICAgICAgICAgaWYgKCdsb3dlcmNhc2UnIGluIGF0dHJzKSB7XG4gICAgICAgICAgICAgICBzY29wZS52YWx1ZSA9IHNjb3BlLnZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICBcbiAgICAgICAgICAgIC8vIGNoZWNrIG1pbmltdW0gbGVuZ2h0XG4gICAgICAgICAgICBpZiAoXCJtaW5sZW5cIiBpbiBhdHRycykge1xuICAgICAgICAgICAgICBpZiAoc2NvcGUudmFsdWUubGVuZ3RoIDwgYXR0cnMubWlubGVuKSB7XG4gICAgICAgICAgICAgICAgIHNjb3BlLnN0YXR1cz0naW52YWxpZCc7XG4gICAgICAgICAgICAgICAgIHNjb3BlLmVycm1zZz1zY29wZS5uYW1lICsgJzogTWluaW51bSBMZW5naD0gJyArIGF0dHJzLm1pbmxlbiArICcgQ2hhcmFjdGVycyc7XG4gICAgICAgICAgICAgICAgIHNjb3BlLmVycm9yPXRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKCdlbWFpbCcgaW4gYXR0cnMpIHtcbiAgICAgICAgICAgIGlmICghZW1haWxwYXRlcm4udGVzdCAoc2NvcGUudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgc2NvcGUuc3RhdHVzPSdpbnZhbGlkJztcbiAgICAgICAgICAgICAgICBzY29wZS5lcnJtc2c9J2ludmFsaWQgZW1haWwgYWRkcmVzcyc7XG4gICAgICAgICAgICAgICAgc2NvcGUuZXJyb3I9dHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgIH1cbiAgICAgICAgIFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHNjb3BlLnJlcXVpcmVkKSB7XG4gICAgICAgICAgICAgICAgIHNjb3BlLnN0YXR1cz0naW52YWxpZCc7XG4gICAgICAgICAgICAgICAgIHNjb3BlLmVycm1zZz1zY29wZS5uYW1lICsgJzogUmVxdWlyZWQgQXR0cmlidXRlJztcbiAgICAgICAgICAgICAgICAgc2NvcGUuZXJyb3I9dHJ1ZTsgXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgLy8gSWYgbG9jYWwgY29udHJvbCBmYWlsIGxldCdzIHJlZnVzZSBpbnB1dFxuICAgICAgICAgaWYgKHNjb3BlLmVycm9yKSB7XG4gICAgICAgICAgICAgaWYgKHNjb3BlLnJlcXVpcmVkICYmIHNjb3BlLnZhbGlkKSB7XG4gICAgICAgICAgICAgICAgIHNjb3BlLnZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgIGlmIChzY29wZS5sNGFjb3VudGVyLnZhbGlkYXRlZCA+IDApIHNjb3BlLmw0YWNvdW50ZXIudmFsaWRhdGVkIC0tO1xuICAgICAgICAgICAgIH0gXG4gICAgICAgICAgICAgLy8gdXNlIGNhbGwgdG8gdXBkYXRlIGZvcm0gc2NvcGUgb24gZm9ybSBjb21wbGV0ZW5lc3NcbiAgICAgICAgICAgICBzY29wZS5jYWxsYmFjayAoYXR0cnMubmFtZSwgbnVsbCwgc2NvcGUuZG9uZSk7XG4gICAgICAgICB9IGVsc2UgeyBcbiAgICAgICAgICAgICAvLyBsb2NhbGNoZWNrIGlzIE9LIGJhY2t1cCBtYXkgbmV2ZXJ0aGVsZXNzIGNoYW5nZSBzdGF0dXMgdG8gZmFsc2VcbiAgICAgICAgICAgIGlmIChzY29wZS5yZXF1aXJlZCAgJiYgIXNjb3BlLnZhbGlkKSBzY29wZS5sNGFjb3VudGVyLnZhbGlkYXRlZCArKztcbiAgICAgICAgICAgIHNjb3BlLnN0YXR1cz0ndmFsaWQnO1xuICAgICAgICAgICAgc2NvcGUudmFsaWQ9dHJ1ZTtcbiAgICAgICAgICAgIHNjb3BlLmNhbGxiYWNrIChhdHRycy5uYW1lLCBzY29wZS52YWx1ZSwgc2NvcGUuZG9uZSk7XG4gICAgICAgICB9XG4gICAgICAgICAgXG4gICAgIH07XG4gICAgIFxuICAgICAvLyB0aGlzIG1ldGhvZCBjYW4gYmUgY2FsbGVkIGZyb20gY29udHJvbGxlciB0byB1cGRhdGUgd2lkZ2V0IHN0YXR1c1xuICAgICBzY29wZS5kb25lPWZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgY29uc29sZS5sb2cgKFwiVGV4dC1JbnB1dCBDYWxsYmFjayBJRD1cIisgYXR0cnMubmFtZSArIFwiIGRhdGE9XCIsIGRhdGEpO1xuICAgICAgIGZvciAodmFyIGkgaW4gZGF0YSkgc2NvcGVbaV0gPSBkYXRhW2ldOyAgICAgICAgIFxuICAgICB9O1xuICAgICBcbiAgICAgLy8gRXhwb3J0IHNvbWUgYXR0cmlidXRlcyB3aXRoaW4gZGlyZWN0aXZlIHNjb3BlIGZvciB0ZW1wbGF0ZVxuICAgICBzY29wZS5sYWJlbCAgICAgICA9IGF0dHJzLmxhYmVsO1xuICAgICBzY29wZS5uYW1lICAgICAgICA9IGF0dHJzLm5hbWU7XG4gICAgIHNjb3BlLnBsYWNlaG9sZGVyID0gYXR0cnMucGxhY2Vob2xkZXI7XG4gICAgIHNjb3BlLnR5cGUgICAgICAgID0gYXR0cnMudHlwZSB8fCBcInRleHRcIjtcbiAgICAgc2NvcGUudGlwICAgICAgICAgPSBhdHRycy50aXA7XG5cbiAgICAgLy8gc2VhcmNoIGZvciBmb3JtIHdpdGhpbiBwYXJlbnQgZWxlbW50c1xuICAgICBzY29wZS5wYXJlbnQgPSBKUWVtdS5wYXJlbnQgKGVsZW0sIFwiRk9STVwiKTtcblxuICAgICAvLyBlbWFpbCBlbmZvcmNlIGxvd2VyY2FzZSBhbmQgbm9zcGFjZSAgIFxuICAgICBpZiAoXCJlbWFpbFwiIGluIGF0dHJzKSB7XG4gICAgICAgIGF0dHJzLmxvd2VyY2FzZT10cnVlOyBcbiAgICAgICAgYXR0cnMubm9zcGFjZT10cnVlOyBcbiAgICAgICAgYXR0cnMubWlubGVuPTY7IFxuICAgICB9XG5cbiAgICAgaWYgKHNjb3BlLnJlcXVpcmVkKSB7XG4gICAgICAgICBzY29wZS5sNGFjb3VudGVyID0gc2NvcGUucGFyZW50LmRhdGEgKFwibDRhY291bnRlclwiKTtcbiAgICAgICAgIGlmICghc2NvcGUubDRhY291bnRlcikgeyBcbiAgICAgICAgICAgIHNjb3BlLmw0YWNvdW50ZXIgPSAge3JlcXVpcmVkOjEsIHZhbGlkYXRlZDowfTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRmllbGQgXCIrc2NvcGUubmFtZStcIiBpcyByZXF1aXJlZCAoMXN0KVwiKTtcbiAgICAgICAgICAgIHNjb3BlLnBhcmVudC5kYXRhIChcImw0YWNvdW50ZXJcIiwgc2NvcGUubDRhY291bnRlcik7IFxuICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkZpZWxkIFwiK3Njb3BlLm5hbWUrXCIgaXMgcmVxdWlyZWRcIik7XG4gICAgICAgICAgICAgc2NvcGUubDRhY291bnRlci5yZXF1aXJlZCArKztcbiAgICAgICAgIH1cbiAgICAgfVxuICAgICAgICAgXG4gICAgIC8vIHJlZnJlc2ggdmFsaWRhdGlvbiBlYWNoIHRpbWUgY29udHJvbGVyIHVwZGF0ZSB2YWx1ZVxuICAgICBzY29wZS4kd2F0Y2ggKCd2YWx1ZScsIGZ1bmN0aW9uKCl7XG4gICAgICAgICBpZihzY29wZS52YWx1ZSkgc2NvcGUudmFsaWRhdGUoKTsgfVxuICAgICApO1xuICAgIFxuICAgIH1cbiAgICBcbiAgICByZXR1cm4ge1xuICAgICAgICByZXN0cmljdDogJ0UnLFxuICAgICAgICB0ZW1wbGF0ZTogdG1wbCxcbiAgICAgICAgbGluazogbXltZXRob2RzLFxuICAgICAgICBzY29wZToge1xuICAgICAgICAgICAgY2FsbGJhY2sgOiAnPScsXG4gICAgICAgICAgICB2YWx1ZTogJz0nXG4gICAgICAgIH1cbiAgICB9O1xufV0pO1xuXG5jb25zb2xlLmxvZyAoXCJJbnB1dFRleHQgTG9hZGVkXCIpO1xufSkoKTtcbiIsIi8qIFxuICogQ29weXJpZ2h0IChDKSAyMDE1IFwiSW9ULmJ6aFwiXG4gKiBBdXRob3IgXCJGdWx1cCBBciBGb2xsXCJcbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4gKi9cblxuKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG1wbCA9ICc8aW5wdXQtdGV4dCAgY2xhc3M9XCJwYXNzd29yZFwiIHRpcD1cInt7dGlwMX19XCIgIHBsYWNlaG9sZGVyPVwie3twbGFjZTF9fVwiJyArXG4gICAgICAgICAgICdsYWJlbD1cInt7bGFiZWwxfX1cIiBjYWxsYmFjaz1cInZhbGlkMVwiIG5hbWU9XCJ7e25hbWV9fS0xXCIgdmFsdWU9XCJwYXNzMVwiIHJlcXVpcmVkIG1pbmxlbj1cInt7bWlubGVufX1cIiB0eXBlPVwicGFzc3dvcmRcIiA+JyArXG4gICAgICAgICAgICc8L2lucHV0LXRleHQ+JyArIFxuICAgICAgICAgICAnPGlucHV0LXRleHQgIGNsYXNzPVwicGFzc3dvcmRcIiB0aXA9XCJ0aXAyXCIgIHBsYWNlaG9sZGVyPVwie3twbGFjZTJ9fVwiJyArXG4gICAgICAgICAgICdsYWJlbD1cInt7bGFiZWwyfX1cIiBjYWxsYmFjaz1cInZhbGlkMlwiIG5hbWU9XCJ7e25hbWV9fS0yXCIgdmFsdWU9XCJwYXNzMlwiIHJlcXVpcmVkIG1pbmxlbj1cInt7bWlubGVufX1cIiB0eXBlPVwicGFzc3dvcmRcIiA+ICcrXG4gICAgICAgICAgICc8L2lucHV0LXRleHQ+JztcblxuYW5ndWxhci5tb2R1bGUoJ0lucHV0UGFzc3dvcmQnLFtdKVxuXG4uZGlyZWN0aXZlKCdpbnB1dFBhc3N3b3JkJywgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gbXltZXRob2RzKHNjb3BlLCBlbGVtLCBhdHRycykge1xuICAgIFxuICAgIHNjb3BlLnZhbGlkMSA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgICAgICBjb25zb2xlLmxvZyAoXCJDbGlja2VkIElucHV0UGFzc3dvcmQxIG5hbWU9JXMgdmFsdWU9JXNcIiwgbmFtZSwgdmFsdWUpOyAgICAgICAgXG4gICAgICAgIHNjb3BlLmZpcnN0cHdkID0gdmFsdWU7XG4gICAgfTtcbiAgICBcbiAgICBzY29wZS52YWxpZDIgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUsIGRvbmUpIHsgICAgICAgIFxuICAgICAgICBjb25zb2xlLmxvZyAoXCJDbGlja2VkIElucHV0UGFzc3dvcmQyIG5hbWU9JXMgdmFsdWU9JXNcIiwgbmFtZSwgdmFsdWUpOyAgICAgICAgXG4gICAgICAgIFxuICAgICAgICAvLyBpZiBib3RoIHBhc3N3ZCBlcXVhbCB0aGVuIGNhbGwgZm9ybSBDQlxuICAgICAgICBpZiAoc2NvcGUuZmlyc3Rwd2QgIT09IHZhbHVlKSB7XG4gICAgICAgICAgZG9uZSh7dmFsaWQ6IGZhbHNlLCBzdGF0dXM6ICdpbnZhbGlkJywgZXJybXNnOiBcImJvdGggcGFzc3dvcmQgc2hvdWxkIG1hdGNoXCJ9KTsgIFxuICAgICAgICB9IGVsc2UgeyAgXG4gICAgICAgICAgc2NvcGUuY2FsbGJhY2sgKGF0dHJzLm5hbWUsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgXG4gICAgIH07XG4gICAgIFxuICAgICAvLyB0aGlzIG1ldGhvZCBjYW4gYmUgY2FsbGVkIGZyb20gY29udHJvbGxlciB0byB1cGRhdGUgd2lkZ2V0IHN0YXR1c1xuICAgICBzY29wZS5kb25lPWZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgY29uc29sZS5sb2cgKFwiVGV4dC1JbnB1dCBDYWxsYmFjayBJRD1cIisgYXR0cnMubmFtZSArIFwiIGRhdGE9XCIsIGRhdGEpO1xuICAgICAgIGZvciAodmFyIGkgaW4gZGF0YSkgc2NvcGVbaV0gPSBkYXRhW2ldOyAgICAgICAgIFxuICAgICB9O1xuICAgICBcbiAgICAgLy8gRXhwb3J0IHNvbWUgYXR0cmlidXRlcyB3aXRoaW4gZGlyZWN0aXZlIHNjb3BlIGZvciB0ZW1wbGF0ZVxuICAgICBzY29wZS5uYW1lICAgPSBhdHRycy5uYW1lO1xuICAgICBzY29wZS5sYWJlbDEgPSBhdHRycy5sYWJlbCB8fCAnUGFzc3dvcmQnO1xuICAgICBzY29wZS5sYWJlbDIgPSBhdHRycy5sYWJlbCB8fCAnUGFzc3dvcmQgVmVyaWZpY2F0aW9uJztcbiAgICAgc2NvcGUucGxhY2UxID0gYXR0cnMucGxhY2Vob2xkZXIxIHx8ICdVc2VyIFBhc3N3b3JkJztcbiAgICAgc2NvcGUudGlwMSAgID0gYXR0cnMudGlwIHx8ICdDaG9vc2UgYSBQYXNzd29yZCc7XG4gICAgIHNjb3BlLnBsYWNlMiA9IGF0dHJzLnBsYWNlaG9sZGVyMSB8fCAnUGFzc3dvcmQgVmVyaWZpY2F0aW9uJztcbiAgICAgc2NvcGUudGlwMiAgID0gYXR0cnMudGlwICAgIHx8ICdDb25maXJtZSB5b3VyIFBhc3N3b3JkJztcbiAgICAgc2NvcGUubWlubGVuID0gYXR0cnMubWlubGVuIHx8IDEwO1xuICAgICBcbiAgICAgaWYgKFwicmVxdWlyZWRcIiBpbiBhdHRycykgc2NvcGUucmVxdWlyZWQgPSAncmVxdWlyZWQnO1xuICAgICAgICAgXG4gICAgfVxuICAgIFxuICAgIHJldHVybiB7XG4gICAgICAgIHJlc3RyaWN0OiAnRScsXG4gICAgICAgIHRlbXBsYXRlOiB0bXBsLFxuICAgICAgICBsaW5rOiBteW1ldGhvZHMsXG4gICAgICAgIHNjb3BlOiB7XG4gICAgICAgICAgICBjYWxsYmFjayA6ICc9JyxcbiAgICAgICAgfVxuICAgIH07XG59KTtcblxuY29uc29sZS5sb2cgKFwiSW5wdXRQYXNzd29yZCBMb2FkZWRcIik7XG59KSgpO1xuIiwiLyogXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgXCJJb1QuYnpoXCJcbiAqIEF1dGhvciBcIkZ1bHVwIEFyIEZvbGxcIlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4gKiBcbiAqIEJ1Z3M6IElucHV0IHdpdGggQ2FsbGJhY2sgU0hPVUxEIEJFIGdldCAncmVxdWlyZWQnIGNsYXNzXG4gKi9cblxuKGZ1bmN0aW9uICgpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgdG1wbCA9ICc8ZGl2ICBuZy1jbGljaz1cImNsaWNrZWQoKVwiPicgK1xuICAgICAgICAgICAgJzxpIGNsYXNzPVwie3tpY29ufX1cIj48L2k+JyArXG4gICAgICAgICAgICAnPHNwYW4+e3tsYWJlbH19PC9zcGFuPicgK1xuICAgICAgICAgICAgJzwvZGl2Pic7XG5cbiAgICBhbmd1bGFyLm1vZHVsZSgnU3VibWl0QnV0dG9uJywgW10pXG4gICAgICAgICAgICAuZGlyZWN0aXZlKCdzdWJtaXRCdXR0b24nLCBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBteW1ldGhvZHMoc2NvcGUsIGVsZW0sIGF0dHJzKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gYWp1c3QgaWNvbiBvciB1c2UgZGVmYXVsdFxuICAgICAgICAgICAgICAgICAgICBzY29wZS5pY29uID0gYXR0cnMuaWNvbiB8fCAnZmktZm9vdCc7XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLmxhYmVsID0gYXR0cnMubGFiZWwgfHwgJ05leHQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgLy8gYWRkIGxhYmVsIGFzIGNsYXNzXG4gICAgICAgICAgICAgICAgICAgIGVsZW0uYWRkQ2xhc3MgKHNjb3BlLmxhYmVsLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgLy8gbm90ZTogY2xpY2tlZCBpbiBpbXBvcnRlZCBhbmQgd2hlbiB0ZW1wbGF0ZSBpcyBjbGlja2VkXG4gICAgICAgICAgICAgICAgICAgIC8vIGl0IHdpbGwgY2FsbCBjbGlja2VkIG1ldGhvZCBwYXNzZWQgaW4gcGFyYW0uXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3RyaWN0OiAnRScsXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlOiB0bXBsLFxuICAgICAgICAgICAgICAgICAgICBsaW5rOiBteW1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIHNjb3BlOiB7Y2xpY2tlZCA6ICc9J31cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG59KSgpO1xuIiwiLyogXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgXCJJb1QuYnpoXCJcbiAqIEF1dGhvciBcIkZ1bHVwIEFyIEZvbGxcIlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4gKiBcbiAqIEJ1Z3M6IElucHV0IHdpdGggQ2FsbGJhY2sgU0hPVUxEIEJFIGdldCAncmVxdWlyZWQnIGNsYXNzXG4gKi9cblxuKGZ1bmN0aW9uICgpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgdG1wbEFwcGxpID0gJzxkaXYgIG5nLWNsaWNrPVwiY2xpY2tlZCgpXCI+JyArXG4gICAgICAgICAgICAnPGltZyBuZy1zcmM9XCJ7e2ljb259fVwiPicgK1xuICAgICAgICAgICAgJzxzcGFuPnt7bGFiZWx9fTwvc3Bhbj4nICtcbiAgICAgICAgICAgICc8L2Rpdj4nO1xuICAgIFxuICAgIHZhciB0bXBsTW9kYWwgPSBcbiAgICAgICAgICAgICc8YiBjbGFzcz1cImNsb3NlLWJ1dHRvblwiIG5nLWNsaWNrPVwiY2xvc2UoKVwiPsOXPC9iPicgK1xuICAgICAgICAgICAgJzxpbWcgbmctc3JjPVwie3tpY29ufX1cIj4nICtcbiAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cIm1vZGFsLXRleHRcIj5BcHBsaWNhdGlvbiA8Yj57e25hbWV9fTwvYj48L3NwYW4+JyArXG4gICAgICAgICAgICAnPHVsIGNsYXNzPVwidmVydGljYWwgaWNvbi1sZWZ0IHByaW1hcnkgbWVudS1iYXJcIj4nICtcbiAgICAgICAgICAgICc8bGk+PGEgbmctY2xpY2s9YWN0aW9uKFwic3RhcnRcIik+PGkgY2xhc3M9XCJmaS1jaGVja1wiPiBTdGFydDwvaT48L2E+PC9saT4nICtcbiAgICAgICAgICAgICc8bGk+PGEgbmctY2xpY2s9YWN0aW9uKFwic3RvcFwiKT48aSBjbGFzcz1cImZpLXhcIj4gU3RvcDwvaT48L2E+PC9saT4nICtcbiAgICAgICAgICAgICc8bGk+PGEgbmctY2xpY2s9YWN0aW9uKFwiaW5mb1wiKT48aSBjbGFzcz1cImZpLWluZm9cIj4gSW5mbzwvaT48L2E+PC9saT4nICtcbiAgICAgICAgICAgICc8L3VsPicgK1xuICAgICAgICAgICAgJyc7XG5cbiAgICBhbmd1bGFyLm1vZHVsZSgnQXBwbGlCdXR0b24nLCBbXSlcbiAgICAgICAgICAgIC5kaXJlY3RpdmUoJ2FwcGxpQnV0dG9uJywgW1wiQXBwQ29uZmlnXCIsIFwiQXBwQ2FsbFwiLCBcIk1vZGFsRmFjdG9yeVwiLCBcIk5vdGlmaWNhdGlvblwiLCBcIiR0aW1lb3V0XCIsIGZ1bmN0aW9uIChBcHBDb25maWcsIEFwcENhbGwsIE1vZGFsRmFjdG9yeSwgTm90aWZpY2F0aW9uLCAkdGltZW91dCkge1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gbXltZXRob2RzKHNjb3BlLCBlbGVtLCBhdHRycykge1xuICAgICAgICAgICAgICAgICAgICBzY29wZS5jbGlja2VkID0gZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm90aWZ5RXJyb3IgPSBmdW5jdGlvbihhcGksIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90aWZpY2F0aW9uLmVycm9yICh7bWVzc2FnZTogXCJGYWlsIC9hcGkvYWZtLW1haW5cIiArIGFwaSArIFwiPVwiICsgc2NvcGUubGFiZWwgKyBcIiBSdW5JRD1cIisgc2NvcGUuYXBwSUQsIGRlbGF5OiA1MDAwfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5hZGRDbGFzcyAoXCJmYWlsXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0ucmVtb3ZlQ2xhc3MgKFwic3VjY2Vzc1wiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5jYWxsYmFjayAoc2NvcGUuYXBwbGlJRCwgYXBpLCByZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm90aWZ5U3VjY2VzcyA9IGZ1bmN0aW9uIChhcGksIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5yZW1vdmVDbGFzcyAoXCJmYWlsXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLnJ1bklEID0gcmVzcG9uc2UuZGF0YS5yZXNwb25zZS5ydW5pZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5jYWxsYmFjayAoc2NvcGUuYXBwbGlJRCwgXCIvYXBpL2FmbS1tYWluL3N0YXJ0XCIsIHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjbG9zZU1vZGFsID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cgKFwiTW9kYWwgQ2xvc2luZ1wiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5tb2RhbC5kZWFjdGl2YXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRpbWVvdXQgKGZ1bmN0aW9uKCkge3Njb3BlLm1vZGFsLmRlc3Ryb3koKTt9LCAxMDAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhY3Rpb25Nb2RhbCA9IGZ1bmN0aW9uKGFjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nIChcIk1vZGFsIEFjdGlvbj0lc1wiLCBhY3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwic3RhcnRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwcENhbGwuZ2V0IChcImFmbS1tYWluXCIsIFwic3RhcnRcIiwge2lkOiBzY29wZS5hcHBsaUlEfSwgZnVuY3Rpb24ocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSAyMDAgfHwgcmVzcG9uc2UuZGF0YS5yZXF1ZXN0Lmp0eXBlICE9PSBcIkFKQl9yZXBseVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeUVycm9yIChcInN0YXJ0XCIsIHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZnlTdWNjZXNzIChcInN0YXJ0XCIsIHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcInN0b3BcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwcENhbGwuZ2V0IChcImFmbS1tYWluXCIsIFwic3RvcFwiLCB7aWQ6IHNjb3BlLnJ1bklEfSwgZnVuY3Rpb24ocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSAyMDAgfHwgcmVzcG9uc2UuZGF0YS5yZXF1ZXN0Lmp0eXBlICE9PSBcIkFKQl9yZXBseVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeUVycm9yIChcInN0b3BcIiwgcmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeVN1Y2Nlc3MgKFwic3RvcFwiLCByZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiaW5mb1wiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBwQ2FsbC5nZXQgKFwiYWZtLW1haW5cIiwgXCJkZXRhaWxcIiwge2lkOiBzY29wZS5hcHBJRH0sIGZ1bmN0aW9uKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gMjAwIHx8IHJlc3BvbnNlLmRhdGEucmVxdWVzdC5qdHlwZSAhPT0gXCJBSkJfcmVwbHlcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZnlFcnJvciAoXCJkZXRhaWxcIiwgcmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeVN1Y2Nlc3MgKFwiZGV0YWlsXCIsIHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nIChcIkFjdGlvbk1vZGFsIHVua25vd24gYWN0aW9uPVslc11cIiwgYWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZU1vZGFsKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyByZWZlcmVuY2UgaHR0cDovL2ZvdW5kYXRpb24uenVyYi5jb20vYXBwcy9kb2NzLyMhL2FuZ3VsYXItbW9kdWxlc1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25JbjogJ3NsaWRlSW5Gcm9tVG9wJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50U2NvcGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uICA6IGFjdGlvbk1vZGFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZSAgIDogY2xvc2VNb2RhbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbiAgICA6IHNjb3BlLmljb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsICAgOiBzY29wZS5sYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRlbXBsYXRlIDogdG1wbE1vZGFsXG4gICAgICAgICAgICAgICAgICAgICAgICB9OyBcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFBvcHVwIE1vZGFsIHRvIHJlbmRlciBhcHBsaWNhdGlvbiBkYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5tb2RhbCA9IG5ldyBNb2RhbEZhY3RvcnkoY29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLm1vZGFsLmFjdGl2YXRlICgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIGV4dHJhY3QgYXBwbGljYXRpb24gaW5mb3JtYXRpb24gZnJvbSBBcHBJRCtTdG9yZVxuICAgICAgICAgICAgICAgICAgICBpZiAoYXR0cnMuaGFuZGxlICYmIHNjb3BlLnN0b3JlIFthdHRycy5oYW5kbGVdLm5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLmljb24gID0gQXBwQ29uZmlnLnBhdGhzLmljb25zICsgc2NvcGUuc3RvcmUgW2F0dHJzLmhhbmRsZV0ubmFtZS50b0xvd2VyQ2FzZSgpICsgJy1pY28ucG5nJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLmxhYmVsID0gc2NvcGUuc3RvcmUgW2F0dHJzLmhhbmRsZV0ubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLmFwcGxpSUQ9IGF0dHJzLmhhbmRsZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5pY29uICA9IEFwcENvbmZpZy5wYXRocy5pY29ucyArICd3M2MtaWNvLnBuZyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUubGFiZWwgPSBhdHRycy5oYW5kbGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIC8vIGFkZCBsYWJlbCBhcyBjbGFzc1xuICAgICAgICAgICAgICAgICAgICBlbGVtLmFkZENsYXNzIChzY29wZS5sYWJlbC50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIC8vIG5vdGU6IGNsaWNrZWQgaW4gaW1wb3J0ZWQgYW5kIHdoZW4gdGVtcGxhdGUgaXMgY2xpY2tlZFxuICAgICAgICAgICAgICAgICAgICAvLyBpdCB3aWxsIGNhbGwgY2xpY2tlZCBtZXRob2QgcGFzc2VkIGluIHBhcmFtLlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICByZXN0cmljdDogJ0UnLFxuICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogdG1wbEFwcGxpLFxuICAgICAgICAgICAgICAgICAgICBsaW5rOiBteW1ldGhvZHMsXG4gICAgICAgICAgICAgICAgICAgIHNjb3BlOiB7Y2FsbGJhY2s6ICc9Jywgc3RvcmU6ICc9J31cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfV0pO1xufSkoKTtcbiIsIihmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxuLy8gV0FSTklORzogbWFrZSBzdXJlIHRoYW4gYXBwL2Zyb250ZW5kL3NlcnZpY2VzL0FwcENvbmZpZy5qcyBtYXRjaCB5b3VyIHNlcnZlclxuXG4vLyBsaXN0IGFsbCByZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBwYWdlICsgY29udHJvbGVyIGlmIG5lZWRlZFxuYW5ndWxhci5tb2R1bGUoJ0Rhc2hib2FyZE1vZHVsZScsIFsnU3VibWl0QnV0dG9uJywgJ1Rva2VuUmVmcmVzaCcsICdBcHBsaUJ1dHRvbiddKVxuXG4gIC5jb250cm9sbGVyKCdEYXNoYm9hcmRDb250cm9sbGVyJywgW1wiQXBwQ2FsbFwiLCBcIk5vdGlmaWNhdGlvblwiLCBmdW5jdGlvbiAoQXBwQ2FsbCwgTm90aWZpY2F0aW9uKSB7XG4gICAgICAgIHZhciBzY29wZSA9IHRoaXM7IC8vIEkgaGF0ZSBKYXZhU2NyaXB0XG4gICAgICAgIHNjb3BlLnV1aWQgICA9XCJub25lXCI7XG4gICAgICAgIHNjb3BlLnRva2VuICA9XCJub25lXCI7XG4gICAgICAgIHNjb3BlLnNlc3Npb249XCJub25lXCI7XG4gICAgICAgIHNjb3BlLnN0YXR1cyA9XCJlcnItbm9cIjtcbiAgICAgICAgc2NvcGUuYXBwbGlJRHMgPVtdOyAvLyBhcnJheSB0byBob2xkIGFwcGxpY2F0aW9ucyBJRFxuICAgICAgICBzY29wZS5hcHBsaVN0b3JlPXt9OyAvLyBhcnJheSB0byBob2xkIGFwcGxpY2F0aW9ucyBqc29uIGRlc2NyaXB0aW9uXG5cbiAgICAgICBcbiAgICAgICAgc2NvcGUuQXBwbGlDQiA9IGZ1bmN0aW9uKGFwcGxpSUQsIGFjdGlvbiwgcmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAvLyBBY3Rpb24gaXMgZG9uZSB3aXRoaW4gV2lkZ2V0IENvbnRyb2xsZXIgb25seSB1cGRhdGUgZGVidWcgVUkgem9uZVxuICAgICAgICAgICAgICAgIHNjb3BlLnJlcXVlc3QgID0gYWN0aW9uOyBcbiAgICAgICAgICAgICAgICBzY29wZS5lcnJjb2RlICA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YSkgc2NvcGUucmVzcG9uc2UgPSByZXNwb25zZS5kYXRhO1xuICAgICAgICB9O1xuICAgICAgICBcbiAgICAgICAgc2NvcGUuR2V0UnVubmFibGVzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyAoXCJEYXNoYm9hcmQgR2V0UnVubmFibGVzXCIpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBBcHBDYWxsLmdldCAoXCJhZm0tbWFpblwiLCBcInJ1bm5hYmxlc1wiLCB7LypxdWVyeSovfSwgZnVuY3Rpb24ocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyB1cGRhdGUgZGVidWcgVUkgem9uZVxuICAgICAgICAgICAgICAgIHNjb3BlLnJlcXVlc3QgID0gXCIvYXBpL2FmbS1tYWluL3J1bm5hYmxlXCI7IFxuICAgICAgICAgICAgICAgIHNjb3BlLnJlc3BvbnNlID0gcmVzcG9uc2UuZGF0YTtcbiAgICAgICAgICAgICAgICBzY29wZS5lcnJjb2RlICA9IHJlc3BvbnNlLnN0YXR1cztcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2cgKFwiSG9vcCBHZXRSdW5uYWJsZSBmYWlsZWRcIik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gQ2hlY2sgdGhpcyBpcyBhIHZhbGlkIHJlc3BvbnNlIGZyb20gQmluZGVyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEucmVxdWVzdC5qdHlwZSAhPT0gXCJBSkJfcmVwbHlcIiAmJiByZXNwb25zZS5kYXRhLnJlcXVlc3QuYXBpICE9PSBcInJ1bm5hYmxlc1wiKSB7XG4gICAgICAgICAgICAgICAgICBOb3RpZmljYXRpb24uZXJyb3IgKHttZXNzYWdlOiBcIkludmFsaWQgUmVzcG9uZCB0byAvb3BhL2FmbS1tYWluL3J1bm5hYmxlIHJlc3BvbnNlLmRhdGE9XCIrcmVzcG9uc2UuZGF0YSwgZGVsYXk6IDUwMDB9KTsgXG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIGxvb3Agb24gcnVubmFibGUgYXBwbGljYXRpb24gdG8gcHJlcGFyZSBmb3IgZGlzcGxheVxuICAgICAgICAgICAgICAgIHZhciAgYXBwbGlJRHM9W107XG4gICAgICAgICAgICAgICAgdmFyICBydW5uYWJsZXMgPSByZXNwb25zZS5kYXRhLnJlc3BvbnNlLnJ1bm5hYmxlcztcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpZHg9MDsgaWR4IDwgcnVubmFibGVzLmxlbmd0aDsgaWR4ICsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFwcGxpSURzW2lkeF0gPSBydW5uYWJsZXMgW2lkeF0uaWQ7XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLmFwcGxpU3RvcmUgW3J1bm5hYmxlcyBbaWR4XS5pZF0gPSAgcnVubmFibGVzIFtpZHhdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzY29wZS5hcHBsaUlEcyA9IGFwcGxpSURzOyAvLyBhdm9pZCBwYXJ0aWFsIHVwZGF0ZSB0byBsaW1pdCBVSSByZWZyZXNoXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9KTsgICAgICAgICAgICBcbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgICAgIHNjb3BlLkZpbGVVcGxvYWRlZCA9IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2cgKFwiZmlsZSBVcGxvYWRlZFwiKTtcbiAgICAgICAgICAgIC8vIENhbm5vdCBkaXNwbGF5IHBvc3QgcmVzdWx0cyBhcyBHZXRSdW5uYWJsZSB3aWxsIG92ZXJsb2FkIHRoZW0gYXluY2hyb25vdXNseVxuICAgICAgICAgICAgc2NvcGUucmVxdWVzdCAgPSBcIi9hcGkvYWZtLW1haW4vaW5zdGFsbFwiOyBcbiAgICAgICAgICAgIHNjb3BlLnJlc3BvbnNlID0gcmVzcG9uc2UuaGVhZGVycztcbiAgICAgICAgICAgIHNjb3BlLmVycmNvZGUgID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBldmVyeXRoaW5nIGxvb2tzIE9LIHVwZGF0ZSBhcHAgbGlzdFxuICAgICAgICAgICAgc2NvcGUuR2V0UnVubmFibGVzKCk7XG4gICAgICAgIH07XG4gICAgICAgIFxuICAgICAgICBzY29wZS5BdXRvU3RhcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyAoXCJBdXRvU3RhcnQgcmVxdWVzdGluZyBBcHBzIGxpc3RcIik7XG4gICAgICAgICAgICBzY29wZS5HZXRSdW5uYWJsZXMoKTtcbiAgICAgICAgfTtcbiAgICAgICAgICBcbiAgIH1dKTtcblxuY29uc29sZS5sb2cgKFwiRGFzaGJvYXJkIENvbnRyb2xsZXIgTG9hZGVkXCIpO1xufSkoKTsgIiwiLyogXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgXCJJb1QuYnpoXCJcbiAqIEF1dGhvciBcIkZ1bHVwIEFyIEZvbGxcIlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqIFxuICogVXNhZ2U6XG4gKiBcbiAqICAgLy8gbW91c2UgZXZlbnQgcHJvYmFibHkgcG9pbnQgb24gaWNvbiBhbmQgbm90IG9uIGJ1dHRvbiBkaXZcbiAqICAgLi4uIG5nLWNsaWNrPVwiTG9ja0NoYW5uZWwoJGV2ZW50KVxuICAgICB2YXIgdGFyZ2V0PSBhbmd1bGFyLmVsZW1lbnQoZXZlbnQuY3VycmVudFRhcmdldCk7XG4gICAgIHZhciBidXR0b249IEpRZW11LkZpbmRJblBhcmVudCAodGFyZ2V0LCAnZGl2Jyk7XG4gKiBcbiAqL1xuXG5cbihmdW5jdGlvbiAoKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuXG5cbiAgICAgICAgICBcbiAgICAvLyBfYWxsIG1vZHVsZXMgb25seSByZWZlcmVuY2UgZGVwZW5kZW5jaWVzXG4gICAgYW5ndWxhci5tb2R1bGUoJ0pRdWVyeUVtdScsIFtdKVxuXG4gICAgICAgICAgICAvLyBGYWN0b3J5IGlzIGEgc2luZ2xldG9uIGFuZCBzaGFyZSBpdHMgY29udGV4dCB3aXRoaW4gYWxsIGluc3RhbmNlcy5cbiAgICAgICAgICAgIC5mYWN0b3J5KCdKUWVtdScsIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICAgIHZhciBGaW5kSW5QYXJlbnQgPSBmdW5jdGlvbiAoZWxlbWVudCwgc2VsZWN0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudCA9IGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzZWFyY2ggPSBzZWxlY3Rvci50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAocGFyZW50WzBdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VhcmNoID09PSBwYXJlbnRbMF0udGFnTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9ICAvLyBIVE1MRGl2RWxlbWVudCBwcm9wZXJ0aWVzXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHZhciAgRmluZEJ5VGFnPSBmdW5jdGlvbiAoZWxlbWVudCwgdGFnLCBzZWxlY3Rvcikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2VhcmNoID0gc2VsZWN0b3IudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHR5cGUgICA9IHRhZy50b0xvd2VyQ2FzZSgpKyBcIk5hbWVcIjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNoaWxkcmVuID0gZWxlbWVudC5jaGlsZHJlbigpO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY2hpbGRyZW5bMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWFyY2ggPT09IGNoaWxkcmVuWzBdW3R5cGVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSAgLy8gSFRNTERpdkVsZW1lbnQgcHJvcGVydGllc1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4gPSBjaGlsZHJlbi5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHZhciAgRmluZEJ5Q2xhc3M9IGZ1bmN0aW9uIChlbGVtZW50LCBzZWxlY3Rvcikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2VhcmNoID0gc2VsZWN0b3IudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNoaWxkcmVuID0gZWxlbWVudC5jaGlsZHJlbigpO1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY2hpbGRyZW5bMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZHJlbi5oYXNDbGFzcyhzZWFyY2gpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSAgLy8gSFRNTERpdkVsZW1lbnQgcHJvcGVydGllc1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4gPSBjaGlsZHJlbi5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdmFyIG15TWV0aG9kcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgRmluZEluUGFyZW50OiBGaW5kSW5QYXJlbnQsXG4gICAgICAgICAgICAgICAgICAgIEZpbmRCeVRhZzogRmluZEJ5VGFnLFxuICAgICAgICAgICAgICAgICAgICBGaW5kQnlDbGFzczogRmluZEJ5Q2xhc3NcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG15TWV0aG9kcztcbiAgICAgICAgICAgIH0pO1xuXG59KSgpOyIsInZhciBmb3VuZGF0aW9uUm91dGVzID0gW3tcIm5hbWVcIjpcIkRhc2hib2FyZFwiLFwidXJsXCI6XCIvZGFzaGJvYXJkXCIsXCJjb250cm9sbGVyXCI6XCJEYXNoYm9hcmRDb250cm9sbGVyIGFzIGN0cmxcIixcImFuaW1hdGlvbkluXCI6XCJzbGlkZUluUmlnaHRcIixcInBhdGhcIjpcInBhZ2VzL0Rhc2hib2FyZC9EYXNoYm9hcmQuaHRtbFwifV07IFxuIiwiKGZ1bmN0aW9uICgpIHtcbiAgICAndXNlIHN0cmljdCc7XG5cbiAgICAvLyBfYWxsIG1vZHVsZXMgb25seSByZWZlcmVuY2UgZGVwZW5kZW5jaWVzXG4gICAgYW5ndWxhci5tb2R1bGUoJ0FwcENvbmZpZycsIFtdKVxuICAgIFxuICAgICAgICAgICAgLy8gRmFjdG9yeSBpcyBhIHNpbmdsZXRvbiBhbmQgc2hhcmUgaXRzIGNvbnRleHQgd2l0aGluIGFsbCBpbnN0YW5jZXMuXG4gICAgICAgICAgICAuZmFjdG9yeSgnQXBwQ29uZmlnJywgZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2cgKFwiVVJMPVwiKyAkbG9jYXRpb24udXJsKCkgKyBcIiBRdWVyeT1cIiArIGxvY2F0aW9uLmhyZWYrIFwiIHdpbmRvdz1cIiArIGRvY3VtZW50LnJlZmVycmVyKTtcblxuICAgICAgICAgICAgICAgIHZhciBteUNvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIHBhdGhzOiB7IC8vIFdhcm5pbmcgcGF0aHMgc2hvdWxkIGVuZCB3aXRoIC9cbiAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlIDogJ2ltYWdlcy8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbnMgOiAnaW1hZ2VzL2ljb25zLycsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdmF0YXI6ICdpbWFnZXMvYXZhdGFycy8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW8gOiAnaW1hZ2VzL2F1ZGlvLycsXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBsaSA6ICdpbWFnZXMvYXBwbGkvJ1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgbXlhcGk6IHsgLy8gV2FybmluZyBwYXRocyBzaG91bGQgZW5kIHdpdGggL1xuICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA6ICcvYXBpL215cGx1Z2luL3h4eHgnXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBzZXNzaW9uOiB7IC8vIFRob3NlIGRhdGEgYXJlIHVwZGF0ZWQgYnkgc2Vzc2lvbiBzZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZSAgOiAnL2FwaS90b2tlbi9jcmVhdGUnLFxuICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoIDogJy9hcGkvdG9rZW4vcmVmcmVzaCcsXG4gICAgICAgICAgICAgICAgICAgICAgIGNoZWNrICAgOiAnL2FwaS90b2tlbi9jaGVjaycsXG4gICAgICAgICAgICAgICAgICAgICAgIHJlc2V0ICAgOiAnL2FwaS90b2tlbi9yZXNldCcsXG4gICAgICAgICAgICAgICAgICAgICAgIHBpbmcgICAgOiAnL2FwaS90b2tlbi9jaGVjaycsXG4gICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWwgOiAnMTIzNDU2Nzg5JywgIC8vIHR5cGljYWwgZGV2IGluaXRpYWwgdG9rZW5cbiAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCA6IDM2MDAsICAgICAgICAgLy8gdGltZW91dCBpcyB1cGRhdGVkIGNsaWVudCBzZXNzaW4gY29udGV4dCBjcmVhdGlvblxuICAgICAgICAgICAgICAgICAgICAgICBwaW5ncmF0ZTogNjAsICAgICAgICAgICAvLyBQaW5nIHJhdGUgdG8gY2hlY2sgaWYgc2VydmVyIGlzIHN0aWxsIGFsaXZlXG4gICAgICAgICAgICAgICAgICAgICAgIHV1aWQgICAgOiAnJywgICAgICAgICAgIC8vIHV1aWQgbWFwIHdpdGggY29va2llIG9yIGxvbmcgdGVybSBzZXNzaW9uIGFjY2VzcyBrZXlcbiAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gICA6ICcnICAgICAgICAgICAgLy8gd2lsbCBiZSByZXR1cm5lZCBmcm9tIGF1dGhlbnRpY2F0aW9uICAgIFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBteUNvbmZpZztcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIC8vIEZhY3RvcnkgaXMgYSBzaW5nbGV0b24gYW5kIHNoYXJlIGl0cyBjb250ZXh0IHdpdGhpbiBhbGwgaW5zdGFuY2VzLlxuICAgICAgICAgICAgLmZhY3RvcnkoJ0FwcENhbGwnLCBbXCIkaHR0cFwiLCBcIkFwcENvbmZpZ1wiLCBmdW5jdGlvbiAoJGh0dHAsIEFwcENvbmZpZykge1xuICAgICAgICAgICAgICAgIHZhciBteUNhbGxzID0ge1xuICAgICAgICAgICAgICAgICAgICBnZXQgOiBmdW5jdGlvbihwbHVnaW4sIGFjdGlvbiwgcXVlcnksIGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeS50b2tlbiA9IEFwcENvbmZpZy5zZXNzaW9uLnRva2VuOyAvLyBhZGQgdG9rZW4gdG8gcHJvdmlkZWQgcXVlcnkgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICRodHRwLmdldCgnL2FwaS8nICsgcGx1Z2luICsgJy8nICsgYWN0aW9uICwge3BhcmFtczogcXVlcnl9KS50aGVuIChjYWxsYmFjaywgY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJldHVybiBteUNhbGxzO1xuICAgICAgICAgICAgfV0pO1xuICAgIFxuIFxufSkoKTsiLCIoZnVuY3Rpb24oKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICBhbmd1bGFyLm1vZHVsZSgnQUZCY2xpZW50JywgWyAvLyBXYXJuaW5nOiBBcHBuYW1lIHNob3VsZCBmaXQgd2l0aCBndWxwZmlsZS5qcyAmIGluZGV4Lmh0bWxcbiAgICAndWkucm91dGVyJyxcbiAgICAnbmdBbmltYXRlJyxcblxuICAgIC8vZm91bmRhdGlvblxuICAgICdmb3VuZGF0aW9uJyxcbiAgICAnZm91bmRhdGlvbi5keW5hbWljUm91dGluZycsXG4gICAgJ2ZvdW5kYXRpb24uZHluYW1pY1JvdXRpbmcuYW5pbWF0aW9ucycsXG4gICAgXG4gICAgLy8gZXh0ZXJuYWwgY29tcG9uZW50c1xuICAgICd1aS1ub3RpZmljYXRpb24nLFxuICAgIFxuICAgIC8vIEFwcGxpY2F0aW9uIENvbXBvbmVudHNcbiAgICAnQXBwQ29uZmlnJyxcbiAgICAnSlF1ZXJ5RW11JyxcbiAgICAnRGFzaGJvYXJkTW9kdWxlJyxcbiAgICAnVXBsb2FkRmlsZXMnLFxuICAgICdMaW5rQnV0dG9uJyxcbiAgICAnVG9rZW5SZWZyZXNoJyxcbiAgICAnUmFuZ2VTbGlkZXInLFxuICAgICdNb2RhbE5vdGlmaWNhdGlvbidcbiAgXSlcbiAgICAuY29uZmlnKGNvbmZpZylcbiAgICAucnVuKHJ1bilcbiAgO1xuXG4gIGNvbmZpZy4kaW5qZWN0ID0gWyckdXJsUm91dGVyUHJvdmlkZXInLCAnJGxvY2F0aW9uUHJvdmlkZXInXTtcbiAgXG4gIGNvbnNvbGUubG9nIChcIioqKmxvY2F0aW9uPVwiICsgd2luZG93LmxvY2F0aW9uICsgXCIgc2VhcmNoXCIgKyB3aW5kb3cuc2VhcmNoKTtcblxuICBmdW5jdGlvbiBjb25maWcoJHVybFByb3ZpZGVyLCAkbG9jYXRpb25Qcm92aWRlciwgQXBwQ29uZmlnKSB7XG4gICAgJHVybFByb3ZpZGVyLm90aGVyd2lzZSgnL2Rhc2hib2FyZCcpO1xuXG4gICAgLy8gaHR0cHM6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvZXJyb3IvJGxvY2F0aW9uL25vYmFzZVxuICAgICRsb2NhdGlvblByb3ZpZGVyLmh0bWw1TW9kZSh0cnVlKS5oYXNoUHJlZml4KCchJyk7XG4gICAgXG4gIH1cblxuICBmdW5jdGlvbiBydW4oKSB7XG4gICAgRmFzdENsaWNrLmF0dGFjaChkb2N1bWVudC5ib2R5KTtcbiAgfVxuICBcbi8vIEZvbmRhdGlvbi1hcHAudGVtcGxhdGUgaXMgbm90IGluY2x1ZGVkIGNvcnJlY3RseSBieSBndWxwIFxuLy8gSW5jbHVkZSBoZXJlIG1pc3NpbmcgdGVtcGxhdGVzIGZyb20gZm91bmRhdGlvbi1hcHBzL2Rpc3QvanMvZm91bmRhdGlvbi1hcHBzLXRlbXBsYXRlcy5qc1xuYW5ndWxhci5tb2R1bGUoJ2ZvdW5kYXRpb24nKS5ydW4oWyckdGVtcGxhdGVDYWNoZScsIGZ1bmN0aW9uKCR0ZW1wbGF0ZUNhY2hlKSB7XG4gICR0ZW1wbGF0ZUNhY2hlLnB1dCgnY29tcG9uZW50cy9tb2RhbC9tb2RhbC5odG1sJyxcbiAgICAnPGRpdlxcbicgK1xuICAgICcgIGNsYXNzPVwibW9kYWwtb3ZlcmxheVwiXFxuJyArXG4gICAgJyAgbmctY2xpY2s9XCJoaWRlT3ZlcmxheSgpXCI+XFxuJyArXG4gICAgJyAgPGFzaWRlXFxuJyArXG4gICAgJyAgICBjbGFzcz1cIm1vZGFsXCJcXG4nICtcbiAgICAnICAgIG5nLWNsaWNrPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1wiXFxuJyArXG4gICAgJyAgICBuZy10cmFuc2NsdWRlPlxcbicgK1xuICAgICcgIDwvYXNpZGU+XFxuJyArXG4gICAgJzwvZGl2PlxcbicgK1xuICAgICcnKTtcbn1dKTtcblxuY29uc29sZS5sb2cgKFwib3BhPUFGQmNsaWVudCBMb2FkZWRcIik7XG59KSgpO1xuIiwiKGZ1bmN0aW9uKCkge2FuZ3VsYXIubW9kdWxlKCdBRkJjbGllbnQnKS5ydW4oWyckdGVtcGxhdGVDYWNoZScsIGZ1bmN0aW9uKCR0ZW1wbGF0ZUNhY2hlKSB7JHRlbXBsYXRlQ2FjaGUucHV0KCdwYWdlcy9EYXNoYm9hcmQvRGFzaGJvYXJkLmh0bWwnLFxuICAgICc8aDM+PGltZyBjbGFzcz1cImxvZ29cIiBzcmM9XCJpbWFnZXMvbG9nby90cmlza2VsX2lvdF9iemh4MjUwLnBuZ1wiIGFsdD1cIklvVC5iemggTG9nb1wiIHN0eWxlPVwiaGVpZ2h0OjE1MHB4XCI+IEFwcGxpY2F0aW9uIEZyYW1ld29yayBNYW5hZ2VyIFNpbXBsZSBDbGllbnQ8L2gzPjxkaXYgY2xhc3M9XCJidXR0b24tYm94IGJveC1jb250ZW50XCI+PGFwcGxpLWJ1dHRvbiBuZy1yZXBlYXQ9XCJhcHBsaUlEIGluIGN0cmwuYXBwbGlJRHNcIiBzdG9yZT1cImN0cmwuYXBwbGlTdG9yZVwiIGhhbmRsZT1cInt7YXBwbGlJRH19XCIgY2FsbGJhY2s9XCJjdHJsLkFwcGxpQ0JcIj48L2FwcGxpLWJ1dHRvbj48dXBsb2FkLWFwcGxpIGNsYXNzPVwiaWJ6LXJpZ2h0XCIgbGFiZWw9XCJVcGxvYWRcIiBpY29uPVwiZmktdXBsb2FkXCIgcG9zdHVybD1cIi9hcGkvcG9zdC91cGxvYWQtYXBwbGlcIiBjYWxsYmFjaz1cImN0cmwuRmlsZVVwbG9hZGVkXCIgdGl0bGU9XCJVcGxvYWQgQUdMIEFwcFwiPjwvdXBsb2FkLWFwcGxpPjwvZGl2PjxkaXYgY2xhc3M9XCJtZXNzYWdlLWJveCBib3gtY29udGVudCB2ZXJ0aWNhbCBncmlkLWZyYW1lXCI+PGRpdiBjbGFzcz1cInJlc3BvbnNlXCI+PHNwYW4gY2xhc3M9XCJncmlkLWNvbnRlbnQgbm9zY3JvbGwgcmVxIHt7Y3RybC5zdGF0dXN9fVwiPnJlcT0ge3tjdHJsLnJlcXVlc3R9fTwvc3Bhbj4gPHNwYW4gY2xhc3M9XCJncmlkLWNvbnRlbnQgbm9zY3JvbGwgcmVzIHt7Y3RybC5zdGF0dXN9fVwiPnJlcz0ge3tjdHJsLnJlc3BvbnNlfX08L3NwYW4+IDxzcGFuIGNsYXNzPVwiZ3JpZC1jb250ZW50IG5vc2Nyb2xsIHN0YXR1cyB7e2N0cmwuc3RhdHVzfX1cIj5zdGF0dXM9IHt7Y3RybC5lcnJjb2RlfX08L3NwYW4+PC9kaXY+PC9kaXY+PHRva2VuLXJlZnJlc2ggYXV0b2xvZz1cInRydWVcIiBjYWxsYmFjaz1cImN0cmwuQXV0b1N0YXJ0XCI+PC90b2tlbi1yZWZyZXNoPicpO31dKTtcbn0pKCk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0= -- cgit 1.2.3-korg