mailgun.js 10.2.3 → 10.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/Classes/InboxPlacements/AttributesClient.d.ts +10 -0
  3. package/Classes/InboxPlacements/FiltersClient.d.ts +9 -0
  4. package/Classes/InboxPlacements/Results/InboxPlacementsResultsClient.d.ts +20 -0
  5. package/Classes/InboxPlacements/Results/InboxPlacementsResultsClient.ts +18 -0
  6. package/Classes/InboxPlacements/Results/InboxPlacementsResultsSharing.ts +10 -0
  7. package/Classes/InboxPlacements/Results/InboxPlacementsResultsSharingClient.d.ts +14 -0
  8. package/Classes/InboxPlacements/SeedsLists/AttributesClient.d.ts +10 -0
  9. package/Classes/InboxPlacements/SeedsLists/FiltersClient.d.ts +8 -0
  10. package/Classes/InboxPlacements/SeedsLists/SeedsListsClient.d.ts +21 -0
  11. package/Classes/InboxPlacements/inboxPlacements.d.ts +13 -0
  12. package/Classes/InboxPlacements/providers/InboxPlacementsProviders.d.ts +10 -0
  13. package/Classes/MailgunClient.d.ts +2 -1
  14. package/Interfaces/InboxPlacements/AttributesClient.d.ts +5 -0
  15. package/Interfaces/InboxPlacements/FiltersClient.d.ts +4 -0
  16. package/Interfaces/InboxPlacements/InboxPlacementsClient.d.ts +10 -0
  17. package/Interfaces/InboxPlacements/Results/InboxPlacementsResults.d.ts +13 -0
  18. package/Interfaces/InboxPlacements/Results/InboxPlacementsResultsClient.d.ts +8 -0
  19. package/Interfaces/InboxPlacements/Results/InboxPlacementsResultsSharing.d.ts +5 -0
  20. package/Interfaces/InboxPlacements/SeedsLists/AttributesClient.d.ts +5 -0
  21. package/Interfaces/InboxPlacements/SeedsLists/FiltersClient.d.ts +4 -0
  22. package/Interfaces/InboxPlacements/SeedsLists/SeedsListsClient.d.ts +12 -0
  23. package/Interfaces/InboxPlacements/index.d.ts +6 -0
  24. package/Interfaces/InboxPlacements/providers/InboxPlacementsProviders.d.ts +4 -0
  25. package/Interfaces/MailgunClient/IMailgunClient.d.ts +2 -0
  26. package/Interfaces/index.d.ts +1 -0
  27. package/README.md +972 -2
  28. package/Types/Domains/Domains.d.ts +1 -1
  29. package/Types/InboxPlacements/Attributes.d.ts +21 -0
  30. package/Types/InboxPlacements/Filters.d.ts +18 -0
  31. package/Types/InboxPlacements/InboxPlacements.d.ts +22 -0
  32. package/Types/InboxPlacements/InboxPlacementsClient.d.ts +0 -0
  33. package/Types/InboxPlacements/Results/InboxPlacementsResults.d.ts +152 -0
  34. package/Types/InboxPlacements/Results/InboxPlacementsResultsSharing.d.ts +27 -0
  35. package/Types/InboxPlacements/SeedsLists/SeedsLists.d.ts +137 -0
  36. package/Types/InboxPlacements/index.d.ts +7 -0
  37. package/Types/InboxPlacements/providers/InboxPlacementsProviders.d.ts +23 -0
  38. package/mailgun.node.js +2 -2
  39. package/mailgun.node.js.LICENSE.txt +1 -1
  40. package/mailgun.web.js +2 -2
  41. package/mailgun.web.js.LICENSE.txt +1 -1
  42. package/package.json +2 -2
  43. package/version.md +1 -1
package/mailgun.web.js CHANGED
@@ -1,3 +1,3 @@
1
1
  /*! For license information please see mailgun.web.js.LICENSE.txt */
2
- define((()=>(()=>{var t={5205:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(t,e,r){this.name=t.name,this.require_tls=t.require_tls,this.skip_verification=t.skip_verification,this.state=t.state,this.wildcard=t.wildcard,this.spam_action=t.spam_action,this.created_at=t.created_at,this.smtp_password=t.smtp_password,this.smtp_login=t.smtp_login,this.type=t.type,this.receiving_dns_records=e||null,this.sending_dns_records=r||null;var n=["id","is_disabled","web_prefix","web_scheme"].reduce((function(e,r){return r in t&&(e[r]=t[r]),e}),{});Object.assign(this,n)};e.default=r},8127:function(t,e,r){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},n.apply(this,arguments)},o=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var i=o(r(4078)),s=o(r(3757)),a=o(r(5205)),u=function(){function t(t,e,r,n){this.request=t,this.domainCredentials=e,this.domainTemplates=r,this.domainTags=n}return t.prototype._handleBoolValues=function(t){var e=t,r=Object.keys(e).reduce((function(t,r){var n=r;if("boolean"==typeof e[n]){var o=e[n];t[n]="true"===o.toString()?"true":"false"}return t}),{});return n(n({},t),r)},t.prototype._parseMessage=function(t){return t.body},t.prototype.parseDomainList=function(t){return t.body&&t.body.items?t.body.items.map((function(t){return new a.default(t)})):[]},t.prototype._parseDomain=function(t){return new a.default(t.body.domain,t.body.receiving_dns_records,t.body.sending_dns_records)},t.prototype._parseTrackingSettings=function(t){return t.body.tracking},t.prototype._parseTrackingUpdate=function(t){return t.body},t.prototype.list=function(t){var e=this;return this.request.get("/v3/domains",t).then((function(t){return e.parseDomainList(t)}))},t.prototype.get=function(t){var e=this;return this.request.get("/v3/domains/".concat(t)).then((function(t){return e._parseDomain(t)}))},t.prototype.create=function(t){var e=this,r=this._handleBoolValues(t);return this.request.postWithFD("/v3/domains",r).then((function(t){return e._parseDomain(t)}))},t.prototype.update=function(t,e){var r=this,n=this._handleBoolValues(e);return this.request.putWithFD("/v3/domains/".concat(t),n).then((function(t){return r._parseDomain(t)}))},t.prototype.verify=function(t){var e=this;return this.request.put("/v3/domains/".concat(t,"/verify")).then((function(t){return e._parseDomain(t)}))},t.prototype.destroy=function(t){var e=this;return this.request.delete("/v3/domains/".concat(t)).then((function(t){return e._parseMessage(t)}))},t.prototype.getConnection=function(t){return this.request.get("/v3/domains/".concat(t,"/connection")).then((function(t){return t})).then((function(t){return t.body.connection}))},t.prototype.updateConnection=function(t,e){return this.request.put("/v3/domains/".concat(t,"/connection"),e).then((function(t){return t})).then((function(t){return t.body}))},t.prototype.getTracking=function(t){return this.request.get((0,i.default)("/v3/domains",t,"tracking")).then(this._parseTrackingSettings)},t.prototype.updateTracking=function(t,e,r){var n=this;if("boolean"==typeof(null==r?void 0:r.active))throw s.default.getUserDataError("Received boolean value for active property",'Property "active" must contain string value.');return this.request.putWithFD((0,i.default)("/v3/domains",t,"tracking",e),r).then((function(t){return n._parseTrackingUpdate(t)}))},t.prototype.getIps=function(t){return this.request.get((0,i.default)("/v3/domains",t,"ips")).then((function(t){var e;return null===(e=null==t?void 0:t.body)||void 0===e?void 0:e.items}))},t.prototype.assignIp=function(t,e){return this.request.postWithFD((0,i.default)("/v3/domains",t,"ips"),{ip:e})},t.prototype.deleteIp=function(t,e){return this.request.delete((0,i.default)("/v3/domains",t,"ips",e))},t.prototype.linkIpPool=function(t,e){return this.request.postWithFD((0,i.default)("/v3/domains",t,"ips"),{pool_id:e})},t.prototype.unlinkIpPoll=function(t,e){var r="";if(e.pool_id&&e.ip)throw s.default.getUserDataError("Too much data for replacement","Please specify either pool_id or ip (not both)");return e.pool_id?r="?pool_id=".concat(e.pool_id):e.ip&&(r="?ip=".concat(e.ip)),this.request.delete((0,i.default)("/v3/domains",t,"ips","ip_pool",r))},t.prototype.updateDKIMAuthority=function(t,e){return this.request.put("/v3/domains/".concat(t,"/dkim_authority"),{},{query:"self=".concat(e.self)}).then((function(t){return t})).then((function(t){return t.body}))},t.prototype.updateDKIMSelector=function(t,e){return this.request.put("/v3/domains/".concat(t,"/dkim_selector"),{},{query:"dkim_selector=".concat(e.dkimSelector)}).then((function(t){return t}))},t.prototype.updateWebPrefix=function(t,e){return this.request.put("/v3/domains/".concat(t,"/web_prefix"),{},{query:"web_prefix=".concat(e.webPrefix)}).then((function(t){return t}))},t}();e.default=u},254:function(t,e,r){"use strict";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var o=n(r(4078)),i=function(){function t(t){this.request=t,this.baseRoute="/v3/domains/"}return t.prototype._parseDomainCredentialsList=function(t){return{items:t.body.items,totalCount:t.body.total_count}},t.prototype._parseMessageResponse=function(t){return{status:t.status,message:t.body.message}},t.prototype._parseDeletedResponse=function(t){return{status:t.status,message:t.body.message,spec:t.body.spec}},t.prototype.list=function(t,e){var r=this;return this.request.get((0,o.default)(this.baseRoute,t,"/credentials"),e).then((function(t){return r._parseDomainCredentialsList(t)}))},t.prototype.create=function(t,e){var r=this;return this.request.postWithFD("".concat(this.baseRoute).concat(t,"/credentials"),e).then((function(t){return r._parseMessageResponse(t)}))},t.prototype.update=function(t,e,r){var n=this;return this.request.putWithFD("".concat(this.baseRoute).concat(t,"/credentials/").concat(e),r).then((function(t){return n._parseMessageResponse(t)}))},t.prototype.destroy=function(t,e){var r=this;return this.request.delete("".concat(this.baseRoute).concat(t,"/credentials/").concat(e)).then((function(t){return r._parseDeletedResponse(t)}))},t}();e.default=i},5160:function(t,e,r){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},i.apply(this,arguments)},s=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},a=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}},u=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.DomainTagStatistic=e.DomainTag=void 0;var c=u(r(4078)),l=u(r(3709)),f=function(t){this.tag=t.tag,this.description=t.description,this["first-seen"]=new Date(t["first-seen"]),this["last-seen"]=new Date(t["last-seen"])};e.DomainTag=f;var p=function(t){this.tag=t.body.tag,this.description=t.body.description,this.start=new Date(t.body.start),this.end=new Date(t.body.end),this.resolution=t.body.resolution,this.stats=t.body.stats.map((function(t){return i(i({},t),{time:new Date(t.time)})}))};e.DomainTagStatistic=p;var d=function(t){function e(e){var r=t.call(this,e)||this;return r.request=e,r.baseRoute="/v3/",r}return o(e,t),e.prototype.parseList=function(t){var e={};return e.items=t.body.items.map((function(t){return new f(t)})),e.pages=this.parsePageLinks(t,"?","tag"),e.status=t.status,e},e.prototype._parseTagStatistic=function(t){return new p(t)},e.prototype.list=function(t,e){return s(this,void 0,void 0,(function(){return a(this,(function(r){return[2,this.requestListWithPages((0,c.default)(this.baseRoute,t,"/tags"),e)]}))}))},e.prototype.get=function(t,e){return this.request.get((0,c.default)(this.baseRoute,t,"/tags",e)).then((function(t){return new f(t.body)}))},e.prototype.update=function(t,e,r){return this.request.put((0,c.default)(this.baseRoute,t,"/tags",e),r).then((function(t){return t.body}))},e.prototype.destroy=function(t,e){return this.request.delete("".concat(this.baseRoute).concat(t,"/tags/").concat(e)).then((function(t){return{message:t.body.message,status:t.status}}))},e.prototype.statistic=function(t,e,r){var n=this;return this.request.get((0,c.default)(this.baseRoute,t,"/tags",e,"stats"),r).then((function(t){return n._parseTagStatistic(t)}))},e.prototype.countries=function(t,e){return this.request.get((0,c.default)(this.baseRoute,t,"/tags",e,"stats/aggregates/countries")).then((function(t){return t.body}))},e.prototype.providers=function(t,e){return this.request.get((0,c.default)(this.baseRoute,t,"/tags",e,"stats/aggregates/providers")).then((function(t){return t.body}))},e.prototype.devices=function(t,e){return this.request.get((0,c.default)(this.baseRoute,t,"/tags",e,"stats/aggregates/devices")).then((function(t){return t.body}))},e}(l.default);e.default=d},6229:function(t,e,r){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},i.apply(this,arguments)},s=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},a=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}},u=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.DomainTemplateItem=void 0;var c=u(r(4078)),l=u(r(3709)),f=function(t){this.name=t.name,this.description=t.description,this.createdAt=t.createdAt?new Date(t.createdAt):"",this.createdBy=t.createdBy,this.id=t.id,t.version&&(this.version=t.version,t.version.createdAt&&(this.version.createdAt=new Date(t.version.createdAt))),t.versions&&t.versions.length&&(this.versions=t.versions.map((function(t){var e=i({},t);return e.createdAt=new Date(t.createdAt),e})))};e.DomainTemplateItem=f;var p=function(t){function e(e){var r=t.call(this,e)||this;return r.request=e,r.baseRoute="/v3/",r}return o(e,t),e.prototype.parseCreationResponse=function(t){return new f(t.body.template)},e.prototype.parseCreationVersionResponse=function(t){var e={};return e.status=t.status,e.message=t.body.message,t.body&&t.body.template&&(e.template=new f(t.body.template)),e},e.prototype.parseMutationResponse=function(t){var e={};return e.status=t.status,e.message=t.body.message,t.body&&t.body.template&&(e.templateName=t.body.template.name),e},e.prototype.parseNotificationResponse=function(t){var e={};return e.status=t.status,e.message=t.body.message,e},e.prototype.parseMutateTemplateVersionResponse=function(t){var e={};return e.status=t.status,e.message=t.body.message,t.body.template&&(e.templateName=t.body.template.name,e.templateVersion={tag:t.body.template.version.tag}),e},e.prototype.parseList=function(t){var e={};return e.items=t.body.items.map((function(t){return new f(t)})),e.pages=this.parsePageLinks(t,"?","p"),e.status=t.status,e},e.prototype.parseListTemplateVersions=function(t){var e={};return e.template=new f(t.body.template),e.pages=this.parsePageLinks(t,"?","p"),e},e.prototype.list=function(t,e){return s(this,void 0,void 0,(function(){return a(this,(function(r){return[2,this.requestListWithPages((0,c.default)(this.baseRoute,t,"/templates"),e)]}))}))},e.prototype.get=function(t,e,r){return this.request.get((0,c.default)(this.baseRoute,t,"/templates/",e),r).then((function(t){return new f(t.body.template)}))},e.prototype.create=function(t,e){var r=this;return this.request.postWithFD((0,c.default)(this.baseRoute,t,"/templates"),e).then((function(t){return r.parseCreationResponse(t)}))},e.prototype.update=function(t,e,r){var n=this;return this.request.putWithFD((0,c.default)(this.baseRoute,t,"/templates/",e),r).then((function(t){return n.parseMutationResponse(t)}))},e.prototype.destroy=function(t,e){var r=this;return this.request.delete((0,c.default)(this.baseRoute,t,"/templates/",e)).then((function(t){return r.parseMutationResponse(t)}))},e.prototype.destroyAll=function(t){var e=this;return this.request.delete((0,c.default)(this.baseRoute,t,"/templates")).then((function(t){return e.parseNotificationResponse(t)}))},e.prototype.createVersion=function(t,e,r){var n=this;return this.request.postWithFD((0,c.default)(this.baseRoute,t,"/templates/",e,"/versions"),r).then((function(t){return n.parseCreationVersionResponse(t)}))},e.prototype.getVersion=function(t,e,r){return this.request.get((0,c.default)(this.baseRoute,t,"/templates/",e,"/versions/",r)).then((function(t){return new f(t.body.template)}))},e.prototype.updateVersion=function(t,e,r,n){var o=this;return this.request.putWithFD((0,c.default)(this.baseRoute,t,"/templates/",e,"/versions/",r),n).then((function(t){return o.parseMutateTemplateVersionResponse(t)}))},e.prototype.destroyVersion=function(t,e,r){var n=this;return this.request.delete((0,c.default)(this.baseRoute,t,"/templates/",e,"/versions/",r)).then((function(t){return n.parseMutateTemplateVersionResponse(t)}))},e.prototype.listVersions=function(t,e,r){var n=this;return this.request.get((0,c.default)(this.baseRoute,t,"/templates",e,"/versions"),r).then((function(t){return n.parseListTemplateVersions(t)}))},e}(l.default);e.default=p},1691:function(t,e,r){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},s=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}},a=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var u=a(r(4078)),c=function(t){function e(e){var r=t.call(this,e)||this;return r.request=e,r}return o(e,t),e.prototype.parseList=function(t){var e={};return e.items=t.body.items,e.pages=this.parsePageLinks(t,"/"),e.status=t.status,e},e.prototype.get=function(t,e){return i(this,void 0,void 0,(function(){return s(this,(function(r){return[2,this.requestListWithPages((0,u.default)("/v3",t,"events"),e)]}))}))},e}(a(r(3709)).default);e.default=c},7238:function(t,e){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},r.apply(this,arguments)},n=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},o=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}};Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t){this.request=t}return t.prototype.list=function(){var t=this;return this.request.get("/v1/ip_pools").then((function(e){return t.parseIpPoolsResponse(e)}))},t.prototype.create=function(t){return n(this,void 0,void 0,(function(){var e;return o(this,(function(n){switch(n.label){case 0:return[4,this.request.postWithFD("/v1/ip_pools",t)];case 1:return e=n.sent(),[2,r({status:e.status},e.body)]}}))}))},t.prototype.update=function(t,e){return n(this,void 0,void 0,(function(){var n;return o(this,(function(o){switch(o.label){case 0:return[4,this.request.patchWithFD("/v1/ip_pools/".concat(t),e)];case 1:return n=o.sent(),[2,r({status:n.status},n.body)]}}))}))},t.prototype.delete=function(t,e){return n(this,void 0,void 0,(function(){var n;return o(this,(function(o){switch(o.label){case 0:return[4,this.request.delete("/v1/ip_pools/".concat(t),e)];case 1:return n=o.sent(),[2,r({status:n.status},n.body)]}}))}))},t.prototype.parseIpPoolsResponse=function(t){return r({status:t.status},t.body)},t}();e.default=i},9874:function(t,e){"use strict";var r=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},n=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}};Object.defineProperty(e,"__esModule",{value:!0});var o=function(){function t(t){this.request=t}return t.prototype.list=function(t){return r(this,void 0,void 0,(function(){var e;return n(this,(function(r){switch(r.label){case 0:return[4,this.request.get("/v3/ips",t)];case 1:return e=r.sent(),[2,this.parseIpsResponse(e)]}}))}))},t.prototype.get=function(t){return r(this,void 0,void 0,(function(){var e;return n(this,(function(r){switch(r.label){case 0:return[4,this.request.get("/v3/ips/".concat(t))];case 1:return e=r.sent(),[2,this.parseIpsResponse(e)]}}))}))},t.prototype.parseIpsResponse=function(t){return t.body},t}();e.default=o},5558:function(t,e,r){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},n.apply(this,arguments)},o=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var i=o(r(7028)),s=o(r(8127)),a=o(r(1691)),u=o(r(8165)),c=o(r(1481)),l=o(r(815)),f=o(r(2011)),p=o(r(7917)),d=o(r(5937)),h=o(r(9874)),y=o(r(7238)),b=o(r(507)),v=o(r(2382)),_=o(r(254)),m=o(r(2537)),g=o(r(6229)),w=o(r(5160)),O=o(r(1880)),j=function(){function t(t,e){var r=n({},t);if(r.url||(r.url="https://api.mailgun.net"),!r.username)throw new Error('Parameter "username" is required');if(!r.key)throw new Error('Parameter "key" is required');this.request=new i.default(r,e);var o=new v.default(this.request),j=new _.default(this.request),P=new g.default(this.request),S=new w.default(this.request),M=new m.default(this.request);this.domains=new s.default(this.request,j,P,S),this.webhooks=new l.default(this.request),this.events=new a.default(this.request),this.stats=new u.default(this.request),this.suppressions=new c.default(this.request),this.messages=new f.default(this.request),this.routes=new p.default(this.request),this.ips=new h.default(this.request),this.ip_pools=new y.default(this.request),this.lists=new b.default(this.request,o),this.validate=new d.default(this.request,M),this.subaccounts=new O.default(this.request)}return t.prototype.setSubaccount=function(t){var e;null===(e=this.request)||void 0===e||e.setSubaccountHeader(t)},t.prototype.resetSubaccount=function(){var t;null===(t=this.request)||void 0===t||t.resetSubaccountHeader()},t}();e.default=j},2382:function(t,e,r){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},i.apply(this,arguments)},s=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},a=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}},u=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var c=function(t){function e(e){var r=t.call(this,e)||this;return r.request=e,r.baseRoute="/v3/lists",r}return o(e,t),e.prototype.checkAndUpdateData=function(t){var e=i({},t);return"object"==typeof t.vars&&(e.vars=JSON.stringify(e.vars)),"boolean"==typeof t.subscribed&&(e.subscribed=t.subscribed?"yes":"no"),e},e.prototype.parseList=function(t){var e={};return e.items=t.body.items,e.pages=this.parsePageLinks(t,"?","address"),e},e.prototype.listMembers=function(t,e){return s(this,void 0,void 0,(function(){return a(this,(function(r){return[2,this.requestListWithPages("".concat(this.baseRoute,"/").concat(t,"/members/pages"),e)]}))}))},e.prototype.getMember=function(t,e){return this.request.get("".concat(this.baseRoute,"/").concat(t,"/members/").concat(e)).then((function(t){return t.body.member}))},e.prototype.createMember=function(t,e){var r=this.checkAndUpdateData(e);return this.request.postWithFD("".concat(this.baseRoute,"/").concat(t,"/members"),r).then((function(t){return t.body.member}))},e.prototype.createMembers=function(t,e){var r={members:Array.isArray(e.members)?JSON.stringify(e.members):e.members,upsert:e.upsert};return this.request.postWithFD("".concat(this.baseRoute,"/").concat(t,"/members.json"),r).then((function(t){return t.body}))},e.prototype.updateMember=function(t,e,r){var n=this.checkAndUpdateData(r);return this.request.putWithFD("".concat(this.baseRoute,"/").concat(t,"/members/").concat(e),n).then((function(t){return t.body.member}))},e.prototype.destroyMember=function(t,e){return this.request.delete("".concat(this.baseRoute,"/").concat(t,"/members/").concat(e)).then((function(t){return t.body}))},e}(u(r(3709)).default);e.default=c},507:function(t,e,r){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},i.apply(this,arguments)},s=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},a=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}},u=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var c=function(t){function e(e,r){var n=t.call(this,e)||this;return n.request=e,n.baseRoute="/v3/lists",n.members=r,n}return o(e,t),e.prototype.parseValidationResult=function(t,e){return{status:t,validationResult:i(i({},e),{created_at:new Date(1e3*e.created_at)})}},e.prototype.parseList=function(t){var e={};return e.items=t.body.items,e.pages=this.parsePageLinks(t,"?","address"),e.status=t.status,e},e.prototype.list=function(t){return s(this,void 0,void 0,(function(){return a(this,(function(e){return[2,this.requestListWithPages("".concat(this.baseRoute,"/pages"),t)]}))}))},e.prototype.get=function(t){return this.request.get("".concat(this.baseRoute,"/").concat(t)).then((function(t){return t.body.list}))},e.prototype.create=function(t){return this.request.postWithFD(this.baseRoute,t).then((function(t){return t.body.list}))},e.prototype.update=function(t,e){return this.request.putWithFD("".concat(this.baseRoute,"/").concat(t),e).then((function(t){return t.body.list}))},e.prototype.destroy=function(t){return this.request.delete("".concat(this.baseRoute,"/").concat(t)).then((function(t){return t.body}))},e.prototype.validate=function(t){return this.request.post("".concat(this.baseRoute,"/").concat(t,"/validate"),{}).then((function(t){return i({status:t.status},t.body)}))},e.prototype.validationResult=function(t){var e=this;return this.request.get("".concat(this.baseRoute,"/").concat(t,"/validate")).then((function(t){return e.parseValidationResult(t.status,t.body)}))},e.prototype.cancelValidation=function(t){return this.request.delete("".concat(this.baseRoute,"/").concat(t,"/validate")).then((function(t){return{status:t.status,message:t.body.message}}))},e}(u(r(3709)).default);e.default=c},2011:function(t,e,r){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},n.apply(this,arguments)},o=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var i=o(r(3757)),s=function(){function t(t){this.request=t}return t.prototype.prepareBooleanValues=function(t){var e=new Set(["o:testmode","t:text","o:dkim","o:tracking","o:tracking-clicks","o:tracking-opens","o:require-tls","o:skip-verification"]);if(!t||0===Object.keys(t).length)throw i.default.getUserDataError("Message data object can not be empty","Message data object can not be empty");return Object.keys(t).reduce((function(r,n){return e.has(n)&&"boolean"==typeof t[n]?r[n]=t[n]?"yes":"no":r[n]=t[n],r}),{})},t.prototype._parseResponse=function(t){return n({status:t.status},t.body)},t.prototype.create=function(t,e){if(e.message)return this.request.postWithFD("/v3/".concat(t,"/messages.mime"),e).then(this._parseResponse);var r=this.prepareBooleanValues(e);return this.request.postWithFD("/v3/".concat(t,"/messages"),r).then(this._parseResponse)},t}();e.default=s},7917:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t){this.request=t}return t.prototype.list=function(t){return this.request.get("/v3/routes",t).then((function(t){return t.body.items}))},t.prototype.get=function(t){return this.request.get("/v3/routes/".concat(t)).then((function(t){return t.body.route}))},t.prototype.create=function(t){return this.request.postWithFD("/v3/routes",t).then((function(t){return t.body.route}))},t.prototype.update=function(t,e){return this.request.putWithFD("/v3/routes/".concat(t),e).then((function(t){return t.body}))},t.prototype.destroy=function(t){return this.request.delete("/v3/routes/".concat(t)).then((function(t){return t.body}))},t}();e.default=r},8165:function(t,e,r){"use strict";var n=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;o<i;o++)!n&&o in e||(n||(n=Array.prototype.slice.call(e,0,o)),n[o]=e[o]);return t.concat(n||Array.prototype.slice.call(e))},o=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var i=o(r(4078)),s=o(r(7669)),a=function(){function t(t,e){void 0===e&&(e=console),this.request=t,this.logger=e}return t.prototype.convertDateToUTC=function(t,e){return this.logger.warn('Date:"'.concat(e,'" was auto-converted to UTC time zone.\nValue "').concat(e.toUTCString(),'" will be used for request.\nConsider using sting type for property "').concat(t,'" to avoid auto-converting')),[t,e.toUTCString()]},t.prototype.prepareSearchParams=function(t){var e=this,r=[];return"object"==typeof t&&Object.keys(t).length&&(r=Object.entries(t).reduce((function(t,r){var o=r[0],i=r[1];if(Array.isArray(i)&&i.length){var s=i.map((function(t){return[o,t]}));return n(n([],t,!0),s,!0)}return i instanceof Date?(t.push(e.convertDateToUTC(o,i)),t):("string"==typeof i&&t.push([o,i]),t)}),[])),r},t.prototype.parseStats=function(t){return new s.default(t.body)},t.prototype.getDomain=function(t,e){var r=this.prepareSearchParams(e);return this.request.get((0,i.default)("/v3",t,"stats/total"),r).then(this.parseStats)},t.prototype.getAccount=function(t){var e=this.prepareSearchParams(t);return this.request.get("/v3/stats/total",e).then(this.parseStats)},t}();e.default=a},7669:function(t,e){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},r.apply(this,arguments)};Object.defineProperty(e,"__esModule",{value:!0});var n=function(t){this.start=new Date(t.start),this.end=new Date(t.end),this.resolution=t.resolution,this.stats=t.stats.map((function(t){var e=r({},t);return e.time=new Date(t.time),e}))};e.default=n},1880:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t){this.request=t}return t.prototype.list=function(t){return this.request.get("/v5/accounts/subaccounts",t).then((function(t){return t.body}))},t.prototype.get=function(t){return this.request.get("/v5/accounts/subaccounts/".concat(t)).then((function(t){return t.body}))},t.prototype.create=function(t){return this.request.postWithFD("/v5/accounts/subaccounts",{name:t}).then((function(t){return t.body}))},t.prototype.enable=function(t){return this.request.post("/v5/accounts/subaccounts/".concat(t,"/enable")).then((function(t){return t.body}))},t.prototype.disable=function(t){return this.request.post("/v5/accounts/subaccounts/".concat(t,"/disable")).then((function(t){return t.body}))},t.SUBACCOUNT_HEADER="X-Mailgun-On-Behalf-Of",t}();e.default=r},7002:function(t,e,r){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var s=r(8089),a=function(t){function e(e){var r=t.call(this,s.SuppressionModels.BOUNCES)||this;return r.address=e.address,r.code=+e.code,r.error=e.error,r.created_at=new Date(e.created_at),r}return o(e,t),e}(i(r(9013)).default);e.default=a},9601:function(t,e,r){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var s=r(8089),a=function(t){function e(e){var r=t.call(this,s.SuppressionModels.COMPLAINTS)||this;return r.address=e.address,r.created_at=new Date(e.created_at),r}return o(e,t),e}(i(r(9013)).default);e.default=a},9013:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(t){this.type=t};e.default=r},1481:function(t,e,r){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},s=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}},a=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;o<i;o++)!n&&o in e||(n||(n=Array.prototype.slice.call(e,0,o)),n[o]=e[o]);return t.concat(n||Array.prototype.slice.call(e))},u=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var c=u(r(4078)),l=u(r(3757)),f=u(r(3709)),p=u(r(7002)),d=u(r(9601)),h=u(r(8093)),y=u(r(4804)),b={headers:{"Content-Type":"application/json"}},v=function(t){function e(e){var r=t.call(this,e)||this;return r.request=e,r.models={bounces:p.default,complaints:d.default,unsubscribes:h.default,whitelists:y.default},r}return o(e,t),e.prototype.parseList=function(t,e){var r,n={};return n.items=(null===(r=t.body.items)||void 0===r?void 0:r.map((function(t){return new e(t)})))||[],n.pages=this.parsePageLinks(t,"?","address"),n.status=t.status,n},e.prototype._parseItem=function(t,e){return new e(t)},e.prototype.createWhiteList=function(t,e,r){if(r)throw l.default.getUserDataError("Data property should be an object","Whitelist's creation process does not support multiple creations. Data property should be an object");return this.request.postWithFD((0,c.default)("v3",t,"whitelists"),e).then(this.prepareResponse)},e.prototype.createUnsubscribe=function(t,e){if(Array.isArray(e)){if(e.some((function(t){return t.tag})))throw l.default.getUserDataError("Tag property should not be used for creating multiple unsubscribes.","Tag property can be used only if one unsubscribe provided as second argument of create method. Please use tags instead.");return this.request.post((0,c.default)("v3",t,"unsubscribes"),JSON.stringify(e),b).then(this.prepareResponse)}if(null==e?void 0:e.tags)throw l.default.getUserDataError("Tags property should not be used for creating one unsubscribe.","Tags property can be used if you provides an array of unsubscribes as second argument of create method. Please use tag instead");if(Array.isArray(e.tag))throw l.default.getUserDataError("Tag property can not be an array","Please use array of unsubscribes as second argument of create method to be able to provide few tags");return this.request.postWithFD((0,c.default)("v3",t,"unsubscribes"),e).then(this.prepareResponse)},e.prototype.getModel=function(t){if(t in this.models)return this.models[t];throw l.default.getUserDataError("Unknown type value","Type may be only one of [bounces, complaints, unsubscribes, whitelists]")},e.prototype.prepareResponse=function(t){return{message:t.body.message,type:t.body.type||"",value:t.body.value||"",status:t.status}},e.prototype.list=function(t,e,r){return i(this,void 0,void 0,(function(){var n;return s(this,(function(o){return n=this.getModel(e),[2,this.requestListWithPages((0,c.default)("v3",t,e),r,n)]}))}))},e.prototype.get=function(t,e,r){var n=this,o=this.getModel(e);return this.request.get((0,c.default)("v3",t,e,encodeURIComponent(r))).then((function(t){return n._parseItem(t.body,o)}))},e.prototype.create=function(t,e,r){var n;this.getModel(e);var o=Array.isArray(r);return"whitelists"===e?this.createWhiteList(t,r,o):"unsubscribes"===e?this.createUnsubscribe(t,r):(n=o?a([],r,!0):[r],this.request.post((0,c.default)("v3",t,e),JSON.stringify(n),b).then(this.prepareResponse))},e.prototype.destroy=function(t,e,r){return this.getModel(e),this.request.delete((0,c.default)("v3",t,e,encodeURIComponent(r))).then((function(t){return{message:t.body.message,value:t.body.value||"",address:t.body.address||"",status:t.status}}))},e}(f.default);e.default=v,t.exports=v},8093:function(t,e,r){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var s=r(8089),a=function(t){function e(e){var r=t.call(this,s.SuppressionModels.UNSUBSCRIBES)||this;return r.address=e.address,r.tags=e.tags,r.created_at=new Date(e.created_at),r}return o(e,t),e}(i(r(9013)).default);e.default=a},4804:function(t,e,r){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var s=r(8089),a=function(t){function e(e){var r=t.call(this,s.SuppressionModels.WHITELISTS)||this;return r.value=e.value,r.reason=e.reason,r.createdAt=new Date(e.createdAt),r}return o(e,t),e}(i(r(9013)).default);e.default=a},2537:function(t,e,r){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},i.apply(this,arguments)},s=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},a=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}},u=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.MultipleValidationJob=void 0;var c=u(r(3709)),l=u(r(4886)),f=u(r(3757)),p=function(t,e){var r,n;this.createdAt=new Date(t.created_at),this.id=t.id,this.quantity=t.quantity,this.recordsProcessed=t.records_processed,this.status=t.status,this.responseStatusCode=e,t.download_url&&(this.downloadUrl={csv:null===(r=t.download_url)||void 0===r?void 0:r.csv,json:null===(n=t.download_url)||void 0===n?void 0:n.json}),t.summary&&(this.summary={result:{catchAll:t.summary.result.catch_all,deliverable:t.summary.result.deliverable,doNotSend:t.summary.result.do_not_send,undeliverable:t.summary.result.undeliverable,unknown:t.summary.result.unknown},risk:{high:t.summary.risk.high,low:t.summary.risk.low,medium:t.summary.risk.medium,unknown:t.summary.risk.unknown}})};e.MultipleValidationJob=p;var d=function(t){function e(e){var r=t.call(this)||this;return r.request=e,r.attachmentsHandler=new l.default,r}return o(e,t),e.prototype.handleResponse=function(t){return i({status:t.status},null==t?void 0:t.body)},e.prototype.parseList=function(t){var e={};return e.jobs=t.body.jobs.map((function(e){return new p(e,t.status)})),e.pages=this.parsePageLinks(t,"?","pivot"),e.total=t.body.total,e.status=t.status,e},e.prototype.list=function(t){return s(this,void 0,void 0,(function(){return a(this,(function(e){return[2,this.requestListWithPages("/v4/address/validate/bulk",t)]}))}))},e.prototype.get=function(t){return s(this,void 0,void 0,(function(){var e;return a(this,(function(r){switch(r.label){case 0:return[4,this.request.get("/v4/address/validate/bulk/".concat(t))];case 1:return e=r.sent(),[2,new p(e.body,e.status)]}}))}))},e.prototype.convertToExpectedShape=function(t){return this.attachmentsHandler.isBuffer(t.file)?{multipleValidationFile:t.file}:"string"==typeof t.file?{multipleValidationFile:{data:t.file}}:(this.attachmentsHandler.isStream(t.file),{multipleValidationFile:t.file})},e.prototype.create=function(t,e){return s(this,void 0,void 0,(function(){var r,n;return a(this,(function(o){switch(o.label){case 0:if(!e||!e.file)throw f.default.getUserDataError('"file" property expected.','Make sure second argument has "file" property.');return r=this.convertToExpectedShape(e),[4,this.request.postWithFD("/v4/address/validate/bulk/".concat(t),r)];case 1:return n=o.sent(),[2,this.handleResponse(n)]}}))}))},e.prototype.destroy=function(t){return s(this,void 0,void 0,(function(){var e;return a(this,(function(r){switch(r.label){case 0:return[4,this.request.delete("/v4/address/validate/bulk/".concat(t))];case 1:return e=r.sent(),[2,this.handleResponse(e)]}}))}))},e}(c.default);e.default=d},5937:function(t,e){"use strict";var r=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},n=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}};Object.defineProperty(e,"__esModule",{value:!0});var o=function(){function t(t,e){this.request=t,this.multipleValidation=e}return t.prototype.get=function(t){return r(this,void 0,void 0,(function(){var e;return n(this,(function(r){switch(r.label){case 0:return e={address:t},[4,this.request.get("/v4/address/validate",e)];case 1:return[2,r.sent().body]}}))}))},t}();e.default=o},815:function(t,e,r){"use strict";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.Webhook=void 0;var o=n(r(4078)),i=function(t,e,r){this.id=t,this.url=e,this.urls=r};e.Webhook=i;var s=function(){function t(t){this.request=t}return t.prototype._parseWebhookList=function(t){return t.body.webhooks},t.prototype._parseWebhookWithID=function(t){return function(e){var r,n=null===(r=null==e?void 0:e.body)||void 0===r?void 0:r.webhook,o=null==n?void 0:n.url,s=null==n?void 0:n.urls;return o||(o=s&&s.length?s[0]:void 0),s&&0!==s.length||!o||(s=[o]),new i(t,o,s)}},t.prototype._parseWebhookTest=function(t){return{code:t.body.code,message:t.body.message}},t.prototype.list=function(t,e){return this.request.get((0,o.default)("/v3/domains",t,"webhooks"),e).then(this._parseWebhookList)},t.prototype.get=function(t,e){return this.request.get((0,o.default)("/v3/domains",t,"webhooks",e)).then(this._parseWebhookWithID(e))},t.prototype.create=function(t,e,r,n){return void 0===n&&(n=!1),n?this.request.putWithFD((0,o.default)("/v3/domains",t,"webhooks",e,"test"),{url:r}).then(this._parseWebhookTest):this.request.postWithFD((0,o.default)("/v3/domains",t,"webhooks"),{id:e,url:r}).then(this._parseWebhookWithID(e))},t.prototype.update=function(t,e,r){return this.request.putWithFD((0,o.default)("/v3/domains",t,"webhooks",e),{url:r}).then(this._parseWebhookWithID(e))},t.prototype.destroy=function(t,e){return this.request.delete((0,o.default)("/v3/domains",t,"webhooks",e)).then(this._parseWebhookWithID(e))},t}();e.default=s},4886:function(t,e,r){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},n.apply(this,arguments)},o=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var i=o(r(3757)),s=function(){function t(t,e){this._stream=t,this.size=e}return t.prototype.stream=function(){return this._stream},Object.defineProperty(t.prototype,Symbol.toStringTag,{get:function(){return"Blob"},enumerable:!1,configurable:!0}),t}(),a=function(){function t(){}return t.prototype.getAttachmentOptions=function(t){var e=t.filename,r=t.contentType,o=t.knownLength;return n(n(n({},e?{filename:e}:{filename:"file"}),r&&{contentType:r}),o&&{knownLength:o})},t.prototype.getFileInfo=function(t){var e=t.name,r=t.type,n=t.size;return this.getAttachmentOptions({filename:e,contentType:r,knownLength:n})},t.prototype.getCustomFileInfo=function(t){var e=t.filename,r=t.contentType,n=t.knownLength;return this.getAttachmentOptions({filename:e,contentType:r,knownLength:n})},t.prototype.getBufferInfo=function(t){var e=t.byteLength;return this.getAttachmentOptions({filename:"file",contentType:"",knownLength:e})},t.prototype.isStream=function(t){return"object"==typeof t&&"function"==typeof t.pipe},t.prototype.isCustomFile=function(t){return"object"==typeof t&&!!t.data},t.prototype.isBrowserFile=function(t){return"object"==typeof t&&(!!t.name||"undefined"!=typeof Blob&&t instanceof Blob)},t.prototype.isBuffer=function(t){return"undefined"!=typeof Buffer&&Buffer.isBuffer(t)},t.prototype.getAttachmentInfo=function(t){var e=this.isBrowserFile(t),r=this.isCustomFile(t);if(!("string"==typeof t)){if(e)return this.getFileInfo(t);if("undefined"!=typeof Buffer&&Buffer.isBuffer(t))return this.getBufferInfo(t);if(r)return this.getCustomFileInfo(t)}return{filename:"file",contentType:void 0,knownLength:void 0}},t.prototype.convertToFDexpectedShape=function(t){var e,r=this.isStream(t),n=this.isBrowserFile(t),o=this.isCustomFile(t);if(r||"string"==typeof t||n||this.isBuffer(t))e=t;else{if(!o)throw i.default.getUserDataError("Unknown attachment type ".concat(typeof t),'The "attachment" property expects either Buffer, Blob, or String.\n Also, It is possible to provide an object that has the property "data" with a value that is equal to one of the types counted before.\n Additionally, you may use an array to send more than one attachment.');e=t.data}return e},t.prototype.getBlobFromStream=function(t,e){return new s(t,e)},t}();e.default=a},3757:function(t,e){"use strict";var r,n=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},r(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0});var o=function(t){function e(e){var r=e.status,n=e.statusText,o=e.message,i=e.body,s=void 0===i?{}:i,a=this,u="",c="";return"string"==typeof s?u=s:(u=(null==s?void 0:s.message)||"",c=(null==s?void 0:s.error)||""),(a=t.call(this)||this).stack="",a.status=r,a.message=o||c||n||"",a.details=u,a.type="MailgunAPIError",a}return n(e,t),e.getUserDataError=function(t,e){return new this({status:400,statusText:t,body:{message:e}})},e}(Error);e.default=o},9465:function(t,e,r){"use strict";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var o=n(r(3757)),i=n(r(4886)),s=function(){function t(t){this.FormDataConstructor=t,this.fileKeys=["attachment","inline","multipleValidationFile"],this.attachmentsHandler=new i.default}return t.prototype.createFormData=function(t){var e=this;if(!t)throw new Error("Please provide data object");return Object.keys(t).filter((function(e){return t[e]})).reduce((function(r,n){if(e.fileKeys.includes(n)){var i=t[n];if(e.isMessageAttachment(i))return e.addFilesToFD(n,i,r),r;throw o.default.getUserDataError("Unknown value ".concat(t[n]," with type ").concat(typeof t[n],' for property "').concat(n,'"'),'The key "'.concat(n,'" should have type of Buffer, Stream, File, or String '))}if("message"===n){var s=t[n];if(!s||!e.isMIME(s))throw o.default.getUserDataError('Unknown data type for "'.concat(n,'" property'),"The mime data should have type of Buffer, String or Blob");return e.addMimeDataToFD(n,s,r),r}return e.addCommonPropertyToFD(n,t[n],r),r}),new this.FormDataConstructor)},t.prototype.addMimeDataToFD=function(t,e,r){if("string"!=typeof e){if(this.isFormDataPackage(r))r.append(t,e,{filename:"MimeMessage"});else if(void 0!==typeof Blob){var n=r;if(e instanceof Blob)return void n.append(t,e,"MimeMessage");if(this.attachmentsHandler.isBuffer(e)){var o=new Blob([e]);n.append(t,o,"MimeMessage")}}}else r.append(t,e)},t.prototype.isMIME=function(t){return"string"==typeof t||"undefined"!=typeof Blob&&t instanceof Blob||this.attachmentsHandler.isBuffer(t)||"undefined"!=typeof ReadableStream&&t instanceof ReadableStream},t.prototype.isFormDataPackage=function(t){return"object"==typeof t&&null!==t&&"function"==typeof t.getHeaders},t.prototype.isMessageAttachment=function(t){var e=this;return this.attachmentsHandler.isCustomFile(t)||"string"==typeof t||"undefined"!=typeof File&&t instanceof File||"undefined"!=typeof Blob&&t instanceof Blob||this.attachmentsHandler.isBuffer(t)||this.attachmentsHandler.isStream(t)||Array.isArray(t)&&t.every((function(r){return e.attachmentsHandler.isCustomFile(r)||"undefined"!=typeof File&&r instanceof File||"undefined"!=typeof Blob&&t instanceof Blob||e.attachmentsHandler.isBuffer(r)||e.attachmentsHandler.isStream(r)}))},t.prototype.addFilesToFD=function(t,e,r){var n=this,o=function(t,e,o){var i="multipleValidationFile"===t?"file":t,s=n.attachmentsHandler.convertToFDexpectedShape(e),a=n.attachmentsHandler.getAttachmentInfo(e);if(n.isFormDataPackage(o)){var u=o,c="string"==typeof s?Buffer.from(s):s;u.append(i,c,a)}else if(void 0!==typeof Blob){var l=r;if("string"==typeof s||n.attachmentsHandler.isBuffer(s)){var f=new Blob([s]);return void l.append(i,f,a.filename)}if(s instanceof Blob)return void l.append(i,s,a.filename);if(n.attachmentsHandler.isStream(s)){var p=n.attachmentsHandler.getBlobFromStream(s,a.knownLength);l.set(i,p,a.filename)}}};Array.isArray(e)?e.forEach((function(e){o(t,e,r)})):o(t,e,r)},t.prototype.addCommonPropertyToFD=function(t,e,r){var n=this,i=function(t,e){if(n.isFormDataPackage(r))return"object"==typeof e?(console.warn('The received value is an object. \n"JSON.Stringify" will be used to avoid TypeError \nTo remove this warning: \nConsider switching to built-in FormData or converting the value on your own.\n'),r.append(t,JSON.stringify(e))):r.append(t,e);if("string"==typeof e)return r.append(t,e);if(void 0!==typeof Blob&&e instanceof Blob)return r.append(t,e);throw o.default.getUserDataError("Unknown value type for Form Data. String or Blob expected","Browser compliant FormData allows only string or Blob values for properties that are not attachments.")};Array.isArray(e)?e.forEach((function(e){i(t,e)})):null!=e&&i(t,e)},t}();e.default=s},3709:function(t,e,r){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},n.apply(this,arguments)},o=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},i=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}},s=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var a=s(r(4078)),u=s(r(3757)),c=function(){function t(t){t&&(this.request=t)}return t.prototype.parsePage=function(t,e,r,n){var o=new URL(e).searchParams,i=e&&"string"==typeof e&&e.split(r).pop()||"",s=null;return n&&(s=o.has(n)?o.get(n):void 0),{id:t,page:"?"===r?"?".concat(i):i,iteratorPosition:s,url:e}},t.prototype.parsePageLinks=function(t,e,r){var n=this;return Object.entries(t.body.paging).reduce((function(t,o){var i=o[0],s=o[1];return t[i]=n.parsePage(i,s,e,r),t}),{})},t.prototype.updateUrlAndQuery=function(t,e){var r=t,o=n({},e);return o.page&&(r=(0,a.default)(t,o.page),delete o.page),{url:r,updatedQuery:o}},t.prototype.requestListWithPages=function(t,e,r){return o(this,void 0,void 0,(function(){var n,o,s,a;return i(this,(function(i){switch(i.label){case 0:return n=this.updateUrlAndQuery(t,e),o=n.url,s=n.updatedQuery,this.request?[4,this.request.get(o,s)]:[3,2];case 1:return a=i.sent(),[2,this.parseList(a,r)];case 2:throw new u.default({status:500,statusText:"Request property is empty",body:{message:""}})}}))}))},t}();e.default=c},7028:function(t,e,r){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},n.apply(this,arguments)},o=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),i=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),s=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)"default"!==r&&Object.prototype.hasOwnProperty.call(t,r)&&o(e,t,r);return i(e,t),e},a=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},u=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}},c=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var l=s(r(7501)),f=c(r(4078)),p=s(r(7218)),d=c(r(3757)),h=c(r(9465)),y=c(r(1880)),b=function(){function t(t,e){this.username=t.username,this.key=t.key,this.url=t.url,this.timeout=t.timeout,this.headers=this.makeHeadersFromObject(t.headers),this.formDataBuilder=new h.default(e),this.maxBodyLength=52428800,this.proxy=null==t?void 0:t.proxy}return t.prototype.request=function(t,e,r){var o,i,s;return a(this,void 0,void 0,(function(){var a,c,l,h,y,b,v,_;return u(this,(function(u){switch(u.label){case 0:null==(a=n({},r))||delete a.headers,c=this.joinAndTransformHeaders(r),l=n({},a),(null==a?void 0:a.query)&&Object.getOwnPropertyNames(null==a?void 0:a.query).length>0&&(l.params=new URLSearchParams(a.query),delete l.query),(null==a?void 0:a.body)&&(h=null==a?void 0:a.body,l.data=h,delete l.body),b=(0,f.default)(this.url,e),u.label=1;case 1:return u.trys.push([1,3,,4]),[4,p.default.request(n(n({method:t.toLocaleUpperCase(),timeout:this.timeout,url:b,headers:c},l),{maxBodyLength:this.maxBodyLength,proxy:this.proxy}))];case 2:return y=u.sent(),[3,4];case 3:throw v=u.sent(),_=v,new d.default({status:(null===(o=null==_?void 0:_.response)||void 0===o?void 0:o.status)||400,statusText:(null===(i=null==_?void 0:_.response)||void 0===i?void 0:i.statusText)||_.code,body:(null===(s=null==_?void 0:_.response)||void 0===s?void 0:s.data)||_.message});case 4:return[4,this.getResponseBody(y)];case 5:return[2,u.sent()]}}))}))},t.prototype.getResponseBody=function(t){return a(this,void 0,void 0,(function(){var e;return u(this,(function(r){if(e={body:{},status:null==t?void 0:t.status},"string"==typeof t.data){if("Mailgun Magnificent API"===t.data)throw new d.default({status:400,statusText:"Incorrect url",body:t.data});e.body={message:t.data}}else e.body=t.data;return[2,e]}))}))},t.prototype.joinAndTransformHeaders=function(t){var e=new p.AxiosHeaders,r=l.encode("".concat(this.username,":").concat(this.key));e.setAuthorization("Basic ".concat(r)),e.set(this.headers);var n=t&&t.headers,o=this.makeHeadersFromObject(n);return e.set(o),e},t.prototype.makeHeadersFromObject=function(t){void 0===t&&(t={});var e=new p.AxiosHeaders;return e=Object.entries(t).reduce((function(t,e){var r=e[0],n=e[1];return t.set(r,n),t}),e)},t.prototype.setSubaccountHeader=function(t){var e,r=this.makeHeadersFromObject(n(n({},this.headers),((e={})[y.default.SUBACCOUNT_HEADER]=t,e)));this.headers.set(r)},t.prototype.resetSubaccountHeader=function(){this.headers.delete(y.default.SUBACCOUNT_HEADER)},t.prototype.query=function(t,e,r,o){return this.request(t,e,n({query:r},o))},t.prototype.command=function(t,e,r,o,i){void 0===i&&(i=!0);var s={};i&&(s={"Content-Type":"application/x-www-form-urlencoded"});var a=n(n(n({},s),{body:r}),o);return this.request(t,e,a)},t.prototype.get=function(t,e,r){return this.query("get",t,e,r)},t.prototype.post=function(t,e,r){return this.command("post",t,e,r)},t.prototype.postWithFD=function(t,e){var r=this.formDataBuilder.createFormData(e);return this.command("post",t,r,{headers:{"Content-Type":"multipart/form-data"}},!1)},t.prototype.putWithFD=function(t,e){var r=this.formDataBuilder.createFormData(e);return this.command("put",t,r,{headers:{"Content-Type":"multipart/form-data"}},!1)},t.prototype.patchWithFD=function(t,e){var r=this.formDataBuilder.createFormData(e);return this.command("patch",t,r,{headers:{"Content-Type":"multipart/form-data"}},!1)},t.prototype.put=function(t,e,r){return this.command("put",t,e,r)},t.prototype.delete=function(t,e){return this.command("delete",t,e)},t}();e.default=b},8089:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.YesNo=e.WebhooksIds=e.SuppressionModels=e.Resolution=void 0,function(t){t.HOUR="hour",t.DAY="day",t.MONTH="month"}(e.Resolution||(e.Resolution={})),function(t){t.BOUNCES="bounces",t.COMPLAINTS="complaints",t.UNSUBSCRIBES="unsubscribes",t.WHITELISTS="whitelists"}(e.SuppressionModels||(e.SuppressionModels={})),function(t){t.CLICKED="clicked",t.COMPLAINED="complained",t.DELIVERED="delivered",t.OPENED="opened",t.PERMANENT_FAIL="permanent_fail",t.TEMPORARY_FAIL="temporary_fail",t.UNSUBSCRIBED="unsubscribe"}(e.WebhooksIds||(e.WebhooksIds={})),function(t){t.YES="yes",t.NO="no"}(e.YesNo||(e.YesNo={}))},7471:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},466:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(7471),e)},7647:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},7546:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},1358:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},2236:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},9483:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(7647),e),o(r(7546),e),o(r(1358),e),o(r(2236),e)},4251:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},896:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(4251),e)},9798:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},188:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(9798),e)},7677:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},2685:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(7677),e)},7913:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},1094:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(7913),e)},3446:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},1225:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},2570:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(3446),e),o(r(1225),e)},7104:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},4005:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(7104),e)},6115:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},848:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(6115),e)},4012:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},1574:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},9923:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(4012),e),o(r(1574),e)},3748:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},2220:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(3748),e)},5129:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},157:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},2818:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},504:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},3740:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},2043:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(5129),e),o(r(157),e),o(r(504),e),o(r(3740),e),o(r(2818),e)},6233:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},4826:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},7272:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(6233),e),o(r(4826),e)},1034:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},2955:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(1034),e)},799:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(466),e),o(r(9483),e),o(r(1094),e),o(r(2570),e),o(r(9923),e),o(r(2043),e),o(r(7272),e),o(r(896),e),o(r(2955),e),o(r(4005),e),o(r(848),e),o(r(2685),e),o(r(188),e),o(r(2220),e)},4859:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},7843:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},2755:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},4994:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},643:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},1476:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(7843),e),o(r(4859),e),o(r(2755),e),o(r(4994),e),o(r(643),e)},8011:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},1409:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},3627:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},970:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},2179:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},9543:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(8011),e),o(r(2179),e),o(r(1409),e),o(r(3627),e),o(r(970),e)},8483:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},4385:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(8483),e)},3097:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},720:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(3097),e)},2409:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},5986:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(2409),e)},7666:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},4553:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(7666),e)},5560:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},5810:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},9977:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(5560),e),o(r(5810),e)},9348:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},7313:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(9348),e)},9006:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},5006:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(9006),e)},2144:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},4744:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(2144),e)},9040:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},9700:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(9040),e)},8275:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},5451:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},7935:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},4205:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},4312:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},2267:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(8275),e),o(r(5451),e),o(r(7935),e),o(r(4205),e),o(r(4312),e)},4090:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},202:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},7587:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(4090),e),o(r(202),e)},771:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},8042:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(771),e)},8615:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(1476),e),o(r(9543),e),o(r(4385),e),o(r(720),e),o(r(5986),e),o(r(4553),e),o(r(9977),e),o(r(7313),e),o(r(5006),e),o(r(4744),e),o(r(9700),e),o(r(2267),e),o(r(7587),e),o(r(8042),e)},7530:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),i=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)"default"!==r&&Object.prototype.hasOwnProperty.call(t,r)&&n(e,t,r);return o(e,t),e},s=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)},a=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.Interfaces=e.Enums=void 0;var u=a(r(5558));e.Enums=i(r(8089)),s(r(8615),e),e.Interfaces=i(r(799));var c=function(){function t(t){this.formData=t}return Object.defineProperty(t,"default",{get:function(){return this},enumerable:!1,configurable:!0}),t.prototype.client=function(t){return new u.default(t,this.formData)},t}();e.default=c},7501:function(t,e,r){var n;t=r.nmd(t),function(o){var i=e,s=(t&&t.exports,"object"==typeof r.g&&r.g);s.global!==s&&s.window;var a=function(t){this.message=t};(a.prototype=new Error).name="InvalidCharacterError";var u=function(t){throw new a(t)},c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",l=/[\t\n\f\r ]/g,f={encode:function(t){t=String(t),/[^\0-\xFF]/.test(t)&&u("The string to be encoded contains characters outside of the Latin1 range.");for(var e,r,n,o,i=t.length%3,s="",a=-1,l=t.length-i;++a<l;)e=t.charCodeAt(a)<<16,r=t.charCodeAt(++a)<<8,n=t.charCodeAt(++a),s+=c.charAt((o=e+r+n)>>18&63)+c.charAt(o>>12&63)+c.charAt(o>>6&63)+c.charAt(63&o);return 2==i?(e=t.charCodeAt(a)<<8,r=t.charCodeAt(++a),s+=c.charAt((o=e+r)>>10)+c.charAt(o>>4&63)+c.charAt(o<<2&63)+"="):1==i&&(o=t.charCodeAt(a),s+=c.charAt(o>>2)+c.charAt(o<<4&63)+"=="),s},decode:function(t){var e=(t=String(t).replace(l,"")).length;e%4==0&&(e=(t=t.replace(/==?$/,"")).length),(e%4==1||/[^+a-zA-Z0-9/]/.test(t))&&u("Invalid character: the string to be decoded is not correctly encoded.");for(var r,n,o=0,i="",s=-1;++s<e;)n=c.indexOf(t.charAt(s)),r=o%4?64*r+n:n,o++%4&&(i+=String.fromCharCode(255&r>>(-2*o&6)));return i},version:"1.0.0"};void 0===(n=function(){return f}.call(e,r,e,t))||(t.exports=n)}()},4078:function(t,e,r){var n,o,i;i=function(){function t(t){var e=[];if(0===t.length)return"";if("string"!=typeof t[0])throw new TypeError("Url must be a string. Received "+t[0]);if(t[0].match(/^[^/:]+:\/*$/)&&t.length>1){var r=t.shift();t[0]=r+t[0]}t[0].match(/^file:\/\/\//)?t[0]=t[0].replace(/^([^/:]+):\/*/,"$1:///"):t[0]=t[0].replace(/^([^/:]+):\/*/,"$1://");for(var n=0;n<t.length;n++){var o=t[n];if("string"!=typeof o)throw new TypeError("Url must be a string. Received "+o);""!==o&&(n>0&&(o=o.replace(/^[\/]+/,"")),o=n<t.length-1?o.replace(/[\/]+$/,""):o.replace(/[\/]+$/,"/"),e.push(o))}var i=e.join("/"),s=(i=i.replace(/\/(\?|&|#[^!])/g,"$1")).split("?");return i=s.shift()+(s.length>0?"?":"")+s.join("&")}return function(){return t("object"==typeof arguments[0]?arguments[0]:[].slice.call(arguments))}},t.exports?t.exports=i():void 0===(o="function"==typeof(n=i)?n.call(e,r,e,t):n)||(t.exports=o)},7218:(t,e,r)=>{"use strict";function n(t,e){return function(){return t.apply(e,arguments)}}const{toString:o}=Object.prototype,{getPrototypeOf:i}=Object,s=(a=Object.create(null),t=>{const e=o.call(t);return a[e]||(a[e]=e.slice(8,-1).toLowerCase())});var a;const u=t=>(t=t.toLowerCase(),e=>s(e)===t),c=t=>e=>typeof e===t,{isArray:l}=Array,f=c("undefined");const p=u("ArrayBuffer");const d=c("string"),h=c("function"),y=c("number"),b=t=>null!==t&&"object"==typeof t,v=t=>{if("object"!==s(t))return!1;const e=i(t);return!(null!==e&&e!==Object.prototype&&null!==Object.getPrototypeOf(e)||Symbol.toStringTag in t||Symbol.iterator in t)},_=u("Date"),m=u("File"),g=u("Blob"),w=u("FileList"),O=u("URLSearchParams"),[j,P,S,M]=["ReadableStream","Request","Response","Headers"].map(u);function x(t,e,{allOwnKeys:r=!1}={}){if(null==t)return;let n,o;if("object"!=typeof t&&(t=[t]),l(t))for(n=0,o=t.length;n<o;n++)e.call(null,t[n],n,t);else{const o=r?Object.getOwnPropertyNames(t):Object.keys(t),i=o.length;let s;for(n=0;n<i;n++)s=o[n],e.call(null,t[s],s,t)}}function E(t,e){e=e.toLowerCase();const r=Object.keys(t);let n,o=r.length;for(;o-- >0;)if(n=r[o],e===n.toLowerCase())return n;return null}const R="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:r.g,D=t=>!f(t)&&t!==R;const T=(A="undefined"!=typeof Uint8Array&&i(Uint8Array),t=>A&&t instanceof A);var A;const k=u("HTMLFormElement"),q=(({hasOwnProperty:t})=>(e,r)=>t.call(e,r))(Object.prototype),B=u("RegExp"),C=(t,e)=>{const r=Object.getOwnPropertyDescriptors(t),n={};x(r,((r,o)=>{let i;!1!==(i=e(r,o,t))&&(n[o]=i||r)})),Object.defineProperties(t,n)},F="abcdefghijklmnopqrstuvwxyz",L="0123456789",U={DIGIT:L,ALPHA:F,ALPHA_DIGIT:F+F.toUpperCase()+L};const N=u("AsyncFunction");var I={isArray:l,isArrayBuffer:p,isBuffer:function(t){return null!==t&&!f(t)&&null!==t.constructor&&!f(t.constructor)&&h(t.constructor.isBuffer)&&t.constructor.isBuffer(t)},isFormData:t=>{let e;return t&&("function"==typeof FormData&&t instanceof FormData||h(t.append)&&("formdata"===(e=s(t))||"object"===e&&h(t.toString)&&"[object FormData]"===t.toString()))},isArrayBufferView:function(t){let e;return e="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&p(t.buffer),e},isString:d,isNumber:y,isBoolean:t=>!0===t||!1===t,isObject:b,isPlainObject:v,isReadableStream:j,isRequest:P,isResponse:S,isHeaders:M,isUndefined:f,isDate:_,isFile:m,isBlob:g,isRegExp:B,isFunction:h,isStream:t=>b(t)&&h(t.pipe),isURLSearchParams:O,isTypedArray:T,isFileList:w,forEach:x,merge:function t(){const{caseless:e}=D(this)&&this||{},r={},n=(n,o)=>{const i=e&&E(r,o)||o;v(r[i])&&v(n)?r[i]=t(r[i],n):v(n)?r[i]=t({},n):l(n)?r[i]=n.slice():r[i]=n};for(let t=0,e=arguments.length;t<e;t++)arguments[t]&&x(arguments[t],n);return r},extend:(t,e,r,{allOwnKeys:o}={})=>(x(e,((e,o)=>{r&&h(e)?t[o]=n(e,r):t[o]=e}),{allOwnKeys:o}),t),trim:t=>t.trim?t.trim():t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),stripBOM:t=>(65279===t.charCodeAt(0)&&(t=t.slice(1)),t),inherits:(t,e,r,n)=>{t.prototype=Object.create(e.prototype,n),t.prototype.constructor=t,Object.defineProperty(t,"super",{value:e.prototype}),r&&Object.assign(t.prototype,r)},toFlatObject:(t,e,r,n)=>{let o,s,a;const u={};if(e=e||{},null==t)return e;do{for(o=Object.getOwnPropertyNames(t),s=o.length;s-- >0;)a=o[s],n&&!n(a,t,e)||u[a]||(e[a]=t[a],u[a]=!0);t=!1!==r&&i(t)}while(t&&(!r||r(t,e))&&t!==Object.prototype);return e},kindOf:s,kindOfTest:u,endsWith:(t,e,r)=>{t=String(t),(void 0===r||r>t.length)&&(r=t.length),r-=e.length;const n=t.indexOf(e,r);return-1!==n&&n===r},toArray:t=>{if(!t)return null;if(l(t))return t;let e=t.length;if(!y(e))return null;const r=new Array(e);for(;e-- >0;)r[e]=t[e];return r},forEachEntry:(t,e)=>{const r=(t&&t[Symbol.iterator]).call(t);let n;for(;(n=r.next())&&!n.done;){const r=n.value;e.call(t,r[0],r[1])}},matchAll:(t,e)=>{let r;const n=[];for(;null!==(r=t.exec(e));)n.push(r);return n},isHTMLForm:k,hasOwnProperty:q,hasOwnProp:q,reduceDescriptors:C,freezeMethods:t=>{C(t,((e,r)=>{if(h(t)&&-1!==["arguments","caller","callee"].indexOf(r))return!1;const n=t[r];h(n)&&(e.enumerable=!1,"writable"in e?e.writable=!1:e.set||(e.set=()=>{throw Error("Can not rewrite read-only method '"+r+"'")}))}))},toObjectSet:(t,e)=>{const r={},n=t=>{t.forEach((t=>{r[t]=!0}))};return l(t)?n(t):n(String(t).split(e)),r},toCamelCase:t=>t.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,(function(t,e,r){return e.toUpperCase()+r})),noop:()=>{},toFiniteNumber:(t,e)=>null!=t&&Number.isFinite(t=+t)?t:e,findKey:E,global:R,isContextDefined:D,ALPHABET:U,generateString:(t=16,e=U.ALPHA_DIGIT)=>{let r="";const{length:n}=e;for(;t--;)r+=e[Math.random()*n|0];return r},isSpecCompliantForm:function(t){return!!(t&&h(t.append)&&"FormData"===t[Symbol.toStringTag]&&t[Symbol.iterator])},toJSONObject:t=>{const e=new Array(10),r=(t,n)=>{if(b(t)){if(e.indexOf(t)>=0)return;if(!("toJSON"in t)){e[n]=t;const o=l(t)?[]:{};return x(t,((t,e)=>{const i=r(t,n+1);!f(i)&&(o[e]=i)})),e[n]=void 0,o}}return t};return r(t,0)},isAsyncFn:N,isThenable:t=>t&&(b(t)||h(t))&&h(t.then)&&h(t.catch)};function W(t,e,r,n,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack,this.message=t,this.name="AxiosError",e&&(this.code=e),r&&(this.config=r),n&&(this.request=n),o&&(this.response=o)}I.inherits(W,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:I.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});const H=W.prototype,V={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach((t=>{V[t]={value:t}})),Object.defineProperties(W,V),Object.defineProperty(H,"isAxiosError",{value:!0}),W.from=(t,e,r,n,o,i)=>{const s=Object.create(H);return I.toFlatObject(t,s,(function(t){return t!==Error.prototype}),(t=>"isAxiosError"!==t)),W.call(s,t.message,e,r,n,o),s.cause=t,s.name=t.name,i&&Object.assign(s,i),s};function z(t){return I.isPlainObject(t)||I.isArray(t)}function J(t){return I.endsWith(t,"[]")?t.slice(0,-2):t}function K(t,e,r){return t?t.concat(e).map((function(t,e){return t=J(t),!r&&e?"["+t+"]":t})).join(r?".":""):e}const G=I.toFlatObject(I,{},null,(function(t){return/^is[A-Z]/.test(t)}));function $(t,e,r){if(!I.isObject(t))throw new TypeError("target must be an object");e=e||new FormData;const n=(r=I.toFlatObject(r,{metaTokens:!0,dots:!1,indexes:!1},!1,(function(t,e){return!I.isUndefined(e[t])}))).metaTokens,o=r.visitor||c,i=r.dots,s=r.indexes,a=(r.Blob||"undefined"!=typeof Blob&&Blob)&&I.isSpecCompliantForm(e);if(!I.isFunction(o))throw new TypeError("visitor must be a function");function u(t){if(null===t)return"";if(I.isDate(t))return t.toISOString();if(!a&&I.isBlob(t))throw new W("Blob is not supported. Use a Buffer instead.");return I.isArrayBuffer(t)||I.isTypedArray(t)?a&&"function"==typeof Blob?new Blob([t]):Buffer.from(t):t}function c(t,r,o){let a=t;if(t&&!o&&"object"==typeof t)if(I.endsWith(r,"{}"))r=n?r:r.slice(0,-2),t=JSON.stringify(t);else if(I.isArray(t)&&function(t){return I.isArray(t)&&!t.some(z)}(t)||(I.isFileList(t)||I.endsWith(r,"[]"))&&(a=I.toArray(t)))return r=J(r),a.forEach((function(t,n){!I.isUndefined(t)&&null!==t&&e.append(!0===s?K([r],n,i):null===s?r:r+"[]",u(t))})),!1;return!!z(t)||(e.append(K(o,r,i),u(t)),!1)}const l=[],f=Object.assign(G,{defaultVisitor:c,convertValue:u,isVisitable:z});if(!I.isObject(t))throw new TypeError("data must be an object");return function t(r,n){if(!I.isUndefined(r)){if(-1!==l.indexOf(r))throw Error("Circular reference detected in "+n.join("."));l.push(r),I.forEach(r,(function(r,i){!0===(!(I.isUndefined(r)||null===r)&&o.call(e,r,I.isString(i)?i.trim():i,n,f))&&t(r,n?n.concat(i):[i])})),l.pop()}}(t),e}function X(t){const e={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(t).replace(/[!'()~]|%20|%00/g,(function(t){return e[t]}))}function Q(t,e){this._pairs=[],t&&$(t,this,e)}const Y=Q.prototype;function Z(t){return encodeURIComponent(t).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function tt(t,e,r){if(!e)return t;const n=r&&r.encode||Z,o=r&&r.serialize;let i;if(i=o?o(e,r):I.isURLSearchParams(e)?e.toString():new Q(e,r).toString(n),i){const e=t.indexOf("#");-1!==e&&(t=t.slice(0,e)),t+=(-1===t.indexOf("?")?"?":"&")+i}return t}Y.append=function(t,e){this._pairs.push([t,e])},Y.toString=function(t){const e=t?function(e){return t.call(this,e,X)}:X;return this._pairs.map((function(t){return e(t[0])+"="+e(t[1])}),"").join("&")};var et=class InterceptorManager{constructor(){this.handlers=[]}use(t,e,r){return this.handlers.push({fulfilled:t,rejected:e,synchronous:!!r&&r.synchronous,runWhen:r?r.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){I.forEach(this.handlers,(function(e){null!==e&&t(e)}))}},rt={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},nt={isBrowser:!0,classes:{URLSearchParams:"undefined"!=typeof URLSearchParams?URLSearchParams:Q,FormData:"undefined"!=typeof FormData?FormData:null,Blob:"undefined"!=typeof Blob?Blob:null},protocols:["http","https","file","blob","url","data"]};const ot="undefined"!=typeof window&&"undefined"!=typeof document,it=(st="undefined"!=typeof navigator&&navigator.product,ot&&["ReactNative","NativeScript","NS"].indexOf(st)<0);var st;const at="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts,ut=ot&&window.location.href||"http://localhost";var ct={...Object.freeze({__proto__:null,hasBrowserEnv:ot,hasStandardBrowserWebWorkerEnv:at,hasStandardBrowserEnv:it,origin:ut}),...nt};function lt(t){function e(t,r,n,o){let i=t[o++];if("__proto__"===i)return!0;const s=Number.isFinite(+i),a=o>=t.length;if(i=!i&&I.isArray(n)?n.length:i,a)return I.hasOwnProp(n,i)?n[i]=[n[i],r]:n[i]=r,!s;n[i]&&I.isObject(n[i])||(n[i]=[]);return e(t,r,n[i],o)&&I.isArray(n[i])&&(n[i]=function(t){const e={},r=Object.keys(t);let n;const o=r.length;let i;for(n=0;n<o;n++)i=r[n],e[i]=t[i];return e}(n[i])),!s}if(I.isFormData(t)&&I.isFunction(t.entries)){const r={};return I.forEachEntry(t,((t,n)=>{e(function(t){return I.matchAll(/\w+|\[(\w*)]/g,t).map((t=>"[]"===t[0]?"":t[1]||t[0]))}(t),n,r,0)})),r}return null}const ft={transitional:rt,adapter:["xhr","http","fetch"],transformRequest:[function(t,e){const r=e.getContentType()||"",n=r.indexOf("application/json")>-1,o=I.isObject(t);o&&I.isHTMLForm(t)&&(t=new FormData(t));if(I.isFormData(t))return n?JSON.stringify(lt(t)):t;if(I.isArrayBuffer(t)||I.isBuffer(t)||I.isStream(t)||I.isFile(t)||I.isBlob(t)||I.isReadableStream(t))return t;if(I.isArrayBufferView(t))return t.buffer;if(I.isURLSearchParams(t))return e.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let i;if(o){if(r.indexOf("application/x-www-form-urlencoded")>-1)return function(t,e){return $(t,new ct.classes.URLSearchParams,Object.assign({visitor:function(t,e,r,n){return ct.isNode&&I.isBuffer(t)?(this.append(e,t.toString("base64")),!1):n.defaultVisitor.apply(this,arguments)}},e))}(t,this.formSerializer).toString();if((i=I.isFileList(t))||r.indexOf("multipart/form-data")>-1){const e=this.env&&this.env.FormData;return $(i?{"files[]":t}:t,e&&new e,this.formSerializer)}}return o||n?(e.setContentType("application/json",!1),function(t,e,r){if(I.isString(t))try{return(e||JSON.parse)(t),I.trim(t)}catch(t){if("SyntaxError"!==t.name)throw t}return(r||JSON.stringify)(t)}(t)):t}],transformResponse:[function(t){const e=this.transitional||ft.transitional,r=e&&e.forcedJSONParsing,n="json"===this.responseType;if(I.isResponse(t)||I.isReadableStream(t))return t;if(t&&I.isString(t)&&(r&&!this.responseType||n)){const r=!(e&&e.silentJSONParsing)&&n;try{return JSON.parse(t)}catch(t){if(r){if("SyntaxError"===t.name)throw W.from(t,W.ERR_BAD_RESPONSE,this,null,this.response);throw t}}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:ct.classes.FormData,Blob:ct.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};I.forEach(["delete","get","head","post","put","patch"],(t=>{ft.headers[t]={}}));var pt=ft;const dt=I.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]);const ht=Symbol("internals");function yt(t){return t&&String(t).trim().toLowerCase()}function bt(t){return!1===t||null==t?t:I.isArray(t)?t.map(bt):String(t)}function vt(t,e,r,n,o){return I.isFunction(n)?n.call(this,e,r):(o&&(e=r),I.isString(e)?I.isString(n)?-1!==e.indexOf(n):I.isRegExp(n)?n.test(e):void 0:void 0)}class AxiosHeaders{constructor(t){t&&this.set(t)}set(t,e,r){const n=this;function o(t,e,r){const o=yt(e);if(!o)throw new Error("header name must be a non-empty string");const i=I.findKey(n,o);(!i||void 0===n[i]||!0===r||void 0===r&&!1!==n[i])&&(n[i||e]=bt(t))}const i=(t,e)=>I.forEach(t,((t,r)=>o(t,r,e)));if(I.isPlainObject(t)||t instanceof this.constructor)i(t,e);else if(I.isString(t)&&(t=t.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(t.trim()))i((t=>{const e={};let r,n,o;return t&&t.split("\n").forEach((function(t){o=t.indexOf(":"),r=t.substring(0,o).trim().toLowerCase(),n=t.substring(o+1).trim(),!r||e[r]&&dt[r]||("set-cookie"===r?e[r]?e[r].push(n):e[r]=[n]:e[r]=e[r]?e[r]+", "+n:n)})),e})(t),e);else if(I.isHeaders(t))for(const[e,n]of t.entries())o(n,e,r);else null!=t&&o(e,t,r);return this}get(t,e){if(t=yt(t)){const r=I.findKey(this,t);if(r){const t=this[r];if(!e)return t;if(!0===e)return function(t){const e=Object.create(null),r=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let n;for(;n=r.exec(t);)e[n[1]]=n[2];return e}(t);if(I.isFunction(e))return e.call(this,t,r);if(I.isRegExp(e))return e.exec(t);throw new TypeError("parser must be boolean|regexp|function")}}}has(t,e){if(t=yt(t)){const r=I.findKey(this,t);return!(!r||void 0===this[r]||e&&!vt(0,this[r],r,e))}return!1}delete(t,e){const r=this;let n=!1;function o(t){if(t=yt(t)){const o=I.findKey(r,t);!o||e&&!vt(0,r[o],o,e)||(delete r[o],n=!0)}}return I.isArray(t)?t.forEach(o):o(t),n}clear(t){const e=Object.keys(this);let r=e.length,n=!1;for(;r--;){const o=e[r];t&&!vt(0,this[o],o,t,!0)||(delete this[o],n=!0)}return n}normalize(t){const e=this,r={};return I.forEach(this,((n,o)=>{const i=I.findKey(r,o);if(i)return e[i]=bt(n),void delete e[o];const s=t?function(t){return t.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,((t,e,r)=>e.toUpperCase()+r))}(o):String(o).trim();s!==o&&delete e[o],e[s]=bt(n),r[s]=!0})),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){const e=Object.create(null);return I.forEach(this,((r,n)=>{null!=r&&!1!==r&&(e[n]=t&&I.isArray(r)?r.join(", "):r)})),e}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map((([t,e])=>t+": "+e)).join("\n")}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...e){const r=new this(t);return e.forEach((t=>r.set(t))),r}static accessor(t){const e=(this[ht]=this[ht]={accessors:{}}).accessors,r=this.prototype;function n(t){const n=yt(t);e[n]||(!function(t,e){const r=I.toCamelCase(" "+e);["get","set","has"].forEach((n=>{Object.defineProperty(t,n+r,{value:function(t,r,o){return this[n].call(this,e,t,r,o)},configurable:!0})}))}(r,t),e[n]=!0)}return I.isArray(t)?t.forEach(n):n(t),this}}AxiosHeaders.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),I.reduceDescriptors(AxiosHeaders.prototype,(({value:t},e)=>{let r=e[0].toUpperCase()+e.slice(1);return{get:()=>t,set(t){this[r]=t}}})),I.freezeMethods(AxiosHeaders);var _t=AxiosHeaders;function mt(t,e){const r=this||pt,n=e||r,o=_t.from(n.headers);let i=n.data;return I.forEach(t,(function(t){i=t.call(r,i,o.normalize(),e?e.status:void 0)})),o.normalize(),i}function gt(t){return!(!t||!t.__CANCEL__)}function wt(t,e,r){W.call(this,null==t?"canceled":t,W.ERR_CANCELED,e,r),this.name="CanceledError"}function Ot(t,e,r){const n=r.config.validateStatus;r.status&&n&&!n(r.status)?e(new W("Request failed with status code "+r.status,[W.ERR_BAD_REQUEST,W.ERR_BAD_RESPONSE][Math.floor(r.status/100)-4],r.config,r.request,r)):t(r)}I.inherits(wt,W,{__CANCEL__:!0});var jt=(t,e,r=3)=>{let n=0;const o=function(t,e){t=t||10;const r=new Array(t),n=new Array(t);let o,i=0,s=0;return e=void 0!==e?e:1e3,function(a){const u=Date.now(),c=n[s];o||(o=u),r[i]=a,n[i]=u;let l=s,f=0;for(;l!==i;)f+=r[l++],l%=t;if(i=(i+1)%t,i===s&&(s=(s+1)%t),u-o<e)return;const p=c&&u-c;return p?Math.round(1e3*f/p):void 0}}(50,250);return function(t,e){let r=0;const n=1e3/e;let o=null;return function(){const e=!0===this,i=Date.now();if(e||i-r>n)return o&&(clearTimeout(o),o=null),r=i,t.apply(null,arguments);o||(o=setTimeout((()=>(o=null,r=Date.now(),t.apply(null,arguments))),n-(i-r)))}}((r=>{const i=r.loaded,s=r.lengthComputable?r.total:void 0,a=i-n,u=o(a);n=i;const c={loaded:i,total:s,progress:s?i/s:void 0,bytes:a,rate:u||void 0,estimated:u&&s&&i<=s?(s-i)/u:void 0,event:r,lengthComputable:null!=s};c[e?"download":"upload"]=!0,t(c)}),r)},Pt=ct.hasStandardBrowserEnv?function(){const t=/(msie|trident)/i.test(navigator.userAgent),e=document.createElement("a");let r;function n(r){let n=r;return t&&(e.setAttribute("href",n),n=e.href),e.setAttribute("href",n),{href:e.href,protocol:e.protocol?e.protocol.replace(/:$/,""):"",host:e.host,search:e.search?e.search.replace(/^\?/,""):"",hash:e.hash?e.hash.replace(/^#/,""):"",hostname:e.hostname,port:e.port,pathname:"/"===e.pathname.charAt(0)?e.pathname:"/"+e.pathname}}return r=n(window.location.href),function(t){const e=I.isString(t)?n(t):t;return e.protocol===r.protocol&&e.host===r.host}}():function(){return!0},St=ct.hasStandardBrowserEnv?{write(t,e,r,n,o,i){const s=[t+"="+encodeURIComponent(e)];I.isNumber(r)&&s.push("expires="+new Date(r).toGMTString()),I.isString(n)&&s.push("path="+n),I.isString(o)&&s.push("domain="+o),!0===i&&s.push("secure"),document.cookie=s.join("; ")},read(t){const e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove(t){this.write(t,"",Date.now()-864e5)}}:{write(){},read:()=>null,remove(){}};function Mt(t,e){return t&&!/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)?function(t,e){return e?t.replace(/\/?\/$/,"")+"/"+e.replace(/^\/+/,""):t}(t,e):e}const xt=t=>t instanceof _t?{...t}:t;function Et(t,e){e=e||{};const r={};function n(t,e,r){return I.isPlainObject(t)&&I.isPlainObject(e)?I.merge.call({caseless:r},t,e):I.isPlainObject(e)?I.merge({},e):I.isArray(e)?e.slice():e}function o(t,e,r){return I.isUndefined(e)?I.isUndefined(t)?void 0:n(void 0,t,r):n(t,e,r)}function i(t,e){if(!I.isUndefined(e))return n(void 0,e)}function s(t,e){return I.isUndefined(e)?I.isUndefined(t)?void 0:n(void 0,t):n(void 0,e)}function a(r,o,i){return i in e?n(r,o):i in t?n(void 0,r):void 0}const u={url:i,method:i,data:i,baseURL:s,transformRequest:s,transformResponse:s,paramsSerializer:s,timeout:s,timeoutMessage:s,withCredentials:s,withXSRFToken:s,adapter:s,responseType:s,xsrfCookieName:s,xsrfHeaderName:s,onUploadProgress:s,onDownloadProgress:s,decompress:s,maxContentLength:s,maxBodyLength:s,beforeRedirect:s,transport:s,httpAgent:s,httpsAgent:s,cancelToken:s,socketPath:s,responseEncoding:s,validateStatus:a,headers:(t,e)=>o(xt(t),xt(e),!0)};return I.forEach(Object.keys(Object.assign({},t,e)),(function(n){const i=u[n]||o,s=i(t[n],e[n],n);I.isUndefined(s)&&i!==a||(r[n]=s)})),r}var Rt=t=>{const e=Et({},t);let r,{data:n,withXSRFToken:o,xsrfHeaderName:i,xsrfCookieName:s,headers:a,auth:u}=e;if(e.headers=a=_t.from(a),e.url=tt(Mt(e.baseURL,e.url),t.params,t.paramsSerializer),u&&a.set("Authorization","Basic "+btoa((u.username||"")+":"+(u.password?unescape(encodeURIComponent(u.password)):""))),I.isFormData(n))if(ct.hasStandardBrowserEnv||ct.hasStandardBrowserWebWorkerEnv)a.setContentType(void 0);else if(!1!==(r=a.getContentType())){const[t,...e]=r?r.split(";").map((t=>t.trim())).filter(Boolean):[];a.setContentType([t||"multipart/form-data",...e].join("; "))}if(ct.hasStandardBrowserEnv&&(o&&I.isFunction(o)&&(o=o(e)),o||!1!==o&&Pt(e.url))){const t=i&&s&&St.read(s);t&&a.set(i,t)}return e};var Dt="undefined"!=typeof XMLHttpRequest&&function(t){return new Promise((function(e,r){const n=Rt(t);let o=n.data;const i=_t.from(n.headers).normalize();let s,{responseType:a}=n;function u(){n.cancelToken&&n.cancelToken.unsubscribe(s),n.signal&&n.signal.removeEventListener("abort",s)}let c=new XMLHttpRequest;function l(){if(!c)return;const n=_t.from("getAllResponseHeaders"in c&&c.getAllResponseHeaders());Ot((function(t){e(t),u()}),(function(t){r(t),u()}),{data:a&&"text"!==a&&"json"!==a?c.response:c.responseText,status:c.status,statusText:c.statusText,headers:n,config:t,request:c}),c=null}c.open(n.method.toUpperCase(),n.url,!0),c.timeout=n.timeout,"onloadend"in c?c.onloadend=l:c.onreadystatechange=function(){c&&4===c.readyState&&(0!==c.status||c.responseURL&&0===c.responseURL.indexOf("file:"))&&setTimeout(l)},c.onabort=function(){c&&(r(new W("Request aborted",W.ECONNABORTED,n,c)),c=null)},c.onerror=function(){r(new W("Network Error",W.ERR_NETWORK,n,c)),c=null},c.ontimeout=function(){let t=n.timeout?"timeout of "+n.timeout+"ms exceeded":"timeout exceeded";const e=n.transitional||rt;n.timeoutErrorMessage&&(t=n.timeoutErrorMessage),r(new W(t,e.clarifyTimeoutError?W.ETIMEDOUT:W.ECONNABORTED,n,c)),c=null},void 0===o&&i.setContentType(null),"setRequestHeader"in c&&I.forEach(i.toJSON(),(function(t,e){c.setRequestHeader(e,t)})),I.isUndefined(n.withCredentials)||(c.withCredentials=!!n.withCredentials),a&&"json"!==a&&(c.responseType=n.responseType),"function"==typeof n.onDownloadProgress&&c.addEventListener("progress",jt(n.onDownloadProgress,!0)),"function"==typeof n.onUploadProgress&&c.upload&&c.upload.addEventListener("progress",jt(n.onUploadProgress)),(n.cancelToken||n.signal)&&(s=e=>{c&&(r(!e||e.type?new wt(null,t,c):e),c.abort(),c=null)},n.cancelToken&&n.cancelToken.subscribe(s),n.signal&&(n.signal.aborted?s():n.signal.addEventListener("abort",s)));const f=function(t){const e=/^([-+\w]{1,25})(:?\/\/|:)/.exec(t);return e&&e[1]||""}(n.url);f&&-1===ct.protocols.indexOf(f)?r(new W("Unsupported protocol "+f+":",W.ERR_BAD_REQUEST,t)):c.send(o||null)}))};var Tt=(t,e)=>{let r,n=new AbortController;const o=function(t){if(!r){r=!0,s();const e=t instanceof Error?t:this.reason;n.abort(e instanceof W?e:new wt(e instanceof Error?e.message:e))}};let i=e&&setTimeout((()=>{o(new W(`timeout ${e} of ms exceeded`,W.ETIMEDOUT))}),e);const s=()=>{t&&(i&&clearTimeout(i),i=null,t.forEach((t=>{t&&(t.removeEventListener?t.removeEventListener("abort",o):t.unsubscribe(o))})),t=null)};t.forEach((t=>t&&t.addEventListener&&t.addEventListener("abort",o)));const{signal:a}=n;return a.unsubscribe=s,[a,()=>{i&&clearTimeout(i),i=null}]};const At=function*(t,e){let r=t.byteLength;if(!e||r<e)return void(yield t);let n,o=0;for(;o<r;)n=o+e,yield t.slice(o,n),o=n},kt=(t,e,r,n,o)=>{const i=async function*(t,e,r){for await(const n of t)yield*At(ArrayBuffer.isView(n)?n:await r(String(n)),e)}(t,e,o);let s=0;return new ReadableStream({type:"bytes",async pull(t){const{done:e,value:o}=await i.next();if(e)return t.close(),void n();let a=o.byteLength;r&&r(s+=a),t.enqueue(new Uint8Array(o))},cancel:t=>(n(t),i.return())},{highWaterMark:2})},qt=(t,e)=>{const r=null!=t;return n=>setTimeout((()=>e({lengthComputable:r,total:t,loaded:n})))},Bt="function"==typeof fetch&&"function"==typeof Request&&"function"==typeof Response,Ct=Bt&&"function"==typeof ReadableStream,Ft=Bt&&("function"==typeof TextEncoder?(Lt=new TextEncoder,t=>Lt.encode(t)):async t=>new Uint8Array(await new Response(t).arrayBuffer()));var Lt;const Ut=Ct&&(()=>{let t=!1;const e=new Request(ct.origin,{body:new ReadableStream,method:"POST",get duplex(){return t=!0,"half"}}).headers.has("Content-Type");return t&&!e})(),Nt=Ct&&!!(()=>{try{return I.isReadableStream(new Response("").body)}catch(t){}})(),It={stream:Nt&&(t=>t.body)};var Wt;Bt&&(Wt=new Response,["text","arrayBuffer","blob","formData","stream"].forEach((t=>{!It[t]&&(It[t]=I.isFunction(Wt[t])?e=>e[t]():(e,r)=>{throw new W(`Response type '${t}' is not supported`,W.ERR_NOT_SUPPORT,r)})})));const Ht=async(t,e)=>{const r=I.toFiniteNumber(t.getContentLength());return null==r?(async t=>null==t?0:I.isBlob(t)?t.size:I.isSpecCompliantForm(t)?(await new Request(t).arrayBuffer()).byteLength:I.isArrayBufferView(t)?t.byteLength:(I.isURLSearchParams(t)&&(t+=""),I.isString(t)?(await Ft(t)).byteLength:void 0))(e):r};const Vt={http:null,xhr:Dt,fetch:Bt&&(async t=>{let{url:e,method:r,data:n,signal:o,cancelToken:i,timeout:s,onDownloadProgress:a,onUploadProgress:u,responseType:c,headers:l,withCredentials:f="same-origin",fetchOptions:p}=Rt(t);c=c?(c+"").toLowerCase():"text";let d,h,[y,b]=o||i||s?Tt([o,i],s):[];const v=()=>{!d&&setTimeout((()=>{y&&y.unsubscribe()})),d=!0};let _;try{if(u&&Ut&&"get"!==r&&"head"!==r&&0!==(_=await Ht(l,n))){let t,r=new Request(e,{method:"POST",body:n,duplex:"half"});I.isFormData(n)&&(t=r.headers.get("content-type"))&&l.setContentType(t),r.body&&(n=kt(r.body,65536,qt(_,jt(u)),null,Ft))}I.isString(f)||(f=f?"cors":"omit"),h=new Request(e,{...p,signal:y,method:r.toUpperCase(),headers:l.normalize().toJSON(),body:n,duplex:"half",withCredentials:f});let o=await fetch(h);const i=Nt&&("stream"===c||"response"===c);if(Nt&&(a||i)){const t={};["status","statusText","headers"].forEach((e=>{t[e]=o[e]}));const e=I.toFiniteNumber(o.headers.get("content-length"));o=new Response(kt(o.body,65536,a&&qt(e,jt(a,!0)),i&&v,Ft),t)}c=c||"text";let s=await It[I.findKey(It,c)||"text"](o,t);return!i&&v(),b&&b(),await new Promise(((e,r)=>{Ot(e,r,{data:s,headers:_t.from(o.headers),status:o.status,statusText:o.statusText,config:t,request:h})}))}catch(e){if(v(),e&&"TypeError"===e.name&&/fetch/i.test(e.message))throw Object.assign(new W("Network Error",W.ERR_NETWORK,t,h),{cause:e.cause||e});throw W.from(e,e&&e.code,t,h)}})};I.forEach(Vt,((t,e)=>{if(t){try{Object.defineProperty(t,"name",{value:e})}catch(t){}Object.defineProperty(t,"adapterName",{value:e})}}));const zt=t=>`- ${t}`,Jt=t=>I.isFunction(t)||null===t||!1===t;var Kt=t=>{t=I.isArray(t)?t:[t];const{length:e}=t;let r,n;const o={};for(let i=0;i<e;i++){let e;if(r=t[i],n=r,!Jt(r)&&(n=Vt[(e=String(r)).toLowerCase()],void 0===n))throw new W(`Unknown adapter '${e}'`);if(n)break;o[e||"#"+i]=n}if(!n){const t=Object.entries(o).map((([t,e])=>`adapter ${t} `+(!1===e?"is not supported by the environment":"is not available in the build")));throw new W("There is no suitable adapter to dispatch the request "+(e?t.length>1?"since :\n"+t.map(zt).join("\n"):" "+zt(t[0]):"as no adapter specified"),"ERR_NOT_SUPPORT")}return n};function Gt(t){if(t.cancelToken&&t.cancelToken.throwIfRequested(),t.signal&&t.signal.aborted)throw new wt(null,t)}function $t(t){Gt(t),t.headers=_t.from(t.headers),t.data=mt.call(t,t.transformRequest),-1!==["post","put","patch"].indexOf(t.method)&&t.headers.setContentType("application/x-www-form-urlencoded",!1);return Kt(t.adapter||pt.adapter)(t).then((function(e){return Gt(t),e.data=mt.call(t,t.transformResponse,e),e.headers=_t.from(e.headers),e}),(function(e){return gt(e)||(Gt(t),e&&e.response&&(e.response.data=mt.call(t,t.transformResponse,e.response),e.response.headers=_t.from(e.response.headers))),Promise.reject(e)}))}const Xt="1.7.2",Qt={};["object","boolean","number","function","string","symbol"].forEach(((t,e)=>{Qt[t]=function(r){return typeof r===t||"a"+(e<1?"n ":" ")+t}}));const Yt={};Qt.transitional=function(t,e,r){function n(t,e){return"[Axios v1.7.2] Transitional option '"+t+"'"+e+(r?". "+r:"")}return(r,o,i)=>{if(!1===t)throw new W(n(o," has been removed"+(e?" in "+e:"")),W.ERR_DEPRECATED);return e&&!Yt[o]&&(Yt[o]=!0,console.warn(n(o," has been deprecated since v"+e+" and will be removed in the near future"))),!t||t(r,o,i)}};var Zt={assertOptions:function(t,e,r){if("object"!=typeof t)throw new W("options must be an object",W.ERR_BAD_OPTION_VALUE);const n=Object.keys(t);let o=n.length;for(;o-- >0;){const i=n[o],s=e[i];if(s){const e=t[i],r=void 0===e||s(e,i,t);if(!0!==r)throw new W("option "+i+" must be "+r,W.ERR_BAD_OPTION_VALUE)}else if(!0!==r)throw new W("Unknown option "+i,W.ERR_BAD_OPTION)}},validators:Qt};const te=Zt.validators;class Axios{constructor(t){this.defaults=t,this.interceptors={request:new et,response:new et}}async request(t,e){try{return await this._request(t,e)}catch(t){if(t instanceof Error){let e;Error.captureStackTrace?Error.captureStackTrace(e={}):e=new Error;const r=e.stack?e.stack.replace(/^.+\n/,""):"";try{t.stack?r&&!String(t.stack).endsWith(r.replace(/^.+\n.+\n/,""))&&(t.stack+="\n"+r):t.stack=r}catch(t){}}throw t}}_request(t,e){"string"==typeof t?(e=e||{}).url=t:e=t||{},e=Et(this.defaults,e);const{transitional:r,paramsSerializer:n,headers:o}=e;void 0!==r&&Zt.assertOptions(r,{silentJSONParsing:te.transitional(te.boolean),forcedJSONParsing:te.transitional(te.boolean),clarifyTimeoutError:te.transitional(te.boolean)},!1),null!=n&&(I.isFunction(n)?e.paramsSerializer={serialize:n}:Zt.assertOptions(n,{encode:te.function,serialize:te.function},!0)),e.method=(e.method||this.defaults.method||"get").toLowerCase();let i=o&&I.merge(o.common,o[e.method]);o&&I.forEach(["delete","get","head","post","put","patch","common"],(t=>{delete o[t]})),e.headers=_t.concat(i,o);const s=[];let a=!0;this.interceptors.request.forEach((function(t){"function"==typeof t.runWhen&&!1===t.runWhen(e)||(a=a&&t.synchronous,s.unshift(t.fulfilled,t.rejected))}));const u=[];let c;this.interceptors.response.forEach((function(t){u.push(t.fulfilled,t.rejected)}));let l,f=0;if(!a){const t=[$t.bind(this),void 0];for(t.unshift.apply(t,s),t.push.apply(t,u),l=t.length,c=Promise.resolve(e);f<l;)c=c.then(t[f++],t[f++]);return c}l=s.length;let p=e;for(f=0;f<l;){const t=s[f++],e=s[f++];try{p=t(p)}catch(t){e.call(this,t);break}}try{c=$t.call(this,p)}catch(t){return Promise.reject(t)}for(f=0,l=u.length;f<l;)c=c.then(u[f++],u[f++]);return c}getUri(t){return tt(Mt((t=Et(this.defaults,t)).baseURL,t.url),t.params,t.paramsSerializer)}}I.forEach(["delete","get","head","options"],(function(t){Axios.prototype[t]=function(e,r){return this.request(Et(r||{},{method:t,url:e,data:(r||{}).data}))}})),I.forEach(["post","put","patch"],(function(t){function e(e){return function(r,n,o){return this.request(Et(o||{},{method:t,headers:e?{"Content-Type":"multipart/form-data"}:{},url:r,data:n}))}}Axios.prototype[t]=e(),Axios.prototype[t+"Form"]=e(!0)}));var ee=Axios;class CancelToken{constructor(t){if("function"!=typeof t)throw new TypeError("executor must be a function.");let e;this.promise=new Promise((function(t){e=t}));const r=this;this.promise.then((t=>{if(!r._listeners)return;let e=r._listeners.length;for(;e-- >0;)r._listeners[e](t);r._listeners=null})),this.promise.then=t=>{let e;const n=new Promise((t=>{r.subscribe(t),e=t})).then(t);return n.cancel=function(){r.unsubscribe(e)},n},t((function(t,n,o){r.reason||(r.reason=new wt(t,n,o),e(r.reason))}))}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){this.reason?t(this.reason):this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const e=this._listeners.indexOf(t);-1!==e&&this._listeners.splice(e,1)}static source(){let t;return{token:new CancelToken((function(e){t=e})),cancel:t}}}var re=CancelToken;const ne={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(ne).forEach((([t,e])=>{ne[e]=t}));var oe=ne;const ie=function t(e){const r=new ee(e),o=n(ee.prototype.request,r);return I.extend(o,ee.prototype,r,{allOwnKeys:!0}),I.extend(o,r,null,{allOwnKeys:!0}),o.create=function(r){return t(Et(e,r))},o}(pt);ie.Axios=ee,ie.CanceledError=wt,ie.CancelToken=re,ie.isCancel=gt,ie.VERSION=Xt,ie.toFormData=$,ie.AxiosError=W,ie.Cancel=ie.CanceledError,ie.all=function(t){return Promise.all(t)},ie.spread=function(t){return function(e){return t.apply(null,e)}},ie.isAxiosError=function(t){return I.isObject(t)&&!0===t.isAxiosError},ie.mergeConfig=Et,ie.AxiosHeaders=_t,ie.formToJSON=t=>lt(I.isHTMLForm(t)?new FormData(t):t),ie.getAdapter=Kt,ie.HttpStatusCode=oe,ie.default=ie,t.exports=ie}},e={};function r(n){var o=e[n];if(void 0!==o)return o.exports;var i=e[n]={id:n,loaded:!1,exports:{}};return t[n].call(i.exports,i,i.exports,r),i.loaded=!0,i.exports}return r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),r.nmd=t=>(t.paths=[],t.children||(t.children=[]),t),r(7530)})()));
3
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,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LEdBQ0ErVyxFQUFBM2MsRUFBQSxNQUFBNEYsbXFCQ0pBK1csRUFBQTNjLEVBQUEsTUFBQTRGLEdBQ0ErVyxFQUFBM2MsRUFBQSxNQUFBNEYsdWxCQ0RBK1csRUFBQTNjLEVBQUEsTUFBQTRGLDBnQkNBQStXLEVBQUEzYyxFQUFBLEtBQUE0RixHQUNBK1csRUFBQTNjLEVBQUEsTUFBQTRGLEdBQ0ErVyxFQUFBM2MsRUFBQSxNQUFBNEYsR0FDQStXLEVBQUEzYyxFQUFBLE1BQUE0RixHQUNBK1csRUFBQTNjLEVBQUEsTUFBQTRGLEdBQ0ErVyxFQUFBM2MsRUFBQSxNQUFBNEYsR0FDQStXLEVBQUEzYyxFQUFBLE1BQUE0RixHQUNBK1csRUFBQTNjLEVBQUEsS0FBQTRGLEdBQ0ErVyxFQUFBM2MsRUFBQSxNQUFBNEYsR0FDQStXLEVBQUEzYyxFQUFBLE1BQUE0RixHQUNBK1csRUFBQTNjLEVBQUEsS0FBQTRGLEdBQ0ErVyxFQUFBM2MsRUFBQSxNQUFBNEYsR0FDQStXLEVBQUEzYyxFQUFBLEtBQUE0RixHQUNBK1csRUFBQTNjLEVBQUEsTUFBQTRGLHM0QkNiQStXLEVBQUEzYyxFQUFBLE1BQUE0RixHQUNBK1csRUFBQTNjLEVBQUEsTUFBQTRGLEdBQ0ErVyxFQUFBM2MsRUFBQSxNQUFBNEYsR0FDQStXLEVBQUEzYyxFQUFBLE1BQUE0RixHQUNBK1csRUFBQTNjLEVBQUEsS0FBQTRGLHM0QkNKQStXLEVBQUEzYyxFQUFBLE1BQUE0RixHQUNBK1csRUFBQTNjLEVBQUEsTUFBQTRGLEdBQ0ErVyxFQUFBM2MsRUFBQSxNQUFBNEYsR0FDQStXLEVBQUEzYyxFQUFBLE1BQUE0RixHQUNBK1csRUFBQTNjLEVBQUEsS0FBQTRGLHVsQkNKQStXLEVBQUEzYyxFQUFBLE1BQUE0RixzbEJDQUErVyxFQUFBM2MsRUFBQSxNQUFBNEYsdWxCQ0FBK1csRUFBQTNjLEVBQUEsTUFBQTRGLHVsQkNBQStXLEVBQUEzYyxFQUFBLE1BQUE0RixtcUJDQUErVyxFQUFBM2MsRUFBQSxNQUFBNEYsR0FDQStXLEVBQUEzYyxFQUFBLE1BQUE0Rix1bEJDREErVyxFQUFBM2MsRUFBQSxNQUFBNEYsdWxCQ0FBK1csRUFBQTNjLEVBQUEsTUFBQTRGLHVsQkNBQStXLEVBQUEzYyxFQUFBLE1BQUE0Rix1bEJDQUErVyxFQUFBM2MsRUFBQSxNQUFBNEYsdTRCQ0FBK1csRUFBQTNjLEVBQUEsTUFBQTRGLEdBQ0ErVyxFQUFBM2MsRUFBQSxNQUFBNEYsR0FDQStXLEVBQUEzYyxFQUFBLE1BQUE0RixHQUNBK1csRUFBQTNjLEVBQUEsTUFBQTRGLEdBQ0ErVyxFQUFBM2MsRUFBQSxNQUFBNEYsa3FCQ0pBK1csRUFBQTNjLEVBQUEsTUFBQTRGLEdBQ0ErVyxFQUFBM2MsRUFBQSxLQUFBNEYsc2xCQ0RBK1csRUFBQTNjLEVBQUEsS0FBQTRGLDJnQkNBQStXLEVBQUEzYyxFQUFBLE1BQUE0RixHQUNBK1csRUFBQTNjLEVBQUEsTUFBQTRGLEdBQ0ErVyxFQUFBM2MsRUFBQSxNQUFBNEYsR0FDQStXLEVBQUEzYyxFQUFBLEtBQUE0RixHQUNBK1csRUFBQTNjLEVBQUEsTUFBQTRGLEdBQ0ErVyxFQUFBM2MsRUFBQSxNQUFBNEYsR0FDQStXLEVBQUEzYyxFQUFBLE1BQUE0RixHQUNBK1csRUFBQTNjLEVBQUEsTUFBQTRGLEdBQ0ErVyxFQUFBM2MsRUFBQSxNQUFBNEYsR0FDQStXLEVBQUEzYyxFQUFBLE1BQUE0RixHQUNBK1csRUFBQTNjLEVBQUEsTUFBQTRGLEdBQ0ErVyxFQUFBM2MsRUFBQSxNQUFBNEYsR0FDQStXLEVBQUEzYyxFQUFBLE1BQUE0RixHQUNBK1csRUFBQTNjLEVBQUEsTUFBQTRGLHU4QkNiQSxJQUFBZ1gsRUFBQTdjLEVBQUFDLEVBQUEsT0FJQTRGLEVBQUFBLE1BQUEwVSxFQUFBdGEsRUFBQSxPQUNBMmMsRUFBQTNjLEVBQUEsTUFBQTRGLEdBQ0FBLEVBQUFBLFdBQUEwVSxFQUFBdGEsRUFBQSxNQUVBLElBQUE2YyxFQUFBLFdBSUUsU0FBQUEsRUFBWUMsR0FDVm5lLEtBQUs0TCxTQUFXdVMsQ0FDbEIsQ0FLRixPQVZFbGQsT0FBQTBWLGVBQVd1SCxFQUFBLFVBQU8sS0FBbEIsV0FBdUMsT0FBT2xlLElBQU0sa0NBT3BEa2UsRUFBQWxjLFVBQUFvYyxPQUFBLFNBQU96UyxHQUNMLE9BQU8sSUFBSXNTLEVBQUFoYixRQUFjMEksRUFBUzNMLEtBQUs0TCxTQUN6QyxFQUNGc1MsQ0FBQSxDQVhBLHFDQ1JBLGlCQUNFLFNBQVNHLEdBR1YsSUFBSUMsRUFBNENyWCxFQVE1Q3NYLEdBTDBDdkwsR0FDN0NBLEVBQU8vTCxRQUkwQixpQkFBVixFQUFBdVgsR0FBc0IsRUFBQUEsR0FDMUNELEVBQVdFLFNBQVdGLEdBQWNBLEVBQVdHLE9BTW5ELElBQUlDLEVBQXdCLFNBQVNwWSxHQUNwQ3ZHLEtBQUt1RyxRQUFVQSxDQUNoQixHQUNBb1ksRUFBc0IzYyxVQUFZLElBQUlnSyxPQUNOL0wsS0FBTyx3QkFFdkMsSUFBSWtSLEVBQVEsU0FBUzVLLEdBR3BCLE1BQU0sSUFBSW9ZLEVBQXNCcFksRUFDakMsRUFFSXFZLEVBQVEsbUVBRVJDLEVBQXlCLGVBc0d6Qm5ELEVBQVMsQ0FDWixPQTNEWSxTQUFTb0QsR0FDckJBLEVBQVFDLE9BQU9ELEdBQ1gsYUFBYXpJLEtBQUt5SSxJQUdyQjNOLEVBQ0MsNkVBY0YsSUFWQSxJQUdJNk4sRUFDQUMsRUFDQUMsRUFDQTVILEVBTkE2SCxFQUFVTCxFQUFNaFcsT0FBUyxFQUN6QnNXLEVBQVMsR0FDVEMsR0FBWSxFQU1adlcsRUFBU2dXLEVBQU1oVyxPQUFTcVcsSUFFbkJFLEVBQVd2VyxHQUVuQmtXLEVBQUlGLEVBQU1RLFdBQVdELElBQWEsR0FDbENKLEVBQUlILEVBQU1RLGFBQWFELElBQWEsRUFDcENILEVBQUlKLEVBQU1RLGFBQWFELEdBSXZCRCxHQUNDUixFQUFNVyxRQUpQakksRUFBUzBILEVBQUlDLEVBQUlDLElBSU8sR0FBSyxJQUM1Qk4sRUFBTVcsT0FBT2pJLEdBQVUsR0FBSyxJQUM1QnNILEVBQU1XLE9BQU9qSSxHQUFVLEVBQUksSUFDM0JzSCxFQUFNVyxPQUFnQixHQUFUakksR0F1QmYsT0FuQmUsR0FBWDZILEdBQ0hILEVBQUlGLEVBQU1RLFdBQVdELElBQWEsRUFDbENKLEVBQUlILEVBQU1RLGFBQWFELEdBRXZCRCxHQUNDUixFQUFNVyxRQUZQakksRUFBUzBILEVBQUlDLElBRVcsSUFDdkJMLEVBQU1XLE9BQVFqSSxHQUFVLEVBQUssSUFDN0JzSCxFQUFNVyxPQUFRakksR0FBVSxFQUFLLElBQzdCLEtBRW9CLEdBQVg2SCxJQUNWN0gsRUFBU3dILEVBQU1RLFdBQVdELEdBQzFCRCxHQUNDUixFQUFNVyxPQUFPakksR0FBVSxHQUN2QnNILEVBQU1XLE9BQVFqSSxHQUFVLEVBQUssSUFDN0IsTUFJSzhILENBQ1IsRUFJQyxPQWxHWSxTQUFTTixHQUdyQixJQUFJaFcsR0FGSmdXLEVBQVFDLE9BQU9ELEdBQ2JVLFFBQVFYLEVBQXdCLEtBQ2YvVixPQUNmQSxFQUFTLEdBQUssSUFFakJBLEdBREFnVyxFQUFRQSxFQUFNVSxRQUFRLE9BQVEsS0FDZjFXLFNBR2ZBLEVBQVMsR0FBSyxHQUVkLGlCQUFpQnVOLEtBQUt5SSxLQUV0QjNOLEVBQ0MseUVBUUYsSUFMQSxJQUNJc08sRUFDQW5JLEVBRkFvSSxFQUFhLEVBR2JOLEVBQVMsR0FDVEMsR0FBWSxJQUNQQSxFQUFXdlcsR0FDbkJ3TyxFQUFTc0gsRUFBTWUsUUFBUWIsRUFBTVMsT0FBT0YsSUFDcENJLEVBQWFDLEVBQWEsRUFBaUIsR0FBYkQsRUFBa0JuSSxFQUFTQSxFQUVyRG9JLElBQWUsSUFFbEJOLEdBQVVMLE9BQU9hLGFBQ2hCLElBQU9ILEtBQWdCLEVBQUlDLEVBQWEsS0FJM0MsT0FBT04sQ0FDUixFQWlFQyxRQUFXLGNBWVYsS0FGRCxhQUNDLE9BQU8xRCxDQUNQLCtCQWFILENBbEtDLHlCQ0RELFlBSW9CLFdBRWxCLFNBQVNtRSxFQUFXQyxHQUNsQixJQUFJQyxFQUFjLEdBQ2xCLEdBQXdCLElBQXBCRCxFQUFTaFgsT0FBZ0IsTUFBTyxHQUVwQyxHQUEyQixpQkFBaEJnWCxFQUFTLEdBQ2xCLE1BQU0sSUFBSUUsVUFBVSxrQ0FBb0NGLEVBQVMsSUFJbkUsR0FBSUEsRUFBUyxHQUFHRyxNQUFNLGlCQUFtQkgsRUFBU2hYLE9BQVMsRUFBRyxDQUM1RCxJQUFJb1gsRUFBUUosRUFBU0ssUUFDckJMLEVBQVMsR0FBS0ksRUFBUUosRUFBUyxFQUNqQyxDQUdJQSxFQUFTLEdBQUdHLE1BQU0sZ0JBQ3BCSCxFQUFTLEdBQUtBLEVBQVMsR0FBR04sUUFBUSxnQkFBaUIsVUFFbkRNLEVBQVMsR0FBS0EsRUFBUyxHQUFHTixRQUFRLGdCQUFpQixTQUdyRCxJQUFLLElBQUlZLEVBQUksRUFBR0EsRUFBSU4sRUFBU2hYLE9BQVFzWCxJQUFLLENBQ3hDLElBQUlDLEVBQVlQLEVBQVNNLEdBRXpCLEdBQXlCLGlCQUFkQyxFQUNULE1BQU0sSUFBSUwsVUFBVSxrQ0FBb0NLLEdBR3hDLEtBQWRBLElBRUFELEVBQUksSUFFTkMsRUFBWUEsRUFBVWIsUUFBUSxTQUFVLEtBSXhDYSxFQUZFRCxFQUFJTixFQUFTaFgsT0FBUyxFQUVadVgsRUFBVWIsUUFBUSxTQUFVLElBRzVCYSxFQUFVYixRQUFRLFNBQVUsS0FHMUNPLEVBQVkzUCxLQUFLaVEsR0FFbkIsQ0FFQSxJQUFJQyxFQUFNUCxFQUFZUSxLQUFLLEtBT3ZCQyxHQUhKRixFQUFNQSxFQUFJZCxRQUFRLGtCQUFtQixPQUdyQnZFLE1BQU0sS0FHdEIsT0FGQXFGLEVBQU1FLEVBQU1MLFNBQVdLLEVBQU0xWCxPQUFTLEVBQUksSUFBSyxJQUFNMFgsRUFBTUQsS0FBSyxJQUdsRSxDQUVBLE9BQU8sV0FTTCxPQUFPVixFQU5xQixpQkFBakJZLFVBQVUsR0FDWEEsVUFBVSxHQUVWLEdBQUdDLE1BQU05WSxLQUFLNlksV0FJMUIsQ0FFRixFQTVFdUN6TixFQUFPL0wsUUFBUytMLEVBQU8vTCxRQUFVMFosU0FDQSwwQkFBakIsS0FBaUIsK0RDQ3hFLFNBQVNDLEVBQUtDLEVBQUlDLEdBQ2hCLE9BQU8sV0FDTCxPQUFPRCxFQUFHRSxNQUFNRCxFQUFTTCxVQUMzQixDQUNGLENBSUEsTUFBTSxTQUFDamUsR0FBWXZCLE9BQU9lLFdBQ3BCLGVBQUNnZixHQUFrQi9mLE9BRW5CZ2dCLEdBQVVDLEVBR2JqZ0IsT0FBTzZDLE9BQU8sTUFIUXFkLElBQ3JCLE1BQU1iLEVBQU05ZCxFQUFTb0YsS0FBS3VaLEdBQzFCLE9BQU9ELEVBQU1aLEtBQVNZLEVBQU1aLEdBQU9BLEVBQUlJLE1BQU0sR0FBSSxHQUFHVSxjQUFjLEdBRnZELElBQUNGLEVBS2hCLE1BQU1HLEVBQWMzZ0IsSUFDbEJBLEVBQU9BLEVBQUswZ0IsY0FDSkQsR0FBVUYsRUFBT0UsS0FBV3pnQixHQUdoQzRnQixFQUFhNWdCLEdBQVF5Z0IsVUFBZ0JBLElBQVV6Z0IsR0FTL0MsUUFBQzBOLEdBQVdELE1BU1pvVCxFQUFjRCxFQUFXLGFBcUIvQixNQUFNRSxFQUFnQkgsRUFBVyxlQTJCakMsTUFBTUksRUFBV0gsRUFBVyxVQVF0QkksRUFBYUosRUFBVyxZQVN4QkssRUFBV0wsRUFBVyxVQVN0Qk0sRUFBWVQsR0FBb0IsT0FBVkEsR0FBbUMsaUJBQVZBLEVBaUIvQ1UsRUFBaUJDLElBQ3JCLEdBQW9CLFdBQWhCYixFQUFPYSxHQUNULE9BQU8sRUFHVCxNQUFNOWYsRUFBWWdmLEVBQWVjLEdBQ2pDLFFBQXNCLE9BQWQ5ZixHQUFzQkEsSUFBY2YsT0FBT2UsV0FBa0QsT0FBckNmLE9BQU8rZixlQUFlaGYsSUFBMEI0VSxPQUFPQyxlQUFlaUwsR0FBVWxMLE9BQU9tTCxZQUFZRCxFQUFJLEVBVW5LRSxFQUFTWCxFQUFXLFFBU3BCWSxFQUFTWixFQUFXLFFBU3BCYSxFQUFTYixFQUFXLFFBU3BCYyxFQUFhZCxFQUFXLFlBc0N4QmUsRUFBb0JmLEVBQVcsb0JBRTlCZ0IsRUFBa0JDLEVBQVdDLEVBQVlDLEdBQWEsQ0FBQyxpQkFBa0IsVUFBVyxXQUFZLFdBQVd6ZixJQUFJc2UsR0EyQnRILFNBQVMvRyxFQUFRNUMsRUFBS21KLEdBQUksV0FBQzRCLEdBQWEsR0FBUyxDQUFDLEdBRWhELEdBQUkvSyxRQUNGLE9BR0YsSUFBSTBJLEVBQ0FzQyxFQVFKLEdBTG1CLGlCQUFSaEwsSUFFVEEsRUFBTSxDQUFDQSxJQUdMdEosRUFBUXNKLEdBRVYsSUFBSzBJLEVBQUksRUFBR3NDLEVBQUloTCxFQUFJNU8sT0FBUXNYLEVBQUlzQyxFQUFHdEMsSUFDakNTLEVBQUdqWixLQUFLLEtBQU04UCxFQUFJMEksR0FBSUEsRUFBRzFJLE9BRXRCLENBRUwsTUFBTXRWLEVBQU9xZ0IsRUFBYXhoQixPQUFPd2Isb0JBQW9CL0UsR0FBT3pXLE9BQU9tQixLQUFLc1YsR0FDbEVpTCxFQUFNdmdCLEVBQUswRyxPQUNqQixJQUFJekcsRUFFSixJQUFLK2QsRUFBSSxFQUFHQSxFQUFJdUMsRUFBS3ZDLElBQ25CL2QsRUFBTUQsRUFBS2dlLEdBQ1hTLEVBQUdqWixLQUFLLEtBQU04UCxFQUFJclYsR0FBTUEsRUFBS3FWLEVBRWpDLENBQ0YsQ0FFQSxTQUFTa0wsRUFBUWxMLEVBQUtyVixHQUNwQkEsRUFBTUEsRUFBSStlLGNBQ1YsTUFBTWhmLEVBQU9uQixPQUFPbUIsS0FBS3NWLEdBQ3pCLElBQ0ltTCxFQURBekMsRUFBSWhlLEVBQUswRyxPQUViLEtBQU9zWCxLQUFNLEdBRVgsR0FEQXlDLEVBQU96Z0IsRUFBS2dlLEdBQ1IvZCxJQUFRd2dCLEVBQUt6QixjQUNmLE9BQU95QixFQUdYLE9BQU8sSUFDVCxDQUVBLE1BQU1DLEVBRXNCLG9CQUFmQyxXQUFtQ0EsV0FDdkIsb0JBQVRwZCxLQUF1QkEsS0FBMEIsb0JBQVgrWSxPQUF5QkEsT0FBUyxFQUFBRixFQUdsRndFLEVBQW9CQyxJQUFhMUIsRUFBWTBCLElBQVlBLElBQVlILEVBb0QzRSxNQThITUksR0FBZ0JDLEVBS0csb0JBQWZDLFlBQThCcEMsRUFBZW9DLFlBSDlDakMsR0FDRWdDLEdBQWNoQyxhQUFpQmdDLEdBSHJCLElBQUNBLEVBZXRCLE1BaUNNRSxFQUFhaEMsRUFBVyxtQkFXeEJpQyxFQUFpQixHQUFHQSxvQkFBb0IsQ0FBQzVMLEVBQUtwVixJQUFTZ2hCLEVBQWUxYixLQUFLOFAsRUFBS3BWLEdBQS9ELENBQXNFckIsT0FBT2UsV0FTOUZ1aEIsRUFBV2xDLEVBQVcsVUFFdEJtQyxFQUFvQixDQUFDOUwsRUFBSytMLEtBQzlCLE1BQU1DLEVBQWN6aUIsT0FBTzBpQiwwQkFBMEJqTSxHQUMvQ2tNLEVBQXFCLENBQUMsRUFFNUJ0SixFQUFRb0osR0FBYSxDQUFDRyxFQUFZNWpCLEtBQ2hDLElBQUk2akIsR0FDMkMsS0FBMUNBLEVBQU1MLEVBQVFJLEVBQVk1akIsRUFBTXlYLE1BQ25Da00sRUFBbUIzakIsR0FBUTZqQixHQUFPRCxFQUNwQyxJQUdGNWlCLE9BQU84aUIsaUJBQWlCck0sRUFBS2tNLEVBQW1CLEVBc0Q1Q0ksRUFBUSw2QkFFUkMsRUFBUSxhQUVSQyxFQUFXLENBQ2ZELFFBQ0FELFFBQ0FHLFlBQWFILEVBQVFBLEVBQU1JLGNBQWdCSCxHQXdCN0MsTUErQk1JLEVBQVloRCxFQUFXLGlCQUs3QixJQUFJaUQsRUFBVSxDQUNabFcsVUFDQW9ULGdCQUNBbk0sU0FwbkJGLFNBQWtCeU0sR0FDaEIsT0FBZSxPQUFSQSxJQUFpQlAsRUFBWU8sSUFBNEIsT0FBcEJBLEVBQUl5QyxjQUF5QmhELEVBQVlPLEVBQUl5QyxjQUNwRjdDLEVBQVdJLEVBQUl5QyxZQUFZbFAsV0FBYXlNLEVBQUl5QyxZQUFZbFAsU0FBU3lNLEVBQ3hFLEVBa25CRTBDLFdBdGVrQnJELElBQ2xCLElBQUlzRCxFQUNKLE9BQU90RCxJQUNnQixtQkFBYmhELFVBQTJCZ0QsYUFBaUJoRCxVQUNsRHVELEVBQVdQLEVBQU0zSCxVQUNZLGNBQTFCaUwsRUFBT3hELEVBQU9FLEtBRUwsV0FBVHNELEdBQXFCL0MsRUFBV1AsRUFBTTNlLFdBQWtDLHNCQUFyQjJlLEVBQU0zZSxZQUdoRSxFQTZkQWtpQixrQkFobUJGLFNBQTJCNUMsR0FDekIsSUFBSS9ZLEVBTUosT0FKRUEsRUFEMEIsb0JBQWhCNGIsYUFBaUNBLFlBQWtCLE9BQ3BEQSxZQUFZQyxPQUFPOUMsR0FFbkIsR0FBVUEsRUFBVSxRQUFNTixFQUFjTSxFQUFJeEssUUFFaER2TyxDQUNULEVBeWxCRTBZLFdBQ0FFLFdBQ0FrRCxVQWhqQmdCMUQsSUFBbUIsSUFBVkEsSUFBNEIsSUFBVkEsRUFpakIzQ1MsV0FDQUMsZ0JBQ0FRLG1CQUNBQyxZQUNBQyxhQUNBQyxZQUNBakIsY0FDQVMsU0FDQUMsU0FDQUMsU0FDQXFCLFdBQ0E3QixhQUNBbE0sU0FoZ0JnQnNNLEdBQVFGLEVBQVNFLElBQVFKLEVBQVdJLEVBQUl0SyxNQWlnQnhENEssb0JBQ0FjLGVBQ0FmLGFBQ0E3SCxVQUNBd0ssTUFsWUYsU0FBU0EsSUFDUCxNQUFNLFNBQUNDLEdBQVkvQixFQUFpQmhqQixPQUFTQSxNQUFRLENBQUMsRUFDaEQrSSxFQUFTLENBQUMsRUFDVmljLEVBQWMsQ0FBQ2xELEVBQUt6ZixLQUN4QixNQUFNNGlCLEVBQVlGLEdBQVluQyxFQUFRN1osRUFBUTFHLElBQVFBLEVBQ2xEd2YsRUFBYzlZLEVBQU9rYyxLQUFlcEQsRUFBY0MsR0FDcEQvWSxFQUFPa2MsR0FBYUgsRUFBTS9iLEVBQU9rYyxHQUFZbkQsR0FDcENELEVBQWNDLEdBQ3ZCL1ksRUFBT2tjLEdBQWFILEVBQU0sQ0FBQyxFQUFHaEQsR0FDckIxVCxFQUFRMFQsR0FDakIvWSxFQUFPa2MsR0FBYW5ELEVBQUlwQixRQUV4QjNYLEVBQU9rYyxHQUFhbkQsQ0FDdEIsRUFHRixJQUFLLElBQUkxQixFQUFJLEVBQUdzQyxFQUFJakMsVUFBVTNYLE9BQVFzWCxFQUFJc0MsRUFBR3RDLElBQzNDSyxVQUFVTCxJQUFNOUYsRUFBUW1HLFVBQVVMLEdBQUk0RSxHQUV4QyxPQUFPamMsQ0FDVCxFQStXRW1jLE9BbldhLENBQUNsRyxFQUFHQyxFQUFHNkIsR0FBVTJCLGNBQWEsQ0FBQyxLQUM1Q25JLEVBQVEyRSxHQUFHLENBQUM2QyxFQUFLemYsS0FDWHllLEdBQVdZLEVBQVdJLEdBQ3hCOUMsRUFBRTNjLEdBQU91ZSxFQUFLa0IsRUFBS2hCLEdBRW5COUIsRUFBRTNjLEdBQU95ZixDQUNYLEdBQ0MsQ0FBQ1csZUFDR3pELEdBNFZQbUcsS0EvZFk3RSxHQUFRQSxFQUFJNkUsS0FDeEI3RSxFQUFJNkUsT0FBUzdFLEVBQUlkLFFBQVEscUNBQXNDLElBK2QvRDRGLFNBblZnQkMsSUFDYyxRQUExQkEsRUFBUS9GLFdBQVcsS0FDckIrRixFQUFVQSxFQUFRM0UsTUFBTSxJQUVuQjJFLEdBZ1ZQQyxTQXBVZSxDQUFDZixFQUFhZ0IsRUFBa0JDLEVBQU85QixLQUN0RGEsRUFBWXZpQixVQUFZZixPQUFPNkMsT0FBT3loQixFQUFpQnZqQixVQUFXMGhCLEdBQ2xFYSxFQUFZdmlCLFVBQVV1aUIsWUFBY0EsRUFDcEN0akIsT0FBTzBWLGVBQWU0TixFQUFhLFFBQVMsQ0FDMUNoaUIsTUFBT2dqQixFQUFpQnZqQixZQUUxQndqQixHQUFTdmtCLE9BQU9DLE9BQU9xakIsRUFBWXZpQixVQUFXd2pCLEVBQU0sRUErVHBEQyxhQW5UbUIsQ0FBQ0MsRUFBV0MsRUFBUy9NLEVBQVFnTixLQUNoRCxJQUFJSixFQUNBcEYsRUFDQTlkLEVBQ0osTUFBTXVqQixFQUFTLENBQUMsRUFJaEIsR0FGQUYsRUFBVUEsR0FBVyxDQUFDLEVBRUwsTUFBYkQsRUFBbUIsT0FBT0MsRUFFOUIsRUFBRyxDQUdELElBRkFILEVBQVF2a0IsT0FBT3diLG9CQUFvQmlKLEdBQ25DdEYsRUFBSW9GLEVBQU0xYyxPQUNIc1gsS0FBTSxHQUNYOWQsRUFBT2tqQixFQUFNcEYsR0FDUHdGLElBQWNBLEVBQVd0akIsRUFBTW9qQixFQUFXQyxJQUFjRSxFQUFPdmpCLEtBQ25FcWpCLEVBQVFyakIsR0FBUW9qQixFQUFVcGpCLEdBQzFCdWpCLEVBQU92akIsSUFBUSxHQUduQm9qQixHQUF1QixJQUFYOU0sR0FBb0JvSSxFQUFlMEUsRUFDakQsT0FBU0EsS0FBZTlNLEdBQVVBLEVBQU84TSxFQUFXQyxLQUFhRCxJQUFjemtCLE9BQU9lLFdBRXRGLE9BQU8yakIsQ0FBTyxFQTZSZDFFLFNBQ0FJLGFBQ0F5RSxTQW5SZSxDQUFDeEYsRUFBS3lGLEVBQWMxRyxLQUNuQ2lCLEVBQU12QixPQUFPdUIsU0FDSW5LLElBQWJrSixHQUEwQkEsRUFBV2lCLEVBQUl4WCxVQUMzQ3VXLEVBQVdpQixFQUFJeFgsUUFFakJ1VyxHQUFZMEcsRUFBYWpkLE9BQ3pCLE1BQU1rZCxFQUFZMUYsRUFBSVgsUUFBUW9HLEVBQWMxRyxHQUM1QyxPQUFzQixJQUFmMkcsR0FBb0JBLElBQWMzRyxDQUFRLEVBNlFqRDRHLFFBbFFlOUUsSUFDZixJQUFLQSxFQUFPLE9BQU8sS0FDbkIsR0FBSS9TLEVBQVErUyxHQUFRLE9BQU9BLEVBQzNCLElBQUlmLEVBQUllLEVBQU1yWSxPQUNkLElBQUs2WSxFQUFTdkIsR0FBSSxPQUFPLEtBQ3pCLE1BQU04RixFQUFNLElBQUkvWCxNQUFNaVMsR0FDdEIsS0FBT0EsS0FBTSxHQUNYOEYsRUFBSTlGLEdBQUtlLEVBQU1mLEdBRWpCLE9BQU84RixDQUFHLEVBMFBWQyxhQS9ObUIsQ0FBQ3pPLEVBQUttSixLQUN6QixNQUVNa0IsR0FGWXJLLEdBQU9BLEVBQUlkLE9BQU9tTCxXQUVUbmEsS0FBSzhQLEdBRWhDLElBQUkzTyxFQUVKLE1BQVFBLEVBQVNnWixFQUFTcUUsVUFBWXJkLEVBQU9zZCxNQUFNLENBQ2pELE1BQU1DLEVBQU92ZCxFQUFPeEcsTUFDcEJzZSxFQUFHalosS0FBSzhQLEVBQUs0TyxFQUFLLEdBQUlBLEVBQUssR0FDN0IsR0FzTkFDLFNBM01lLENBQUNDLEVBQVFsRyxLQUN4QixJQUFJbUcsRUFDSixNQUFNUCxFQUFNLEdBRVosS0FBd0MsUUFBaENPLEVBQVVELEVBQU9FLEtBQUtwRyxLQUM1QjRGLEVBQUk5VixLQUFLcVcsR0FHWCxPQUFPUCxDQUFHLEVBb01WN0MsYUFDQUMsaUJBQ0FxRCxXQUFZckQsRUFDWkUsb0JBQ0FvRCxjQTNKcUJsUCxJQUNyQjhMLEVBQWtCOUwsR0FBSyxDQUFDbU0sRUFBWTVqQixLQUVsQyxHQUFJeWhCLEVBQVdoSyxLQUE2RCxJQUFyRCxDQUFDLFlBQWEsU0FBVSxVQUFVaUksUUFBUTFmLEdBQy9ELE9BQU8sRUFHVCxNQUFNc0MsRUFBUW1WLEVBQUl6WCxHQUVieWhCLEVBQVduZixLQUVoQnNoQixFQUFXZ0QsWUFBYSxFQUVwQixhQUFjaEQsRUFDaEJBLEVBQVdpRCxVQUFXLEVBSW5CakQsRUFBV3hKLE1BQ2R3SixFQUFXeEosSUFBTSxLQUNmLE1BQU1yTyxNQUFNLHFDQUF3Qy9MLEVBQU8sSUFBSyxHQUVwRSxHQUNBLEVBcUlGOG1CLFlBbElrQixDQUFDQyxFQUFlQyxLQUNsQyxNQUFNdlAsRUFBTSxDQUFDLEVBRVB3UCxFQUFVaEIsSUFDZEEsRUFBSTVMLFNBQVEvWCxJQUNWbVYsRUFBSW5WLElBQVMsQ0FBSSxHQUNqQixFQUtKLE9BRkE2TCxFQUFRNFksR0FBaUJFLEVBQU9GLEdBQWlCRSxFQUFPbkksT0FBT2lJLEdBQWUvTCxNQUFNZ00sSUFFN0V2UCxDQUFHLEVBd0hWeVAsWUFwTWtCN0csR0FDWEEsRUFBSWMsY0FBYzVCLFFBQVEseUJBQy9CLFNBQWtCNEgsRUFBR0MsRUFBSUMsR0FDdkIsT0FBT0QsRUFBR2pELGNBQWdCa0QsQ0FDNUIsSUFpTUZDLEtBdEhXLE9BdUhYQyxlQXJIcUIsQ0FBQ2psQixFQUFPa2xCLElBQ2IsTUFBVGxsQixHQUFpQm1sQixPQUFPQyxTQUFTcGxCLEdBQVNBLEdBQVNBLEVBQVFrbEIsRUFxSGxFN0UsVUFDQW5FLE9BQVFxRSxFQUNSRSxtQkFDQWtCLFdBQ0EwRCxlQTVHcUIsQ0FBQ25SLEVBQU8sR0FBSW9SLEVBQVczRCxFQUFTQyxlQUNyRCxJQUFJN0QsRUFBTSxHQUNWLE1BQU0sT0FBQ3hYLEdBQVUrZSxFQUNqQixLQUFPcFIsS0FDTDZKLEdBQU91SCxFQUFTQyxLQUFLQyxTQUFXamYsRUFBTyxHQUd6QyxPQUFPd1gsQ0FBRyxFQXNHVjBILG9CQTVGRixTQUE2QjdHLEdBQzNCLFNBQVVBLEdBQVNPLEVBQVdQLEVBQU0zSCxTQUF5QyxhQUE5QjJILEVBQU12SyxPQUFPQyxjQUErQnNLLEVBQU12SyxPQUFPbUwsVUFDMUcsRUEyRkVrRyxhQXpGb0J2USxJQUNwQixNQUFNWSxFQUFRLElBQUluSyxNQUFNLElBRWxCK1osRUFBUSxDQUFDQyxFQUFRL0gsS0FFckIsR0FBSXdCLEVBQVN1RyxHQUFTLENBQ3BCLEdBQUk3UCxFQUFNcUgsUUFBUXdJLElBQVcsRUFDM0IsT0FHRixLQUFLLFdBQVlBLEdBQVMsQ0FDeEI3UCxFQUFNOEgsR0FBSytILEVBQ1gsTUFBTUMsRUFBU2hhLEVBQVErWixHQUFVLEdBQUssQ0FBQyxFQVN2QyxPQVBBN04sRUFBUTZOLEdBQVEsQ0FBQzVsQixFQUFPRixLQUN0QixNQUFNZ21CLEVBQWVILEVBQU0zbEIsRUFBTzZkLEVBQUksSUFDckNtQixFQUFZOEcsS0FBa0JELEVBQU8vbEIsR0FBT2dtQixFQUFhLElBRzVEL1AsRUFBTThILFFBQUtqSyxFQUVKaVMsQ0FDVCxDQUNGLENBRUEsT0FBT0QsQ0FBTSxFQUdmLE9BQU9ELEVBQU14USxFQUFLLEVBQUUsRUE4RHBCMk0sWUFDQWlFLFdBMURrQm5ILEdBQ2xCQSxJQUFVUyxFQUFTVCxJQUFVTyxFQUFXUCxLQUFXTyxFQUFXUCxFQUFNeGQsT0FBUytkLEVBQVdQLEVBQU1vSCxRQXVFaEcsU0FBU0MsRUFBV2ppQixFQUFTMkssRUFBTXJGLEVBQVFwSyxFQUFTa0IsR0FDbERxSixNQUFNcEUsS0FBSzVILE1BRVBnTSxNQUFNeWMsa0JBQ1J6YyxNQUFNeWMsa0JBQWtCem9CLEtBQU1BLEtBQUt1a0IsYUFFbkN2a0IsS0FBS3NZLE9BQVEsSUFBS3RNLE9BQVNzTSxNQUc3QnRZLEtBQUt1RyxRQUFVQSxFQUNmdkcsS0FBS0MsS0FBTyxhQUNaaVIsSUFBU2xSLEtBQUtrUixLQUFPQSxHQUNyQnJGLElBQVc3TCxLQUFLNkwsT0FBU0EsR0FDekJwSyxJQUFZekIsS0FBS3lCLFFBQVVBLEdBQzNCa0IsSUFBYTNDLEtBQUsyQyxTQUFXQSxFQUMvQixDQUVBMmhCLEVBQVFnQixTQUFTa0QsRUFBWXhjLE1BQU8sQ0FDbEMwYyxPQUFRLFdBQ04sTUFBTyxDQUVMbmlCLFFBQVN2RyxLQUFLdUcsUUFDZHRHLEtBQU1ELEtBQUtDLEtBRVg4RyxZQUFhL0csS0FBSytHLFlBQ2xCNGhCLE9BQVEzb0IsS0FBSzJvQixPQUViQyxTQUFVNW9CLEtBQUs0b0IsU0FDZkMsV0FBWTdvQixLQUFLNm9CLFdBQ2pCQyxhQUFjOW9CLEtBQUs4b0IsYUFDbkJ4USxNQUFPdFksS0FBS3NZLE1BRVp6TSxPQUFReVksRUFBUTJELGFBQWFqb0IsS0FBSzZMLFFBQ2xDcUYsS0FBTWxSLEtBQUtrUixLQUNYNUssT0FBUXRHLEtBQUsyQyxVQUFZM0MsS0FBSzJDLFNBQVMyRCxPQUFTdEcsS0FBSzJDLFNBQVMyRCxPQUFTLEtBRTNFLElBR0YsTUFBTXlpQixFQUFjUCxFQUFXeG1CLFVBQ3pCMGhCLEVBQWMsQ0FBQyxFQUVyQixDQUNFLHVCQUNBLGlCQUNBLGVBQ0EsWUFDQSxjQUNBLDRCQUNBLGlCQUNBLG1CQUNBLGtCQUNBLGVBQ0Esa0JBQ0EsbUJBRUFwSixTQUFRcEosSUFDUndTLEVBQVl4UyxHQUFRLENBQUMzTyxNQUFPMk8sRUFBSyxJQUduQ2pRLE9BQU84aUIsaUJBQWlCeUUsRUFBWTlFLEdBQ3BDemlCLE9BQU8wVixlQUFlb1MsRUFBYSxlQUFnQixDQUFDeG1CLE9BQU8sSUFHM0RpbUIsRUFBV3JPLEtBQU8sQ0FBQ2hKLEVBQU9ELEVBQU1yRixFQUFRcEssRUFBU2tCLEVBQVVxbUIsS0FDekQsTUFBTUMsRUFBYWhvQixPQUFPNkMsT0FBT2lsQixHQWdCakMsT0FkQXpFLEVBQVFtQixhQUFhdFUsRUFBTzhYLEdBQVksU0FBZ0J2UixHQUN0RCxPQUFPQSxJQUFRMUwsTUFBTWhLLFNBQ3ZCLElBQUdNLEdBQ2UsaUJBQVRBLElBR1RrbUIsRUFBVzVnQixLQUFLcWhCLEVBQVk5WCxFQUFNNUssUUFBUzJLLEVBQU1yRixFQUFRcEssRUFBU2tCLEdBRWxFc21CLEVBQVdDLE1BQVEvWCxFQUVuQjhYLEVBQVdocEIsS0FBT2tSLEVBQU1sUixLQUV4QitvQixHQUFlL25CLE9BQU9DLE9BQU8rbkIsRUFBWUQsR0FFbENDLENBQVUsRUFhbkIsU0FBU0UsRUFBWWhJLEdBQ25CLE9BQU9tRCxFQUFRekMsY0FBY1YsSUFBVW1ELEVBQVFsVyxRQUFRK1MsRUFDekQsQ0FTQSxTQUFTaUksRUFBZS9tQixHQUN0QixPQUFPaWlCLEVBQVF3QixTQUFTempCLEVBQUssTUFBUUEsRUFBSXFlLE1BQU0sR0FBSSxHQUFLcmUsQ0FDMUQsQ0FXQSxTQUFTZ25CLEVBQVVDLEVBQU1qbkIsRUFBS2tuQixHQUM1QixPQUFLRCxFQUNFQSxFQUFLemxCLE9BQU94QixHQUFLVSxLQUFJLFNBQWN5bUIsRUFBT3BKLEdBRy9DLE9BREFvSixFQUFRSixFQUFlSSxJQUNmRCxHQUFRbkosRUFBSSxJQUFNb0osRUFBUSxJQUFNQSxDQUMxQyxJQUFHakosS0FBS2dKLEVBQU8sSUFBTSxJQUxIbG5CLENBTXBCLENBYUEsTUFBTW9uQixFQUFhbkYsRUFBUW1CLGFBQWFuQixFQUFTLENBQUMsRUFBRyxNQUFNLFNBQWdCaGlCLEdBQ3pFLE1BQU8sV0FBVytULEtBQUsvVCxFQUN6QixJQXlCQSxTQUFTb25CLEVBQVdoUyxFQUFLOUwsRUFBVUQsR0FDakMsSUFBSzJZLEVBQVExQyxTQUFTbEssR0FDcEIsTUFBTSxJQUFJc0ksVUFBVSw0QkFJdEJwVSxFQUFXQSxHQUFZLElBQUksU0FZM0IsTUFBTStkLEdBVE5oZSxFQUFVMlksRUFBUW1CLGFBQWE5WixFQUFTLENBQ3RDZ2UsWUFBWSxFQUNaSixNQUFNLEVBQ05LLFNBQVMsSUFDUixHQUFPLFNBQWlCQyxFQUFRMUIsR0FFakMsT0FBUTdELEVBQVEvQyxZQUFZNEcsRUFBTzBCLEdBQ3JDLEtBRTJCRixXQUVyQkcsRUFBVW5lLEVBQVFtZSxTQUFXQyxFQUM3QlIsRUFBTzVkLEVBQVE0ZCxLQUNmSyxFQUFVamUsRUFBUWllLFFBRWxCSSxHQURRcmUsRUFBUWlNLE1BQXdCLG9CQUFUQSxNQUF3QkEsT0FDcEMwTSxFQUFRMEQsb0JBQW9CcGMsR0FFckQsSUFBSzBZLEVBQVE1QyxXQUFXb0ksR0FDdEIsTUFBTSxJQUFJOUosVUFBVSw4QkFHdEIsU0FBU2lLLEVBQWExbkIsR0FDcEIsR0FBYyxPQUFWQSxFQUFnQixNQUFPLEdBRTNCLEdBQUkraEIsRUFBUXRDLE9BQU96ZixHQUNqQixPQUFPQSxFQUFNMm5CLGNBR2YsSUFBS0YsR0FBVzFGLEVBQVFwQyxPQUFPM2YsR0FDN0IsTUFBTSxJQUFJaW1CLEVBQVcsZ0RBR3ZCLE9BQUlsRSxFQUFROUMsY0FBY2pmLElBQVUraEIsRUFBUXBCLGFBQWEzZ0IsR0FDaER5bkIsR0FBMkIsbUJBQVRwUyxLQUFzQixJQUFJQSxLQUFLLENBQUNyVixJQUFVc1YsT0FBT3NDLEtBQUs1WCxHQUcxRUEsQ0FDVCxDQVlBLFNBQVN3bkIsRUFBZXhuQixFQUFPRixFQUFLaW5CLEdBQ2xDLElBQUlwRCxFQUFNM2pCLEVBRVYsR0FBSUEsSUFBVSttQixHQUF5QixpQkFBVi9tQixFQUMzQixHQUFJK2hCLEVBQVF3QixTQUFTempCLEVBQUssTUFFeEJBLEVBQU1zbkIsRUFBYXRuQixFQUFNQSxFQUFJcWUsTUFBTSxHQUFJLEdBRXZDbmUsRUFBUWdMLEtBQUtDLFVBQVVqTCxRQUNsQixHQUNKK2hCLEVBQVFsVyxRQUFRN0wsSUFuR3pCLFNBQXFCMmpCLEdBQ25CLE9BQU81QixFQUFRbFcsUUFBUThYLEtBQVNBLEVBQUl6VCxLQUFLMFcsRUFDM0MsQ0FpR21DZ0IsQ0FBWTVuQixLQUNyQytoQixFQUFRbkMsV0FBVzVmLElBQVUraEIsRUFBUXdCLFNBQVN6akIsRUFBSyxTQUFXNmpCLEVBQU01QixFQUFRMkIsUUFBUTFqQixJQVl0RixPQVRBRixFQUFNK21CLEVBQWUvbUIsR0FFckI2akIsRUFBSTVMLFNBQVEsU0FBYzhQLEVBQUlDLElBQzFCL0YsRUFBUS9DLFlBQVk2SSxJQUFjLE9BQVBBLEdBQWdCeGUsRUFBUzROLFFBRXhDLElBQVpvUSxFQUFtQlAsRUFBVSxDQUFDaG5CLEdBQU1nb0IsRUFBT2QsR0FBcUIsT0FBWkssRUFBbUJ2bkIsRUFBTUEsRUFBTSxLQUNuRjRuQixFQUFhRyxHQUVqQixLQUNPLEVBSVgsUUFBSWpCLEVBQVk1bUIsS0FJaEJxSixFQUFTNE4sT0FBTzZQLEVBQVVDLEVBQU1qbkIsRUFBS2tuQixHQUFPVSxFQUFhMW5CLEtBRWxELEVBQ1QsQ0FFQSxNQUFNK1YsRUFBUSxHQUVSZ1MsRUFBaUJycEIsT0FBT0MsT0FBT3VvQixFQUFZLENBQy9DTSxpQkFDQUUsZUFDQWQsZ0JBeUJGLElBQUs3RSxFQUFRMUMsU0FBU2xLLEdBQ3BCLE1BQU0sSUFBSXNJLFVBQVUsMEJBS3RCLE9BNUJBLFNBQVN1SyxFQUFNaG9CLEVBQU8rbUIsR0FDcEIsSUFBSWhGLEVBQVEvQyxZQUFZaGYsR0FBeEIsQ0FFQSxJQUE4QixJQUExQitWLEVBQU1xSCxRQUFRcGQsR0FDaEIsTUFBTXlKLE1BQU0sa0NBQW9Dc2QsRUFBSy9JLEtBQUssTUFHNURqSSxFQUFNbEksS0FBSzdOLEdBRVgraEIsRUFBUWhLLFFBQVEvWCxHQUFPLFNBQWM2bkIsRUFBSS9uQixJQUt4QixPQUpFaWlCLEVBQVEvQyxZQUFZNkksSUFBYyxPQUFQQSxJQUFnQk4sRUFBUWxpQixLQUNsRWdFLEVBQVV3ZSxFQUFJOUYsRUFBUTdDLFNBQVNwZixHQUFPQSxFQUFJOGlCLE9BQVM5aUIsRUFBS2luQixFQUFNZ0IsS0FJOURDLEVBQU1ILEVBQUlkLEVBQU9BLEVBQUt6bEIsT0FBT3hCLEdBQU8sQ0FBQ0EsR0FFekMsSUFFQWlXLEVBQU00QyxLQWxCZ0MsQ0FtQnhDLENBTUFxUCxDQUFNN1MsR0FFQzlMLENBQ1QsQ0FVQSxTQUFTNGUsRUFBU2xLLEdBQ2hCLE1BQU1tSyxFQUFVLENBQ2QsSUFBSyxNQUNMLElBQUssTUFDTCxJQUFLLE1BQ0wsSUFBSyxNQUNMLElBQUssTUFDTCxNQUFPLElBQ1AsTUFBTyxNQUVULE9BQU8zWCxtQkFBbUJ3TixHQUFLZCxRQUFRLG9CQUFvQixTQUFrQlMsR0FDM0UsT0FBT3dLLEVBQVF4SyxFQUNqQixHQUNGLENBVUEsU0FBU3lLLEVBQXFCbE8sRUFBUTdRLEdBQ3BDM0wsS0FBSzJxQixPQUFTLEdBRWRuTyxHQUFVa04sRUFBV2xOLEVBQVF4YyxLQUFNMkwsRUFDckMsQ0FFQSxNQUFNM0osRUFBWTBvQixFQUFxQjFvQixVQXdCdkMsU0FBU29iLEVBQU8wRSxHQUNkLE9BQU9oUCxtQkFBbUJnUCxHQUN4QnRDLFFBQVEsUUFBUyxLQUNqQkEsUUFBUSxPQUFRLEtBQ2hCQSxRQUFRLFFBQVMsS0FDakJBLFFBQVEsT0FBUSxLQUNoQkEsUUFBUSxRQUFTLEtBQ2pCQSxRQUFRLFFBQVMsSUFDckIsQ0FXQSxTQUFTb0wsR0FBUzllLEVBQUswUSxFQUFRN1EsR0FFN0IsSUFBSzZRLEVBQ0gsT0FBTzFRLEVBR1QsTUFBTStlLEVBQVVsZixHQUFXQSxFQUFReVIsUUFBVUEsRUFFdkMwTixFQUFjbmYsR0FBV0EsRUFBUW9mLFVBRXZDLElBQUlDLEVBVUosR0FQRUEsRUFERUYsRUFDaUJBLEVBQVl0TyxFQUFRN1EsR0FFcEIyWSxFQUFRbEMsa0JBQWtCNUYsR0FDM0NBLEVBQU9oYSxXQUNQLElBQUlrb0IsRUFBcUJsTyxFQUFRN1EsR0FBU25KLFNBQVNxb0IsR0FHbkRHLEVBQWtCLENBQ3BCLE1BQU1DLEVBQWdCbmYsRUFBSTZULFFBQVEsTUFFWCxJQUFuQnNMLElBQ0ZuZixFQUFNQSxFQUFJNFUsTUFBTSxFQUFHdUssSUFFckJuZixLQUE4QixJQUF0QkEsRUFBSTZULFFBQVEsS0FBYyxJQUFNLEtBQU9xTCxDQUNqRCxDQUVBLE9BQU9sZixDQUNULENBdkVBOUosRUFBVXdYLE9BQVMsU0FBZ0J2WixFQUFNc0MsR0FDdkN2QyxLQUFLMnFCLE9BQU92YSxLQUFLLENBQUNuUSxFQUFNc0MsR0FDMUIsRUFFQVAsRUFBVVEsU0FBVyxTQUFrQjBvQixHQUNyQyxNQUFNTCxFQUFVSyxFQUFVLFNBQVMzb0IsR0FDakMsT0FBTzJvQixFQUFRdGpCLEtBQUs1SCxLQUFNdUMsRUFBT2lvQixFQUNuQyxFQUFJQSxFQUVKLE9BQU94cUIsS0FBSzJxQixPQUFPNW5CLEtBQUksU0FBY3VqQixHQUNuQyxPQUFPdUUsRUFBUXZFLEVBQUssSUFBTSxJQUFNdUUsRUFBUXZFLEVBQUssR0FDL0MsR0FBRyxJQUFJL0YsS0FBSyxJQUNkLEVBK0hBLElBQUk0SyxHQWxFSixNQUFNQyxtQkFDSjdHLGNBQ0V2a0IsS0FBS3FyQixTQUFXLEVBQ2xCLENBVUFDLElBQUlDLEVBQVdDLEVBQVU3ZixHQU92QixPQU5BM0wsS0FBS3FyQixTQUFTamIsS0FBSyxDQUNqQm1iLFlBQ0FDLFdBQ0FDLGNBQWE5ZixHQUFVQSxFQUFROGYsWUFDL0JDLFFBQVMvZixFQUFVQSxFQUFRK2YsUUFBVSxPQUVoQzFyQixLQUFLcXJCLFNBQVN2aUIsT0FBUyxDQUNoQyxDQVNBNmlCLE1BQU1oakIsR0FDQTNJLEtBQUtxckIsU0FBUzFpQixLQUNoQjNJLEtBQUtxckIsU0FBUzFpQixHQUFNLEtBRXhCLENBT0FpakIsUUFDTTVyQixLQUFLcXJCLFdBQ1ByckIsS0FBS3FyQixTQUFXLEdBRXBCLENBWUEvUSxRQUFRdUcsR0FDTnlELEVBQVFoSyxRQUFRdGEsS0FBS3FyQixVQUFVLFNBQXdCUSxHQUMzQyxPQUFOQSxHQUNGaEwsRUFBR2dMLEVBRVAsR0FDRixHQUtFQyxHQUF1QixDQUN6QkMsbUJBQW1CLEVBQ25CQyxtQkFBbUIsRUFDbkJDLHFCQUFxQixHQVNuQkMsR0FBYSxDQUNmQyxXQUFXLEVBQ1hDLFFBQVMsQ0FDUDFQLGdCQVQrQyxvQkFBcEJBLGdCQUFrQ0EsZ0JBQWtCZ08sRUFVL0V2TSxTQVJpQyxvQkFBYkEsU0FBMkJBLFNBQVcsS0FTMUR2RyxLQVB5QixvQkFBVEEsS0FBdUJBLEtBQU8sTUFTaER5VSxVQUFXLENBQUMsT0FBUSxRQUFTLE9BQVEsT0FBUSxNQUFPLFNBR3RELE1BQU1DLEdBQWtDLG9CQUFYNU4sUUFBOEMsb0JBQWI2TixTQW1CeERDLElBQ0hDLEdBRXVCLG9CQUFkQyxXQUE2QkEsVUFBVUQsUUFEeENILElBQWlCLENBQUMsY0FBZSxlQUFnQixNQUFNM00sUUFBUThNLElBQVcsR0FGdkQsSUFDM0JBLEdBYUgsTUFBTUUsR0FFMkIsb0JBQXRCQyxtQkFFUGpuQixnQkFBZ0JpbkIsbUJBQ2MsbUJBQXZCam5CLEtBQUtrbkIsY0FJVkMsR0FBU1IsSUFBaUI1TixPQUFPcU8sU0FBU0MsTUFBUSxtQkFFeEQsSUFRSUMsR0FBVyxJQVJVaHNCLE9BQU9pc0IsT0FBTyxDQUNyQ0MsVUFBVyxLQUNYYixjQUFlQSxHQUNmSywrQkFBZ0NBLEdBQ2hDSCxzQkFBdUJBLEdBQ3ZCTSxPQUFRQSxRQUtMWixJQTRETCxTQUFTa0IsR0FBZXhoQixHQUN0QixTQUFTeWhCLEVBQVUvRCxFQUFNL21CLEVBQU82bEIsRUFBUWlDLEdBQ3RDLElBQUlwcUIsRUFBT3FwQixFQUFLZSxLQUVoQixHQUFhLGNBQVRwcUIsRUFBc0IsT0FBTyxFQUVqQyxNQUFNcXRCLEVBQWU1RixPQUFPQyxVQUFVMW5CLEdBQ2hDc3RCLEVBQVNsRCxHQUFTZixFQUFLeGdCLE9BRzdCLEdBRkE3SSxHQUFRQSxHQUFRcWtCLEVBQVFsVyxRQUFRZ2EsR0FBVUEsRUFBT3RmLE9BQVM3SSxFQUV0RHN0QixFQU9GLE9BTklqSixFQUFRcUMsV0FBV3lCLEVBQVFub0IsR0FDN0Jtb0IsRUFBT25vQixHQUFRLENBQUNtb0IsRUFBT25vQixHQUFPc0MsR0FFOUI2bEIsRUFBT25vQixHQUFRc0MsR0FHVCtxQixFQUdMbEYsRUFBT25vQixJQUFVcWtCLEVBQVExQyxTQUFTd0csRUFBT25vQixNQUM1Q21vQixFQUFPbm9CLEdBQVEsSUFTakIsT0FOZW90QixFQUFVL0QsRUFBTS9tQixFQUFPNmxCLEVBQU9ub0IsR0FBT29xQixJQUV0Qy9GLEVBQVFsVyxRQUFRZ2EsRUFBT25vQixNQUNuQ21vQixFQUFPbm9CLEdBL0NiLFNBQXVCaW1CLEdBQ3JCLE1BQU14TyxFQUFNLENBQUMsRUFDUHRWLEVBQU9uQixPQUFPbUIsS0FBSzhqQixHQUN6QixJQUFJOUYsRUFDSixNQUFNdUMsRUFBTXZnQixFQUFLMEcsT0FDakIsSUFBSXpHLEVBQ0osSUFBSytkLEVBQUksRUFBR0EsRUFBSXVDLEVBQUt2QyxJQUNuQi9kLEVBQU1ELEVBQUtnZSxHQUNYMUksRUFBSXJWLEdBQU82akIsRUFBSTdqQixHQUVqQixPQUFPcVYsQ0FDVCxDQW9DcUI4VixDQUFjcEYsRUFBT25vQixNQUc5QnF0QixDQUNWLENBRUEsR0FBSWhKLEVBQVFFLFdBQVc1WSxJQUFhMFksRUFBUTVDLFdBQVc5VixFQUFTbUUsU0FBVSxDQUN4RSxNQUFNMkgsRUFBTSxDQUFDLEVBTWIsT0FKQTRNLEVBQVE2QixhQUFhdmEsR0FBVSxDQUFDM0wsRUFBTXNDLEtBQ3BDOHFCLEVBMUVOLFNBQXVCcHRCLEdBS3JCLE9BQU9xa0IsRUFBUWlDLFNBQVMsZ0JBQWlCdG1CLEdBQU04QyxLQUFJa2QsR0FDN0IsT0FBYkEsRUFBTSxHQUFjLEdBQUtBLEVBQU0sSUFBTUEsRUFBTSxJQUV0RCxDQWtFZ0J3TixDQUFjeHRCLEdBQU9zQyxFQUFPbVYsRUFBSyxFQUFFLElBR3hDQSxDQUNULENBRUEsT0FBTyxJQUNULENBMkJBLE1BQU1nVyxHQUFXLENBRWZDLGFBQWM3QixHQUVkOEIsUUFBUyxDQUFDLE1BQU8sT0FBUSxTQUV6QkMsaUJBQWtCLENBQUMsU0FBMEJodUIsRUFBTStSLEdBQ2pELE1BQU1xRixFQUFjckYsRUFBUWtjLGtCQUFvQixHQUMxQ0MsRUFBcUI5VyxFQUFZMEksUUFBUSxxQkFBdUIsRUFDaEVxTyxFQUFrQjFKLEVBQVExQyxTQUFTL2hCLEdBRXJDbXVCLEdBQW1CMUosRUFBUWpCLFdBQVd4akIsS0FDeENBLEVBQU8sSUFBSXNlLFNBQVN0ZSxJQUt0QixHQUZtQnlrQixFQUFRRSxXQUFXM2tCLEdBR3BDLE9BQU9rdUIsRUFBcUJ4Z0IsS0FBS0MsVUFBVTRmLEdBQWV2dEIsSUFBU0EsRUFHckUsR0FBSXlrQixFQUFROUMsY0FBYzNoQixJQUN4QnlrQixFQUFRalAsU0FBU3hWLElBQ2pCeWtCLEVBQVE5TyxTQUFTM1YsSUFDakJ5a0IsRUFBUXJDLE9BQU9waUIsSUFDZnlrQixFQUFRcEMsT0FBT3JpQixJQUNmeWtCLEVBQVFqQyxpQkFBaUJ4aUIsR0FFekIsT0FBT0EsRUFFVCxHQUFJeWtCLEVBQVFJLGtCQUFrQjdrQixHQUM1QixPQUFPQSxFQUFLeVgsT0FFZCxHQUFJZ04sRUFBUWxDLGtCQUFrQnZpQixHQUU1QixPQURBK1IsRUFBUXFjLGVBQWUsbURBQW1ELEdBQ25FcHVCLEVBQUsyQyxXQUdkLElBQUkyZixFQUVKLEdBQUk2TCxFQUFpQixDQUNuQixHQUFJL1csRUFBWTBJLFFBQVEsc0NBQXdDLEVBQzlELE9BMUtSLFNBQTBCOWYsRUFBTThMLEdBQzlCLE9BQU8rZCxFQUFXN3BCLEVBQU0sSUFBSW90QixHQUFTYixRQUFRMVAsZ0JBQW1CemIsT0FBT0MsT0FBTyxDQUM1RTRvQixRQUFTLFNBQVN2bkIsRUFBT0YsRUFBS2luQixFQUFNNEUsR0FDbEMsT0FBSWpCLEdBQVNrQixRQUFVN0osRUFBUWpQLFNBQVM5UyxJQUN0Q3ZDLEtBQUt3WixPQUFPblgsRUFBS0UsRUFBTUMsU0FBUyxZQUN6QixHQUdGMHJCLEVBQVFuRSxlQUFlaEosTUFBTS9nQixLQUFNeWdCLFVBQzVDLEdBQ0M5VSxHQUNMLENBK0pleWlCLENBQWlCdnVCLEVBQU1HLEtBQUtxdUIsZ0JBQWdCN3JCLFdBR3JELElBQUsyZixFQUFhbUMsRUFBUW5DLFdBQVd0aUIsS0FBVW9YLEVBQVkwSSxRQUFRLHdCQUEwQixFQUFHLENBQzlGLE1BQU0yTyxFQUFZdHVCLEtBQUt1dUIsS0FBT3Z1QixLQUFLdXVCLElBQUlwUSxTQUV2QyxPQUFPdUwsRUFDTHZILEVBQWEsQ0FBQyxVQUFXdGlCLEdBQVFBLEVBQ2pDeXVCLEdBQWEsSUFBSUEsRUFDakJ0dUIsS0FBS3F1QixlQUVULENBQ0YsQ0FFQSxPQUFJTCxHQUFtQkQsR0FDckJuYyxFQUFRcWMsZUFBZSxvQkFBb0IsR0F4RWpELFNBQXlCTyxFQUFVQyxFQUFRdkQsR0FDekMsR0FBSTVHLEVBQVE3QyxTQUFTK00sR0FDbkIsSUFFRSxPQURDQyxHQUFVbGhCLEtBQUttaEIsT0FBT0YsR0FDaEJsSyxFQUFRYSxLQUFLcUosRUFLdEIsQ0FKRSxNQUFPRyxHQUNQLEdBQWUsZ0JBQVhBLEVBQUUxdUIsS0FDSixNQUFNMHVCLENBRVYsQ0FHRixPQUFRekQsR0FBVzNkLEtBQUtDLFdBQVdnaEIsRUFDckMsQ0E0RGFJLENBQWdCL3VCLElBR2xCQSxDQUNULEdBRUFndkIsa0JBQW1CLENBQUMsU0FBMkJodkIsR0FDN0MsTUFBTTh0QixFQUFlM3RCLEtBQUsydEIsY0FBZ0JELEdBQVNDLGFBQzdDM0IsRUFBb0IyQixHQUFnQkEsRUFBYTNCLGtCQUNqRDhDLEVBQXNDLFNBQXRCOXVCLEtBQUsrdUIsYUFFM0IsR0FBSXpLLEVBQVEvQixXQUFXMWlCLElBQVN5a0IsRUFBUWpDLGlCQUFpQnhpQixHQUN2RCxPQUFPQSxFQUdULEdBQUlBLEdBQVF5a0IsRUFBUTdDLFNBQVM1aEIsS0FBV21zQixJQUFzQmhzQixLQUFLK3VCLGNBQWlCRCxHQUFnQixDQUNsRyxNQUNNRSxJQURvQnJCLEdBQWdCQSxFQUFhNUIsb0JBQ1ArQyxFQUVoRCxJQUNFLE9BQU92aEIsS0FBS21oQixNQUFNN3VCLEVBUXBCLENBUEUsTUFBTzh1QixHQUNQLEdBQUlLLEVBQW1CLENBQ3JCLEdBQWUsZ0JBQVhMLEVBQUUxdUIsS0FDSixNQUFNdW9CLEVBQVdyTyxLQUFLd1UsRUFBR25HLEVBQVd5RyxpQkFBa0JqdkIsS0FBTSxLQUFNQSxLQUFLMkMsVUFFekUsTUFBTWdzQixDQUNSLENBQ0YsQ0FDRixDQUVBLE9BQU85dUIsQ0FDVCxHQU1Ba2MsUUFBUyxFQUVUbVQsZUFBZ0IsYUFDaEJDLGVBQWdCLGVBRWhCQyxrQkFBbUIsRUFDbkJsVCxlQUFnQixFQUVoQnFTLElBQUssQ0FDSHBRLFNBQVU4TyxHQUFTYixRQUFRak8sU0FDM0J2RyxLQUFNcVYsR0FBU2IsUUFBUXhVLE1BR3pCeVgsZUFBZ0IsU0FBd0Ivb0IsR0FDdEMsT0FBT0EsR0FBVSxLQUFPQSxFQUFTLEdBQ25DLEVBRUFzTCxRQUFTLENBQ1AwZCxPQUFRLENBQ04sT0FBVSxvQ0FDVixvQkFBZ0JuWixLQUt0Qm1PLEVBQVFoSyxRQUFRLENBQUMsU0FBVSxNQUFPLE9BQVEsT0FBUSxNQUFPLFVBQVc4QixJQUNsRXNSLEdBQVM5YixRQUFRd0ssR0FBVSxDQUFDLENBQUMsSUFHL0IsSUFBSW1ULEdBQWE3QixHQUlqQixNQUFNOEIsR0FBb0JsTCxFQUFReUMsWUFBWSxDQUM1QyxNQUFPLGdCQUFpQixpQkFBa0IsZUFBZ0IsT0FDMUQsVUFBVyxPQUFRLE9BQVEsb0JBQXFCLHNCQUNoRCxnQkFBaUIsV0FBWSxlQUFnQixzQkFDN0MsVUFBVyxjQUFlLGVBOEM1QixNQUFNMEksR0FBYTdZLE9BQU8sYUFFMUIsU0FBUzhZLEdBQWdCQyxHQUN2QixPQUFPQSxHQUFVNVEsT0FBTzRRLEdBQVF4SyxPQUFPL0QsYUFDekMsQ0FFQSxTQUFTd08sR0FBZXJ0QixHQUN0QixPQUFjLElBQVZBLEdBQTRCLE1BQVRBLEVBQ2RBLEVBR0YraEIsRUFBUWxXLFFBQVE3TCxHQUFTQSxFQUFNUSxJQUFJNnNCLElBQWtCN1EsT0FBT3hjLEVBQ3JFLENBZ0JBLFNBQVNzdEIsR0FBaUI1TSxFQUFTMWdCLEVBQU9vdEIsRUFBUS9XLEVBQVFrWCxHQUN4RCxPQUFJeEwsRUFBUTVDLFdBQVc5SSxHQUNkQSxFQUFPaFIsS0FBSzVILEtBQU11QyxFQUFPb3RCLElBRzlCRyxJQUNGdnRCLEVBQVFvdEIsR0FHTHJMLEVBQVE3QyxTQUFTbGYsR0FFbEIraEIsRUFBUTdDLFNBQVM3SSxJQUNlLElBQTNCclcsRUFBTW9kLFFBQVEvRyxHQUduQjBMLEVBQVFmLFNBQVMzSyxHQUNaQSxFQUFPdkMsS0FBSzlULFFBRHJCLE9BTkEsRUFTRixDQXNCQSxNQUFNMmEsYUFDSnFILFlBQVkzUyxHQUNWQSxHQUFXNVIsS0FBS3FhLElBQUl6SSxFQUN0QixDQUVBeUksSUFBSXNWLEVBQVFJLEVBQWdCQyxHQUMxQixNQUFNcnFCLEVBQU8zRixLQUViLFNBQVNpd0IsRUFBVUMsRUFBUUMsRUFBU0MsR0FDbEMsTUFBTUMsRUFBVVgsR0FBZ0JTLEdBRWhDLElBQUtFLEVBQ0gsTUFBTSxJQUFJcmtCLE1BQU0sMENBR2xCLE1BQU0zSixFQUFNaWlCLEVBQVExQixRQUFRamQsRUFBTTBxQixLQUU5Qmh1QixRQUFxQjhULElBQWR4USxFQUFLdEQsS0FBbUMsSUFBYit0QixRQUFtQ2phLElBQWJpYSxJQUF3QyxJQUFkenFCLEVBQUt0RCxNQUN6RnNELEVBQUt0RCxHQUFPOHRCLEdBQVdQLEdBQWVNLEdBRTFDLENBRUEsTUFBTUksRUFBYSxDQUFDMWUsRUFBU3dlLElBQzNCOUwsRUFBUWhLLFFBQVExSSxHQUFTLENBQUNzZSxFQUFRQyxJQUFZRixFQUFVQyxFQUFRQyxFQUFTQyxLQUUzRSxHQUFJOUwsRUFBUXpDLGNBQWM4TixJQUFXQSxhQUFrQjN2QixLQUFLdWtCLFlBQzFEK0wsRUFBV1gsRUFBUUksUUFDZCxHQUFHekwsRUFBUTdDLFNBQVNrTyxLQUFZQSxFQUFTQSxFQUFPeEssVUFyRXhCLGlDQUFpQzlPLEtBcUVxQnNaLEVBckVaeEssUUFzRXZFbUwsRUE3SGFDLEtBQ2pCLE1BQU1DLEVBQVMsQ0FBQyxFQUNoQixJQUFJbnVCLEVBQ0F5ZixFQUNBMUIsRUFzQkosT0FwQkFtUSxHQUFjQSxFQUFXdFYsTUFBTSxNQUFNWCxTQUFRLFNBQWdCbVcsR0FDM0RyUSxFQUFJcVEsRUFBSzlRLFFBQVEsS0FDakJ0ZCxFQUFNb3VCLEVBQUtDLFVBQVUsRUFBR3RRLEdBQUcrRSxPQUFPL0QsY0FDbENVLEVBQU0yTyxFQUFLQyxVQUFVdFEsRUFBSSxHQUFHK0UsUUFFdkI5aUIsR0FBUW11QixFQUFPbnVCLElBQVFtdEIsR0FBa0JudEIsS0FJbEMsZUFBUkEsRUFDRW11QixFQUFPbnVCLEdBQ1RtdUIsRUFBT251QixHQUFLK04sS0FBSzBSLEdBRWpCME8sRUFBT251QixHQUFPLENBQUN5ZixHQUdqQjBPLEVBQU9udUIsR0FBT211QixFQUFPbnVCLEdBQU9tdUIsRUFBT251QixHQUFPLEtBQU95ZixFQUFNQSxFQUUzRCxJQUVPME8sQ0FBTSxFQW1HRUcsQ0FBYWhCLEdBQVNJLFFBQzVCLEdBQUl6TCxFQUFROUIsVUFBVW1OLEdBQzNCLElBQUssTUFBT3R0QixFQUFLRSxLQUFVb3RCLEVBQU81ZixVQUNoQ2tnQixFQUFVMXRCLEVBQU9GLEVBQUsydEIsUUFHZCxNQUFWTCxHQUFrQk0sRUFBVUYsRUFBZ0JKLEVBQVFLLEdBR3RELE9BQU9od0IsSUFDVCxDQUVBMEQsSUFBSWlzQixFQUFRbEIsR0FHVixHQUZBa0IsRUFBU0QsR0FBZ0JDLEdBRWIsQ0FDVixNQUFNdHRCLEVBQU1paUIsRUFBUTFCLFFBQVE1aUIsS0FBTTJ2QixHQUVsQyxHQUFJdHRCLEVBQUssQ0FDUCxNQUFNRSxFQUFRdkMsS0FBS3FDLEdBRW5CLElBQUtvc0IsRUFDSCxPQUFPbHNCLEVBR1QsSUFBZSxJQUFYa3NCLEVBQ0YsT0E1R1YsU0FBcUJuTyxHQUNuQixNQUFNc1EsRUFBUzN2QixPQUFPNkMsT0FBTyxNQUN2QitzQixFQUFXLG1DQUNqQixJQUFJNVEsRUFFSixLQUFRQSxFQUFRNFEsRUFBU25LLEtBQUtwRyxJQUM1QnNRLEVBQU8zUSxFQUFNLElBQU1BLEVBQU0sR0FHM0IsT0FBTzJRLENBQ1QsQ0FrR2lCRSxDQUFZdnVCLEdBR3JCLEdBQUkraEIsRUFBUTVDLFdBQVcrTSxHQUNyQixPQUFPQSxFQUFPN21CLEtBQUs1SCxLQUFNdUMsRUFBT0YsR0FHbEMsR0FBSWlpQixFQUFRZixTQUFTa0wsR0FDbkIsT0FBT0EsRUFBTy9ILEtBQUtua0IsR0FHckIsTUFBTSxJQUFJeWQsVUFBVSx5Q0FDdEIsQ0FDRixDQUNGLENBRUEvUSxJQUFJMGdCLEVBQVFvQixHQUdWLEdBRkFwQixFQUFTRCxHQUFnQkMsR0FFYixDQUNWLE1BQU10dEIsRUFBTWlpQixFQUFRMUIsUUFBUTVpQixLQUFNMnZCLEdBRWxDLFNBQVV0dEIsUUFBcUI4VCxJQUFkblcsS0FBS3FDLElBQXdCMHVCLElBQVdsQixHQUFpQjd2QixFQUFNQSxLQUFLcUMsR0FBTUEsRUFBSzB1QixHQUNsRyxDQUVBLE9BQU8sQ0FDVCxDQUVBeHNCLE9BQU9vckIsRUFBUW9CLEdBQ2IsTUFBTXByQixFQUFPM0YsS0FDYixJQUFJZ3hCLEdBQVUsRUFFZCxTQUFTQyxFQUFhZCxHQUdwQixHQUZBQSxFQUFVVCxHQUFnQlMsR0FFYixDQUNYLE1BQU05dEIsRUFBTWlpQixFQUFRMUIsUUFBUWpkLEVBQU13cUIsSUFFOUI5dEIsR0FBUzB1QixJQUFXbEIsR0FBaUJscUIsRUFBTUEsRUFBS3RELEdBQU1BLEVBQUswdUIsWUFDdERwckIsRUFBS3RELEdBRVoydUIsR0FBVSxFQUVkLENBQ0YsQ0FRQSxPQU5JMU0sRUFBUWxXLFFBQVF1aEIsR0FDbEJBLEVBQU9yVixRQUFRMlcsR0FFZkEsRUFBYXRCLEdBR1JxQixDQUNULENBRUFwRixNQUFNbUYsR0FDSixNQUFNM3VCLEVBQU9uQixPQUFPbUIsS0FBS3BDLE1BQ3pCLElBQUlvZ0IsRUFBSWhlLEVBQUswRyxPQUNUa29CLEdBQVUsRUFFZCxLQUFPNVEsS0FBSyxDQUNWLE1BQU0vZCxFQUFNRCxFQUFLZ2UsR0FDYjJRLElBQVdsQixHQUFpQjd2QixFQUFNQSxLQUFLcUMsR0FBTUEsRUFBSzB1QixHQUFTLFlBQ3REL3dCLEtBQUtxQyxHQUNaMnVCLEdBQVUsRUFFZCxDQUVBLE9BQU9BLENBQ1QsQ0FFQW5SLFVBQVVxUixHQUNSLE1BQU12ckIsRUFBTzNGLEtBQ1A0UixFQUFVLENBQUMsRUFzQmpCLE9BcEJBMFMsRUFBUWhLLFFBQVF0YSxNQUFNLENBQUN1QyxFQUFPb3RCLEtBQzVCLE1BQU10dEIsRUFBTWlpQixFQUFRMUIsUUFBUWhSLEVBQVMrZCxHQUVyQyxHQUFJdHRCLEVBR0YsT0FGQXNELEVBQUt0RCxHQUFPdXRCLEdBQWVydEIsZUFDcEJvRCxFQUFLZ3FCLEdBSWQsTUFBTXdCLEVBQWFELEVBOUp6QixTQUFzQnZCLEdBQ3BCLE9BQU9BLEVBQU94SyxPQUNYL0QsY0FBYzVCLFFBQVEsbUJBQW1CLENBQUM0UixFQUFHQyxFQUFNL1EsSUFDM0MrUSxFQUFLak4sY0FBZ0I5RCxHQUVsQyxDQXlKa0NnUixDQUFhM0IsR0FBVTVRLE9BQU80USxHQUFReEssT0FFOURnTSxJQUFleEIsVUFDVmhxQixFQUFLZ3FCLEdBR2RocUIsRUFBS3dyQixHQUFjdkIsR0FBZXJ0QixHQUVsQ3FQLEVBQVF1ZixJQUFjLENBQUksSUFHckJueEIsSUFDVCxDQUVBNkQsVUFBVTB0QixHQUNSLE9BQU92eEIsS0FBS3VrQixZQUFZMWdCLE9BQU83RCxRQUFTdXhCLEVBQzFDLENBRUE3SSxPQUFPOEksR0FDTCxNQUFNOVosRUFBTXpXLE9BQU82QyxPQUFPLE1BTTFCLE9BSkF3Z0IsRUFBUWhLLFFBQVF0YSxNQUFNLENBQUN1QyxFQUFPb3RCLEtBQ25CLE1BQVRwdEIsSUFBMkIsSUFBVkEsSUFBb0JtVixFQUFJaVksR0FBVTZCLEdBQWFsTixFQUFRbFcsUUFBUTdMLEdBQVNBLEVBQU1nZSxLQUFLLE1BQVFoZSxFQUFNLElBRzdHbVYsQ0FDVCxDQUVBLENBQUNkLE9BQU9tTCxZQUNOLE9BQU85Z0IsT0FBTzhPLFFBQVEvUCxLQUFLMG9CLFVBQVU5UixPQUFPbUwsV0FDOUMsQ0FFQXZmLFdBQ0UsT0FBT3ZCLE9BQU84TyxRQUFRL1AsS0FBSzBvQixVQUFVM2xCLEtBQUksRUFBRTRzQixFQUFRcHRCLEtBQVdvdEIsRUFBUyxLQUFPcHRCLElBQU9nZSxLQUFLLEtBQzVGLENBRVkxSixJQUFQRCxPQUFPQyxlQUNWLE1BQU8sY0FDVCxDQUVBNGEsWUFBWXRRLEdBQ1YsT0FBT0EsYUFBaUJuaEIsS0FBT21oQixFQUFRLElBQUluaEIsS0FBS21oQixFQUNsRCxDQUVBc1EsY0FBY3ZSLEtBQVVxUixHQUN0QixNQUFNRyxFQUFXLElBQUkxeEIsS0FBS2tnQixHQUkxQixPQUZBcVIsRUFBUWpYLFNBQVM4TixHQUFXc0osRUFBU3JYLElBQUkrTixLQUVsQ3NKLENBQ1QsQ0FFQUQsZ0JBQWdCOUIsR0FDZCxNQUlNZ0MsR0FKWTN4QixLQUFLeXZCLElBQWV6dkIsS0FBS3l2QixJQUFjLENBQ3ZEa0MsVUFBVyxDQUFDLElBR2NBLFVBQ3RCM3ZCLEVBQVloQyxLQUFLZ0MsVUFFdkIsU0FBUzR2QixFQUFlekIsR0FDdEIsTUFBTUUsRUFBVVgsR0FBZ0JTLEdBRTNCd0IsRUFBVXRCLE1BdE5yQixTQUF3QjNZLEVBQUtpWSxHQUMzQixNQUFNa0MsRUFBZXZOLEVBQVE2QyxZQUFZLElBQU13SSxHQUUvQyxDQUFDLE1BQU8sTUFBTyxPQUFPclYsU0FBUXdYLElBQzVCN3dCLE9BQU8wVixlQUFlZSxFQUFLb2EsRUFBYUQsRUFBYyxDQUNwRHR2QixNQUFPLFNBQVN3dkIsRUFBTUMsRUFBTUMsR0FDMUIsT0FBT2p5QixLQUFLOHhCLEdBQVlscUIsS0FBSzVILEtBQU0ydkIsRUFBUW9DLEVBQU1DLEVBQU1DLEVBQ3pELEVBQ0FDLGNBQWMsR0FDZCxHQUVOLENBNE1RQyxDQUFlbndCLEVBQVdtdUIsR0FDMUJ3QixFQUFVdEIsSUFBVyxFQUV6QixDQUlBLE9BRkEvTCxFQUFRbFcsUUFBUXVoQixHQUFVQSxFQUFPclYsUUFBUXNYLEdBQWtCQSxFQUFlakMsR0FFbkUzdkIsSUFDVCxFQUdGa2QsYUFBYWtWLFNBQVMsQ0FBQyxlQUFnQixpQkFBa0IsU0FBVSxrQkFBbUIsYUFBYyxrQkFHcEc5TixFQUFRZCxrQkFBa0J0RyxhQUFhbGIsV0FBVyxFQUFFTyxTQUFRRixLQUMxRCxJQUFJZ3dCLEVBQVNod0IsRUFBSSxHQUFHK2hCLGNBQWdCL2hCLEVBQUlxZSxNQUFNLEdBQzlDLE1BQU8sQ0FDTGhkLElBQUssSUFBTW5CLEVBQ1g4WCxJQUFJaVksR0FDRnR5QixLQUFLcXlCLEdBQVVDLENBQ2pCLEVBQ0YsSUFHRmhPLEVBQVFzQyxjQUFjMUosY0FFdEIsSUFBSXFWLEdBQWlCclYsYUFVckIsU0FBU3NWLEdBQWNDLEVBQUs5dkIsR0FDMUIsTUFBTWtKLEVBQVM3TCxNQUFRdXZCLEdBQ2pCdE0sRUFBVXRnQixHQUFZa0osRUFDdEIrRixFQUFVMmdCLEdBQWVwWSxLQUFLOEksRUFBUXJSLFNBQzVDLElBQUkvUixFQUFPb2pCLEVBQVFwakIsS0FRbkIsT0FOQXlrQixFQUFRaEssUUFBUW1ZLEdBQUssU0FBbUI1UixHQUN0Q2hoQixFQUFPZ2hCLEVBQUdqWixLQUFLaUUsRUFBUWhNLEVBQU0rUixFQUFRaU8sWUFBYWxkLEVBQVdBLEVBQVMyRCxZQUFTNlAsRUFDakYsSUFFQXZFLEVBQVFpTyxZQUVEaGdCLENBQ1QsQ0FFQSxTQUFTNnlCLEdBQVNud0IsR0FDaEIsU0FBVUEsSUFBU0EsRUFBTW93QixXQUMzQixDQVdBLFNBQVNDLEdBQWNyc0IsRUFBU3NGLEVBQVFwSyxHQUV0QyttQixFQUFXNWdCLEtBQUs1SCxLQUFpQixNQUFYdUcsRUFBa0IsV0FBYUEsRUFBU2lpQixFQUFXcUssYUFBY2huQixFQUFRcEssR0FDL0Z6QixLQUFLQyxLQUFPLGVBQ2QsQ0FlQSxTQUFTNnlCLEdBQU9DLEVBQVNDLEVBQVFyd0IsR0FDL0IsTUFBTTBzQixFQUFpQjFzQixFQUFTa0osT0FBT3dqQixlQUNsQzFzQixFQUFTMkQsUUFBVytvQixJQUFrQkEsRUFBZTFzQixFQUFTMkQsUUFHakUwc0IsRUFBTyxJQUFJeEssRUFDVCxtQ0FBcUM3bEIsRUFBUzJELE9BQzlDLENBQUNraUIsRUFBV3lLLGdCQUFpQnpLLEVBQVd5RyxrQkFBa0JuSCxLQUFLb0wsTUFBTXZ3QixFQUFTMkQsT0FBUyxLQUFPLEdBQzlGM0QsRUFBU2tKLE9BQ1RsSixFQUFTbEIsUUFDVGtCLElBUEZvd0IsRUFBUXB3QixFQVVaLENBMUJBMmhCLEVBQVFnQixTQUFTc04sR0FBZXBLLEVBQVksQ0FDMUNtSyxZQUFZLElBb0hkLElBQUlRLEdBQXVCLENBQUNDLEVBQVVDLEVBQWtCQyxFQUFPLEtBQzdELElBQUlDLEVBQWdCLEVBQ3BCLE1BQU1DLEVBaEZSLFNBQXFCQyxFQUFjQyxHQUNqQ0QsRUFBZUEsR0FBZ0IsR0FDL0IsTUFBTUUsRUFBUSxJQUFJeGxCLE1BQU1zbEIsR0FDbEJHLEVBQWEsSUFBSXpsQixNQUFNc2xCLEdBQzdCLElBRUlJLEVBRkFDLEVBQU8sRUFDUEMsRUFBTyxFQUtYLE9BRkFMLE9BQWN2ZCxJQUFSdWQsRUFBb0JBLEVBQU0sSUFFekIsU0FBY00sR0FDbkIsTUFBTUMsRUFBTWp0QixLQUFLaXRCLE1BRVhDLEVBQVlOLEVBQVdHLEdBRXhCRixJQUNIQSxFQUFnQkksR0FHbEJOLEVBQU1HLEdBQVFFLEVBQ2RKLEVBQVdFLEdBQVFHLEVBRW5CLElBQUk3VCxFQUFJMlQsRUFDSkksRUFBYSxFQUVqQixLQUFPL1QsSUFBTTBULEdBQ1hLLEdBQWNSLEVBQU12VCxLQUNwQkEsR0FBUXFULEVBU1YsR0FOQUssR0FBUUEsRUFBTyxHQUFLTCxFQUVoQkssSUFBU0MsSUFDWEEsR0FBUUEsRUFBTyxHQUFLTixHQUdsQlEsRUFBTUosRUFBZ0JILEVBQ3hCLE9BR0YsTUFBTVUsRUFBU0YsR0FBYUQsRUFBTUMsRUFFbEMsT0FBT0UsRUFBU3RNLEtBQUt1TSxNQUFtQixJQUFiRixFQUFvQkMsUUFBVWplLENBQzNELENBQ0YsQ0FvQ3VCbWUsQ0FBWSxHQUFJLEtBRXJDLE9BOUJGLFNBQWtCelQsRUFBSXlTLEdBQ3BCLElBQUlpQixFQUFZLEVBQ2hCLE1BQU1DLEVBQVksSUFBT2xCLEVBQ3pCLElBQUltQixFQUFRLEtBQ1osT0FBTyxXQUNMLE1BQU1DLEdBQWlCLElBQVQxMEIsS0FFUmkwQixFQUFNanRCLEtBQUtpdEIsTUFDakIsR0FBSVMsR0FBU1QsRUFBTU0sRUFBWUMsRUFNN0IsT0FMSUMsSUFDRkUsYUFBYUYsR0FDYkEsRUFBUSxNQUVWRixFQUFZTixFQUNMcFQsRUFBR0UsTUFBTSxLQUFNTixXQUVuQmdVLElBQ0hBLEVBQVFHLFlBQVcsS0FDakJILEVBQVEsS0FDUkYsRUFBWXZ0QixLQUFLaXRCLE1BQ1ZwVCxFQUFHRSxNQUFNLEtBQU1OLGFBQ3JCK1QsR0FBYVAsRUFBTU0sSUFFMUIsQ0FDRixDQU1TTSxFQUFTbEcsSUFDZCxNQUFNbUcsRUFBU25HLEVBQUVtRyxPQUNYNWYsRUFBUXlaLEVBQUVvRyxpQkFBbUJwRyxFQUFFelosV0FBUWlCLEVBQ3ZDNmUsRUFBZ0JGLEVBQVN2QixFQUN6QjBCLEVBQU96QixFQUFhd0IsR0FHMUJ6QixFQUFnQnVCLEVBRWhCLE1BQU1qMUIsRUFBTyxDQUNYaTFCLFNBQ0E1ZixRQUNBZ2dCLFNBQVVoZ0IsRUFBUzRmLEVBQVM1ZixPQUFTaUIsRUFDckN3ZCxNQUFPcUIsRUFDUEMsS0FBTUEsUUFBYzllLEVBQ3BCZ2YsVUFBV0YsR0FBUS9mLEdBVkw0ZixHQUFVNWYsR0FVZUEsRUFBUTRmLEdBQVVHLE9BQU85ZSxFQUNoRWlmLE1BQU96RyxFQUNQb0csaUJBQTJCLE1BQVQ3ZixHQUdwQnJWLEVBQUt3ekIsRUFBbUIsV0FBYSxXQUFZLEVBRWpERCxFQUFTdnpCLEVBQUssR0FDYnl6QixFQUFLLEVBR04rQixHQUFrQnBJLEdBQVNULHNCQUk3QixXQUNFLE1BQU04SSxFQUFPLGtCQUFrQmpmLEtBQUtxVyxVQUFVNkksV0FDeENDLEVBQWlCakosU0FBU2tKLGNBQWMsS0FDOUMsSUFBSUMsRUFRSixTQUFTQyxFQUFXN3BCLEdBQ2xCLElBQUlraEIsRUFBT2xoQixFQVdYLE9BVEl3cEIsSUFFRkUsRUFBZUksYUFBYSxPQUFRNUksR0FDcENBLEVBQU93SSxFQUFleEksTUFHeEJ3SSxFQUFlSSxhQUFhLE9BQVE1SSxHQUc3QixDQUNMQSxLQUFNd0ksRUFBZXhJLEtBQ3JCNkksU0FBVUwsRUFBZUssU0FBV0wsRUFBZUssU0FBU3JXLFFBQVEsS0FBTSxJQUFNLEdBQ2hGc1csS0FBTU4sRUFBZU0sS0FDckJDLE9BQVFQLEVBQWVPLE9BQVNQLEVBQWVPLE9BQU92VyxRQUFRLE1BQU8sSUFBTSxHQUMzRXdXLEtBQU1SLEVBQWVRLEtBQU9SLEVBQWVRLEtBQUt4VyxRQUFRLEtBQU0sSUFBTSxHQUNwRXlXLFNBQVVULEVBQWVTLFNBQ3pCQyxLQUFNVixFQUFlVSxLQUNyQkMsU0FBaUQsTUFBdENYLEVBQWVXLFNBQVM1VyxPQUFPLEdBQ3hDaVcsRUFBZVcsU0FDZixJQUFNWCxFQUFlVyxTQUUzQixDQVVBLE9BUkFULEVBQVlDLEVBQVdqWCxPQUFPcU8sU0FBU0MsTUFRaEMsU0FBeUJvSixHQUM5QixNQUFNNUYsRUFBVWxNLEVBQVE3QyxTQUFTMlUsR0FBZVQsRUFBV1MsR0FBY0EsRUFDekUsT0FBUTVGLEVBQU9xRixXQUFhSCxFQUFVRyxVQUNsQ3JGLEVBQU9zRixPQUFTSixFQUFVSSxJQUNoQyxDQUNELENBbERELEdBc0RTLFdBQ0wsT0FBTyxDQUNULEVBR0FPLEdBQVVwSixHQUFTVCxzQkFHckIsQ0FDRThKLE1BQU1yMkIsRUFBTXNDLEVBQU9nMEIsRUFBU2pOLEVBQU1ubUIsRUFBUXF6QixHQUN4QyxNQUFNQyxFQUFTLENBQUN4MkIsRUFBTyxJQUFNNlMsbUJBQW1CdlEsSUFFaEQraEIsRUFBUTNDLFNBQVM0VSxJQUFZRSxFQUFPcm1CLEtBQUssV0FBYSxJQUFJcEosS0FBS3V2QixHQUFTRyxlQUV4RXBTLEVBQVE3QyxTQUFTNkgsSUFBU21OLEVBQU9ybUIsS0FBSyxRQUFVa1osR0FFaERoRixFQUFRN0MsU0FBU3RlLElBQVdzekIsRUFBT3JtQixLQUFLLFVBQVlqTixJQUV6QyxJQUFYcXpCLEdBQW1CQyxFQUFPcm1CLEtBQUssVUFFL0JtYyxTQUFTa0ssT0FBU0EsRUFBT2xXLEtBQUssS0FDaEMsRUFFQW9XLEtBQUsxMkIsR0FDSCxNQUFNZ2dCLEVBQVFzTSxTQUFTa0ssT0FBT3hXLE1BQU0sSUFBSTJXLE9BQU8sYUFBZTMyQixFQUFPLGNBQ3JFLE9BQVFnZ0IsRUFBUTRXLG1CQUFtQjVXLEVBQU0sSUFBTSxJQUNqRCxFQUVBNlcsT0FBTzcyQixHQUNMRCxLQUFLczJCLE1BQU1yMkIsRUFBTSxHQUFJK0csS0FBS2l0QixNQUFRLE1BQ3BDLEdBTUYsQ0FDRXFDLFFBQVMsRUFDVEssS0FBSSxJQUNLLEtBRVRHLFNBQVUsR0F5Q2QsU0FBU0MsR0FBY0MsRUFBU0MsR0FDOUIsT0FBSUQsSUE1QkcsOEJBQThCM2dCLEtBNEJQNGdCLEdBakJoQyxTQUFxQkQsRUFBU0UsR0FDNUIsT0FBT0EsRUFDSEYsRUFBUXhYLFFBQVEsU0FBVSxJQUFNLElBQU0wWCxFQUFZMVgsUUFBUSxPQUFRLElBQ2xFd1gsQ0FDTixDQWNXRyxDQUFZSCxFQUFTQyxHQUV2QkEsQ0FDVCxDQUVBLE1BQU1HLEdBQW1CalcsR0FBVUEsYUFBaUJvUixHQUFpQixJQUFLcFIsR0FBVUEsRUFXcEYsU0FBU2tXLEdBQVlDLEVBQVNDLEdBRTVCQSxFQUFVQSxHQUFXLENBQUMsRUFDdEIsTUFBTTFyQixFQUFTLENBQUMsRUFFaEIsU0FBUzJyQixFQUFlcFAsRUFBUUQsRUFBUXBELEdBQ3RDLE9BQUlULEVBQVF6QyxjQUFjdUcsSUFBVzlELEVBQVF6QyxjQUFjc0csR0FDbEQ3RCxFQUFRUSxNQUFNbGQsS0FBSyxDQUFDbWQsWUFBV3FELEVBQVFELEdBQ3JDN0QsRUFBUXpDLGNBQWNzRyxHQUN4QjdELEVBQVFRLE1BQU0sQ0FBQyxFQUFHcUQsR0FDaEI3RCxFQUFRbFcsUUFBUStaLEdBQ2xCQSxFQUFPekgsUUFFVHlILENBQ1QsQ0FHQSxTQUFTc1AsRUFBb0J6WSxFQUFHQyxFQUFHOEYsR0FDakMsT0FBS1QsRUFBUS9DLFlBQVl0QyxHQUVicUYsRUFBUS9DLFlBQVl2QyxRQUF6QixFQUNFd1ksT0FBZXJoQixFQUFXNkksRUFBRytGLEdBRjdCeVMsRUFBZXhZLEVBQUdDLEVBQUc4RixFQUloQyxDQUdBLFNBQVMyUyxFQUFpQjFZLEVBQUdDLEdBQzNCLElBQUtxRixFQUFRL0MsWUFBWXRDLEdBQ3ZCLE9BQU91WSxPQUFlcmhCLEVBQVc4SSxFQUVyQyxDQUdBLFNBQVMwWSxFQUFpQjNZLEVBQUdDLEdBQzNCLE9BQUtxRixFQUFRL0MsWUFBWXRDLEdBRWJxRixFQUFRL0MsWUFBWXZDLFFBQXpCLEVBQ0V3WSxPQUFlcmhCLEVBQVc2SSxHQUYxQndZLE9BQWVyaEIsRUFBVzhJLEVBSXJDLENBR0EsU0FBUzJZLEVBQWdCNVksRUFBR0MsRUFBRzNjLEdBQzdCLE9BQUlBLEtBQVFpMUIsRUFDSEMsRUFBZXhZLEVBQUdDLEdBQ2hCM2MsS0FBUWcxQixFQUNWRSxPQUFlcmhCLEVBQVc2SSxRQUQ1QixDQUdULENBRUEsTUFBTTZZLEVBQVcsQ0FDZi9yQixJQUFLNHJCLEVBQ0x0YixPQUFRc2IsRUFDUjczQixLQUFNNjNCLEVBQ05WLFFBQVNXLEVBQ1Q5SixpQkFBa0I4SixFQUNsQjlJLGtCQUFtQjhJLEVBQ25CRyxpQkFBa0JILEVBQ2xCNWIsUUFBUzRiLEVBQ1RJLGVBQWdCSixFQUNoQkssZ0JBQWlCTCxFQUNqQk0sY0FBZU4sRUFDZi9KLFFBQVMrSixFQUNUNUksYUFBYzRJLEVBQ2R6SSxlQUFnQnlJLEVBQ2hCeEksZUFBZ0J3SSxFQUNoQk8saUJBQWtCUCxFQUNsQlEsbUJBQW9CUixFQUNwQlMsV0FBWVQsRUFDWnZJLGlCQUFrQnVJLEVBQ2xCemIsY0FBZXliLEVBQ2ZVLGVBQWdCVixFQUNoQlcsVUFBV1gsRUFDWFksVUFBV1osRUFDWGEsV0FBWWIsRUFDWmMsWUFBYWQsRUFDYmUsV0FBWWYsRUFDWmdCLGlCQUFrQmhCLEVBQ2xCdEksZUFBZ0J1SSxFQUNoQmhtQixRQUFTLENBQUNvTixFQUFHQyxJQUFNd1ksRUFBb0JMLEdBQWdCcFksR0FBSW9ZLEdBQWdCblksSUFBSSxJQVNqRixPQU5BcUYsRUFBUWhLLFFBQVFyWixPQUFPbUIsS0FBS25CLE9BQU9DLE9BQU8sQ0FBQyxFQUFHbzJCLEVBQVNDLEtBQVcsU0FBNEJqMUIsR0FDNUYsTUFBTXdpQixFQUFRK1MsRUFBU3YxQixJQUFTbTFCLEVBQzFCbUIsRUFBYzlULEVBQU13UyxFQUFRaDFCLEdBQU9pMUIsRUFBUWoxQixHQUFPQSxHQUN2RGdpQixFQUFRL0MsWUFBWXFYLElBQWdCOVQsSUFBVThTLElBQXFCL3JCLEVBQU92SixHQUFRczJCLEVBQ3JGLElBRU8vc0IsQ0FDVCxDQUVBLElBQUlndEIsR0FBaUJodEIsSUFDbkIsTUFBTWl0QixFQUFZekIsR0FBWSxDQUFDLEVBQUd4ckIsR0FFbEMsSUFhSW9MLEdBYkEsS0FBQ3BYLEVBQUksY0FBRW80QixFQUFhLGVBQUU5SSxFQUFjLGVBQUVELEVBQWMsUUFBRXRkLEVBQU8sS0FBRW1uQixHQUFRRCxFQWUzRSxHQWJBQSxFQUFVbG5CLFFBQVVBLEVBQVUyZ0IsR0FBZXBZLEtBQUt2SSxHQUVsRGtuQixFQUFVaHRCLElBQU04ZSxHQUFTbU0sR0FBYytCLEVBQVU5QixRQUFTOEIsRUFBVWh0QixLQUFNRCxFQUFPMlEsT0FBUTNRLEVBQU9pc0Isa0JBRzVGaUIsR0FDRm5uQixFQUFReUksSUFBSSxnQkFBaUIsU0FDM0IyZSxNQUFNRCxFQUFLaHRCLFVBQVksSUFBTSxLQUFPZ3RCLEVBQUtFLFNBQVdDLFNBQVNwbUIsbUJBQW1CaW1CLEVBQUtFLFdBQWEsTUFNbEczVSxFQUFRRSxXQUFXM2tCLEdBQ3JCLEdBQUlvdEIsR0FBU1QsdUJBQXlCUyxHQUFTTiwrQkFDN0MvYSxFQUFRcWMsb0JBQWU5WCxRQUNsQixJQUFpRCxLQUE1Q2MsRUFBY3JGLEVBQVFrYyxrQkFBNkIsQ0FFN0QsTUFBT3B0QixLQUFTa3dCLEdBQVUzWixFQUFjQSxFQUFZZ0UsTUFBTSxLQUFLbFksS0FBSXltQixHQUFTQSxFQUFNckUsU0FBUXZNLE9BQU91Z0IsU0FBVyxHQUM1R3ZuQixFQUFRcWMsZUFBZSxDQUFDdnRCLEdBQVEseUJBQTBCa3dCLEdBQVFyUSxLQUFLLE1BQ3pFLENBT0YsR0FBSTBNLEdBQVNULHdCQUNYeUwsR0FBaUIzVCxFQUFRNUMsV0FBV3VXLEtBQW1CQSxFQUFnQkEsRUFBY2EsSUFFakZiLElBQW9DLElBQWxCQSxHQUEyQjVDLEdBQWdCeUQsRUFBVWh0QixNQUFPLENBRWhGLE1BQU1zdEIsRUFBWWpLLEdBQWtCRCxHQUFrQm1ILEdBQVFNLEtBQUt6SCxHQUUvRGtLLEdBQ0Z4bkIsRUFBUXlJLElBQUk4VSxFQUFnQmlLLEVBRWhDLENBR0YsT0FBT04sQ0FBUyxFQUtsQixJQUFJTyxHQUZvRCxvQkFBbkJDLGdCQUVLLFNBQVV6dEIsR0FDbEQsT0FBTyxJQUFJMHRCLFNBQVEsU0FBNEJ4RyxFQUFTQyxHQUN0RCxNQUFNd0csRUFBVVgsR0FBY2h0QixHQUM5QixJQUFJNHRCLEVBQWNELEVBQVEzNUIsS0FDMUIsTUFBTXljLEVBQWlCaVcsR0FBZXBZLEtBQUtxZixFQUFRNW5CLFNBQVNpTyxZQUM1RCxJQUNJNlosR0FEQSxhQUFDM0ssR0FBZ0J5SyxFQUVyQixTQUFTblQsSUFDSG1ULEVBQVFmLGFBQ1ZlLEVBQVFmLFlBQVkvbEIsWUFBWWduQixHQUc5QkYsRUFBUUcsUUFDVkgsRUFBUUcsT0FBT0Msb0JBQW9CLFFBQVNGLEVBRWhELENBRUEsSUFBSWo0QixFQUFVLElBQUk2M0IsZUFPbEIsU0FBU08sSUFDUCxJQUFLcDRCLEVBQ0gsT0FHRixNQUFNcTRCLEVBQWtCdkgsR0FBZXBZLEtBQ3JDLDBCQUEyQjFZLEdBQVdBLEVBQVFzNEIseUJBYWhEakgsSUFBTyxTQUFrQnZ3QixHQUN2Qnd3QixFQUFReHdCLEdBQ1I4akIsR0FDRixJQUFHLFNBQWlCMlQsR0FDbEJoSCxFQUFPZ0gsR0FDUDNULEdBQ0YsR0FmaUIsQ0FDZnhtQixLQUhvQmt2QixHQUFpQyxTQUFqQkEsR0FBNEMsU0FBakJBLEVBQ3hDdHRCLEVBQVFrQixTQUEvQmxCLEVBQVF3NEIsYUFHUjN6QixPQUFRN0UsRUFBUTZFLE9BQ2hCOFIsV0FBWTNXLEVBQVEyVyxXQUNwQnhHLFFBQVNrb0IsRUFDVGp1QixTQUNBcEssWUFZRkEsRUFBVSxJQUNaLENBbENBQSxFQUFReTRCLEtBQUtWLEVBQVFwZCxPQUFPZ0ksY0FBZW9WLEVBQVExdEIsS0FBSyxHQUd4RHJLLEVBQVFzYSxRQUFVeWQsRUFBUXpkLFFBaUN0QixjQUFldGEsRUFFakJBLEVBQVFvNEIsVUFBWUEsRUFHcEJwNEIsRUFBUTA0QixtQkFBcUIsV0FDdEIxNEIsR0FBa0MsSUFBdkJBLEVBQVEyNEIsYUFRRCxJQUFuQjM0QixFQUFRNkUsUUFBa0I3RSxFQUFRNDRCLGFBQXdELElBQXpDNTRCLEVBQVE0NEIsWUFBWTFhLFFBQVEsV0FLakZpVixXQUFXaUYsRUFDYixFQUlGcDRCLEVBQVE2NEIsUUFBVSxXQUNYNzRCLElBSUx1eEIsRUFBTyxJQUFJeEssRUFBVyxrQkFBbUJBLEVBQVcrUixhQUFjZixFQUFTLzNCLElBRzNFQSxFQUFVLEtBQ1osRUFHQUEsRUFBUSs0QixRQUFVLFdBR2hCeEgsRUFBTyxJQUFJeEssRUFBVyxnQkFBaUJBLEVBQVdpUyxZQUFhakIsRUFBUy8zQixJQUd4RUEsRUFBVSxJQUNaLEVBR0FBLEVBQVFpNUIsVUFBWSxXQUNsQixJQUFJQyxFQUFzQm5CLEVBQVF6ZCxRQUFVLGNBQWdCeWQsRUFBUXpkLFFBQVUsY0FBZ0IsbUJBQzlGLE1BQU00UixFQUFlNkwsRUFBUTdMLGNBQWdCN0IsR0FDekMwTixFQUFRbUIsc0JBQ1ZBLEVBQXNCbkIsRUFBUW1CLHFCQUVoQzNILEVBQU8sSUFBSXhLLEVBQ1RtUyxFQUNBaE4sRUFBYTFCLG9CQUFzQnpELEVBQVdvUyxVQUFZcFMsRUFBVytSLGFBQ3JFZixFQUNBLzNCLElBR0ZBLEVBQVUsSUFDWixPQUdnQjBVLElBQWhCc2pCLEdBQTZCbmQsRUFBZTJSLGVBQWUsTUFHdkQscUJBQXNCeHNCLEdBQ3hCNmlCLEVBQVFoSyxRQUFRZ0MsRUFBZW9NLFVBQVUsU0FBMEI1RyxFQUFLemYsR0FDdEVaLEVBQVFvNUIsaUJBQWlCeDRCLEVBQUt5ZixFQUNoQyxJQUlHd0MsRUFBUS9DLFlBQVlpWSxFQUFReEIsbUJBQy9CdjJCLEVBQVF1MkIsa0JBQW9Cd0IsRUFBUXhCLGlCQUlsQ2pKLEdBQWlDLFNBQWpCQSxJQUNsQnR0QixFQUFRc3RCLGFBQWV5SyxFQUFRekssY0FJUyxtQkFBL0J5SyxFQUFRckIsb0JBQ2pCMTJCLEVBQVFxNUIsaUJBQWlCLFdBQVkzSCxHQUFxQnFHLEVBQVFyQixvQkFBb0IsSUFJaEQsbUJBQTdCcUIsRUFBUXRCLGtCQUFtQ3oyQixFQUFRczVCLFFBQzVEdDVCLEVBQVFzNUIsT0FBT0QsaUJBQWlCLFdBQVkzSCxHQUFxQnFHLEVBQVF0QixvQkFHdkVzQixFQUFRZixhQUFlZSxFQUFRRyxVQUdqQ0QsRUFBYXNCLElBQ052NUIsSUFHTHV4QixHQUFRZ0ksR0FBVUEsRUFBT3Q2QixLQUFPLElBQUlreUIsR0FBYyxLQUFNL21CLEVBQVFwSyxHQUFXdTVCLEdBQzNFdjVCLEVBQVF3NUIsUUFDUng1QixFQUFVLEtBQUksRUFHaEIrM0IsRUFBUWYsYUFBZWUsRUFBUWYsWUFBWXlDLFVBQVV4QixHQUNqREYsRUFBUUcsU0FDVkgsRUFBUUcsT0FBT3dCLFFBQVV6QixJQUFlRixFQUFRRyxPQUFPbUIsaUJBQWlCLFFBQVNwQixLQUlyRixNQUFNN0QsRUF2a0JWLFNBQXVCL3BCLEdBQ3JCLE1BQU1tVSxFQUFRLDRCQUE0QnlHLEtBQUs1YSxHQUMvQyxPQUFPbVUsR0FBU0EsRUFBTSxJQUFNLEVBQzlCLENBb2tCcUJtYixDQUFjNUIsRUFBUTF0QixLQUVuQytwQixJQUFzRCxJQUExQzVJLEdBQVNaLFVBQVUxTSxRQUFRa1csR0FDekM3QyxFQUFPLElBQUl4SyxFQUFXLHdCQUEwQnFOLEVBQVcsSUFBS3JOLEVBQVd5SyxnQkFBaUJwbkIsSUFNOUZwSyxFQUFRNDVCLEtBQUs1QixHQUFlLEtBQzlCLEdBQ0YsRUE0Q0EsSUFBSTZCLEdBMUNtQixDQUFDQyxFQUFTeGYsS0FDL0IsSUFFSW9mLEVBRkFLLEVBQWEsSUFBSUMsZ0JBSXJCLE1BQU1uQixFQUFVLFNBQVVVLEdBQ3hCLElBQUtHLEVBQVMsQ0FDWkEsR0FBVSxFQUNWem9CLElBQ0EsTUFBTXNuQixFQUFNZ0IsYUFBa0JodkIsTUFBUWd2QixFQUFTaDdCLEtBQUtxVCxPQUNwRG1vQixFQUFXUCxNQUFNakIsYUFBZXhSLEVBQWF3UixFQUFNLElBQUlwSCxHQUFjb0gsYUFBZWh1QixNQUFRZ3VCLEVBQUl6ekIsUUFBVXl6QixHQUM1RyxDQUNGLEVBRUEsSUFBSXZGLEVBQVExWSxHQUFXNlksWUFBVyxLQUNoQzBGLEVBQVEsSUFBSTlSLEVBQVcsV0FBV3pNLG1CQUEwQnlNLEVBQVdvUyxXQUFXLEdBQ2pGN2UsR0FFSCxNQUFNckosRUFBYyxLQUNkNm9CLElBQ0Y5RyxHQUFTRSxhQUFhRixHQUN0QkEsRUFBUSxLQUNSOEcsRUFBUWpoQixTQUFRcWYsSUFDZEEsSUFDQ0EsRUFBT0Msb0JBQXNCRCxFQUFPQyxvQkFBb0IsUUFBU1UsR0FBV1gsRUFBT2puQixZQUFZNG5CLEdBQVMsSUFFM0dpQixFQUFVLEtBQ1osRUFHRkEsRUFBUWpoQixTQUFTcWYsR0FBV0EsR0FBVUEsRUFBT21CLGtCQUFvQm5CLEVBQU9tQixpQkFBaUIsUUFBU1IsS0FFbEcsTUFBTSxPQUFDWCxHQUFVNkIsRUFJakIsT0FGQTdCLEVBQU9qbkIsWUFBY0EsRUFFZCxDQUFDaW5CLEVBQVEsS0FDZGxGLEdBQVNFLGFBQWFGLEdBQ3RCQSxFQUFRLElBQUksRUFDWixFQUtKLE1BQU1pSCxHQUFjLFVBQVdDLEVBQU9DLEdBQ3BDLElBQUlqWixFQUFNZ1osRUFBTXBrQixXQUVoQixJQUFLcWtCLEdBQWFqWixFQUFNaVosRUFFdEIsa0JBRE1ELEdBSVIsSUFDSXQwQixFQURBdzBCLEVBQU0sRUFHVixLQUFPQSxFQUFNbFosR0FDWHRiLEVBQU13MEIsRUFBTUQsUUFDTkQsRUFBTWpiLE1BQU1tYixFQUFLeDBCLEdBQ3ZCdzBCLEVBQU14MEIsQ0FFVixFQVFNeTBCLEdBQWMsQ0FBQ3RsQixFQUFRb2xCLEVBQVdHLEVBQVlDLEVBQVU1ZSxLQUM1RCxNQUFNMkUsRUFQVWthLGdCQUFpQkMsRUFBVU4sRUFBV3hlLEdBQ3RELFVBQVcsTUFBTXVlLEtBQVNPLFFBQ2pCUixHQUFZL1csWUFBWUMsT0FBTytXLEdBQVNBLFFBQWV2ZSxFQUFPMkIsT0FBTzRjLElBQVVDLEVBRTFGLENBR21CTyxDQUFVM2xCLEVBQVFvbEIsRUFBV3hlLEdBRTlDLElBQUl1VyxFQUFRLEVBRVosT0FBTyxJQUFJaGEsZUFBZSxDQUN4QmpaLEtBQU0sUUFFTnU3QixXQUFXVCxHQUNULE1BQU0sS0FBQ25WLEVBQUksTUFBRTlqQixTQUFld2YsRUFBU3FFLE9BRXJDLEdBQUlDLEVBR0YsT0FGQW1WLEVBQVdZLGFBQ1hKLElBSUYsSUFBSXJaLEVBQU1wZ0IsRUFBTWdWLFdBQ2hCd2tCLEdBQWNBLEVBQVdwSSxHQUFTaFIsR0FDbEM2WSxFQUFXYSxRQUFRLElBQUlqWixXQUFXN2dCLEdBQ3BDLEVBQ0F5NEIsT0FBTzNuQixJQUNMMm9CLEVBQVMzb0IsR0FDRjBPLEVBQVN1YSxXQUVqQixDQUNEQyxjQUFlLEdBQ2hCLEVBR0dDLEdBQXlCLENBQUN0bkIsRUFBTzJMLEtBQ3JDLE1BQU1rVSxFQUE0QixNQUFUN2YsRUFDekIsT0FBUTRmLEdBQVdGLFlBQVcsSUFBTS9ULEVBQUcsQ0FDckNrVSxtQkFDQTdmLFFBQ0E0ZixZQUNDLEVBR0MySCxHQUFvQyxtQkFBVkMsT0FBMkMsbUJBQVo1Z0IsU0FBOEMsbUJBQWI2Z0IsU0FDMUZDLEdBQTRCSCxJQUE4QyxtQkFBbkI5aUIsZUFHdkRrakIsR0FBYUosS0FBNEMsbUJBQWhCSyxhQUN6QzVSLEdBQTBDLElBQUk0UixZQUFqQ3hjLEdBQVE0SyxHQUFROU4sT0FBT2tELElBQ3RDMmIsTUFBTzNiLEdBQVEsSUFBSThDLGlCQUFpQixJQUFJdVosU0FBU3JjLEdBQUt5YyxnQkFEdEQsSUFBRTdSLEdBSU4sTUFBTThSLEdBQXdCSixJQUE2QixNQUN6RCxJQUFJSyxHQUFpQixFQUVyQixNQUFNQyxFQUFpQixJQUFJcGhCLFFBQVFtUixHQUFTSCxPQUFRLENBQ2xEbHFCLEtBQU0sSUFBSStXLGVBQ1Z5QyxPQUFRLE9BQ0orZ0IsYUFFRixPQURBRixHQUFpQixFQUNWLE1BQ1QsSUFDQ3JyQixRQUFRM0MsSUFBSSxnQkFFZixPQUFPZ3VCLElBQW1CQyxDQUMzQixFQWIwRCxHQWlCckRFLEdBQXlCUixNQUErQixNQUM1RCxJQUNFLE9BQU90WSxFQUFRakMsaUJBQWlCLElBQUlzYSxTQUFTLElBQUkvNUIsS0FHbkQsQ0FGRSxNQUFNbzNCLEdBRVIsQ0FDRCxFQU42RCxHQVF4RHFELEdBQVksQ0FDaEI3bUIsT0FBUTRtQixJQUEwQixDQUFFeDVCLEdBQVFBLEVBQUloQixPQUc3QixJQUFFZ0IsR0FBdkI2NEIsS0FBdUI3NEIsR0FPcEIsSUFBSSs0QixTQU5MLENBQUMsT0FBUSxjQUFlLE9BQVEsV0FBWSxVQUFVcmlCLFNBQVE1WixLQUMzRDI4QixHQUFVMzhCLEtBQVUyOEIsR0FBVTM4QixHQUFRNGpCLEVBQVE1QyxXQUFXOWQsR0FBSWxELElBQVVrRCxHQUFRQSxFQUFJbEQsS0FDbEYsQ0FBQzQ4QixFQUFHenhCLEtBQ0YsTUFBTSxJQUFJMmMsRUFBVyxrQkFBa0I5bkIsc0JBQTBCOG5CLEVBQVcrVSxnQkFBaUIxeEIsRUFBTyxFQUNwRyxLQUlSLE1BMEJNMnhCLEdBQW9CdkIsTUFBT3JxQixFQUFTaFAsS0FDeEMsTUFBTWtHLEVBQVN3YixFQUFRa0QsZUFBZTVWLEVBQVE2ckIsb0JBRTlDLE9BQWlCLE1BQVYzMEIsRUE3QmFtekIsT0FBT3I1QixHQUNmLE1BQVJBLEVBQ0ssRUFHTjBoQixFQUFRcEMsT0FBT3RmLEdBQ1RBLEVBQUs2VCxLQUdYNk4sRUFBUTBELG9CQUFvQnBsQixVQUNmLElBQUlrWixRQUFRbFosR0FBTW02QixlQUFleGxCLFdBRzlDK00sRUFBUUksa0JBQWtCOWhCLEdBQ3BCQSxFQUFLMlUsWUFHWCtNLEVBQVFsQyxrQkFBa0J4ZixLQUMzQkEsR0FBYyxJQUdiMGhCLEVBQVE3QyxTQUFTN2UsVUFDSmk2QixHQUFXajZCLElBQU8yVSxnQkFEbEMsR0FRd0JtbUIsQ0FBYzk2QixHQUFRa0csQ0FBTSxFQW1JdEQsTUFBTTYwQixHQUFnQixDQUNwQkMsS0ExZ0VnQixLQTJnRWhCQyxJQUFLeEUsR0FDTHFELE1BbklpQkQsSUFBb0IsT0FBUTV3QixJQUM3QyxJQUFJLElBQ0ZDLEVBQUcsT0FDSHNRLEVBQU0sS0FDTnZjLEVBQUksT0FDSjg1QixFQUFNLFlBQ05sQixFQUFXLFFBQ1gxYyxFQUFPLG1CQUNQb2MsRUFBa0IsaUJBQ2xCRCxFQUFnQixhQUNoQm5KLEVBQVksUUFDWm5kLEVBQU8sZ0JBQ1BvbUIsRUFBa0IsY0FBYSxhQUMvQjhGLEdBQ0VqRixHQUFjaHRCLEdBRWxCa2pCLEVBQWVBLEdBQWdCQSxFQUFlLElBQUkzTixjQUFnQixPQUVsRSxJQUdJMmMsRUFBVXQ4QixHQUhUdThCLEVBQWdCQyxHQUFnQnRFLEdBQVVsQixHQUFlMWMsRUFDNUR1ZixHQUFpQixDQUFDM0IsRUFBUWxCLEdBQWMxYyxHQUFXLEdBSXJELE1BQU1pZ0IsRUFBVyxNQUNkK0IsR0FBWW5KLFlBQVcsS0FDdEJvSixHQUFrQkEsRUFBZXRyQixhQUFhLElBR2hEcXJCLEdBQVcsQ0FBSSxFQUdqQixJQUFJRyxFQUVKLElBQ0UsR0FDRWhHLEdBQW9COEUsSUFBb0MsUUFBWDVnQixHQUErQixTQUFYQSxHQUNHLEtBQW5FOGhCLFFBQTZCVixHQUFrQjVyQixFQUFTL1IsSUFDekQsQ0FDQSxJQU1JcytCLEVBTkFDLEVBQVcsSUFBSXRpQixRQUFRaFEsRUFBSyxDQUM5QnNRLE9BQVEsT0FDUnhaLEtBQU0vQyxFQUNOczlCLE9BQVEsU0FLTjdZLEVBQVFFLFdBQVcza0IsS0FBVXMrQixFQUFvQkMsRUFBU3hzQixRQUFRbE8sSUFBSSxrQkFDeEVrTyxFQUFRcWMsZUFBZWtRLEdBR3JCQyxFQUFTeDdCLE9BQ1gvQyxFQUFPaThCLEdBQVlzQyxFQUFTeDdCLEtBMUdULE1BMEdtQzQ1QixHQUNwRDBCLEVBQ0EvSyxHQUFxQitFLElBQ3BCLEtBQU0yRSxJQUViLENBRUt2WSxFQUFRN0MsU0FBU3VXLEtBQ3BCQSxFQUFrQkEsRUFBa0IsT0FBUyxRQUcvQ3YyQixFQUFVLElBQUlxYSxRQUFRaFEsRUFBSyxJQUN0Qmd5QixFQUNIbkUsT0FBUXFFLEVBQ1I1aEIsT0FBUUEsRUFBT2dJLGNBQ2Z4UyxRQUFTQSxFQUFRaU8sWUFBWTZJLFNBQzdCOWxCLEtBQU0vQyxFQUNOczlCLE9BQVEsT0FDUm5GLG9CQUdGLElBQUlyMUIsUUFBaUIrNUIsTUFBTWo3QixHQUUzQixNQUFNNDhCLEVBQW1CakIsS0FBNEMsV0FBakJyTyxHQUE4QyxhQUFqQkEsR0FFakYsR0FBSXFPLEtBQTJCakYsR0FBc0JrRyxHQUFtQixDQUN0RSxNQUFNMXlCLEVBQVUsQ0FBQyxFQUVqQixDQUFDLFNBQVUsYUFBYyxXQUFXMk8sU0FBUWhZLElBQzFDcUosRUFBUXJKLEdBQVFLLEVBQVNMLEVBQUssSUFHaEMsTUFBTWc4QixFQUF3QmhhLEVBQVFrRCxlQUFlN2tCLEVBQVNpUCxRQUFRbE8sSUFBSSxtQkFFMUVmLEVBQVcsSUFBSWc2QixTQUNiYixHQUFZbjVCLEVBQVNDLEtBN0lGLE1BNkk0QnUxQixHQUFzQnFFLEdBQ25FOEIsRUFDQW5MLEdBQXFCZ0YsR0FBb0IsSUFDeENrRyxHQUFvQnJDLEVBQVVhLElBQ2pDbHhCLEVBRUosQ0FFQW9qQixFQUFlQSxHQUFnQixPQUUvQixJQUFJd1AsUUFBcUJsQixHQUFVL1ksRUFBUTFCLFFBQVF5YSxHQUFXdE8sSUFBaUIsUUFBUXBzQixFQUFVa0osR0FNakcsT0FKQ3d5QixHQUFvQnJDLElBRXJCaUMsR0FBZUEsVUFFRixJQUFJMUUsU0FBUSxDQUFDeEcsRUFBU0MsS0FDakNGLEdBQU9DLEVBQVNDLEVBQVEsQ0FDdEJuekIsS0FBTTArQixFQUNOM3NCLFFBQVMyZ0IsR0FBZXBZLEtBQUt4WCxFQUFTaVAsU0FDdEN0TCxPQUFRM0QsRUFBUzJELE9BQ2pCOFIsV0FBWXpWLEVBQVN5VixXQUNyQnZNLFNBQ0FwSyxXQUNBLEdBZU4sQ0FiRSxNQUFPdTRCLEdBR1AsR0FGQWdDLElBRUloQyxHQUFvQixjQUFiQSxFQUFJLzVCLE1BQXdCLFNBQVNvVyxLQUFLMmpCLEVBQUl6ekIsU0FDdkQsTUFBTXRGLE9BQU9DLE9BQ1gsSUFBSXNuQixFQUFXLGdCQUFpQkEsRUFBV2lTLFlBQWE1dUIsRUFBUXBLLEdBQ2hFLENBQ0V5bkIsTUFBTzhRLEVBQUk5USxPQUFTOFEsSUFLMUIsTUFBTXhSLEVBQVdyTyxLQUFLNmYsRUFBS0EsR0FBT0EsRUFBSTlvQixLQUFNckYsRUFBUXBLLEVBQ3RELENBQ0QsSUFRRDZpQixFQUFRaEssUUFBUXFqQixJQUFlLENBQUM5YyxFQUFJdGUsS0FDbEMsR0FBSXNlLEVBQUksQ0FDTixJQUNFNWYsT0FBTzBWLGVBQWVrSyxFQUFJLE9BQVEsQ0FBQ3RlLFNBR3JDLENBRkUsTUFBT29zQixHQUVULENBQ0ExdEIsT0FBTzBWLGVBQWVrSyxFQUFJLGNBQWUsQ0FBQ3RlLFNBQzVDLEtBR0YsTUFBTWk4QixHQUFnQm5yQixHQUFXLEtBQUtBLElBRWhDb3JCLEdBQW9CN1EsR0FBWXRKLEVBQVE1QyxXQUFXa00sSUFBd0IsT0FBWkEsSUFBZ0MsSUFBWkEsRUFFekYsSUFBSThRLEdBQ1dBLElBQ1hBLEVBQVdwYSxFQUFRbFcsUUFBUXN3QixHQUFZQSxFQUFXLENBQUNBLEdBRW5ELE1BQU0sT0FBQzUxQixHQUFVNDFCLEVBQ2pCLElBQUlDLEVBQ0EvUSxFQUVKLE1BQU1nUixFQUFrQixDQUFDLEVBRXpCLElBQUssSUFBSXhlLEVBQUksRUFBR0EsRUFBSXRYLEVBQVFzWCxJQUFLLENBRS9CLElBQUl6WCxFQUlKLEdBTEFnMkIsRUFBZ0JELEVBQVN0ZSxHQUd6QndOLEVBQVUrUSxHQUVMRixHQUFpQkUsS0FDcEIvUSxFQUFVK1AsSUFBZWgxQixFQUFLb1csT0FBTzRmLElBQWdCdmQsb0JBRXJDakwsSUFBWnlYLEdBQ0YsTUFBTSxJQUFJcEYsRUFBVyxvQkFBb0I3ZixNQUk3QyxHQUFJaWxCLEVBQ0YsTUFHRmdSLEVBQWdCajJCLEdBQU0sSUFBTXlYLEdBQUt3TixDQUNuQyxDQUVBLElBQUtBLEVBQVMsQ0FFWixNQUFNaVIsRUFBVTU5QixPQUFPOE8sUUFBUTZ1QixHQUM1Qjc3QixLQUFJLEVBQUU0RixFQUFJdkksS0FBVyxXQUFXdUksT0FDcEIsSUFBVnZJLEVBQWtCLHNDQUF3QyxtQ0FPL0QsTUFBTSxJQUFJb29CLEVBQ1IseURBTE0xZixFQUNMKzFCLEVBQVEvMUIsT0FBUyxFQUFJLFlBQWMrMUIsRUFBUTk3QixJQUFJeTdCLElBQWNqZSxLQUFLLE1BQVEsSUFBTWllLEdBQWFLLEVBQVEsSUFDdEcsMkJBSUEsa0JBRUosQ0FFQSxPQUFPalIsQ0FBTyxFQVlsQixTQUFTa1IsR0FBNkJqekIsR0FLcEMsR0FKSUEsRUFBTzRzQixhQUNUNXNCLEVBQU80c0IsWUFBWXNHLG1CQUdqQmx6QixFQUFPOHRCLFFBQVU5dEIsRUFBTzh0QixPQUFPd0IsUUFDakMsTUFBTSxJQUFJdkksR0FBYyxLQUFNL21CLEVBRWxDLENBU0EsU0FBU216QixHQUFnQm56QixHQUN2Qml6QixHQUE2Qmp6QixHQUU3QkEsRUFBTytGLFFBQVUyZ0IsR0FBZXBZLEtBQUt0TyxFQUFPK0YsU0FHNUMvRixFQUFPaE0sS0FBTzJ5QixHQUFjNXFCLEtBQzFCaUUsRUFDQUEsRUFBT2dpQixtQkFHZ0QsSUFBckQsQ0FBQyxPQUFRLE1BQU8sU0FBU2xPLFFBQVE5VCxFQUFPdVEsU0FDMUN2USxFQUFPK0YsUUFBUXFjLGVBQWUscUNBQXFDLEdBS3JFLE9BRmdCeVEsR0FBb0I3eUIsRUFBTytoQixTQUFXMkIsR0FBVzNCLFFBRTFEQSxDQUFRL2hCLEdBQVFsSSxNQUFLLFNBQTZCaEIsR0FZdkQsT0FYQW04QixHQUE2Qmp6QixHQUc3QmxKLEVBQVM5QyxLQUFPMnlCLEdBQWM1cUIsS0FDNUJpRSxFQUNBQSxFQUFPZ2pCLGtCQUNQbHNCLEdBR0ZBLEVBQVNpUCxRQUFVMmdCLEdBQWVwWSxLQUFLeFgsRUFBU2lQLFNBRXpDalAsQ0FDVCxJQUFHLFNBQTRCMFEsR0FlN0IsT0FkS3FmLEdBQVNyZixLQUNaeXJCLEdBQTZCanpCLEdBR3pCd0gsR0FBVUEsRUFBTzFRLFdBQ25CMFEsRUFBTzFRLFNBQVM5QyxLQUFPMnlCLEdBQWM1cUIsS0FDbkNpRSxFQUNBQSxFQUFPZ2pCLGtCQUNQeGIsRUFBTzFRLFVBRVQwUSxFQUFPMVEsU0FBU2lQLFFBQVUyZ0IsR0FBZXBZLEtBQUs5RyxFQUFPMVEsU0FBU2lQLFdBSTNEMm5CLFFBQVF2RyxPQUFPM2YsRUFDeEIsR0FDRixDQUVBLE1BQU00ckIsR0FBVSxRQUVWQyxHQUFlLENBQUMsRUFHdEIsQ0FBQyxTQUFVLFVBQVcsU0FBVSxXQUFZLFNBQVUsVUFBVTVrQixTQUFRLENBQUM1WixFQUFNMGYsS0FDN0U4ZSxHQUFheCtCLEdBQVEsU0FBbUJ5Z0IsR0FDdEMsY0FBY0EsSUFBVXpnQixHQUFRLEtBQU8wZixFQUFJLEVBQUksS0FBTyxLQUFPMWYsQ0FDL0QsQ0FBQyxJQUdILE1BQU15K0IsR0FBcUIsQ0FBQyxFQVc1QkQsR0FBYXZSLGFBQWUsU0FBc0J5UixFQUFXeDJCLEVBQVNyQyxHQUNwRSxTQUFTODRCLEVBQWNDLEVBQUtDLEdBQzFCLE1BQU8sdUNBQW9ERCxFQUFNLElBQU9DLEdBQVFoNUIsRUFBVSxLQUFPQSxFQUFVLEdBQzdHLENBR0EsTUFBTyxDQUFDaEUsRUFBTys4QixFQUFLRSxLQUNsQixJQUFrQixJQUFkSixFQUNGLE1BQU0sSUFBSTVXLEVBQ1I2VyxFQUFjQyxFQUFLLHFCQUF1QjEyQixFQUFVLE9BQVNBLEVBQVUsS0FDdkU0ZixFQUFXaVgsZ0JBZWYsT0FYSTcyQixJQUFZdTJCLEdBQW1CRyxLQUNqQ0gsR0FBbUJHLElBQU8sRUFFMUI3dkIsUUFBUUcsS0FDTnl2QixFQUNFQyxFQUNBLCtCQUFpQzEyQixFQUFVLDhDQUsxQ3cyQixHQUFZQSxFQUFVNzhCLEVBQU8rOEIsRUFBS0UsRUFBWSxDQUV6RCxFQW1DQSxJQUFJSixHQUFZLENBQ2RNLGNBeEJGLFNBQXVCL3pCLEVBQVNnMEIsRUFBUUMsR0FDdEMsR0FBdUIsaUJBQVpqMEIsRUFDVCxNQUFNLElBQUk2YyxFQUFXLDRCQUE2QkEsRUFBV3FYLHNCQUUvRCxNQUFNejlCLEVBQU9uQixPQUFPbUIsS0FBS3VKLEdBQ3pCLElBQUl5VSxFQUFJaGUsRUFBSzBHLE9BQ2IsS0FBT3NYLEtBQU0sR0FBRyxDQUNkLE1BQU1rZixFQUFNbDlCLEVBQUtnZSxHQUNYZ2YsRUFBWU8sRUFBT0wsR0FDekIsR0FBSUYsRUFBSixDQUNFLE1BQU03OEIsRUFBUW9KLEVBQVEyekIsR0FDaEJ2MkIsT0FBbUJvTixJQUFWNVQsR0FBdUI2OEIsRUFBVTc4QixFQUFPKzhCLEVBQUszekIsR0FDNUQsSUFBZSxJQUFYNUMsRUFDRixNQUFNLElBQUl5ZixFQUFXLFVBQVk4VyxFQUFNLFlBQWN2MkIsRUFBUXlmLEVBQVdxWCxxQkFHNUUsTUFDQSxJQUFxQixJQUFqQkQsRUFDRixNQUFNLElBQUlwWCxFQUFXLGtCQUFvQjhXLEVBQUs5VyxFQUFXc1gsZUFFN0QsQ0FDRixFQUlFQyxXQUFZYixJQUdkLE1BQU1hLEdBQWFYLEdBQVVXLFdBUzdCLE1BQU1DLE1BQ0p6YixZQUFZMGIsR0FDVmpnQyxLQUFLMHRCLFNBQVd1UyxFQUNoQmpnQyxLQUFLa2dDLGFBQWUsQ0FDbEJ6K0IsUUFBUyxJQUFJMHBCLEdBQ2J4b0IsU0FBVSxJQUFJd29CLEdBRWxCLENBVUE4USxjQUFja0UsRUFBYXQwQixHQUN6QixJQUNFLGFBQWE3TCxLQUFLbytCLFNBQVMrQixFQUFhdDBCLEVBc0IxQyxDQXJCRSxNQUFPbXVCLEdBQ1AsR0FBSUEsYUFBZWh1QixNQUFPLENBQ3hCLElBQUlvMEIsRUFFSnAwQixNQUFNeWMsa0JBQW9CemMsTUFBTXljLGtCQUFrQjJYLEVBQVEsQ0FBQyxHQUFNQSxFQUFRLElBQUlwMEIsTUFHN0UsTUFBTXNNLEVBQVE4bkIsRUFBTTluQixNQUFROG5CLEVBQU05bkIsTUFBTWtILFFBQVEsUUFBUyxJQUFNLEdBQy9ELElBQ093YSxFQUFJMWhCLE1BR0VBLElBQVV5RyxPQUFPaWIsRUFBSTFoQixPQUFPd04sU0FBU3hOLEVBQU1rSCxRQUFRLFlBQWEsT0FDekV3YSxFQUFJMWhCLE9BQVMsS0FBT0EsR0FIcEIwaEIsRUFBSTFoQixNQUFRQSxDQU9oQixDQUZFLE1BQU9xVyxHQUVULENBQ0YsQ0FFQSxNQUFNcUwsQ0FDUixDQUNGLENBRUFvRSxTQUFTK0IsRUFBYXQwQixHQUdPLGlCQUFoQnMwQixHQUNUdDBCLEVBQVNBLEdBQVUsQ0FBQyxHQUNiQyxJQUFNcTBCLEVBRWJ0MEIsRUFBU3MwQixHQUFlLENBQUMsRUFHM0J0MEIsRUFBU3dyQixHQUFZcjNCLEtBQUswdEIsU0FBVTdoQixHQUVwQyxNQUFNLGFBQUM4aEIsRUFBWSxpQkFBRW1LLEVBQWdCLFFBQUVsbUIsR0FBVy9GLE9BRTdCc0ssSUFBakJ3WCxHQUNGeVIsR0FBVU0sY0FBYy9SLEVBQWMsQ0FDcEM1QixrQkFBbUJnVSxHQUFXcFMsYUFBYW9TLEdBQVdNLFNBQ3REclUsa0JBQW1CK1QsR0FBV3BTLGFBQWFvUyxHQUFXTSxTQUN0RHBVLG9CQUFxQjhULEdBQVdwUyxhQUFhb1MsR0FBV00sV0FDdkQsR0FHbUIsTUFBcEJ2SSxJQUNFeFQsRUFBUTVDLFdBQVdvVyxHQUNyQmpzQixFQUFPaXNCLGlCQUFtQixDQUN4Qi9NLFVBQVcrTSxHQUdic0gsR0FBVU0sY0FBYzVILEVBQWtCLENBQ3hDMWEsT0FBUTJpQixHQUFXTyxTQUNuQnZWLFVBQVdnVixHQUFXTyxXQUNyQixJQUtQejBCLEVBQU91USxRQUFVdlEsRUFBT3VRLFFBQVVwYyxLQUFLMHRCLFNBQVN0UixRQUFVLE9BQU9nRixjQUdqRSxJQUFJbWYsRUFBaUIzdUIsR0FBVzBTLEVBQVFRLE1BQ3RDbFQsRUFBUTBkLE9BQ1IxZCxFQUFRL0YsRUFBT3VRLFNBR2pCeEssR0FBVzBTLEVBQVFoSyxRQUNqQixDQUFDLFNBQVUsTUFBTyxPQUFRLE9BQVEsTUFBTyxRQUFTLFdBQ2pEOEIsV0FDUXhLLEVBQVF3SyxFQUFPLElBSTFCdlEsRUFBTytGLFFBQVUyZ0IsR0FBZTF1QixPQUFPMDhCLEVBQWdCM3VCLEdBR3ZELE1BQU00dUIsRUFBMEIsR0FDaEMsSUFBSUMsR0FBaUMsRUFDckN6Z0MsS0FBS2tnQyxhQUFheitCLFFBQVE2WSxTQUFRLFNBQW9Db21CLEdBQ2pDLG1CQUF4QkEsRUFBWWhWLFVBQTBELElBQWhDZ1YsRUFBWWhWLFFBQVE3ZixLQUlyRTQwQixFQUFpQ0EsR0FBa0NDLEVBQVlqVixZQUUvRStVLEVBQXdCRyxRQUFRRCxFQUFZblYsVUFBV21WLEVBQVlsVixVQUNyRSxJQUVBLE1BQU1vVixFQUEyQixHQUtqQyxJQUFJQyxFQUpKN2dDLEtBQUtrZ0MsYUFBYXY5QixTQUFTMlgsU0FBUSxTQUFrQ29tQixHQUNuRUUsRUFBeUJ4d0IsS0FBS3N3QixFQUFZblYsVUFBV21WLEVBQVlsVixTQUNuRSxJQUdBLElBQ0k3SSxFQURBdkMsRUFBSSxFQUdSLElBQUtxZ0IsRUFBZ0MsQ0FDbkMsTUFBTUssRUFBUSxDQUFDOUIsR0FBZ0JwZSxLQUFLNWdCLFdBQU9tVyxHQU8zQyxJQU5BMnFCLEVBQU1ILFFBQVE1ZixNQUFNK2YsRUFBT04sR0FDM0JNLEVBQU0xd0IsS0FBSzJRLE1BQU0rZixFQUFPRixHQUN4QmplLEVBQU1tZSxFQUFNaDRCLE9BRVorM0IsRUFBVXRILFFBQVF4RyxRQUFRbG5CLEdBRW5CdVUsRUFBSXVDLEdBQ1RrZSxFQUFVQSxFQUFRbDlCLEtBQUttOUIsRUFBTTFnQixLQUFNMGdCLEVBQU0xZ0IsTUFHM0MsT0FBT3lnQixDQUNULENBRUFsZSxFQUFNNmQsRUFBd0IxM0IsT0FFOUIsSUFBSWd3QixFQUFZanRCLEVBSWhCLElBRkF1VSxFQUFJLEVBRUdBLEVBQUl1QyxHQUFLLENBQ2QsTUFBTW9lLEVBQWNQLEVBQXdCcGdCLEtBQ3RDNGdCLEVBQWFSLEVBQXdCcGdCLEtBQzNDLElBQ0UwWSxFQUFZaUksRUFBWWpJLEVBSTFCLENBSEUsTUFBTzNuQixHQUNQNnZCLEVBQVdwNUIsS0FBSzVILEtBQU1tUixHQUN0QixLQUNGLENBQ0YsQ0FFQSxJQUNFMHZCLEVBQVU3QixHQUFnQnAzQixLQUFLNUgsS0FBTTg0QixFQUd2QyxDQUZFLE1BQU8zbkIsR0FDUCxPQUFPb29CLFFBQVF2RyxPQUFPN2hCLEVBQ3hCLENBS0EsSUFIQWlQLEVBQUksRUFDSnVDLEVBQU1pZSxFQUF5QjkzQixPQUV4QnNYLEVBQUl1QyxHQUNUa2UsRUFBVUEsRUFBUWw5QixLQUFLaTlCLEVBQXlCeGdCLEtBQU13Z0IsRUFBeUJ4Z0IsTUFHakYsT0FBT3lnQixDQUNULENBRUFJLE9BQU9wMUIsR0FHTCxPQUFPK2UsR0FEVW1NLElBRGpCbHJCLEVBQVN3ckIsR0FBWXIzQixLQUFLMHRCLFNBQVU3aEIsSUFDRW1yQixRQUFTbnJCLEVBQU9DLEtBQzVCRCxFQUFPMlEsT0FBUTNRLEVBQU9pc0IsaUJBQ2xELEVBSUZ4VCxFQUFRaEssUUFBUSxDQUFDLFNBQVUsTUFBTyxPQUFRLFlBQVksU0FBNkI4QixHQUVqRjRqQixNQUFNaCtCLFVBQVVvYSxHQUFVLFNBQVN0USxFQUFLRCxHQUN0QyxPQUFPN0wsS0FBS3lCLFFBQVE0MUIsR0FBWXhyQixHQUFVLENBQUMsRUFBRyxDQUM1Q3VRLFNBQ0F0USxNQUNBak0sTUFBT2dNLEdBQVUsQ0FBQyxHQUFHaE0sT0FFekIsQ0FDRixJQUVBeWtCLEVBQVFoSyxRQUFRLENBQUMsT0FBUSxNQUFPLFVBQVUsU0FBK0I4QixHQUd2RSxTQUFTOGtCLEVBQW1CQyxHQUMxQixPQUFPLFNBQW9CcjFCLEVBQUtqTSxFQUFNZ00sR0FDcEMsT0FBTzdMLEtBQUt5QixRQUFRNDFCLEdBQVl4ckIsR0FBVSxDQUFDLEVBQUcsQ0FDNUN1USxTQUNBeEssUUFBU3V2QixFQUFTLENBQ2hCLGVBQWdCLHVCQUNkLENBQUMsRUFDTHIxQixNQUNBak0sU0FFSixDQUNGLENBRUFtZ0MsTUFBTWgrQixVQUFVb2EsR0FBVThrQixJQUUxQmxCLE1BQU1oK0IsVUFBVW9hLEVBQVMsUUFBVThrQixHQUFtQixFQUN4RCxJQUVBLElBQUlFLEdBQVVwQixNQVNkLE1BQU1xQixZQUNKOWMsWUFBWStjLEdBQ1YsR0FBd0IsbUJBQWJBLEVBQ1QsTUFBTSxJQUFJdGhCLFVBQVUsZ0NBR3RCLElBQUl1aEIsRUFFSnZoQyxLQUFLNmdDLFFBQVUsSUFBSXRILFNBQVEsU0FBeUJ4RyxHQUNsRHdPLEVBQWlCeE8sQ0FDbkIsSUFFQSxNQUFNdkosRUFBUXhwQixLQUdkQSxLQUFLNmdDLFFBQVFsOUIsTUFBS3EzQixJQUNoQixJQUFLeFIsRUFBTWdZLFdBQVksT0FFdkIsSUFBSXBoQixFQUFJb0osRUFBTWdZLFdBQVcxNEIsT0FFekIsS0FBT3NYLEtBQU0sR0FDWG9KLEVBQU1nWSxXQUFXcGhCLEdBQUc0YSxHQUV0QnhSLEVBQU1nWSxXQUFhLElBQUksSUFJekJ4aEMsS0FBSzZnQyxRQUFRbDlCLEtBQU84OUIsSUFDbEIsSUFBSUMsRUFFSixNQUFNYixFQUFVLElBQUl0SCxTQUFReEcsSUFDMUJ2SixFQUFNMFIsVUFBVW5JLEdBQ2hCMk8sRUFBVzNPLENBQU8sSUFDakJwdkIsS0FBSzg5QixHQU1SLE9BSkFaLEVBQVE3RixPQUFTLFdBQ2Z4UixFQUFNOVcsWUFBWWd2QixFQUNwQixFQUVPYixDQUFPLEVBR2hCUyxHQUFTLFNBQWdCLzZCLEVBQVNzRixFQUFRcEssR0FDcEMrbkIsRUFBTW5XLFNBS1ZtVyxFQUFNblcsT0FBUyxJQUFJdWYsR0FBY3JzQixFQUFTc0YsRUFBUXBLLEdBQ2xEOC9CLEVBQWUvWCxFQUFNblcsUUFDdkIsR0FDRixDQUtBMHJCLG1CQUNFLEdBQUkvK0IsS0FBS3FULE9BQ1AsTUFBTXJULEtBQUtxVCxNQUVmLENBTUE2bkIsVUFBVTlILEdBQ0pwekIsS0FBS3FULE9BQ1ArZixFQUFTcHpCLEtBQUtxVCxRQUlaclQsS0FBS3doQyxXQUNQeGhDLEtBQUt3aEMsV0FBV3B4QixLQUFLZ2pCLEdBRXJCcHpCLEtBQUt3aEMsV0FBYSxDQUFDcE8sRUFFdkIsQ0FNQTFnQixZQUFZMGdCLEdBQ1YsSUFBS3B6QixLQUFLd2hDLFdBQ1IsT0FFRixNQUFNblgsRUFBUXJxQixLQUFLd2hDLFdBQVc3aEIsUUFBUXlULElBQ3ZCLElBQVgvSSxHQUNGcnFCLEtBQUt3aEMsV0FBV0csT0FBT3RYLEVBQU8sRUFFbEMsQ0FNQW9ILGdCQUNFLElBQUl1SixFQUlKLE1BQU8sQ0FDTHhSLE1BSlksSUFBSTZYLGFBQVksU0FBa0JuaUIsR0FDOUM4YixFQUFTOWIsQ0FDWCxJQUdFOGIsU0FFSixFQUdGLElBQUk0RyxHQUFnQlAsWUF3Q3BCLE1BQU1RLEdBQWlCLENBQ3JCQyxTQUFVLElBQ1ZDLG1CQUFvQixJQUNwQkMsV0FBWSxJQUNaQyxXQUFZLElBQ1pDLEdBQUksSUFDSkMsUUFBUyxJQUNUQyxTQUFVLElBQ1ZDLDRCQUE2QixJQUM3QkMsVUFBVyxJQUNYQyxhQUFjLElBQ2RDLGVBQWdCLElBQ2hCQyxZQUFhLElBQ2JDLGdCQUFpQixJQUNqQkMsT0FBUSxJQUNSQyxnQkFBaUIsSUFDakJDLGlCQUFrQixJQUNsQkMsTUFBTyxJQUNQQyxTQUFVLElBQ1ZDLFlBQWEsSUFDYkMsU0FBVSxJQUNWQyxPQUFRLElBQ1JDLGtCQUFtQixJQUNuQkMsa0JBQW1CLElBQ25CQyxXQUFZLElBQ1pDLGFBQWMsSUFDZEMsZ0JBQWlCLElBQ2pCQyxVQUFXLElBQ1hDLFNBQVUsSUFDVkMsaUJBQWtCLElBQ2xCQyxjQUFlLElBQ2ZDLDRCQUE2QixJQUM3QkMsZUFBZ0IsSUFDaEJDLFNBQVUsSUFDVkMsS0FBTSxJQUNOQyxlQUFnQixJQUNoQkMsbUJBQW9CLElBQ3BCQyxnQkFBaUIsSUFDakJDLFdBQVksSUFDWkMscUJBQXNCLElBQ3RCQyxvQkFBcUIsSUFDckJDLGtCQUFtQixJQUNuQkMsVUFBVyxJQUNYQyxtQkFBb0IsSUFDcEJDLG9CQUFxQixJQUNyQkMsT0FBUSxJQUNSQyxpQkFBa0IsSUFDbEJDLFNBQVUsSUFDVkMsZ0JBQWlCLElBQ2pCQyxxQkFBc0IsSUFDdEJDLGdCQUFpQixJQUNqQkMsNEJBQTZCLElBQzdCQywyQkFBNEIsSUFDNUJDLG9CQUFxQixJQUNyQkMsZUFBZ0IsSUFDaEJDLFdBQVksSUFDWkMsbUJBQW9CLElBQ3BCQyxlQUFnQixJQUNoQkMsd0JBQXlCLElBQ3pCQyxzQkFBdUIsSUFDdkJDLG9CQUFxQixJQUNyQkMsYUFBYyxJQUNkQyxZQUFhLElBQ2JDLDhCQUErQixLQUdqQzNrQyxPQUFPOE8sUUFBUTh4QixJQUFnQnZuQixTQUFRLEVBQUVqWSxFQUFLRSxNQUM1Q3MvQixHQUFldC9CLEdBQVNGLENBQUcsSUFHN0IsSUFBSXdqQyxHQUFtQmhFLEdBNEJ2QixNQUFNaUUsR0FuQk4sU0FBU0MsRUFBZUMsR0FDdEIsTUFBTS9pQixFQUFVLElBQUltZSxHQUFRNEUsR0FDdEJDLEVBQVdybEIsRUFBS3dnQixHQUFRcC9CLFVBQVVQLFFBQVN3aEIsR0FhakQsT0FWQXFCLEVBQVFZLE9BQU8rZ0IsRUFBVTdFLEdBQVFwL0IsVUFBV2loQixFQUFTLENBQUNSLFlBQVksSUFHbEU2QixFQUFRWSxPQUFPK2dCLEVBQVVoakIsRUFBUyxLQUFNLENBQUNSLFlBQVksSUFHckR3akIsRUFBU25pQyxPQUFTLFNBQWdCbThCLEdBQ2hDLE9BQU84RixFQUFlMU8sR0FBWTJPLEVBQWUvRixHQUNuRCxFQUVPZ0csQ0FDVCxDQUdjRixDQUFleFcsSUFHN0J1VyxHQUFNOUYsTUFBUW9CLEdBR2QwRSxHQUFNbFQsY0FBZ0JBLEdBQ3RCa1QsR0FBTXpFLFlBQWNPLEdBQ3BCa0UsR0FBTXBULFNBQVdBLEdBQ2pCb1QsR0FBTTdHLFFBQVVBLEdBQ2hCNkcsR0FBTXBjLFdBQWFBLEVBR25Cb2MsR0FBTXRkLFdBQWFBLEVBR25Cc2QsR0FBTUksT0FBU0osR0FBTWxULGNBR3JCa1QsR0FBTUssSUFBTSxTQUFhQyxHQUN2QixPQUFPN00sUUFBUTRNLElBQUlDLEVBQ3JCLEVBRUFOLEdBQU1PLE9BMUlOLFNBQWdCQyxHQUNkLE9BQU8sU0FBY3BnQixHQUNuQixPQUFPb2dCLEVBQVN2bEIsTUFBTSxLQUFNbUYsRUFDOUIsQ0FDRixFQXlJQTRmLEdBQU1TLGFBaElOLFNBQXNCQyxHQUNwQixPQUFPbGlCLEVBQVExQyxTQUFTNGtCLEtBQXNDLElBQXpCQSxFQUFRRCxZQUMvQyxFQWlJQVQsR0FBTXpPLFlBQWNBLEdBRXBCeU8sR0FBTTVvQixhQUFlcVYsR0FFckJ1VCxHQUFNVyxXQUFhdGxCLEdBQVNpTSxHQUFlOUksRUFBUWpCLFdBQVdsQyxHQUFTLElBQUloRCxTQUFTZ0QsR0FBU0EsR0FFN0Yya0IsR0FBTVksV0FBYWhJLEdBRW5Cb0gsR0FBTWpFLGVBQWlCZ0UsR0FFdkJDLEdBQU03aUMsUUFBVTZpQyxHQUVoQjl5QixFQUFPL0wsUUFBVTYrQixLQ25qSGJhLEVBQTJCLENBQUMsRUFHaEMsU0FBU0MsRUFBb0JDLEdBRTVCLElBQUlDLEVBQWVILEVBQXlCRSxHQUM1QyxRQUFxQjF3QixJQUFqQjJ3QixFQUNILE9BQU9BLEVBQWE3L0IsUUFHckIsSUFBSStMLEVBQVMyekIsRUFBeUJFLEdBQVksQ0FDakRsK0IsR0FBSWsrQixFQUNKL1IsUUFBUSxFQUNSN3RCLFFBQVMsQ0FBQyxHQVVYLE9BTkE4L0IsRUFBb0JGLEdBQVVqL0IsS0FBS29MLEVBQU8vTCxRQUFTK0wsRUFBUUEsRUFBTy9MLFFBQVMyL0IsR0FHM0U1ekIsRUFBTzhoQixRQUFTLEVBR1Q5aEIsRUFBTy9MLE9BQ2YsUUN6QkEyL0IsRUFBb0Jwb0IsRUFBSSxXQUN2QixHQUEwQixpQkFBZnVFLFdBQXlCLE9BQU9BLFdBQzNDLElBQ0MsT0FBTy9pQixNQUFRLElBQUlnbkMsU0FBUyxjQUFiLEVBR2hCLENBRkUsTUFBT3JZLEdBQ1IsR0FBc0IsaUJBQVhqUSxPQUFxQixPQUFPQSxNQUN4QyxDQUNBLENBUHVCLEdDQXhCa29CLEVBQW9CSyxJQUFPajBCLElBQzFCQSxFQUFPazBCLE1BQVEsR0FDVmwwQixFQUFPbTBCLFdBQVVuMEIsRUFBT20wQixTQUFXLElBQ2pDbjBCLEdDQWtCNHpCLEVBQW9CIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL0RvbWFpbnMvZG9tYWluLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9Eb21haW5zL2RvbWFpbnNDbGllbnQudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL0RvbWFpbnMvZG9tYWluc0NyZWRlbnRpYWxzLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9Eb21haW5zL2RvbWFpbnNUYWdzLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9Eb21haW5zL2RvbWFpbnNUZW1wbGF0ZXMudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL0V2ZW50cy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvSVBQb29scy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvSVBzLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9NYWlsZ3VuQ2xpZW50LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9NYWlsaW5nTGlzdHMvbWFpbExpc3RNZW1iZXJzLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9NYWlsaW5nTGlzdHMvbWFpbGluZ0xpc3RzLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9NZXNzYWdlcy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvUm91dGVzLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9TdGF0cy9TdGF0c0NsaWVudC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvU3RhdHMvU3RhdHNDb250YWluZXIudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL1N1YmFjY291bnRzLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9TdXBwcmVzc2lvbnMvQm91bmNlLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9TdXBwcmVzc2lvbnMvQ29tcGxhaW50LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9TdXBwcmVzc2lvbnMvU3VwcHJlc3Npb24udHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL1N1cHByZXNzaW9ucy9TdXBwcmVzc2lvbnNDbGllbnQudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL1N1cHByZXNzaW9ucy9VbnN1YnNjcmliZS50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvU3VwcHJlc3Npb25zL1doaXRlTGlzdC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvVmFsaWRhdGlvbnMvbXVsdGlwbGVWYWxpZGF0aW9uLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9WYWxpZGF0aW9ucy92YWxpZGF0ZS50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvV2ViaG9va3MudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL2NvbW1vbi9BdHRhY2htZW50c0hhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL2NvbW1vbi9FcnJvci50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvY29tbW9uL0Zvcm1EYXRhQnVpbGRlci50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvY29tbW9uL05hdmlnYXRpb25UaHJ1UGFnZXMudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL2NvbW1vbi9SZXF1ZXN0LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvRW51bXMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9JbnRlcmZhY2VzL0NvbW1vbi9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0ludGVyZmFjZXMvRG9tYWlucy9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0ludGVyZmFjZXMvRXZlbnRDbGllbnQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9JbnRlcmZhY2VzL0lQUG9vbHMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9JbnRlcmZhY2VzL0lQcy9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0ludGVyZmFjZXMvTWFpbGd1bkNsaWVudC9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0ludGVyZmFjZXMvTWFpbGluZ0xpc3RzL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvSW50ZXJmYWNlcy9NZXNzYWdlcy9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0ludGVyZmFjZXMvUm91dGVzL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvSW50ZXJmYWNlcy9TdGF0cy9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0ludGVyZmFjZXMvU3ViYWNjb3VudHMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9JbnRlcmZhY2VzL1N1cHByZXNzaW9ucy9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0ludGVyZmFjZXMvVmFsaWRhdGlvbnMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9JbnRlcmZhY2VzL1dlYmhvb2tzL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvSW50ZXJmYWNlcy9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL1R5cGVzL0NvbW1vbi9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL1R5cGVzL0RvbWFpbnMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9UeXBlcy9FdmVudHMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9UeXBlcy9JUFBvb2xzL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvVHlwZXMvSVBzL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvVHlwZXMvTWFpbGd1bkNsaWVudC9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL1R5cGVzL01haWxpbmdMaXN0cy9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL1R5cGVzL01lc3NhZ2VzL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvVHlwZXMvUm91dGVzL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvVHlwZXMvU3RhdHMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9UeXBlcy9TdWJhY2NvdW50cy9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL1R5cGVzL1N1cHByZXNzaW9ucy9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL1R5cGVzL1ZhbGlkYXRpb25zL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvVHlwZXMvV2ViaG9va3MvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9UeXBlcy9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9ub2RlX21vZHVsZXMvYmFzZS02NC9iYXNlNjQuanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL25vZGVfbW9kdWxlcy91cmwtam9pbi9saWIvdXJsLWpvaW4uanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL25vZGVfbW9kdWxlcy9heGlvcy9kaXN0L2Jyb3dzZXIvYXhpb3MuY2pzIiwid2VicGFjazovL21haWxndW4uanMvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy93ZWJwYWNrL3J1bnRpbWUvZ2xvYmFsIiwid2VicGFjazovL21haWxndW4uanMvd2VicGFjay9ydW50aW1lL25vZGUgbW9kdWxlIGRlY29yYXRvciIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzL3dlYnBhY2svc3RhcnR1cCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBETlNSZWNvcmQsXG4gIERvbWFpbkRhdGEsXG4gIERvbWFpblNob3J0RGF0YSxcbiAgVERvbWFpblxufSBmcm9tICcuLi8uLi9UeXBlcy9Eb21haW5zJztcblxuLyogZXNsaW50LWRpc2FibGUgY2FtZWxjYXNlICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb21haW4gaW1wbGVtZW50cyBURG9tYWluIHtcbiAgbmFtZTogc3RyaW5nO1xuICByZXF1aXJlX3RsczogYm9vbGVhbjtcbiAgc2tpcF92ZXJpZmljYXRpb246IGJvb2xlYW47XG4gIHN0YXRlOiBzdHJpbmc7XG4gIHdpbGRjYXJkOiBib29sZWFuO1xuICBzcGFtX2FjdGlvbjogc3RyaW5nO1xuICBjcmVhdGVkX2F0OiBzdHJpbmc7XG4gIHNtdHBfcGFzc3dvcmQ6IHN0cmluZztcbiAgc210cF9sb2dpbjogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIHJlY2VpdmluZ19kbnNfcmVjb3JkczogRE5TUmVjb3JkW10gfCBudWxsO1xuICBzZW5kaW5nX2Ruc19yZWNvcmRzOiBETlNSZWNvcmRbXSB8IG51bGw7XG4gIGlkPzogc3RyaW5nO1xuICBpc19kaXNhYmxlZD86IGJvb2xlYW47XG4gIHdlYl9wcmVmaXg/OiBzdHJpbmc7XG4gIHdlYl9zY2hlbWU/OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgZGF0YTogRG9tYWluU2hvcnREYXRhIHwgRG9tYWluRGF0YSxcbiAgICByZWNlaXZpbmc/OiBETlNSZWNvcmRbXSB8IG51bGwsXG4gICAgc2VuZGluZz86IEROU1JlY29yZFtdIHwgbnVsbFxuICApIHtcbiAgICB0aGlzLm5hbWUgPSBkYXRhLm5hbWU7XG4gICAgdGhpcy5yZXF1aXJlX3RscyA9IGRhdGEucmVxdWlyZV90bHM7XG4gICAgdGhpcy5za2lwX3ZlcmlmaWNhdGlvbiA9IGRhdGEuc2tpcF92ZXJpZmljYXRpb247XG4gICAgdGhpcy5zdGF0ZSA9IGRhdGEuc3RhdGU7XG4gICAgdGhpcy53aWxkY2FyZCA9IGRhdGEud2lsZGNhcmQ7XG4gICAgdGhpcy5zcGFtX2FjdGlvbiA9IGRhdGEuc3BhbV9hY3Rpb247XG4gICAgdGhpcy5jcmVhdGVkX2F0ID0gZGF0YS5jcmVhdGVkX2F0O1xuICAgIHRoaXMuc210cF9wYXNzd29yZCA9IGRhdGEuc210cF9wYXNzd29yZDtcbiAgICB0aGlzLnNtdHBfbG9naW4gPSBkYXRhLnNtdHBfbG9naW47XG4gICAgdGhpcy50eXBlID0gZGF0YS50eXBlO1xuICAgIHRoaXMucmVjZWl2aW5nX2Ruc19yZWNvcmRzID0gcmVjZWl2aW5nIHx8IG51bGw7XG4gICAgdGhpcy5zZW5kaW5nX2Ruc19yZWNvcmRzID0gc2VuZGluZyB8fCBudWxsO1xuICAgIC8qXG4gICAgICBkb21haW4gbGlzdCBoYXMgc2hvcnRlciByZXNwb25zZSB0aGVuIGdldCwgY3JlYXRlLCBhbmQgdXBkYXRlIG1ldGhvZHMuXG4gICAgKi9cblxuICAgIGNvbnN0IGR5bmFtaWNLZXlzOiAoa2V5b2YgRG9tYWluRGF0YSlbXSA9IFsnaWQnLCAnaXNfZGlzYWJsZWQnLCAnd2ViX3ByZWZpeCcsICd3ZWJfc2NoZW1lJ107XG5cbiAgICBjb25zdCBkeW5hbWljUHJvcGVydGllcyA9IGR5bmFtaWNLZXlzLnJlZHVjZSgoYWNjLCBwcm9wZXJ0eU5hbWUpID0+IHtcbiAgICAgIGlmIChwcm9wZXJ0eU5hbWUgaW4gZGF0YSkge1xuICAgICAgICBjb25zdCBwcm9wID0gcHJvcGVydHlOYW1lIGFzIGtleW9mIERvbWFpbjtcbiAgICAgICAgYWNjW3Byb3BdID0gKGRhdGEgYXMgRG9tYWluRGF0YSlbcHJvcGVydHlOYW1lXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30gYXMgUmVjb3JkPGtleW9mIERvbWFpbiwgc3RyaW5nIHwgYm9vbGVhbj4pO1xuICAgIE9iamVjdC5hc3NpZ24odGhpcywgZHluYW1pY1Byb3BlcnRpZXMpO1xuICB9XG59XG4iLCJpbXBvcnQgdXJsam9pbiBmcm9tICd1cmwtam9pbic7XG5pbXBvcnQge1xuICBJRG9tYWluVGVtcGxhdGVzQ2xpZW50LFxuICBJRG9tYWluVGFnc0NsaWVudCxcbiAgSURvbWFpbkNyZWRlbnRpYWxzLFxuICBJRG9tYWluc0NsaWVudFxufSBmcm9tICcuLi8uLi9JbnRlcmZhY2VzL0RvbWFpbnMnO1xuXG5pbXBvcnQgeyBBUElSZXNwb25zZSB9IGZyb20gJy4uLy4uL1R5cGVzL0NvbW1vbi9BcGlSZXNwb25zZSc7XG5pbXBvcnQgQVBJRXJyb3IgZnJvbSAnLi4vY29tbW9uL0Vycm9yJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4uL2NvbW1vbi9SZXF1ZXN0JztcblxuaW1wb3J0IERvbWFpbkNyZWRlbnRpYWxzQ2xpZW50IGZyb20gJy4vZG9tYWluc0NyZWRlbnRpYWxzJztcbmltcG9ydCBEb21haW5UZW1wbGF0ZXNDbGllbnQgZnJvbSAnLi9kb21haW5zVGVtcGxhdGVzJztcbmltcG9ydCBEb21haW5UYWdzQ2xpZW50IGZyb20gJy4vZG9tYWluc1RhZ3MnO1xuaW1wb3J0IHtcbiAgRGVzdHJveWVkRG9tYWluUmVzcG9uc2UsXG4gIE1lc3NhZ2VSZXNwb25zZSxcbiAgRG9tYWluTGlzdFJlc3BvbnNlRGF0YSxcbiAgRG9tYWluUmVzcG9uc2VEYXRhLFxuICBEb21haW5UcmFja2luZ1Jlc3BvbnNlLFxuICBEb21haW5UcmFja2luZ0RhdGEsXG4gIFVwZGF0ZURvbWFpblRyYWNraW5nUmVzcG9uc2UsXG4gIFVwZGF0ZWRPcGVuVHJhY2tpbmcsXG4gIERvbWFpbnNRdWVyeSxcbiAgRG9tYWluSW5mbyxcbiAgQ29ubmVjdGlvblNldHRpbmdzLFxuICBDb25uZWN0aW9uU2V0dGluZ3NSZXNwb25zZSxcbiAgVXBkYXRlZENvbm5lY3Rpb25TZXR0aW5ncyxcbiAgVXBkYXRlZENvbm5lY3Rpb25TZXR0aW5nc1JlcyxcbiAgT3BlblRyYWNraW5nSW5mbyxcbiAgQ2xpY2tUcmFja2luZ0luZm8sXG4gIFVuc3Vic2NyaWJlVHJhY2tpbmdJbmZvLFxuICBSZXBsYWNlbWVudEZvclBvb2wsXG4gIERLSU1BdXRob3JpdHlJbmZvLFxuICBVcGRhdGVkREtJTUF1dGhvcml0eSxcbiAgVXBkYXRlZERLSU1BdXRob3JpdHlSZXNwb25zZSxcbiAgREtJTVNlbGVjdG9ySW5mbyxcbiAgVXBkYXRlZERLSU1TZWxlY3RvclJlc3BvbnNlLFxuICBXZWJQcmVmaXhJbmZvLFxuICBVcGRhdGVkV2ViUHJlZml4UmVzcG9uc2UsXG4gIFREb21haW4sXG4gIERvbWFpblVwZGF0ZUluZm8sXG4gIERvbWFpblVwZGF0ZUluZm9SZXEsXG4gIERvbWFpbkluZm9SZXEsXG4gIEJvb2xUb1N0cmluZyxcbn0gZnJvbSAnLi4vLi4vVHlwZXMvRG9tYWlucyc7XG5pbXBvcnQgRG9tYWluIGZyb20gJy4vZG9tYWluJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRG9tYWluc0NsaWVudCBpbXBsZW1lbnRzIElEb21haW5zQ2xpZW50IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcbiAgcHVibGljIGRvbWFpbkNyZWRlbnRpYWxzOiBJRG9tYWluQ3JlZGVudGlhbHM7XG4gIHB1YmxpYyBkb21haW5UZW1wbGF0ZXM6IElEb21haW5UZW1wbGF0ZXNDbGllbnQ7XG4gIHB1YmxpYyBkb21haW5UYWdzOiBJRG9tYWluVGFnc0NsaWVudDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICByZXF1ZXN0OiBSZXF1ZXN0LFxuICAgIGRvbWFpbkNyZWRlbnRpYWxzQ2xpZW50OiBEb21haW5DcmVkZW50aWFsc0NsaWVudCxcbiAgICBkb21haW5UZW1wbGF0ZXNDbGllbnQ6IERvbWFpblRlbXBsYXRlc0NsaWVudCxcbiAgICBkb21haW5UYWdzQ2xpZW50OiBEb21haW5UYWdzQ2xpZW50XG4gICkge1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgdGhpcy5kb21haW5DcmVkZW50aWFscyA9IGRvbWFpbkNyZWRlbnRpYWxzQ2xpZW50O1xuICAgIHRoaXMuZG9tYWluVGVtcGxhdGVzID0gZG9tYWluVGVtcGxhdGVzQ2xpZW50O1xuICAgIHRoaXMuZG9tYWluVGFncyA9IGRvbWFpblRhZ3NDbGllbnQ7XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVCb29sVmFsdWVzKFxuICAgIGRhdGE6IERvbWFpbkluZm8gfCBEb21haW5VcGRhdGVJbmZvXG4gICk6IERvbWFpbkluZm9SZXEgfCBEb21haW5VcGRhdGVJbmZvUmVxIHtcbiAgICBjb25zdCBwcm9wc0ZvclJlcGxhY2VtZW50ID0gZGF0YSBhcyBCb29sVG9TdHJpbmc7XG4gICAgY29uc3QgcmVwbGFjZWRQcm9wcyA9IE9iamVjdC5rZXlzKHByb3BzRm9yUmVwbGFjZW1lbnQpLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICAgIGNvbnN0IHByb3AgPSBrZXkgYXMga2V5b2YgQm9vbFRvU3RyaW5nO1xuICAgICAgaWYgKHR5cGVvZiBwcm9wc0ZvclJlcGxhY2VtZW50W3Byb3BdID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBwcm9wc0ZvclJlcGxhY2VtZW50W3Byb3BdIGFzIGJvb2xlYW47XG4gICAgICAgIGFjY1twcm9wXSA9ICh2YWx1ZS50b1N0cmluZygpID09PSAndHJ1ZScpID8gJ3RydWUnIDogJ2ZhbHNlJztcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30gYXMgUmVjb3JkPGtleW9mIEJvb2xUb1N0cmluZywgJ3RydWUnfCAnZmFsc2UnPik7XG4gICAgcmV0dXJuIHsgLi4uZGF0YSwgLi4ucmVwbGFjZWRQcm9wcyB9IGFzIERvbWFpblVwZGF0ZUluZm9SZXEgfCBEb21haW5JbmZvUmVxO1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFyc2VNZXNzYWdlKHJlc3BvbnNlOiBEZXN0cm95ZWREb21haW5SZXNwb25zZSkgOiBNZXNzYWdlUmVzcG9uc2Uge1xuICAgIHJldHVybiByZXNwb25zZS5ib2R5O1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZURvbWFpbkxpc3QocmVzcG9uc2U6IERvbWFpbkxpc3RSZXNwb25zZURhdGEpOiBURG9tYWluW10ge1xuICAgIGlmIChyZXNwb25zZS5ib2R5ICYmIHJlc3BvbnNlLmJvZHkuaXRlbXMpIHtcbiAgICAgIHJldHVybiByZXNwb25zZS5ib2R5Lml0ZW1zLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICByZXR1cm4gbmV3IERvbWFpbihpdGVtKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH1cblxuICBwcml2YXRlIF9wYXJzZURvbWFpbihyZXNwb25zZTogRG9tYWluUmVzcG9uc2VEYXRhKTogVERvbWFpbiB7XG4gICAgcmV0dXJuIG5ldyBEb21haW4oXG4gICAgICByZXNwb25zZS5ib2R5LmRvbWFpbixcbiAgICAgIHJlc3BvbnNlLmJvZHkucmVjZWl2aW5nX2Ruc19yZWNvcmRzLFxuICAgICAgcmVzcG9uc2UuYm9keS5zZW5kaW5nX2Ruc19yZWNvcmRzXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX3BhcnNlVHJhY2tpbmdTZXR0aW5ncyhyZXNwb25zZTogRG9tYWluVHJhY2tpbmdSZXNwb25zZSkgOiBEb21haW5UcmFja2luZ0RhdGEge1xuICAgIHJldHVybiByZXNwb25zZS5ib2R5LnRyYWNraW5nO1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFyc2VUcmFja2luZ1VwZGF0ZShyZXNwb25zZTogVXBkYXRlRG9tYWluVHJhY2tpbmdSZXNwb25zZSkgOlVwZGF0ZWRPcGVuVHJhY2tpbmcge1xuICAgIHJldHVybiByZXNwb25zZS5ib2R5O1xuICB9XG5cbiAgbGlzdChxdWVyeT86IERvbWFpbnNRdWVyeSk6IFByb21pc2U8VERvbWFpbltdPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQoJy92My9kb21haW5zJywgcXVlcnkpXG4gICAgICAudGhlbigocmVzIDogQVBJUmVzcG9uc2UpID0+IHRoaXMucGFyc2VEb21haW5MaXN0KHJlcyBhcyBEb21haW5MaXN0UmVzcG9uc2VEYXRhKSk7XG4gIH1cblxuICBnZXQoZG9tYWluOiBzdHJpbmcpIDogUHJvbWlzZTxURG9tYWluPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQoYC92My9kb21haW5zLyR7ZG9tYWlufWApXG4gICAgICAudGhlbigocmVzIDogQVBJUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlRG9tYWluKHJlcyBhcyBEb21haW5SZXNwb25zZURhdGEpKTtcbiAgfVxuXG4gIGNyZWF0ZShkYXRhOiBEb21haW5JbmZvKSA6IFByb21pc2U8VERvbWFpbj4ge1xuICAgIGNvbnN0IHBvc3RPYmogPSB0aGlzLl9oYW5kbGVCb29sVmFsdWVzKGRhdGEpO1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRCgnL3YzL2RvbWFpbnMnLCBwb3N0T2JqKVxuICAgICAgLnRoZW4oKHJlcyA6IEFQSVJlc3BvbnNlKSA9PiB0aGlzLl9wYXJzZURvbWFpbihyZXMgYXMgRG9tYWluUmVzcG9uc2VEYXRhKSk7XG4gIH1cblxuICB1cGRhdGUoZG9tYWluOiBzdHJpbmcsIGRhdGE6IERvbWFpblVwZGF0ZUluZm8pIDogUHJvbWlzZTxURG9tYWluPiB7XG4gICAgY29uc3QgcHV0RGF0YSA9IHRoaXMuX2hhbmRsZUJvb2xWYWx1ZXMoZGF0YSk7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXRXaXRoRkQoYC92My9kb21haW5zLyR7ZG9tYWlufWAsIHB1dERhdGEpXG4gICAgICAudGhlbigocmVzIDogQVBJUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlRG9tYWluKHJlcyBhcyBEb21haW5SZXNwb25zZURhdGEpKTtcbiAgfVxuXG4gIHZlcmlmeShkb21haW46IHN0cmluZyk6IFByb21pc2U8VERvbWFpbj4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0KGAvdjMvZG9tYWlucy8ke2RvbWFpbn0vdmVyaWZ5YClcbiAgICAgIC50aGVuKChyZXMgOiBBUElSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VEb21haW4ocmVzIGFzIERvbWFpblJlc3BvbnNlRGF0YSkpO1xuICB9XG5cbiAgZGVzdHJveShkb21haW46IHN0cmluZyk6IFByb21pc2U8TWVzc2FnZVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5kZWxldGUoYC92My9kb21haW5zLyR7ZG9tYWlufWApXG4gICAgICAudGhlbigocmVzIDogQVBJUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlTWVzc2FnZShyZXMgYXMgRGVzdHJveWVkRG9tYWluUmVzcG9uc2UpKTtcbiAgfVxuXG4gIGdldENvbm5lY3Rpb24oZG9tYWluOiBzdHJpbmcpOiBQcm9taXNlPENvbm5lY3Rpb25TZXR0aW5ncz4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KGAvdjMvZG9tYWlucy8ke2RvbWFpbn0vY29ubmVjdGlvbmApXG4gICAgICAudGhlbigocmVzIDogQVBJUmVzcG9uc2UpID0+IHJlcyBhcyBDb25uZWN0aW9uU2V0dGluZ3NSZXNwb25zZSlcbiAgICAgIC50aGVuKChyZXM6Q29ubmVjdGlvblNldHRpbmdzUmVzcG9uc2UpID0+IHJlcy5ib2R5LmNvbm5lY3Rpb24gYXMgQ29ubmVjdGlvblNldHRpbmdzKTtcbiAgfVxuXG4gIHVwZGF0ZUNvbm5lY3Rpb24oZG9tYWluOiBzdHJpbmcsIGRhdGE6IENvbm5lY3Rpb25TZXR0aW5ncyk6IFByb21pc2U8VXBkYXRlZENvbm5lY3Rpb25TZXR0aW5ncz4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0KGAvdjMvZG9tYWlucy8ke2RvbWFpbn0vY29ubmVjdGlvbmAsIGRhdGEpXG4gICAgICAudGhlbigocmVzIDogQVBJUmVzcG9uc2UpID0+IHJlcyBhcyBVcGRhdGVkQ29ubmVjdGlvblNldHRpbmdzUmVzKVxuICAgICAgLnRoZW4oKHJlczpVcGRhdGVkQ29ubmVjdGlvblNldHRpbmdzUmVzKSA9PiByZXMuYm9keSBhcyBVcGRhdGVkQ29ubmVjdGlvblNldHRpbmdzKTtcbiAgfVxuXG4gIC8vIFRyYWNraW5nXG5cbiAgZ2V0VHJhY2tpbmcoZG9tYWluOiBzdHJpbmcpIDogUHJvbWlzZTxEb21haW5UcmFja2luZ0RhdGE+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ3RyYWNraW5nJykpXG4gICAgICAudGhlbih0aGlzLl9wYXJzZVRyYWNraW5nU2V0dGluZ3MpO1xuICB9XG5cbiAgdXBkYXRlVHJhY2tpbmcoXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgdHlwZTogc3RyaW5nLFxuICAgIGRhdGE6IE9wZW5UcmFja2luZ0luZm8gfCBDbGlja1RyYWNraW5nSW5mbyB8IFVuc3Vic2NyaWJlVHJhY2tpbmdJbmZvXG4gICk6IFByb21pc2U8VXBkYXRlZE9wZW5UcmFja2luZz4ge1xuICAgIGlmICh0eXBlb2YgZGF0YT8uYWN0aXZlID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93IEFQSUVycm9yLmdldFVzZXJEYXRhRXJyb3IoJ1JlY2VpdmVkIGJvb2xlYW4gdmFsdWUgZm9yIGFjdGl2ZSBwcm9wZXJ0eScsICdQcm9wZXJ0eSBcImFjdGl2ZVwiIG11c3QgY29udGFpbiBzdHJpbmcgdmFsdWUuJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0V2l0aEZEKHVybGpvaW4oJy92My9kb21haW5zJywgZG9tYWluLCAndHJhY2tpbmcnLCB0eXBlKSwgZGF0YSlcbiAgICAgIC50aGVuKChyZXMgOiBBUElSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VUcmFja2luZ1VwZGF0ZShyZXMgYXMgVXBkYXRlRG9tYWluVHJhY2tpbmdSZXNwb25zZSkpO1xuICB9XG5cbiAgLy8gSVBzXG5cbiAgZ2V0SXBzKGRvbWFpbjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4oJy92My9kb21haW5zJywgZG9tYWluLCAnaXBzJykpXG4gICAgICAudGhlbigocmVzcG9uc2U6IEFQSVJlc3BvbnNlKSA9PiByZXNwb25zZT8uYm9keT8uaXRlbXMpO1xuICB9XG5cbiAgYXNzaWduSXAoZG9tYWluOiBzdHJpbmcsIGlwOiBzdHJpbmcpOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKHVybGpvaW4oJy92My9kb21haW5zJywgZG9tYWluLCAnaXBzJyksIHsgaXAgfSk7XG4gIH1cblxuICBkZWxldGVJcChkb21haW46IHN0cmluZywgaXA6IHN0cmluZyk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZSh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ2lwcycsIGlwKSk7XG4gIH1cblxuICBsaW5rSXBQb29sKGRvbWFpbjogc3RyaW5nLCBwb29sSWQ6IHN0cmluZyk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICdpcHMnKSwgeyBwb29sX2lkOiBwb29sSWQgfSk7XG4gIH1cblxuICB1bmxpbmtJcFBvbGwoZG9tYWluOiBzdHJpbmcsIHJlcGxhY2VtZW50OiBSZXBsYWNlbWVudEZvclBvb2wpOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgbGV0IHNlYXJjaFBhcmFtcyA9ICcnO1xuICAgIGlmIChyZXBsYWNlbWVudC5wb29sX2lkICYmIHJlcGxhY2VtZW50LmlwKSB7XG4gICAgICB0aHJvdyBBUElFcnJvci5nZXRVc2VyRGF0YUVycm9yKCdUb28gbXVjaCBkYXRhIGZvciByZXBsYWNlbWVudCcsICdQbGVhc2Ugc3BlY2lmeSBlaXRoZXIgcG9vbF9pZCBvciBpcCAobm90IGJvdGgpJyk7XG4gICAgfSBlbHNlIGlmIChyZXBsYWNlbWVudC5wb29sX2lkKSB7XG4gICAgICBzZWFyY2hQYXJhbXMgPSBgP3Bvb2xfaWQ9JHtyZXBsYWNlbWVudC5wb29sX2lkfWA7XG4gICAgfSBlbHNlIGlmIChyZXBsYWNlbWVudC5pcCkge1xuICAgICAgc2VhcmNoUGFyYW1zID0gYD9pcD0ke3JlcGxhY2VtZW50LmlwfWA7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKHVybGpvaW4oJy92My9kb21haW5zJywgZG9tYWluLCAnaXBzJywgJ2lwX3Bvb2wnLCBzZWFyY2hQYXJhbXMpKTtcbiAgfVxuXG4gIHVwZGF0ZURLSU1BdXRob3JpdHkoZG9tYWluOiBzdHJpbmcsIGRhdGE6IERLSU1BdXRob3JpdHlJbmZvKTogUHJvbWlzZTxVcGRhdGVkREtJTUF1dGhvcml0eT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0KGAvdjMvZG9tYWlucy8ke2RvbWFpbn0vZGtpbV9hdXRob3JpdHlgLCB7fSwgeyBxdWVyeTogYHNlbGY9JHtkYXRhLnNlbGZ9YCB9KVxuICAgICAgLnRoZW4oKHJlcyA6IEFQSVJlc3BvbnNlKSA9PiByZXMgYXMgVXBkYXRlZERLSU1BdXRob3JpdHlSZXNwb25zZSlcbiAgICAgIC50aGVuKChyZXMgOiBVcGRhdGVkREtJTUF1dGhvcml0eVJlc3BvbnNlKSA9PiByZXMuYm9keSBhcyBVcGRhdGVkREtJTUF1dGhvcml0eSk7XG4gIH1cblxuICB1cGRhdGVES0lNU2VsZWN0b3IoZG9tYWluOiBzdHJpbmcsIGRhdGE6IERLSU1TZWxlY3RvckluZm8pOiBQcm9taXNlPFVwZGF0ZWRES0lNU2VsZWN0b3JSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0KGAvdjMvZG9tYWlucy8ke2RvbWFpbn0vZGtpbV9zZWxlY3RvcmAsIHt9LCB7IHF1ZXJ5OiBgZGtpbV9zZWxlY3Rvcj0ke2RhdGEuZGtpbVNlbGVjdG9yfWAgfSlcbiAgICAgIC50aGVuKChyZXMgOiBBUElSZXNwb25zZSkgPT4gcmVzIGFzIFVwZGF0ZWRES0lNU2VsZWN0b3JSZXNwb25zZSk7XG4gIH1cblxuICB1cGRhdGVXZWJQcmVmaXgoZG9tYWluOiBzdHJpbmcsIGRhdGE6IFdlYlByZWZpeEluZm8pOiBQcm9taXNlPFVwZGF0ZWRXZWJQcmVmaXhSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0KGAvdjMvZG9tYWlucy8ke2RvbWFpbn0vd2ViX3ByZWZpeGAsIHt9LCB7IHF1ZXJ5OiBgd2ViX3ByZWZpeD0ke2RhdGEud2ViUHJlZml4fWAgfSlcbiAgICAgIC50aGVuKChyZXMgOiBBUElSZXNwb25zZSkgPT4gcmVzIGFzIFVwZGF0ZWRXZWJQcmVmaXhSZXNwb25zZSk7XG4gIH1cbn1cbiIsImltcG9ydCB1cmxqb2luIGZyb20gJ3VybC1qb2luJztcbmltcG9ydCB7IEFQSVJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vVHlwZXMvQ29tbW9uL0FwaVJlc3BvbnNlJztcbmltcG9ydCB7IElEb21haW5DcmVkZW50aWFscyB9IGZyb20gJy4uLy4uL0ludGVyZmFjZXMvRG9tYWlucyc7XG5pbXBvcnQge1xuICBEb21haW5DcmVkZW50aWFsc1Jlc3BvbnNlRGF0YSxcbiAgRG9tYWluQ3JlZGVudGlhbHNMaXN0LFxuICBDcmVhdGVkVXBkYXRlZERvbWFpbkNyZWRlbnRpYWxzUmVzcG9uc2UsXG4gIERvbWFpbkNyZWRlbnRpYWxzUmVzdWx0LFxuICBEZWxldGVkRG9tYWluQ3JlZGVudGlhbHNSZXNwb25zZSxcbiAgRG9tYWluQ3JlZGVudGlhbHNRdWVyeSxcbiAgRG9tYWluQ3JlZGVudGlhbHMsXG4gIFVwZGF0ZURvbWFpbkNyZWRlbnRpYWxzRGF0YVxufSBmcm9tICcuLi8uLi9UeXBlcy9Eb21haW5zJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4uL2NvbW1vbi9SZXF1ZXN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRG9tYWluQ3JlZGVudGlhbHNDbGllbnQgaW1wbGVtZW50cyBJRG9tYWluQ3JlZGVudGlhbHMge1xuICBiYXNlUm91dGU6IHN0cmluZztcbiAgcmVxdWVzdDogUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0KSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICB0aGlzLmJhc2VSb3V0ZSA9ICcvdjMvZG9tYWlucy8nO1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFyc2VEb21haW5DcmVkZW50aWFsc0xpc3QoXG4gICAgcmVzcG9uc2U6IERvbWFpbkNyZWRlbnRpYWxzUmVzcG9uc2VEYXRhXG4gICk6IERvbWFpbkNyZWRlbnRpYWxzTGlzdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGl0ZW1zOiByZXNwb25zZS5ib2R5Lml0ZW1zLFxuICAgICAgdG90YWxDb3VudDogcmVzcG9uc2UuYm9keS50b3RhbF9jb3VudFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIF9wYXJzZU1lc3NhZ2VSZXNwb25zZShcbiAgICByZXNwb25zZTogQ3JlYXRlZFVwZGF0ZWREb21haW5DcmVkZW50aWFsc1Jlc3BvbnNlXG4gICk6IERvbWFpbkNyZWRlbnRpYWxzUmVzdWx0IHtcbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIG1lc3NhZ2U6IHJlc3BvbnNlLmJvZHkubWVzc2FnZVxuICAgIH0gYXMgRG9tYWluQ3JlZGVudGlhbHNSZXN1bHQ7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgX3BhcnNlRGVsZXRlZFJlc3BvbnNlKFxuICAgIHJlc3BvbnNlOkRlbGV0ZWREb21haW5DcmVkZW50aWFsc1Jlc3BvbnNlXG4gICk6IERvbWFpbkNyZWRlbnRpYWxzUmVzdWx0IHtcbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIG1lc3NhZ2U6IHJlc3BvbnNlLmJvZHkubWVzc2FnZSxcbiAgICAgIHNwZWM6IHJlc3BvbnNlLmJvZHkuc3BlY1xuICAgIH0gYXMgRG9tYWluQ3JlZGVudGlhbHNSZXN1bHQ7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgbGlzdChkb21haW46IHN0cmluZywgcXVlcnk/OiBEb21haW5DcmVkZW50aWFsc1F1ZXJ5KTogUHJvbWlzZTxEb21haW5DcmVkZW50aWFsc0xpc3Q+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvY3JlZGVudGlhbHMnKSwgcXVlcnkpXG4gICAgICAudGhlbihcbiAgICAgICAgKHJlczogQVBJUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlRG9tYWluQ3JlZGVudGlhbHNMaXN0KHJlcyBhcyBEb21haW5DcmVkZW50aWFsc1Jlc3BvbnNlRGF0YSlcbiAgICAgICk7XG4gIH1cblxuICBjcmVhdGUoXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgZGF0YTogRG9tYWluQ3JlZGVudGlhbHNcbiAgKTogUHJvbWlzZTxEb21haW5DcmVkZW50aWFsc1Jlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRChgJHt0aGlzLmJhc2VSb3V0ZX0ke2RvbWFpbn0vY3JlZGVudGlhbHNgLCBkYXRhKVxuICAgICAgLnRoZW4oKHJlczogQVBJUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlTWVzc2FnZVJlc3BvbnNlKHJlcykpO1xuICB9XG5cbiAgdXBkYXRlKFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIGNyZWRlbnRpYWxzTG9naW46IHN0cmluZyxcbiAgICBkYXRhOiBVcGRhdGVEb21haW5DcmVkZW50aWFsc0RhdGFcbiAgKTogUHJvbWlzZTxEb21haW5DcmVkZW50aWFsc1Jlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0V2l0aEZEKGAke3RoaXMuYmFzZVJvdXRlfSR7ZG9tYWlufS9jcmVkZW50aWFscy8ke2NyZWRlbnRpYWxzTG9naW59YCwgZGF0YSlcbiAgICAgIC50aGVuKChyZXM6IEFQSVJlc3BvbnNlKSA9PiB0aGlzLl9wYXJzZU1lc3NhZ2VSZXNwb25zZShyZXMpKTtcbiAgfVxuXG4gIGRlc3Ryb3koXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgY3JlZGVudGlhbHNMb2dpbjogc3RyaW5nXG4gICk6IFByb21pc2U8RG9tYWluQ3JlZGVudGlhbHNSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZShgJHt0aGlzLmJhc2VSb3V0ZX0ke2RvbWFpbn0vY3JlZGVudGlhbHMvJHtjcmVkZW50aWFsc0xvZ2lufWApXG4gICAgICAudGhlbigocmVzOiBBUElSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VEZWxldGVkUmVzcG9uc2UocmVzKSk7XG4gIH1cbn1cbiIsImltcG9ydCB1cmxqb2luIGZyb20gJ3VybC1qb2luJztcbmltcG9ydCB7IEFQSVJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vVHlwZXMvQ29tbW9uL0FwaVJlc3BvbnNlJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4uL2NvbW1vbi9SZXF1ZXN0JztcblxuaW1wb3J0IHtcbiAgSURvbWFpblRhZ1N0YXRpc3RpY1Jlc3VsdCxcbiAgSURvbWFpblRhZ3NDbGllbnRcbn0gZnJvbSAnLi4vLi4vSW50ZXJmYWNlcy9Eb21haW5zJztcbmltcG9ydCBOYXZpZ2F0aW9uVGhydVBhZ2VzIGZyb20gJy4uL2NvbW1vbi9OYXZpZ2F0aW9uVGhydVBhZ2VzJztcbmltcG9ydCB7IFJlc29sdXRpb24gfSBmcm9tICcuLi8uLi9FbnVtcyc7XG5pbXBvcnQge1xuICBEb21haW5UYWdzSXRlbSxcbiAgRG9tYWluVGFnc0l0ZW1JbmZvLFxuICBEb21haW5UYWdTdGF0aXN0aWNJdGVtLFxuICBEb21haW5UYWdTdGF0QVBJUmVzcG9uc2UsXG4gIERvbWFpblRhZ0FQSVJlc3BvbnNlU3RhdHNJdGVtLFxuICBEb21haW5UYWdzTGlzdCxcbiAgRG9tYWluVGFnc1Jlc3BvbnNlRGF0YSxcbiAgRG9tYWluVGFnc1F1ZXJ5LFxuICBEb21haW5UYWdzTWVzc2FnZVJlcyxcbiAgRG9tYWluVGFnc1N0YXRpc3RpY1F1ZXJ5LFxuICBEb21haW5UYWdDb3VudHJpZXNBZ2dyZWdhdGlvbixcbiAgRG9tYWluVGFnQ291bnRyaWVzQVBJUmVzcG9uc2UsXG4gIERvbWFpblRhZ1Byb3ZpZGVyc0FnZ3JlZ2F0aW9uLFxuICBEb21haW5UYWdQcm92aWRlcnNBUElSZXNwb25zZSxcbiAgRG9tYWluVGFnRGV2aWNlc0FnZ3JlZ2F0aW9uLFxuICBEb21haW5UYWdEZXZpY2VzQVBJUmVzcG9uc2Vcbn0gZnJvbSAnLi4vLi4vVHlwZXMvRG9tYWlucyc7XG5cbmV4cG9ydCBjbGFzcyBEb21haW5UYWcgaW1wbGVtZW50cyBEb21haW5UYWdzSXRlbSB7XG4gIHRhZzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAnZmlyc3Qtc2Vlbic6IERhdGU7XG4gICdsYXN0LXNlZW4nOiBEYXRlO1xuXG4gIGNvbnN0cnVjdG9yKHRhZ0luZm86IERvbWFpblRhZ3NJdGVtSW5mbykge1xuICAgIHRoaXMudGFnID0gdGFnSW5mby50YWc7XG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IHRhZ0luZm8uZGVzY3JpcHRpb247XG4gICAgdGhpc1snZmlyc3Qtc2VlbiddID0gbmV3IERhdGUodGFnSW5mb1snZmlyc3Qtc2VlbiddKTtcbiAgICB0aGlzWydsYXN0LXNlZW4nXSA9IG5ldyBEYXRlKHRhZ0luZm9bJ2xhc3Qtc2VlbiddKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRG9tYWluVGFnU3RhdGlzdGljIGltcGxlbWVudHMgSURvbWFpblRhZ1N0YXRpc3RpY1Jlc3VsdCB7XG4gIHRhZzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBzdGFydDogRGF0ZTtcbiAgZW5kOiBEYXRlO1xuICByZXNvbHV0aW9uOiBSZXNvbHV0aW9uO1xuICBzdGF0czogRG9tYWluVGFnU3RhdGlzdGljSXRlbVtdO1xuXG4gIGNvbnN0cnVjdG9yKHRhZ1N0YXRpc3RpY0luZm86IERvbWFpblRhZ1N0YXRBUElSZXNwb25zZSkge1xuICAgIHRoaXMudGFnID0gdGFnU3RhdGlzdGljSW5mby5ib2R5LnRhZztcbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gdGFnU3RhdGlzdGljSW5mby5ib2R5LmRlc2NyaXB0aW9uO1xuICAgIHRoaXMuc3RhcnQgPSBuZXcgRGF0ZSh0YWdTdGF0aXN0aWNJbmZvLmJvZHkuc3RhcnQpO1xuICAgIHRoaXMuZW5kID0gbmV3IERhdGUodGFnU3RhdGlzdGljSW5mby5ib2R5LmVuZCk7XG4gICAgdGhpcy5yZXNvbHV0aW9uID0gdGFnU3RhdGlzdGljSW5mby5ib2R5LnJlc29sdXRpb247XG4gICAgdGhpcy5zdGF0cyA9IHRhZ1N0YXRpc3RpY0luZm8uYm9keS5zdGF0cy5tYXAoZnVuY3Rpb24gKHN0YXQ6IERvbWFpblRhZ0FQSVJlc3BvbnNlU3RhdHNJdGVtKSB7XG4gICAgICBjb25zdCByZXMgPSB7IC4uLnN0YXQsIHRpbWU6IG5ldyBEYXRlKHN0YXQudGltZSkgfTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRG9tYWluVGFnc0NsaWVudFxuICBleHRlbmRzIE5hdmlnYXRpb25UaHJ1UGFnZXM8RG9tYWluVGFnc0xpc3Q+XG4gIGltcGxlbWVudHMgSURvbWFpblRhZ3NDbGllbnQge1xuICBiYXNlUm91dGU6IHN0cmluZztcbiAgcmVxdWVzdDogUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0KSB7XG4gICAgc3VwZXIocmVxdWVzdCk7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICB0aGlzLmJhc2VSb3V0ZSA9ICcvdjMvJztcbiAgfVxuXG4gIHByb3RlY3RlZCBwYXJzZUxpc3QoXG4gICAgcmVzcG9uc2U6IERvbWFpblRhZ3NSZXNwb25zZURhdGEsXG4gICk6IERvbWFpblRhZ3NMaXN0IHtcbiAgICBjb25zdCBkYXRhID0ge30gYXMgRG9tYWluVGFnc0xpc3Q7XG4gICAgZGF0YS5pdGVtcyA9IHJlc3BvbnNlLmJvZHkuaXRlbXMubWFwKCh0YWdJbmZvOiBEb21haW5UYWdzSXRlbUluZm8pID0+IG5ldyBEb21haW5UYWcodGFnSW5mbykpO1xuXG4gICAgZGF0YS5wYWdlcyA9IHRoaXMucGFyc2VQYWdlTGlua3MocmVzcG9uc2UsICc/JywgJ3RhZycpO1xuICAgIGRhdGEuc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFyc2VUYWdTdGF0aXN0aWMoXG4gICAgcmVzcG9uc2U6IERvbWFpblRhZ1N0YXRBUElSZXNwb25zZVxuICApOiBJRG9tYWluVGFnU3RhdGlzdGljUmVzdWx0IHtcbiAgICByZXR1cm4gbmV3IERvbWFpblRhZ1N0YXRpc3RpYyhyZXNwb25zZSk7XG4gIH1cblxuICBhc3luYyBsaXN0KGRvbWFpbjogc3RyaW5nLCBxdWVyeT86IERvbWFpblRhZ3NRdWVyeSk6IFByb21pc2U8RG9tYWluVGFnc0xpc3Q+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0TGlzdFdpdGhQYWdlcyh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGFncycpLCBxdWVyeSk7XG4gIH1cblxuICBnZXQoZG9tYWluOiBzdHJpbmcsIHRhZzogc3RyaW5nKTogUHJvbWlzZTxEb21haW5UYWdzSXRlbT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90YWdzJywgdGFnKSlcbiAgICAgIC50aGVuKFxuICAgICAgICAocmVzOiBBUElSZXNwb25zZSkgPT4gbmV3IERvbWFpblRhZyhyZXMuYm9keSlcbiAgICAgICk7XG4gIH1cblxuICB1cGRhdGUoZG9tYWluOiBzdHJpbmcsIHRhZzogc3RyaW5nLCBkZXNjcmlwdGlvbjogc3RyaW5nKTogUHJvbWlzZTxEb21haW5UYWdzTWVzc2FnZVJlcz4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0KHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90YWdzJywgdGFnKSwgZGVzY3JpcHRpb24pXG4gICAgICAudGhlbihcbiAgICAgICAgKHJlczogQVBJUmVzcG9uc2UpID0+IHJlcy5ib2R5IGFzIERvbWFpblRhZ3NNZXNzYWdlUmVzXG4gICAgICApO1xuICB9XG5cbiAgZGVzdHJveShcbiAgICBkb21haW46IHN0cmluZyxcbiAgICB0YWc6IHN0cmluZ1xuICApOiBQcm9taXNlPERvbWFpblRhZ3NNZXNzYWdlUmVzPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5kZWxldGUoYCR7dGhpcy5iYXNlUm91dGV9JHtkb21haW59L3RhZ3MvJHt0YWd9YClcbiAgICAgIC50aGVuKChyZXM6IEFQSVJlc3BvbnNlKSA9PiAoXG4gICAgICAgIHtcbiAgICAgICAgICBtZXNzYWdlOiByZXMuYm9keS5tZXNzYWdlLFxuICAgICAgICAgIHN0YXR1czogcmVzLnN0YXR1c1xuICAgICAgICB9IGFzIERvbWFpblRhZ3NNZXNzYWdlUmVzKSk7XG4gIH1cblxuICBzdGF0aXN0aWMoZG9tYWluOiBzdHJpbmcsIHRhZzogc3RyaW5nLCBxdWVyeTogRG9tYWluVGFnc1N0YXRpc3RpY1F1ZXJ5KVxuICAgIDogUHJvbWlzZTxEb21haW5UYWdTdGF0aXN0aWM+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGFncycsIHRhZywgJ3N0YXRzJyksIHF1ZXJ5KVxuICAgICAgLnRoZW4oXG4gICAgICAgIChyZXM6IEFQSVJlc3BvbnNlKSA9PiB0aGlzLl9wYXJzZVRhZ1N0YXRpc3RpYyhyZXMpXG4gICAgICApO1xuICB9XG5cbiAgY291bnRyaWVzKGRvbWFpbjogc3RyaW5nLCB0YWc6IHN0cmluZyk6IFByb21pc2U8RG9tYWluVGFnQ291bnRyaWVzQWdncmVnYXRpb24+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGFncycsIHRhZywgJ3N0YXRzL2FnZ3JlZ2F0ZXMvY291bnRyaWVzJykpXG4gICAgICAudGhlbihcbiAgICAgICAgKHJlczogRG9tYWluVGFnQ291bnRyaWVzQVBJUmVzcG9uc2UpID0+IHJlcy5ib2R5IGFzIERvbWFpblRhZ0NvdW50cmllc0FnZ3JlZ2F0aW9uXG4gICAgICApO1xuICB9XG5cbiAgcHJvdmlkZXJzKGRvbWFpbjogc3RyaW5nLCB0YWc6IHN0cmluZyk6IFByb21pc2U8RG9tYWluVGFnUHJvdmlkZXJzQWdncmVnYXRpb24+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGFncycsIHRhZywgJ3N0YXRzL2FnZ3JlZ2F0ZXMvcHJvdmlkZXJzJykpXG4gICAgICAudGhlbihcbiAgICAgICAgKHJlczogRG9tYWluVGFnUHJvdmlkZXJzQVBJUmVzcG9uc2UpID0+IHJlcy5ib2R5IGFzIERvbWFpblRhZ1Byb3ZpZGVyc0FnZ3JlZ2F0aW9uXG4gICAgICApO1xuICB9XG5cbiAgZGV2aWNlcyhkb21haW46IHN0cmluZywgdGFnOiBzdHJpbmcpOiBQcm9taXNlPERvbWFpblRhZ0RldmljZXNBZ2dyZWdhdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90YWdzJywgdGFnLCAnc3RhdHMvYWdncmVnYXRlcy9kZXZpY2VzJykpXG4gICAgICAudGhlbihcbiAgICAgICAgKHJlczogRG9tYWluVGFnRGV2aWNlc0FQSVJlc3BvbnNlKSA9PiByZXMuYm9keSBhcyBEb21haW5UYWdEZXZpY2VzQWdncmVnYXRpb25cbiAgICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCB1cmxqb2luIGZyb20gJ3VybC1qb2luJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4uL2NvbW1vbi9SZXF1ZXN0JztcblxuaW1wb3J0IHtcbiAgQ3JlYXRlRG9tYWluVGVtcGxhdGVBUElSZXNwb25zZSxcbiAgQ3JlYXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uQVBJUmVzcG9uc2UsXG4gIENyZWF0ZURvbWFpblRlbXBsYXRlVmVyc2lvblJlc3VsdCxcbiAgRG9tYWluVGVtcGxhdGVEYXRhLFxuICBEb21haW5UZW1wbGF0ZXNRdWVyeSxcbiAgRG9tYWluVGVtcGxhdGVVcGRhdGVEYXRhLFxuICBEb21haW5UZW1wbGF0ZVVwZGF0ZVZlcnNpb25EYXRhLFxuICBEb21haW5UZW1wbGF0ZVZlcnNpb25EYXRhLFxuICBHZXREb21haW5UZW1wbGF0ZUFQSVJlc3BvbnNlLFxuICBMaXN0RG9tYWluVGVtcGxhdGVzQVBJUmVzcG9uc2UsXG4gIExpc3REb21haW5UZW1wbGF0ZXNSZXN1bHQsXG4gIExpc3REb21haW5UZW1wbGF0ZVZlcnNpb25zQVBJUmVzcG9uc2UsXG4gIExpc3REb21haW5UZW1wbGF0ZVZlcnNpb25zUmVzdWx0LFxuICBNdXRhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25BUElSZXNwb25zZSxcbiAgTXV0YXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uUmVzdWx0LFxuICBOb3RpZmljYXRpb25BUElSZXNwb25zZSxcbiAgTm90aWZpY2F0aW9uUmVzdWx0LFxuICBTaG9ydFRlbXBsYXRlVmVyc2lvbixcbiAgVGVtcGxhdGVRdWVyeSxcbiAgVGVtcGxhdGVWZXJzaW9uLFxuICBVcGRhdGVPckRlbGV0ZURvbWFpblRlbXBsYXRlQVBJUmVzcG9uc2UsXG4gIFVwZGF0ZU9yRGVsZXRlRG9tYWluVGVtcGxhdGVSZXN1bHRcbn0gZnJvbSAnLi4vLi4vVHlwZXMvRG9tYWlucyc7XG5pbXBvcnQgTmF2aWdhdGlvblRocnVQYWdlcyBmcm9tICcuLi9jb21tb24vTmF2aWdhdGlvblRocnVQYWdlcyc7XG5pbXBvcnQgeyBJRG9tYWluVGVtcGxhdGUsIElEb21haW5UZW1wbGF0ZXNDbGllbnQgfSBmcm9tICcuLi8uLi9JbnRlcmZhY2VzL0RvbWFpbnMnO1xuXG5leHBvcnQgY2xhc3MgRG9tYWluVGVtcGxhdGVJdGVtIGltcGxlbWVudHMgSURvbWFpblRlbXBsYXRlIHtcbiAgbmFtZSA6IHN0cmluZztcbiAgZGVzY3JpcHRpb24gOiBzdHJpbmc7XG4gIGNyZWF0ZWRBdCA6IERhdGUgfCAnJztcbiAgY3JlYXRlZEJ5IDogc3RyaW5nO1xuICBpZCA6IHN0cmluZztcbiAgdmVyc2lvbj86IFRlbXBsYXRlVmVyc2lvbjtcbiAgdmVyc2lvbnM/OiBTaG9ydFRlbXBsYXRlVmVyc2lvbltdO1xuXG4gIGNvbnN0cnVjdG9yKGRvbWFpblRlbXBsYXRlRnJvbUFQSTogSURvbWFpblRlbXBsYXRlKSB7XG4gICAgdGhpcy5uYW1lID0gZG9tYWluVGVtcGxhdGVGcm9tQVBJLm5hbWU7XG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRvbWFpblRlbXBsYXRlRnJvbUFQSS5kZXNjcmlwdGlvbjtcbiAgICB0aGlzLmNyZWF0ZWRBdCA9IGRvbWFpblRlbXBsYXRlRnJvbUFQSS5jcmVhdGVkQXQgPyBuZXcgRGF0ZShkb21haW5UZW1wbGF0ZUZyb21BUEkuY3JlYXRlZEF0KSA6ICcnO1xuICAgIHRoaXMuY3JlYXRlZEJ5ID0gZG9tYWluVGVtcGxhdGVGcm9tQVBJLmNyZWF0ZWRCeTtcbiAgICB0aGlzLmlkID0gZG9tYWluVGVtcGxhdGVGcm9tQVBJLmlkO1xuXG4gICAgaWYgKGRvbWFpblRlbXBsYXRlRnJvbUFQSS52ZXJzaW9uKSB7XG4gICAgICB0aGlzLnZlcnNpb24gPSBkb21haW5UZW1wbGF0ZUZyb21BUEkudmVyc2lvbjtcbiAgICAgIGlmIChkb21haW5UZW1wbGF0ZUZyb21BUEkudmVyc2lvbi5jcmVhdGVkQXQpIHtcbiAgICAgICAgdGhpcy52ZXJzaW9uLmNyZWF0ZWRBdCA9IG5ldyBEYXRlKGRvbWFpblRlbXBsYXRlRnJvbUFQSS52ZXJzaW9uLmNyZWF0ZWRBdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRvbWFpblRlbXBsYXRlRnJvbUFQSS52ZXJzaW9ucyAmJiBkb21haW5UZW1wbGF0ZUZyb21BUEkudmVyc2lvbnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnZlcnNpb25zID0gZG9tYWluVGVtcGxhdGVGcm9tQVBJLnZlcnNpb25zLm1hcCgodmVyc2lvbikgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB7IC4uLnZlcnNpb24gfTtcbiAgICAgICAgcmVzdWx0LmNyZWF0ZWRBdCA9IG5ldyBEYXRlKHZlcnNpb24uY3JlYXRlZEF0KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb21haW5UZW1wbGF0ZXNDbGllbnRcbiAgZXh0ZW5kcyBOYXZpZ2F0aW9uVGhydVBhZ2VzPExpc3REb21haW5UZW1wbGF0ZXNSZXN1bHQ+XG4gIGltcGxlbWVudHMgSURvbWFpblRlbXBsYXRlc0NsaWVudCB7XG4gIGJhc2VSb3V0ZTogc3RyaW5nO1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICBzdXBlcihyZXF1ZXN0KTtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMuYmFzZVJvdXRlID0gJy92My8nO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUNyZWF0aW9uUmVzcG9uc2UoZGF0YTogQ3JlYXRlRG9tYWluVGVtcGxhdGVBUElSZXNwb25zZSk6IElEb21haW5UZW1wbGF0ZSB7XG4gICAgcmV0dXJuIG5ldyBEb21haW5UZW1wbGF0ZUl0ZW0oZGF0YS5ib2R5LnRlbXBsYXRlKTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VDcmVhdGlvblZlcnNpb25SZXNwb25zZShcbiAgICBkYXRhOiBDcmVhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25BUElSZXNwb25zZVxuICApOiBDcmVhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25SZXN1bHQge1xuICAgIGNvbnN0IHJlc3VsdDogQ3JlYXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uUmVzdWx0ID0ge30gYXMgQ3JlYXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uUmVzdWx0O1xuICAgIHJlc3VsdC5zdGF0dXMgPSBkYXRhLnN0YXR1cztcbiAgICByZXN1bHQubWVzc2FnZSA9IGRhdGEuYm9keS5tZXNzYWdlO1xuICAgIGlmIChkYXRhLmJvZHkgJiYgZGF0YS5ib2R5LnRlbXBsYXRlKSB7XG4gICAgICByZXN1bHQudGVtcGxhdGUgPSBuZXcgRG9tYWluVGVtcGxhdGVJdGVtKGRhdGEuYm9keS50ZW1wbGF0ZSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlTXV0YXRpb25SZXNwb25zZShcbiAgICBkYXRhOiBVcGRhdGVPckRlbGV0ZURvbWFpblRlbXBsYXRlQVBJUmVzcG9uc2VcbiAgKTogVXBkYXRlT3JEZWxldGVEb21haW5UZW1wbGF0ZVJlc3VsdCB7XG4gICAgY29uc3QgcmVzdWx0OiBVcGRhdGVPckRlbGV0ZURvbWFpblRlbXBsYXRlUmVzdWx0ID0ge30gYXMgVXBkYXRlT3JEZWxldGVEb21haW5UZW1wbGF0ZVJlc3VsdDtcbiAgICByZXN1bHQuc3RhdHVzID0gZGF0YS5zdGF0dXM7XG4gICAgcmVzdWx0Lm1lc3NhZ2UgPSBkYXRhLmJvZHkubWVzc2FnZTtcbiAgICBpZiAoZGF0YS5ib2R5ICYmIGRhdGEuYm9keS50ZW1wbGF0ZSkge1xuICAgICAgcmVzdWx0LnRlbXBsYXRlTmFtZSA9IGRhdGEuYm9keS50ZW1wbGF0ZS5uYW1lO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZU5vdGlmaWNhdGlvblJlc3BvbnNlKGRhdGE6IE5vdGlmaWNhdGlvbkFQSVJlc3BvbnNlKTogTm90aWZpY2F0aW9uUmVzdWx0IHtcbiAgICBjb25zdCByZXN1bHQ6IE5vdGlmaWNhdGlvblJlc3VsdCA9IHt9IGFzIE5vdGlmaWNhdGlvblJlc3VsdDtcbiAgICByZXN1bHQuc3RhdHVzID0gZGF0YS5zdGF0dXM7XG4gICAgcmVzdWx0Lm1lc3NhZ2UgPSBkYXRhLmJvZHkubWVzc2FnZTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZU11dGF0ZVRlbXBsYXRlVmVyc2lvblJlc3BvbnNlKFxuICAgIGRhdGE6IE11dGF0ZURvbWFpblRlbXBsYXRlVmVyc2lvbkFQSVJlc3BvbnNlXG4gICk6IE11dGF0ZURvbWFpblRlbXBsYXRlVmVyc2lvblJlc3VsdCB7XG4gICAgY29uc3QgcmVzdWx0OiBNdXRhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25SZXN1bHQgPSB7fSBhcyBNdXRhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25SZXN1bHQ7XG4gICAgcmVzdWx0LnN0YXR1cyA9IGRhdGEuc3RhdHVzO1xuICAgIHJlc3VsdC5tZXNzYWdlID0gZGF0YS5ib2R5Lm1lc3NhZ2U7XG4gICAgaWYgKGRhdGEuYm9keS50ZW1wbGF0ZSkge1xuICAgICAgcmVzdWx0LnRlbXBsYXRlTmFtZSA9IGRhdGEuYm9keS50ZW1wbGF0ZS5uYW1lO1xuICAgICAgcmVzdWx0LnRlbXBsYXRlVmVyc2lvbiA9IHsgdGFnOiBkYXRhLmJvZHkudGVtcGxhdGUudmVyc2lvbi50YWcgfTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByb3RlY3RlZCBwYXJzZUxpc3QocmVzcG9uc2U6IExpc3REb21haW5UZW1wbGF0ZXNBUElSZXNwb25zZSk6IExpc3REb21haW5UZW1wbGF0ZXNSZXN1bHQge1xuICAgIGNvbnN0IGRhdGEgPSB7fSBhcyBMaXN0RG9tYWluVGVtcGxhdGVzUmVzdWx0O1xuXG4gICAgZGF0YS5pdGVtcyA9IHJlc3BvbnNlLmJvZHkuaXRlbXMubWFwKChkOiBJRG9tYWluVGVtcGxhdGUpID0+IG5ldyBEb21haW5UZW1wbGF0ZUl0ZW0oZCkpO1xuXG4gICAgZGF0YS5wYWdlcyA9IHRoaXMucGFyc2VQYWdlTGlua3MocmVzcG9uc2UsICc/JywgJ3AnKTtcbiAgICBkYXRhLnN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUxpc3RUZW1wbGF0ZVZlcnNpb25zKFxuICAgIHJlc3BvbnNlOiBMaXN0RG9tYWluVGVtcGxhdGVWZXJzaW9uc0FQSVJlc3BvbnNlXG4gICk6IExpc3REb21haW5UZW1wbGF0ZVZlcnNpb25zUmVzdWx0IHtcbiAgICBjb25zdCBkYXRhID0ge30gYXMgTGlzdERvbWFpblRlbXBsYXRlVmVyc2lvbnNSZXN1bHQ7XG5cbiAgICBkYXRhLnRlbXBsYXRlID0gbmV3IERvbWFpblRlbXBsYXRlSXRlbShyZXNwb25zZS5ib2R5LnRlbXBsYXRlKTtcblxuICAgIGRhdGEucGFnZXMgPSB0aGlzLnBhcnNlUGFnZUxpbmtzKHJlc3BvbnNlLCAnPycsICdwJyk7XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGFzeW5jIGxpc3QoZG9tYWluOiBzdHJpbmcsIHF1ZXJ5PzogRG9tYWluVGVtcGxhdGVzUXVlcnkpOiBQcm9taXNlPExpc3REb21haW5UZW1wbGF0ZXNSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0TGlzdFdpdGhQYWdlcyh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGVtcGxhdGVzJyksIHF1ZXJ5KTtcbiAgfVxuXG4gIGdldChkb21haW46IHN0cmluZywgdGVtcGxhdGVOYW1lOiBzdHJpbmcsIHF1ZXJ5PzogVGVtcGxhdGVRdWVyeSk6IFByb21pc2U8SURvbWFpblRlbXBsYXRlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RlbXBsYXRlcy8nLCB0ZW1wbGF0ZU5hbWUpLCBxdWVyeSlcbiAgICAgIC50aGVuKFxuICAgICAgICAocmVzOiBHZXREb21haW5UZW1wbGF0ZUFQSVJlc3BvbnNlKSA9PiBuZXcgRG9tYWluVGVtcGxhdGVJdGVtKHJlcy5ib2R5LnRlbXBsYXRlKVxuICAgICAgKTtcbiAgfVxuXG4gIGNyZWF0ZShcbiAgICBkb21haW46IHN0cmluZyxcbiAgICBkYXRhOiBEb21haW5UZW1wbGF0ZURhdGFcbiAgKTogUHJvbWlzZTxJRG9tYWluVGVtcGxhdGU+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RlbXBsYXRlcycpLCBkYXRhKVxuICAgICAgLnRoZW4oKHJlczogQ3JlYXRlRG9tYWluVGVtcGxhdGVBUElSZXNwb25zZSkgPT4gdGhpcy5wYXJzZUNyZWF0aW9uUmVzcG9uc2UocmVzKSk7XG4gIH1cblxuICB1cGRhdGUoXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgdGVtcGxhdGVOYW1lOiBzdHJpbmcsXG4gICAgZGF0YTogRG9tYWluVGVtcGxhdGVVcGRhdGVEYXRhXG4gICk6IFByb21pc2U8VXBkYXRlT3JEZWxldGVEb21haW5UZW1wbGF0ZVJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0V2l0aEZEKHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90ZW1wbGF0ZXMvJywgdGVtcGxhdGVOYW1lKSwgZGF0YSlcbiAgICAgIC50aGVuKChyZXM6IFVwZGF0ZU9yRGVsZXRlRG9tYWluVGVtcGxhdGVBUElSZXNwb25zZSkgPT4gdGhpcy5wYXJzZU11dGF0aW9uUmVzcG9uc2UocmVzKSk7XG4gIH1cblxuICBkZXN0cm95KGRvbWFpbjogc3RyaW5nLCB0ZW1wbGF0ZU5hbWU6IHN0cmluZyk6IFByb21pc2U8VXBkYXRlT3JEZWxldGVEb21haW5UZW1wbGF0ZVJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90ZW1wbGF0ZXMvJywgdGVtcGxhdGVOYW1lKSlcbiAgICAgIC50aGVuKChyZXM6IFVwZGF0ZU9yRGVsZXRlRG9tYWluVGVtcGxhdGVBUElSZXNwb25zZSkgPT4gdGhpcy5wYXJzZU11dGF0aW9uUmVzcG9uc2UocmVzKSk7XG4gIH1cblxuICBkZXN0cm95QWxsKGRvbWFpbjogc3RyaW5nKTogUHJvbWlzZTxOb3RpZmljYXRpb25SZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZSh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGVtcGxhdGVzJykpXG4gICAgICAudGhlbigocmVzOiBOb3RpZmljYXRpb25BUElSZXNwb25zZSkgPT4gdGhpcy5wYXJzZU5vdGlmaWNhdGlvblJlc3BvbnNlKHJlcykpO1xuICB9XG5cbiAgY3JlYXRlVmVyc2lvbihcbiAgICBkb21haW46IHN0cmluZyxcbiAgICB0ZW1wbGF0ZU5hbWU6IHN0cmluZyxcbiAgICBkYXRhOiBEb21haW5UZW1wbGF0ZVZlcnNpb25EYXRhXG4gICk6IFByb21pc2U8Q3JlYXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90ZW1wbGF0ZXMvJywgdGVtcGxhdGVOYW1lLCAnL3ZlcnNpb25zJyksIGRhdGEpXG4gICAgICAudGhlbihcbiAgICAgICAgKHJlczogQ3JlYXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uQVBJUmVzcG9uc2UpID0+IHRoaXMucGFyc2VDcmVhdGlvblZlcnNpb25SZXNwb25zZShyZXMpXG4gICAgICApO1xuICB9XG5cbiAgZ2V0VmVyc2lvbihkb21haW46IHN0cmluZywgdGVtcGxhdGVOYW1lOiBzdHJpbmcsIHRhZzogc3RyaW5nKTogUHJvbWlzZTxJRG9tYWluVGVtcGxhdGU+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGVtcGxhdGVzLycsIHRlbXBsYXRlTmFtZSwgJy92ZXJzaW9ucy8nLCB0YWcpKVxuICAgICAgLnRoZW4oXG4gICAgICAgIChyZXM6IEdldERvbWFpblRlbXBsYXRlQVBJUmVzcG9uc2UpID0+IG5ldyBEb21haW5UZW1wbGF0ZUl0ZW0ocmVzLmJvZHkudGVtcGxhdGUpXG4gICAgICApO1xuICB9XG5cbiAgdXBkYXRlVmVyc2lvbihcbiAgICBkb21haW46IHN0cmluZyxcbiAgICB0ZW1wbGF0ZU5hbWU6IHN0cmluZyxcbiAgICB0YWc6IHN0cmluZyxcbiAgICBkYXRhOiBEb21haW5UZW1wbGF0ZVVwZGF0ZVZlcnNpb25EYXRhXG4gICk6IFByb21pc2U8TXV0YXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXRXaXRoRkQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RlbXBsYXRlcy8nLCB0ZW1wbGF0ZU5hbWUsICcvdmVyc2lvbnMvJywgdGFnKSwgZGF0YSlcbiAgICAgIC50aGVuKFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgICAgICAocmVzOiBNdXRhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25BUElSZXNwb25zZSkgPT4gdGhpcy5wYXJzZU11dGF0ZVRlbXBsYXRlVmVyc2lvblJlc3BvbnNlKHJlcylcbiAgICAgICk7XG4gIH1cblxuICBkZXN0cm95VmVyc2lvbihcbiAgICBkb21haW46IHN0cmluZyxcbiAgICB0ZW1wbGF0ZU5hbWU6IHN0cmluZyxcbiAgICB0YWc6IHN0cmluZ1xuICApOiBQcm9taXNlPE11dGF0ZURvbWFpblRlbXBsYXRlVmVyc2lvblJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90ZW1wbGF0ZXMvJywgdGVtcGxhdGVOYW1lLCAnL3ZlcnNpb25zLycsIHRhZykpXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgICAgLnRoZW4oKHJlczogTXV0YXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uQVBJUmVzcG9uc2UpID0+IHRoaXMucGFyc2VNdXRhdGVUZW1wbGF0ZVZlcnNpb25SZXNwb25zZShyZXMpKTtcbiAgfVxuXG4gIGxpc3RWZXJzaW9ucyhcbiAgICBkb21haW46IHN0cmluZyxcbiAgICB0ZW1wbGF0ZU5hbWU6IHN0cmluZyxcbiAgICBxdWVyeT86IERvbWFpblRlbXBsYXRlc1F1ZXJ5XG4gICk6IFByb21pc2U8TGlzdERvbWFpblRlbXBsYXRlVmVyc2lvbnNSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGVtcGxhdGVzJywgdGVtcGxhdGVOYW1lLCAnL3ZlcnNpb25zJyksIHF1ZXJ5KVxuICAgICAgLnRoZW4oXG4gICAgICAgIChyZXM6IExpc3REb21haW5UZW1wbGF0ZVZlcnNpb25zQVBJUmVzcG9uc2UpID0+IHRoaXMucGFyc2VMaXN0VGVtcGxhdGVWZXJzaW9ucyhyZXMpXG4gICAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgdXJsam9pbiBmcm9tICd1cmwtam9pbic7XG5pbXBvcnQgTmF2aWdhdGlvblRocnVQYWdlcyBmcm9tICcuL2NvbW1vbi9OYXZpZ2F0aW9uVGhydVBhZ2VzJztcbmltcG9ydCB7XG4gIEV2ZW50c0xpc3QsXG4gIEV2ZW50c1F1ZXJ5LFxuICBFdmVudHNSZXNwb25zZSxcbn0gZnJvbSAnLi4vVHlwZXMvRXZlbnRzJztcblxuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9jb21tb24vUmVxdWVzdCc7XG5pbXBvcnQgeyBJRXZlbnRDbGllbnQgfSBmcm9tICcuLi9JbnRlcmZhY2VzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXZlbnRDbGllbnRcbiAgZXh0ZW5kcyBOYXZpZ2F0aW9uVGhydVBhZ2VzPEV2ZW50c0xpc3Q+XG4gIGltcGxlbWVudHMgSUV2ZW50Q2xpZW50IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0KSB7XG4gICAgc3VwZXIocmVxdWVzdCk7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgfVxuXG4gIHByb3RlY3RlZCBwYXJzZUxpc3QoXG4gICAgcmVzcG9uc2U6IEV2ZW50c1Jlc3BvbnNlLFxuICApOiBFdmVudHNMaXN0IHtcbiAgICBjb25zdCBkYXRhID0ge30gYXMgRXZlbnRzTGlzdDtcbiAgICBkYXRhLml0ZW1zID0gcmVzcG9uc2UuYm9keS5pdGVtcztcblxuICAgIGRhdGEucGFnZXMgPSB0aGlzLnBhcnNlUGFnZUxpbmtzKHJlc3BvbnNlLCAnLycpO1xuICAgIGRhdGEuc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgYXN5bmMgZ2V0KGRvbWFpbjogc3RyaW5nLCBxdWVyeT86IEV2ZW50c1F1ZXJ5KSA6IFByb21pc2U8RXZlbnRzTGlzdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3RMaXN0V2l0aFBhZ2VzKHVybGpvaW4oJy92MycsIGRvbWFpbiwgJ2V2ZW50cycpLCBxdWVyeSk7XG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlIGNhbWVsY2FzZSAqL1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9jb21tb24vUmVxdWVzdCc7XG5cbmltcG9ydCB7XG4gIElwUG9vbENyZWF0ZURhdGEsXG4gIElwUG9vbENyZWF0ZVJlc3BvbnNlLFxuICBJcFBvb2xDcmVhdGVSZXN1bHQsXG4gIElwUG9vbERlbGV0ZURhdGEsXG4gIElwUG9vbExpc3RSZXNwb25zZSxcbiAgSXBQb29sTGlzdFJlc3VsdCxcbiAgSXBQb29sTWVzc2FnZVJlc3BvbnNlLFxuICBJcFBvb2xNZXNzYWdlUmVzdWx0LFxuICBJcFBvb2xVcGRhdGVEYXRhLFxufSBmcm9tICcuLi9UeXBlcy9JUFBvb2xzJztcbmltcG9ydCB7IElJUFBvb2xzQ2xpZW50IH0gZnJvbSAnLi4vSW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElwUG9vbHNDbGllbnQgaW1wbGVtZW50cyBJSVBQb29sc0NsaWVudCB7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCkge1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gIH1cblxuICBsaXN0KCk6IFByb21pc2U8SXBQb29sTGlzdFJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KCcvdjEvaXBfcG9vbHMnKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiBJcFBvb2xMaXN0UmVzcG9uc2UpID0+IHRoaXMucGFyc2VJcFBvb2xzUmVzcG9uc2UocmVzcG9uc2UpKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZShkYXRhOiBJcFBvb2xDcmVhdGVEYXRhKTogUHJvbWlzZTxJcFBvb2xDcmVhdGVSZXN1bHQ+IHtcbiAgICBjb25zdCByZXNwb25zZTogSXBQb29sQ3JlYXRlUmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRCgnL3YxL2lwX3Bvb2xzJywgZGF0YSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgLi4ucmVzcG9uc2UuYm9keVxuICAgIH07XG4gIH1cblxuICBhc3luYyB1cGRhdGUocG9vbElkOiBzdHJpbmcsIGRhdGE6IElwUG9vbFVwZGF0ZURhdGEpOiBQcm9taXNlPElwUG9vbE1lc3NhZ2VSZXN1bHQ+IHtcbiAgICBjb25zdCByZXNwb25zZTogSXBQb29sTWVzc2FnZVJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LnBhdGNoV2l0aEZEKGAvdjEvaXBfcG9vbHMvJHtwb29sSWR9YCwgZGF0YSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgLi4ucmVzcG9uc2UuYm9keVxuICAgIH07XG4gIH1cblxuICBhc3luYyBkZWxldGUocG9vbElkOiBzdHJpbmcsIGRhdGE6IElwUG9vbERlbGV0ZURhdGEpOiBQcm9taXNlPElwUG9vbE1lc3NhZ2VSZXN1bHQ+IHtcbiAgICBjb25zdCByZXNwb25zZTpJcFBvb2xNZXNzYWdlUmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QuZGVsZXRlKGAvdjEvaXBfcG9vbHMvJHtwb29sSWR9YCwgZGF0YSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgLi4ucmVzcG9uc2UuYm9keVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHBhcnNlSXBQb29sc1Jlc3BvbnNlKHJlc3BvbnNlOiBJcFBvb2xMaXN0UmVzcG9uc2UpOiBJcFBvb2xMaXN0UmVzdWx0IHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAuLi5yZXNwb25zZS5ib2R5XG4gICAgfTtcbiAgfVxufVxuIiwiaW1wb3J0IE1nUmVxdWVzdCBmcm9tICcuL2NvbW1vbi9SZXF1ZXN0JztcbmltcG9ydCB7IElwRGF0YSwgSVBzTGlzdFF1ZXJ5LCBJcHNMaXN0UmVzcG9uc2VCb2R5IH0gZnJvbSAnLi4vVHlwZXMvSVBzJztcbmltcG9ydCB7IElJUHNDbGllbnQgfSBmcm9tICcuLi9JbnRlcmZhY2VzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSXBzQ2xpZW50IGltcGxlbWVudHMgSUlQc0NsaWVudCB7XG4gIHJlcXVlc3Q6IE1nUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBNZ1JlcXVlc3QpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICB9XG5cbiAgYXN5bmMgbGlzdChxdWVyeT86IElQc0xpc3RRdWVyeSk6IFByb21pc2U8SXBzTGlzdFJlc3BvbnNlQm9keT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LmdldCgnL3YzL2lwcycsIHF1ZXJ5KTtcbiAgICByZXR1cm4gdGhpcy5wYXJzZUlwc1Jlc3BvbnNlPElwc0xpc3RSZXNwb25zZUJvZHk+KHJlc3BvbnNlKTtcbiAgfVxuXG4gIGFzeW5jIGdldChpcDogc3RyaW5nKTogUHJvbWlzZTxJcERhdGE+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5nZXQoYC92My9pcHMvJHtpcH1gKTtcbiAgICByZXR1cm4gdGhpcy5wYXJzZUlwc1Jlc3BvbnNlPElwRGF0YT4ocmVzcG9uc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUlwc1Jlc3BvbnNlPFQ+KHJlc3BvbnNlOiB7IGJvZHk6IFQgfSk6IFQge1xuICAgIHJldHVybiByZXNwb25zZS5ib2R5O1xuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vY29tbW9uL1JlcXVlc3QnO1xuaW1wb3J0IHsgTWFpbGd1bkNsaWVudE9wdGlvbnMsIElucHV0Rm9ybURhdGEsIFJlcXVlc3RPcHRpb25zIH0gZnJvbSAnLi4vVHlwZXMnO1xuXG5pbXBvcnQgRG9tYWluc0NsaWVudCBmcm9tICcuL0RvbWFpbnMvZG9tYWluc0NsaWVudCc7XG5pbXBvcnQgRXZlbnRDbGllbnQgZnJvbSAnLi9FdmVudHMnO1xuaW1wb3J0IFN0YXRzQ2xpZW50IGZyb20gJy4vU3RhdHMvU3RhdHNDbGllbnQnO1xuaW1wb3J0IFN1cHByZXNzaW9uQ2xpZW50IGZyb20gJy4vU3VwcHJlc3Npb25zL1N1cHByZXNzaW9uc0NsaWVudCc7XG5pbXBvcnQgV2ViaG9va3NDbGllbnQgZnJvbSAnLi9XZWJob29rcyc7XG5pbXBvcnQgTWVzc2FnZXNDbGllbnQgZnJvbSAnLi9NZXNzYWdlcyc7XG5pbXBvcnQgUm91dGVzQ2xpZW50IGZyb20gJy4vUm91dGVzJztcbmltcG9ydCBWYWxpZGF0ZUNsaWVudCBmcm9tICcuL1ZhbGlkYXRpb25zL3ZhbGlkYXRlJztcbmltcG9ydCBJcHNDbGllbnQgZnJvbSAnLi9JUHMnO1xuaW1wb3J0IElwUG9vbHNDbGllbnQgZnJvbSAnLi9JUFBvb2xzJztcbmltcG9ydCBNYWlsaW5nTGlzdHNDbGllbnQgZnJvbSAnLi9NYWlsaW5nTGlzdHMvbWFpbGluZ0xpc3RzJztcbmltcG9ydCBNYWlsTGlzdHNNZW1iZXJzIGZyb20gJy4vTWFpbGluZ0xpc3RzL21haWxMaXN0TWVtYmVycyc7XG5pbXBvcnQgRG9tYWluQ3JlZGVudGlhbHNDbGllbnQgZnJvbSAnLi9Eb21haW5zL2RvbWFpbnNDcmVkZW50aWFscyc7XG5pbXBvcnQgTXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50IGZyb20gJy4vVmFsaWRhdGlvbnMvbXVsdGlwbGVWYWxpZGF0aW9uJztcbmltcG9ydCBEb21haW5UZW1wbGF0ZXNDbGllbnQgZnJvbSAnLi9Eb21haW5zL2RvbWFpbnNUZW1wbGF0ZXMnO1xuaW1wb3J0IERvbWFpblRhZ3NDbGllbnQgZnJvbSAnLi9Eb21haW5zL2RvbWFpbnNUYWdzJztcbmltcG9ydCBTdWJhY2NvdW50c0NsaWVudCBmcm9tICcuL1N1YmFjY291bnRzJztcblxuaW1wb3J0IHtcbiAgSURvbWFpbnNDbGllbnQsXG4gIElXZWJIb29rc0NsaWVudCxcbiAgSU1haWxndW5DbGllbnQsXG4gIElNYWlsaW5nTGlzdHNDbGllbnQsXG4gIElFdmVudENsaWVudCxcbiAgSVN0YXRzQ2xpZW50LFxuICBJU3VwcHJlc3Npb25DbGllbnQsXG4gIElNZXNzYWdlc0NsaWVudCxcbiAgSVJvdXRlc0NsaWVudCxcbiAgSVZhbGlkYXRpb25DbGllbnQsXG4gIElJUHNDbGllbnQsXG4gIElJUFBvb2xzQ2xpZW50LFxuICBJU3ViYWNjb3VudHNDbGllbnQsXG59IGZyb20gJy4uL0ludGVyZmFjZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNYWlsZ3VuQ2xpZW50IGltcGxlbWVudHMgSU1haWxndW5DbGllbnQge1xuICBwcml2YXRlIHJlcXVlc3Q7XG5cbiAgcHVibGljIGRvbWFpbnM6IElEb21haW5zQ2xpZW50O1xuICBwdWJsaWMgd2ViaG9va3M6IElXZWJIb29rc0NsaWVudDtcbiAgcHVibGljIGV2ZW50czogSUV2ZW50Q2xpZW50O1xuICBwdWJsaWMgc3RhdHM6IElTdGF0c0NsaWVudDtcbiAgcHVibGljIHN1cHByZXNzaW9uczogSVN1cHByZXNzaW9uQ2xpZW50O1xuICBwdWJsaWMgbWVzc2FnZXM6IElNZXNzYWdlc0NsaWVudDtcbiAgcHVibGljIHJvdXRlczogSVJvdXRlc0NsaWVudDtcbiAgcHVibGljIHZhbGlkYXRlOiBJVmFsaWRhdGlvbkNsaWVudDtcbiAgcHVibGljIGlwczogSUlQc0NsaWVudDtcbiAgcHVibGljIGlwX3Bvb2xzOiBJSVBQb29sc0NsaWVudDtcbiAgcHVibGljIGxpc3RzOiBJTWFpbGluZ0xpc3RzQ2xpZW50O1xuICBwdWJsaWMgc3ViYWNjb3VudHM6IElTdWJhY2NvdW50c0NsaWVudDtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBNYWlsZ3VuQ2xpZW50T3B0aW9ucywgZm9ybURhdGE6IElucHV0Rm9ybURhdGEpIHtcbiAgICBjb25zdCBjb25maWc6IFJlcXVlc3RPcHRpb25zID0geyAuLi5vcHRpb25zIH0gYXMgUmVxdWVzdE9wdGlvbnM7XG5cbiAgICBpZiAoIWNvbmZpZy51cmwpIHtcbiAgICAgIGNvbmZpZy51cmwgPSAnaHR0cHM6Ly9hcGkubWFpbGd1bi5uZXQnO1xuICAgIH1cblxuICAgIGlmICghY29uZmlnLnVzZXJuYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlciBcInVzZXJuYW1lXCIgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICBpZiAoIWNvbmZpZy5rZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGFyYW1ldGVyIFwia2V5XCIgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICAvKiogQGludGVybmFsICovXG4gICAgdGhpcy5yZXF1ZXN0ID0gbmV3IFJlcXVlc3QoY29uZmlnLCBmb3JtRGF0YSk7XG4gICAgY29uc3QgbWFpbExpc3RzTWVtYmVycyA9IG5ldyBNYWlsTGlzdHNNZW1iZXJzKHRoaXMucmVxdWVzdCk7XG4gICAgY29uc3QgZG9tYWluQ3JlZGVudGlhbHNDbGllbnQgPSBuZXcgRG9tYWluQ3JlZGVudGlhbHNDbGllbnQodGhpcy5yZXF1ZXN0KTtcbiAgICBjb25zdCBkb21haW5UZW1wbGF0ZXNDbGllbnQgPSBuZXcgRG9tYWluVGVtcGxhdGVzQ2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgY29uc3QgZG9tYWluVGFnc0NsaWVudCA9IG5ldyBEb21haW5UYWdzQ2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgY29uc3QgbXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50ID0gbmV3IE11bHRpcGxlVmFsaWRhdGlvbkNsaWVudCh0aGlzLnJlcXVlc3QpO1xuXG4gICAgdGhpcy5kb21haW5zID0gbmV3IERvbWFpbnNDbGllbnQoXG4gICAgICB0aGlzLnJlcXVlc3QsXG4gICAgICBkb21haW5DcmVkZW50aWFsc0NsaWVudCxcbiAgICAgIGRvbWFpblRlbXBsYXRlc0NsaWVudCxcbiAgICAgIGRvbWFpblRhZ3NDbGllbnRcbiAgICApO1xuICAgIHRoaXMud2ViaG9va3MgPSBuZXcgV2ViaG9va3NDbGllbnQodGhpcy5yZXF1ZXN0KTtcbiAgICB0aGlzLmV2ZW50cyA9IG5ldyBFdmVudENsaWVudCh0aGlzLnJlcXVlc3QpO1xuICAgIHRoaXMuc3RhdHMgPSBuZXcgU3RhdHNDbGllbnQodGhpcy5yZXF1ZXN0KTtcbiAgICB0aGlzLnN1cHByZXNzaW9ucyA9IG5ldyBTdXBwcmVzc2lvbkNsaWVudCh0aGlzLnJlcXVlc3QpO1xuICAgIHRoaXMubWVzc2FnZXMgPSBuZXcgTWVzc2FnZXNDbGllbnQodGhpcy5yZXF1ZXN0KTtcbiAgICB0aGlzLnJvdXRlcyA9IG5ldyBSb3V0ZXNDbGllbnQodGhpcy5yZXF1ZXN0KTtcbiAgICB0aGlzLmlwcyA9IG5ldyBJcHNDbGllbnQodGhpcy5yZXF1ZXN0KTtcbiAgICB0aGlzLmlwX3Bvb2xzID0gbmV3IElwUG9vbHNDbGllbnQodGhpcy5yZXF1ZXN0KTtcbiAgICB0aGlzLmxpc3RzID0gbmV3IE1haWxpbmdMaXN0c0NsaWVudCh0aGlzLnJlcXVlc3QsIG1haWxMaXN0c01lbWJlcnMpO1xuICAgIHRoaXMudmFsaWRhdGUgPSBuZXcgVmFsaWRhdGVDbGllbnQodGhpcy5yZXF1ZXN0LCBtdWx0aXBsZVZhbGlkYXRpb25DbGllbnQpO1xuICAgIHRoaXMuc3ViYWNjb3VudHMgPSBuZXcgU3ViYWNjb3VudHNDbGllbnQodGhpcy5yZXF1ZXN0KTtcbiAgfVxuXG4gIHNldFN1YmFjY291bnQoc3ViYWNjb3VudElkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnJlcXVlc3Q/LnNldFN1YmFjY291bnRIZWFkZXIoc3ViYWNjb3VudElkKTtcbiAgfVxuXG4gIHJlc2V0U3ViYWNjb3VudCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlcXVlc3Q/LnJlc2V0U3ViYWNjb3VudEhlYWRlcigpO1xuICB9XG59XG4iLCJpbXBvcnQgUmVxdWVzdCBmcm9tICcuLi9jb21tb24vUmVxdWVzdCc7XG5pbXBvcnQge1xuICBNYWlsTGlzdE1lbWJlcnNRdWVyeSxcbiAgQ3JlYXRlVXBkYXRlTWFpbExpc3RNZW1iZXJzLFxuICBNYWlsTGlzdE1lbWJlcixcbiAgTXVsdGlwbGVNZW1iZXJzRGF0YSxcbiAgTXVsdGlwbGVNZW1iZXJzUmVxRGF0YSxcbiAgRGVsZXRlZE1lbWJlcixcbiAgQ3JlYXRlVXBkYXRlTWFpbExpc3RNZW1iZXJzUmVxLFxuICBOZXdNdWx0aXBsZU1lbWJlcnNSZXNwb25zZSxcbiAgTWFpbExpc3RNZW1iZXJzUmVzdWx0LFxuICBNYWlsTGlzdE1lbWJlcnNSZXNwb25zZVxufSBmcm9tICcuLi8uLi9UeXBlcy9NYWlsaW5nTGlzdHMnO1xuaW1wb3J0IE5hdmlnYXRpb25UaHJ1UGFnZXMgZnJvbSAnLi4vY29tbW9uL05hdmlnYXRpb25UaHJ1UGFnZXMnO1xuaW1wb3J0IHsgSU1haWxMaXN0c01lbWJlcnMgfSBmcm9tICcuLi8uLi9JbnRlcmZhY2VzL01haWxpbmdMaXN0cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1haWxMaXN0c01lbWJlcnNcbiAgZXh0ZW5kcyBOYXZpZ2F0aW9uVGhydVBhZ2VzPE1haWxMaXN0TWVtYmVyc1Jlc3VsdD5cbiAgaW1wbGVtZW50cyBJTWFpbExpc3RzTWVtYmVycyB7XG4gIGJhc2VSb3V0ZTogc3RyaW5nO1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICBzdXBlcihyZXF1ZXN0KTtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMuYmFzZVJvdXRlID0gJy92My9saXN0cyc7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrQW5kVXBkYXRlRGF0YShkYXRhOiBDcmVhdGVVcGRhdGVNYWlsTGlzdE1lbWJlcnMpIHtcbiAgICBjb25zdCBuZXdEYXRhID0geyAuLi5kYXRhIH07XG5cbiAgICBpZiAodHlwZW9mIGRhdGEudmFycyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIG5ld0RhdGEudmFycyA9IEpTT04uc3RyaW5naWZ5KG5ld0RhdGEudmFycyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBkYXRhLnN1YnNjcmliZWQgPT09ICdib29sZWFuJykge1xuICAgICAgbmV3RGF0YS5zdWJzY3JpYmVkID0gZGF0YS5zdWJzY3JpYmVkID8gJ3llcycgOiAnbm8nO1xuICAgIH1cblxuICAgIHJldHVybiBuZXdEYXRhIGFzIENyZWF0ZVVwZGF0ZU1haWxMaXN0TWVtYmVyc1JlcTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwYXJzZUxpc3QoXG4gICAgcmVzcG9uc2U6IE1haWxMaXN0TWVtYmVyc1Jlc3BvbnNlLFxuICApOiBNYWlsTGlzdE1lbWJlcnNSZXN1bHQge1xuICAgIGNvbnN0IGRhdGEgPSB7fSBhcyBNYWlsTGlzdE1lbWJlcnNSZXN1bHQ7XG4gICAgZGF0YS5pdGVtcyA9IHJlc3BvbnNlLmJvZHkuaXRlbXM7XG5cbiAgICBkYXRhLnBhZ2VzID0gdGhpcy5wYXJzZVBhZ2VMaW5rcyhyZXNwb25zZSwgJz8nLCAnYWRkcmVzcycpO1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgYXN5bmMgbGlzdE1lbWJlcnMoXG4gICAgbWFpbExpc3RBZGRyZXNzOiBzdHJpbmcsXG4gICAgcXVlcnk/OiBNYWlsTGlzdE1lbWJlcnNRdWVyeVxuICApOiBQcm9taXNlPE1haWxMaXN0TWVtYmVyc1Jlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3RMaXN0V2l0aFBhZ2VzKGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc30vbWVtYmVycy9wYWdlc2AsIHF1ZXJ5KTtcbiAgfVxuXG4gIGdldE1lbWJlcihtYWlsTGlzdEFkZHJlc3M6IHN0cmluZywgbWFpbExpc3RNZW1iZXJBZGRyZXNzOiBzdHJpbmcpOiBQcm9taXNlPE1haWxMaXN0TWVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQoYCR7dGhpcy5iYXNlUm91dGV9LyR7bWFpbExpc3RBZGRyZXNzfS9tZW1iZXJzLyR7bWFpbExpc3RNZW1iZXJBZGRyZXNzfWApXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkubWVtYmVyIGFzIE1haWxMaXN0TWVtYmVyKTtcbiAgfVxuXG4gIGNyZWF0ZU1lbWJlcihcbiAgICBtYWlsTGlzdEFkZHJlc3M6IHN0cmluZyxcbiAgICBkYXRhOiBDcmVhdGVVcGRhdGVNYWlsTGlzdE1lbWJlcnNcbiAgKTogUHJvbWlzZTxNYWlsTGlzdE1lbWJlcj4ge1xuICAgIGNvbnN0IHJlcURhdGEgPSB0aGlzLmNoZWNrQW5kVXBkYXRlRGF0YShkYXRhKTtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQoYCR7dGhpcy5iYXNlUm91dGV9LyR7bWFpbExpc3RBZGRyZXNzfS9tZW1iZXJzYCwgcmVxRGF0YSlcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keS5tZW1iZXIgYXMgTWFpbExpc3RNZW1iZXIpO1xuICB9XG5cbiAgY3JlYXRlTWVtYmVycyhcbiAgICBtYWlsTGlzdEFkZHJlc3M6IHN0cmluZyxcbiAgICBkYXRhOiBNdWx0aXBsZU1lbWJlcnNEYXRhXG4gICk6IFByb21pc2U8TmV3TXVsdGlwbGVNZW1iZXJzUmVzcG9uc2U+IHtcbiAgICBjb25zdCBuZXdEYXRhOiBNdWx0aXBsZU1lbWJlcnNSZXFEYXRhID0ge1xuICAgICAgbWVtYmVyczogQXJyYXkuaXNBcnJheShkYXRhLm1lbWJlcnMpID8gSlNPTi5zdHJpbmdpZnkoZGF0YS5tZW1iZXJzKSA6IGRhdGEubWVtYmVycyxcbiAgICAgIHVwc2VydDogZGF0YS51cHNlcnRcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc30vbWVtYmVycy5qc29uYCwgbmV3RGF0YSlcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keSBhcyBOZXdNdWx0aXBsZU1lbWJlcnNSZXNwb25zZSk7XG4gIH1cblxuICB1cGRhdGVNZW1iZXIoXG4gICAgbWFpbExpc3RBZGRyZXNzOiBzdHJpbmcsXG4gICAgbWFpbExpc3RNZW1iZXJBZGRyZXNzOiBzdHJpbmcsXG4gICAgZGF0YTogQ3JlYXRlVXBkYXRlTWFpbExpc3RNZW1iZXJzXG4gICk6IFByb21pc2U8TWFpbExpc3RNZW1iZXI+IHtcbiAgICBjb25zdCByZXFEYXRhID0gdGhpcy5jaGVja0FuZFVwZGF0ZURhdGEoZGF0YSk7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXRXaXRoRkQoYCR7dGhpcy5iYXNlUm91dGV9LyR7bWFpbExpc3RBZGRyZXNzfS9tZW1iZXJzLyR7bWFpbExpc3RNZW1iZXJBZGRyZXNzfWAsIHJlcURhdGEpXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkubWVtYmVyIGFzIE1haWxMaXN0TWVtYmVyKTtcbiAgfVxuXG4gIGRlc3Ryb3lNZW1iZXIobWFpbExpc3RBZGRyZXNzOiBzdHJpbmcsIG1haWxMaXN0TWVtYmVyQWRkcmVzczogc3RyaW5nKSA6IFByb21pc2U8RGVsZXRlZE1lbWJlcj4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc30vbWVtYmVycy8ke21haWxMaXN0TWVtYmVyQWRkcmVzc31gKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5IGFzIERlbGV0ZWRNZW1iZXIpO1xuICB9XG59XG4iLCJpbXBvcnQgUmVxdWVzdCBmcm9tICcuLi9jb21tb24vUmVxdWVzdCc7XG5pbXBvcnQge1xuICBMaXN0c1F1ZXJ5LFxuICBDcmVhdGVVcGRhdGVMaXN0LFxuICBEZXN0cm95ZWRMaXN0LFxuICBNYWlsaW5nTGlzdCxcbiAgTWFpbGluZ0xpc3RWYWxpZGF0aW9uQXBpUmVzcG9uc2UsXG4gIFN0YXJ0VmFsaWRhdGlvblJlc3VsdCxcbiAgTWFpbGluZ0xpc3RWYWxpZGF0aW9uUmVzdWx0LFxuICBNYWlsaW5nTGlzdENhbmNlbFZhbGlkYXRpb25SZXN1bHQsXG4gIE1haWxpbmdMaXN0UmVzdWx0LFxuICBNYWlsaW5nTGlzdEFwaVJlc3BvbnNlXG59IGZyb20gJy4uLy4uL1R5cGVzL01haWxpbmdMaXN0cyc7XG5pbXBvcnQgeyBJTWFpbExpc3RzTWVtYmVycyB9IGZyb20gJy4uLy4uL0ludGVyZmFjZXMvTWFpbGluZ0xpc3RzL01haWxpbmdMaXN0TWVtYmVycyc7XG5pbXBvcnQgTmF2aWdhdGlvblRocnVQYWdlcyBmcm9tICcuLi9jb21tb24vTmF2aWdhdGlvblRocnVQYWdlcyc7XG5pbXBvcnQgeyBJTWFpbGluZ0xpc3RzQ2xpZW50IH0gZnJvbSAnLi4vLi4vSW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1haWxpbmdMaXN0c0NsaWVudFxuICBleHRlbmRzIE5hdmlnYXRpb25UaHJ1UGFnZXM8TWFpbGluZ0xpc3RSZXN1bHQ+XG4gIGltcGxlbWVudHMgSU1haWxpbmdMaXN0c0NsaWVudCB7XG4gIGJhc2VSb3V0ZTogc3RyaW5nO1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuICBwdWJsaWMgbWVtYmVyczogSU1haWxMaXN0c01lbWJlcnM7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCwgbWVtYmVyczogSU1haWxMaXN0c01lbWJlcnMpIHtcbiAgICBzdXBlcihyZXF1ZXN0KTtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMuYmFzZVJvdXRlID0gJy92My9saXN0cyc7XG4gICAgdGhpcy5tZW1iZXJzID0gbWVtYmVycztcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VWYWxpZGF0aW9uUmVzdWx0KFxuICAgIHN0YXR1czogbnVtYmVyLFxuICAgIGRhdGE6IE1haWxpbmdMaXN0VmFsaWRhdGlvbkFwaVJlc3BvbnNlXG4gICk6IE1haWxpbmdMaXN0VmFsaWRhdGlvblJlc3VsdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1cyxcbiAgICAgIHZhbGlkYXRpb25SZXN1bHQ6IHtcbiAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgY3JlYXRlZF9hdDogbmV3IERhdGUoZGF0YS5jcmVhdGVkX2F0ICogMTAwMCkgLy8gYWRkIG1pbGxpc2Vjb25kIHRvIFVuaXggdGltZXN0YW1wXG4gICAgICB9XG4gICAgfSBhcyBNYWlsaW5nTGlzdFZhbGlkYXRpb25SZXN1bHQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgcGFyc2VMaXN0KHJlc3BvbnNlOiBNYWlsaW5nTGlzdEFwaVJlc3BvbnNlKTogTWFpbGluZ0xpc3RSZXN1bHQge1xuICAgIGNvbnN0IGRhdGEgPSB7fSBhcyBNYWlsaW5nTGlzdFJlc3VsdDtcblxuICAgIGRhdGEuaXRlbXMgPSByZXNwb25zZS5ib2R5Lml0ZW1zO1xuXG4gICAgZGF0YS5wYWdlcyA9IHRoaXMucGFyc2VQYWdlTGlua3MocmVzcG9uc2UsICc/JywgJ2FkZHJlc3MnKTtcbiAgICBkYXRhLnN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgYXN5bmMgbGlzdChxdWVyeT86IExpc3RzUXVlcnkpOiBQcm9taXNlPE1haWxpbmdMaXN0UmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdExpc3RXaXRoUGFnZXMoYCR7dGhpcy5iYXNlUm91dGV9L3BhZ2VzYCwgcXVlcnkpO1xuICB9XG5cbiAgZ2V0KG1haWxMaXN0QWRkcmVzczogc3RyaW5nKTogUHJvbWlzZTxNYWlsaW5nTGlzdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc31gKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5Lmxpc3QgYXMgTWFpbGluZ0xpc3QpO1xuICB9XG5cbiAgY3JlYXRlKGRhdGE6IENyZWF0ZVVwZGF0ZUxpc3QpOiBQcm9taXNlPE1haWxpbmdMaXN0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKHRoaXMuYmFzZVJvdXRlLCBkYXRhKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5Lmxpc3QgYXMgTWFpbGluZ0xpc3QpO1xuICB9XG5cbiAgdXBkYXRlKG1haWxMaXN0QWRkcmVzczogc3RyaW5nLCBkYXRhOiBDcmVhdGVVcGRhdGVMaXN0KTogUHJvbWlzZTxNYWlsaW5nTGlzdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0V2l0aEZEKGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc31gLCBkYXRhKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5Lmxpc3QgYXMgTWFpbGluZ0xpc3QpO1xuICB9XG5cbiAgZGVzdHJveShtYWlsTGlzdEFkZHJlc3M6IHN0cmluZyk6IFByb21pc2U8RGVzdHJveWVkTGlzdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc31gKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5IGFzIERlc3Ryb3llZExpc3QpO1xuICB9XG5cbiAgdmFsaWRhdGUobWFpbExpc3RBZGRyZXNzOiBzdHJpbmcpOiBQcm9taXNlPFN0YXJ0VmFsaWRhdGlvblJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdChgJHt0aGlzLmJhc2VSb3V0ZX0vJHttYWlsTGlzdEFkZHJlc3N9L3ZhbGlkYXRlYCwge30pXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+ICh7XG4gICAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICAuLi5yZXNwb25zZS5ib2R5XG4gICAgICB9KSBhcyBTdGFydFZhbGlkYXRpb25SZXN1bHQpO1xuICB9XG5cbiAgdmFsaWRhdGlvblJlc3VsdChtYWlsTGlzdEFkZHJlc3M6IHN0cmluZyk6IFByb21pc2U8TWFpbGluZ0xpc3RWYWxpZGF0aW9uUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQoYCR7dGhpcy5iYXNlUm91dGV9LyR7bWFpbExpc3RBZGRyZXNzfS92YWxpZGF0ZWApXG4gICAgICAudGhlbihcbiAgICAgICAgKHJlc3BvbnNlKSA9PiB0aGlzLnBhcnNlVmFsaWRhdGlvblJlc3VsdChcbiAgICAgICAgICByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgICAgIHJlc3BvbnNlLmJvZHkgYXMgTWFpbGluZ0xpc3RWYWxpZGF0aW9uQXBpUmVzcG9uc2VcbiAgICAgICAgKVxuICAgICAgKTtcbiAgfVxuXG4gIGNhbmNlbFZhbGlkYXRpb24obWFpbExpc3RBZGRyZXNzOiBzdHJpbmcpOiBQcm9taXNlPE1haWxpbmdMaXN0Q2FuY2VsVmFsaWRhdGlvblJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc30vdmFsaWRhdGVgKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiAoe1xuICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgbWVzc2FnZTogcmVzcG9uc2UuYm9keS5tZXNzYWdlXG4gICAgICB9IGFzIE1haWxpbmdMaXN0Q2FuY2VsVmFsaWRhdGlvblJlc3VsdCkpO1xuICB9XG59XG4iLCJpbXBvcnQgQVBJRXJyb3IgZnJvbSAnLi9jb21tb24vRXJyb3InO1xuaW1wb3J0IHtcbiAgTWFpbGd1bk1lc3NhZ2VEYXRhLFxuICBNZXNzYWdlc1NlbmRBUElSZXNwb25zZSxcbiAgTWVzc2FnZXNTZW5kUmVzdWx0XG59IGZyb20gJy4uL1R5cGVzJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vY29tbW9uL1JlcXVlc3QnO1xuaW1wb3J0IHsgSU1lc3NhZ2VzQ2xpZW50IH0gZnJvbSAnLi4vSW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1lc3NhZ2VzQ2xpZW50IGltcGxlbWVudHMgSU1lc3NhZ2VzQ2xpZW50IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0KSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgfVxuXG4gIHByaXZhdGUgcHJlcGFyZUJvb2xlYW5WYWx1ZXMoZGF0YTogTWFpbGd1bk1lc3NhZ2VEYXRhKTogTWFpbGd1bk1lc3NhZ2VEYXRhIHtcbiAgICBjb25zdCB5ZXNOb1Byb3BlcnRpZXMgPSBuZXcgU2V0KFtcbiAgICAgICdvOnRlc3Rtb2RlJyxcbiAgICAgICd0OnRleHQnLFxuICAgICAgJ286ZGtpbScsXG4gICAgICAnbzp0cmFja2luZycsXG4gICAgICAnbzp0cmFja2luZy1jbGlja3MnLFxuICAgICAgJ286dHJhY2tpbmctb3BlbnMnLFxuICAgICAgJ286cmVxdWlyZS10bHMnLFxuICAgICAgJ286c2tpcC12ZXJpZmljYXRpb24nXG4gICAgXSk7XG5cbiAgICBpZiAoIWRhdGEgfHwgT2JqZWN0LmtleXMoZGF0YSkubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBBUElFcnJvci5nZXRVc2VyRGF0YUVycm9yKCdNZXNzYWdlIGRhdGEgb2JqZWN0IGNhbiBub3QgYmUgZW1wdHknLCAnTWVzc2FnZSBkYXRhIG9iamVjdCBjYW4gbm90IGJlIGVtcHR5Jyk7XG4gICAgfVxuICAgIHJldHVybiBPYmplY3Qua2V5cyhkYXRhKS5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgICBpZiAoeWVzTm9Qcm9wZXJ0aWVzLmhhcyhrZXkpICYmIHR5cGVvZiBkYXRhW2tleV0gPT09ICdib29sZWFuJykge1xuICAgICAgICBhY2Nba2V5XSA9IGRhdGFba2V5XSA/ICd5ZXMnIDogJ25vJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFjY1trZXldID0gZGF0YVtrZXldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSBhcyBNYWlsZ3VuTWVzc2FnZURhdGEpO1xuICB9XG5cbiAgX3BhcnNlUmVzcG9uc2UocmVzcG9uc2U6IE1lc3NhZ2VzU2VuZEFQSVJlc3BvbnNlKTogTWVzc2FnZXNTZW5kUmVzdWx0IHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAuLi5yZXNwb25zZS5ib2R5XG4gICAgfTtcbiAgfVxuXG4gIGNyZWF0ZShkb21haW46IHN0cmluZywgZGF0YTogTWFpbGd1bk1lc3NhZ2VEYXRhKTogUHJvbWlzZTxNZXNzYWdlc1NlbmRSZXN1bHQ+IHtcbiAgICBpZiAoZGF0YS5tZXNzYWdlKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQoYC92My8ke2RvbWFpbn0vbWVzc2FnZXMubWltZWAsIGRhdGEpXG4gICAgICAgIC50aGVuKHRoaXMuX3BhcnNlUmVzcG9uc2UpO1xuICAgIH1cblxuICAgIGNvbnN0IG1vZGlmaWVkRGF0YSA9IHRoaXMucHJlcGFyZUJvb2xlYW5WYWx1ZXMoZGF0YSk7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKGAvdjMvJHtkb21haW59L21lc3NhZ2VzYCwgbW9kaWZpZWREYXRhKVxuICAgICAgLnRoZW4odGhpcy5fcGFyc2VSZXNwb25zZSk7XG4gIH1cbn1cbiIsImltcG9ydCB7IElSb3V0ZXNDbGllbnQgfSBmcm9tICcuLi9JbnRlcmZhY2VzJztcbmltcG9ydCB7XG4gIENyZWF0ZVVwZGF0ZVJvdXRlRGF0YSwgRGVzdHJveVJvdXRlUmVzcG9uc2UsIFJvdXRlLCBSb3V0ZXNMaXN0UXVlcnksIFVwZGF0ZVJvdXRlUmVzcG9uc2Vcbn0gZnJvbSAnLi4vVHlwZXMvUm91dGVzJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vY29tbW9uL1JlcXVlc3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSb3V0ZXNDbGllbnQgaW1wbGVtZW50cyBJUm91dGVzQ2xpZW50IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0KSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgfVxuXG4gIGxpc3QocXVlcnk6IFJvdXRlc0xpc3RRdWVyeSk6IFByb21pc2U8Um91dGVbXT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KCcvdjMvcm91dGVzJywgcXVlcnkpXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkuaXRlbXMpO1xuICB9XG5cbiAgZ2V0KGlkOiBzdHJpbmcpOiBQcm9taXNlPFJvdXRlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQoYC92My9yb3V0ZXMvJHtpZH1gKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5LnJvdXRlKTtcbiAgfVxuXG4gIGNyZWF0ZShkYXRhOiBDcmVhdGVVcGRhdGVSb3V0ZURhdGEpOiBQcm9taXNlPFJvdXRlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKCcvdjMvcm91dGVzJywgZGF0YSlcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keS5yb3V0ZSk7XG4gIH1cblxuICB1cGRhdGUoaWQ6IHN0cmluZywgZGF0YTogQ3JlYXRlVXBkYXRlUm91dGVEYXRhKTogUHJvbWlzZTxVcGRhdGVSb3V0ZVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXRXaXRoRkQoYC92My9yb3V0ZXMvJHtpZH1gLCBkYXRhKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5KTtcbiAgfVxuXG4gIGRlc3Ryb3koaWQ6IHN0cmluZyk6IFByb21pc2U8RGVzdHJveVJvdXRlUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZShgL3YzL3JvdXRlcy8ke2lkfWApXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkpO1xuICB9XG59XG4iLCJpbXBvcnQgdXJsam9pbiBmcm9tICd1cmwtam9pbic7XG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuLi9jb21tb24vUmVxdWVzdCc7XG5pbXBvcnQgeyBTdGF0c1F1ZXJ5LCBTdGF0c09wdGlvbnMgfSBmcm9tICcuLi8uLi9UeXBlcy9TdGF0cyc7XG5pbXBvcnQgeyBJTG9nZ2VyIH0gZnJvbSAnLi4vLi4vSW50ZXJmYWNlcy9Db21tb24nO1xuaW1wb3J0IFN0YXRzQ29udGFpbmVyIGZyb20gJy4vU3RhdHNDb250YWluZXInO1xuaW1wb3J0IHsgSVN0YXRzQ2xpZW50LCBJU3RhdHNDb250YWluZXIgfSBmcm9tICcuLi8uLi9JbnRlcmZhY2VzL1N0YXRzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RhdHNDbGllbnQgaW1wbGVtZW50cyBJU3RhdHNDbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuICBwcml2YXRlIGxvZ2dlcjogSUxvZ2dlcjtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0LCBsb2dnZXI6IElMb2dnZXIgPSBjb25zb2xlKSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlcjtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydERhdGVUb1VUQyhrZXk6c3RyaW5nLCBpbnB1dERhdGU6IERhdGUpOiBBcnJheTxzdHJpbmc+IHtcbiAgICAvKlxuICAgICAgQmVjYXVzZSBcIm5ldyBEYXRlKCcyMDIyLTEyLTI1VDAwOjAwOjAwLjAwMFonKVwiIGJlY29tZXMgXCJTdW4gRGVjIDI1IDIwMjIgMDI6MDA6MDAgR01UKzAyMDBcIlxuICAgICAgKHBsdXMgMiBob3VycyBmcm9tIHRoZSB0aW1lem9uZSlcbiAgICAgIGFuZCBiZWNhdXNlIGZvciBBUEksIHdlIG5lZWQgdG8gcHJvdmlkZSB0aGUgZGF0ZSBpbiB0aGUgZXhwZWN0ZWQgZm9ybWF0XG4gICAgICBleDogJ1RodSwgMTMgT2N0IDIwMTEgMTg6MDI6MDAgKzAwMDAnLlxuICAgICAgSGVyZSB3ZSB0cnkgYXV0by1jb252ZXJ0IHRoZW0gdG8gVVRDXG4gICAgKi9cbiAgICB0aGlzLmxvZ2dlci53YXJuKGBEYXRlOlwiJHtpbnB1dERhdGV9XCIgd2FzIGF1dG8tY29udmVydGVkIHRvIFVUQyB0aW1lIHpvbmUuXG5WYWx1ZSBcIiR7aW5wdXREYXRlLnRvVVRDU3RyaW5nKCl9XCIgd2lsbCBiZSB1c2VkIGZvciByZXF1ZXN0LlxuQ29uc2lkZXIgdXNpbmcgc3RpbmcgdHlwZSBmb3IgcHJvcGVydHkgXCIke2tleX1cIiB0byBhdm9pZCBhdXRvLWNvbnZlcnRpbmdgKTtcbiAgICByZXR1cm4gW2tleSwgaW5wdXREYXRlLnRvVVRDU3RyaW5nKCldO1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVwYXJlU2VhcmNoUGFyYW1zKHF1ZXJ5OiBTdGF0c1F1ZXJ5IHwgdW5kZWZpbmVkKTogQXJyYXk8QXJyYXk8c3RyaW5nPj4ge1xuICAgIGxldCBzZWFyY2hQYXJhbXMgPSBbXSBhcyBBcnJheTxBcnJheTxzdHJpbmc+PjtcbiAgICBpZiAodHlwZW9mIHF1ZXJ5ID09PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cyhxdWVyeSkubGVuZ3RoKSB7XG4gICAgICBzZWFyY2hQYXJhbXMgPSBPYmplY3QuZW50cmllcyhxdWVyeSkucmVkdWNlKChhcnJheVdpdGhQYWlycywgY3VycmVudFBhaXIpID0+IHtcbiAgICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gY3VycmVudFBhaXI7XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCkgeyAvLyBldmVudDogWydkZWxpdmVyZWQnLCAnYWNjZXB0ZWQnXVxuICAgICAgICAgIGNvbnN0IHJlcGVhdGVkUHJvcGVydHkgPSB2YWx1ZS5tYXAoKGl0ZW0pID0+IFtrZXksIGl0ZW1dKTtcbiAgICAgICAgICByZXR1cm4gWy4uLmFycmF5V2l0aFBhaXJzLCAuLi5yZXBlYXRlZFByb3BlcnR5XTsgLy8gW1tldmVudCxkZWxpdmVyZWRdLCBbZXZlbnQsYWNjZXB0ZWRdXVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgIGFycmF5V2l0aFBhaXJzLnB1c2godGhpcy5jb252ZXJ0RGF0ZVRvVVRDKGtleSwgdmFsdWUpKTtcbiAgICAgICAgICByZXR1cm4gYXJyYXlXaXRoUGFpcnM7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGFycmF5V2l0aFBhaXJzLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhcnJheVdpdGhQYWlycztcbiAgICAgIH0sIFtdIGFzIEFycmF5PEFycmF5PHN0cmluZz4+KTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VhcmNoUGFyYW1zO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZVN0YXRzKHJlc3BvbnNlOiB7IGJvZHk6IFN0YXRzT3B0aW9ucyB9KTogSVN0YXRzQ29udGFpbmVyIHtcbiAgICByZXR1cm4gbmV3IFN0YXRzQ29udGFpbmVyKHJlc3BvbnNlLmJvZHkpO1xuICB9XG5cbiAgZ2V0RG9tYWluKGRvbWFpbjogc3RyaW5nLCBxdWVyeT86IFN0YXRzUXVlcnkpOiBQcm9taXNlPElTdGF0c0NvbnRhaW5lcj4ge1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IHRoaXMucHJlcGFyZVNlYXJjaFBhcmFtcyhxdWVyeSk7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbignL3YzJywgZG9tYWluLCAnc3RhdHMvdG90YWwnKSwgc2VhcmNoUGFyYW1zKVxuICAgICAgLnRoZW4odGhpcy5wYXJzZVN0YXRzKTtcbiAgfVxuXG4gIGdldEFjY291bnQocXVlcnk/OiBTdGF0c1F1ZXJ5KTogUHJvbWlzZTxJU3RhdHNDb250YWluZXI+IHtcbiAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSB0aGlzLnByZXBhcmVTZWFyY2hQYXJhbXMocXVlcnkpO1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KCcvdjMvc3RhdHMvdG90YWwnLCBzZWFyY2hQYXJhbXMpXG4gICAgICAudGhlbih0aGlzLnBhcnNlU3RhdHMpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBJU3RhdHNDb250YWluZXIgfSBmcm9tICcuLi8uLi9JbnRlcmZhY2VzL1N0YXRzJztcbmltcG9ydCB7IFN0YXQsIFN0YXRzT3B0aW9ucyB9IGZyb20gJy4uLy4uL1R5cGVzL1N0YXRzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RhdHNDb250YWluZXIgaW1wbGVtZW50cyBJU3RhdHNDb250YWluZXIge1xuICAgIHN0YXJ0OiBEYXRlO1xuICAgIGVuZDogRGF0ZTtcbiAgICByZXNvbHV0aW9uOiBzdHJpbmc7XG4gICAgc3RhdHM6IFN0YXRbXTtcbiAgICBjb25zdHJ1Y3RvcihkYXRhOiBTdGF0c09wdGlvbnMpIHtcbiAgICAgIHRoaXMuc3RhcnQgPSBuZXcgRGF0ZShkYXRhLnN0YXJ0KTtcbiAgICAgIHRoaXMuZW5kID0gbmV3IERhdGUoZGF0YS5lbmQpO1xuICAgICAgdGhpcy5yZXNvbHV0aW9uID0gZGF0YS5yZXNvbHV0aW9uO1xuICAgICAgdGhpcy5zdGF0cyA9IGRhdGEuc3RhdHMubWFwKGZ1bmN0aW9uIChzdGF0OiBTdGF0KSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IHsgLi4uc3RhdCB9O1xuICAgICAgICByZXMudGltZSA9IG5ldyBEYXRlKHN0YXQudGltZSk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KTtcbiAgICB9XG59XG4iLCJpbXBvcnQgUmVxdWVzdCBmcm9tICcuL2NvbW1vbi9SZXF1ZXN0JztcbmltcG9ydCB7IElTdWJhY2NvdW50c0NsaWVudCB9IGZyb20gJy4uL0ludGVyZmFjZXMnO1xuaW1wb3J0IHtcbiAgU3ViYWNjb3VudExpc3RSZXNwb25zZURhdGEsXG4gIFN1YmFjY291bnRSZXNwb25zZURhdGEsXG4gIFN1YmFjY291bnRzUXVlcnksXG59IGZyb20gJy4uL1R5cGVzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3ViYWNjb3VudHNDbGllbnQgaW1wbGVtZW50cyBJU3ViYWNjb3VudHNDbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuICBzdGF0aWMgU1VCQUNDT1VOVF9IRUFERVIgPSAnWC1NYWlsZ3VuLU9uLUJlaGFsZi1PZic7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCkge1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gIH1cblxuICBsaXN0KHF1ZXJ5PzogU3ViYWNjb3VudHNRdWVyeSk6IFByb21pc2U8U3ViYWNjb3VudExpc3RSZXNwb25zZURhdGE+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCgnL3Y1L2FjY291bnRzL3N1YmFjY291bnRzJywgcXVlcnkpXG4gICAgICAudGhlbigocmVzKSA9PiByZXMuYm9keSk7XG4gIH1cblxuICBnZXQoaWQ6c3RyaW5nKTogUHJvbWlzZTxTdWJhY2NvdW50UmVzcG9uc2VEYXRhPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQoYC92NS9hY2NvdW50cy9zdWJhY2NvdW50cy8ke2lkfWApXG4gICAgICAudGhlbigocmVzKSA9PiByZXMuYm9keSk7XG4gIH1cblxuICBjcmVhdGUobmFtZTpzdHJpbmcpOiBQcm9taXNlPFN1YmFjY291bnRSZXNwb25zZURhdGE+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQoJy92NS9hY2NvdW50cy9zdWJhY2NvdW50cycsIHsgbmFtZSB9KVxuICAgICAgLnRoZW4oKHJlcykgPT4gcmVzLmJvZHkpO1xuICB9XG5cbiAgZW5hYmxlKGlkOnN0cmluZyk6IFByb21pc2U8U3ViYWNjb3VudFJlc3BvbnNlRGF0YT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdChgL3Y1L2FjY291bnRzL3N1YmFjY291bnRzLyR7aWR9L2VuYWJsZWApXG4gICAgICAudGhlbigocmVzKSA9PiByZXMuYm9keSk7XG4gIH1cblxuICBkaXNhYmxlKGlkOnN0cmluZyk6IFByb21pc2U8U3ViYWNjb3VudFJlc3BvbnNlRGF0YT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdChgL3Y1L2FjY291bnRzL3N1YmFjY291bnRzLyR7aWR9L2Rpc2FibGVgKVxuICAgICAgLnRoZW4oKHJlcykgPT4gcmVzLmJvZHkpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBTdXBwcmVzc2lvbk1vZGVscyB9IGZyb20gJy4uLy4uL0VudW1zJztcbmltcG9ydCB7IElCb3VuY2UgfSBmcm9tICcuLi8uLi9JbnRlcmZhY2VzL1N1cHByZXNzaW9ucyc7XG5pbXBvcnQgeyBCb3VuY2VEYXRhIH0gZnJvbSAnLi4vLi4vVHlwZXMvU3VwcHJlc3Npb25zJztcbmltcG9ydCBTdXBwcmVzc2lvbiBmcm9tICcuL1N1cHByZXNzaW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm91bmNlIGV4dGVuZHMgU3VwcHJlc3Npb24gaW1wbGVtZW50cyBJQm91bmNlIHtcbiAgICBhZGRyZXNzOiBzdHJpbmc7XG4gICAgY29kZTogbnVtYmVyO1xuICAgIGVycm9yOiBzdHJpbmc7XG4gICAgLyogZXNsaW50LWRpc2FibGUgY2FtZWxjYXNlICovXG4gICAgY3JlYXRlZF9hdDogRGF0ZTtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE6IEJvdW5jZURhdGEpIHtcbiAgICAgIHN1cGVyKFN1cHByZXNzaW9uTW9kZWxzLkJPVU5DRVMpO1xuICAgICAgdGhpcy5hZGRyZXNzID0gZGF0YS5hZGRyZXNzO1xuICAgICAgdGhpcy5jb2RlID0gK2RhdGEuY29kZTtcbiAgICAgIHRoaXMuZXJyb3IgPSBkYXRhLmVycm9yO1xuICAgICAgdGhpcy5jcmVhdGVkX2F0ID0gbmV3IERhdGUoZGF0YS5jcmVhdGVkX2F0KTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBTdXBwcmVzc2lvbk1vZGVscyB9IGZyb20gJy4uLy4uL0VudW1zJztcbmltcG9ydCB7IElDb21wbGFpbnQgfSBmcm9tICcuLi8uLi9JbnRlcmZhY2VzL1N1cHByZXNzaW9ucyc7XG5pbXBvcnQgeyBDb21wbGFpbnREYXRhIH0gZnJvbSAnLi4vLi4vVHlwZXMvU3VwcHJlc3Npb25zJztcbmltcG9ydCBTdXBwcmVzc2lvbiBmcm9tICcuL1N1cHByZXNzaW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29tcGxhaW50IGV4dGVuZHMgU3VwcHJlc3Npb24gaW1wbGVtZW50cyBJQ29tcGxhaW50IHtcbiAgICBhZGRyZXNzOiBzdHJpbmc7XG4gICAgLyogZXNsaW50LWRpc2FibGUgY2FtZWxjYXNlICovXG4gICAgY3JlYXRlZF9hdDogRGF0ZTtcbiAgICBjb25zdHJ1Y3RvcihkYXRhOiBDb21wbGFpbnREYXRhKSB7XG4gICAgICBzdXBlcihTdXBwcmVzc2lvbk1vZGVscy5DT01QTEFJTlRTKTtcbiAgICAgIHRoaXMuYWRkcmVzcyA9IGRhdGEuYWRkcmVzcztcbiAgICAgIHRoaXMuY3JlYXRlZF9hdCA9IG5ldyBEYXRlKGRhdGEuY3JlYXRlZF9hdCk7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgU3VwcHJlc3Npb25Nb2RlbHMgfSBmcm9tICcuLi8uLi9FbnVtcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN1cHByZXNzaW9uIHtcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgY29uc3RydWN0b3IodHlwZTogU3VwcHJlc3Npb25Nb2RlbHMpIHtcbiAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgfVxufVxuIiwiaW1wb3J0IHVybGpvaW4gZnJvbSAndXJsLWpvaW4nO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cblxuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi4vY29tbW9uL1JlcXVlc3QnO1xuXG5pbXBvcnQgQVBJRXJyb3IgZnJvbSAnLi4vY29tbW9uL0Vycm9yJztcbmltcG9ydCBOYXZpZ2F0aW9uVGhydVBhZ2VzIGZyb20gJy4uL2NvbW1vbi9OYXZpZ2F0aW9uVGhydVBhZ2VzJztcbmltcG9ydCBCb3VuY2UgZnJvbSAnLi9Cb3VuY2UnO1xuaW1wb3J0IENvbXBsYWludCBmcm9tICcuL0NvbXBsYWludCc7XG5pbXBvcnQgVW5zdWJzY3JpYmUgZnJvbSAnLi9VbnN1YnNjcmliZSc7XG5pbXBvcnQgV2hpdGVMaXN0IGZyb20gJy4vV2hpdGVMaXN0JztcbmltcG9ydCBTdXBwcmVzc2lvbiBmcm9tICcuL1N1cHByZXNzaW9uJztcbmltcG9ydCB7XG4gIElCb3VuY2UsXG4gIElDb21wbGFpbnQsXG4gIElTdXBwcmVzc2lvbkNsaWVudCxcbiAgSVVuc3Vic2NyaWJlLFxuICBJV2hpdGVMaXN0XG59IGZyb20gJy4uLy4uL0ludGVyZmFjZXMvU3VwcHJlc3Npb25zJztcbmltcG9ydCB7XG4gIFN1cHByZXNzaW9uTGlzdCxcbiAgU3VwcHJlc3Npb25MaXN0UmVzcG9uc2UsXG4gIFN1cHByZXNzaW9uRGF0YVR5cGUsXG4gIFN1cHByZXNzaW9uQ3JlYXRpb25EYXRhLFxuICBTdXBwcmVzc2lvbkNyZWF0aW9uUmVzdWx0LFxuICBTdXBwcmVzc2lvbkNyZWF0aW9uUmVzcG9uc2UsXG4gIFN1cHByZXNzaW9uTGlzdFF1ZXJ5LFxuICBTdXBwcmVzc2lvblJlc3BvbnNlLFxuICBTdXBwcmVzc2lvbkRlc3Ryb3lSZXN1bHQsXG4gIFN1cHByZXNzaW9uRGVzdHJveVJlc3BvbnNlXG59IGZyb20gJy4uLy4uL1R5cGVzL1N1cHByZXNzaW9ucyc7XG5cbmNvbnN0IGNyZWF0ZU9wdGlvbnMgPSB7XG4gIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdXBwcmVzc2lvbkNsaWVudFxuICBleHRlbmRzIE5hdmlnYXRpb25UaHJ1UGFnZXM8U3VwcHJlc3Npb25MaXN0PlxuICBpbXBsZW1lbnRzIElTdXBwcmVzc2lvbkNsaWVudCB7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG4gIG1vZGVsczogb2JqZWN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICBzdXBlcihyZXF1ZXN0KTtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMubW9kZWxzID0ge1xuICAgICAgYm91bmNlczogQm91bmNlLFxuICAgICAgY29tcGxhaW50czogQ29tcGxhaW50LFxuICAgICAgdW5zdWJzY3JpYmVzOiBVbnN1YnNjcmliZSxcbiAgICAgIHdoaXRlbGlzdHM6IFdoaXRlTGlzdCxcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlTGlzdChcbiAgICByZXNwb25zZTogU3VwcHJlc3Npb25MaXN0UmVzcG9uc2UsXG4gICAgTW9kZWw6IHtcbiAgICAgIG5ldyhkYXRhOiBTdXBwcmVzc2lvbkRhdGFUeXBlKTpcbiAgICAgIElCb3VuY2UgfCBJQ29tcGxhaW50IHwgSVVuc3Vic2NyaWJlIHwgSVdoaXRlTGlzdFxuICAgIH1cbiAgKTogU3VwcHJlc3Npb25MaXN0IHtcbiAgICBjb25zdCBkYXRhID0ge30gYXMgU3VwcHJlc3Npb25MaXN0O1xuICAgIGRhdGEuaXRlbXMgPSByZXNwb25zZS5ib2R5Lml0ZW1zPy5tYXAoKGl0ZW0pID0+IG5ldyBNb2RlbChpdGVtKSkgfHwgW107XG5cbiAgICBkYXRhLnBhZ2VzID0gdGhpcy5wYXJzZVBhZ2VMaW5rcyhyZXNwb25zZSwgJz8nLCAnYWRkcmVzcycpO1xuICAgIGRhdGEuc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgX3BhcnNlSXRlbTxUIGV4dGVuZHMgU3VwcHJlc3Npb24+KFxuICAgIGRhdGEgOiBTdXBwcmVzc2lvbkRhdGFUeXBlLFxuICAgIE1vZGVsOiB7XG4gICAgICBuZXcoZGF0YVR5cGU6IFN1cHByZXNzaW9uRGF0YVR5cGUpOlRcbiAgICB9XG4gICk6IFQge1xuICAgIHJldHVybiBuZXcgTW9kZWwoZGF0YSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVdoaXRlTGlzdChcbiAgICBkb21haW46IHN0cmluZyxcbiAgICBkYXRhOiBTdXBwcmVzc2lvbkNyZWF0aW9uRGF0YSB8IFN1cHByZXNzaW9uQ3JlYXRpb25EYXRhW10sXG4gICAgaXNEYXRhQXJyYXk6IGJvb2xlYW5cbiAgKTogUHJvbWlzZTxTdXBwcmVzc2lvbkNyZWF0aW9uUmVzdWx0PiB7XG4gICAgaWYgKGlzRGF0YUFycmF5KSB7XG4gICAgICB0aHJvdyBBUElFcnJvci5nZXRVc2VyRGF0YUVycm9yKFxuICAgICAgICAnRGF0YSBwcm9wZXJ0eSBzaG91bGQgYmUgYW4gb2JqZWN0JyxcbiAgICAgICAgJ1doaXRlbGlzdFxcJ3MgY3JlYXRpb24gcHJvY2VzcyBkb2VzIG5vdCBzdXBwb3J0IG11bHRpcGxlIGNyZWF0aW9ucy4gRGF0YSBwcm9wZXJ0eSBzaG91bGQgYmUgYW4gb2JqZWN0J1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdFxuICAgICAgLnBvc3RXaXRoRkQodXJsam9pbigndjMnLCBkb21haW4sICd3aGl0ZWxpc3RzJyksIGRhdGEgYXMgU3VwcHJlc3Npb25DcmVhdGlvbkRhdGEpXG4gICAgICAudGhlbih0aGlzLnByZXBhcmVSZXNwb25zZSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVVuc3Vic2NyaWJlKFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIGRhdGE6IFN1cHByZXNzaW9uQ3JlYXRpb25EYXRhIHwgU3VwcHJlc3Npb25DcmVhdGlvbkRhdGFbXVxuICApOiBQcm9taXNlPFN1cHByZXNzaW9uQ3JlYXRpb25SZXN1bHQ+IHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkgeyAvLyBVc2VyIHByb3ZpZGVkIGFuIGFycmF5XG4gICAgICBjb25zdCBpc0NvbnRhaW5zVGFnID0gZGF0YS5zb21lKCh1bnN1YnNjcmliZTogU3VwcHJlc3Npb25DcmVhdGlvbkRhdGEpID0+IHVuc3Vic2NyaWJlLnRhZyk7XG4gICAgICBpZiAoaXNDb250YWluc1RhZykge1xuICAgICAgICB0aHJvdyBBUElFcnJvci5nZXRVc2VyRGF0YUVycm9yKFxuICAgICAgICAgICdUYWcgcHJvcGVydHkgc2hvdWxkIG5vdCBiZSB1c2VkIGZvciBjcmVhdGluZyBtdWx0aXBsZSB1bnN1YnNjcmliZXMuJyxcbiAgICAgICAgICAnVGFnIHByb3BlcnR5IGNhbiBiZSB1c2VkIG9ubHkgaWYgb25lIHVuc3Vic2NyaWJlIHByb3ZpZGVkIGFzIHNlY29uZCBhcmd1bWVudCBvZiBjcmVhdGUgbWV0aG9kLiBQbGVhc2UgdXNlIHRhZ3MgaW5zdGVhZC4nXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0XG4gICAgICAgIC5wb3N0KHVybGpvaW4oJ3YzJywgZG9tYWluLCAndW5zdWJzY3JpYmVzJyksIEpTT04uc3RyaW5naWZ5KGRhdGEpLCBjcmVhdGVPcHRpb25zKVxuICAgICAgICAudGhlbih0aGlzLnByZXBhcmVSZXNwb25zZSk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGE/LnRhZ3MpIHtcbiAgICAgIHRocm93IEFQSUVycm9yLmdldFVzZXJEYXRhRXJyb3IoXG4gICAgICAgICdUYWdzIHByb3BlcnR5IHNob3VsZCBub3QgYmUgdXNlZCBmb3IgY3JlYXRpbmcgb25lIHVuc3Vic2NyaWJlLicsXG4gICAgICAgICdUYWdzIHByb3BlcnR5IGNhbiBiZSB1c2VkIGlmIHlvdSBwcm92aWRlcyBhbiBhcnJheSBvZiB1bnN1YnNjcmliZXMgYXMgc2Vjb25kIGFyZ3VtZW50IG9mIGNyZWF0ZSBtZXRob2QuIFBsZWFzZSB1c2UgdGFnIGluc3RlYWQnXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhLnRhZykpIHtcbiAgICAgIHRocm93IEFQSUVycm9yLmdldFVzZXJEYXRhRXJyb3IoXG4gICAgICAgICdUYWcgcHJvcGVydHkgY2FuIG5vdCBiZSBhbiBhcnJheScsXG4gICAgICAgICdQbGVhc2UgdXNlIGFycmF5IG9mIHVuc3Vic2NyaWJlcyBhcyBzZWNvbmQgYXJndW1lbnQgb2YgY3JlYXRlIG1ldGhvZCB0byBiZSBhYmxlIHRvIHByb3ZpZGUgZmV3IHRhZ3MnXG4gICAgICApO1xuICAgIH1cbiAgICAvKiBXZSBuZWVkIEZvcm0gRGF0YSBmb3IgdW5zdWJzY3JpYmVzIGlmIHdlIHdhbnQgdG8gc3VwcG9ydCB0aGUgXCJ0YWdcIiBwcm9wZXJ0eSAqL1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3RcbiAgICAgIC5wb3N0V2l0aEZEKHVybGpvaW4oJ3YzJywgZG9tYWluLCAndW5zdWJzY3JpYmVzJyksIGRhdGEpXG4gICAgICAudGhlbih0aGlzLnByZXBhcmVSZXNwb25zZSk7XG4gIH1cblxuICBwcml2YXRlIGdldE1vZGVsKHR5cGU6IHN0cmluZykge1xuICAgIGlmICh0eXBlIGluIHRoaXMubW9kZWxzKSB7XG4gICAgICByZXR1cm4gdGhpcy5tb2RlbHNbdHlwZSBhcyBrZXlvZiB0eXBlb2YgdGhpcy5tb2RlbHNdO1xuICAgIH1cbiAgICB0aHJvdyBBUElFcnJvci5nZXRVc2VyRGF0YUVycm9yKFxuICAgICAgJ1Vua25vd24gdHlwZSB2YWx1ZScsXG4gICAgICAnVHlwZSBtYXkgYmUgb25seSBvbmUgb2YgW2JvdW5jZXMsIGNvbXBsYWludHMsIHVuc3Vic2NyaWJlcywgd2hpdGVsaXN0c10nXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJlcGFyZVJlc3BvbnNlKHJlc3BvbnNlOiBTdXBwcmVzc2lvbkNyZWF0aW9uUmVzcG9uc2UpOiBTdXBwcmVzc2lvbkNyZWF0aW9uUmVzdWx0IHtcbiAgICByZXR1cm4ge1xuICAgICAgbWVzc2FnZTogcmVzcG9uc2UuYm9keS5tZXNzYWdlLFxuICAgICAgdHlwZTogcmVzcG9uc2UuYm9keS50eXBlIHx8ICcnLFxuICAgICAgdmFsdWU6IHJlc3BvbnNlLmJvZHkudmFsdWUgfHwgJycsXG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1c1xuICAgIH07XG4gIH1cblxuICBhc3luYyBsaXN0KFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIHR5cGU6IHN0cmluZyxcbiAgICBxdWVyeT86IFN1cHByZXNzaW9uTGlzdFF1ZXJ5XG4gICk6IFByb21pc2U8U3VwcHJlc3Npb25MaXN0PiB7XG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLmdldE1vZGVsKHR5cGUpO1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3RMaXN0V2l0aFBhZ2VzKHVybGpvaW4oJ3YzJywgZG9tYWluLCB0eXBlKSwgcXVlcnksIG1vZGVsKTtcbiAgfVxuXG4gIGdldChcbiAgICBkb21haW46IHN0cmluZyxcbiAgICB0eXBlOiBzdHJpbmcsXG4gICAgYWRkcmVzczogc3RyaW5nXG4gICk6IFByb21pc2U8SUJvdW5jZSB8IElDb21wbGFpbnQgfCBJVW5zdWJzY3JpYmUgfCBJV2hpdGVMaXN0PiB7XG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLmdldE1vZGVsKHR5cGUpO1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3RcbiAgICAgIC5nZXQodXJsam9pbigndjMnLCBkb21haW4sIHR5cGUsIGVuY29kZVVSSUNvbXBvbmVudChhZGRyZXNzKSkpXG4gICAgICAudGhlbigocmVzcG9uc2U6IFN1cHByZXNzaW9uUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlSXRlbTx0eXBlb2YgbW9kZWw+KHJlc3BvbnNlLmJvZHksIG1vZGVsKSk7XG4gIH1cblxuICBjcmVhdGUoXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgdHlwZTogc3RyaW5nLFxuICAgIGRhdGE6IFN1cHByZXNzaW9uQ3JlYXRpb25EYXRhIHwgU3VwcHJlc3Npb25DcmVhdGlvbkRhdGFbXVxuICApOiBQcm9taXNlPFN1cHByZXNzaW9uQ3JlYXRpb25SZXN1bHQ+IHtcbiAgICB0aGlzLmdldE1vZGVsKHR5cGUpO1xuICAgIC8vIHN1cHBvcnRzIGFkZGluZyBtdWx0aXBsZSBzdXBwcmVzc2lvbnMgYnkgZGVmYXVsdFxuICAgIGxldCBwb3N0RGF0YTtcbiAgICBjb25zdCBpc0RhdGFBcnJheSA9IEFycmF5LmlzQXJyYXkoZGF0YSk7XG5cbiAgICBpZiAodHlwZSA9PT0gJ3doaXRlbGlzdHMnKSB7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVXaGl0ZUxpc3QoZG9tYWluLCBkYXRhLCBpc0RhdGFBcnJheSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09ICd1bnN1YnNjcmliZXMnKSB7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVVbnN1YnNjcmliZShkb21haW4sIGRhdGEpO1xuICAgIH1cblxuICAgIGlmICghaXNEYXRhQXJyYXkpIHtcbiAgICAgIHBvc3REYXRhID0gW2RhdGFdO1xuICAgIH0gZWxzZSB7XG4gICAgICBwb3N0RGF0YSA9IFsuLi5kYXRhXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0XG4gICAgICAucG9zdCh1cmxqb2luKCd2MycsIGRvbWFpbiwgdHlwZSksIEpTT04uc3RyaW5naWZ5KHBvc3REYXRhKSwgY3JlYXRlT3B0aW9ucylcbiAgICAgIC50aGVuKHRoaXMucHJlcGFyZVJlc3BvbnNlKTtcbiAgfVxuXG4gIGRlc3Ryb3koXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgdHlwZTogc3RyaW5nLFxuICAgIGFkZHJlc3M6IHN0cmluZ1xuICApOiBQcm9taXNlPFN1cHByZXNzaW9uRGVzdHJveVJlc3VsdD4ge1xuICAgIHRoaXMuZ2V0TW9kZWwodHlwZSk7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdFxuICAgICAgLmRlbGV0ZSh1cmxqb2luKCd2MycsIGRvbWFpbiwgdHlwZSwgZW5jb2RlVVJJQ29tcG9uZW50KGFkZHJlc3MpKSlcbiAgICAgIC50aGVuKChyZXNwb25zZTogU3VwcHJlc3Npb25EZXN0cm95UmVzcG9uc2UpID0+ICh7XG4gICAgICAgIG1lc3NhZ2U6IHJlc3BvbnNlLmJvZHkubWVzc2FnZSxcbiAgICAgICAgdmFsdWU6IHJlc3BvbnNlLmJvZHkudmFsdWUgfHwgJycsXG4gICAgICAgIGFkZHJlc3M6IHJlc3BvbnNlLmJvZHkuYWRkcmVzcyB8fCAnJyxcbiAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXNcbiAgICAgIH0pKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFN1cHByZXNzaW9uQ2xpZW50O1xuIiwiaW1wb3J0IHsgU3VwcHJlc3Npb25Nb2RlbHMgfSBmcm9tICcuLi8uLi9FbnVtcyc7XG5pbXBvcnQgeyBJVW5zdWJzY3JpYmUgfSBmcm9tICcuLi8uLi9JbnRlcmZhY2VzL1N1cHByZXNzaW9ucyc7XG5pbXBvcnQgeyBVbnN1YnNjcmliZURhdGEgfSBmcm9tICcuLi8uLi9UeXBlcy9TdXBwcmVzc2lvbnMnO1xuXG5pbXBvcnQgU3VwcHJlc3Npb24gZnJvbSAnLi9TdXBwcmVzc2lvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFVuc3Vic2NyaWJlIGV4dGVuZHMgU3VwcHJlc3Npb24gaW1wbGVtZW50cyBJVW5zdWJzY3JpYmUge1xuICAgIGFkZHJlc3M6IHN0cmluZztcbiAgICB0YWdzOiBzdHJpbmdbXTtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cbiAgICBjcmVhdGVkX2F0OiBEYXRlO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YTogVW5zdWJzY3JpYmVEYXRhKSB7XG4gICAgICBzdXBlcihTdXBwcmVzc2lvbk1vZGVscy5VTlNVQlNDUklCRVMpO1xuICAgICAgdGhpcy5hZGRyZXNzID0gZGF0YS5hZGRyZXNzO1xuICAgICAgdGhpcy50YWdzID0gZGF0YS50YWdzO1xuICAgICAgdGhpcy5jcmVhdGVkX2F0ID0gbmV3IERhdGUoZGF0YS5jcmVhdGVkX2F0KTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBTdXBwcmVzc2lvbk1vZGVscyB9IGZyb20gJy4uLy4uL0VudW1zJztcbmltcG9ydCB7IElXaGl0ZUxpc3QgfSBmcm9tICcuLi8uLi9JbnRlcmZhY2VzL1N1cHByZXNzaW9ucyc7XG5pbXBvcnQgeyBXaGl0ZUxpc3REYXRhIH0gZnJvbSAnLi4vLi4vVHlwZXMvU3VwcHJlc3Npb25zJztcbmltcG9ydCBTdXBwcmVzc2lvbiBmcm9tICcuL1N1cHByZXNzaW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2hpdGVMaXN0IGV4dGVuZHMgU3VwcHJlc3Npb24gaW1wbGVtZW50cyBJV2hpdGVMaXN0IHtcbiAgICB2YWx1ZTogc3RyaW5nO1xuICAgIHJlYXNvbjogc3RyaW5nO1xuICAgIGNyZWF0ZWRBdDogRGF0ZTtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE6IFdoaXRlTGlzdERhdGEpIHtcbiAgICAgIHN1cGVyKFN1cHByZXNzaW9uTW9kZWxzLldISVRFTElTVFMpO1xuICAgICAgdGhpcy52YWx1ZSA9IGRhdGEudmFsdWU7XG4gICAgICB0aGlzLnJlYXNvbiA9IGRhdGEucmVhc29uO1xuICAgICAgdGhpcy5jcmVhdGVkQXQgPSBuZXcgRGF0ZShkYXRhLmNyZWF0ZWRBdCk7XG4gICAgfVxufVxuIiwiaW1wb3J0IE5hdmlnYXRpb25UaHJ1UGFnZXMgZnJvbSAnLi4vY29tbW9uL05hdmlnYXRpb25UaHJ1UGFnZXMnO1xuaW1wb3J0IHsgQVBJUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9UeXBlcy9Db21tb24vQXBpUmVzcG9uc2UnO1xuXG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuLi9jb21tb24vUmVxdWVzdCc7XG5pbXBvcnQgeyBJTXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50IH0gZnJvbSAnLi4vLi4vSW50ZXJmYWNlcy9WYWxpZGF0aW9ucyc7XG5pbXBvcnQge1xuICBNdWx0aXBsZVZhbGlkYXRpb25Kb2JSZXN1bHQsXG4gIE11bHRpcGxlVmFsaWRhdGlvbkpvYkRhdGEsXG4gIE11bHRpcGxlVmFsaWRhdGlvbkpvYnNMaXN0UmVzdWx0LFxuICBNdWx0aXBsZVZhbGlkYXRpb25Kb2JzTGlzdFJlc3BvbnNlLFxuICBNdWx0aXBsZVZhbGlkYXRpb25Kb2JzTGlzdFF1ZXJ5LFxuICBNdWx0aXBsZVZhbGlkYXRpb25DcmVhdGlvbkRhdGEsXG4gIENyZWF0ZWRNdWx0aXBsZVZhbGlkYXRpb25Kb2IsXG4gIE11bHRpcGxlVmFsaWRhdGlvbkNyZWF0aW9uRGF0YVVwZGF0ZWQsXG4gIENhbmNlbGVkTXVsdGlwbGVWYWxpZGF0aW9uSm9iXG59IGZyb20gJy4uLy4uL1R5cGVzL1ZhbGlkYXRpb25zL011bHRpcGxlVmFsaWRhdGlvbic7XG5pbXBvcnQgQXR0YWNobWVudHNIYW5kbGVyIGZyb20gJy4uL2NvbW1vbi9BdHRhY2htZW50c0hhbmRsZXInO1xuaW1wb3J0IEFQSUVycm9yIGZyb20gJy4uL2NvbW1vbi9FcnJvcic7XG5cbmV4cG9ydCBjbGFzcyBNdWx0aXBsZVZhbGlkYXRpb25Kb2IgaW1wbGVtZW50cyBNdWx0aXBsZVZhbGlkYXRpb25Kb2JSZXN1bHQge1xuICBjcmVhdGVkQXQ6IERhdGU7XG4gIGlkOiBzdHJpbmc7XG4gIHF1YW50aXR5OiBudW1iZXJcbiAgcmVjb3Jkc1Byb2Nlc3NlZDogbnVtYmVyIHwgbnVsbDtcbiAgc3RhdHVzOiBzdHJpbmc7XG4gIGRvd25sb2FkVXJsPzoge1xuICAgIGNzdjogc3RyaW5nO1xuICAgIGpzb246IHN0cmluZztcbiAgfTtcblxuICByZXNwb25zZVN0YXR1c0NvZGU6IG51bWJlcjtcbiAgc3VtbWFyeT86IHtcbiAgICAgIHJlc3VsdDoge1xuICAgICAgICAgIGNhdGNoQWxsOiBudW1iZXI7XG4gICAgICAgICAgZGVsaXZlcmFibGU6IG51bWJlcjtcbiAgICAgICAgICBkb05vdFNlbmQ6IG51bWJlcjtcbiAgICAgICAgICB1bmRlbGl2ZXJhYmxlOiBudW1iZXI7XG4gICAgICAgICAgdW5rbm93bjogbnVtYmVyO1xuICAgICAgfTtcbiAgICAgIHJpc2s6IHtcbiAgICAgICAgICBoaWdoOiBudW1iZXI7XG4gICAgICAgICAgbG93OiBudW1iZXI7XG4gICAgICAgICAgbWVkaXVtOiBudW1iZXI7XG4gICAgICAgICAgdW5rbm93bjogbnVtYmVyO1xuICAgICAgfVxuICB9XG5cbiAgY29uc3RydWN0b3IoZGF0YTogTXVsdGlwbGVWYWxpZGF0aW9uSm9iRGF0YSwgcmVzcG9uc2VTdGF0dXNDb2RlOiBudW1iZXIpIHtcbiAgICB0aGlzLmNyZWF0ZWRBdCA9IG5ldyBEYXRlKGRhdGEuY3JlYXRlZF9hdCk7XG4gICAgdGhpcy5pZCA9IGRhdGEuaWQ7XG4gICAgdGhpcy5xdWFudGl0eSA9IGRhdGEucXVhbnRpdHk7XG4gICAgdGhpcy5yZWNvcmRzUHJvY2Vzc2VkID0gZGF0YS5yZWNvcmRzX3Byb2Nlc3NlZDtcbiAgICB0aGlzLnN0YXR1cyA9IGRhdGEuc3RhdHVzO1xuICAgIHRoaXMucmVzcG9uc2VTdGF0dXNDb2RlID0gcmVzcG9uc2VTdGF0dXNDb2RlO1xuICAgIGlmIChkYXRhLmRvd25sb2FkX3VybCkge1xuICAgICAgdGhpcy5kb3dubG9hZFVybCA9IHtcbiAgICAgICAgY3N2OiBkYXRhLmRvd25sb2FkX3VybD8uY3N2LFxuICAgICAgICBqc29uOiBkYXRhLmRvd25sb2FkX3VybD8uanNvblxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKGRhdGEuc3VtbWFyeSkge1xuICAgICAgdGhpcy5zdW1tYXJ5ID0ge1xuICAgICAgICByZXN1bHQ6IHtcbiAgICAgICAgICBjYXRjaEFsbDogZGF0YS5zdW1tYXJ5LnJlc3VsdC5jYXRjaF9hbGwsXG4gICAgICAgICAgZGVsaXZlcmFibGU6IGRhdGEuc3VtbWFyeS5yZXN1bHQuZGVsaXZlcmFibGUsXG4gICAgICAgICAgZG9Ob3RTZW5kOiBkYXRhLnN1bW1hcnkucmVzdWx0LmRvX25vdF9zZW5kLFxuICAgICAgICAgIHVuZGVsaXZlcmFibGU6IGRhdGEuc3VtbWFyeS5yZXN1bHQudW5kZWxpdmVyYWJsZSxcbiAgICAgICAgICB1bmtub3duOiBkYXRhLnN1bW1hcnkucmVzdWx0LnVua25vd25cbiAgICAgICAgfSxcbiAgICAgICAgcmlzazoge1xuICAgICAgICAgIGhpZ2g6IGRhdGEuc3VtbWFyeS5yaXNrLmhpZ2gsXG4gICAgICAgICAgbG93OiBkYXRhLnN1bW1hcnkucmlzay5sb3csXG4gICAgICAgICAgbWVkaXVtOiBkYXRhLnN1bW1hcnkucmlzay5tZWRpdW0sXG4gICAgICAgICAgdW5rbm93bjogZGF0YS5zdW1tYXJ5LnJpc2sudW5rbm93blxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNdWx0aXBsZVZhbGlkYXRpb25DbGllbnRcbiAgZXh0ZW5kcyBOYXZpZ2F0aW9uVGhydVBhZ2VzPE11bHRpcGxlVmFsaWRhdGlvbkpvYnNMaXN0UmVzdWx0PlxuICBpbXBsZW1lbnRzIElNdWx0aXBsZVZhbGlkYXRpb25DbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuICBwcml2YXRlIGF0dGFjaG1lbnRzSGFuZGxlcjogQXR0YWNobWVudHNIYW5kbGVyO1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgdGhpcy5hdHRhY2htZW50c0hhbmRsZXIgPSBuZXcgQXR0YWNobWVudHNIYW5kbGVyKCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVJlc3BvbnNlPFQ+KHJlc3BvbnNlOiBBUElSZXNwb25zZSk6IFQge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIC4uLnJlc3BvbnNlPy5ib2R5XG4gICAgfSBhcyBUO1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlTGlzdChyZXNwb25zZTogTXVsdGlwbGVWYWxpZGF0aW9uSm9ic0xpc3RSZXNwb25zZSlcbiAgICA6IE11bHRpcGxlVmFsaWRhdGlvbkpvYnNMaXN0UmVzdWx0IHtcbiAgICBjb25zdCBkYXRhID0ge30gYXMgTXVsdGlwbGVWYWxpZGF0aW9uSm9ic0xpc3RSZXN1bHQ7XG5cbiAgICBkYXRhLmpvYnMgPSByZXNwb25zZS5ib2R5LmpvYnMubWFwKChqb2IpID0+IG5ldyBNdWx0aXBsZVZhbGlkYXRpb25Kb2Ioam9iLCByZXNwb25zZS5zdGF0dXMpKTtcblxuICAgIGRhdGEucGFnZXMgPSB0aGlzLnBhcnNlUGFnZUxpbmtzKHJlc3BvbnNlLCAnPycsICdwaXZvdCcpO1xuICAgIGRhdGEudG90YWwgPSByZXNwb25zZS5ib2R5LnRvdGFsO1xuICAgIGRhdGEuc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBhc3luYyBsaXN0KHF1ZXJ5PzogTXVsdGlwbGVWYWxpZGF0aW9uSm9ic0xpc3RRdWVyeSk6IFByb21pc2U8TXVsdGlwbGVWYWxpZGF0aW9uSm9ic0xpc3RSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0TGlzdFdpdGhQYWdlcygnL3Y0L2FkZHJlc3MvdmFsaWRhdGUvYnVsaycsIHF1ZXJ5KTtcbiAgfVxuXG4gIGFzeW5jIGdldChsaXN0SWQ6IHN0cmluZyk6IFByb21pc2U8TXVsdGlwbGVWYWxpZGF0aW9uSm9iPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QuZ2V0KGAvdjQvYWRkcmVzcy92YWxpZGF0ZS9idWxrLyR7bGlzdElkfWApO1xuICAgIHJldHVybiBuZXcgTXVsdGlwbGVWYWxpZGF0aW9uSm9iKHJlc3BvbnNlLmJvZHksIHJlc3BvbnNlLnN0YXR1cyk7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRUb0V4cGVjdGVkU2hhcGUoZGF0YTogTXVsdGlwbGVWYWxpZGF0aW9uQ3JlYXRpb25EYXRhKVxuICAgIDogTXVsdGlwbGVWYWxpZGF0aW9uQ3JlYXRpb25EYXRhVXBkYXRlZCB7XG4gICAgbGV0IG11bHRpcGxlVmFsaWRhdGlvbkRhdGE6IE11bHRpcGxlVmFsaWRhdGlvbkNyZWF0aW9uRGF0YVVwZGF0ZWQ7XG4gICAgaWYgKHRoaXMuYXR0YWNobWVudHNIYW5kbGVyLmlzQnVmZmVyKGRhdGEuZmlsZSkpIHtcbiAgICAgIG11bHRpcGxlVmFsaWRhdGlvbkRhdGEgPSB7IG11bHRpcGxlVmFsaWRhdGlvbkZpbGU6IGRhdGEuZmlsZSB9O1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRhdGEuZmlsZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG11bHRpcGxlVmFsaWRhdGlvbkRhdGEgPSB7IG11bHRpcGxlVmFsaWRhdGlvbkZpbGU6IHsgZGF0YTogZGF0YS5maWxlIH0gfTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuYXR0YWNobWVudHNIYW5kbGVyLmlzU3RyZWFtKGRhdGEuZmlsZSkpIHtcbiAgICAgIG11bHRpcGxlVmFsaWRhdGlvbkRhdGEgPSB7IG11bHRpcGxlVmFsaWRhdGlvbkZpbGU6IGRhdGEuZmlsZSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBtdWx0aXBsZVZhbGlkYXRpb25EYXRhID0geyBtdWx0aXBsZVZhbGlkYXRpb25GaWxlOiBkYXRhLmZpbGUgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbXVsdGlwbGVWYWxpZGF0aW9uRGF0YTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZShcbiAgICBsaXN0SWQ6IHN0cmluZyxcbiAgICBkYXRhOiBNdWx0aXBsZVZhbGlkYXRpb25DcmVhdGlvbkRhdGFcbiAgKTogUHJvbWlzZTxDcmVhdGVkTXVsdGlwbGVWYWxpZGF0aW9uSm9iPiB7XG4gICAgaWYgKCFkYXRhIHx8ICFkYXRhLmZpbGUpIHtcbiAgICAgIHRocm93IEFQSUVycm9yLmdldFVzZXJEYXRhRXJyb3IoJ1wiZmlsZVwiIHByb3BlcnR5IGV4cGVjdGVkLicsICdNYWtlIHN1cmUgc2Vjb25kIGFyZ3VtZW50IGhhcyBcImZpbGVcIiBwcm9wZXJ0eS4nKTtcbiAgICB9XG4gICAgY29uc3QgbXVsdGlwbGVWYWxpZGF0aW9uRGF0YSA9IHRoaXMuY29udmVydFRvRXhwZWN0ZWRTaGFwZShkYXRhKTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKGAvdjQvYWRkcmVzcy92YWxpZGF0ZS9idWxrLyR7bGlzdElkfWAsIG11bHRpcGxlVmFsaWRhdGlvbkRhdGEpO1xuICAgIHJldHVybiB0aGlzLmhhbmRsZVJlc3BvbnNlPENyZWF0ZWRNdWx0aXBsZVZhbGlkYXRpb25Kb2I+KHJlc3BvbnNlKTtcbiAgfVxuXG4gIGFzeW5jIGRlc3Ryb3kobGlzdElkOiBzdHJpbmcpOiBQcm9taXNlPENhbmNlbGVkTXVsdGlwbGVWYWxpZGF0aW9uSm9iPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QuZGVsZXRlKGAvdjQvYWRkcmVzcy92YWxpZGF0ZS9idWxrLyR7bGlzdElkfWApO1xuICAgIHJldHVybiB0aGlzLmhhbmRsZVJlc3BvbnNlPENhbmNlbGVkTXVsdGlwbGVWYWxpZGF0aW9uSm9iPihyZXNwb25zZSk7XG4gIH1cbn1cbiIsImltcG9ydCB7IElWYWxpZGF0aW9uQ2xpZW50LCBJTXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50IH0gZnJvbSAnLi4vLi4vSW50ZXJmYWNlcy9WYWxpZGF0aW9ucyc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uUXVlcnksIFZhbGlkYXRpb25SZXN1bHQsIFZhbGlkYXRpb25SZXNwb25zZSB9IGZyb20gJy4uLy4uL1R5cGVzL1ZhbGlkYXRpb25zJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4uL2NvbW1vbi9SZXF1ZXN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmFsaWRhdGVDbGllbnQgaW1wbGVtZW50cyBJVmFsaWRhdGlvbkNsaWVudCB7XG4gIHB1YmxpYyBtdWx0aXBsZVZhbGlkYXRpb247XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCwgbXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50OiBJTXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50KSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICB0aGlzLm11bHRpcGxlVmFsaWRhdGlvbiA9IG11bHRpcGxlVmFsaWRhdGlvbkNsaWVudDtcbiAgfVxuXG4gIGFzeW5jIGdldChhZGRyZXNzOiBzdHJpbmcpOiBQcm9taXNlPFZhbGlkYXRpb25SZXN1bHQ+IHtcbiAgICBjb25zdCBxdWVyeTogVmFsaWRhdGlvblF1ZXJ5ID0geyBhZGRyZXNzIH07XG4gICAgY29uc3QgcmVzdWx0OiBWYWxpZGF0aW9uUmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QuZ2V0KCcvdjQvYWRkcmVzcy92YWxpZGF0ZScsIHF1ZXJ5KTtcbiAgICByZXR1cm4gcmVzdWx0LmJvZHkgYXMgVmFsaWRhdGlvblJlc3VsdDtcbiAgfVxufVxuIiwiaW1wb3J0IHVybGpvaW4gZnJvbSAndXJsLWpvaW4nO1xuaW1wb3J0IHsgV2ViaG9va3NJZHMgfSBmcm9tICcuLi9FbnVtcyc7XG5pbXBvcnQgeyBJV2ViSG9va3NDbGllbnQgfSBmcm9tICcuLi9JbnRlcmZhY2VzL1dlYmhvb2tzJztcblxuaW1wb3J0IHtcbiAgV2ViaG9va1ZhbGlkYXRpb25SZXNwb25zZSxcbiAgV2ViaG9va0xpc3QsXG4gIFdlYmhvb2tSZXNwb25zZSxcbiAgV2ViaG9va3NRdWVyeSxcbiAgV2ViaG9va1Jlc3VsdFxufSBmcm9tICcuLi9UeXBlcy9XZWJob29rcyc7XG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuL2NvbW1vbi9SZXF1ZXN0JztcblxuZXhwb3J0IGNsYXNzIFdlYmhvb2sgaW1wbGVtZW50cyBXZWJob29rUmVzdWx0IHtcbiAgaWQ6IHN0cmluZztcbiAgdXJsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHVybHM6IHN0cmluZ1tdO1xuXG4gIGNvbnN0cnVjdG9yKGlkOiBzdHJpbmcsIHVybDogc3RyaW5nIHwgdW5kZWZpbmVkLCB1cmxzOiBzdHJpbmdbXSkge1xuICAgIHRoaXMuaWQgPSBpZDtcbiAgICB0aGlzLnVybCA9IHVybDtcbiAgICB0aGlzLnVybHMgPSB1cmxzO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdlYmhvb2tzQ2xpZW50IGltcGxlbWVudHMgSVdlYkhvb2tzQ2xpZW50IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0KSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgfVxuXG4gIHByaXZhdGUgX3BhcnNlV2ViaG9va0xpc3QocmVzcG9uc2U6IHsgYm9keTogeyB3ZWJob29rczogV2ViaG9va0xpc3QgfSB9KTogV2ViaG9va0xpc3Qge1xuICAgIHJldHVybiByZXNwb25zZS5ib2R5LndlYmhvb2tzO1xuICB9XG5cbiAgX3BhcnNlV2ViaG9va1dpdGhJRChpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNwb25zZTogV2ViaG9va1Jlc3BvbnNlKTogV2ViaG9va1Jlc3VsdCB7XG4gICAgICBjb25zdCB3ZWJob29rUmVzcG9uc2UgPSByZXNwb25zZT8uYm9keT8ud2ViaG9vaztcbiAgICAgIGxldCB1cmwgPSB3ZWJob29rUmVzcG9uc2U/LnVybDtcbiAgICAgIGxldCB1cmxzID0gd2ViaG9va1Jlc3BvbnNlPy51cmxzO1xuICAgICAgaWYgKCF1cmwpIHtcbiAgICAgICAgdXJsID0gdXJscyAmJiB1cmxzLmxlbmd0aFxuICAgICAgICAgID8gdXJsc1swXVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKCghdXJscyB8fCB1cmxzLmxlbmd0aCA9PT0gMCkgJiYgdXJsKSB7XG4gICAgICAgIHVybHMgPSBbdXJsXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgV2ViaG9vayhpZCwgdXJsLCB1cmxzIGFzIHN0cmluZ1tdKTtcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFyc2VXZWJob29rVGVzdChyZXNwb25zZTogeyBib2R5OiB7IGNvZGU6IG51bWJlciwgbWVzc2FnZTogc3RyaW5nIH0gfSlcbiAgOiB7Y29kZTogbnVtYmVyLCBtZXNzYWdlOnN0cmluZ30ge1xuICAgIHJldHVybiB7XG4gICAgICBjb2RlOiByZXNwb25zZS5ib2R5LmNvZGUsXG4gICAgICBtZXNzYWdlOiByZXNwb25zZS5ib2R5Lm1lc3NhZ2VcbiAgICB9IGFzIFdlYmhvb2tWYWxpZGF0aW9uUmVzcG9uc2U7XG4gIH1cblxuICBsaXN0KGRvbWFpbjogc3RyaW5nLCBxdWVyeTogV2ViaG9va3NRdWVyeSk6IFByb21pc2U8V2ViaG9va0xpc3Q+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ3dlYmhvb2tzJyksIHF1ZXJ5KVxuICAgICAgLnRoZW4odGhpcy5fcGFyc2VXZWJob29rTGlzdCk7XG4gIH1cblxuICBnZXQoZG9tYWluOiBzdHJpbmcsIGlkOiBXZWJob29rc0lkcyk6IFByb21pc2U8V2ViaG9va1Jlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4oJy92My9kb21haW5zJywgZG9tYWluLCAnd2ViaG9va3MnLCBpZCkpXG4gICAgICAudGhlbih0aGlzLl9wYXJzZVdlYmhvb2tXaXRoSUQoaWQpKTtcbiAgfVxuXG4gIGNyZWF0ZShkb21haW46IHN0cmluZyxcbiAgICBpZDogc3RyaW5nLFxuICAgIHVybDogc3RyaW5nLFxuICAgIHRlc3QgPSBmYWxzZSk6IFByb21pc2U8V2ViaG9va1Jlc3VsdCB8IFdlYmhvb2tWYWxpZGF0aW9uUmVzcG9uc2U+IHtcbiAgICBpZiAodGVzdCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXRXaXRoRkQodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICd3ZWJob29rcycsIGlkLCAndGVzdCcpLCB7IHVybCB9KVxuICAgICAgICAudGhlbih0aGlzLl9wYXJzZVdlYmhvb2tUZXN0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICd3ZWJob29rcycpLCB7IGlkLCB1cmwgfSlcbiAgICAgIC50aGVuKHRoaXMuX3BhcnNlV2ViaG9va1dpdGhJRChpZCkpO1xuICB9XG5cbiAgdXBkYXRlKGRvbWFpbjogc3RyaW5nLCBpZDogc3RyaW5nLCB1cmxWYWx1ZXM6IHN0cmluZyB8IHN0cmluZ1tdKTogUHJvbWlzZTxXZWJob29rUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXRXaXRoRkQodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICd3ZWJob29rcycsIGlkKSwgeyB1cmw6IHVybFZhbHVlcyB9KVxuICAgICAgLnRoZW4odGhpcy5fcGFyc2VXZWJob29rV2l0aElEKGlkKSk7XG4gIH1cblxuICBkZXN0cm95KGRvbWFpbjogc3RyaW5nLCBpZDogc3RyaW5nKSA6IFByb21pc2U8V2ViaG9va1Jlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKHVybGpvaW4oJy92My9kb21haW5zJywgZG9tYWluLCAnd2ViaG9va3MnLCBpZCkpXG4gICAgICAudGhlbih0aGlzLl9wYXJzZVdlYmhvb2tXaXRoSUQoaWQpKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgUmVhZGFibGUgfSBmcm9tICdzdHJlYW0nO1xuaW1wb3J0IHsgQ3VzdG9tRmlsZSwgQ3VzdG9tRmlsZURhdGEgfSBmcm9tICcuLi8uLi9UeXBlcyc7XG5pbXBvcnQgQVBJRXJyb3IgZnJvbSAnLi9FcnJvcic7XG5pbXBvcnQgeyBBdHRhY2htZW50SW5mbywgU3RyZWFtVmFsdWUgfSBmcm9tICcuLi8uLi9UeXBlcy9Db21tb24vQXR0YWNobWVudHMnO1xuXG5jbGFzcyBCbG9iRnJvbVN0cmVhbSB7XG4gIHByaXZhdGUgX3N0cmVhbTogUmVhZGFibGVcbiAgc2l6ZTogbnVtYmVyXG5cbiAgY29uc3RydWN0b3Ioc3RyZWFtOiBSZWFkYWJsZSwgc2l6ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuICAgIHRoaXMuc2l6ZSA9IHNpemU7XG4gIH1cblxuICBzdHJlYW0oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0cmVhbTtcbiAgfVxuXG4gIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICByZXR1cm4gJ0Jsb2InO1xuICB9XG59XG5cbmNsYXNzIEF0dGFjaG1lbnRzSGFuZGxlciB7XG4gIHByaXZhdGUgZ2V0QXR0YWNobWVudE9wdGlvbnMoaXRlbToge1xuICAgIGZpbGVuYW1lPzogc3RyaW5nO1xuICAgIGNvbnRlbnRUeXBlPyA6IHN0cmluZztcbiAgICBrbm93bkxlbmd0aD86IG51bWJlcjtcbiAgfSk6IEF0dGFjaG1lbnRJbmZvIHtcbiAgICBjb25zdCB7XG4gICAgICBmaWxlbmFtZSxcbiAgICAgIGNvbnRlbnRUeXBlLFxuICAgICAga25vd25MZW5ndGgsXG4gICAgfSA9IGl0ZW07XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLihmaWxlbmFtZSA/IHsgZmlsZW5hbWUgfSA6IHsgZmlsZW5hbWU6ICdmaWxlJyB9KSxcbiAgICAgIC4uLihjb250ZW50VHlwZSAmJiB7IGNvbnRlbnRUeXBlIH0pLFxuICAgICAgLi4uKGtub3duTGVuZ3RoICYmIHsga25vd25MZW5ndGggfSlcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRGaWxlSW5mbyhmaWxlOiBGaWxlKSB7IC8vIGJyb3dzZXIgY29tcGxpYW50IGZpbGVcbiAgICBjb25zdCB7XG4gICAgICBuYW1lOiBmaWxlbmFtZSxcbiAgICAgIHR5cGU6IGNvbnRlbnRUeXBlLFxuICAgICAgc2l6ZToga25vd25MZW5ndGgsXG4gICAgfSA9IGZpbGU7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QXR0YWNobWVudE9wdGlvbnMoeyBmaWxlbmFtZSwgY29udGVudFR5cGUsIGtub3duTGVuZ3RoIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDdXN0b21GaWxlSW5mbyhmaWxlOiBDdXN0b21GaWxlKSB7IC8vIGN1c3RvbSBjcmVhdGVkIGZpbGVcbiAgICBjb25zdCB7XG4gICAgICBmaWxlbmFtZSxcbiAgICAgIGNvbnRlbnRUeXBlLFxuICAgICAga25vd25MZW5ndGgsXG4gICAgfSA9IGZpbGU7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QXR0YWNobWVudE9wdGlvbnMoeyBmaWxlbmFtZSwgY29udGVudFR5cGUsIGtub3duTGVuZ3RoIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRCdWZmZXJJbmZvKGJ1ZmZlcjogQnVmZmVyKSB7XG4gICAgY29uc3Qge1xuICAgICAgYnl0ZUxlbmd0aDoga25vd25MZW5ndGgsXG4gICAgfSA9IGJ1ZmZlcjtcbiAgICByZXR1cm4gdGhpcy5nZXRBdHRhY2htZW50T3B0aW9ucyh7IGZpbGVuYW1lOiAnZmlsZScsIGNvbnRlbnRUeXBlOiAnJywga25vd25MZW5ndGggfSk7XG4gIH1cblxuICBwdWJsaWMgaXNTdHJlYW0oZGF0YTogdW5rbm93bikgOiBkYXRhIGlzIFN0cmVhbVZhbHVlIHtcbiAgICByZXR1cm4gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmIHR5cGVvZiAoZGF0YSBhcyBTdHJlYW1WYWx1ZSkucGlwZSA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIHB1YmxpYyBpc0N1c3RvbUZpbGUob2JqOiB1bmtub3duKTogb2JqIGlzIEN1c3RvbUZpbGUge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0J1xuICAgICAgJiYgISEob2JqIGFzIEN1c3RvbUZpbGUpLmRhdGE7XG4gIH1cblxuICBwdWJsaWMgaXNCcm93c2VyRmlsZShvYmo6IHVua25vd24pOiBvYmogaXMgRmlsZSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmICghIShvYmogYXMgRmlsZSkubmFtZSB8fCAodHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnICYmIG9iaiBpbnN0YW5jZW9mIEJsb2IpKTtcbiAgfVxuXG4gIHB1YmxpYyBpc0J1ZmZlcihkYXRhOiB1bmtub3duKTogZGF0YSBpcyBCdWZmZXIge1xuICAgIHJldHVybiB0eXBlb2YgQnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJiBCdWZmZXIuaXNCdWZmZXIoZGF0YSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QXR0YWNobWVudEluZm8oXG4gICAgYXR0YWNobWVudDogQ3VzdG9tRmlsZSB8IEZpbGUgfCBzdHJpbmcgfCBDdXN0b21GaWxlRGF0YVxuICApOiBBdHRhY2htZW50SW5mbyB7XG4gICAgY29uc3QgaXNCcm93c2VyRmlsZSA9IHRoaXMuaXNCcm93c2VyRmlsZShhdHRhY2htZW50KTtcbiAgICBjb25zdCBpc0N1c3RvbUZpbGUgPSB0aGlzLmlzQ3VzdG9tRmlsZShhdHRhY2htZW50KTtcbiAgICBjb25zdCBpc1N0cmluZyA9IHR5cGVvZiBhdHRhY2htZW50ID09PSAnc3RyaW5nJztcbiAgICBpZiAoIWlzU3RyaW5nKSB7XG4gICAgICBpZiAoaXNCcm93c2VyRmlsZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRGaWxlSW5mbyhhdHRhY2htZW50IGFzIEZpbGUpO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmIEJ1ZmZlci5pc0J1ZmZlcihhdHRhY2htZW50KSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRCdWZmZXJJbmZvKGF0dGFjaG1lbnQgYXMgQnVmZmVyKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0N1c3RvbUZpbGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q3VzdG9tRmlsZUluZm8oYXR0YWNobWVudCBhcyBDdXN0b21GaWxlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvcHRpb25zOiBBdHRhY2htZW50SW5mbyA9IHtcbiAgICAgIGZpbGVuYW1lOiAnZmlsZScsXG4gICAgICBjb250ZW50VHlwZTogdW5kZWZpbmVkLFxuICAgICAga25vd25MZW5ndGg6IHVuZGVmaW5lZFxuICAgIH07XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH1cblxuICBwdWJsaWMgY29udmVydFRvRkRleHBlY3RlZFNoYXBlKFxuICAgIHVzZXJQcm92aWRlZFZhbHVlOiBDdXN0b21GaWxlIHwgRmlsZSB8IHN0cmluZyB8IEN1c3RvbUZpbGVEYXRhXG4gICkge1xuICAgIGNvbnN0IGlzU3RyZWFtID0gdGhpcy5pc1N0cmVhbSh1c2VyUHJvdmlkZWRWYWx1ZSk7XG4gICAgY29uc3QgaXNCcm93c2VyRmlsZSA9IHRoaXMuaXNCcm93c2VyRmlsZSh1c2VyUHJvdmlkZWRWYWx1ZSk7XG4gICAgY29uc3QgaXNDdXN0b21GaWxlID0gdGhpcy5pc0N1c3RvbUZpbGUodXNlclByb3ZpZGVkVmFsdWUpO1xuICAgIGNvbnN0IGlzU3RyaW5nID0gdHlwZW9mIHVzZXJQcm92aWRlZFZhbHVlID09PSAnc3RyaW5nJztcbiAgICBsZXQgcmVzdWx0O1xuICAgIGlmIChpc1N0cmVhbSB8fCBpc1N0cmluZyB8fCBpc0Jyb3dzZXJGaWxlIHx8IHRoaXMuaXNCdWZmZXIodXNlclByb3ZpZGVkVmFsdWUpKSB7XG4gICAgICByZXN1bHQgPSB1c2VyUHJvdmlkZWRWYWx1ZTtcbiAgICB9IGVsc2UgaWYgKGlzQ3VzdG9tRmlsZSkge1xuICAgICAgcmVzdWx0ID0gdXNlclByb3ZpZGVkVmFsdWUuZGF0YTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgQVBJRXJyb3IuZ2V0VXNlckRhdGFFcnJvcihcbiAgICAgICAgYFVua25vd24gYXR0YWNobWVudCB0eXBlICR7dHlwZW9mIHVzZXJQcm92aWRlZFZhbHVlfWAsXG4gICAgICAgIGBUaGUgXCJhdHRhY2htZW50XCIgcHJvcGVydHkgZXhwZWN0cyBlaXRoZXIgQnVmZmVyLCBCbG9iLCBvciBTdHJpbmcuXG4gICAgICAgICAgQWxzbywgSXQgaXMgcG9zc2libGUgdG8gcHJvdmlkZSBhbiBvYmplY3QgdGhhdCBoYXMgdGhlIHByb3BlcnR5IFwiZGF0YVwiIHdpdGggYSB2YWx1ZSB0aGF0IGlzIGVxdWFsIHRvIG9uZSBvZiB0aGUgdHlwZXMgY291bnRlZCBiZWZvcmUuXG4gICAgICAgICAgQWRkaXRpb25hbGx5LCB5b3UgbWF5IHVzZSBhbiBhcnJheSB0byBzZW5kIG1vcmUgdGhhbiBvbmUgYXR0YWNobWVudC5gXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHVibGljIGdldEJsb2JGcm9tU3RyZWFtKHN0cmVhbTogUmVhZGFibGUsIHNpemU6IG51bWJlcik6IEJsb2JGcm9tU3RyZWFtIHtcbiAgICByZXR1cm4gbmV3IEJsb2JGcm9tU3RyZWFtKHN0cmVhbSwgc2l6ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQXR0YWNobWVudHNIYW5kbGVyO1xuIiwiaW1wb3J0IHsgQVBJRXJyb3JPcHRpb25zLCBBUElFcnJvclR5cGUgfSBmcm9tICcuLi8uLi9UeXBlcy9Db21tb24nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBUElFcnJvciBleHRlbmRzIEVycm9yIGltcGxlbWVudHMgQVBJRXJyb3JUeXBlIHtcbiAgcHVibGljIHN0YXR1czogbnVtYmVyIDtcbiAgcHVibGljIHN0YWNrOiBzdHJpbmc7XG4gIHB1YmxpYyBkZXRhaWxzOiBzdHJpbmc7XG4gIHB1YmxpYyB0eXBlOiBzdHJpbmc7XG5cbiAgcHVibGljIHN0YXRpYyBnZXRVc2VyRGF0YUVycm9yKHN0YXR1c1RleHQ6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyB0aGlzKHtcbiAgICAgIHN0YXR1czogNDAwLFxuICAgICAgc3RhdHVzVGV4dCxcbiAgICAgIGJvZHk6IHtcbiAgICAgICAgbWVzc2FnZVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY29uc3RydWN0b3Ioe1xuICAgIHN0YXR1cyxcbiAgICBzdGF0dXNUZXh0LFxuICAgIG1lc3NhZ2UsXG4gICAgYm9keSA9IHt9XG4gIH06IEFQSUVycm9yT3B0aW9ucykge1xuICAgIGxldCBib2R5TWVzc2FnZSA9ICcnO1xuICAgIGxldCBlcnJvciA9ICcnO1xuICAgIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGJvZHlNZXNzYWdlID0gYm9keTtcbiAgICB9IGVsc2Uge1xuICAgICAgYm9keU1lc3NhZ2UgPSBib2R5Py5tZXNzYWdlIHx8ICcnO1xuICAgICAgZXJyb3IgPSBib2R5Py5lcnJvciB8fCAnJztcbiAgICB9XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuc3RhY2sgPSAnJztcbiAgICB0aGlzLnN0YXR1cyA9IHN0YXR1cztcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8IGVycm9yIHx8IHN0YXR1c1RleHQgfHwgJyc7XG4gICAgdGhpcy5kZXRhaWxzID0gYm9keU1lc3NhZ2U7XG4gICAgdGhpcy50eXBlID0gJ01haWxndW5BUElFcnJvcic7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIE5vZGVGb3JtRGF0YSBmcm9tICdmb3JtLWRhdGEnO1xuaW1wb3J0IHsgUmVhZGFibGUgfSBmcm9tICdzdHJlYW0nO1xuaW1wb3J0IHsgRm9ybURhdGFJbnB1dCwgSW5wdXRGb3JtRGF0YSB9IGZyb20gJy4uLy4uL1R5cGVzL0NvbW1vbic7XG5pbXBvcnQgQVBJRXJyb3IgZnJvbSAnLi9FcnJvcic7XG5cbmltcG9ydCB7XG4gIEN1c3RvbUZpbGUsXG4gIEN1c3RvbUZpbGVEYXRhLFxuICBGb3JtRGF0YUlucHV0VmFsdWUsXG4gIE1lc3NhZ2VBdHRhY2htZW50LFxuICBNaW1lTWVzc2FnZVxufSBmcm9tICcuLi8uLi9UeXBlcyc7XG5pbXBvcnQgQXR0YWNobWVudHNIYW5kbGVyIGZyb20gJy4vQXR0YWNobWVudHNIYW5kbGVyJztcbmltcG9ydCB7IEF0dGFjaG1lbnRJbmZvIH0gZnJvbSAnLi4vLi4vVHlwZXMvQ29tbW9uL0F0dGFjaG1lbnRzJztcblxuY2xhc3MgRm9ybURhdGFCdWlsZGVyIHtcbiAgcHJpdmF0ZSBGb3JtRGF0YUNvbnN0cnVjdG9yOiBJbnB1dEZvcm1EYXRhO1xuICBwcml2YXRlIGZpbGVLZXlzOiBzdHJpbmdbXTtcbiAgcHJpdmF0ZSBhdHRhY2htZW50c0hhbmRsZXI6IEF0dGFjaG1lbnRzSGFuZGxlcjtcblxuICBjb25zdHJ1Y3RvcihGb3JtRGF0YUNvbnN0cnVjdG9yOiBJbnB1dEZvcm1EYXRhKSB7XG4gICAgdGhpcy5Gb3JtRGF0YUNvbnN0cnVjdG9yID0gRm9ybURhdGFDb25zdHJ1Y3RvcjtcbiAgICB0aGlzLmZpbGVLZXlzID0gWydhdHRhY2htZW50JywgJ2lubGluZScsICdtdWx0aXBsZVZhbGlkYXRpb25GaWxlJ107XG4gICAgdGhpcy5hdHRhY2htZW50c0hhbmRsZXIgPSBuZXcgQXR0YWNobWVudHNIYW5kbGVyKCk7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlRm9ybURhdGEoZGF0YTogRm9ybURhdGFJbnB1dCk6IE5vZGVGb3JtRGF0YSB8IEZvcm1EYXRhIHtcbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGxlYXNlIHByb3ZpZGUgZGF0YSBvYmplY3QnKTtcbiAgICB9XG4gICAgY29uc3QgZm9ybURhdGE6IE5vZGVGb3JtRGF0YSB8IEZvcm1EYXRhID0gT2JqZWN0LmtleXMoZGF0YSlcbiAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gZGF0YVtrZXldOyB9KVxuICAgICAgLnJlZHVjZSgoZm9ybURhdGFBY2M6IE5vZGVGb3JtRGF0YSB8IEZvcm1EYXRhLCBrZXkpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZmlsZUtleXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnRWYWx1ZSA9IGRhdGFba2V5XTtcbiAgICAgICAgICBpZiAodGhpcy5pc01lc3NhZ2VBdHRhY2htZW50KGF0dGFjaG1lbnRWYWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkRmlsZXNUb0ZEKGtleSwgYXR0YWNobWVudFZhbHVlLCBmb3JtRGF0YUFjYyk7XG4gICAgICAgICAgICByZXR1cm4gZm9ybURhdGFBY2M7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IEFQSUVycm9yLmdldFVzZXJEYXRhRXJyb3IoXG4gICAgICAgICAgICBgVW5rbm93biB2YWx1ZSAke2RhdGFba2V5XX0gd2l0aCB0eXBlICR7dHlwZW9mIGRhdGFba2V5XX0gZm9yIHByb3BlcnR5IFwiJHtrZXl9XCJgLFxuICAgICAgICAgICAgYFRoZSBrZXkgXCIke2tleX1cIiBzaG91bGQgaGF2ZSB0eXBlIG9mIEJ1ZmZlciwgU3RyZWFtLCBGaWxlLCBvciBTdHJpbmcgYFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoa2V5ID09PSAnbWVzc2FnZScpIHsgLy8gbWltZSBtZXNzYWdlXG4gICAgICAgICAgY29uc3QgbWVzc2FnZVZhbHVlID0gZGF0YVtrZXldO1xuICAgICAgICAgIGlmICghbWVzc2FnZVZhbHVlIHx8ICF0aGlzLmlzTUlNRShtZXNzYWdlVmFsdWUpKSB7XG4gICAgICAgICAgICB0aHJvdyBBUElFcnJvci5nZXRVc2VyRGF0YUVycm9yKFxuICAgICAgICAgICAgICBgVW5rbm93biBkYXRhIHR5cGUgZm9yIFwiJHtrZXl9XCIgcHJvcGVydHlgLFxuICAgICAgICAgICAgICAnVGhlIG1pbWUgZGF0YSBzaG91bGQgaGF2ZSB0eXBlIG9mIEJ1ZmZlciwgU3RyaW5nIG9yIEJsb2InXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmFkZE1pbWVEYXRhVG9GRChrZXksIG1lc3NhZ2VWYWx1ZSwgZm9ybURhdGFBY2MpO1xuICAgICAgICAgIHJldHVybiBmb3JtRGF0YUFjYztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYWRkQ29tbW9uUHJvcGVydHlUb0ZEKGtleSwgZGF0YVtrZXldLCBmb3JtRGF0YUFjYyk7XG4gICAgICAgIHJldHVybiBmb3JtRGF0YUFjYztcbiAgICAgIH0sIG5ldyB0aGlzLkZvcm1EYXRhQ29uc3RydWN0b3IoKSk7XG4gICAgcmV0dXJuIGZvcm1EYXRhO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRNaW1lRGF0YVRvRkQoXG4gICAga2V5OiBzdHJpbmcsXG4gICAgZGF0YTogTWltZU1lc3NhZ2UsXG4gICAgZm9ybURhdGFJbnN0YW5jZTogTm9kZUZvcm1EYXRhIHwgRm9ybURhdGFcbiAgKTogdm9pZCB7XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykgeyAvLyBpZiBzdHJpbmcgb25seSB0d28gcGFyYW1ldGVycyBzaG91bGQgYmUgdXNlZC5cbiAgICAgIGZvcm1EYXRhSW5zdGFuY2UuYXBwZW5kKGtleSwgZGF0YSBhcyBzdHJpbmcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzRm9ybURhdGFQYWNrYWdlKGZvcm1EYXRhSW5zdGFuY2UpKSB7IC8vIGZvcm0tZGF0YSBwYWNrYWdlIGlzIHVzZWRcbiAgICAgIGNvbnN0IG5vZGVGb3JtRGF0YSA9IGZvcm1EYXRhSW5zdGFuY2UgYXMgTm9kZUZvcm1EYXRhO1xuICAgICAgbm9kZUZvcm1EYXRhLmFwcGVuZChrZXksIGRhdGEsIHsgZmlsZW5hbWU6ICdNaW1lTWVzc2FnZScgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBCbG9iICE9PSB1bmRlZmluZWQpIHsgLy8gZWl0aGVyIG5vZGUgPiAxOCBvciBicm93c2VyXG4gICAgICBjb25zdCBicm93c2VyRm9ybURhdGEgPSBmb3JtRGF0YUluc3RhbmNlIGFzIEZvcm1EYXRhOyAvLyBCcm93c2VyIGNvbXBsaWFudCBGb3JtRGF0YVxuICAgICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBCbG9iKSB7XG4gICAgICAgIGJyb3dzZXJGb3JtRGF0YS5hcHBlbmQoa2V5LCBkYXRhLCAnTWltZU1lc3NhZ2UnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuYXR0YWNobWVudHNIYW5kbGVyLmlzQnVmZmVyKGRhdGEpKSB7IC8vIG5vZGUgZW52aXJvbm1lbnRcbiAgICAgICAgY29uc3QgYmxvYkluc3RhbmNlID0gbmV3IEJsb2IoW2RhdGFdKTtcbiAgICAgICAgYnJvd3NlckZvcm1EYXRhLmFwcGVuZChrZXksIGJsb2JJbnN0YW5jZSwgJ01pbWVNZXNzYWdlJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlzTUlNRShkYXRhOiB1bmtub3duKSA6IGRhdGEgaXMgTWltZU1lc3NhZ2Uge1xuICAgIHJldHVybiB0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZydcbiAgICAgIHx8ICh0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgJiYgZGF0YSBpbnN0YW5jZW9mIEJsb2IpXG4gICAgICB8fCB0aGlzLmF0dGFjaG1lbnRzSGFuZGxlci5pc0J1ZmZlcihkYXRhKVxuICAgICAgfHwgKHR5cGVvZiBSZWFkYWJsZVN0cmVhbSAhPT0gJ3VuZGVmaW5lZCcgJiYgZGF0YSBpbnN0YW5jZW9mIFJlYWRhYmxlU3RyZWFtKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNGb3JtRGF0YVBhY2thZ2Uob2JqOiB1bmtub3duKTogb2JqIGlzIE5vZGVGb3JtRGF0YSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICdvYmplY3QnXG4gICAgICAmJiBvYmogIT09IG51bGxcbiAgICAgICYmIHR5cGVvZiAob2JqIGFzIE5vZGVGb3JtRGF0YSkuZ2V0SGVhZGVycyA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIHByaXZhdGUgaXNNZXNzYWdlQXR0YWNobWVudCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIE1lc3NhZ2VBdHRhY2htZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5hdHRhY2htZW50c0hhbmRsZXIuaXNDdXN0b21GaWxlKHZhbHVlKVxuICAgICAgfHwgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJ1xuICAgICAgfHwgKHR5cGVvZiBGaWxlICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZSBpbnN0YW5jZW9mIEZpbGUpXG4gICAgICB8fCAodHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlIGluc3RhbmNlb2YgQmxvYilcbiAgICAgIHx8IHRoaXMuYXR0YWNobWVudHNIYW5kbGVyLmlzQnVmZmVyKHZhbHVlKVxuICAgICAgfHwgdGhpcy5hdHRhY2htZW50c0hhbmRsZXIuaXNTdHJlYW0odmFsdWUpXG4gICAgICB8fCAoXG4gICAgICAgIEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmV2ZXJ5KFxuICAgICAgICAgIChpdGVtKSA9PiB0aGlzLmF0dGFjaG1lbnRzSGFuZGxlci5pc0N1c3RvbUZpbGUoaXRlbSlcbiAgICAgICAgICAgIHx8ICh0eXBlb2YgRmlsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgaXRlbSBpbnN0YW5jZW9mIEZpbGUpXG4gICAgICAgICAgICB8fCAodHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlIGluc3RhbmNlb2YgQmxvYilcbiAgICAgICAgICAgIHx8IHRoaXMuYXR0YWNobWVudHNIYW5kbGVyLmlzQnVmZmVyKGl0ZW0pXG4gICAgICAgICAgICB8fCB0aGlzLmF0dGFjaG1lbnRzSGFuZGxlci5pc1N0cmVhbShpdGVtKVxuICAgICAgICApXG4gICAgICApXG5cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRGaWxlc1RvRkQoXG4gICAgcHJvcGVydHlOYW1lOiB0eXBlb2YgdGhpcy5maWxlS2V5c1tudW1iZXJdLFxuICAgIHZhbHVlOiBNZXNzYWdlQXR0YWNobWVudCxcbiAgICBmb3JtRGF0YUluc3RhbmNlOiBOb2RlRm9ybURhdGEgfCBGb3JtRGF0YVxuICApOiB2b2lkIHtcbiAgICBjb25zdCBhcHBlbmRGaWxlVG9GRCA9IChcbiAgICAgIG9yaWdpbmFsS2V5OiBzdHJpbmcsXG4gICAgICBhdHRhY2htZW50OiBDdXN0b21GaWxlIHwgRmlsZSB8IHN0cmluZ3wgQ3VzdG9tRmlsZURhdGEsXG4gICAgICBmb3JtRGF0YTogTm9kZUZvcm1EYXRhIHwgRm9ybURhdGFcbiAgICApOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IG9yaWdpbmFsS2V5ID09PSAnbXVsdGlwbGVWYWxpZGF0aW9uRmlsZScgPyAnZmlsZScgOiBvcmlnaW5hbEtleTtcbiAgICAgIGNvbnN0IG9iakRhdGEgPSB0aGlzLmF0dGFjaG1lbnRzSGFuZGxlci5jb252ZXJ0VG9GRGV4cGVjdGVkU2hhcGUoYXR0YWNobWVudCk7XG4gICAgICBjb25zdCBvcHRpb25zOiBBdHRhY2htZW50SW5mbyA9IHRoaXMuYXR0YWNobWVudHNIYW5kbGVyLmdldEF0dGFjaG1lbnRJbmZvKGF0dGFjaG1lbnQpO1xuXG4gICAgICBpZiAodGhpcy5pc0Zvcm1EYXRhUGFja2FnZShmb3JtRGF0YSkpIHtcbiAgICAgICAgY29uc3QgZmQgPSBmb3JtRGF0YSBhcyBOb2RlRm9ybURhdGE7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0eXBlb2Ygb2JqRGF0YSA9PT0gJ3N0cmluZycgPyBCdWZmZXIuZnJvbShvYmpEYXRhKSA6IG9iakRhdGE7XG4gICAgICAgIGZkLmFwcGVuZChrZXksIGRhdGEsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgQmxvYiAhPT0gdW5kZWZpbmVkKSB7IC8vIGVpdGhlciBub2RlID4gMTggb3IgYnJvd3NlclxuICAgICAgICBjb25zdCBicm93c2VyRm9ybURhdGEgPSBmb3JtRGF0YUluc3RhbmNlIGFzIEZvcm1EYXRhOyAvLyBCcm93c2VyIGNvbXBsaWFudCBGb3JtRGF0YVxuXG4gICAgICAgIGlmICh0eXBlb2Ygb2JqRGF0YSA9PT0gJ3N0cmluZycgfHwgdGhpcy5hdHRhY2htZW50c0hhbmRsZXIuaXNCdWZmZXIob2JqRGF0YSkpIHtcbiAgICAgICAgICBjb25zdCBibG9iSW5zdGFuY2UgPSBuZXcgQmxvYihbb2JqRGF0YV0pO1xuICAgICAgICAgIGJyb3dzZXJGb3JtRGF0YS5hcHBlbmQoa2V5LCBibG9iSW5zdGFuY2UsIG9wdGlvbnMuZmlsZW5hbWUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvYmpEYXRhIGluc3RhbmNlb2YgQmxvYikge1xuICAgICAgICAgIGJyb3dzZXJGb3JtRGF0YS5hcHBlbmQoa2V5LCBvYmpEYXRhLCBvcHRpb25zLmZpbGVuYW1lKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hdHRhY2htZW50c0hhbmRsZXIuaXNTdHJlYW0ob2JqRGF0YSkpIHtcbiAgICAgICAgICBjb25zdCBibG9iID0gdGhpcy5hdHRhY2htZW50c0hhbmRsZXIuZ2V0QmxvYkZyb21TdHJlYW0oXG4gICAgICAgICAgICBvYmpEYXRhIGFzIHVua25vd24gYXMgUmVhZGFibGUsXG4gICAgICAgICAgICBvcHRpb25zLmtub3duTGVuZ3RoIGFzIG51bWJlclxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJvd3NlckZvcm1EYXRhLnNldChrZXksIGJsb2IgYXMgdW5rbm93biBhcyBGaWxlLCBvcHRpb25zLmZpbGVuYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgYXBwZW5kRmlsZVRvRkQocHJvcGVydHlOYW1lLCBpdGVtLCBmb3JtRGF0YUluc3RhbmNlKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcHBlbmRGaWxlVG9GRChwcm9wZXJ0eU5hbWUsIHZhbHVlLCBmb3JtRGF0YUluc3RhbmNlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkZENvbW1vblByb3BlcnR5VG9GRChcbiAgICBrZXk6IHN0cmluZyxcbiAgICB2YWx1ZTogRm9ybURhdGFJbnB1dFZhbHVlLFxuICAgIGZvcm1EYXRhQWNjOiBOb2RlRm9ybURhdGEgfCBGb3JtRGF0YVxuICApOiB2b2lkIHtcbiAgICBjb25zdCBhZGRWYWx1ZUJhc2VkT25GRCA9IChmZEtleTogc3RyaW5nLCBmZFZhbHVlOiBGb3JtRGF0YUlucHV0VmFsdWUpOiB2b2lkID0+IHtcbiAgICAgIGlmICh0aGlzLmlzRm9ybURhdGFQYWNrYWdlKGZvcm1EYXRhQWNjKSkge1xuICAgICAgICBpZiAodHlwZW9mIGZkVmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSByZWNlaXZlZCB2YWx1ZSBpcyBhbiBvYmplY3QuIFxcbidcbiAgICAgICAgICArICdcIkpTT04uU3RyaW5naWZ5XCIgd2lsbCBiZSB1c2VkIHRvIGF2b2lkIFR5cGVFcnJvciBcXG4nXG4gICAgICAgICAgKyAnVG8gcmVtb3ZlIHRoaXMgd2FybmluZzogXFxuJ1xuICAgICAgICAgICsgJ0NvbnNpZGVyIHN3aXRjaGluZyB0byBidWlsdC1pbiBGb3JtRGF0YSBvciBjb252ZXJ0aW5nIHRoZSB2YWx1ZSBvbiB5b3VyIG93bi5cXG4nKTtcbiAgICAgICAgICByZXR1cm4gZm9ybURhdGFBY2MuYXBwZW5kKGZkS2V5LCBKU09OLnN0cmluZ2lmeShmZFZhbHVlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZvcm1EYXRhQWNjLmFwcGVuZChmZEtleSwgZmRWYWx1ZSk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGZkVmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBmb3JtRGF0YUFjYy5hcHBlbmQoZmRLZXksIGZkVmFsdWUpO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBCbG9iICE9PSB1bmRlZmluZWQgJiYgZmRWYWx1ZSBpbnN0YW5jZW9mIEJsb2IpIHtcbiAgICAgICAgcmV0dXJuIGZvcm1EYXRhQWNjLmFwcGVuZChmZEtleSwgZmRWYWx1ZSk7XG4gICAgICB9XG4gICAgICB0aHJvdyBBUElFcnJvci5nZXRVc2VyRGF0YUVycm9yKFxuICAgICAgICAnVW5rbm93biB2YWx1ZSB0eXBlIGZvciBGb3JtIERhdGEuIFN0cmluZyBvciBCbG9iIGV4cGVjdGVkJyxcbiAgICAgICAgJ0Jyb3dzZXIgY29tcGxpYW50IEZvcm1EYXRhIGFsbG93cyBvbmx5IHN0cmluZyBvciBCbG9iIHZhbHVlcyBmb3IgcHJvcGVydGllcyB0aGF0IGFyZSBub3QgYXR0YWNobWVudHMuJ1xuICAgICAgKTtcbiAgICB9O1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtOiBGb3JtRGF0YUlucHV0VmFsdWUpIHtcbiAgICAgICAgYWRkVmFsdWVCYXNlZE9uRkQoa2V5LCBpdGVtKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgYWRkVmFsdWVCYXNlZE9uRkQoa2V5LCB2YWx1ZSk7XG4gICAgfVxuICB9XG59XG5leHBvcnQgZGVmYXVsdCBGb3JtRGF0YUJ1aWxkZXI7XG4iLCJpbXBvcnQgdXJsam9pbiBmcm9tICd1cmwtam9pbic7XG5pbXBvcnQgQVBJRXJyb3IgZnJvbSAnLi9FcnJvcic7XG5cbmltcG9ydCB7XG4gIFBhZ2VzTGlzdEFjY3VtdWxhdG9yLFxuICBQYXJzZWRQYWdlLFxuICBQYXJzZWRQYWdlc0xpc3QsXG4gIFF1ZXJ5V2l0aFBhZ2UsXG4gIFJlc3BvbnNlV2l0aFBhZ2luZyxcbiAgVXBkYXRlZFVybEFuZFF1ZXJ5LFxuICBBUElFcnJvck9wdGlvbnNcbn0gZnJvbSAnLi4vLi4vVHlwZXMvQ29tbW9uJztcbmltcG9ydCB7XG4gIElCb3VuY2UsXG4gIElDb21wbGFpbnQsXG4gIElVbnN1YnNjcmliZSxcbiAgSVdoaXRlTGlzdFxufSBmcm9tICcuLi8uLi9JbnRlcmZhY2VzL1N1cHByZXNzaW9ucyc7XG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuL1JlcXVlc3QnO1xuaW1wb3J0IHtcbiAgU3VwcHJlc3Npb25EYXRhVHlwZVxufSBmcm9tICcuLi8uLi9UeXBlcy9TdXBwcmVzc2lvbnMnO1xuXG5leHBvcnQgZGVmYXVsdCBhYnN0cmFjdCBjbGFzcyBOYXZpZ2F0aW9uVGhydVBhZ2VzIDxUPiB7XG4gIHJlcXVlc3Q/OiBSZXF1ZXN0O1xuICBjb25zdHJ1Y3RvcihyZXF1ZXN0PzogUmVxdWVzdCkge1xuICAgIGlmIChyZXF1ZXN0KSB7XG4gICAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBwYXJzZVBhZ2UoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwYWdlVXJsOiBzdHJpbmcsXG4gICAgdXJsU2VwYXJhdG9yOiBzdHJpbmcsXG4gICAgaXRlcmF0b3JOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgKSA6IFBhcnNlZFBhZ2Uge1xuICAgIGNvbnN0IHBhcnNlZFVybCA9IG5ldyBVUkwocGFnZVVybCk7XG4gICAgY29uc3QgeyBzZWFyY2hQYXJhbXMgfSA9IHBhcnNlZFVybDtcblxuICAgIGNvbnN0IHBhZ2VWYWx1ZSA9IHBhZ2VVcmwgJiYgdHlwZW9mIHBhZ2VVcmwgPT09ICdzdHJpbmcnID8gcGFnZVVybC5zcGxpdCh1cmxTZXBhcmF0b3IpLnBvcCgpIHx8ICcnIDogJyc7XG4gICAgbGV0IGl0ZXJhdG9yUG9zaXRpb24gPSBudWxsO1xuICAgIGlmIChpdGVyYXRvck5hbWUpIHtcbiAgICAgIGl0ZXJhdG9yUG9zaXRpb24gPSBzZWFyY2hQYXJhbXMuaGFzKGl0ZXJhdG9yTmFtZSlcbiAgICAgICAgPyBzZWFyY2hQYXJhbXMuZ2V0KGl0ZXJhdG9yTmFtZSlcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBpZCxcbiAgICAgIHBhZ2U6IHVybFNlcGFyYXRvciA9PT0gJz8nID8gYD8ke3BhZ2VWYWx1ZX1gIDogcGFnZVZhbHVlLFxuICAgICAgaXRlcmF0b3JQb3NpdGlvbixcbiAgICAgIHVybDogcGFnZVVybFxuICAgIH0gYXMgUGFyc2VkUGFnZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwYXJzZVBhZ2VMaW5rcyhcbiAgICByZXNwb25zZTogUmVzcG9uc2VXaXRoUGFnaW5nLFxuICAgIHVybFNlcGFyYXRvcjogc3RyaW5nLFxuICAgIGl0ZXJhdG9yTmFtZT86IHN0cmluZ1xuICApOiBQYXJzZWRQYWdlc0xpc3Qge1xuICAgIGNvbnN0IHBhZ2VzID0gT2JqZWN0LmVudHJpZXMocmVzcG9uc2UuYm9keS5wYWdpbmcpO1xuICAgIHJldHVybiBwYWdlcy5yZWR1Y2UoXG4gICAgICAoYWNjOiBQYWdlc0xpc3RBY2N1bXVsYXRvciwgW2lkLCBwYWdlVXJsXTogWyBpZDogc3RyaW5nLCBwYWdlVXJsOiBzdHJpbmddKSA9PiB7XG4gICAgICAgIGFjY1tpZF0gPSB0aGlzLnBhcnNlUGFnZShpZCwgcGFnZVVybCwgdXJsU2VwYXJhdG9yLCBpdGVyYXRvck5hbWUpO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwge31cbiAgICApIGFzIHVua25vd24gYXMgUGFyc2VkUGFnZXNMaXN0O1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVVcmxBbmRRdWVyeShjbGllbnRVcmw6IHN0cmluZywgcXVlcnk/OiBRdWVyeVdpdGhQYWdlKTogVXBkYXRlZFVybEFuZFF1ZXJ5IHtcbiAgICBsZXQgdXJsID0gY2xpZW50VXJsO1xuICAgIGNvbnN0IHF1ZXJ5Q29weSA9IHsgLi4ucXVlcnkgfTtcbiAgICBpZiAocXVlcnlDb3B5LnBhZ2UpIHtcbiAgICAgIHVybCA9IHVybGpvaW4oY2xpZW50VXJsLCBxdWVyeUNvcHkucGFnZSk7XG4gICAgICBkZWxldGUgcXVlcnlDb3B5LnBhZ2U7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICB1cmwsXG4gICAgICB1cGRhdGVkUXVlcnk6IHF1ZXJ5Q29weVxuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgcmVxdWVzdExpc3RXaXRoUGFnZXMoY2xpZW50VXJsOnN0cmluZywgcXVlcnk/OiBRdWVyeVdpdGhQYWdlLCBNb2RlbD86IHtcbiAgICBuZXcoZGF0YTogU3VwcHJlc3Npb25EYXRhVHlwZSk6XG4gICAgSUJvdW5jZSB8IElDb21wbGFpbnQgfCBJVW5zdWJzY3JpYmUgfCBJV2hpdGVMaXN0XG4gIH0pOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCB7IHVybCwgdXBkYXRlZFF1ZXJ5IH0gPSB0aGlzLnVwZGF0ZVVybEFuZFF1ZXJ5KGNsaWVudFVybCwgcXVlcnkpO1xuICAgIGlmICh0aGlzLnJlcXVlc3QpIHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBSZXNwb25zZVdpdGhQYWdpbmcgPSBhd2FpdCB0aGlzLnJlcXVlc3QuZ2V0KHVybCwgdXBkYXRlZFF1ZXJ5KTtcbiAgICAgIC8vIE1vZGVsIGhlcmUgaXMgdXN1YWxseSB1bmRlZmluZWQgZXhjZXB0IGZvciBTdXBwcmVzc2lvbiBDbGllbnRcbiAgICAgIHJldHVybiB0aGlzLnBhcnNlTGlzdChyZXNwb25zZSwgTW9kZWwpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgQVBJRXJyb3Ioe1xuICAgICAgc3RhdHVzOiA1MDAsXG4gICAgICBzdGF0dXNUZXh0OiAnUmVxdWVzdCBwcm9wZXJ0eSBpcyBlbXB0eScsXG4gICAgICBib2R5OiB7IG1lc3NhZ2U6ICcnIH1cbiAgICB9IGFzIEFQSUVycm9yT3B0aW9ucyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgcGFyc2VMaXN0KHJlc3BvbnNlOiBSZXNwb25zZVdpdGhQYWdpbmcsIE1vZGVsPzoge1xuICAgIG5ldyhkYXRhOiBTdXBwcmVzc2lvbkRhdGFUeXBlKTpcbiAgICBJQm91bmNlIHwgSUNvbXBsYWludCB8IElVbnN1YnNjcmliZSB8IElXaGl0ZUxpc3RcbiAgfSk6IFQ7XG59XG4iLCJpbXBvcnQgKiBhcyBiYXNlNjQgZnJvbSAnYmFzZS02NCc7XG5pbXBvcnQgdXJsam9pbiBmcm9tICd1cmwtam9pbic7XG5pbXBvcnQgYXhpb3MsIHtcbiAgQXhpb3NFcnJvcixcbiAgQXhpb3NSZXNwb25zZSxcbiAgQXhpb3NIZWFkZXJzLFxuICBSYXdBeGlvc1JlcXVlc3RIZWFkZXJzLFxuICBBeGlvc1Byb3h5Q29uZmlnLFxufSBmcm9tICdheGlvcyc7XG5pbXBvcnQgKiBhcyBOb2RlRm9ybURhdGEgZnJvbSAnZm9ybS1kYXRhJztcbmltcG9ydCBBUElFcnJvciBmcm9tICcuL0Vycm9yJztcbmltcG9ydCB7XG4gIE9uQ2FsbFJlcXVlc3RPcHRpb25zLFxuICBSZXF1ZXN0T3B0aW9ucyxcbiAgQVBJRXJyb3JPcHRpb25zLFxuICBJbnB1dEZvcm1EYXRhLFxuICBBUElSZXNwb25zZSxcbiAgSXBQb29sRGVsZXRlRGF0YSxcbiAgRm9ybURhdGFJbnB1dFxufSBmcm9tICcuLi8uLi9UeXBlcyc7XG5cbmltcG9ydCBGb3JtRGF0YUJ1aWxkZXIgZnJvbSAnLi9Gb3JtRGF0YUJ1aWxkZXInO1xuaW1wb3J0IFN1YmFjY291bnRzQ2xpZW50IGZyb20gJy4uL1N1YmFjY291bnRzJztcblxuY2xhc3MgUmVxdWVzdCB7XG4gIHByaXZhdGUgdXNlcm5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSBrZXk6IHN0cmluZztcbiAgcHJpdmF0ZSB1cmw6IHN0cmluZztcbiAgcHJpdmF0ZSB0aW1lb3V0OiBudW1iZXI7XG4gIHByaXZhdGUgaGVhZGVyczogQXhpb3NIZWFkZXJzO1xuICBwcml2YXRlIGZvcm1EYXRhQnVpbGRlcjogRm9ybURhdGFCdWlsZGVyO1xuICBwcml2YXRlIG1heEJvZHlMZW5ndGg6IG51bWJlcjtcbiAgcHJpdmF0ZSBwcm94eTogQXhpb3NQcm94eUNvbmZpZyB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBSZXF1ZXN0T3B0aW9ucywgZm9ybURhdGE6IElucHV0Rm9ybURhdGEpIHtcbiAgICB0aGlzLnVzZXJuYW1lID0gb3B0aW9ucy51c2VybmFtZTtcbiAgICB0aGlzLmtleSA9IG9wdGlvbnMua2V5O1xuICAgIHRoaXMudXJsID0gb3B0aW9ucy51cmwgYXMgc3RyaW5nO1xuICAgIHRoaXMudGltZW91dCA9IG9wdGlvbnMudGltZW91dDtcbiAgICB0aGlzLmhlYWRlcnMgPSB0aGlzLm1ha2VIZWFkZXJzRnJvbU9iamVjdChvcHRpb25zLmhlYWRlcnMpO1xuICAgIHRoaXMuZm9ybURhdGFCdWlsZGVyID0gbmV3IEZvcm1EYXRhQnVpbGRlcihmb3JtRGF0YSk7XG4gICAgdGhpcy5tYXhCb2R5TGVuZ3RoID0gNTI0Mjg4MDA7IC8vIDUwIE1CXG4gICAgdGhpcy5wcm94eSA9IG9wdGlvbnM/LnByb3h5O1xuICB9XG5cbiAgYXN5bmMgcmVxdWVzdChcbiAgICBtZXRob2Q6IHN0cmluZyxcbiAgICB1cmw6IHN0cmluZyxcbiAgICBvbkNhbGxPcHRpb25zPzogUmVjb3JkPHN0cmluZywgdW5rbm93biB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID5cbiAgKTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIGNvbnN0IG9wdGlvbnM6IE9uQ2FsbFJlcXVlc3RPcHRpb25zID0geyAuLi5vbkNhbGxPcHRpb25zIH07XG4gICAgZGVsZXRlIG9wdGlvbnM/LmhlYWRlcnM7XG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnMgPSB0aGlzLmpvaW5BbmRUcmFuc2Zvcm1IZWFkZXJzKG9uQ2FsbE9wdGlvbnMpO1xuICAgIGNvbnN0IHBhcmFtcyA9IHsgLi4ub3B0aW9ucyB9O1xuXG4gICAgaWYgKG9wdGlvbnM/LnF1ZXJ5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9wdGlvbnM/LnF1ZXJ5KS5sZW5ndGggPiAwKSB7XG4gICAgICBwYXJhbXMucGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhvcHRpb25zLnF1ZXJ5KTtcbiAgICAgIGRlbGV0ZSBwYXJhbXMucXVlcnk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnM/LmJvZHkpIHtcbiAgICAgIGNvbnN0IGJvZHkgPSBvcHRpb25zPy5ib2R5O1xuICAgICAgcGFyYW1zLmRhdGEgPSBib2R5O1xuICAgICAgZGVsZXRlIHBhcmFtcy5ib2R5O1xuICAgIH1cbiAgICBsZXQgcmVzcG9uc2U6IEF4aW9zUmVzcG9uc2U7XG4gICAgY29uc3QgdXJsVmFsdWUgPSB1cmxqb2luKHRoaXMudXJsLCB1cmwpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgYXhpb3MucmVxdWVzdCh7XG4gICAgICAgIG1ldGhvZDogbWV0aG9kLnRvTG9jYWxlVXBwZXJDYXNlKCksXG4gICAgICAgIHRpbWVvdXQ6IHRoaXMudGltZW91dCxcbiAgICAgICAgdXJsOiB1cmxWYWx1ZSxcbiAgICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgbWF4Qm9keUxlbmd0aDogdGhpcy5tYXhCb2R5TGVuZ3RoLFxuICAgICAgICBwcm94eTogdGhpcy5wcm94eSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuICAgICAgY29uc3QgZXJyb3JSZXNwb25zZSA9IGVyciBhcyBBeGlvc0Vycm9yO1xuXG4gICAgICB0aHJvdyBuZXcgQVBJRXJyb3Ioe1xuICAgICAgICBzdGF0dXM6IGVycm9yUmVzcG9uc2U/LnJlc3BvbnNlPy5zdGF0dXMgfHwgNDAwLFxuICAgICAgICBzdGF0dXNUZXh0OiBlcnJvclJlc3BvbnNlPy5yZXNwb25zZT8uc3RhdHVzVGV4dCB8fCBlcnJvclJlc3BvbnNlLmNvZGUsXG4gICAgICAgIGJvZHk6IGVycm9yUmVzcG9uc2U/LnJlc3BvbnNlPy5kYXRhIHx8IGVycm9yUmVzcG9uc2UubWVzc2FnZVxuICAgICAgfSBhcyBBUElFcnJvck9wdGlvbnMpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZ2V0UmVzcG9uc2VCb2R5KHJlc3BvbnNlKTtcbiAgICByZXR1cm4gcmVzIGFzIEFQSVJlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRSZXNwb25zZUJvZHkocmVzcG9uc2U6IEF4aW9zUmVzcG9uc2UpOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgY29uc3QgcmVzID0ge1xuICAgICAgYm9keToge30sXG4gICAgICBzdGF0dXM6IHJlc3BvbnNlPy5zdGF0dXNcbiAgICB9IGFzIEFQSVJlc3BvbnNlO1xuXG4gICAgaWYgKHR5cGVvZiByZXNwb25zZS5kYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKHJlc3BvbnNlLmRhdGEgPT09ICdNYWlsZ3VuIE1hZ25pZmljZW50IEFQSScpIHtcbiAgICAgICAgdGhyb3cgbmV3IEFQSUVycm9yKHtcbiAgICAgICAgICBzdGF0dXM6IDQwMCxcbiAgICAgICAgICBzdGF0dXNUZXh0OiAnSW5jb3JyZWN0IHVybCcsXG4gICAgICAgICAgYm9keTogcmVzcG9uc2UuZGF0YVxuICAgICAgICB9IGFzIEFQSUVycm9yT3B0aW9ucyk7XG4gICAgICB9XG4gICAgICByZXMuYm9keSA9IHtcbiAgICAgICAgbWVzc2FnZTogcmVzcG9uc2UuZGF0YVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzLmJvZHkgPSByZXNwb25zZS5kYXRhO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgcHJpdmF0ZSBqb2luQW5kVHJhbnNmb3JtSGVhZGVycyhcbiAgICBvbkNhbGxPcHRpb25zPzogT25DYWxsUmVxdWVzdE9wdGlvbnNcbiAgKTogQXhpb3NIZWFkZXJzIHtcbiAgICBjb25zdCByZXF1ZXN0SGVhZGVycyA9IG5ldyBBeGlvc0hlYWRlcnMoKTtcblxuICAgIGNvbnN0IGJhc2ljID0gYmFzZTY0LmVuY29kZShgJHt0aGlzLnVzZXJuYW1lfToke3RoaXMua2V5fWApO1xuICAgIHJlcXVlc3RIZWFkZXJzLnNldEF1dGhvcml6YXRpb24oYEJhc2ljICR7YmFzaWN9YCk7XG4gICAgcmVxdWVzdEhlYWRlcnMuc2V0KHRoaXMuaGVhZGVycyk7XG5cbiAgICBjb25zdCByZWNlaXZlZE9uQ2FsbEhlYWRlcnMgPSBvbkNhbGxPcHRpb25zICYmIG9uQ2FsbE9wdGlvbnMuaGVhZGVycztcbiAgICBjb25zdCBvbkNhbGxIZWFkZXJzID0gdGhpcy5tYWtlSGVhZGVyc0Zyb21PYmplY3QocmVjZWl2ZWRPbkNhbGxIZWFkZXJzKTtcbiAgICByZXF1ZXN0SGVhZGVycy5zZXQob25DYWxsSGVhZGVycyk7XG4gICAgcmV0dXJuIHJlcXVlc3RIZWFkZXJzO1xuICB9XG5cbiAgcHJpdmF0ZSBtYWtlSGVhZGVyc0Zyb21PYmplY3QoXG4gICAgaGVhZGVyc09iamVjdDogUmF3QXhpb3NSZXF1ZXN0SGVhZGVycyA9IHt9XG4gICk6IEF4aW9zSGVhZGVycyB7XG4gICAgbGV0IHJlcXVlc3RIZWFkZXJzID0gbmV3IEF4aW9zSGVhZGVycygpO1xuICAgIHJlcXVlc3RIZWFkZXJzID0gT2JqZWN0LmVudHJpZXMoaGVhZGVyc09iamVjdCkucmVkdWNlKFxuICAgICAgKGhlYWRlcnNBY2N1bXVsYXRvcjogQXhpb3NIZWFkZXJzLCBjdXJyZW50UGFpcikgPT4ge1xuICAgICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBjdXJyZW50UGFpcjtcbiAgICAgICAgaGVhZGVyc0FjY3VtdWxhdG9yLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGhlYWRlcnNBY2N1bXVsYXRvcjtcbiAgICAgIH0sIHJlcXVlc3RIZWFkZXJzXG4gICAgKTtcbiAgICByZXR1cm4gcmVxdWVzdEhlYWRlcnM7XG4gIH1cblxuICBzZXRTdWJhY2NvdW50SGVhZGVyKHN1YmFjY291bnRJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMubWFrZUhlYWRlcnNGcm9tT2JqZWN0KHtcbiAgICAgIC4uLnRoaXMuaGVhZGVycyxcbiAgICAgIFtTdWJhY2NvdW50c0NsaWVudC5TVUJBQ0NPVU5UX0hFQURFUl06IHN1YmFjY291bnRJZFxuICAgIH0pO1xuICAgIHRoaXMuaGVhZGVycy5zZXQoaGVhZGVycyk7XG4gIH1cblxuICByZXNldFN1YmFjY291bnRIZWFkZXIoKTogdm9pZCB7XG4gICAgdGhpcy5oZWFkZXJzLmRlbGV0ZShTdWJhY2NvdW50c0NsaWVudC5TVUJBQ0NPVU5UX0hFQURFUik7XG4gIH1cblxuICBxdWVyeShcbiAgICBtZXRob2Q6IHN0cmluZyxcbiAgICB1cmw6IHN0cmluZyxcbiAgICBxdWVyeT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgQXJyYXk8QXJyYXk8c3RyaW5nPj4sXG4gICAgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1ldGhvZCwgdXJsLCB7IHF1ZXJ5LCAuLi5vcHRpb25zIH0pO1xuICB9XG5cbiAgY29tbWFuZChcbiAgICBtZXRob2Q6IHN0cmluZyxcbiAgICB1cmw6IHN0cmluZyxcbiAgICBkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdIHwgc3RyaW5nIHwgTm9kZUZvcm1EYXRhIHwgRm9ybURhdGEsXG4gICAgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgIGFkZERlZmF1bHRIZWFkZXJzID0gdHJ1ZVxuICApOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgbGV0IGhlYWRlcnMgPSB7fTtcbiAgICBpZiAoYWRkRGVmYXVsdEhlYWRlcnMpIHtcbiAgICAgIGhlYWRlcnMgPSB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyB9O1xuICAgIH1cbiAgICBjb25zdCByZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICAgIC4uLmhlYWRlcnMsXG4gICAgICBib2R5OiBkYXRhLFxuICAgICAgLi4ub3B0aW9uc1xuICAgIH07XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdChcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHJlcXVlc3RPcHRpb25zXG4gICAgKTtcbiAgfVxuXG4gIGdldChcbiAgICB1cmw6IHN0cmluZyxcbiAgICBxdWVyeT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgQXJyYXk8QXJyYXk8c3RyaW5nPj4sXG4gICAgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeSgnZ2V0JywgdXJsLCBxdWVyeSwgb3B0aW9ucyk7XG4gIH1cblxuICBwb3N0KFxuICAgIHVybDogc3RyaW5nLFxuICAgIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHN0cmluZyxcbiAgICBvcHRpb25zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgKTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmNvbW1hbmQoJ3Bvc3QnLCB1cmwsIGRhdGEsIG9wdGlvbnMpO1xuICB9XG5cbiAgcG9zdFdpdGhGRChcbiAgICB1cmw6IHN0cmluZyxcbiAgICBkYXRhOiBGb3JtRGF0YUlucHV0XG4gICk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICBjb25zdCBmb3JtRGF0YSA9IHRoaXMuZm9ybURhdGFCdWlsZGVyLmNyZWF0ZUZvcm1EYXRhKGRhdGEpO1xuICAgIHJldHVybiB0aGlzLmNvbW1hbmQoJ3Bvc3QnLCB1cmwsIGZvcm1EYXRhLCB7XG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScgfVxuICAgIH0sIGZhbHNlKTtcbiAgfVxuXG4gIHB1dFdpdGhGRCh1cmw6IHN0cmluZywgZGF0YTogRm9ybURhdGFJbnB1dCk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICBjb25zdCBmb3JtRGF0YSA9IHRoaXMuZm9ybURhdGFCdWlsZGVyLmNyZWF0ZUZvcm1EYXRhKGRhdGEpO1xuICAgIHJldHVybiB0aGlzLmNvbW1hbmQoJ3B1dCcsIHVybCwgZm9ybURhdGEsIHtcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJyB9XG4gICAgfSwgZmFsc2UpO1xuICB9XG5cbiAgcGF0Y2hXaXRoRkQodXJsOiBzdHJpbmcsIGRhdGE6IEZvcm1EYXRhSW5wdXQpOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgY29uc3QgZm9ybURhdGEgPSB0aGlzLmZvcm1EYXRhQnVpbGRlci5jcmVhdGVGb3JtRGF0YShkYXRhKTtcbiAgICByZXR1cm4gdGhpcy5jb21tYW5kKCdwYXRjaCcsIHVybCwgZm9ybURhdGEsIHtcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJyB9XG4gICAgfSwgZmFsc2UpO1xuICB9XG5cbiAgcHV0KHVybDogc3RyaW5nLCBkYXRhPzogRm9ybURhdGFJbnB1dCB8IHN0cmluZywgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KVxuICA6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5jb21tYW5kKCdwdXQnLCB1cmwsIGRhdGEsIG9wdGlvbnMpO1xuICB9XG5cbiAgZGVsZXRlKHVybDogc3RyaW5nLCBkYXRhPzogSXBQb29sRGVsZXRlRGF0YSk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5jb21tYW5kKCdkZWxldGUnLCB1cmwsIGRhdGEpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJlcXVlc3Q7XG4iLCJleHBvcnQgZW51bSBSZXNvbHV0aW9uIHtcbiAgICBIT1VSID0gJ2hvdXInLFxuICAgIERBWSA9ICdkYXknLFxuICAgIE1PTlRIID0gJ21vbnRoJ1xufVxuXG5leHBvcnQgZW51bSBTdXBwcmVzc2lvbk1vZGVscyB7XG4gICAgQk9VTkNFUyA9ICdib3VuY2VzJyxcbiAgICBDT01QTEFJTlRTID0gJ2NvbXBsYWludHMnLFxuICAgIFVOU1VCU0NSSUJFUyA9ICd1bnN1YnNjcmliZXMnLFxuICAgIFdISVRFTElTVFMgPSAnd2hpdGVsaXN0cydcbn1cblxuZXhwb3J0IGVudW0gV2ViaG9va3NJZHMge1xuICAgIENMSUNLRUQgPSAnY2xpY2tlZCcsXG4gICAgQ09NUExBSU5FRCA9ICdjb21wbGFpbmVkJyxcbiAgICBERUxJVkVSRUQgPSAnZGVsaXZlcmVkJyxcbiAgICBPUEVORUQgPSAnb3BlbmVkJyxcbiAgICBQRVJNQU5FTlRfRkFJTCA9ICdwZXJtYW5lbnRfZmFpbCcsXG4gICAgVEVNUE9SQVJZX0ZBSUwgPSAndGVtcG9yYXJ5X2ZhaWwnLFxuICAgIFVOU1VCU0NSSUJFRCA9ICd1bnN1YnNjcmliZScsXG59XG5cbmV4cG9ydCBlbnVtIFllc05vIHtcbiAgICBZRVMgPSAneWVzJyxcbiAgICBOTyA9ICdubydcbn1cbiIsImV4cG9ydCAqIGZyb20gJy4vTG9nZ2VyJztcbiIsImV4cG9ydCAqIGZyb20gJy4vRG9tYWluQ3JlZGVudGlhbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9Eb21haW5UYWdzJztcbmV4cG9ydCAqIGZyb20gJy4vRG9tYWluVGVtcGxhdGVzJztcbmV4cG9ydCAqIGZyb20gJy4vRG9tYWluc0NsaWVudCc7XG4iLCJleHBvcnQgKiBmcm9tICcuL0lFdmVudENsaWVudCc7XG4iLCJleHBvcnQgKiBmcm9tICcuL0lJUFBvb2xzQ2xpZW50JztcbiIsImV4cG9ydCAqIGZyb20gJy4vSUlQc0NsaWVudCc7XG4iLCJleHBvcnQgKiBmcm9tICcuL0lNYWlsZ3VuQ2xpZW50JztcbiIsImV4cG9ydCAqIGZyb20gJy4vTWFpbGluZ0xpc3RNZW1iZXJzJztcbmV4cG9ydCAqIGZyb20gJy4vTWFpbGluZ0xpc3RzQ2xpZW50JztcbiIsImV4cG9ydCAqIGZyb20gJy4vSU1lc3NhZ2VzQ2xpZW50JztcbiIsImV4cG9ydCAqIGZyb20gJy4vSVJvdXRlc0NsaWVudCc7XG4iLCJleHBvcnQgKiBmcm9tICcuL1N0YXRzQ2xpZW50JztcbmV4cG9ydCAqIGZyb20gJy4vU3RhdHNDb250YWluZXInO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9JU3ViYWNjb3VudHNDbGllbnQnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9Cb3VuY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9Db21wbGFpbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9VbnN1YnNjcmliZSc7XG5leHBvcnQgKiBmcm9tICcuL1doaXRlTGlzdCc7XG5leHBvcnQgKiBmcm9tICcuL0lTdXBwcmVzc2lvbnNDbGllbnQnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9NdWx0aXBsZVZhbGlkYXRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9WYWxpZGF0aW9uJztcbiIsImV4cG9ydCAqIGZyb20gJy4vSVdlYkhvb2tzQ2xpZW50JztcbiIsImV4cG9ydCAqIGZyb20gJy4vQ29tbW9uJztcbmV4cG9ydCAqIGZyb20gJy4vRG9tYWlucyc7XG5leHBvcnQgKiBmcm9tICcuL01haWxndW5DbGllbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9NYWlsaW5nTGlzdHMnO1xuZXhwb3J0ICogZnJvbSAnLi9TdGF0cyc7XG5leHBvcnQgKiBmcm9tICcuL1N1cHByZXNzaW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL1ZhbGlkYXRpb25zJztcbmV4cG9ydCAqIGZyb20gJy4vRXZlbnRDbGllbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9XZWJob29rcyc7XG5leHBvcnQgKiBmcm9tICcuL01lc3NhZ2VzJztcbmV4cG9ydCAqIGZyb20gJy4vUm91dGVzJztcbmV4cG9ydCAqIGZyb20gJy4vSVBzJztcbmV4cG9ydCAqIGZyb20gJy4vSVBQb29scyc7XG5leHBvcnQgKiBmcm9tICcuL1N1YmFjY291bnRzJztcbiIsImV4cG9ydCAqIGZyb20gJy4vRXJyb3InO1xuZXhwb3J0ICogZnJvbSAnLi9BcGlSZXNwb25zZSc7XG5leHBvcnQgKiBmcm9tICcuL0Zvcm1EYXRhJztcbmV4cG9ydCAqIGZyb20gJy4vTmF2aWdhdGlvblRocnVQYWdlcyc7XG5leHBvcnQgKiBmcm9tICcuL1JlcXVlc3RPcHRpb25zJztcbiIsImV4cG9ydCAqIGZyb20gJy4vRG9tYWluQ3JlZGVudGlhbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9Eb21haW5zJztcbmV4cG9ydCAqIGZyb20gJy4vRG9tYWluVGFncyc7XG5leHBvcnQgKiBmcm9tICcuL0RvbWFpblRlbXBsYXRlcyc7XG5leHBvcnQgKiBmcm9tICcuL0RvbWFpblRyYWNraW5nJztcbiIsImV4cG9ydCAqIGZyb20gJy4vRXZlbnRzJztcbiIsImV4cG9ydCAqIGZyb20gJy4vSXBQb29scyc7XG4iLCJleHBvcnQgKiBmcm9tICcuL0lQcyc7XG4iLCJleHBvcnQgKiBmcm9tICcuL01haWxndW5DbGllbnRPcHRpb25zJztcbiIsImV4cG9ydCAqIGZyb20gJy4vTWFpbGluZ0xpc3RNZW1iZXJzJztcbmV4cG9ydCAqIGZyb20gJy4vTWFpbGluZ0xpc3RzJztcbiIsImV4cG9ydCAqIGZyb20gJy4vTWVzc2FnZXMnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9Sb3V0ZXMnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9TdGF0cyc7XG4iLCJleHBvcnQgKiBmcm9tICcuL1N1YmFjY291bnRzJztcbiIsImV4cG9ydCAqIGZyb20gJy4vQm91bmNlJztcbmV4cG9ydCAqIGZyb20gJy4vQ29tcGxhaW50JztcbmV4cG9ydCAqIGZyb20gJy4vU3VwcHJlc3Npb25zJztcbmV4cG9ydCAqIGZyb20gJy4vVW5zdWJzY3JpYmUnO1xuZXhwb3J0ICogZnJvbSAnLi9XaGl0ZUxpc3QnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9NdWx0aXBsZVZhbGlkYXRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9WYWxpZGF0aW9uJztcbiIsImV4cG9ydCAqIGZyb20gJy4vV2ViaG9va3MnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9Db21tb24nO1xuZXhwb3J0ICogZnJvbSAnLi9Eb21haW5zJztcbmV4cG9ydCAqIGZyb20gJy4vRXZlbnRzJztcbmV4cG9ydCAqIGZyb20gJy4vSVBQb29scyc7XG5leHBvcnQgKiBmcm9tICcuL0lQcyc7XG5leHBvcnQgKiBmcm9tICcuL01haWxndW5DbGllbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9NYWlsaW5nTGlzdHMnO1xuZXhwb3J0ICogZnJvbSAnLi9NZXNzYWdlcyc7XG5leHBvcnQgKiBmcm9tICcuL1JvdXRlcyc7XG5leHBvcnQgKiBmcm9tICcuL1N0YXRzJztcbmV4cG9ydCAqIGZyb20gJy4vU3ViYWNjb3VudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9TdXBwcmVzc2lvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9WYWxpZGF0aW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL1dlYmhvb2tzJztcbiIsImltcG9ydCBNYWlsZ3VuQ2xpZW50IGZyb20gJy4vQ2xhc3Nlcy9NYWlsZ3VuQ2xpZW50JztcbmltcG9ydCB7IElNYWlsZ3VuQ2xpZW50IH0gZnJvbSAnLi9JbnRlcmZhY2VzJztcbmltcG9ydCB7IElucHV0Rm9ybURhdGEsIE1haWxndW5DbGllbnRPcHRpb25zIH0gZnJvbSAnLi9UeXBlcyc7XG5cbmV4cG9ydCAqIGFzIEVudW1zIGZyb20gJy4vRW51bXMnO1xuZXhwb3J0ICogZnJvbSAnLi9UeXBlcyc7XG5leHBvcnQgKiBhcyBJbnRlcmZhY2VzIGZyb20gJy4vSW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1haWxndW4ge1xuICBzdGF0aWMgZ2V0IGRlZmF1bHQoKTogdHlwZW9mIE1haWxndW4geyByZXR1cm4gdGhpczsgfVxuICBwcml2YXRlIGZvcm1EYXRhOiBJbnB1dEZvcm1EYXRhXG5cbiAgY29uc3RydWN0b3IoRm9ybURhdGE6IElucHV0Rm9ybURhdGEpIHtcbiAgICB0aGlzLmZvcm1EYXRhID0gRm9ybURhdGE7XG4gIH1cblxuICBjbGllbnQob3B0aW9uczogTWFpbGd1bkNsaWVudE9wdGlvbnMpIDogSU1haWxndW5DbGllbnQge1xuICAgIHJldHVybiBuZXcgTWFpbGd1bkNsaWVudChvcHRpb25zLCB0aGlzLmZvcm1EYXRhKTtcbiAgfVxufVxuIiwiLyohIGh0dHBzOi8vbXRocy5iZS9iYXNlNjQgdjEuMC4wIGJ5IEBtYXRoaWFzIHwgTUlUIGxpY2Vuc2UgKi9cbjsoZnVuY3Rpb24ocm9vdCkge1xuXG5cdC8vIERldGVjdCBmcmVlIHZhcmlhYmxlcyBgZXhwb3J0c2AuXG5cdHZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHM7XG5cblx0Ly8gRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuXG5cdHZhciBmcmVlTW9kdWxlID0gdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiZcblx0XHRtb2R1bGUuZXhwb3J0cyA9PSBmcmVlRXhwb3J0cyAmJiBtb2R1bGU7XG5cblx0Ly8gRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGdsb2JhbGAsIGZyb20gTm9kZS5qcyBvciBCcm93c2VyaWZpZWQgY29kZSwgYW5kIHVzZVxuXHQvLyBpdCBhcyBgcm9vdGAuXG5cdHZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWw7XG5cdGlmIChmcmVlR2xvYmFsLmdsb2JhbCA9PT0gZnJlZUdsb2JhbCB8fCBmcmVlR2xvYmFsLndpbmRvdyA9PT0gZnJlZUdsb2JhbCkge1xuXHRcdHJvb3QgPSBmcmVlR2xvYmFsO1xuXHR9XG5cblx0LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cblx0dmFyIEludmFsaWRDaGFyYWN0ZXJFcnJvciA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHtcblx0XHR0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuXHR9O1xuXHRJbnZhbGlkQ2hhcmFjdGVyRXJyb3IucHJvdG90eXBlID0gbmV3IEVycm9yO1xuXHRJbnZhbGlkQ2hhcmFjdGVyRXJyb3IucHJvdG90eXBlLm5hbWUgPSAnSW52YWxpZENoYXJhY3RlckVycm9yJztcblxuXHR2YXIgZXJyb3IgPSBmdW5jdGlvbihtZXNzYWdlKSB7XG5cdFx0Ly8gTm90ZTogdGhlIGVycm9yIG1lc3NhZ2VzIHVzZWQgdGhyb3VnaG91dCB0aGlzIGZpbGUgbWF0Y2ggdGhvc2UgdXNlZCBieVxuXHRcdC8vIHRoZSBuYXRpdmUgYGF0b2JgL2BidG9hYCBpbXBsZW1lbnRhdGlvbiBpbiBDaHJvbWl1bS5cblx0XHR0aHJvdyBuZXcgSW52YWxpZENoYXJhY3RlckVycm9yKG1lc3NhZ2UpO1xuXHR9O1xuXG5cdHZhciBUQUJMRSA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJztcblx0Ly8gaHR0cDovL3doYXR3Zy5vcmcvaHRtbC9jb21tb24tbWljcm9zeW50YXhlcy5odG1sI3NwYWNlLWNoYXJhY3RlclxuXHR2YXIgUkVHRVhfU1BBQ0VfQ0hBUkFDVEVSUyA9IC9bXFx0XFxuXFxmXFxyIF0vZztcblxuXHQvLyBgZGVjb2RlYCBpcyBkZXNpZ25lZCB0byBiZSBmdWxseSBjb21wYXRpYmxlIHdpdGggYGF0b2JgIGFzIGRlc2NyaWJlZCBpbiB0aGVcblx0Ly8gSFRNTCBTdGFuZGFyZC4gaHR0cDovL3doYXR3Zy5vcmcvaHRtbC93ZWJhcHBhcGlzLmh0bWwjZG9tLXdpbmRvd2Jhc2U2NC1hdG9iXG5cdC8vIFRoZSBvcHRpbWl6ZWQgYmFzZTY0LWRlY29kaW5nIGFsZ29yaXRobSB1c2VkIGlzIGJhc2VkIG9uIEBhdGvigJlzIGV4Y2VsbGVudFxuXHQvLyBpbXBsZW1lbnRhdGlvbi4gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vYXRrLzEwMjAzOTZcblx0dmFyIGRlY29kZSA9IGZ1bmN0aW9uKGlucHV0KSB7XG5cdFx0aW5wdXQgPSBTdHJpbmcoaW5wdXQpXG5cdFx0XHQucmVwbGFjZShSRUdFWF9TUEFDRV9DSEFSQUNURVJTLCAnJyk7XG5cdFx0dmFyIGxlbmd0aCA9IGlucHV0Lmxlbmd0aDtcblx0XHRpZiAobGVuZ3RoICUgNCA9PSAwKSB7XG5cdFx0XHRpbnB1dCA9IGlucHV0LnJlcGxhY2UoLz09PyQvLCAnJyk7XG5cdFx0XHRsZW5ndGggPSBpbnB1dC5sZW5ndGg7XG5cdFx0fVxuXHRcdGlmIChcblx0XHRcdGxlbmd0aCAlIDQgPT0gMSB8fFxuXHRcdFx0Ly8gaHR0cDovL3doYXR3Zy5vcmcvQyNhbHBoYW51bWVyaWMtYXNjaWktY2hhcmFjdGVyc1xuXHRcdFx0L1teK2EtekEtWjAtOS9dLy50ZXN0KGlucHV0KVxuXHRcdCkge1xuXHRcdFx0ZXJyb3IoXG5cdFx0XHRcdCdJbnZhbGlkIGNoYXJhY3RlcjogdGhlIHN0cmluZyB0byBiZSBkZWNvZGVkIGlzIG5vdCBjb3JyZWN0bHkgZW5jb2RlZC4nXG5cdFx0XHQpO1xuXHRcdH1cblx0XHR2YXIgYml0Q291bnRlciA9IDA7XG5cdFx0dmFyIGJpdFN0b3JhZ2U7XG5cdFx0dmFyIGJ1ZmZlcjtcblx0XHR2YXIgb3V0cHV0ID0gJyc7XG5cdFx0dmFyIHBvc2l0aW9uID0gLTE7XG5cdFx0d2hpbGUgKCsrcG9zaXRpb24gPCBsZW5ndGgpIHtcblx0XHRcdGJ1ZmZlciA9IFRBQkxFLmluZGV4T2YoaW5wdXQuY2hhckF0KHBvc2l0aW9uKSk7XG5cdFx0XHRiaXRTdG9yYWdlID0gYml0Q291bnRlciAlIDQgPyBiaXRTdG9yYWdlICogNjQgKyBidWZmZXIgOiBidWZmZXI7XG5cdFx0XHQvLyBVbmxlc3MgdGhpcyBpcyB0aGUgZmlyc3Qgb2YgYSBncm91cCBvZiA0IGNoYXJhY3RlcnPigKZcblx0XHRcdGlmIChiaXRDb3VudGVyKysgJSA0KSB7XG5cdFx0XHRcdC8vIOKApmNvbnZlcnQgdGhlIGZpcnN0IDggYml0cyB0byBhIHNpbmdsZSBBU0NJSSBjaGFyYWN0ZXIuXG5cdFx0XHRcdG91dHB1dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKFxuXHRcdFx0XHRcdDB4RkYgJiBiaXRTdG9yYWdlID4+ICgtMiAqIGJpdENvdW50ZXIgJiA2KVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0O1xuXHR9O1xuXG5cdC8vIGBlbmNvZGVgIGlzIGRlc2lnbmVkIHRvIGJlIGZ1bGx5IGNvbXBhdGlibGUgd2l0aCBgYnRvYWAgYXMgZGVzY3JpYmVkIGluIHRoZVxuXHQvLyBIVE1MIFN0YW5kYXJkOiBodHRwOi8vd2hhdHdnLm9yZy9odG1sL3dlYmFwcGFwaXMuaHRtbCNkb20td2luZG93YmFzZTY0LWJ0b2Fcblx0dmFyIGVuY29kZSA9IGZ1bmN0aW9uKGlucHV0KSB7XG5cdFx0aW5wdXQgPSBTdHJpbmcoaW5wdXQpO1xuXHRcdGlmICgvW15cXDAtXFx4RkZdLy50ZXN0KGlucHV0KSkge1xuXHRcdFx0Ly8gTm90ZTogbm8gbmVlZCB0byBzcGVjaWFsLWNhc2UgYXN0cmFsIHN5bWJvbHMgaGVyZSwgYXMgc3Vycm9nYXRlcyBhcmVcblx0XHRcdC8vIG1hdGNoZWQsIGFuZCB0aGUgaW5wdXQgaXMgc3VwcG9zZWQgdG8gb25seSBjb250YWluIEFTQ0lJIGFueXdheS5cblx0XHRcdGVycm9yKFxuXHRcdFx0XHQnVGhlIHN0cmluZyB0byBiZSBlbmNvZGVkIGNvbnRhaW5zIGNoYXJhY3RlcnMgb3V0c2lkZSBvZiB0aGUgJyArXG5cdFx0XHRcdCdMYXRpbjEgcmFuZ2UuJ1xuXHRcdFx0KTtcblx0XHR9XG5cdFx0dmFyIHBhZGRpbmcgPSBpbnB1dC5sZW5ndGggJSAzO1xuXHRcdHZhciBvdXRwdXQgPSAnJztcblx0XHR2YXIgcG9zaXRpb24gPSAtMTtcblx0XHR2YXIgYTtcblx0XHR2YXIgYjtcblx0XHR2YXIgYztcblx0XHR2YXIgYnVmZmVyO1xuXHRcdC8vIE1ha2Ugc3VyZSBhbnkgcGFkZGluZyBpcyBoYW5kbGVkIG91dHNpZGUgb2YgdGhlIGxvb3AuXG5cdFx0dmFyIGxlbmd0aCA9IGlucHV0Lmxlbmd0aCAtIHBhZGRpbmc7XG5cblx0XHR3aGlsZSAoKytwb3NpdGlvbiA8IGxlbmd0aCkge1xuXHRcdFx0Ly8gUmVhZCB0aHJlZSBieXRlcywgaS5lLiAyNCBiaXRzLlxuXHRcdFx0YSA9IGlucHV0LmNoYXJDb2RlQXQocG9zaXRpb24pIDw8IDE2O1xuXHRcdFx0YiA9IGlucHV0LmNoYXJDb2RlQXQoKytwb3NpdGlvbikgPDwgODtcblx0XHRcdGMgPSBpbnB1dC5jaGFyQ29kZUF0KCsrcG9zaXRpb24pO1xuXHRcdFx0YnVmZmVyID0gYSArIGIgKyBjO1xuXHRcdFx0Ly8gVHVybiB0aGUgMjQgYml0cyBpbnRvIGZvdXIgY2h1bmtzIG9mIDYgYml0cyBlYWNoLCBhbmQgYXBwZW5kIHRoZVxuXHRcdFx0Ly8gbWF0Y2hpbmcgY2hhcmFjdGVyIGZvciBlYWNoIG9mIHRoZW0gdG8gdGhlIG91dHB1dC5cblx0XHRcdG91dHB1dCArPSAoXG5cdFx0XHRcdFRBQkxFLmNoYXJBdChidWZmZXIgPj4gMTggJiAweDNGKSArXG5cdFx0XHRcdFRBQkxFLmNoYXJBdChidWZmZXIgPj4gMTIgJiAweDNGKSArXG5cdFx0XHRcdFRBQkxFLmNoYXJBdChidWZmZXIgPj4gNiAmIDB4M0YpICtcblx0XHRcdFx0VEFCTEUuY2hhckF0KGJ1ZmZlciAmIDB4M0YpXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGlmIChwYWRkaW5nID09IDIpIHtcblx0XHRcdGEgPSBpbnB1dC5jaGFyQ29kZUF0KHBvc2l0aW9uKSA8PCA4O1xuXHRcdFx0YiA9IGlucHV0LmNoYXJDb2RlQXQoKytwb3NpdGlvbik7XG5cdFx0XHRidWZmZXIgPSBhICsgYjtcblx0XHRcdG91dHB1dCArPSAoXG5cdFx0XHRcdFRBQkxFLmNoYXJBdChidWZmZXIgPj4gMTApICtcblx0XHRcdFx0VEFCTEUuY2hhckF0KChidWZmZXIgPj4gNCkgJiAweDNGKSArXG5cdFx0XHRcdFRBQkxFLmNoYXJBdCgoYnVmZmVyIDw8IDIpICYgMHgzRikgK1xuXHRcdFx0XHQnPSdcblx0XHRcdCk7XG5cdFx0fSBlbHNlIGlmIChwYWRkaW5nID09IDEpIHtcblx0XHRcdGJ1ZmZlciA9IGlucHV0LmNoYXJDb2RlQXQocG9zaXRpb24pO1xuXHRcdFx0b3V0cHV0ICs9IChcblx0XHRcdFx0VEFCTEUuY2hhckF0KGJ1ZmZlciA+PiAyKSArXG5cdFx0XHRcdFRBQkxFLmNoYXJBdCgoYnVmZmVyIDw8IDQpICYgMHgzRikgK1xuXHRcdFx0XHQnPT0nXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiBvdXRwdXQ7XG5cdH07XG5cblx0dmFyIGJhc2U2NCA9IHtcblx0XHQnZW5jb2RlJzogZW5jb2RlLFxuXHRcdCdkZWNvZGUnOiBkZWNvZGUsXG5cdFx0J3ZlcnNpb24nOiAnMS4wLjAnXG5cdH07XG5cblx0Ly8gU29tZSBBTUQgYnVpbGQgb3B0aW1pemVycywgbGlrZSByLmpzLCBjaGVjayBmb3Igc3BlY2lmaWMgY29uZGl0aW9uIHBhdHRlcm5zXG5cdC8vIGxpa2UgdGhlIGZvbGxvd2luZzpcblx0aWYgKFxuXHRcdHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJlxuXHRcdHR5cGVvZiBkZWZpbmUuYW1kID09ICdvYmplY3QnICYmXG5cdFx0ZGVmaW5lLmFtZFxuXHQpIHtcblx0XHRkZWZpbmUoZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gYmFzZTY0O1xuXHRcdH0pO1xuXHR9XHRlbHNlIGlmIChmcmVlRXhwb3J0cyAmJiAhZnJlZUV4cG9ydHMubm9kZVR5cGUpIHtcblx0XHRpZiAoZnJlZU1vZHVsZSkgeyAvLyBpbiBOb2RlLmpzIG9yIFJpbmdvSlMgdjAuOC4wK1xuXHRcdFx0ZnJlZU1vZHVsZS5leHBvcnRzID0gYmFzZTY0O1xuXHRcdH0gZWxzZSB7IC8vIGluIE5hcndoYWwgb3IgUmluZ29KUyB2MC43LjAtXG5cdFx0XHRmb3IgKHZhciBrZXkgaW4gYmFzZTY0KSB7XG5cdFx0XHRcdGJhc2U2NC5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIChmcmVlRXhwb3J0c1trZXldID0gYmFzZTY0W2tleV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIHsgLy8gaW4gUmhpbm8gb3IgYSB3ZWIgYnJvd3NlclxuXHRcdHJvb3QuYmFzZTY0ID0gYmFzZTY0O1xuXHR9XG5cbn0odGhpcykpO1xuIiwiKGZ1bmN0aW9uIChuYW1lLCBjb250ZXh0LCBkZWZpbml0aW9uKSB7XG4gIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykgbW9kdWxlLmV4cG9ydHMgPSBkZWZpbml0aW9uKCk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkgZGVmaW5lKGRlZmluaXRpb24pO1xuICBlbHNlIGNvbnRleHRbbmFtZV0gPSBkZWZpbml0aW9uKCk7XG59KSgndXJsam9pbicsIHRoaXMsIGZ1bmN0aW9uICgpIHtcblxuICBmdW5jdGlvbiBub3JtYWxpemUgKHN0ckFycmF5KSB7XG4gICAgdmFyIHJlc3VsdEFycmF5ID0gW107XG4gICAgaWYgKHN0ckFycmF5Lmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJyc7IH1cblxuICAgIGlmICh0eXBlb2Ygc3RyQXJyYXlbMF0gIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVcmwgbXVzdCBiZSBhIHN0cmluZy4gUmVjZWl2ZWQgJyArIHN0ckFycmF5WzBdKTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgZmlyc3QgcGFydCBpcyBhIHBsYWluIHByb3RvY29sLCB3ZSBjb21iaW5lIGl0IHdpdGggdGhlIG5leHQgcGFydC5cbiAgICBpZiAoc3RyQXJyYXlbMF0ubWF0Y2goL15bXi86XSs6XFwvKiQvKSAmJiBzdHJBcnJheS5sZW5ndGggPiAxKSB7XG4gICAgICB2YXIgZmlyc3QgPSBzdHJBcnJheS5zaGlmdCgpO1xuICAgICAgc3RyQXJyYXlbMF0gPSBmaXJzdCArIHN0ckFycmF5WzBdO1xuICAgIH1cblxuICAgIC8vIFRoZXJlIG11c3QgYmUgdHdvIG9yIHRocmVlIHNsYXNoZXMgaW4gdGhlIGZpbGUgcHJvdG9jb2wsIHR3byBzbGFzaGVzIGluIGFueXRoaW5nIGVsc2UuXG4gICAgaWYgKHN0ckFycmF5WzBdLm1hdGNoKC9eZmlsZTpcXC9cXC9cXC8vKSkge1xuICAgICAgc3RyQXJyYXlbMF0gPSBzdHJBcnJheVswXS5yZXBsYWNlKC9eKFteLzpdKyk6XFwvKi8sICckMTovLy8nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyQXJyYXlbMF0gPSBzdHJBcnJheVswXS5yZXBsYWNlKC9eKFteLzpdKyk6XFwvKi8sICckMTovLycpO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjb21wb25lbnQgPSBzdHJBcnJheVtpXTtcblxuICAgICAgaWYgKHR5cGVvZiBjb21wb25lbnQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VybCBtdXN0IGJlIGEgc3RyaW5nLiBSZWNlaXZlZCAnICsgY29tcG9uZW50KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbXBvbmVudCA9PT0gJycpIHsgY29udGludWU7IH1cblxuICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgIC8vIFJlbW92aW5nIHRoZSBzdGFydGluZyBzbGFzaGVzIGZvciBlYWNoIGNvbXBvbmVudCBidXQgdGhlIGZpcnN0LlxuICAgICAgICBjb21wb25lbnQgPSBjb21wb25lbnQucmVwbGFjZSgvXltcXC9dKy8sICcnKTtcbiAgICAgIH1cbiAgICAgIGlmIChpIDwgc3RyQXJyYXkubGVuZ3RoIC0gMSkge1xuICAgICAgICAvLyBSZW1vdmluZyB0aGUgZW5kaW5nIHNsYXNoZXMgZm9yIGVhY2ggY29tcG9uZW50IGJ1dCB0aGUgbGFzdC5cbiAgICAgICAgY29tcG9uZW50ID0gY29tcG9uZW50LnJlcGxhY2UoL1tcXC9dKyQvLCAnJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGb3IgdGhlIGxhc3QgY29tcG9uZW50IHdlIHdpbGwgY29tYmluZSBtdWx0aXBsZSBzbGFzaGVzIHRvIGEgc2luZ2xlIG9uZS5cbiAgICAgICAgY29tcG9uZW50ID0gY29tcG9uZW50LnJlcGxhY2UoL1tcXC9dKyQvLCAnLycpO1xuICAgICAgfVxuXG4gICAgICByZXN1bHRBcnJheS5wdXNoKGNvbXBvbmVudCk7XG5cbiAgICB9XG5cbiAgICB2YXIgc3RyID0gcmVzdWx0QXJyYXkuam9pbignLycpO1xuICAgIC8vIEVhY2ggaW5wdXQgY29tcG9uZW50IGlzIG5vdyBzZXBhcmF0ZWQgYnkgYSBzaW5nbGUgc2xhc2ggZXhjZXB0IHRoZSBwb3NzaWJsZSBmaXJzdCBwbGFpbiBwcm90b2NvbCBwYXJ0LlxuXG4gICAgLy8gcmVtb3ZlIHRyYWlsaW5nIHNsYXNoIGJlZm9yZSBwYXJhbWV0ZXJzIG9yIGhhc2hcbiAgICBzdHIgPSBzdHIucmVwbGFjZSgvXFwvKFxcP3wmfCNbXiFdKS9nLCAnJDEnKTtcblxuICAgIC8vIHJlcGxhY2UgPyBpbiBwYXJhbWV0ZXJzIHdpdGggJlxuICAgIHZhciBwYXJ0cyA9IHN0ci5zcGxpdCgnPycpO1xuICAgIHN0ciA9IHBhcnRzLnNoaWZ0KCkgKyAocGFydHMubGVuZ3RoID4gMCA/ICc/JzogJycpICsgcGFydHMuam9pbignJicpO1xuXG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGlucHV0O1xuXG4gICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbMF0gPT09ICdvYmplY3QnKSB7XG4gICAgICBpbnB1dCA9IGFyZ3VtZW50c1swXTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5wdXQgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vcm1hbGl6ZShpbnB1dCk7XG4gIH07XG5cbn0pO1xuIiwiLy8gQXhpb3MgdjEuNy4yIENvcHlyaWdodCAoYykgMjAyNCBNYXR0IFphYnJpc2tpZSBhbmQgY29udHJpYnV0b3JzXG4ndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXNBcmcsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbi8vIHV0aWxzIGlzIGEgbGlicmFyeSBvZiBnZW5lcmljIGhlbHBlciBmdW5jdGlvbnMgbm9uLXNwZWNpZmljIHRvIGF4aW9zXG5cbmNvbnN0IHt0b1N0cmluZ30gPSBPYmplY3QucHJvdG90eXBlO1xuY29uc3Qge2dldFByb3RvdHlwZU9mfSA9IE9iamVjdDtcblxuY29uc3Qga2luZE9mID0gKGNhY2hlID0+IHRoaW5nID0+IHtcbiAgICBjb25zdCBzdHIgPSB0b1N0cmluZy5jYWxsKHRoaW5nKTtcbiAgICByZXR1cm4gY2FjaGVbc3RyXSB8fCAoY2FjaGVbc3RyXSA9IHN0ci5zbGljZSg4LCAtMSkudG9Mb3dlckNhc2UoKSk7XG59KShPYmplY3QuY3JlYXRlKG51bGwpKTtcblxuY29uc3Qga2luZE9mVGVzdCA9ICh0eXBlKSA9PiB7XG4gIHR5cGUgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiAodGhpbmcpID0+IGtpbmRPZih0aGluZykgPT09IHR5cGVcbn07XG5cbmNvbnN0IHR5cGVPZlRlc3QgPSB0eXBlID0+IHRoaW5nID0+IHR5cGVvZiB0aGluZyA9PT0gdHlwZTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IHtpc0FycmF5fSA9IEFycmF5O1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIHVuZGVmaW5lZFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzVW5kZWZpbmVkID0gdHlwZU9mVGVzdCgndW5kZWZpbmVkJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCdWZmZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNCdWZmZXIodmFsKSB7XG4gIHJldHVybiB2YWwgIT09IG51bGwgJiYgIWlzVW5kZWZpbmVkKHZhbCkgJiYgdmFsLmNvbnN0cnVjdG9yICE9PSBudWxsICYmICFpc1VuZGVmaW5lZCh2YWwuY29uc3RydWN0b3IpXG4gICAgJiYgaXNGdW5jdGlvbih2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIpICYmIHZhbC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcih2YWwpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzQXJyYXlCdWZmZXIgPSBraW5kT2ZUZXN0KCdBcnJheUJ1ZmZlcicpO1xuXG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyVmlldyh2YWwpIHtcbiAgbGV0IHJlc3VsdDtcbiAgaWYgKCh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnKSAmJiAoQXJyYXlCdWZmZXIuaXNWaWV3KSkge1xuICAgIHJlc3VsdCA9IEFycmF5QnVmZmVyLmlzVmlldyh2YWwpO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9ICh2YWwpICYmICh2YWwuYnVmZmVyKSAmJiAoaXNBcnJheUJ1ZmZlcih2YWwuYnVmZmVyKSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmluZ1xuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJpbmcsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1N0cmluZyA9IHR5cGVPZlRlc3QoJ3N0cmluZycpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGdW5jdGlvbiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRnVuY3Rpb24gPSB0eXBlT2ZUZXN0KCdmdW5jdGlvbicpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgTnVtYmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIE51bWJlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzTnVtYmVyID0gdHlwZU9mVGVzdCgnbnVtYmVyJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzT2JqZWN0ID0gKHRoaW5nKSA9PiB0aGluZyAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpbmcgPT09ICdvYmplY3QnO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQm9vbGVhblxuICpcbiAqIEBwYXJhbSB7Kn0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQm9vbGVhbiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzQm9vbGVhbiA9IHRoaW5nID0+IHRoaW5nID09PSB0cnVlIHx8IHRoaW5nID09PSBmYWxzZTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHBsYWluIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1BsYWluT2JqZWN0ID0gKHZhbCkgPT4ge1xuICBpZiAoa2luZE9mKHZhbCkgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgcHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YodmFsKTtcbiAgcmV0dXJuIChwcm90b3R5cGUgPT09IG51bGwgfHwgcHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90b3R5cGUpID09PSBudWxsKSAmJiAhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiB2YWwpICYmICEoU3ltYm9sLml0ZXJhdG9yIGluIHZhbCk7XG59O1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRGF0ZVxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBEYXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNEYXRlID0ga2luZE9mVGVzdCgnRGF0ZScpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZVxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGaWxlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGaWxlID0ga2luZE9mVGVzdCgnRmlsZScpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQmxvYlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCbG9iLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNCbG9iID0ga2luZE9mVGVzdCgnQmxvYicpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZUxpc3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRmlsZUxpc3QgPSBraW5kT2ZUZXN0KCdGaWxlTGlzdCcpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyZWFtXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmVhbSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzU3RyZWFtID0gKHZhbCkgPT4gaXNPYmplY3QodmFsKSAmJiBpc0Z1bmN0aW9uKHZhbC5waXBlKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZvcm1EYXRhXG4gKlxuICogQHBhcmFtIHsqfSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEZvcm1EYXRhLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGb3JtRGF0YSA9ICh0aGluZykgPT4ge1xuICBsZXQga2luZDtcbiAgcmV0dXJuIHRoaW5nICYmIChcbiAgICAodHlwZW9mIEZvcm1EYXRhID09PSAnZnVuY3Rpb24nICYmIHRoaW5nIGluc3RhbmNlb2YgRm9ybURhdGEpIHx8IChcbiAgICAgIGlzRnVuY3Rpb24odGhpbmcuYXBwZW5kKSAmJiAoXG4gICAgICAgIChraW5kID0ga2luZE9mKHRoaW5nKSkgPT09ICdmb3JtZGF0YScgfHxcbiAgICAgICAgLy8gZGV0ZWN0IGZvcm0tZGF0YSBpbnN0YW5jZVxuICAgICAgICAoa2luZCA9PT0gJ29iamVjdCcgJiYgaXNGdW5jdGlvbih0aGluZy50b1N0cmluZykgJiYgdGhpbmcudG9TdHJpbmcoKSA9PT0gJ1tvYmplY3QgRm9ybURhdGFdJylcbiAgICAgIClcbiAgICApXG4gIClcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1VSTFNlYXJjaFBhcmFtcyA9IGtpbmRPZlRlc3QoJ1VSTFNlYXJjaFBhcmFtcycpO1xuXG5jb25zdCBbaXNSZWFkYWJsZVN0cmVhbSwgaXNSZXF1ZXN0LCBpc1Jlc3BvbnNlLCBpc0hlYWRlcnNdID0gWydSZWFkYWJsZVN0cmVhbScsICdSZXF1ZXN0JywgJ1Jlc3BvbnNlJywgJ0hlYWRlcnMnXS5tYXAoa2luZE9mVGVzdCk7XG5cbi8qKlxuICogVHJpbSBleGNlc3Mgd2hpdGVzcGFjZSBvZmYgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0ciBUaGUgU3RyaW5nIHRvIHRyaW1cbiAqXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgU3RyaW5nIGZyZWVkIG9mIGV4Y2VzcyB3aGl0ZXNwYWNlXG4gKi9cbmNvbnN0IHRyaW0gPSAoc3RyKSA9PiBzdHIudHJpbSA/XG4gIHN0ci50cmltKCkgOiBzdHIucmVwbGFjZSgvXltcXHNcXHVGRUZGXFx4QTBdK3xbXFxzXFx1RkVGRlxceEEwXSskL2csICcnKTtcblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYW4gQXJyYXkgb3IgYW4gT2JqZWN0IGludm9raW5nIGEgZnVuY3Rpb24gZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiBgb2JqYCBpcyBhbiBBcnJheSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGluZGV4LCBhbmQgY29tcGxldGUgYXJyYXkgZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiAnb2JqJyBpcyBhbiBPYmplY3QgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBrZXksIGFuZCBjb21wbGV0ZSBvYmplY3QgZm9yIGVhY2ggcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IG9iaiBUaGUgb2JqZWN0IHRvIGl0ZXJhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBjYWxsYmFjayB0byBpbnZva2UgZm9yIGVhY2ggaXRlbVxuICpcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW2FsbE93bktleXMgPSBmYWxzZV1cbiAqIEByZXR1cm5zIHthbnl9XG4gKi9cbmZ1bmN0aW9uIGZvckVhY2gob2JqLCBmbiwge2FsbE93bktleXMgPSBmYWxzZX0gPSB7fSkge1xuICAvLyBEb24ndCBib3RoZXIgaWYgbm8gdmFsdWUgcHJvdmlkZWRcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBpO1xuICBsZXQgbDtcblxuICAvLyBGb3JjZSBhbiBhcnJheSBpZiBub3QgYWxyZWFkeSBzb21ldGhpbmcgaXRlcmFibGVcbiAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgb2JqID0gW29ial07XG4gIH1cblxuICBpZiAoaXNBcnJheShvYmopKSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIGFycmF5IHZhbHVlc1xuICAgIGZvciAoaSA9IDAsIGwgPSBvYmoubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBmbi5jYWxsKG51bGwsIG9ialtpXSwgaSwgb2JqKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIG9iamVjdCBrZXlzXG4gICAgY29uc3Qga2V5cyA9IGFsbE93bktleXMgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopIDogT2JqZWN0LmtleXMob2JqKTtcbiAgICBjb25zdCBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgICBsZXQga2V5O1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgZm4uY2FsbChudWxsLCBvYmpba2V5XSwga2V5LCBvYmopO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kS2V5KG9iaiwga2V5KSB7XG4gIGtleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgbGV0IF9rZXk7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgX2tleSA9IGtleXNbaV07XG4gICAgaWYgKGtleSA9PT0gX2tleS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICByZXR1cm4gX2tleTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmNvbnN0IF9nbG9iYWwgPSAoKCkgPT4ge1xuICAvKmVzbGludCBuby11bmRlZjowKi9cbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZ2xvYmFsVGhpcztcbiAgcmV0dXJuIHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6ICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IGdsb2JhbClcbn0pKCk7XG5cbmNvbnN0IGlzQ29udGV4dERlZmluZWQgPSAoY29udGV4dCkgPT4gIWlzVW5kZWZpbmVkKGNvbnRleHQpICYmIGNvbnRleHQgIT09IF9nbG9iYWw7XG5cbi8qKlxuICogQWNjZXB0cyB2YXJhcmdzIGV4cGVjdGluZyBlYWNoIGFyZ3VtZW50IHRvIGJlIGFuIG9iamVjdCwgdGhlblxuICogaW1tdXRhYmx5IG1lcmdlcyB0aGUgcHJvcGVydGllcyBvZiBlYWNoIG9iamVjdCBhbmQgcmV0dXJucyByZXN1bHQuXG4gKlxuICogV2hlbiBtdWx0aXBsZSBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUga2V5IHRoZSBsYXRlciBvYmplY3QgaW5cbiAqIHRoZSBhcmd1bWVudHMgbGlzdCB3aWxsIHRha2UgcHJlY2VkZW5jZS5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVzdWx0ID0gbWVyZ2Uoe2ZvbzogMTIzfSwge2ZvbzogNDU2fSk7XG4gKiBjb25zb2xlLmxvZyhyZXN1bHQuZm9vKTsgLy8gb3V0cHV0cyA0NTZcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoxIE9iamVjdCB0byBtZXJnZVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJlc3VsdCBvZiBhbGwgbWVyZ2UgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBtZXJnZSgvKiBvYmoxLCBvYmoyLCBvYmozLCAuLi4gKi8pIHtcbiAgY29uc3Qge2Nhc2VsZXNzfSA9IGlzQ29udGV4dERlZmluZWQodGhpcykgJiYgdGhpcyB8fCB7fTtcbiAgY29uc3QgcmVzdWx0ID0ge307XG4gIGNvbnN0IGFzc2lnblZhbHVlID0gKHZhbCwga2V5KSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0S2V5ID0gY2FzZWxlc3MgJiYgZmluZEtleShyZXN1bHQsIGtleSkgfHwga2V5O1xuICAgIGlmIChpc1BsYWluT2JqZWN0KHJlc3VsdFt0YXJnZXRLZXldKSAmJiBpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gbWVyZ2UocmVzdWx0W3RhcmdldEtleV0sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gbWVyZ2Uoe30sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc0FycmF5KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gdmFsLnNsaWNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gdmFsO1xuICAgIH1cbiAgfTtcblxuICBmb3IgKGxldCBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBhcmd1bWVudHNbaV0gJiYgZm9yRWFjaChhcmd1bWVudHNbaV0sIGFzc2lnblZhbHVlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEV4dGVuZHMgb2JqZWN0IGEgYnkgbXV0YWJseSBhZGRpbmcgdG8gaXQgdGhlIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGEgVGhlIG9iamVjdCB0byBiZSBleHRlbmRlZFxuICogQHBhcmFtIHtPYmplY3R9IGIgVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgZnJvbVxuICogQHBhcmFtIHtPYmplY3R9IHRoaXNBcmcgVGhlIG9iamVjdCB0byBiaW5kIGZ1bmN0aW9uIHRvXG4gKlxuICogQHBhcmFtIHtCb29sZWFufSBbYWxsT3duS2V5c11cbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSByZXN1bHRpbmcgdmFsdWUgb2Ygb2JqZWN0IGFcbiAqL1xuY29uc3QgZXh0ZW5kID0gKGEsIGIsIHRoaXNBcmcsIHthbGxPd25LZXlzfT0ge30pID0+IHtcbiAgZm9yRWFjaChiLCAodmFsLCBrZXkpID0+IHtcbiAgICBpZiAodGhpc0FyZyAmJiBpc0Z1bmN0aW9uKHZhbCkpIHtcbiAgICAgIGFba2V5XSA9IGJpbmQodmFsLCB0aGlzQXJnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYVtrZXldID0gdmFsO1xuICAgIH1cbiAgfSwge2FsbE93bktleXN9KTtcbiAgcmV0dXJuIGE7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBieXRlIG9yZGVyIG1hcmtlci4gVGhpcyBjYXRjaGVzIEVGIEJCIEJGICh0aGUgVVRGLTggQk9NKVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50IHdpdGggQk9NXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gY29udGVudCB2YWx1ZSB3aXRob3V0IEJPTVxuICovXG5jb25zdCBzdHJpcEJPTSA9IChjb250ZW50KSA9PiB7XG4gIGlmIChjb250ZW50LmNoYXJDb2RlQXQoMCkgPT09IDB4RkVGRikge1xuICAgIGNvbnRlbnQgPSBjb250ZW50LnNsaWNlKDEpO1xuICB9XG4gIHJldHVybiBjb250ZW50O1xufTtcblxuLyoqXG4gKiBJbmhlcml0IHRoZSBwcm90b3R5cGUgbWV0aG9kcyBmcm9tIG9uZSBjb25zdHJ1Y3RvciBpbnRvIGFub3RoZXJcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBzdXBlckNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge29iamVjdH0gW3Byb3BzXVxuICogQHBhcmFtIHtvYmplY3R9IFtkZXNjcmlwdG9yc11cbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuY29uc3QgaW5oZXJpdHMgPSAoY29uc3RydWN0b3IsIHN1cGVyQ29uc3RydWN0b3IsIHByb3BzLCBkZXNjcmlwdG9ycykgPT4ge1xuICBjb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ29uc3RydWN0b3IucHJvdG90eXBlLCBkZXNjcmlwdG9ycyk7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29uc3RydWN0b3IsICdzdXBlcicsIHtcbiAgICB2YWx1ZTogc3VwZXJDb25zdHJ1Y3Rvci5wcm90b3R5cGVcbiAgfSk7XG4gIHByb3BzICYmIE9iamVjdC5hc3NpZ24oY29uc3RydWN0b3IucHJvdG90eXBlLCBwcm9wcyk7XG59O1xuXG4vKipcbiAqIFJlc29sdmUgb2JqZWN0IHdpdGggZGVlcCBwcm90b3R5cGUgY2hhaW4gdG8gYSBmbGF0IG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZU9iaiBzb3VyY2Ugb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gW2Rlc3RPYmpdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufEJvb2xlYW59IFtmaWx0ZXJdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJvcEZpbHRlcl1cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICovXG5jb25zdCB0b0ZsYXRPYmplY3QgPSAoc291cmNlT2JqLCBkZXN0T2JqLCBmaWx0ZXIsIHByb3BGaWx0ZXIpID0+IHtcbiAgbGV0IHByb3BzO1xuICBsZXQgaTtcbiAgbGV0IHByb3A7XG4gIGNvbnN0IG1lcmdlZCA9IHt9O1xuXG4gIGRlc3RPYmogPSBkZXN0T2JqIHx8IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgaWYgKHNvdXJjZU9iaiA9PSBudWxsKSByZXR1cm4gZGVzdE9iajtcblxuICBkbyB7XG4gICAgcHJvcHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2VPYmopO1xuICAgIGkgPSBwcm9wcy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSA+IDApIHtcbiAgICAgIHByb3AgPSBwcm9wc1tpXTtcbiAgICAgIGlmICgoIXByb3BGaWx0ZXIgfHwgcHJvcEZpbHRlcihwcm9wLCBzb3VyY2VPYmosIGRlc3RPYmopKSAmJiAhbWVyZ2VkW3Byb3BdKSB7XG4gICAgICAgIGRlc3RPYmpbcHJvcF0gPSBzb3VyY2VPYmpbcHJvcF07XG4gICAgICAgIG1lcmdlZFtwcm9wXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHNvdXJjZU9iaiA9IGZpbHRlciAhPT0gZmFsc2UgJiYgZ2V0UHJvdG90eXBlT2Yoc291cmNlT2JqKTtcbiAgfSB3aGlsZSAoc291cmNlT2JqICYmICghZmlsdGVyIHx8IGZpbHRlcihzb3VyY2VPYmosIGRlc3RPYmopKSAmJiBzb3VyY2VPYmogIT09IE9iamVjdC5wcm90b3R5cGUpO1xuXG4gIHJldHVybiBkZXN0T2JqO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSBzdHJpbmcgZW5kcyB3aXRoIHRoZSBjaGFyYWN0ZXJzIG9mIGEgc3BlY2lmaWVkIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZWFyY2hTdHJpbmdcbiAqIEBwYXJhbSB7TnVtYmVyfSBbcG9zaXRpb249IDBdXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmNvbnN0IGVuZHNXaXRoID0gKHN0ciwgc2VhcmNoU3RyaW5nLCBwb3NpdGlvbikgPT4ge1xuICBzdHIgPSBTdHJpbmcoc3RyKTtcbiAgaWYgKHBvc2l0aW9uID09PSB1bmRlZmluZWQgfHwgcG9zaXRpb24gPiBzdHIubGVuZ3RoKSB7XG4gICAgcG9zaXRpb24gPSBzdHIubGVuZ3RoO1xuICB9XG4gIHBvc2l0aW9uIC09IHNlYXJjaFN0cmluZy5sZW5ndGg7XG4gIGNvbnN0IGxhc3RJbmRleCA9IHN0ci5pbmRleE9mKHNlYXJjaFN0cmluZywgcG9zaXRpb24pO1xuICByZXR1cm4gbGFzdEluZGV4ICE9PSAtMSAmJiBsYXN0SW5kZXggPT09IHBvc2l0aW9uO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgbmV3IGFycmF5IGZyb20gYXJyYXkgbGlrZSBvYmplY3Qgb3IgbnVsbCBpZiBmYWlsZWRcbiAqXG4gKiBAcGFyYW0geyp9IFt0aGluZ11cbiAqXG4gKiBAcmV0dXJucyB7P0FycmF5fVxuICovXG5jb25zdCB0b0FycmF5ID0gKHRoaW5nKSA9PiB7XG4gIGlmICghdGhpbmcpIHJldHVybiBudWxsO1xuICBpZiAoaXNBcnJheSh0aGluZykpIHJldHVybiB0aGluZztcbiAgbGV0IGkgPSB0aGluZy5sZW5ndGg7XG4gIGlmICghaXNOdW1iZXIoaSkpIHJldHVybiBudWxsO1xuICBjb25zdCBhcnIgPSBuZXcgQXJyYXkoaSk7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgYXJyW2ldID0gdGhpbmdbaV07XG4gIH1cbiAgcmV0dXJuIGFycjtcbn07XG5cbi8qKlxuICogQ2hlY2tpbmcgaWYgdGhlIFVpbnQ4QXJyYXkgZXhpc3RzIGFuZCBpZiBpdCBkb2VzLCBpdCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBjaGVja3MgaWYgdGhlXG4gKiB0aGluZyBwYXNzZWQgaW4gaXMgYW4gaW5zdGFuY2Ugb2YgVWludDhBcnJheVxuICpcbiAqIEBwYXJhbSB7VHlwZWRBcnJheX1cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5jb25zdCBpc1R5cGVkQXJyYXkgPSAoVHlwZWRBcnJheSA9PiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHJldHVybiB0aGluZyA9PiB7XG4gICAgcmV0dXJuIFR5cGVkQXJyYXkgJiYgdGhpbmcgaW5zdGFuY2VvZiBUeXBlZEFycmF5O1xuICB9O1xufSkodHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnICYmIGdldFByb3RvdHlwZU9mKFVpbnQ4QXJyYXkpKTtcblxuLyoqXG4gKiBGb3IgZWFjaCBlbnRyeSBpbiB0aGUgb2JqZWN0LCBjYWxsIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBrZXkgYW5kIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PGFueSwgYW55Pn0gb2JqIC0gVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAtIFRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGVudHJ5LlxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5jb25zdCBmb3JFYWNoRW50cnkgPSAob2JqLCBmbikgPT4ge1xuICBjb25zdCBnZW5lcmF0b3IgPSBvYmogJiYgb2JqW1N5bWJvbC5pdGVyYXRvcl07XG5cbiAgY29uc3QgaXRlcmF0b3IgPSBnZW5lcmF0b3IuY2FsbChvYmopO1xuXG4gIGxldCByZXN1bHQ7XG5cbiAgd2hpbGUgKChyZXN1bHQgPSBpdGVyYXRvci5uZXh0KCkpICYmICFyZXN1bHQuZG9uZSkge1xuICAgIGNvbnN0IHBhaXIgPSByZXN1bHQudmFsdWU7XG4gICAgZm4uY2FsbChvYmosIHBhaXJbMF0sIHBhaXJbMV0pO1xuICB9XG59O1xuXG4vKipcbiAqIEl0IHRha2VzIGEgcmVndWxhciBleHByZXNzaW9uIGFuZCBhIHN0cmluZywgYW5kIHJldHVybnMgYW4gYXJyYXkgb2YgYWxsIHRoZSBtYXRjaGVzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJlZ0V4cCAtIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggYWdhaW5zdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgLSBUaGUgc3RyaW5nIHRvIHNlYXJjaC5cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXk8Ym9vbGVhbj59XG4gKi9cbmNvbnN0IG1hdGNoQWxsID0gKHJlZ0V4cCwgc3RyKSA9PiB7XG4gIGxldCBtYXRjaGVzO1xuICBjb25zdCBhcnIgPSBbXTtcblxuICB3aGlsZSAoKG1hdGNoZXMgPSByZWdFeHAuZXhlYyhzdHIpKSAhPT0gbnVsbCkge1xuICAgIGFyci5wdXNoKG1hdGNoZXMpO1xuICB9XG5cbiAgcmV0dXJuIGFycjtcbn07XG5cbi8qIENoZWNraW5nIGlmIHRoZSBraW5kT2ZUZXN0IGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIHBhc3NlZCBhbiBIVE1MRm9ybUVsZW1lbnQuICovXG5jb25zdCBpc0hUTUxGb3JtID0ga2luZE9mVGVzdCgnSFRNTEZvcm1FbGVtZW50Jyk7XG5cbmNvbnN0IHRvQ2FtZWxDYXNlID0gc3RyID0+IHtcbiAgcmV0dXJuIHN0ci50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xcc10oW2EtelxcZF0pKFxcdyopL2csXG4gICAgZnVuY3Rpb24gcmVwbGFjZXIobSwgcDEsIHAyKSB7XG4gICAgICByZXR1cm4gcDEudG9VcHBlckNhc2UoKSArIHAyO1xuICAgIH1cbiAgKTtcbn07XG5cbi8qIENyZWF0aW5nIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGNoZWNrIGlmIGFuIG9iamVjdCBoYXMgYSBwcm9wZXJ0eS4gKi9cbmNvbnN0IGhhc093blByb3BlcnR5ID0gKCh7aGFzT3duUHJvcGVydHl9KSA9PiAob2JqLCBwcm9wKSA9PiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpKE9iamVjdC5wcm90b3R5cGUpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgUmVnRXhwIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBSZWdFeHAgb2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNSZWdFeHAgPSBraW5kT2ZUZXN0KCdSZWdFeHAnKTtcblxuY29uc3QgcmVkdWNlRGVzY3JpcHRvcnMgPSAob2JqLCByZWR1Y2VyKSA9PiB7XG4gIGNvbnN0IGRlc2NyaXB0b3JzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqKTtcbiAgY29uc3QgcmVkdWNlZERlc2NyaXB0b3JzID0ge307XG5cbiAgZm9yRWFjaChkZXNjcmlwdG9ycywgKGRlc2NyaXB0b3IsIG5hbWUpID0+IHtcbiAgICBsZXQgcmV0O1xuICAgIGlmICgocmV0ID0gcmVkdWNlcihkZXNjcmlwdG9yLCBuYW1lLCBvYmopKSAhPT0gZmFsc2UpIHtcbiAgICAgIHJlZHVjZWREZXNjcmlwdG9yc1tuYW1lXSA9IHJldCB8fCBkZXNjcmlwdG9yO1xuICAgIH1cbiAgfSk7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMob2JqLCByZWR1Y2VkRGVzY3JpcHRvcnMpO1xufTtcblxuLyoqXG4gKiBNYWtlcyBhbGwgbWV0aG9kcyByZWFkLW9ubHlcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqL1xuXG5jb25zdCBmcmVlemVNZXRob2RzID0gKG9iaikgPT4ge1xuICByZWR1Y2VEZXNjcmlwdG9ycyhvYmosIChkZXNjcmlwdG9yLCBuYW1lKSA9PiB7XG4gICAgLy8gc2tpcCByZXN0cmljdGVkIHByb3BzIGluIHN0cmljdCBtb2RlXG4gICAgaWYgKGlzRnVuY3Rpb24ob2JqKSAmJiBbJ2FyZ3VtZW50cycsICdjYWxsZXInLCAnY2FsbGVlJ10uaW5kZXhPZihuYW1lKSAhPT0gLTEpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IG9ialtuYW1lXTtcblxuICAgIGlmICghaXNGdW5jdGlvbih2YWx1ZSkpIHJldHVybjtcblxuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGZhbHNlO1xuXG4gICAgaWYgKCd3cml0YWJsZScgaW4gZGVzY3JpcHRvcikge1xuICAgICAgZGVzY3JpcHRvci53cml0YWJsZSA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghZGVzY3JpcHRvci5zZXQpIHtcbiAgICAgIGRlc2NyaXB0b3Iuc2V0ID0gKCkgPT4ge1xuICAgICAgICB0aHJvdyBFcnJvcignQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgXFwnJyArIG5hbWUgKyAnXFwnJyk7XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG59O1xuXG5jb25zdCB0b09iamVjdFNldCA9IChhcnJheU9yU3RyaW5nLCBkZWxpbWl0ZXIpID0+IHtcbiAgY29uc3Qgb2JqID0ge307XG5cbiAgY29uc3QgZGVmaW5lID0gKGFycikgPT4ge1xuICAgIGFyci5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgIG9ialt2YWx1ZV0gPSB0cnVlO1xuICAgIH0pO1xuICB9O1xuXG4gIGlzQXJyYXkoYXJyYXlPclN0cmluZykgPyBkZWZpbmUoYXJyYXlPclN0cmluZykgOiBkZWZpbmUoU3RyaW5nKGFycmF5T3JTdHJpbmcpLnNwbGl0KGRlbGltaXRlcikpO1xuXG4gIHJldHVybiBvYmo7XG59O1xuXG5jb25zdCBub29wID0gKCkgPT4ge307XG5cbmNvbnN0IHRvRmluaXRlTnVtYmVyID0gKHZhbHVlLCBkZWZhdWx0VmFsdWUpID0+IHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgTnVtYmVyLmlzRmluaXRlKHZhbHVlID0gK3ZhbHVlKSA/IHZhbHVlIDogZGVmYXVsdFZhbHVlO1xufTtcblxuY29uc3QgQUxQSEEgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonO1xuXG5jb25zdCBESUdJVCA9ICcwMTIzNDU2Nzg5JztcblxuY29uc3QgQUxQSEFCRVQgPSB7XG4gIERJR0lULFxuICBBTFBIQSxcbiAgQUxQSEFfRElHSVQ6IEFMUEhBICsgQUxQSEEudG9VcHBlckNhc2UoKSArIERJR0lUXG59O1xuXG5jb25zdCBnZW5lcmF0ZVN0cmluZyA9IChzaXplID0gMTYsIGFscGhhYmV0ID0gQUxQSEFCRVQuQUxQSEFfRElHSVQpID0+IHtcbiAgbGV0IHN0ciA9ICcnO1xuICBjb25zdCB7bGVuZ3RofSA9IGFscGhhYmV0O1xuICB3aGlsZSAoc2l6ZS0tKSB7XG4gICAgc3RyICs9IGFscGhhYmV0W01hdGgucmFuZG9tKCkgKiBsZW5ndGh8MF07XG4gIH1cblxuICByZXR1cm4gc3RyO1xufTtcblxuLyoqXG4gKiBJZiB0aGUgdGhpbmcgaXMgYSBGb3JtRGF0YSBvYmplY3QsIHJldHVybiB0cnVlLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxuICpcbiAqIEBwYXJhbSB7dW5rbm93bn0gdGhpbmcgLSBUaGUgdGhpbmcgdG8gY2hlY2suXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzU3BlY0NvbXBsaWFudEZvcm0odGhpbmcpIHtcbiAgcmV0dXJuICEhKHRoaW5nICYmIGlzRnVuY3Rpb24odGhpbmcuYXBwZW5kKSAmJiB0aGluZ1tTeW1ib2wudG9TdHJpbmdUYWddID09PSAnRm9ybURhdGEnICYmIHRoaW5nW1N5bWJvbC5pdGVyYXRvcl0pO1xufVxuXG5jb25zdCB0b0pTT05PYmplY3QgPSAob2JqKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IEFycmF5KDEwKTtcblxuICBjb25zdCB2aXNpdCA9IChzb3VyY2UsIGkpID0+IHtcblxuICAgIGlmIChpc09iamVjdChzb3VyY2UpKSB7XG4gICAgICBpZiAoc3RhY2suaW5kZXhPZihzb3VyY2UpID49IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZighKCd0b0pTT04nIGluIHNvdXJjZSkpIHtcbiAgICAgICAgc3RhY2tbaV0gPSBzb3VyY2U7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGlzQXJyYXkoc291cmNlKSA/IFtdIDoge307XG5cbiAgICAgICAgZm9yRWFjaChzb3VyY2UsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVkdWNlZFZhbHVlID0gdmlzaXQodmFsdWUsIGkgKyAxKTtcbiAgICAgICAgICAhaXNVbmRlZmluZWQocmVkdWNlZFZhbHVlKSAmJiAodGFyZ2V0W2tleV0gPSByZWR1Y2VkVmFsdWUpO1xuICAgICAgICB9KTtcblxuICAgICAgICBzdGFja1tpXSA9IHVuZGVmaW5lZDtcblxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzb3VyY2U7XG4gIH07XG5cbiAgcmV0dXJuIHZpc2l0KG9iaiwgMCk7XG59O1xuXG5jb25zdCBpc0FzeW5jRm4gPSBraW5kT2ZUZXN0KCdBc3luY0Z1bmN0aW9uJyk7XG5cbmNvbnN0IGlzVGhlbmFibGUgPSAodGhpbmcpID0+XG4gIHRoaW5nICYmIChpc09iamVjdCh0aGluZykgfHwgaXNGdW5jdGlvbih0aGluZykpICYmIGlzRnVuY3Rpb24odGhpbmcudGhlbikgJiYgaXNGdW5jdGlvbih0aGluZy5jYXRjaCk7XG5cbnZhciB1dGlscyQxID0ge1xuICBpc0FycmF5LFxuICBpc0FycmF5QnVmZmVyLFxuICBpc0J1ZmZlcixcbiAgaXNGb3JtRGF0YSxcbiAgaXNBcnJheUJ1ZmZlclZpZXcsXG4gIGlzU3RyaW5nLFxuICBpc051bWJlcixcbiAgaXNCb29sZWFuLFxuICBpc09iamVjdCxcbiAgaXNQbGFpbk9iamVjdCxcbiAgaXNSZWFkYWJsZVN0cmVhbSxcbiAgaXNSZXF1ZXN0LFxuICBpc1Jlc3BvbnNlLFxuICBpc0hlYWRlcnMsXG4gIGlzVW5kZWZpbmVkLFxuICBpc0RhdGUsXG4gIGlzRmlsZSxcbiAgaXNCbG9iLFxuICBpc1JlZ0V4cCxcbiAgaXNGdW5jdGlvbixcbiAgaXNTdHJlYW0sXG4gIGlzVVJMU2VhcmNoUGFyYW1zLFxuICBpc1R5cGVkQXJyYXksXG4gIGlzRmlsZUxpc3QsXG4gIGZvckVhY2gsXG4gIG1lcmdlLFxuICBleHRlbmQsXG4gIHRyaW0sXG4gIHN0cmlwQk9NLFxuICBpbmhlcml0cyxcbiAgdG9GbGF0T2JqZWN0LFxuICBraW5kT2YsXG4gIGtpbmRPZlRlc3QsXG4gIGVuZHNXaXRoLFxuICB0b0FycmF5LFxuICBmb3JFYWNoRW50cnksXG4gIG1hdGNoQWxsLFxuICBpc0hUTUxGb3JtLFxuICBoYXNPd25Qcm9wZXJ0eSxcbiAgaGFzT3duUHJvcDogaGFzT3duUHJvcGVydHksIC8vIGFuIGFsaWFzIHRvIGF2b2lkIEVTTGludCBuby1wcm90b3R5cGUtYnVpbHRpbnMgZGV0ZWN0aW9uXG4gIHJlZHVjZURlc2NyaXB0b3JzLFxuICBmcmVlemVNZXRob2RzLFxuICB0b09iamVjdFNldCxcbiAgdG9DYW1lbENhc2UsXG4gIG5vb3AsXG4gIHRvRmluaXRlTnVtYmVyLFxuICBmaW5kS2V5LFxuICBnbG9iYWw6IF9nbG9iYWwsXG4gIGlzQ29udGV4dERlZmluZWQsXG4gIEFMUEhBQkVULFxuICBnZW5lcmF0ZVN0cmluZyxcbiAgaXNTcGVjQ29tcGxpYW50Rm9ybSxcbiAgdG9KU09OT2JqZWN0LFxuICBpc0FzeW5jRm4sXG4gIGlzVGhlbmFibGVcbn07XG5cbi8qKlxuICogQ3JlYXRlIGFuIEVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBtZXNzYWdlLCBjb25maWcsIGVycm9yIGNvZGUsIHJlcXVlc3QgYW5kIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb2RlXSBUaGUgZXJyb3IgY29kZSAoZm9yIGV4YW1wbGUsICdFQ09OTkFCT1JURUQnKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbY29uZmlnXSBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXF1ZXN0XSBUaGUgcmVxdWVzdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVzcG9uc2VdIFRoZSByZXNwb25zZS5cbiAqXG4gKiBAcmV0dXJucyB7RXJyb3J9IFRoZSBjcmVhdGVkIGVycm9yLlxuICovXG5mdW5jdGlvbiBBeGlvc0Vycm9yKG1lc3NhZ2UsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgRXJyb3IuY2FsbCh0aGlzKTtcblxuICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnN0YWNrID0gKG5ldyBFcnJvcigpKS5zdGFjaztcbiAgfVxuXG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gIHRoaXMubmFtZSA9ICdBeGlvc0Vycm9yJztcbiAgY29kZSAmJiAodGhpcy5jb2RlID0gY29kZSk7XG4gIGNvbmZpZyAmJiAodGhpcy5jb25maWcgPSBjb25maWcpO1xuICByZXF1ZXN0ICYmICh0aGlzLnJlcXVlc3QgPSByZXF1ZXN0KTtcbiAgcmVzcG9uc2UgJiYgKHRoaXMucmVzcG9uc2UgPSByZXNwb25zZSk7XG59XG5cbnV0aWxzJDEuaW5oZXJpdHMoQXhpb3NFcnJvciwgRXJyb3IsIHtcbiAgdG9KU09OOiBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIFN0YW5kYXJkXG4gICAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UsXG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAvLyBNaWNyb3NvZnRcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgbnVtYmVyOiB0aGlzLm51bWJlcixcbiAgICAgIC8vIE1vemlsbGFcbiAgICAgIGZpbGVOYW1lOiB0aGlzLmZpbGVOYW1lLFxuICAgICAgbGluZU51bWJlcjogdGhpcy5saW5lTnVtYmVyLFxuICAgICAgY29sdW1uTnVtYmVyOiB0aGlzLmNvbHVtbk51bWJlcixcbiAgICAgIHN0YWNrOiB0aGlzLnN0YWNrLFxuICAgICAgLy8gQXhpb3NcbiAgICAgIGNvbmZpZzogdXRpbHMkMS50b0pTT05PYmplY3QodGhpcy5jb25maWcpLFxuICAgICAgY29kZTogdGhpcy5jb2RlLFxuICAgICAgc3RhdHVzOiB0aGlzLnJlc3BvbnNlICYmIHRoaXMucmVzcG9uc2Uuc3RhdHVzID8gdGhpcy5yZXNwb25zZS5zdGF0dXMgOiBudWxsXG4gICAgfTtcbiAgfVxufSk7XG5cbmNvbnN0IHByb3RvdHlwZSQxID0gQXhpb3NFcnJvci5wcm90b3R5cGU7XG5jb25zdCBkZXNjcmlwdG9ycyA9IHt9O1xuXG5bXG4gICdFUlJfQkFEX09QVElPTl9WQUxVRScsXG4gICdFUlJfQkFEX09QVElPTicsXG4gICdFQ09OTkFCT1JURUQnLFxuICAnRVRJTUVET1VUJyxcbiAgJ0VSUl9ORVRXT1JLJyxcbiAgJ0VSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMnLFxuICAnRVJSX0RFUFJFQ0FURUQnLFxuICAnRVJSX0JBRF9SRVNQT05TRScsXG4gICdFUlJfQkFEX1JFUVVFU1QnLFxuICAnRVJSX0NBTkNFTEVEJyxcbiAgJ0VSUl9OT1RfU1VQUE9SVCcsXG4gICdFUlJfSU5WQUxJRF9VUkwnXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuXS5mb3JFYWNoKGNvZGUgPT4ge1xuICBkZXNjcmlwdG9yc1tjb2RlXSA9IHt2YWx1ZTogY29kZX07XG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQXhpb3NFcnJvciwgZGVzY3JpcHRvcnMpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvdHlwZSQxLCAnaXNBeGlvc0Vycm9yJywge3ZhbHVlOiB0cnVlfSk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5BeGlvc0Vycm9yLmZyb20gPSAoZXJyb3IsIGNvZGUsIGNvbmZpZywgcmVxdWVzdCwgcmVzcG9uc2UsIGN1c3RvbVByb3BzKSA9PiB7XG4gIGNvbnN0IGF4aW9zRXJyb3IgPSBPYmplY3QuY3JlYXRlKHByb3RvdHlwZSQxKTtcblxuICB1dGlscyQxLnRvRmxhdE9iamVjdChlcnJvciwgYXhpb3NFcnJvciwgZnVuY3Rpb24gZmlsdGVyKG9iaikge1xuICAgIHJldHVybiBvYmogIT09IEVycm9yLnByb3RvdHlwZTtcbiAgfSwgcHJvcCA9PiB7XG4gICAgcmV0dXJuIHByb3AgIT09ICdpc0F4aW9zRXJyb3InO1xuICB9KTtcblxuICBBeGlvc0Vycm9yLmNhbGwoYXhpb3NFcnJvciwgZXJyb3IubWVzc2FnZSwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSk7XG5cbiAgYXhpb3NFcnJvci5jYXVzZSA9IGVycm9yO1xuXG4gIGF4aW9zRXJyb3IubmFtZSA9IGVycm9yLm5hbWU7XG5cbiAgY3VzdG9tUHJvcHMgJiYgT2JqZWN0LmFzc2lnbihheGlvc0Vycm9yLCBjdXN0b21Qcm9wcyk7XG5cbiAgcmV0dXJuIGF4aW9zRXJyb3I7XG59O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc3RyaWN0XG52YXIgaHR0cEFkYXB0ZXIgPSBudWxsO1xuXG4vKipcbiAqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIHRoaW5nIGlzIGEgYXJyYXkgb3IganMgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0aGluZyAtIFRoZSBvYmplY3Qgb3IgYXJyYXkgdG8gYmUgdmlzaXRlZC5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNWaXNpdGFibGUodGhpbmcpIHtcbiAgcmV0dXJuIHV0aWxzJDEuaXNQbGFpbk9iamVjdCh0aGluZykgfHwgdXRpbHMkMS5pc0FycmF5KHRoaW5nKTtcbn1cblxuLyoqXG4gKiBJdCByZW1vdmVzIHRoZSBicmFja2V0cyBmcm9tIHRoZSBlbmQgb2YgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgcGFyYW1ldGVyLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSBrZXkgd2l0aG91dCB0aGUgYnJhY2tldHMuXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUJyYWNrZXRzKGtleSkge1xuICByZXR1cm4gdXRpbHMkMS5lbmRzV2l0aChrZXksICdbXScpID8ga2V5LnNsaWNlKDAsIC0yKSA6IGtleTtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHBhdGgsIGEga2V5LCBhbmQgYSBib29sZWFuLCBhbmQgcmV0dXJucyBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gVGhlIHBhdGggdG8gdGhlIGN1cnJlbnQga2V5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIGN1cnJlbnQgb2JqZWN0IGJlaW5nIGl0ZXJhdGVkIG92ZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gZG90cyAtIElmIHRydWUsIHRoZSBrZXkgd2lsbCBiZSByZW5kZXJlZCB3aXRoIGRvdHMgaW5zdGVhZCBvZiBicmFja2V0cy5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgcGF0aCB0byB0aGUgY3VycmVudCBrZXkuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlcktleShwYXRoLCBrZXksIGRvdHMpIHtcbiAgaWYgKCFwYXRoKSByZXR1cm4ga2V5O1xuICByZXR1cm4gcGF0aC5jb25jYXQoa2V5KS5tYXAoZnVuY3Rpb24gZWFjaCh0b2tlbiwgaSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIHRva2VuID0gcmVtb3ZlQnJhY2tldHModG9rZW4pO1xuICAgIHJldHVybiAhZG90cyAmJiBpID8gJ1snICsgdG9rZW4gKyAnXScgOiB0b2tlbjtcbiAgfSkuam9pbihkb3RzID8gJy4nIDogJycpO1xufVxuXG4vKipcbiAqIElmIHRoZSBhcnJheSBpcyBhbiBhcnJheSBhbmQgbm9uZSBvZiBpdHMgZWxlbWVudHMgYXJlIHZpc2l0YWJsZSwgdGhlbiBpdCdzIGEgZmxhdCBhcnJheS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PGFueT59IGFyciAtIFRoZSBhcnJheSB0byBjaGVja1xuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0ZsYXRBcnJheShhcnIpIHtcbiAgcmV0dXJuIHV0aWxzJDEuaXNBcnJheShhcnIpICYmICFhcnIuc29tZShpc1Zpc2l0YWJsZSk7XG59XG5cbmNvbnN0IHByZWRpY2F0ZXMgPSB1dGlscyQxLnRvRmxhdE9iamVjdCh1dGlscyQxLCB7fSwgbnVsbCwgZnVuY3Rpb24gZmlsdGVyKHByb3ApIHtcbiAgcmV0dXJuIC9eaXNbQS1aXS8udGVzdChwcm9wKTtcbn0pO1xuXG4vKipcbiAqIENvbnZlcnQgYSBkYXRhIG9iamVjdCB0byBGb3JtRGF0YVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7P09iamVjdH0gW2Zvcm1EYXRhXVxuICogQHBhcmFtIHs/T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLnZpc2l0b3JdXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLm1ldGFUb2tlbnMgPSB0cnVlXVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5kb3RzID0gZmFsc2VdXG4gKiBAcGFyYW0gez9Cb29sZWFufSBbb3B0aW9ucy5pbmRleGVzID0gZmFsc2VdXG4gKlxuICogQHJldHVybnMge09iamVjdH1cbiAqKi9cblxuLyoqXG4gKiBJdCBjb252ZXJ0cyBhbiBvYmplY3QgaW50byBhIEZvcm1EYXRhIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PGFueSwgYW55Pn0gb2JqIC0gVGhlIG9iamVjdCB0byBjb252ZXJ0IHRvIGZvcm0gZGF0YS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtRGF0YSAtIFRoZSBGb3JtRGF0YSBvYmplY3QgdG8gYXBwZW5kIHRvLlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBvcHRpb25zXG4gKlxuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gdG9Gb3JtRGF0YShvYmosIGZvcm1EYXRhLCBvcHRpb25zKSB7XG4gIGlmICghdXRpbHMkMS5pc09iamVjdChvYmopKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgZm9ybURhdGEgPSBmb3JtRGF0YSB8fCBuZXcgKEZvcm1EYXRhKSgpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBvcHRpb25zID0gdXRpbHMkMS50b0ZsYXRPYmplY3Qob3B0aW9ucywge1xuICAgIG1ldGFUb2tlbnM6IHRydWUsXG4gICAgZG90czogZmFsc2UsXG4gICAgaW5kZXhlczogZmFsc2VcbiAgfSwgZmFsc2UsIGZ1bmN0aW9uIGRlZmluZWQob3B0aW9uLCBzb3VyY2UpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgICByZXR1cm4gIXV0aWxzJDEuaXNVbmRlZmluZWQoc291cmNlW29wdGlvbl0pO1xuICB9KTtcblxuICBjb25zdCBtZXRhVG9rZW5zID0gb3B0aW9ucy5tZXRhVG9rZW5zO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgY29uc3QgdmlzaXRvciA9IG9wdGlvbnMudmlzaXRvciB8fCBkZWZhdWx0VmlzaXRvcjtcbiAgY29uc3QgZG90cyA9IG9wdGlvbnMuZG90cztcbiAgY29uc3QgaW5kZXhlcyA9IG9wdGlvbnMuaW5kZXhlcztcbiAgY29uc3QgX0Jsb2IgPSBvcHRpb25zLkJsb2IgfHwgdHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnICYmIEJsb2I7XG4gIGNvbnN0IHVzZUJsb2IgPSBfQmxvYiAmJiB1dGlscyQxLmlzU3BlY0NvbXBsaWFudEZvcm0oZm9ybURhdGEpO1xuXG4gIGlmICghdXRpbHMkMS5pc0Z1bmN0aW9uKHZpc2l0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndmlzaXRvciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbnZlcnRWYWx1ZSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuICcnO1xuXG4gICAgaWYgKHV0aWxzJDEuaXNEYXRlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlLnRvSVNPU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgaWYgKCF1c2VCbG9iICYmIHV0aWxzJDEuaXNCbG9iKHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ0Jsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuJyk7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzJDEuaXNBcnJheUJ1ZmZlcih2YWx1ZSkgfHwgdXRpbHMkMS5pc1R5cGVkQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdXNlQmxvYiAmJiB0eXBlb2YgQmxvYiA9PT0gJ2Z1bmN0aW9uJyA/IG5ldyBCbG9iKFt2YWx1ZV0pIDogQnVmZmVyLmZyb20odmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZhdWx0IHZpc2l0b3IuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSBrZXlcbiAgICogQHBhcmFtIHtBcnJheTxTdHJpbmd8TnVtYmVyPn0gcGF0aFxuICAgKiBAdGhpcyB7Rm9ybURhdGF9XG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSByZXR1cm4gdHJ1ZSB0byB2aXNpdCB0aGUgZWFjaCBwcm9wIG9mIHRoZSB2YWx1ZSByZWN1cnNpdmVseVxuICAgKi9cbiAgZnVuY3Rpb24gZGVmYXVsdFZpc2l0b3IodmFsdWUsIGtleSwgcGF0aCkge1xuICAgIGxldCBhcnIgPSB2YWx1ZTtcblxuICAgIGlmICh2YWx1ZSAmJiAhcGF0aCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAodXRpbHMkMS5lbmRzV2l0aChrZXksICd7fScpKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBrZXkgPSBtZXRhVG9rZW5zID8ga2V5IDoga2V5LnNsaWNlKDAsIC0yKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIHZhbHVlID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgKHV0aWxzJDEuaXNBcnJheSh2YWx1ZSkgJiYgaXNGbGF0QXJyYXkodmFsdWUpKSB8fFxuICAgICAgICAoKHV0aWxzJDEuaXNGaWxlTGlzdCh2YWx1ZSkgfHwgdXRpbHMkMS5lbmRzV2l0aChrZXksICdbXScpKSAmJiAoYXJyID0gdXRpbHMkMS50b0FycmF5KHZhbHVlKSlcbiAgICAgICAgKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAga2V5ID0gcmVtb3ZlQnJhY2tldHMoa2V5KTtcblxuICAgICAgICBhcnIuZm9yRWFjaChmdW5jdGlvbiBlYWNoKGVsLCBpbmRleCkge1xuICAgICAgICAgICEodXRpbHMkMS5pc1VuZGVmaW5lZChlbCkgfHwgZWwgPT09IG51bGwpICYmIGZvcm1EYXRhLmFwcGVuZChcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXN0ZWQtdGVybmFyeVxuICAgICAgICAgICAgaW5kZXhlcyA9PT0gdHJ1ZSA/IHJlbmRlcktleShba2V5XSwgaW5kZXgsIGRvdHMpIDogKGluZGV4ZXMgPT09IG51bGwgPyBrZXkgOiBrZXkgKyAnW10nKSxcbiAgICAgICAgICAgIGNvbnZlcnRWYWx1ZShlbClcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc1Zpc2l0YWJsZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZvcm1EYXRhLmFwcGVuZChyZW5kZXJLZXkocGF0aCwga2V5LCBkb3RzKSwgY29udmVydFZhbHVlKHZhbHVlKSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBzdGFjayA9IFtdO1xuXG4gIGNvbnN0IGV4cG9zZWRIZWxwZXJzID0gT2JqZWN0LmFzc2lnbihwcmVkaWNhdGVzLCB7XG4gICAgZGVmYXVsdFZpc2l0b3IsXG4gICAgY29udmVydFZhbHVlLFxuICAgIGlzVmlzaXRhYmxlXG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGJ1aWxkKHZhbHVlLCBwYXRoKSB7XG4gICAgaWYgKHV0aWxzJDEuaXNVbmRlZmluZWQodmFsdWUpKSByZXR1cm47XG5cbiAgICBpZiAoc3RhY2suaW5kZXhPZih2YWx1ZSkgIT09IC0xKSB7XG4gICAgICB0aHJvdyBFcnJvcignQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICcgKyBwYXRoLmpvaW4oJy4nKSk7XG4gICAgfVxuXG4gICAgc3RhY2sucHVzaCh2YWx1ZSk7XG5cbiAgICB1dGlscyQxLmZvckVhY2godmFsdWUsIGZ1bmN0aW9uIGVhY2goZWwsIGtleSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gISh1dGlscyQxLmlzVW5kZWZpbmVkKGVsKSB8fCBlbCA9PT0gbnVsbCkgJiYgdmlzaXRvci5jYWxsKFxuICAgICAgICBmb3JtRGF0YSwgZWwsIHV0aWxzJDEuaXNTdHJpbmcoa2V5KSA/IGtleS50cmltKCkgOiBrZXksIHBhdGgsIGV4cG9zZWRIZWxwZXJzXG4gICAgICApO1xuXG4gICAgICBpZiAocmVzdWx0ID09PSB0cnVlKSB7XG4gICAgICAgIGJ1aWxkKGVsLCBwYXRoID8gcGF0aC5jb25jYXQoa2V5KSA6IFtrZXldKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHN0YWNrLnBvcCgpO1xuICB9XG5cbiAgaWYgKCF1dGlscyQxLmlzT2JqZWN0KG9iaikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdkYXRhIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cblxuICBidWlsZChvYmopO1xuXG4gIHJldHVybiBmb3JtRGF0YTtcbn1cblxuLyoqXG4gKiBJdCBlbmNvZGVzIGEgc3RyaW5nIGJ5IHJlcGxhY2luZyBhbGwgY2hhcmFjdGVycyB0aGF0IGFyZSBub3QgaW4gdGhlIHVucmVzZXJ2ZWQgc2V0IHdpdGhcbiAqIHRoZWlyIHBlcmNlbnQtZW5jb2RlZCBlcXVpdmFsZW50c1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgLSBUaGUgc3RyaW5nIHRvIGVuY29kZS5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZW5jb2RlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGVuY29kZSQxKHN0cikge1xuICBjb25zdCBjaGFyTWFwID0ge1xuICAgICchJzogJyUyMScsXG4gICAgXCInXCI6ICclMjcnLFxuICAgICcoJzogJyUyOCcsXG4gICAgJyknOiAnJTI5JyxcbiAgICAnfic6ICclN0UnLFxuICAgICclMjAnOiAnKycsXG4gICAgJyUwMCc6ICdcXHgwMCdcbiAgfTtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHIpLnJlcGxhY2UoL1shJygpfl18JTIwfCUwMC9nLCBmdW5jdGlvbiByZXBsYWNlcihtYXRjaCkge1xuICAgIHJldHVybiBjaGFyTWFwW21hdGNoXTtcbiAgfSk7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBwYXJhbXMgb2JqZWN0IGFuZCBjb252ZXJ0cyBpdCB0byBhIEZvcm1EYXRhIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgdG8gYmUgY29udmVydGVkIHRvIGEgRm9ybURhdGEgb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgb2JqZWN0IHBhc3NlZCB0byB0aGUgQXhpb3MgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIEF4aW9zVVJMU2VhcmNoUGFyYW1zKHBhcmFtcywgb3B0aW9ucykge1xuICB0aGlzLl9wYWlycyA9IFtdO1xuXG4gIHBhcmFtcyAmJiB0b0Zvcm1EYXRhKHBhcmFtcywgdGhpcywgb3B0aW9ucyk7XG59XG5cbmNvbnN0IHByb3RvdHlwZSA9IEF4aW9zVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZTtcblxucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uIGFwcGVuZChuYW1lLCB2YWx1ZSkge1xuICB0aGlzLl9wYWlycy5wdXNoKFtuYW1lLCB2YWx1ZV0pO1xufTtcblxucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoZW5jb2Rlcikge1xuICBjb25zdCBfZW5jb2RlID0gZW5jb2RlciA/IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGVuY29kZXIuY2FsbCh0aGlzLCB2YWx1ZSwgZW5jb2RlJDEpO1xuICB9IDogZW5jb2RlJDE7XG5cbiAgcmV0dXJuIHRoaXMuX3BhaXJzLm1hcChmdW5jdGlvbiBlYWNoKHBhaXIpIHtcbiAgICByZXR1cm4gX2VuY29kZShwYWlyWzBdKSArICc9JyArIF9lbmNvZGUocGFpclsxXSk7XG4gIH0sICcnKS5qb2luKCcmJyk7XG59O1xuXG4vKipcbiAqIEl0IHJlcGxhY2VzIGFsbCBpbnN0YW5jZXMgb2YgdGhlIGNoYXJhY3RlcnMgYDpgLCBgJGAsIGAsYCwgYCtgLCBgW2AsIGFuZCBgXWAgd2l0aCB0aGVpclxuICogVVJJIGVuY29kZWQgY291bnRlcnBhcnRzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbCBUaGUgdmFsdWUgdG8gYmUgZW5jb2RlZC5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZW5jb2RlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZW5jb2RlKHZhbCkge1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHZhbCkuXG4gICAgcmVwbGFjZSgvJTNBL2dpLCAnOicpLlxuICAgIHJlcGxhY2UoLyUyNC9nLCAnJCcpLlxuICAgIHJlcGxhY2UoLyUyQy9naSwgJywnKS5cbiAgICByZXBsYWNlKC8lMjAvZywgJysnKS5cbiAgICByZXBsYWNlKC8lNUIvZ2ksICdbJykuXG4gICAgcmVwbGFjZSgvJTVEL2dpLCAnXScpO1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgVVJMIGJ5IGFwcGVuZGluZyBwYXJhbXMgdG8gdGhlIGVuZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIGJhc2Ugb2YgdGhlIHVybCAoZS5nLiwgaHR0cDovL3d3dy5nb29nbGUuY29tKVxuICogQHBhcmFtIHtvYmplY3R9IFtwYXJhbXNdIFRoZSBwYXJhbXMgdG8gYmUgYXBwZW5kZWRcbiAqIEBwYXJhbSB7P29iamVjdH0gb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgdXJsXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkVVJMKHVybCwgcGFyYW1zLCBvcHRpb25zKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICBpZiAoIXBhcmFtcykge1xuICAgIHJldHVybiB1cmw7XG4gIH1cbiAgXG4gIGNvbnN0IF9lbmNvZGUgPSBvcHRpb25zICYmIG9wdGlvbnMuZW5jb2RlIHx8IGVuY29kZTtcblxuICBjb25zdCBzZXJpYWxpemVGbiA9IG9wdGlvbnMgJiYgb3B0aW9ucy5zZXJpYWxpemU7XG5cbiAgbGV0IHNlcmlhbGl6ZWRQYXJhbXM7XG5cbiAgaWYgKHNlcmlhbGl6ZUZuKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHNlcmlhbGl6ZUZuKHBhcmFtcywgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHV0aWxzJDEuaXNVUkxTZWFyY2hQYXJhbXMocGFyYW1zKSA/XG4gICAgICBwYXJhbXMudG9TdHJpbmcoKSA6XG4gICAgICBuZXcgQXhpb3NVUkxTZWFyY2hQYXJhbXMocGFyYW1zLCBvcHRpb25zKS50b1N0cmluZyhfZW5jb2RlKTtcbiAgfVxuXG4gIGlmIChzZXJpYWxpemVkUGFyYW1zKSB7XG4gICAgY29uc3QgaGFzaG1hcmtJbmRleCA9IHVybC5pbmRleE9mKFwiI1wiKTtcblxuICAgIGlmIChoYXNobWFya0luZGV4ICE9PSAtMSkge1xuICAgICAgdXJsID0gdXJsLnNsaWNlKDAsIGhhc2htYXJrSW5kZXgpO1xuICAgIH1cbiAgICB1cmwgKz0gKHVybC5pbmRleE9mKCc/JykgPT09IC0xID8gJz8nIDogJyYnKSArIHNlcmlhbGl6ZWRQYXJhbXM7XG4gIH1cblxuICByZXR1cm4gdXJsO1xufVxuXG5jbGFzcyBJbnRlcmNlcHRvck1hbmFnZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmhhbmRsZXJzID0gW107XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgbmV3IGludGVyY2VwdG9yIHRvIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdWxmaWxsZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgdGhlbmAgZm9yIGEgYFByb21pc2VgXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHJlamVjdGAgZm9yIGEgYFByb21pc2VgXG4gICAqXG4gICAqIEByZXR1cm4ge051bWJlcn0gQW4gSUQgdXNlZCB0byByZW1vdmUgaW50ZXJjZXB0b3IgbGF0ZXJcbiAgICovXG4gIHVzZShmdWxmaWxsZWQsIHJlamVjdGVkLCBvcHRpb25zKSB7XG4gICAgdGhpcy5oYW5kbGVycy5wdXNoKHtcbiAgICAgIGZ1bGZpbGxlZCxcbiAgICAgIHJlamVjdGVkLFxuICAgICAgc3luY2hyb25vdXM6IG9wdGlvbnMgPyBvcHRpb25zLnN5bmNocm9ub3VzIDogZmFsc2UsXG4gICAgICBydW5XaGVuOiBvcHRpb25zID8gb3B0aW9ucy5ydW5XaGVuIDogbnVsbFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXJzLmxlbmd0aCAtIDE7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFuIGludGVyY2VwdG9yIGZyb20gdGhlIHN0YWNrXG4gICAqXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBpZCBUaGUgSUQgdGhhdCB3YXMgcmV0dXJuZWQgYnkgYHVzZWBcbiAgICpcbiAgICogQHJldHVybnMge0Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgaW50ZXJjZXB0b3Igd2FzIHJlbW92ZWQsIGBmYWxzZWAgb3RoZXJ3aXNlXG4gICAqL1xuICBlamVjdChpZCkge1xuICAgIGlmICh0aGlzLmhhbmRsZXJzW2lkXSkge1xuICAgICAgdGhpcy5oYW5kbGVyc1tpZF0gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciBhbGwgaW50ZXJjZXB0b3JzIGZyb20gdGhlIHN0YWNrXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgY2xlYXIoKSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlcnMpIHtcbiAgICAgIHRoaXMuaGFuZGxlcnMgPSBbXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSXRlcmF0ZSBvdmVyIGFsbCB0aGUgcmVnaXN0ZXJlZCBpbnRlcmNlcHRvcnNcbiAgICpcbiAgICogVGhpcyBtZXRob2QgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3Igc2tpcHBpbmcgb3ZlciBhbnlcbiAgICogaW50ZXJjZXB0b3JzIHRoYXQgbWF5IGhhdmUgYmVjb21lIGBudWxsYCBjYWxsaW5nIGBlamVjdGAuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGludGVyY2VwdG9yXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZm9yRWFjaChmbikge1xuICAgIHV0aWxzJDEuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLCBmdW5jdGlvbiBmb3JFYWNoSGFuZGxlcihoKSB7XG4gICAgICBpZiAoaCAhPT0gbnVsbCkge1xuICAgICAgICBmbihoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG52YXIgSW50ZXJjZXB0b3JNYW5hZ2VyJDEgPSBJbnRlcmNlcHRvck1hbmFnZXI7XG5cbnZhciB0cmFuc2l0aW9uYWxEZWZhdWx0cyA9IHtcbiAgc2lsZW50SlNPTlBhcnNpbmc6IHRydWUsXG4gIGZvcmNlZEpTT05QYXJzaW5nOiB0cnVlLFxuICBjbGFyaWZ5VGltZW91dEVycm9yOiBmYWxzZVxufTtcblxudmFyIFVSTFNlYXJjaFBhcmFtcyQxID0gdHlwZW9mIFVSTFNlYXJjaFBhcmFtcyAhPT0gJ3VuZGVmaW5lZCcgPyBVUkxTZWFyY2hQYXJhbXMgOiBBeGlvc1VSTFNlYXJjaFBhcmFtcztcblxudmFyIEZvcm1EYXRhJDEgPSB0eXBlb2YgRm9ybURhdGEgIT09ICd1bmRlZmluZWQnID8gRm9ybURhdGEgOiBudWxsO1xuXG52YXIgQmxvYiQxID0gdHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnID8gQmxvYiA6IG51bGw7XG5cbnZhciBwbGF0Zm9ybSQxID0ge1xuICBpc0Jyb3dzZXI6IHRydWUsXG4gIGNsYXNzZXM6IHtcbiAgICBVUkxTZWFyY2hQYXJhbXM6IFVSTFNlYXJjaFBhcmFtcyQxLFxuICAgIEZvcm1EYXRhOiBGb3JtRGF0YSQxLFxuICAgIEJsb2I6IEJsb2IkMVxuICB9LFxuICBwcm90b2NvbHM6IFsnaHR0cCcsICdodHRwcycsICdmaWxlJywgJ2Jsb2InLCAndXJsJywgJ2RhdGEnXVxufTtcblxuY29uc3QgaGFzQnJvd3NlckVudiA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50XG4gKlxuICogVGhpcyBhbGxvd3MgYXhpb3MgdG8gcnVuIGluIGEgd2ViIHdvcmtlciwgYW5kIHJlYWN0LW5hdGl2ZS5cbiAqIEJvdGggZW52aXJvbm1lbnRzIHN1cHBvcnQgWE1MSHR0cFJlcXVlc3QsIGJ1dCBub3QgZnVsbHkgc3RhbmRhcmQgZ2xvYmFscy5cbiAqXG4gKiB3ZWIgd29ya2VyczpcbiAqICB0eXBlb2Ygd2luZG93IC0+IHVuZGVmaW5lZFxuICogIHR5cGVvZiBkb2N1bWVudCAtPiB1bmRlZmluZWRcbiAqXG4gKiByZWFjdC1uYXRpdmU6XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ1JlYWN0TmF0aXZlJ1xuICogbmF0aXZlc2NyaXB0XG4gKiAgbmF2aWdhdG9yLnByb2R1Y3QgLT4gJ05hdGl2ZVNjcmlwdCcgb3IgJ05TJ1xuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5jb25zdCBoYXNTdGFuZGFyZEJyb3dzZXJFbnYgPSAoXG4gIChwcm9kdWN0KSA9PiB7XG4gICAgcmV0dXJuIGhhc0Jyb3dzZXJFbnYgJiYgWydSZWFjdE5hdGl2ZScsICdOYXRpdmVTY3JpcHQnLCAnTlMnXS5pbmRleE9mKHByb2R1Y3QpIDwgMFxuICB9KSh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IucHJvZHVjdCk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHdlJ3JlIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIHdlYldvcmtlciBlbnZpcm9ubWVudFxuICpcbiAqIEFsdGhvdWdoIHRoZSBgaXNTdGFuZGFyZEJyb3dzZXJFbnZgIG1ldGhvZCBpbmRpY2F0ZXMgdGhhdFxuICogYGFsbG93cyBheGlvcyB0byBydW4gaW4gYSB3ZWIgd29ya2VyYCwgdGhlIFdlYldvcmtlciB3aWxsIHN0aWxsIGJlXG4gKiBmaWx0ZXJlZCBvdXQgZHVlIHRvIGl0cyBqdWRnbWVudCBzdGFuZGFyZFxuICogYHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCdgLlxuICogVGhpcyBsZWFkcyB0byBhIHByb2JsZW0gd2hlbiBheGlvcyBwb3N0IGBGb3JtRGF0YWAgaW4gd2ViV29ya2VyXG4gKi9cbmNvbnN0IGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudiA9ICgoKSA9PiB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIHNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSAmJlxuICAgIHR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHMgPT09ICdmdW5jdGlvbidcbiAgKTtcbn0pKCk7XG5cbmNvbnN0IG9yaWdpbiA9IGhhc0Jyb3dzZXJFbnYgJiYgd2luZG93LmxvY2F0aW9uLmhyZWYgfHwgJ2h0dHA6Ly9sb2NhbGhvc3QnO1xuXG52YXIgdXRpbHMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgaGFzQnJvd3NlckVudjogaGFzQnJvd3NlckVudixcbiAgaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52OiBoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYsXG4gIGhhc1N0YW5kYXJkQnJvd3NlckVudjogaGFzU3RhbmRhcmRCcm93c2VyRW52LFxuICBvcmlnaW46IG9yaWdpblxufSk7XG5cbnZhciBwbGF0Zm9ybSA9IHtcbiAgLi4udXRpbHMsXG4gIC4uLnBsYXRmb3JtJDFcbn07XG5cbmZ1bmN0aW9uIHRvVVJMRW5jb2RlZEZvcm0oZGF0YSwgb3B0aW9ucykge1xuICByZXR1cm4gdG9Gb3JtRGF0YShkYXRhLCBuZXcgcGxhdGZvcm0uY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMoKSwgT2JqZWN0LmFzc2lnbih7XG4gICAgdmlzaXRvcjogZnVuY3Rpb24odmFsdWUsIGtleSwgcGF0aCwgaGVscGVycykge1xuICAgICAgaWYgKHBsYXRmb3JtLmlzTm9kZSAmJiB1dGlscyQxLmlzQnVmZmVyKHZhbHVlKSkge1xuICAgICAgICB0aGlzLmFwcGVuZChrZXksIHZhbHVlLnRvU3RyaW5nKCdiYXNlNjQnKSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGhlbHBlcnMuZGVmYXVsdFZpc2l0b3IuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gIH0sIG9wdGlvbnMpKTtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHN0cmluZyBsaWtlIGBmb29beF1beV1bel1gIGFuZCByZXR1cm5zIGFuIGFycmF5IGxpa2UgYFsnZm9vJywgJ3gnLCAneScsICd6J11cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKlxuICogQHJldHVybnMgQW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAqL1xuZnVuY3Rpb24gcGFyc2VQcm9wUGF0aChuYW1lKSB7XG4gIC8vIGZvb1t4XVt5XVt6XVxuICAvLyBmb28ueC55LnpcbiAgLy8gZm9vLXgteS16XG4gIC8vIGZvbyB4IHkgelxuICByZXR1cm4gdXRpbHMkMS5tYXRjaEFsbCgvXFx3K3xcXFsoXFx3KildL2csIG5hbWUpLm1hcChtYXRjaCA9PiB7XG4gICAgcmV0dXJuIG1hdGNoWzBdID09PSAnW10nID8gJycgOiBtYXRjaFsxXSB8fCBtYXRjaFswXTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ29udmVydCBhbiBhcnJheSB0byBhbiBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtBcnJheTxhbnk+fSBhcnIgLSBUaGUgYXJyYXkgdG8gY29udmVydCB0byBhbiBvYmplY3QuXG4gKlxuICogQHJldHVybnMgQW4gb2JqZWN0IHdpdGggdGhlIHNhbWUga2V5cyBhbmQgdmFsdWVzIGFzIHRoZSBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlUb09iamVjdChhcnIpIHtcbiAgY29uc3Qgb2JqID0ge307XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhhcnIpO1xuICBsZXQgaTtcbiAgY29uc3QgbGVuID0ga2V5cy5sZW5ndGg7XG4gIGxldCBrZXk7XG4gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIGtleSA9IGtleXNbaV07XG4gICAgb2JqW2tleV0gPSBhcnJba2V5XTtcbiAgfVxuICByZXR1cm4gb2JqO1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgRm9ybURhdGEgb2JqZWN0IGFuZCByZXR1cm5zIGEgSmF2YVNjcmlwdCBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9ybURhdGEgVGhlIEZvcm1EYXRhIG9iamVjdCB0byBjb252ZXJ0IHRvIEpTT04uXG4gKlxuICogQHJldHVybnMge09iamVjdDxzdHJpbmcsIGFueT4gfCBudWxsfSBUaGUgY29udmVydGVkIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gZm9ybURhdGFUb0pTT04oZm9ybURhdGEpIHtcbiAgZnVuY3Rpb24gYnVpbGRQYXRoKHBhdGgsIHZhbHVlLCB0YXJnZXQsIGluZGV4KSB7XG4gICAgbGV0IG5hbWUgPSBwYXRoW2luZGV4KytdO1xuXG4gICAgaWYgKG5hbWUgPT09ICdfX3Byb3RvX18nKSByZXR1cm4gdHJ1ZTtcblxuICAgIGNvbnN0IGlzTnVtZXJpY0tleSA9IE51bWJlci5pc0Zpbml0ZSgrbmFtZSk7XG4gICAgY29uc3QgaXNMYXN0ID0gaW5kZXggPj0gcGF0aC5sZW5ndGg7XG4gICAgbmFtZSA9ICFuYW1lICYmIHV0aWxzJDEuaXNBcnJheSh0YXJnZXQpID8gdGFyZ2V0Lmxlbmd0aCA6IG5hbWU7XG5cbiAgICBpZiAoaXNMYXN0KSB7XG4gICAgICBpZiAodXRpbHMkMS5oYXNPd25Qcm9wKHRhcmdldCwgbmFtZSkpIHtcbiAgICAgICAgdGFyZ2V0W25hbWVdID0gW3RhcmdldFtuYW1lXSwgdmFsdWVdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0W25hbWVdID0gdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAhaXNOdW1lcmljS2V5O1xuICAgIH1cblxuICAgIGlmICghdGFyZ2V0W25hbWVdIHx8ICF1dGlscyQxLmlzT2JqZWN0KHRhcmdldFtuYW1lXSkpIHtcbiAgICAgIHRhcmdldFtuYW1lXSA9IFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGJ1aWxkUGF0aChwYXRoLCB2YWx1ZSwgdGFyZ2V0W25hbWVdLCBpbmRleCk7XG5cbiAgICBpZiAocmVzdWx0ICYmIHV0aWxzJDEuaXNBcnJheSh0YXJnZXRbbmFtZV0pKSB7XG4gICAgICB0YXJnZXRbbmFtZV0gPSBhcnJheVRvT2JqZWN0KHRhcmdldFtuYW1lXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICFpc051bWVyaWNLZXk7XG4gIH1cblxuICBpZiAodXRpbHMkMS5pc0Zvcm1EYXRhKGZvcm1EYXRhKSAmJiB1dGlscyQxLmlzRnVuY3Rpb24oZm9ybURhdGEuZW50cmllcykpIHtcbiAgICBjb25zdCBvYmogPSB7fTtcblxuICAgIHV0aWxzJDEuZm9yRWFjaEVudHJ5KGZvcm1EYXRhLCAobmFtZSwgdmFsdWUpID0+IHtcbiAgICAgIGJ1aWxkUGF0aChwYXJzZVByb3BQYXRoKG5hbWUpLCB2YWx1ZSwgb2JqLCAwKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHN0cmluZywgdHJpZXMgdG8gcGFyc2UgaXQsIGFuZCBpZiBpdCBmYWlscywgaXQgcmV0dXJucyB0aGUgc3RyaW5naWZpZWQgdmVyc2lvblxuICogb2YgdGhlIGlucHV0XG4gKlxuICogQHBhcmFtIHthbnl9IHJhd1ZhbHVlIC0gVGhlIHZhbHVlIHRvIGJlIHN0cmluZ2lmaWVkLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcGFyc2VyIC0gQSBmdW5jdGlvbiB0aGF0IHBhcnNlcyBhIHN0cmluZyBpbnRvIGEgSmF2YVNjcmlwdCBvYmplY3QuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlbmNvZGVyIC0gQSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgdmFsdWUgYW5kIHJldHVybnMgYSBzdHJpbmcuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gQSBzdHJpbmdpZmllZCB2ZXJzaW9uIG9mIHRoZSByYXdWYWx1ZS5cbiAqL1xuZnVuY3Rpb24gc3RyaW5naWZ5U2FmZWx5KHJhd1ZhbHVlLCBwYXJzZXIsIGVuY29kZXIpIHtcbiAgaWYgKHV0aWxzJDEuaXNTdHJpbmcocmF3VmFsdWUpKSB7XG4gICAgdHJ5IHtcbiAgICAgIChwYXJzZXIgfHwgSlNPTi5wYXJzZSkocmF3VmFsdWUpO1xuICAgICAgcmV0dXJuIHV0aWxzJDEudHJpbShyYXdWYWx1ZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUubmFtZSAhPT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoZW5jb2RlciB8fCBKU09OLnN0cmluZ2lmeSkocmF3VmFsdWUpO1xufVxuXG5jb25zdCBkZWZhdWx0cyA9IHtcblxuICB0cmFuc2l0aW9uYWw6IHRyYW5zaXRpb25hbERlZmF1bHRzLFxuXG4gIGFkYXB0ZXI6IFsneGhyJywgJ2h0dHAnLCAnZmV0Y2gnXSxcblxuICB0cmFuc2Zvcm1SZXF1ZXN0OiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVxdWVzdChkYXRhLCBoZWFkZXJzKSB7XG4gICAgY29uc3QgY29udGVudFR5cGUgPSBoZWFkZXJzLmdldENvbnRlbnRUeXBlKCkgfHwgJyc7XG4gICAgY29uc3QgaGFzSlNPTkNvbnRlbnRUeXBlID0gY29udGVudFR5cGUuaW5kZXhPZignYXBwbGljYXRpb24vanNvbicpID4gLTE7XG4gICAgY29uc3QgaXNPYmplY3RQYXlsb2FkID0gdXRpbHMkMS5pc09iamVjdChkYXRhKTtcblxuICAgIGlmIChpc09iamVjdFBheWxvYWQgJiYgdXRpbHMkMS5pc0hUTUxGb3JtKGRhdGEpKSB7XG4gICAgICBkYXRhID0gbmV3IEZvcm1EYXRhKGRhdGEpO1xuICAgIH1cblxuICAgIGNvbnN0IGlzRm9ybURhdGEgPSB1dGlscyQxLmlzRm9ybURhdGEoZGF0YSk7XG5cbiAgICBpZiAoaXNGb3JtRGF0YSkge1xuICAgICAgcmV0dXJuIGhhc0pTT05Db250ZW50VHlwZSA/IEpTT04uc3RyaW5naWZ5KGZvcm1EYXRhVG9KU09OKGRhdGEpKSA6IGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzJDEuaXNBcnJheUJ1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMkMS5pc0J1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMkMS5pc1N0cmVhbShkYXRhKSB8fFxuICAgICAgdXRpbHMkMS5pc0ZpbGUoZGF0YSkgfHxcbiAgICAgIHV0aWxzJDEuaXNCbG9iKGRhdGEpIHx8XG4gICAgICB1dGlscyQxLmlzUmVhZGFibGVTdHJlYW0oZGF0YSlcbiAgICApIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBpZiAodXRpbHMkMS5pc0FycmF5QnVmZmVyVmlldyhkYXRhKSkge1xuICAgICAgcmV0dXJuIGRhdGEuYnVmZmVyO1xuICAgIH1cbiAgICBpZiAodXRpbHMkMS5pc1VSTFNlYXJjaFBhcmFtcyhkYXRhKSkge1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgnLCBmYWxzZSk7XG4gICAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGxldCBpc0ZpbGVMaXN0O1xuXG4gICAgaWYgKGlzT2JqZWN0UGF5bG9hZCkge1xuICAgICAgaWYgKGNvbnRlbnRUeXBlLmluZGV4T2YoJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpID4gLTEpIHtcbiAgICAgICAgcmV0dXJuIHRvVVJMRW5jb2RlZEZvcm0oZGF0YSwgdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKChpc0ZpbGVMaXN0ID0gdXRpbHMkMS5pc0ZpbGVMaXN0KGRhdGEpKSB8fCBjb250ZW50VHlwZS5pbmRleE9mKCdtdWx0aXBhcnQvZm9ybS1kYXRhJykgPiAtMSkge1xuICAgICAgICBjb25zdCBfRm9ybURhdGEgPSB0aGlzLmVudiAmJiB0aGlzLmVudi5Gb3JtRGF0YTtcblxuICAgICAgICByZXR1cm4gdG9Gb3JtRGF0YShcbiAgICAgICAgICBpc0ZpbGVMaXN0ID8geydmaWxlc1tdJzogZGF0YX0gOiBkYXRhLFxuICAgICAgICAgIF9Gb3JtRGF0YSAmJiBuZXcgX0Zvcm1EYXRhKCksXG4gICAgICAgICAgdGhpcy5mb3JtU2VyaWFsaXplclxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc09iamVjdFBheWxvYWQgfHwgaGFzSlNPTkNvbnRlbnRUeXBlICkge1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24vanNvbicsIGZhbHNlKTtcbiAgICAgIHJldHVybiBzdHJpbmdpZnlTYWZlbHkoZGF0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIHRyYW5zZm9ybVJlc3BvbnNlOiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVzcG9uc2UoZGF0YSkge1xuICAgIGNvbnN0IHRyYW5zaXRpb25hbCA9IHRoaXMudHJhbnNpdGlvbmFsIHx8IGRlZmF1bHRzLnRyYW5zaXRpb25hbDtcbiAgICBjb25zdCBmb3JjZWRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuZm9yY2VkSlNPTlBhcnNpbmc7XG4gICAgY29uc3QgSlNPTlJlcXVlc3RlZCA9IHRoaXMucmVzcG9uc2VUeXBlID09PSAnanNvbic7XG5cbiAgICBpZiAodXRpbHMkMS5pc1Jlc3BvbnNlKGRhdGEpIHx8IHV0aWxzJDEuaXNSZWFkYWJsZVN0cmVhbShkYXRhKSkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEgJiYgdXRpbHMkMS5pc1N0cmluZyhkYXRhKSAmJiAoKGZvcmNlZEpTT05QYXJzaW5nICYmICF0aGlzLnJlc3BvbnNlVHlwZSkgfHwgSlNPTlJlcXVlc3RlZCkpIHtcbiAgICAgIGNvbnN0IHNpbGVudEpTT05QYXJzaW5nID0gdHJhbnNpdGlvbmFsICYmIHRyYW5zaXRpb25hbC5zaWxlbnRKU09OUGFyc2luZztcbiAgICAgIGNvbnN0IHN0cmljdEpTT05QYXJzaW5nID0gIXNpbGVudEpTT05QYXJzaW5nICYmIEpTT05SZXF1ZXN0ZWQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoc3RyaWN0SlNPTlBhcnNpbmcpIHtcbiAgICAgICAgICBpZiAoZS5uYW1lID09PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgICAgICB0aHJvdyBBeGlvc0Vycm9yLmZyb20oZSwgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFLCB0aGlzLCBudWxsLCB0aGlzLnJlc3BvbnNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICAvKipcbiAgICogQSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyB0byBhYm9ydCBhIHJlcXVlc3QuIElmIHNldCB0byAwIChkZWZhdWx0KSBhXG4gICAqIHRpbWVvdXQgaXMgbm90IGNyZWF0ZWQuXG4gICAqL1xuICB0aW1lb3V0OiAwLFxuXG4gIHhzcmZDb29raWVOYW1lOiAnWFNSRi1UT0tFTicsXG4gIHhzcmZIZWFkZXJOYW1lOiAnWC1YU1JGLVRPS0VOJyxcblxuICBtYXhDb250ZW50TGVuZ3RoOiAtMSxcbiAgbWF4Qm9keUxlbmd0aDogLTEsXG5cbiAgZW52OiB7XG4gICAgRm9ybURhdGE6IHBsYXRmb3JtLmNsYXNzZXMuRm9ybURhdGEsXG4gICAgQmxvYjogcGxhdGZvcm0uY2xhc3Nlcy5CbG9iXG4gIH0sXG5cbiAgdmFsaWRhdGVTdGF0dXM6IGZ1bmN0aW9uIHZhbGlkYXRlU3RhdHVzKHN0YXR1cykge1xuICAgIHJldHVybiBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMDtcbiAgfSxcblxuICBoZWFkZXJzOiB7XG4gICAgY29tbW9uOiB7XG4gICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKicsXG4gICAgICAnQ29udGVudC1UeXBlJzogdW5kZWZpbmVkXG4gICAgfVxuICB9XG59O1xuXG51dGlscyQxLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgKG1ldGhvZCkgPT4ge1xuICBkZWZhdWx0cy5oZWFkZXJzW21ldGhvZF0gPSB7fTtcbn0pO1xuXG52YXIgZGVmYXVsdHMkMSA9IGRlZmF1bHRzO1xuXG4vLyBSYXdBeGlvc0hlYWRlcnMgd2hvc2UgZHVwbGljYXRlcyBhcmUgaWdub3JlZCBieSBub2RlXG4vLyBjLmYuIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvaHR0cC5odG1sI2h0dHBfbWVzc2FnZV9oZWFkZXJzXG5jb25zdCBpZ25vcmVEdXBsaWNhdGVPZiA9IHV0aWxzJDEudG9PYmplY3RTZXQoW1xuICAnYWdlJywgJ2F1dGhvcml6YXRpb24nLCAnY29udGVudC1sZW5ndGgnLCAnY29udGVudC10eXBlJywgJ2V0YWcnLFxuICAnZXhwaXJlcycsICdmcm9tJywgJ2hvc3QnLCAnaWYtbW9kaWZpZWQtc2luY2UnLCAnaWYtdW5tb2RpZmllZC1zaW5jZScsXG4gICdsYXN0LW1vZGlmaWVkJywgJ2xvY2F0aW9uJywgJ21heC1mb3J3YXJkcycsICdwcm94eS1hdXRob3JpemF0aW9uJyxcbiAgJ3JlZmVyZXInLCAncmV0cnktYWZ0ZXInLCAndXNlci1hZ2VudCdcbl0pO1xuXG4vKipcbiAqIFBhcnNlIGhlYWRlcnMgaW50byBhbiBvYmplY3RcbiAqXG4gKiBgYGBcbiAqIERhdGU6IFdlZCwgMjcgQXVnIDIwMTQgMDg6NTg6NDkgR01UXG4gKiBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb25cbiAqIENvbm5lY3Rpb246IGtlZXAtYWxpdmVcbiAqIFRyYW5zZmVyLUVuY29kaW5nOiBjaHVua2VkXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gcmF3SGVhZGVycyBIZWFkZXJzIG5lZWRpbmcgdG8gYmUgcGFyc2VkXG4gKlxuICogQHJldHVybnMge09iamVjdH0gSGVhZGVycyBwYXJzZWQgaW50byBhbiBvYmplY3RcbiAqL1xudmFyIHBhcnNlSGVhZGVycyA9IHJhd0hlYWRlcnMgPT4ge1xuICBjb25zdCBwYXJzZWQgPSB7fTtcbiAgbGV0IGtleTtcbiAgbGV0IHZhbDtcbiAgbGV0IGk7XG5cbiAgcmF3SGVhZGVycyAmJiByYXdIZWFkZXJzLnNwbGl0KCdcXG4nKS5mb3JFYWNoKGZ1bmN0aW9uIHBhcnNlcihsaW5lKSB7XG4gICAgaSA9IGxpbmUuaW5kZXhPZignOicpO1xuICAgIGtleSA9IGxpbmUuc3Vic3RyaW5nKDAsIGkpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhbCA9IGxpbmUuc3Vic3RyaW5nKGkgKyAxKS50cmltKCk7XG5cbiAgICBpZiAoIWtleSB8fCAocGFyc2VkW2tleV0gJiYgaWdub3JlRHVwbGljYXRlT2Zba2V5XSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgIGlmIChwYXJzZWRba2V5XSkge1xuICAgICAgICBwYXJzZWRba2V5XS5wdXNoKHZhbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJzZWRba2V5XSA9IFt2YWxdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwYXJzZWRba2V5XSA9IHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gKyAnLCAnICsgdmFsIDogdmFsO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn07XG5cbmNvbnN0ICRpbnRlcm5hbHMgPSBTeW1ib2woJ2ludGVybmFscycpO1xuXG5mdW5jdGlvbiBub3JtYWxpemVIZWFkZXIoaGVhZGVyKSB7XG4gIHJldHVybiBoZWFkZXIgJiYgU3RyaW5nKGhlYWRlcikudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gZmFsc2UgfHwgdmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiB1dGlscyQxLmlzQXJyYXkodmFsdWUpID8gdmFsdWUubWFwKG5vcm1hbGl6ZVZhbHVlKSA6IFN0cmluZyh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVG9rZW5zKHN0cikge1xuICBjb25zdCB0b2tlbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBjb25zdCB0b2tlbnNSRSA9IC8oW15cXHMsOz1dKylcXHMqKD86PVxccyooW14sO10rKSk/L2c7XG4gIGxldCBtYXRjaDtcblxuICB3aGlsZSAoKG1hdGNoID0gdG9rZW5zUkUuZXhlYyhzdHIpKSkge1xuICAgIHRva2Vuc1ttYXRjaFsxXV0gPSBtYXRjaFsyXTtcbiAgfVxuXG4gIHJldHVybiB0b2tlbnM7XG59XG5cbmNvbnN0IGlzVmFsaWRIZWFkZXJOYW1lID0gKHN0cikgPT4gL15bLV9hLXpBLVowLTleYHx+LCEjJCUmJyorLl0rJC8udGVzdChzdHIudHJpbSgpKTtcblxuZnVuY3Rpb24gbWF0Y2hIZWFkZXJWYWx1ZShjb250ZXh0LCB2YWx1ZSwgaGVhZGVyLCBmaWx0ZXIsIGlzSGVhZGVyTmFtZUZpbHRlcikge1xuICBpZiAodXRpbHMkMS5pc0Z1bmN0aW9uKGZpbHRlcikpIHtcbiAgICByZXR1cm4gZmlsdGVyLmNhbGwodGhpcywgdmFsdWUsIGhlYWRlcik7XG4gIH1cblxuICBpZiAoaXNIZWFkZXJOYW1lRmlsdGVyKSB7XG4gICAgdmFsdWUgPSBoZWFkZXI7XG4gIH1cblxuICBpZiAoIXV0aWxzJDEuaXNTdHJpbmcodmFsdWUpKSByZXR1cm47XG5cbiAgaWYgKHV0aWxzJDEuaXNTdHJpbmcoZmlsdGVyKSkge1xuICAgIHJldHVybiB2YWx1ZS5pbmRleE9mKGZpbHRlcikgIT09IC0xO1xuICB9XG5cbiAgaWYgKHV0aWxzJDEuaXNSZWdFeHAoZmlsdGVyKSkge1xuICAgIHJldHVybiBmaWx0ZXIudGVzdCh2YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZm9ybWF0SGVhZGVyKGhlYWRlcikge1xuICByZXR1cm4gaGVhZGVyLnRyaW0oKVxuICAgIC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XFxkXSkoXFx3KikvZywgKHcsIGNoYXIsIHN0cikgPT4ge1xuICAgICAgcmV0dXJuIGNoYXIudG9VcHBlckNhc2UoKSArIHN0cjtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gYnVpbGRBY2Nlc3NvcnMob2JqLCBoZWFkZXIpIHtcbiAgY29uc3QgYWNjZXNzb3JOYW1lID0gdXRpbHMkMS50b0NhbWVsQ2FzZSgnICcgKyBoZWFkZXIpO1xuXG4gIFsnZ2V0JywgJ3NldCcsICdoYXMnXS5mb3JFYWNoKG1ldGhvZE5hbWUgPT4ge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIG1ldGhvZE5hbWUgKyBhY2Nlc3Nvck5hbWUsIHtcbiAgICAgIHZhbHVlOiBmdW5jdGlvbihhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgICAgIHJldHVybiB0aGlzW21ldGhvZE5hbWVdLmNhbGwodGhpcywgaGVhZGVyLCBhcmcxLCBhcmcyLCBhcmczKTtcbiAgICAgIH0sXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgfSk7XG59XG5cbmNsYXNzIEF4aW9zSGVhZGVycyB7XG4gIGNvbnN0cnVjdG9yKGhlYWRlcnMpIHtcbiAgICBoZWFkZXJzICYmIHRoaXMuc2V0KGhlYWRlcnMpO1xuICB9XG5cbiAgc2V0KGhlYWRlciwgdmFsdWVPclJld3JpdGUsIHJld3JpdGUpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgIGZ1bmN0aW9uIHNldEhlYWRlcihfdmFsdWUsIF9oZWFkZXIsIF9yZXdyaXRlKSB7XG4gICAgICBjb25zdCBsSGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoIWxIZWFkZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdoZWFkZXIgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBrZXkgPSB1dGlscyQxLmZpbmRLZXkoc2VsZiwgbEhlYWRlcik7XG5cbiAgICAgIGlmKCFrZXkgfHwgc2VsZltrZXldID09PSB1bmRlZmluZWQgfHwgX3Jld3JpdGUgPT09IHRydWUgfHwgKF9yZXdyaXRlID09PSB1bmRlZmluZWQgJiYgc2VsZltrZXldICE9PSBmYWxzZSkpIHtcbiAgICAgICAgc2VsZltrZXkgfHwgX2hlYWRlcl0gPSBub3JtYWxpemVWYWx1ZShfdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNldEhlYWRlcnMgPSAoaGVhZGVycywgX3Jld3JpdGUpID0+XG4gICAgICB1dGlscyQxLmZvckVhY2goaGVhZGVycywgKF92YWx1ZSwgX2hlYWRlcikgPT4gc2V0SGVhZGVyKF92YWx1ZSwgX2hlYWRlciwgX3Jld3JpdGUpKTtcblxuICAgIGlmICh1dGlscyQxLmlzUGxhaW5PYmplY3QoaGVhZGVyKSB8fCBoZWFkZXIgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKSB7XG4gICAgICBzZXRIZWFkZXJzKGhlYWRlciwgdmFsdWVPclJld3JpdGUpO1xuICAgIH0gZWxzZSBpZih1dGlscyQxLmlzU3RyaW5nKGhlYWRlcikgJiYgKGhlYWRlciA9IGhlYWRlci50cmltKCkpICYmICFpc1ZhbGlkSGVhZGVyTmFtZShoZWFkZXIpKSB7XG4gICAgICBzZXRIZWFkZXJzKHBhcnNlSGVhZGVycyhoZWFkZXIpLCB2YWx1ZU9yUmV3cml0ZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscyQxLmlzSGVhZGVycyhoZWFkZXIpKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBoZWFkZXIuZW50cmllcygpKSB7XG4gICAgICAgIHNldEhlYWRlcih2YWx1ZSwga2V5LCByZXdyaXRlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaGVhZGVyICE9IG51bGwgJiYgc2V0SGVhZGVyKHZhbHVlT3JSZXdyaXRlLCBoZWFkZXIsIHJld3JpdGUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0KGhlYWRlciwgcGFyc2VyKSB7XG4gICAgaGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKGhlYWRlcik7XG5cbiAgICBpZiAoaGVhZGVyKSB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscyQxLmZpbmRLZXkodGhpcywgaGVhZGVyKTtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXNba2V5XTtcblxuICAgICAgICBpZiAoIXBhcnNlcikge1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJzZXIgPT09IHRydWUpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VUb2tlbnModmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHV0aWxzJDEuaXNGdW5jdGlvbihwYXJzZXIpKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlci5jYWxsKHRoaXMsIHZhbHVlLCBrZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHV0aWxzJDEuaXNSZWdFeHAocGFyc2VyKSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZXIuZXhlYyh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhhcyhoZWFkZXIsIG1hdGNoZXIpIHtcbiAgICBoZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoaGVhZGVyKTtcblxuICAgIGlmIChoZWFkZXIpIHtcbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzJDEuZmluZEtleSh0aGlzLCBoZWFkZXIpO1xuXG4gICAgICByZXR1cm4gISEoa2V5ICYmIHRoaXNba2V5XSAhPT0gdW5kZWZpbmVkICYmICghbWF0Y2hlciB8fCBtYXRjaEhlYWRlclZhbHVlKHRoaXMsIHRoaXNba2V5XSwga2V5LCBtYXRjaGVyKSkpO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGRlbGV0ZShoZWFkZXIsIG1hdGNoZXIpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBsZXQgZGVsZXRlZCA9IGZhbHNlO1xuXG4gICAgZnVuY3Rpb24gZGVsZXRlSGVhZGVyKF9oZWFkZXIpIHtcbiAgICAgIF9oZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoX2hlYWRlcik7XG5cbiAgICAgIGlmIChfaGVhZGVyKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHV0aWxzJDEuZmluZEtleShzZWxmLCBfaGVhZGVyKTtcblxuICAgICAgICBpZiAoa2V5ICYmICghbWF0Y2hlciB8fCBtYXRjaEhlYWRlclZhbHVlKHNlbGYsIHNlbGZba2V5XSwga2V5LCBtYXRjaGVyKSkpIHtcbiAgICAgICAgICBkZWxldGUgc2VsZltrZXldO1xuXG4gICAgICAgICAgZGVsZXRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodXRpbHMkMS5pc0FycmF5KGhlYWRlcikpIHtcbiAgICAgIGhlYWRlci5mb3JFYWNoKGRlbGV0ZUhlYWRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZUhlYWRlcihoZWFkZXIpO1xuICAgIH1cblxuICAgIHJldHVybiBkZWxldGVkO1xuICB9XG5cbiAgY2xlYXIobWF0Y2hlcikge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0aGlzKTtcbiAgICBsZXQgaSA9IGtleXMubGVuZ3RoO1xuICAgIGxldCBkZWxldGVkID0gZmFsc2U7XG5cbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgICAgaWYoIW1hdGNoZXIgfHwgbWF0Y2hIZWFkZXJWYWx1ZSh0aGlzLCB0aGlzW2tleV0sIGtleSwgbWF0Y2hlciwgdHJ1ZSkpIHtcbiAgICAgICAgZGVsZXRlIHRoaXNba2V5XTtcbiAgICAgICAgZGVsZXRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlbGV0ZWQ7XG4gIH1cblxuICBub3JtYWxpemUoZm9ybWF0KSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgaGVhZGVycyA9IHt9O1xuXG4gICAgdXRpbHMkMS5mb3JFYWNoKHRoaXMsICh2YWx1ZSwgaGVhZGVyKSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscyQxLmZpbmRLZXkoaGVhZGVycywgaGVhZGVyKTtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICBzZWxmW2tleV0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIGRlbGV0ZSBzZWxmW2hlYWRlcl07XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IGZvcm1hdCA/IGZvcm1hdEhlYWRlcihoZWFkZXIpIDogU3RyaW5nKGhlYWRlcikudHJpbSgpO1xuXG4gICAgICBpZiAobm9ybWFsaXplZCAhPT0gaGVhZGVyKSB7XG4gICAgICAgIGRlbGV0ZSBzZWxmW2hlYWRlcl07XG4gICAgICB9XG5cbiAgICAgIHNlbGZbbm9ybWFsaXplZF0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG5cbiAgICAgIGhlYWRlcnNbbm9ybWFsaXplZF0gPSB0cnVlO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBjb25jYXQoLi4udGFyZ2V0cykge1xuICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLmNvbmNhdCh0aGlzLCAuLi50YXJnZXRzKTtcbiAgfVxuXG4gIHRvSlNPTihhc1N0cmluZ3MpIHtcbiAgICBjb25zdCBvYmogPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgdXRpbHMkMS5mb3JFYWNoKHRoaXMsICh2YWx1ZSwgaGVhZGVyKSA9PiB7XG4gICAgICB2YWx1ZSAhPSBudWxsICYmIHZhbHVlICE9PSBmYWxzZSAmJiAob2JqW2hlYWRlcl0gPSBhc1N0cmluZ3MgJiYgdXRpbHMkMS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLmpvaW4oJywgJykgOiB2YWx1ZSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFtoZWFkZXIsIHZhbHVlXSkgPT4gaGVhZGVyICsgJzogJyArIHZhbHVlKS5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICByZXR1cm4gJ0F4aW9zSGVhZGVycyc7XG4gIH1cblxuICBzdGF0aWMgZnJvbSh0aGluZykge1xuICAgIHJldHVybiB0aGluZyBpbnN0YW5jZW9mIHRoaXMgPyB0aGluZyA6IG5ldyB0aGlzKHRoaW5nKTtcbiAgfVxuXG4gIHN0YXRpYyBjb25jYXQoZmlyc3QsIC4uLnRhcmdldHMpIHtcbiAgICBjb25zdCBjb21wdXRlZCA9IG5ldyB0aGlzKGZpcnN0KTtcblxuICAgIHRhcmdldHMuZm9yRWFjaCgodGFyZ2V0KSA9PiBjb21wdXRlZC5zZXQodGFyZ2V0KSk7XG5cbiAgICByZXR1cm4gY29tcHV0ZWQ7XG4gIH1cblxuICBzdGF0aWMgYWNjZXNzb3IoaGVhZGVyKSB7XG4gICAgY29uc3QgaW50ZXJuYWxzID0gdGhpc1skaW50ZXJuYWxzXSA9ICh0aGlzWyRpbnRlcm5hbHNdID0ge1xuICAgICAgYWNjZXNzb3JzOiB7fVxuICAgIH0pO1xuXG4gICAgY29uc3QgYWNjZXNzb3JzID0gaW50ZXJuYWxzLmFjY2Vzc29ycztcbiAgICBjb25zdCBwcm90b3R5cGUgPSB0aGlzLnByb3RvdHlwZTtcblxuICAgIGZ1bmN0aW9uIGRlZmluZUFjY2Vzc29yKF9oZWFkZXIpIHtcbiAgICAgIGNvbnN0IGxIZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoX2hlYWRlcik7XG5cbiAgICAgIGlmICghYWNjZXNzb3JzW2xIZWFkZXJdKSB7XG4gICAgICAgIGJ1aWxkQWNjZXNzb3JzKHByb3RvdHlwZSwgX2hlYWRlcik7XG4gICAgICAgIGFjY2Vzc29yc1tsSGVhZGVyXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdXRpbHMkMS5pc0FycmF5KGhlYWRlcikgPyBoZWFkZXIuZm9yRWFjaChkZWZpbmVBY2Nlc3NvcikgOiBkZWZpbmVBY2Nlc3NvcihoZWFkZXIpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cblxuQXhpb3NIZWFkZXJzLmFjY2Vzc29yKFsnQ29udGVudC1UeXBlJywgJ0NvbnRlbnQtTGVuZ3RoJywgJ0FjY2VwdCcsICdBY2NlcHQtRW5jb2RpbmcnLCAnVXNlci1BZ2VudCcsICdBdXRob3JpemF0aW9uJ10pO1xuXG4vLyByZXNlcnZlZCBuYW1lcyBob3RmaXhcbnV0aWxzJDEucmVkdWNlRGVzY3JpcHRvcnMoQXhpb3NIZWFkZXJzLnByb3RvdHlwZSwgKHt2YWx1ZX0sIGtleSkgPT4ge1xuICBsZXQgbWFwcGVkID0ga2V5WzBdLnRvVXBwZXJDYXNlKCkgKyBrZXkuc2xpY2UoMSk7IC8vIG1hcCBgc2V0YCA9PiBgU2V0YFxuICByZXR1cm4ge1xuICAgIGdldDogKCkgPT4gdmFsdWUsXG4gICAgc2V0KGhlYWRlclZhbHVlKSB7XG4gICAgICB0aGlzW21hcHBlZF0gPSBoZWFkZXJWYWx1ZTtcbiAgICB9XG4gIH1cbn0pO1xuXG51dGlscyQxLmZyZWV6ZU1ldGhvZHMoQXhpb3NIZWFkZXJzKTtcblxudmFyIEF4aW9zSGVhZGVycyQxID0gQXhpb3NIZWFkZXJzO1xuXG4vKipcbiAqIFRyYW5zZm9ybSB0aGUgZGF0YSBmb3IgYSByZXF1ZXN0IG9yIGEgcmVzcG9uc2VcbiAqXG4gKiBAcGFyYW0ge0FycmF5fEZ1bmN0aW9ufSBmbnMgQSBzaW5nbGUgZnVuY3Rpb24gb3IgQXJyYXkgb2YgZnVuY3Rpb25zXG4gKiBAcGFyYW0gez9PYmplY3R9IHJlc3BvbnNlIFRoZSByZXNwb25zZSBvYmplY3RcbiAqXG4gKiBAcmV0dXJucyB7Kn0gVGhlIHJlc3VsdGluZyB0cmFuc2Zvcm1lZCBkYXRhXG4gKi9cbmZ1bmN0aW9uIHRyYW5zZm9ybURhdGEoZm5zLCByZXNwb25zZSkge1xuICBjb25zdCBjb25maWcgPSB0aGlzIHx8IGRlZmF1bHRzJDE7XG4gIGNvbnN0IGNvbnRleHQgPSByZXNwb25zZSB8fCBjb25maWc7XG4gIGNvbnN0IGhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5mcm9tKGNvbnRleHQuaGVhZGVycyk7XG4gIGxldCBkYXRhID0gY29udGV4dC5kYXRhO1xuXG4gIHV0aWxzJDEuZm9yRWFjaChmbnMsIGZ1bmN0aW9uIHRyYW5zZm9ybShmbikge1xuICAgIGRhdGEgPSBmbi5jYWxsKGNvbmZpZywgZGF0YSwgaGVhZGVycy5ub3JtYWxpemUoKSwgcmVzcG9uc2UgPyByZXNwb25zZS5zdGF0dXMgOiB1bmRlZmluZWQpO1xuICB9KTtcblxuICBoZWFkZXJzLm5vcm1hbGl6ZSgpO1xuXG4gIHJldHVybiBkYXRhO1xufVxuXG5mdW5jdGlvbiBpc0NhbmNlbCh2YWx1ZSkge1xuICByZXR1cm4gISEodmFsdWUgJiYgdmFsdWUuX19DQU5DRUxfXyk7XG59XG5cbi8qKlxuICogQSBgQ2FuY2VsZWRFcnJvcmAgaXMgYW4gb2JqZWN0IHRoYXQgaXMgdGhyb3duIHdoZW4gYW4gb3BlcmF0aW9uIGlzIGNhbmNlbGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nPX0gbWVzc2FnZSBUaGUgbWVzc2FnZS5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gY29uZmlnIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge09iamVjdD19IHJlcXVlc3QgVGhlIHJlcXVlc3QuXG4gKlxuICogQHJldHVybnMge0NhbmNlbGVkRXJyb3J9IFRoZSBjcmVhdGVkIGVycm9yLlxuICovXG5mdW5jdGlvbiBDYW5jZWxlZEVycm9yKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgQXhpb3NFcnJvci5jYWxsKHRoaXMsIG1lc3NhZ2UgPT0gbnVsbCA/ICdjYW5jZWxlZCcgOiBtZXNzYWdlLCBBeGlvc0Vycm9yLkVSUl9DQU5DRUxFRCwgY29uZmlnLCByZXF1ZXN0KTtcbiAgdGhpcy5uYW1lID0gJ0NhbmNlbGVkRXJyb3InO1xufVxuXG51dGlscyQxLmluaGVyaXRzKENhbmNlbGVkRXJyb3IsIEF4aW9zRXJyb3IsIHtcbiAgX19DQU5DRUxfXzogdHJ1ZVxufSk7XG5cbi8qKlxuICogUmVzb2x2ZSBvciByZWplY3QgYSBQcm9taXNlIGJhc2VkIG9uIHJlc3BvbnNlIHN0YXR1cy5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZXNvbHZlIEEgZnVuY3Rpb24gdGhhdCByZXNvbHZlcyB0aGUgcHJvbWlzZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdCBBIGZ1bmN0aW9uIHRoYXQgcmVqZWN0cyB0aGUgcHJvbWlzZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSByZXNwb25zZSBUaGUgcmVzcG9uc2UuXG4gKlxuICogQHJldHVybnMge29iamVjdH0gVGhlIHJlc3BvbnNlLlxuICovXG5mdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSkge1xuICBjb25zdCB2YWxpZGF0ZVN0YXR1cyA9IHJlc3BvbnNlLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztcbiAgaWYgKCFyZXNwb25zZS5zdGF0dXMgfHwgIXZhbGlkYXRlU3RhdHVzIHx8IHZhbGlkYXRlU3RhdHVzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgfSBlbHNlIHtcbiAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoXG4gICAgICAnUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAnICsgcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgW0F4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULCBBeGlvc0Vycm9yLkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3IocmVzcG9uc2Uuc3RhdHVzIC8gMTAwKSAtIDRdLFxuICAgICAgcmVzcG9uc2UuY29uZmlnLFxuICAgICAgcmVzcG9uc2UucmVxdWVzdCxcbiAgICAgIHJlc3BvbnNlXG4gICAgKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VQcm90b2NvbCh1cmwpIHtcbiAgY29uc3QgbWF0Y2ggPSAvXihbLStcXHddezEsMjV9KSg6P1xcL1xcL3w6KS8uZXhlYyh1cmwpO1xuICByZXR1cm4gbWF0Y2ggJiYgbWF0Y2hbMV0gfHwgJyc7XG59XG5cbi8qKlxuICogQ2FsY3VsYXRlIGRhdGEgbWF4UmF0ZVxuICogQHBhcmFtIHtOdW1iZXJ9IFtzYW1wbGVzQ291bnQ9IDEwXVxuICogQHBhcmFtIHtOdW1iZXJ9IFttaW49IDEwMDBdXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIHNwZWVkb21ldGVyKHNhbXBsZXNDb3VudCwgbWluKSB7XG4gIHNhbXBsZXNDb3VudCA9IHNhbXBsZXNDb3VudCB8fCAxMDtcbiAgY29uc3QgYnl0ZXMgPSBuZXcgQXJyYXkoc2FtcGxlc0NvdW50KTtcbiAgY29uc3QgdGltZXN0YW1wcyA9IG5ldyBBcnJheShzYW1wbGVzQ291bnQpO1xuICBsZXQgaGVhZCA9IDA7XG4gIGxldCB0YWlsID0gMDtcbiAgbGV0IGZpcnN0U2FtcGxlVFM7XG5cbiAgbWluID0gbWluICE9PSB1bmRlZmluZWQgPyBtaW4gOiAxMDAwO1xuXG4gIHJldHVybiBmdW5jdGlvbiBwdXNoKGNodW5rTGVuZ3RoKSB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIGNvbnN0IHN0YXJ0ZWRBdCA9IHRpbWVzdGFtcHNbdGFpbF07XG5cbiAgICBpZiAoIWZpcnN0U2FtcGxlVFMpIHtcbiAgICAgIGZpcnN0U2FtcGxlVFMgPSBub3c7XG4gICAgfVxuXG4gICAgYnl0ZXNbaGVhZF0gPSBjaHVua0xlbmd0aDtcbiAgICB0aW1lc3RhbXBzW2hlYWRdID0gbm93O1xuXG4gICAgbGV0IGkgPSB0YWlsO1xuICAgIGxldCBieXRlc0NvdW50ID0gMDtcblxuICAgIHdoaWxlIChpICE9PSBoZWFkKSB7XG4gICAgICBieXRlc0NvdW50ICs9IGJ5dGVzW2krK107XG4gICAgICBpID0gaSAlIHNhbXBsZXNDb3VudDtcbiAgICB9XG5cbiAgICBoZWFkID0gKGhlYWQgKyAxKSAlIHNhbXBsZXNDb3VudDtcblxuICAgIGlmIChoZWFkID09PSB0YWlsKSB7XG4gICAgICB0YWlsID0gKHRhaWwgKyAxKSAlIHNhbXBsZXNDb3VudDtcbiAgICB9XG5cbiAgICBpZiAobm93IC0gZmlyc3RTYW1wbGVUUyA8IG1pbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhc3NlZCA9IHN0YXJ0ZWRBdCAmJiBub3cgLSBzdGFydGVkQXQ7XG5cbiAgICByZXR1cm4gcGFzc2VkID8gTWF0aC5yb3VuZChieXRlc0NvdW50ICogMTAwMCAvIHBhc3NlZCkgOiB1bmRlZmluZWQ7XG4gIH07XG59XG5cbi8qKlxuICogVGhyb3R0bGUgZGVjb3JhdG9yXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHBhcmFtIHtOdW1iZXJ9IGZyZXFcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiB0aHJvdHRsZShmbiwgZnJlcSkge1xuICBsZXQgdGltZXN0YW1wID0gMDtcbiAgY29uc3QgdGhyZXNob2xkID0gMTAwMCAvIGZyZXE7XG4gIGxldCB0aW1lciA9IG51bGw7XG4gIHJldHVybiBmdW5jdGlvbiB0aHJvdHRsZWQoKSB7XG4gICAgY29uc3QgZm9yY2UgPSB0aGlzID09PSB0cnVlO1xuXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBpZiAoZm9yY2UgfHwgbm93IC0gdGltZXN0YW1wID4gdGhyZXNob2xkKSB7XG4gICAgICBpZiAodGltZXIpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgfVxuICAgICAgdGltZXN0YW1wID0gbm93O1xuICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgfVxuICAgIGlmICghdGltZXIpIHtcbiAgICAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRpbWVyID0gbnVsbDtcbiAgICAgICAgdGltZXN0YW1wID0gRGF0ZS5ub3coKTtcbiAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICB9LCB0aHJlc2hvbGQgLSAobm93IC0gdGltZXN0YW1wKSk7XG4gICAgfVxuICB9O1xufVxuXG52YXIgcHJvZ3Jlc3NFdmVudFJlZHVjZXIgPSAobGlzdGVuZXIsIGlzRG93bmxvYWRTdHJlYW0sIGZyZXEgPSAzKSA9PiB7XG4gIGxldCBieXRlc05vdGlmaWVkID0gMDtcbiAgY29uc3QgX3NwZWVkb21ldGVyID0gc3BlZWRvbWV0ZXIoNTAsIDI1MCk7XG5cbiAgcmV0dXJuIHRocm90dGxlKGUgPT4ge1xuICAgIGNvbnN0IGxvYWRlZCA9IGUubG9hZGVkO1xuICAgIGNvbnN0IHRvdGFsID0gZS5sZW5ndGhDb21wdXRhYmxlID8gZS50b3RhbCA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBwcm9ncmVzc0J5dGVzID0gbG9hZGVkIC0gYnl0ZXNOb3RpZmllZDtcbiAgICBjb25zdCByYXRlID0gX3NwZWVkb21ldGVyKHByb2dyZXNzQnl0ZXMpO1xuICAgIGNvbnN0IGluUmFuZ2UgPSBsb2FkZWQgPD0gdG90YWw7XG5cbiAgICBieXRlc05vdGlmaWVkID0gbG9hZGVkO1xuXG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIGxvYWRlZCxcbiAgICAgIHRvdGFsLFxuICAgICAgcHJvZ3Jlc3M6IHRvdGFsID8gKGxvYWRlZCAvIHRvdGFsKSA6IHVuZGVmaW5lZCxcbiAgICAgIGJ5dGVzOiBwcm9ncmVzc0J5dGVzLFxuICAgICAgcmF0ZTogcmF0ZSA/IHJhdGUgOiB1bmRlZmluZWQsXG4gICAgICBlc3RpbWF0ZWQ6IHJhdGUgJiYgdG90YWwgJiYgaW5SYW5nZSA/ICh0b3RhbCAtIGxvYWRlZCkgLyByYXRlIDogdW5kZWZpbmVkLFxuICAgICAgZXZlbnQ6IGUsXG4gICAgICBsZW5ndGhDb21wdXRhYmxlOiB0b3RhbCAhPSBudWxsXG4gICAgfTtcblxuICAgIGRhdGFbaXNEb3dubG9hZFN0cmVhbSA/ICdkb3dubG9hZCcgOiAndXBsb2FkJ10gPSB0cnVlO1xuXG4gICAgbGlzdGVuZXIoZGF0YSk7XG4gIH0sIGZyZXEpO1xufTtcblxudmFyIGlzVVJMU2FtZU9yaWdpbiA9IHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudiA/XG5cbi8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBoYXZlIGZ1bGwgc3VwcG9ydCBvZiB0aGUgQVBJcyBuZWVkZWQgdG8gdGVzdFxuLy8gd2hldGhlciB0aGUgcmVxdWVzdCBVUkwgaXMgb2YgdGhlIHNhbWUgb3JpZ2luIGFzIGN1cnJlbnQgbG9jYXRpb24uXG4gIChmdW5jdGlvbiBzdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgY29uc3QgbXNpZSA9IC8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gICAgY29uc3QgdXJsUGFyc2luZ05vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgbGV0IG9yaWdpblVSTDtcblxuICAgIC8qKlxuICAgICogUGFyc2UgYSBVUkwgdG8gZGlzY292ZXIgaXRzIGNvbXBvbmVudHNcbiAgICAqXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gdXJsIFRoZSBVUkwgdG8gYmUgcGFyc2VkXG4gICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgICovXG4gICAgZnVuY3Rpb24gcmVzb2x2ZVVSTCh1cmwpIHtcbiAgICAgIGxldCBocmVmID0gdXJsO1xuXG4gICAgICBpZiAobXNpZSkge1xuICAgICAgICAvLyBJRSBuZWVkcyBhdHRyaWJ1dGUgc2V0IHR3aWNlIHRvIG5vcm1hbGl6ZSBwcm9wZXJ0aWVzXG4gICAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuICAgICAgICBocmVmID0gdXJsUGFyc2luZ05vZGUuaHJlZjtcbiAgICAgIH1cblxuICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG5cbiAgICAgIC8vIHVybFBhcnNpbmdOb2RlIHByb3ZpZGVzIHRoZSBVcmxVdGlscyBpbnRlcmZhY2UgLSBodHRwOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jdXJsdXRpbHNcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhyZWY6IHVybFBhcnNpbmdOb2RlLmhyZWYsXG4gICAgICAgIHByb3RvY29sOiB1cmxQYXJzaW5nTm9kZS5wcm90b2NvbCA/IHVybFBhcnNpbmdOb2RlLnByb3RvY29sLnJlcGxhY2UoLzokLywgJycpIDogJycsXG4gICAgICAgIGhvc3Q6IHVybFBhcnNpbmdOb2RlLmhvc3QsXG4gICAgICAgIHNlYXJjaDogdXJsUGFyc2luZ05vZGUuc2VhcmNoID8gdXJsUGFyc2luZ05vZGUuc2VhcmNoLnJlcGxhY2UoL15cXD8vLCAnJykgOiAnJyxcbiAgICAgICAgaGFzaDogdXJsUGFyc2luZ05vZGUuaGFzaCA/IHVybFBhcnNpbmdOb2RlLmhhc2gucmVwbGFjZSgvXiMvLCAnJykgOiAnJyxcbiAgICAgICAgaG9zdG5hbWU6IHVybFBhcnNpbmdOb2RlLmhvc3RuYW1lLFxuICAgICAgICBwb3J0OiB1cmxQYXJzaW5nTm9kZS5wb3J0LFxuICAgICAgICBwYXRobmFtZTogKHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nKSA/XG4gICAgICAgICAgdXJsUGFyc2luZ05vZGUucGF0aG5hbWUgOlxuICAgICAgICAgICcvJyArIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lXG4gICAgICB9O1xuICAgIH1cblxuICAgIG9yaWdpblVSTCA9IHJlc29sdmVVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuXG4gICAgLyoqXG4gICAgKiBEZXRlcm1pbmUgaWYgYSBVUkwgc2hhcmVzIHRoZSBzYW1lIG9yaWdpbiBhcyB0aGUgY3VycmVudCBsb2NhdGlvblxuICAgICpcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSByZXF1ZXN0VVJMIFRoZSBVUkwgdG8gdGVzdFxuICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4sIG90aGVyd2lzZSBmYWxzZVxuICAgICovXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGlzVVJMU2FtZU9yaWdpbihyZXF1ZXN0VVJMKSB7XG4gICAgICBjb25zdCBwYXJzZWQgPSAodXRpbHMkMS5pc1N0cmluZyhyZXF1ZXN0VVJMKSkgPyByZXNvbHZlVVJMKHJlcXVlc3RVUkwpIDogcmVxdWVzdFVSTDtcbiAgICAgIHJldHVybiAocGFyc2VkLnByb3RvY29sID09PSBvcmlnaW5VUkwucHJvdG9jb2wgJiZcbiAgICAgICAgICBwYXJzZWQuaG9zdCA9PT0gb3JpZ2luVVJMLmhvc3QpO1xuICAgIH07XG4gIH0pKCkgOlxuXG4gIC8vIE5vbiBzdGFuZGFyZCBicm93c2VyIGVudnMgKHdlYiB3b3JrZXJzLCByZWFjdC1uYXRpdmUpIGxhY2sgbmVlZGVkIHN1cHBvcnQuXG4gIChmdW5jdGlvbiBub25TdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGlzVVJMU2FtZU9yaWdpbigpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gIH0pKCk7XG5cbnZhciBjb29raWVzID0gcGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52ID9cblxuICAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgc3VwcG9ydCBkb2N1bWVudC5jb29raWVcbiAge1xuICAgIHdyaXRlKG5hbWUsIHZhbHVlLCBleHBpcmVzLCBwYXRoLCBkb21haW4sIHNlY3VyZSkge1xuICAgICAgY29uc3QgY29va2llID0gW25hbWUgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpXTtcblxuICAgICAgdXRpbHMkMS5pc051bWJlcihleHBpcmVzKSAmJiBjb29raWUucHVzaCgnZXhwaXJlcz0nICsgbmV3IERhdGUoZXhwaXJlcykudG9HTVRTdHJpbmcoKSk7XG5cbiAgICAgIHV0aWxzJDEuaXNTdHJpbmcocGF0aCkgJiYgY29va2llLnB1c2goJ3BhdGg9JyArIHBhdGgpO1xuXG4gICAgICB1dGlscyQxLmlzU3RyaW5nKGRvbWFpbikgJiYgY29va2llLnB1c2goJ2RvbWFpbj0nICsgZG9tYWluKTtcblxuICAgICAgc2VjdXJlID09PSB0cnVlICYmIGNvb2tpZS5wdXNoKCdzZWN1cmUnKTtcblxuICAgICAgZG9jdW1lbnQuY29va2llID0gY29va2llLmpvaW4oJzsgJyk7XG4gICAgfSxcblxuICAgIHJlYWQobmFtZSkge1xuICAgICAgY29uc3QgbWF0Y2ggPSBkb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgnKF58O1xcXFxzKikoJyArIG5hbWUgKyAnKT0oW147XSopJykpO1xuICAgICAgcmV0dXJuIChtYXRjaCA/IGRlY29kZVVSSUNvbXBvbmVudChtYXRjaFszXSkgOiBudWxsKTtcbiAgICB9LFxuXG4gICAgcmVtb3ZlKG5hbWUpIHtcbiAgICAgIHRoaXMud3JpdGUobmFtZSwgJycsIERhdGUubm93KCkgLSA4NjQwMDAwMCk7XG4gICAgfVxuICB9XG5cbiAgOlxuXG4gIC8vIE5vbi1zdGFuZGFyZCBicm93c2VyIGVudiAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAge1xuICAgIHdyaXRlKCkge30sXG4gICAgcmVhZCgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG4gICAgcmVtb3ZlKCkge31cbiAgfTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGVcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBVUkwgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBYnNvbHV0ZVVSTCh1cmwpIHtcbiAgLy8gQSBVUkwgaXMgY29uc2lkZXJlZCBhYnNvbHV0ZSBpZiBpdCBiZWdpbnMgd2l0aCBcIjxzY2hlbWU+Oi8vXCIgb3IgXCIvL1wiIChwcm90b2NvbC1yZWxhdGl2ZSBVUkwpLlxuICAvLyBSRkMgMzk4NiBkZWZpbmVzIHNjaGVtZSBuYW1lIGFzIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyBiZWdpbm5pbmcgd2l0aCBhIGxldHRlciBhbmQgZm9sbG93ZWRcbiAgLy8gYnkgYW55IGNvbWJpbmF0aW9uIG9mIGxldHRlcnMsIGRpZ2l0cywgcGx1cywgcGVyaW9kLCBvciBoeXBoZW4uXG4gIHJldHVybiAvXihbYS16XVthLXpcXGQrXFwtLl0qOik/XFwvXFwvL2kudGVzdCh1cmwpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgc3BlY2lmaWVkIFVSTHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGl2ZVVSTCBUaGUgcmVsYXRpdmUgVVJMXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIFVSTFxuICovXG5mdW5jdGlvbiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZWxhdGl2ZVVSTCkge1xuICByZXR1cm4gcmVsYXRpdmVVUkxcbiAgICA/IGJhc2VVUkwucmVwbGFjZSgvXFwvP1xcLyQvLCAnJykgKyAnLycgKyByZWxhdGl2ZVVSTC5yZXBsYWNlKC9eXFwvKy8sICcnKVxuICAgIDogYmFzZVVSTDtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIGJhc2VVUkwgd2l0aCB0aGUgcmVxdWVzdGVkVVJMLFxuICogb25seSB3aGVuIHRoZSByZXF1ZXN0ZWRVUkwgaXMgbm90IGFscmVhZHkgYW4gYWJzb2x1dGUgVVJMLlxuICogSWYgdGhlIHJlcXVlc3RVUkwgaXMgYWJzb2x1dGUsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgcmVxdWVzdGVkVVJMIHVudG91Y2hlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZXF1ZXN0ZWRVUkwgQWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJMIHRvIGNvbWJpbmVcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgZnVsbCBwYXRoXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkRnVsbFBhdGgoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKSB7XG4gIGlmIChiYXNlVVJMICYmICFpc0Fic29sdXRlVVJMKHJlcXVlc3RlZFVSTCkpIHtcbiAgICByZXR1cm4gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKTtcbiAgfVxuICByZXR1cm4gcmVxdWVzdGVkVVJMO1xufVxuXG5jb25zdCBoZWFkZXJzVG9PYmplY3QgPSAodGhpbmcpID0+IHRoaW5nIGluc3RhbmNlb2YgQXhpb3NIZWFkZXJzJDEgPyB7IC4uLnRoaW5nIH0gOiB0aGluZztcblxuLyoqXG4gKiBDb25maWctc3BlY2lmaWMgbWVyZ2UtZnVuY3Rpb24gd2hpY2ggY3JlYXRlcyBhIG5ldyBjb25maWctb2JqZWN0XG4gKiBieSBtZXJnaW5nIHR3byBjb25maWd1cmF0aW9uIG9iamVjdHMgdG9nZXRoZXIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzFcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcyXG4gKlxuICogQHJldHVybnMge09iamVjdH0gTmV3IG9iamVjdCByZXN1bHRpbmcgZnJvbSBtZXJnaW5nIGNvbmZpZzIgdG8gY29uZmlnMVxuICovXG5mdW5jdGlvbiBtZXJnZUNvbmZpZyhjb25maWcxLCBjb25maWcyKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBjb25maWcyID0gY29uZmlnMiB8fCB7fTtcbiAgY29uc3QgY29uZmlnID0ge307XG5cbiAgZnVuY3Rpb24gZ2V0TWVyZ2VkVmFsdWUodGFyZ2V0LCBzb3VyY2UsIGNhc2VsZXNzKSB7XG4gICAgaWYgKHV0aWxzJDEuaXNQbGFpbk9iamVjdCh0YXJnZXQpICYmIHV0aWxzJDEuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMkMS5tZXJnZS5jYWxsKHtjYXNlbGVzc30sIHRhcmdldCwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzJDEuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMkMS5tZXJnZSh7fSwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzJDEuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gc291cmNlLnNsaWNlKCk7XG4gICAgfVxuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gbWVyZ2VEZWVwUHJvcGVydGllcyhhLCBiLCBjYXNlbGVzcykge1xuICAgIGlmICghdXRpbHMkMS5pc1VuZGVmaW5lZChiKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKGEsIGIsIGNhc2VsZXNzKTtcbiAgICB9IGVsc2UgaWYgKCF1dGlscyQxLmlzVW5kZWZpbmVkKGEpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBhLCBjYXNlbGVzcyk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIHZhbHVlRnJvbUNvbmZpZzIoYSwgYikge1xuICAgIGlmICghdXRpbHMkMS5pc1VuZGVmaW5lZChiKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYik7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIGRlZmF1bHRUb0NvbmZpZzIoYSwgYikge1xuICAgIGlmICghdXRpbHMkMS5pc1VuZGVmaW5lZChiKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYik7XG4gICAgfSBlbHNlIGlmICghdXRpbHMkMS5pc1VuZGVmaW5lZChhKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYSk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIG1lcmdlRGlyZWN0S2V5cyhhLCBiLCBwcm9wKSB7XG4gICAgaWYgKHByb3AgaW4gY29uZmlnMikge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKGEsIGIpO1xuICAgIH0gZWxzZSBpZiAocHJvcCBpbiBjb25maWcxKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBhKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBtZXJnZU1hcCA9IHtcbiAgICB1cmw6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgbWV0aG9kOiB2YWx1ZUZyb21Db25maWcyLFxuICAgIGRhdGE6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgYmFzZVVSTDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0cmFuc2Zvcm1SZXF1ZXN0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRyYW5zZm9ybVJlc3BvbnNlOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHBhcmFtc1NlcmlhbGl6ZXI6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdGltZW91dDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0aW1lb3V0TWVzc2FnZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB3aXRoQ3JlZGVudGlhbHM6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgd2l0aFhTUkZUb2tlbjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBhZGFwdGVyOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHJlc3BvbnNlVHlwZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB4c3JmQ29va2llTmFtZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB4c3JmSGVhZGVyTmFtZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBvblVwbG9hZFByb2dyZXNzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG9uRG93bmxvYWRQcm9ncmVzczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBkZWNvbXByZXNzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG1heENvbnRlbnRMZW5ndGg6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgbWF4Qm9keUxlbmd0aDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBiZWZvcmVSZWRpcmVjdDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0cmFuc3BvcnQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgaHR0cEFnZW50OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGh0dHBzQWdlbnQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgY2FuY2VsVG9rZW46IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgc29ja2V0UGF0aDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICByZXNwb25zZUVuY29kaW5nOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHZhbGlkYXRlU3RhdHVzOiBtZXJnZURpcmVjdEtleXMsXG4gICAgaGVhZGVyczogKGEsIGIpID0+IG1lcmdlRGVlcFByb3BlcnRpZXMoaGVhZGVyc1RvT2JqZWN0KGEpLCBoZWFkZXJzVG9PYmplY3QoYiksIHRydWUpXG4gIH07XG5cbiAgdXRpbHMkMS5mb3JFYWNoKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sIGNvbmZpZzEsIGNvbmZpZzIpKSwgZnVuY3Rpb24gY29tcHV0ZUNvbmZpZ1ZhbHVlKHByb3ApIHtcbiAgICBjb25zdCBtZXJnZSA9IG1lcmdlTWFwW3Byb3BdIHx8IG1lcmdlRGVlcFByb3BlcnRpZXM7XG4gICAgY29uc3QgY29uZmlnVmFsdWUgPSBtZXJnZShjb25maWcxW3Byb3BdLCBjb25maWcyW3Byb3BdLCBwcm9wKTtcbiAgICAodXRpbHMkMS5pc1VuZGVmaW5lZChjb25maWdWYWx1ZSkgJiYgbWVyZ2UgIT09IG1lcmdlRGlyZWN0S2V5cykgfHwgKGNvbmZpZ1twcm9wXSA9IGNvbmZpZ1ZhbHVlKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGNvbmZpZztcbn1cblxudmFyIHJlc29sdmVDb25maWcgPSAoY29uZmlnKSA9PiB7XG4gIGNvbnN0IG5ld0NvbmZpZyA9IG1lcmdlQ29uZmlnKHt9LCBjb25maWcpO1xuXG4gIGxldCB7ZGF0YSwgd2l0aFhTUkZUb2tlbiwgeHNyZkhlYWRlck5hbWUsIHhzcmZDb29raWVOYW1lLCBoZWFkZXJzLCBhdXRofSA9IG5ld0NvbmZpZztcblxuICBuZXdDb25maWcuaGVhZGVycyA9IGhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5mcm9tKGhlYWRlcnMpO1xuXG4gIG5ld0NvbmZpZy51cmwgPSBidWlsZFVSTChidWlsZEZ1bGxQYXRoKG5ld0NvbmZpZy5iYXNlVVJMLCBuZXdDb25maWcudXJsKSwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpO1xuXG4gIC8vIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb25cbiAgaWYgKGF1dGgpIHtcbiAgICBoZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsICdCYXNpYyAnICtcbiAgICAgIGJ0b2EoKGF1dGgudXNlcm5hbWUgfHwgJycpICsgJzonICsgKGF1dGgucGFzc3dvcmQgPyB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoYXV0aC5wYXNzd29yZCkpIDogJycpKVxuICAgICk7XG4gIH1cblxuICBsZXQgY29udGVudFR5cGU7XG5cbiAgaWYgKHV0aWxzJDEuaXNGb3JtRGF0YShkYXRhKSkge1xuICAgIGlmIChwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYgfHwgcGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52KSB7XG4gICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKHVuZGVmaW5lZCk7IC8vIExldCB0aGUgYnJvd3NlciBzZXQgaXRcbiAgICB9IGVsc2UgaWYgKChjb250ZW50VHlwZSA9IGhlYWRlcnMuZ2V0Q29udGVudFR5cGUoKSkgIT09IGZhbHNlKSB7XG4gICAgICAvLyBmaXggc2VtaWNvbG9uIGR1cGxpY2F0aW9uIGlzc3VlIGZvciBSZWFjdE5hdGl2ZSBGb3JtRGF0YSBpbXBsZW1lbnRhdGlvblxuICAgICAgY29uc3QgW3R5cGUsIC4uLnRva2Vuc10gPSBjb250ZW50VHlwZSA/IGNvbnRlbnRUeXBlLnNwbGl0KCc7JykubWFwKHRva2VuID0+IHRva2VuLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pIDogW107XG4gICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKFt0eXBlIHx8ICdtdWx0aXBhcnQvZm9ybS1kYXRhJywgLi4udG9rZW5zXS5qb2luKCc7ICcpKTtcbiAgICB9XG4gIH1cblxuICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgLy8gVGhpcyBpcyBvbmx5IGRvbmUgaWYgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnQuXG4gIC8vIFNwZWNpZmljYWxseSBub3QgaWYgd2UncmUgaW4gYSB3ZWIgd29ya2VyLCBvciByZWFjdC1uYXRpdmUuXG5cbiAgaWYgKHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudikge1xuICAgIHdpdGhYU1JGVG9rZW4gJiYgdXRpbHMkMS5pc0Z1bmN0aW9uKHdpdGhYU1JGVG9rZW4pICYmICh3aXRoWFNSRlRva2VuID0gd2l0aFhTUkZUb2tlbihuZXdDb25maWcpKTtcblxuICAgIGlmICh3aXRoWFNSRlRva2VuIHx8ICh3aXRoWFNSRlRva2VuICE9PSBmYWxzZSAmJiBpc1VSTFNhbWVPcmlnaW4obmV3Q29uZmlnLnVybCkpKSB7XG4gICAgICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgICAgIGNvbnN0IHhzcmZWYWx1ZSA9IHhzcmZIZWFkZXJOYW1lICYmIHhzcmZDb29raWVOYW1lICYmIGNvb2tpZXMucmVhZCh4c3JmQ29va2llTmFtZSk7XG5cbiAgICAgIGlmICh4c3JmVmFsdWUpIHtcbiAgICAgICAgaGVhZGVycy5zZXQoeHNyZkhlYWRlck5hbWUsIHhzcmZWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld0NvbmZpZztcbn07XG5cbmNvbnN0IGlzWEhSQWRhcHRlclN1cHBvcnRlZCA9IHR5cGVvZiBYTUxIdHRwUmVxdWVzdCAhPT0gJ3VuZGVmaW5lZCc7XG5cbnZhciB4aHJBZGFwdGVyID0gaXNYSFJBZGFwdGVyU3VwcG9ydGVkICYmIGZ1bmN0aW9uIChjb25maWcpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIGRpc3BhdGNoWGhyUmVxdWVzdChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBjb25zdCBfY29uZmlnID0gcmVzb2x2ZUNvbmZpZyhjb25maWcpO1xuICAgIGxldCByZXF1ZXN0RGF0YSA9IF9jb25maWcuZGF0YTtcbiAgICBjb25zdCByZXF1ZXN0SGVhZGVycyA9IEF4aW9zSGVhZGVycyQxLmZyb20oX2NvbmZpZy5oZWFkZXJzKS5ub3JtYWxpemUoKTtcbiAgICBsZXQge3Jlc3BvbnNlVHlwZX0gPSBfY29uZmlnO1xuICAgIGxldCBvbkNhbmNlbGVkO1xuICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICBpZiAoX2NvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgICAgICBfY29uZmlnLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoX2NvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgX2NvbmZpZy5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkNhbmNlbGVkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXG4gICAgcmVxdWVzdC5vcGVuKF9jb25maWcubWV0aG9kLnRvVXBwZXJDYXNlKCksIF9jb25maWcudXJsLCB0cnVlKTtcblxuICAgIC8vIFNldCB0aGUgcmVxdWVzdCB0aW1lb3V0IGluIE1TXG4gICAgcmVxdWVzdC50aW1lb3V0ID0gX2NvbmZpZy50aW1lb3V0O1xuXG4gICAgZnVuY3Rpb24gb25sb2FkZW5kKCkge1xuICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIFByZXBhcmUgdGhlIHJlc3BvbnNlXG4gICAgICBjb25zdCByZXNwb25zZUhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5mcm9tKFxuICAgICAgICAnZ2V0QWxsUmVzcG9uc2VIZWFkZXJzJyBpbiByZXF1ZXN0ICYmIHJlcXVlc3QuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKClcbiAgICAgICk7XG4gICAgICBjb25zdCByZXNwb25zZURhdGEgPSAhcmVzcG9uc2VUeXBlIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ3RleHQnIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nID9cbiAgICAgICAgcmVxdWVzdC5yZXNwb25zZVRleHQgOiByZXF1ZXN0LnJlc3BvbnNlO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSB7XG4gICAgICAgIGRhdGE6IHJlc3BvbnNlRGF0YSxcbiAgICAgICAgc3RhdHVzOiByZXF1ZXN0LnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogcmVxdWVzdC5zdGF0dXNUZXh0LFxuICAgICAgICBoZWFkZXJzOiByZXNwb25zZUhlYWRlcnMsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdFxuICAgICAgfTtcblxuICAgICAgc2V0dGxlKGZ1bmN0aW9uIF9yZXNvbHZlKHZhbHVlKSB7XG4gICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9LCBmdW5jdGlvbiBfcmVqZWN0KGVycikge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSwgcmVzcG9uc2UpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoJ29ubG9hZGVuZCcgaW4gcmVxdWVzdCkge1xuICAgICAgLy8gVXNlIG9ubG9hZGVuZCBpZiBhdmFpbGFibGVcbiAgICAgIHJlcXVlc3Qub25sb2FkZW5kID0gb25sb2FkZW5kO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBMaXN0ZW4gZm9yIHJlYWR5IHN0YXRlIHRvIGVtdWxhdGUgb25sb2FkZW5kXG4gICAgICByZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uIGhhbmRsZUxvYWQoKSB7XG4gICAgICAgIGlmICghcmVxdWVzdCB8fCByZXF1ZXN0LnJlYWR5U3RhdGUgIT09IDQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgcmVxdWVzdCBlcnJvcmVkIG91dCBhbmQgd2UgZGlkbid0IGdldCBhIHJlc3BvbnNlLCB0aGlzIHdpbGwgYmVcbiAgICAgICAgLy8gaGFuZGxlZCBieSBvbmVycm9yIGluc3RlYWRcbiAgICAgICAgLy8gV2l0aCBvbmUgZXhjZXB0aW9uOiByZXF1ZXN0IHRoYXQgdXNpbmcgZmlsZTogcHJvdG9jb2wsIG1vc3QgYnJvd3NlcnNcbiAgICAgICAgLy8gd2lsbCByZXR1cm4gc3RhdHVzIGFzIDAgZXZlbiB0aG91Z2ggaXQncyBhIHN1Y2Nlc3NmdWwgcmVxdWVzdFxuICAgICAgICBpZiAocmVxdWVzdC5zdGF0dXMgPT09IDAgJiYgIShyZXF1ZXN0LnJlc3BvbnNlVVJMICYmIHJlcXVlc3QucmVzcG9uc2VVUkwuaW5kZXhPZignZmlsZTonKSA9PT0gMCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVhZHlzdGF0ZSBoYW5kbGVyIGlzIGNhbGxpbmcgYmVmb3JlIG9uZXJyb3Igb3Igb250aW1lb3V0IGhhbmRsZXJzLFxuICAgICAgICAvLyBzbyB3ZSBzaG91bGQgY2FsbCBvbmxvYWRlbmQgb24gdGhlIG5leHQgJ3RpY2snXG4gICAgICAgIHNldFRpbWVvdXQob25sb2FkZW5kKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGJyb3dzZXIgcmVxdWVzdCBjYW5jZWxsYXRpb24gKGFzIG9wcG9zZWQgdG8gYSBtYW51YWwgY2FuY2VsbGF0aW9uKVxuICAgIHJlcXVlc3Qub25hYm9ydCA9IGZ1bmN0aW9uIGhhbmRsZUFib3J0KCkge1xuICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdSZXF1ZXN0IGFib3J0ZWQnLCBBeGlvc0Vycm9yLkVDT05OQUJPUlRFRCwgX2NvbmZpZywgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIGxvdyBsZXZlbCBuZXR3b3JrIGVycm9yc1xuICAgIHJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uIGhhbmRsZUVycm9yKCkge1xuICAgICAgLy8gUmVhbCBlcnJvcnMgYXJlIGhpZGRlbiBmcm9tIHVzIGJ5IHRoZSBicm93c2VyXG4gICAgICAvLyBvbmVycm9yIHNob3VsZCBvbmx5IGZpcmUgaWYgaXQncyBhIG5ldHdvcmsgZXJyb3JcbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignTmV0d29yayBFcnJvcicsIEF4aW9zRXJyb3IuRVJSX05FVFdPUkssIF9jb25maWcsIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSB0aW1lb3V0XG4gICAgcmVxdWVzdC5vbnRpbWVvdXQgPSBmdW5jdGlvbiBoYW5kbGVUaW1lb3V0KCkge1xuICAgICAgbGV0IHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBfY29uZmlnLnRpbWVvdXQgPyAndGltZW91dCBvZiAnICsgX2NvbmZpZy50aW1lb3V0ICsgJ21zIGV4Y2VlZGVkJyA6ICd0aW1lb3V0IGV4Y2VlZGVkJztcbiAgICAgIGNvbnN0IHRyYW5zaXRpb25hbCA9IF9jb25maWcudHJhbnNpdGlvbmFsIHx8IHRyYW5zaXRpb25hbERlZmF1bHRzO1xuICAgICAgaWYgKF9jb25maWcudGltZW91dEVycm9yTWVzc2FnZSkge1xuICAgICAgICB0aW1lb3V0RXJyb3JNZXNzYWdlID0gX2NvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlO1xuICAgICAgfVxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICB0aW1lb3V0RXJyb3JNZXNzYWdlLFxuICAgICAgICB0cmFuc2l0aW9uYWwuY2xhcmlmeVRpbWVvdXRFcnJvciA/IEF4aW9zRXJyb3IuRVRJTUVET1VUIDogQXhpb3NFcnJvci5FQ09OTkFCT1JURUQsXG4gICAgICAgIF9jb25maWcsXG4gICAgICAgIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIFJlbW92ZSBDb250ZW50LVR5cGUgaWYgZGF0YSBpcyB1bmRlZmluZWRcbiAgICByZXF1ZXN0RGF0YSA9PT0gdW5kZWZpbmVkICYmIHJlcXVlc3RIZWFkZXJzLnNldENvbnRlbnRUeXBlKG51bGwpO1xuXG4gICAgLy8gQWRkIGhlYWRlcnMgdG8gdGhlIHJlcXVlc3RcbiAgICBpZiAoJ3NldFJlcXVlc3RIZWFkZXInIGluIHJlcXVlc3QpIHtcbiAgICAgIHV0aWxzJDEuZm9yRWFjaChyZXF1ZXN0SGVhZGVycy50b0pTT04oKSwgZnVuY3Rpb24gc2V0UmVxdWVzdEhlYWRlcih2YWwsIGtleSkge1xuICAgICAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWwpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIHdpdGhDcmVkZW50aWFscyB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmICghdXRpbHMkMS5pc1VuZGVmaW5lZChfY29uZmlnLndpdGhDcmVkZW50aWFscykpIHtcbiAgICAgIHJlcXVlc3Qud2l0aENyZWRlbnRpYWxzID0gISFfY29uZmlnLndpdGhDcmVkZW50aWFscztcbiAgICB9XG5cbiAgICAvLyBBZGQgcmVzcG9uc2VUeXBlIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKHJlc3BvbnNlVHlwZSAmJiByZXNwb25zZVR5cGUgIT09ICdqc29uJykge1xuICAgICAgcmVxdWVzdC5yZXNwb25zZVR5cGUgPSBfY29uZmlnLnJlc3BvbnNlVHlwZTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgcHJvZ3Jlc3MgaWYgbmVlZGVkXG4gICAgaWYgKHR5cGVvZiBfY29uZmlnLm9uRG93bmxvYWRQcm9ncmVzcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHByb2dyZXNzRXZlbnRSZWR1Y2VyKF9jb25maWcub25Eb3dubG9hZFByb2dyZXNzLCB0cnVlKSk7XG4gICAgfVxuXG4gICAgLy8gTm90IGFsbCBicm93c2VycyBzdXBwb3J0IHVwbG9hZCBldmVudHNcbiAgICBpZiAodHlwZW9mIF9jb25maWcub25VcGxvYWRQcm9ncmVzcyA9PT0gJ2Z1bmN0aW9uJyAmJiByZXF1ZXN0LnVwbG9hZCkge1xuICAgICAgcmVxdWVzdC51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBwcm9ncmVzc0V2ZW50UmVkdWNlcihfY29uZmlnLm9uVXBsb2FkUHJvZ3Jlc3MpKTtcbiAgICB9XG5cbiAgICBpZiAoX2NvbmZpZy5jYW5jZWxUb2tlbiB8fCBfY29uZmlnLnNpZ25hbCkge1xuICAgICAgLy8gSGFuZGxlIGNhbmNlbGxhdGlvblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICAgIG9uQ2FuY2VsZWQgPSBjYW5jZWwgPT4ge1xuICAgICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KCFjYW5jZWwgfHwgY2FuY2VsLnR5cGUgPyBuZXcgQ2FuY2VsZWRFcnJvcihudWxsLCBjb25maWcsIHJlcXVlc3QpIDogY2FuY2VsKTtcbiAgICAgICAgcmVxdWVzdC5hYm9ydCgpO1xuICAgICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIF9jb25maWcuY2FuY2VsVG9rZW4gJiYgX2NvbmZpZy5jYW5jZWxUb2tlbi5zdWJzY3JpYmUob25DYW5jZWxlZCk7XG4gICAgICBpZiAoX2NvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgX2NvbmZpZy5zaWduYWwuYWJvcnRlZCA/IG9uQ2FuY2VsZWQoKSA6IF9jb25maWcuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25DYW5jZWxlZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcHJvdG9jb2wgPSBwYXJzZVByb3RvY29sKF9jb25maWcudXJsKTtcblxuICAgIGlmIChwcm90b2NvbCAmJiBwbGF0Zm9ybS5wcm90b2NvbHMuaW5kZXhPZihwcm90b2NvbCkgPT09IC0xKSB7XG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ1Vuc3VwcG9ydGVkIHByb3RvY29sICcgKyBwcm90b2NvbCArICc6JywgQXhpb3NFcnJvci5FUlJfQkFEX1JFUVVFU1QsIGNvbmZpZykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG4gICAgLy8gU2VuZCB0aGUgcmVxdWVzdFxuICAgIHJlcXVlc3Quc2VuZChyZXF1ZXN0RGF0YSB8fCBudWxsKTtcbiAgfSk7XG59O1xuXG5jb25zdCBjb21wb3NlU2lnbmFscyA9IChzaWduYWxzLCB0aW1lb3V0KSA9PiB7XG4gIGxldCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gIGxldCBhYm9ydGVkO1xuXG4gIGNvbnN0IG9uYWJvcnQgPSBmdW5jdGlvbiAoY2FuY2VsKSB7XG4gICAgaWYgKCFhYm9ydGVkKSB7XG4gICAgICBhYm9ydGVkID0gdHJ1ZTtcbiAgICAgIHVuc3Vic2NyaWJlKCk7XG4gICAgICBjb25zdCBlcnIgPSBjYW5jZWwgaW5zdGFuY2VvZiBFcnJvciA/IGNhbmNlbCA6IHRoaXMucmVhc29uO1xuICAgICAgY29udHJvbGxlci5hYm9ydChlcnIgaW5zdGFuY2VvZiBBeGlvc0Vycm9yID8gZXJyIDogbmV3IENhbmNlbGVkRXJyb3IoZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IGVycikpO1xuICAgIH1cbiAgfTtcblxuICBsZXQgdGltZXIgPSB0aW1lb3V0ICYmIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIG9uYWJvcnQobmV3IEF4aW9zRXJyb3IoYHRpbWVvdXQgJHt0aW1lb3V0fSBvZiBtcyBleGNlZWRlZGAsIEF4aW9zRXJyb3IuRVRJTUVET1VUKSk7XG4gIH0sIHRpbWVvdXQpO1xuXG4gIGNvbnN0IHVuc3Vic2NyaWJlID0gKCkgPT4ge1xuICAgIGlmIChzaWduYWxzKSB7XG4gICAgICB0aW1lciAmJiBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgc2lnbmFscy5mb3JFYWNoKHNpZ25hbCA9PiB7XG4gICAgICAgIHNpZ25hbCAmJlxuICAgICAgICAoc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIgPyBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbmFib3J0KSA6IHNpZ25hbC51bnN1YnNjcmliZShvbmFib3J0KSk7XG4gICAgICB9KTtcbiAgICAgIHNpZ25hbHMgPSBudWxsO1xuICAgIH1cbiAgfTtcblxuICBzaWduYWxzLmZvckVhY2goKHNpZ25hbCkgPT4gc2lnbmFsICYmIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICYmIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uYWJvcnQpKTtcblxuICBjb25zdCB7c2lnbmFsfSA9IGNvbnRyb2xsZXI7XG5cbiAgc2lnbmFsLnVuc3Vic2NyaWJlID0gdW5zdWJzY3JpYmU7XG5cbiAgcmV0dXJuIFtzaWduYWwsICgpID0+IHtcbiAgICB0aW1lciAmJiBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgIHRpbWVyID0gbnVsbDtcbiAgfV07XG59O1xuXG52YXIgY29tcG9zZVNpZ25hbHMkMSA9IGNvbXBvc2VTaWduYWxzO1xuXG5jb25zdCBzdHJlYW1DaHVuayA9IGZ1bmN0aW9uKiAoY2h1bmssIGNodW5rU2l6ZSkge1xuICBsZXQgbGVuID0gY2h1bmsuYnl0ZUxlbmd0aDtcblxuICBpZiAoIWNodW5rU2l6ZSB8fCBsZW4gPCBjaHVua1NpemUpIHtcbiAgICB5aWVsZCBjaHVuaztcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgcG9zID0gMDtcbiAgbGV0IGVuZDtcblxuICB3aGlsZSAocG9zIDwgbGVuKSB7XG4gICAgZW5kID0gcG9zICsgY2h1bmtTaXplO1xuICAgIHlpZWxkIGNodW5rLnNsaWNlKHBvcywgZW5kKTtcbiAgICBwb3MgPSBlbmQ7XG4gIH1cbn07XG5cbmNvbnN0IHJlYWRCeXRlcyA9IGFzeW5jIGZ1bmN0aW9uKiAoaXRlcmFibGUsIGNodW5rU2l6ZSwgZW5jb2RlKSB7XG4gIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgaXRlcmFibGUpIHtcbiAgICB5aWVsZCogc3RyZWFtQ2h1bmsoQXJyYXlCdWZmZXIuaXNWaWV3KGNodW5rKSA/IGNodW5rIDogKGF3YWl0IGVuY29kZShTdHJpbmcoY2h1bmspKSksIGNodW5rU2l6ZSk7XG4gIH1cbn07XG5cbmNvbnN0IHRyYWNrU3RyZWFtID0gKHN0cmVhbSwgY2h1bmtTaXplLCBvblByb2dyZXNzLCBvbkZpbmlzaCwgZW5jb2RlKSA9PiB7XG4gIGNvbnN0IGl0ZXJhdG9yID0gcmVhZEJ5dGVzKHN0cmVhbSwgY2h1bmtTaXplLCBlbmNvZGUpO1xuXG4gIGxldCBieXRlcyA9IDA7XG5cbiAgcmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbSh7XG4gICAgdHlwZTogJ2J5dGVzJyxcblxuICAgIGFzeW5jIHB1bGwoY29udHJvbGxlcikge1xuICAgICAgY29uc3Qge2RvbmUsIHZhbHVlfSA9IGF3YWl0IGl0ZXJhdG9yLm5leHQoKTtcblxuICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgY29udHJvbGxlci5jbG9zZSgpO1xuICAgICAgICBvbkZpbmlzaCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxldCBsZW4gPSB2YWx1ZS5ieXRlTGVuZ3RoO1xuICAgICAgb25Qcm9ncmVzcyAmJiBvblByb2dyZXNzKGJ5dGVzICs9IGxlbik7XG4gICAgICBjb250cm9sbGVyLmVucXVldWUobmV3IFVpbnQ4QXJyYXkodmFsdWUpKTtcbiAgICB9LFxuICAgIGNhbmNlbChyZWFzb24pIHtcbiAgICAgIG9uRmluaXNoKHJlYXNvbik7XG4gICAgICByZXR1cm4gaXRlcmF0b3IucmV0dXJuKCk7XG4gICAgfVxuICB9LCB7XG4gICAgaGlnaFdhdGVyTWFyazogMlxuICB9KVxufTtcblxuY29uc3QgZmV0Y2hQcm9ncmVzc0RlY29yYXRvciA9ICh0b3RhbCwgZm4pID0+IHtcbiAgY29uc3QgbGVuZ3RoQ29tcHV0YWJsZSA9IHRvdGFsICE9IG51bGw7XG4gIHJldHVybiAobG9hZGVkKSA9PiBzZXRUaW1lb3V0KCgpID0+IGZuKHtcbiAgICBsZW5ndGhDb21wdXRhYmxlLFxuICAgIHRvdGFsLFxuICAgIGxvYWRlZFxuICB9KSk7XG59O1xuXG5jb25zdCBpc0ZldGNoU3VwcG9ydGVkID0gdHlwZW9mIGZldGNoID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBSZXF1ZXN0ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBSZXNwb25zZSA9PT0gJ2Z1bmN0aW9uJztcbmNvbnN0IGlzUmVhZGFibGVTdHJlYW1TdXBwb3J0ZWQgPSBpc0ZldGNoU3VwcG9ydGVkICYmIHR5cGVvZiBSZWFkYWJsZVN0cmVhbSA9PT0gJ2Z1bmN0aW9uJztcblxuLy8gdXNlZCBvbmx5IGluc2lkZSB0aGUgZmV0Y2ggYWRhcHRlclxuY29uc3QgZW5jb2RlVGV4dCA9IGlzRmV0Y2hTdXBwb3J0ZWQgJiYgKHR5cGVvZiBUZXh0RW5jb2RlciA9PT0gJ2Z1bmN0aW9uJyA/XG4gICAgKChlbmNvZGVyKSA9PiAoc3RyKSA9PiBlbmNvZGVyLmVuY29kZShzdHIpKShuZXcgVGV4dEVuY29kZXIoKSkgOlxuICAgIGFzeW5jIChzdHIpID0+IG5ldyBVaW50OEFycmF5KGF3YWl0IG5ldyBSZXNwb25zZShzdHIpLmFycmF5QnVmZmVyKCkpXG4pO1xuXG5jb25zdCBzdXBwb3J0c1JlcXVlc3RTdHJlYW0gPSBpc1JlYWRhYmxlU3RyZWFtU3VwcG9ydGVkICYmICgoKSA9PiB7XG4gIGxldCBkdXBsZXhBY2Nlc3NlZCA9IGZhbHNlO1xuXG4gIGNvbnN0IGhhc0NvbnRlbnRUeXBlID0gbmV3IFJlcXVlc3QocGxhdGZvcm0ub3JpZ2luLCB7XG4gICAgYm9keTogbmV3IFJlYWRhYmxlU3RyZWFtKCksXG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgZ2V0IGR1cGxleCgpIHtcbiAgICAgIGR1cGxleEFjY2Vzc2VkID0gdHJ1ZTtcbiAgICAgIHJldHVybiAnaGFsZic7XG4gICAgfSxcbiAgfSkuaGVhZGVycy5oYXMoJ0NvbnRlbnQtVHlwZScpO1xuXG4gIHJldHVybiBkdXBsZXhBY2Nlc3NlZCAmJiAhaGFzQ29udGVudFR5cGU7XG59KSgpO1xuXG5jb25zdCBERUZBVUxUX0NIVU5LX1NJWkUgPSA2NCAqIDEwMjQ7XG5cbmNvbnN0IHN1cHBvcnRzUmVzcG9uc2VTdHJlYW0gPSBpc1JlYWRhYmxlU3RyZWFtU3VwcG9ydGVkICYmICEhKCgpPT4ge1xuICB0cnkge1xuICAgIHJldHVybiB1dGlscyQxLmlzUmVhZGFibGVTdHJlYW0obmV3IFJlc3BvbnNlKCcnKS5ib2R5KTtcbiAgfSBjYXRjaChlcnIpIHtcbiAgICAvLyByZXR1cm4gdW5kZWZpbmVkXG4gIH1cbn0pKCk7XG5cbmNvbnN0IHJlc29sdmVycyA9IHtcbiAgc3RyZWFtOiBzdXBwb3J0c1Jlc3BvbnNlU3RyZWFtICYmICgocmVzKSA9PiByZXMuYm9keSlcbn07XG5cbmlzRmV0Y2hTdXBwb3J0ZWQgJiYgKCgocmVzKSA9PiB7XG4gIFsndGV4dCcsICdhcnJheUJ1ZmZlcicsICdibG9iJywgJ2Zvcm1EYXRhJywgJ3N0cmVhbSddLmZvckVhY2godHlwZSA9PiB7XG4gICAgIXJlc29sdmVyc1t0eXBlXSAmJiAocmVzb2x2ZXJzW3R5cGVdID0gdXRpbHMkMS5pc0Z1bmN0aW9uKHJlc1t0eXBlXSkgPyAocmVzKSA9PiByZXNbdHlwZV0oKSA6XG4gICAgICAoXywgY29uZmlnKSA9PiB7XG4gICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKGBSZXNwb25zZSB0eXBlICcke3R5cGV9JyBpcyBub3Qgc3VwcG9ydGVkYCwgQXhpb3NFcnJvci5FUlJfTk9UX1NVUFBPUlQsIGNvbmZpZyk7XG4gICAgICB9KTtcbiAgfSk7XG59KShuZXcgUmVzcG9uc2UpKTtcblxuY29uc3QgZ2V0Qm9keUxlbmd0aCA9IGFzeW5jIChib2R5KSA9PiB7XG4gIGlmIChib2R5ID09IG51bGwpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGlmKHV0aWxzJDEuaXNCbG9iKGJvZHkpKSB7XG4gICAgcmV0dXJuIGJvZHkuc2l6ZTtcbiAgfVxuXG4gIGlmKHV0aWxzJDEuaXNTcGVjQ29tcGxpYW50Rm9ybShib2R5KSkge1xuICAgIHJldHVybiAoYXdhaXQgbmV3IFJlcXVlc3QoYm9keSkuYXJyYXlCdWZmZXIoKSkuYnl0ZUxlbmd0aDtcbiAgfVxuXG4gIGlmKHV0aWxzJDEuaXNBcnJheUJ1ZmZlclZpZXcoYm9keSkpIHtcbiAgICByZXR1cm4gYm9keS5ieXRlTGVuZ3RoO1xuICB9XG5cbiAgaWYodXRpbHMkMS5pc1VSTFNlYXJjaFBhcmFtcyhib2R5KSkge1xuICAgIGJvZHkgPSBib2R5ICsgJyc7XG4gIH1cblxuICBpZih1dGlscyQxLmlzU3RyaW5nKGJvZHkpKSB7XG4gICAgcmV0dXJuIChhd2FpdCBlbmNvZGVUZXh0KGJvZHkpKS5ieXRlTGVuZ3RoO1xuICB9XG59O1xuXG5jb25zdCByZXNvbHZlQm9keUxlbmd0aCA9IGFzeW5jIChoZWFkZXJzLCBib2R5KSA9PiB7XG4gIGNvbnN0IGxlbmd0aCA9IHV0aWxzJDEudG9GaW5pdGVOdW1iZXIoaGVhZGVycy5nZXRDb250ZW50TGVuZ3RoKCkpO1xuXG4gIHJldHVybiBsZW5ndGggPT0gbnVsbCA/IGdldEJvZHlMZW5ndGgoYm9keSkgOiBsZW5ndGg7XG59O1xuXG52YXIgZmV0Y2hBZGFwdGVyID0gaXNGZXRjaFN1cHBvcnRlZCAmJiAoYXN5bmMgKGNvbmZpZykgPT4ge1xuICBsZXQge1xuICAgIHVybCxcbiAgICBtZXRob2QsXG4gICAgZGF0YSxcbiAgICBzaWduYWwsXG4gICAgY2FuY2VsVG9rZW4sXG4gICAgdGltZW91dCxcbiAgICBvbkRvd25sb2FkUHJvZ3Jlc3MsXG4gICAgb25VcGxvYWRQcm9ncmVzcyxcbiAgICByZXNwb25zZVR5cGUsXG4gICAgaGVhZGVycyxcbiAgICB3aXRoQ3JlZGVudGlhbHMgPSAnc2FtZS1vcmlnaW4nLFxuICAgIGZldGNoT3B0aW9uc1xuICB9ID0gcmVzb2x2ZUNvbmZpZyhjb25maWcpO1xuXG4gIHJlc3BvbnNlVHlwZSA9IHJlc3BvbnNlVHlwZSA/IChyZXNwb25zZVR5cGUgKyAnJykudG9Mb3dlckNhc2UoKSA6ICd0ZXh0JztcblxuICBsZXQgW2NvbXBvc2VkU2lnbmFsLCBzdG9wVGltZW91dF0gPSAoc2lnbmFsIHx8IGNhbmNlbFRva2VuIHx8IHRpbWVvdXQpID9cbiAgICBjb21wb3NlU2lnbmFscyQxKFtzaWduYWwsIGNhbmNlbFRva2VuXSwgdGltZW91dCkgOiBbXTtcblxuICBsZXQgZmluaXNoZWQsIHJlcXVlc3Q7XG5cbiAgY29uc3Qgb25GaW5pc2ggPSAoKSA9PiB7XG4gICAgIWZpbmlzaGVkICYmIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29tcG9zZWRTaWduYWwgJiYgY29tcG9zZWRTaWduYWwudW5zdWJzY3JpYmUoKTtcbiAgICB9KTtcblxuICAgIGZpbmlzaGVkID0gdHJ1ZTtcbiAgfTtcblxuICBsZXQgcmVxdWVzdENvbnRlbnRMZW5ndGg7XG5cbiAgdHJ5IHtcbiAgICBpZiAoXG4gICAgICBvblVwbG9hZFByb2dyZXNzICYmIHN1cHBvcnRzUmVxdWVzdFN0cmVhbSAmJiBtZXRob2QgIT09ICdnZXQnICYmIG1ldGhvZCAhPT0gJ2hlYWQnICYmXG4gICAgICAocmVxdWVzdENvbnRlbnRMZW5ndGggPSBhd2FpdCByZXNvbHZlQm9keUxlbmd0aChoZWFkZXJzLCBkYXRhKSkgIT09IDBcbiAgICApIHtcbiAgICAgIGxldCBfcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHVybCwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgYm9keTogZGF0YSxcbiAgICAgICAgZHVwbGV4OiBcImhhbGZcIlxuICAgICAgfSk7XG5cbiAgICAgIGxldCBjb250ZW50VHlwZUhlYWRlcjtcblxuICAgICAgaWYgKHV0aWxzJDEuaXNGb3JtRGF0YShkYXRhKSAmJiAoY29udGVudFR5cGVIZWFkZXIgPSBfcmVxdWVzdC5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJykpKSB7XG4gICAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUoY29udGVudFR5cGVIZWFkZXIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoX3JlcXVlc3QuYm9keSkge1xuICAgICAgICBkYXRhID0gdHJhY2tTdHJlYW0oX3JlcXVlc3QuYm9keSwgREVGQVVMVF9DSFVOS19TSVpFLCBmZXRjaFByb2dyZXNzRGVjb3JhdG9yKFxuICAgICAgICAgIHJlcXVlc3RDb250ZW50TGVuZ3RoLFxuICAgICAgICAgIHByb2dyZXNzRXZlbnRSZWR1Y2VyKG9uVXBsb2FkUHJvZ3Jlc3MpXG4gICAgICAgICksIG51bGwsIGVuY29kZVRleHQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdXRpbHMkMS5pc1N0cmluZyh3aXRoQ3JlZGVudGlhbHMpKSB7XG4gICAgICB3aXRoQ3JlZGVudGlhbHMgPSB3aXRoQ3JlZGVudGlhbHMgPyAnY29ycycgOiAnb21pdCc7XG4gICAgfVxuXG4gICAgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHVybCwge1xuICAgICAgLi4uZmV0Y2hPcHRpb25zLFxuICAgICAgc2lnbmFsOiBjb21wb3NlZFNpZ25hbCxcbiAgICAgIG1ldGhvZDogbWV0aG9kLnRvVXBwZXJDYXNlKCksXG4gICAgICBoZWFkZXJzOiBoZWFkZXJzLm5vcm1hbGl6ZSgpLnRvSlNPTigpLFxuICAgICAgYm9keTogZGF0YSxcbiAgICAgIGR1cGxleDogXCJoYWxmXCIsXG4gICAgICB3aXRoQ3JlZGVudGlhbHNcbiAgICB9KTtcblxuICAgIGxldCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHJlcXVlc3QpO1xuXG4gICAgY29uc3QgaXNTdHJlYW1SZXNwb25zZSA9IHN1cHBvcnRzUmVzcG9uc2VTdHJlYW0gJiYgKHJlc3BvbnNlVHlwZSA9PT0gJ3N0cmVhbScgfHwgcmVzcG9uc2VUeXBlID09PSAncmVzcG9uc2UnKTtcblxuICAgIGlmIChzdXBwb3J0c1Jlc3BvbnNlU3RyZWFtICYmIChvbkRvd25sb2FkUHJvZ3Jlc3MgfHwgaXNTdHJlYW1SZXNwb25zZSkpIHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB7fTtcblxuICAgICAgWydzdGF0dXMnLCAnc3RhdHVzVGV4dCcsICdoZWFkZXJzJ10uZm9yRWFjaChwcm9wID0+IHtcbiAgICAgICAgb3B0aW9uc1twcm9wXSA9IHJlc3BvbnNlW3Byb3BdO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlQ29udGVudExlbmd0aCA9IHV0aWxzJDEudG9GaW5pdGVOdW1iZXIocmVzcG9uc2UuaGVhZGVycy5nZXQoJ2NvbnRlbnQtbGVuZ3RoJykpO1xuXG4gICAgICByZXNwb25zZSA9IG5ldyBSZXNwb25zZShcbiAgICAgICAgdHJhY2tTdHJlYW0ocmVzcG9uc2UuYm9keSwgREVGQVVMVF9DSFVOS19TSVpFLCBvbkRvd25sb2FkUHJvZ3Jlc3MgJiYgZmV0Y2hQcm9ncmVzc0RlY29yYXRvcihcbiAgICAgICAgICByZXNwb25zZUNvbnRlbnRMZW5ndGgsXG4gICAgICAgICAgcHJvZ3Jlc3NFdmVudFJlZHVjZXIob25Eb3dubG9hZFByb2dyZXNzLCB0cnVlKVxuICAgICAgICApLCBpc1N0cmVhbVJlc3BvbnNlICYmIG9uRmluaXNoLCBlbmNvZGVUZXh0KSxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXNwb25zZVR5cGUgPSByZXNwb25zZVR5cGUgfHwgJ3RleHQnO1xuXG4gICAgbGV0IHJlc3BvbnNlRGF0YSA9IGF3YWl0IHJlc29sdmVyc1t1dGlscyQxLmZpbmRLZXkocmVzb2x2ZXJzLCByZXNwb25zZVR5cGUpIHx8ICd0ZXh0J10ocmVzcG9uc2UsIGNvbmZpZyk7XG5cbiAgICAhaXNTdHJlYW1SZXNwb25zZSAmJiBvbkZpbmlzaCgpO1xuXG4gICAgc3RvcFRpbWVvdXQgJiYgc3RvcFRpbWVvdXQoKTtcblxuICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB7XG4gICAgICAgIGRhdGE6IHJlc3BvbnNlRGF0YSxcbiAgICAgICAgaGVhZGVyczogQXhpb3NIZWFkZXJzJDEuZnJvbShyZXNwb25zZS5oZWFkZXJzKSxcbiAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IHJlc3BvbnNlLnN0YXR1c1RleHQsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdFxuICAgICAgfSk7XG4gICAgfSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgb25GaW5pc2goKTtcblxuICAgIGlmIChlcnIgJiYgZXJyLm5hbWUgPT09ICdUeXBlRXJyb3InICYmIC9mZXRjaC9pLnRlc3QoZXJyLm1lc3NhZ2UpKSB7XG4gICAgICB0aHJvdyBPYmplY3QuYXNzaWduKFxuICAgICAgICBuZXcgQXhpb3NFcnJvcignTmV0d29yayBFcnJvcicsIEF4aW9zRXJyb3IuRVJSX05FVFdPUkssIGNvbmZpZywgcmVxdWVzdCksXG4gICAgICAgIHtcbiAgICAgICAgICBjYXVzZTogZXJyLmNhdXNlIHx8IGVyclxuICAgICAgICB9XG4gICAgICApXG4gICAgfVxuXG4gICAgdGhyb3cgQXhpb3NFcnJvci5mcm9tKGVyciwgZXJyICYmIGVyci5jb2RlLCBjb25maWcsIHJlcXVlc3QpO1xuICB9XG59KTtcblxuY29uc3Qga25vd25BZGFwdGVycyA9IHtcbiAgaHR0cDogaHR0cEFkYXB0ZXIsXG4gIHhocjogeGhyQWRhcHRlcixcbiAgZmV0Y2g6IGZldGNoQWRhcHRlclxufTtcblxudXRpbHMkMS5mb3JFYWNoKGtub3duQWRhcHRlcnMsIChmbiwgdmFsdWUpID0+IHtcbiAgaWYgKGZuKSB7XG4gICAgdHJ5IHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgJ25hbWUnLCB7dmFsdWV9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHlcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZuLCAnYWRhcHRlck5hbWUnLCB7dmFsdWV9KTtcbiAgfVxufSk7XG5cbmNvbnN0IHJlbmRlclJlYXNvbiA9IChyZWFzb24pID0+IGAtICR7cmVhc29ufWA7XG5cbmNvbnN0IGlzUmVzb2x2ZWRIYW5kbGUgPSAoYWRhcHRlcikgPT4gdXRpbHMkMS5pc0Z1bmN0aW9uKGFkYXB0ZXIpIHx8IGFkYXB0ZXIgPT09IG51bGwgfHwgYWRhcHRlciA9PT0gZmFsc2U7XG5cbnZhciBhZGFwdGVycyA9IHtcbiAgZ2V0QWRhcHRlcjogKGFkYXB0ZXJzKSA9PiB7XG4gICAgYWRhcHRlcnMgPSB1dGlscyQxLmlzQXJyYXkoYWRhcHRlcnMpID8gYWRhcHRlcnMgOiBbYWRhcHRlcnNdO1xuXG4gICAgY29uc3Qge2xlbmd0aH0gPSBhZGFwdGVycztcbiAgICBsZXQgbmFtZU9yQWRhcHRlcjtcbiAgICBsZXQgYWRhcHRlcjtcblxuICAgIGNvbnN0IHJlamVjdGVkUmVhc29ucyA9IHt9O1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgbmFtZU9yQWRhcHRlciA9IGFkYXB0ZXJzW2ldO1xuICAgICAgbGV0IGlkO1xuXG4gICAgICBhZGFwdGVyID0gbmFtZU9yQWRhcHRlcjtcblxuICAgICAgaWYgKCFpc1Jlc29sdmVkSGFuZGxlKG5hbWVPckFkYXB0ZXIpKSB7XG4gICAgICAgIGFkYXB0ZXIgPSBrbm93bkFkYXB0ZXJzWyhpZCA9IFN0cmluZyhuYW1lT3JBZGFwdGVyKSkudG9Mb3dlckNhc2UoKV07XG5cbiAgICAgICAgaWYgKGFkYXB0ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKGBVbmtub3duIGFkYXB0ZXIgJyR7aWR9J2ApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChhZGFwdGVyKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICByZWplY3RlZFJlYXNvbnNbaWQgfHwgJyMnICsgaV0gPSBhZGFwdGVyO1xuICAgIH1cblxuICAgIGlmICghYWRhcHRlcikge1xuXG4gICAgICBjb25zdCByZWFzb25zID0gT2JqZWN0LmVudHJpZXMocmVqZWN0ZWRSZWFzb25zKVxuICAgICAgICAubWFwKChbaWQsIHN0YXRlXSkgPT4gYGFkYXB0ZXIgJHtpZH0gYCArXG4gICAgICAgICAgKHN0YXRlID09PSBmYWxzZSA/ICdpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCcgOiAnaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnVpbGQnKVxuICAgICAgICApO1xuXG4gICAgICBsZXQgcyA9IGxlbmd0aCA/XG4gICAgICAgIChyZWFzb25zLmxlbmd0aCA+IDEgPyAnc2luY2UgOlxcbicgKyByZWFzb25zLm1hcChyZW5kZXJSZWFzb24pLmpvaW4oJ1xcbicpIDogJyAnICsgcmVuZGVyUmVhc29uKHJlYXNvbnNbMF0pKSA6XG4gICAgICAgICdhcyBubyBhZGFwdGVyIHNwZWNpZmllZCc7XG5cbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICBgVGhlcmUgaXMgbm8gc3VpdGFibGUgYWRhcHRlciB0byBkaXNwYXRjaCB0aGUgcmVxdWVzdCBgICsgcyxcbiAgICAgICAgJ0VSUl9OT1RfU1VQUE9SVCdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkYXB0ZXI7XG4gIH0sXG4gIGFkYXB0ZXJzOiBrbm93bkFkYXB0ZXJzXG59O1xuXG4vKipcbiAqIFRocm93cyBhIGBDYW5jZWxlZEVycm9yYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyB0aGF0IGlzIHRvIGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0XG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKSB7XG4gIGlmIChjb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICBjb25maWcuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpO1xuICB9XG5cbiAgaWYgKGNvbmZpZy5zaWduYWwgJiYgY29uZmlnLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgdGhyb3cgbmV3IENhbmNlbGVkRXJyb3IobnVsbCwgY29uZmlnKTtcbiAgfVxufVxuXG4vKipcbiAqIERpc3BhdGNoIGEgcmVxdWVzdCB0byB0aGUgc2VydmVyIHVzaW5nIHRoZSBjb25maWd1cmVkIGFkYXB0ZXIuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHRoYXQgaXMgdG8gYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RcbiAqXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gVGhlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkXG4gKi9cbmZ1bmN0aW9uIGRpc3BhdGNoUmVxdWVzdChjb25maWcpIHtcbiAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gIGNvbmZpZy5oZWFkZXJzID0gQXhpb3NIZWFkZXJzJDEuZnJvbShjb25maWcuaGVhZGVycyk7XG5cbiAgLy8gVHJhbnNmb3JtIHJlcXVlc3QgZGF0YVxuICBjb25maWcuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICBjb25maWcsXG4gICAgY29uZmlnLnRyYW5zZm9ybVJlcXVlc3RcbiAgKTtcblxuICBpZiAoWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLmluZGV4T2YoY29uZmlnLm1ldGhvZCkgIT09IC0xKSB7XG4gICAgY29uZmlnLmhlYWRlcnMuc2V0Q29udGVudFR5cGUoJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsIGZhbHNlKTtcbiAgfVxuXG4gIGNvbnN0IGFkYXB0ZXIgPSBhZGFwdGVycy5nZXRBZGFwdGVyKGNvbmZpZy5hZGFwdGVyIHx8IGRlZmF1bHRzJDEuYWRhcHRlcik7XG5cbiAgcmV0dXJuIGFkYXB0ZXIoY29uZmlnKS50aGVuKGZ1bmN0aW9uIG9uQWRhcHRlclJlc29sdXRpb24ocmVzcG9uc2UpIHtcbiAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgIHJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgICBjb25maWcsXG4gICAgICBjb25maWcudHJhbnNmb3JtUmVzcG9uc2UsXG4gICAgICByZXNwb25zZVxuICAgICk7XG5cbiAgICByZXNwb25zZS5oZWFkZXJzID0gQXhpb3NIZWFkZXJzJDEuZnJvbShyZXNwb25zZS5oZWFkZXJzKTtcblxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfSwgZnVuY3Rpb24gb25BZGFwdGVyUmVqZWN0aW9uKHJlYXNvbikge1xuICAgIGlmICghaXNDYW5jZWwocmVhc29uKSkge1xuICAgICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgICAgaWYgKHJlYXNvbiAmJiByZWFzb24ucmVzcG9uc2UpIHtcbiAgICAgICAgcmVhc29uLnJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZSxcbiAgICAgICAgICByZWFzb24ucmVzcG9uc2VcbiAgICAgICAgKTtcbiAgICAgICAgcmVhc29uLnJlc3BvbnNlLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5mcm9tKHJlYXNvbi5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVhc29uKTtcbiAgfSk7XG59XG5cbmNvbnN0IFZFUlNJT04gPSBcIjEuNy4yXCI7XG5cbmNvbnN0IHZhbGlkYXRvcnMkMSA9IHt9O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuWydvYmplY3QnLCAnYm9vbGVhbicsICdudW1iZXInLCAnZnVuY3Rpb24nLCAnc3RyaW5nJywgJ3N5bWJvbCddLmZvckVhY2goKHR5cGUsIGkpID0+IHtcbiAgdmFsaWRhdG9ycyQxW3R5cGVdID0gZnVuY3Rpb24gdmFsaWRhdG9yKHRoaW5nKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGluZyA9PT0gdHlwZSB8fCAnYScgKyAoaSA8IDEgPyAnbiAnIDogJyAnKSArIHR5cGU7XG4gIH07XG59KTtcblxuY29uc3QgZGVwcmVjYXRlZFdhcm5pbmdzID0ge307XG5cbi8qKlxuICogVHJhbnNpdGlvbmFsIG9wdGlvbiB2YWxpZGF0b3JcbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufGJvb2xlYW4/fSB2YWxpZGF0b3IgLSBzZXQgdG8gZmFsc2UgaWYgdGhlIHRyYW5zaXRpb25hbCBvcHRpb24gaGFzIGJlZW4gcmVtb3ZlZFxuICogQHBhcmFtIHtzdHJpbmc/fSB2ZXJzaW9uIC0gZGVwcmVjYXRlZCB2ZXJzaW9uIC8gcmVtb3ZlZCBzaW5jZSB2ZXJzaW9uXG4gKiBAcGFyYW0ge3N0cmluZz99IG1lc3NhZ2UgLSBzb21lIG1lc3NhZ2Ugd2l0aCBhZGRpdGlvbmFsIGluZm9cbiAqXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259XG4gKi9cbnZhbGlkYXRvcnMkMS50cmFuc2l0aW9uYWwgPSBmdW5jdGlvbiB0cmFuc2l0aW9uYWwodmFsaWRhdG9yLCB2ZXJzaW9uLCBtZXNzYWdlKSB7XG4gIGZ1bmN0aW9uIGZvcm1hdE1lc3NhZ2Uob3B0LCBkZXNjKSB7XG4gICAgcmV0dXJuICdbQXhpb3MgdicgKyBWRVJTSU9OICsgJ10gVHJhbnNpdGlvbmFsIG9wdGlvbiBcXCcnICsgb3B0ICsgJ1xcJycgKyBkZXNjICsgKG1lc3NhZ2UgPyAnLiAnICsgbWVzc2FnZSA6ICcnKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHJldHVybiAodmFsdWUsIG9wdCwgb3B0cykgPT4ge1xuICAgIGlmICh2YWxpZGF0b3IgPT09IGZhbHNlKSB7XG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgZm9ybWF0TWVzc2FnZShvcHQsICcgaGFzIGJlZW4gcmVtb3ZlZCcgKyAodmVyc2lvbiA/ICcgaW4gJyArIHZlcnNpb24gOiAnJykpLFxuICAgICAgICBBeGlvc0Vycm9yLkVSUl9ERVBSRUNBVEVEXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh2ZXJzaW9uICYmICFkZXByZWNhdGVkV2FybmluZ3Nbb3B0XSkge1xuICAgICAgZGVwcmVjYXRlZFdhcm5pbmdzW29wdF0gPSB0cnVlO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgZm9ybWF0TWVzc2FnZShcbiAgICAgICAgICBvcHQsXG4gICAgICAgICAgJyBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYnICsgdmVyc2lvbiArICcgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUnXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRvciA/IHZhbGlkYXRvcih2YWx1ZSwgb3B0LCBvcHRzKSA6IHRydWU7XG4gIH07XG59O1xuXG4vKipcbiAqIEFzc2VydCBvYmplY3QncyBwcm9wZXJ0aWVzIHR5cGVcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtIHtvYmplY3R9IHNjaGVtYVxuICogQHBhcmFtIHtib29sZWFuP30gYWxsb3dVbmtub3duXG4gKlxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuXG5mdW5jdGlvbiBhc3NlcnRPcHRpb25zKG9wdGlvbnMsIHNjaGVtYSwgYWxsb3dVbmtub3duKSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT05fVkFMVUUpO1xuICB9XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvcHRpb25zKTtcbiAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGktLSA+IDApIHtcbiAgICBjb25zdCBvcHQgPSBrZXlzW2ldO1xuICAgIGNvbnN0IHZhbGlkYXRvciA9IHNjaGVtYVtvcHRdO1xuICAgIGlmICh2YWxpZGF0b3IpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gb3B0aW9uc1tvcHRdO1xuICAgICAgY29uc3QgcmVzdWx0ID0gdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWxpZGF0b3IodmFsdWUsIG9wdCwgb3B0aW9ucyk7XG4gICAgICBpZiAocmVzdWx0ICE9PSB0cnVlKSB7XG4gICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdvcHRpb24gJyArIG9wdCArICcgbXVzdCBiZSAnICsgcmVzdWx0LCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoYWxsb3dVbmtub3duICE9PSB0cnVlKSB7XG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignVW5rbm93biBvcHRpb24gJyArIG9wdCwgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTik7XG4gICAgfVxuICB9XG59XG5cbnZhciB2YWxpZGF0b3IgPSB7XG4gIGFzc2VydE9wdGlvbnMsXG4gIHZhbGlkYXRvcnM6IHZhbGlkYXRvcnMkMVxufTtcblxuY29uc3QgdmFsaWRhdG9ycyA9IHZhbGlkYXRvci52YWxpZGF0b3JzO1xuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZUNvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm4ge0F4aW9zfSBBIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICovXG5jbGFzcyBBeGlvcyB7XG4gIGNvbnN0cnVjdG9yKGluc3RhbmNlQ29uZmlnKSB7XG4gICAgdGhpcy5kZWZhdWx0cyA9IGluc3RhbmNlQ29uZmlnO1xuICAgIHRoaXMuaW50ZXJjZXB0b3JzID0ge1xuICAgICAgcmVxdWVzdDogbmV3IEludGVyY2VwdG9yTWFuYWdlciQxKCksXG4gICAgICByZXNwb25zZTogbmV3IEludGVyY2VwdG9yTWFuYWdlciQxKClcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BhdGNoIGEgcmVxdWVzdFxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ3xPYmplY3R9IGNvbmZpZ09yVXJsIFRoZSBjb25maWcgc3BlY2lmaWMgZm9yIHRoaXMgcmVxdWVzdCAobWVyZ2VkIHdpdGggdGhpcy5kZWZhdWx0cylcbiAgICogQHBhcmFtIHs/T2JqZWN0fSBjb25maWdcbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2V9IFRoZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZFxuICAgKi9cbiAgYXN5bmMgcmVxdWVzdChjb25maWdPclVybCwgY29uZmlnKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIGxldCBkdW1teTtcblxuICAgICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSA/IEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGR1bW15ID0ge30pIDogKGR1bW15ID0gbmV3IEVycm9yKCkpO1xuXG4gICAgICAgIC8vIHNsaWNlIG9mZiB0aGUgRXJyb3I6IC4uLiBsaW5lXG4gICAgICAgIGNvbnN0IHN0YWNrID0gZHVtbXkuc3RhY2sgPyBkdW1teS5zdGFjay5yZXBsYWNlKC9eLitcXG4vLCAnJykgOiAnJztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoIWVyci5zdGFjaykge1xuICAgICAgICAgICAgZXJyLnN0YWNrID0gc3RhY2s7XG4gICAgICAgICAgICAvLyBtYXRjaCB3aXRob3V0IHRoZSAyIHRvcCBzdGFjayBsaW5lc1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3RhY2sgJiYgIVN0cmluZyhlcnIuc3RhY2spLmVuZHNXaXRoKHN0YWNrLnJlcGxhY2UoL14uK1xcbi4rXFxuLywgJycpKSkge1xuICAgICAgICAgICAgZXJyLnN0YWNrICs9ICdcXG4nICsgc3RhY2s7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgLy8gaWdub3JlIHRoZSBjYXNlIHdoZXJlIFwic3RhY2tcIiBpcyBhbiB1bi13cml0YWJsZSBwcm9wZXJ0eVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICBfcmVxdWVzdChjb25maWdPclVybCwgY29uZmlnKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgLy8gQWxsb3cgZm9yIGF4aW9zKCdleGFtcGxlL3VybCdbLCBjb25maWddKSBhIGxhIGZldGNoIEFQSVxuICAgIGlmICh0eXBlb2YgY29uZmlnT3JVcmwgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25maWcgPSBjb25maWcgfHwge307XG4gICAgICBjb25maWcudXJsID0gY29uZmlnT3JVcmw7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbmZpZyA9IGNvbmZpZ09yVXJsIHx8IHt9O1xuICAgIH1cblxuICAgIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG5cbiAgICBjb25zdCB7dHJhbnNpdGlvbmFsLCBwYXJhbXNTZXJpYWxpemVyLCBoZWFkZXJzfSA9IGNvbmZpZztcblxuICAgIGlmICh0cmFuc2l0aW9uYWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFsaWRhdG9yLmFzc2VydE9wdGlvbnModHJhbnNpdGlvbmFsLCB7XG4gICAgICAgIHNpbGVudEpTT05QYXJzaW5nOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pLFxuICAgICAgICBmb3JjZWRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgICAgY2xhcmlmeVRpbWVvdXRFcnJvcjogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKVxuICAgICAgfSwgZmFsc2UpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXNTZXJpYWxpemVyICE9IG51bGwpIHtcbiAgICAgIGlmICh1dGlscyQxLmlzRnVuY3Rpb24ocGFyYW1zU2VyaWFsaXplcikpIHtcbiAgICAgICAgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIgPSB7XG4gICAgICAgICAgc2VyaWFsaXplOiBwYXJhbXNTZXJpYWxpemVyXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWxpZGF0b3IuYXNzZXJ0T3B0aW9ucyhwYXJhbXNTZXJpYWxpemVyLCB7XG4gICAgICAgICAgZW5jb2RlOiB2YWxpZGF0b3JzLmZ1bmN0aW9uLFxuICAgICAgICAgIHNlcmlhbGl6ZTogdmFsaWRhdG9ycy5mdW5jdGlvblxuICAgICAgICB9LCB0cnVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZXQgY29uZmlnLm1ldGhvZFxuICAgIGNvbmZpZy5tZXRob2QgPSAoY29uZmlnLm1ldGhvZCB8fCB0aGlzLmRlZmF1bHRzLm1ldGhvZCB8fCAnZ2V0JykudG9Mb3dlckNhc2UoKTtcblxuICAgIC8vIEZsYXR0ZW4gaGVhZGVyc1xuICAgIGxldCBjb250ZXh0SGVhZGVycyA9IGhlYWRlcnMgJiYgdXRpbHMkMS5tZXJnZShcbiAgICAgIGhlYWRlcnMuY29tbW9uLFxuICAgICAgaGVhZGVyc1tjb25maWcubWV0aG9kXVxuICAgICk7XG5cbiAgICBoZWFkZXJzICYmIHV0aWxzJDEuZm9yRWFjaChcbiAgICAgIFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJywgJ2NvbW1vbiddLFxuICAgICAgKG1ldGhvZCkgPT4ge1xuICAgICAgICBkZWxldGUgaGVhZGVyc1ttZXRob2RdO1xuICAgICAgfVxuICAgICk7XG5cbiAgICBjb25maWcuaGVhZGVycyA9IEF4aW9zSGVhZGVycyQxLmNvbmNhdChjb250ZXh0SGVhZGVycywgaGVhZGVycyk7XG5cbiAgICAvLyBmaWx0ZXIgb3V0IHNraXBwZWQgaW50ZXJjZXB0b3JzXG4gICAgY29uc3QgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4gPSBbXTtcbiAgICBsZXQgc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzID0gdHJ1ZTtcbiAgICB0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24gdW5zaGlmdFJlcXVlc3RJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICAgIGlmICh0eXBlb2YgaW50ZXJjZXB0b3IucnVuV2hlbiA9PT0gJ2Z1bmN0aW9uJyAmJiBpbnRlcmNlcHRvci5ydW5XaGVuKGNvbmZpZykgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzID0gc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzICYmIGludGVyY2VwdG9yLnN5bmNocm9ub3VzO1xuXG4gICAgICByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi51bnNoaWZ0KGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluID0gW107XG4gICAgdGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbiBwdXNoUmVzcG9uc2VJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICAgIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5wdXNoKGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgbGV0IHByb21pc2U7XG4gICAgbGV0IGkgPSAwO1xuICAgIGxldCBsZW47XG5cbiAgICBpZiAoIXN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycykge1xuICAgICAgY29uc3QgY2hhaW4gPSBbZGlzcGF0Y2hSZXF1ZXN0LmJpbmQodGhpcyksIHVuZGVmaW5lZF07XG4gICAgICBjaGFpbi51bnNoaWZ0LmFwcGx5KGNoYWluLCByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbik7XG4gICAgICBjaGFpbi5wdXNoLmFwcGx5KGNoYWluLCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4pO1xuICAgICAgbGVuID0gY2hhaW4ubGVuZ3RoO1xuXG4gICAgICBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKGNvbmZpZyk7XG5cbiAgICAgIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4oY2hhaW5baSsrXSwgY2hhaW5baSsrXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH1cblxuICAgIGxlbiA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLmxlbmd0aDtcblxuICAgIGxldCBuZXdDb25maWcgPSBjb25maWc7XG5cbiAgICBpID0gMDtcblxuICAgIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgICBjb25zdCBvbkZ1bGZpbGxlZCA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluW2krK107XG4gICAgICBjb25zdCBvblJlamVjdGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW5baSsrXTtcbiAgICAgIHRyeSB7XG4gICAgICAgIG5ld0NvbmZpZyA9IG9uRnVsZmlsbGVkKG5ld0NvbmZpZyk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBvblJlamVjdGVkLmNhbGwodGhpcywgZXJyb3IpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcHJvbWlzZSA9IGRpc3BhdGNoUmVxdWVzdC5jYWxsKHRoaXMsIG5ld0NvbmZpZyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgfVxuXG4gICAgaSA9IDA7XG4gICAgbGVuID0gcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLmxlbmd0aDtcblxuICAgIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbltpKytdLCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW5baSsrXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuICBnZXRVcmkoY29uZmlnKSB7XG4gICAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcbiAgICBjb25zdCBmdWxsUGF0aCA9IGJ1aWxkRnVsbFBhdGgoY29uZmlnLmJhc2VVUkwsIGNvbmZpZy51cmwpO1xuICAgIHJldHVybiBidWlsZFVSTChmdWxsUGF0aCwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpO1xuICB9XG59XG5cbi8vIFByb3ZpZGUgYWxpYXNlcyBmb3Igc3VwcG9ydGVkIHJlcXVlc3QgbWV0aG9kc1xudXRpbHMkMS5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ29wdGlvbnMnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZE5vRGF0YShtZXRob2QpIHtcbiAgLyplc2xpbnQgZnVuYy1uYW1lczowKi9cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbih1cmwsIGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QobWVyZ2VDb25maWcoY29uZmlnIHx8IHt9LCB7XG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICBkYXRhOiAoY29uZmlnIHx8IHt9KS5kYXRhXG4gICAgfSkpO1xuICB9O1xufSk7XG5cbnV0aWxzJDEuZm9yRWFjaChbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2RXaXRoRGF0YShtZXRob2QpIHtcbiAgLyplc2xpbnQgZnVuYy1uYW1lczowKi9cblxuICBmdW5jdGlvbiBnZW5lcmF0ZUhUVFBNZXRob2QoaXNGb3JtKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGh0dHBNZXRob2QodXJsLCBkYXRhLCBjb25maWcpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QobWVyZ2VDb25maWcoY29uZmlnIHx8IHt9LCB7XG4gICAgICAgIG1ldGhvZCxcbiAgICAgICAgaGVhZGVyczogaXNGb3JtID8ge1xuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YSdcbiAgICAgICAgfSA6IHt9LFxuICAgICAgICB1cmwsXG4gICAgICAgIGRhdGFcbiAgICAgIH0pKTtcbiAgICB9O1xuICB9XG5cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZF0gPSBnZW5lcmF0ZUhUVFBNZXRob2QoKTtcblxuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kICsgJ0Zvcm0nXSA9IGdlbmVyYXRlSFRUUE1ldGhvZCh0cnVlKTtcbn0pO1xuXG52YXIgQXhpb3MkMSA9IEF4aW9zO1xuXG4vKipcbiAqIEEgYENhbmNlbFRva2VuYCBpcyBhbiBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byByZXF1ZXN0IGNhbmNlbGxhdGlvbiBvZiBhbiBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXhlY3V0b3IgVGhlIGV4ZWN1dG9yIGZ1bmN0aW9uLlxuICpcbiAqIEByZXR1cm5zIHtDYW5jZWxUb2tlbn1cbiAqL1xuY2xhc3MgQ2FuY2VsVG9rZW4ge1xuICBjb25zdHJ1Y3RvcihleGVjdXRvcikge1xuICAgIGlmICh0eXBlb2YgZXhlY3V0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4nKTtcbiAgICB9XG5cbiAgICBsZXQgcmVzb2x2ZVByb21pc2U7XG5cbiAgICB0aGlzLnByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiBwcm9taXNlRXhlY3V0b3IocmVzb2x2ZSkge1xuICAgICAgcmVzb2x2ZVByb21pc2UgPSByZXNvbHZlO1xuICAgIH0pO1xuXG4gICAgY29uc3QgdG9rZW4gPSB0aGlzO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICB0aGlzLnByb21pc2UudGhlbihjYW5jZWwgPT4ge1xuICAgICAgaWYgKCF0b2tlbi5fbGlzdGVuZXJzKSByZXR1cm47XG5cbiAgICAgIGxldCBpID0gdG9rZW4uX2xpc3RlbmVycy5sZW5ndGg7XG5cbiAgICAgIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgICAgIHRva2VuLl9saXN0ZW5lcnNbaV0oY2FuY2VsKTtcbiAgICAgIH1cbiAgICAgIHRva2VuLl9saXN0ZW5lcnMgPSBudWxsO1xuICAgIH0pO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICB0aGlzLnByb21pc2UudGhlbiA9IG9uZnVsZmlsbGVkID0+IHtcbiAgICAgIGxldCBfcmVzb2x2ZTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIHRva2VuLnN1YnNjcmliZShyZXNvbHZlKTtcbiAgICAgICAgX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgfSkudGhlbihvbmZ1bGZpbGxlZCk7XG5cbiAgICAgIHByb21pc2UuY2FuY2VsID0gZnVuY3Rpb24gcmVqZWN0KCkge1xuICAgICAgICB0b2tlbi51bnN1YnNjcmliZShfcmVzb2x2ZSk7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9O1xuXG4gICAgZXhlY3V0b3IoZnVuY3Rpb24gY2FuY2VsKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCkge1xuICAgICAgaWYgKHRva2VuLnJlYXNvbikge1xuICAgICAgICAvLyBDYW5jZWxsYXRpb24gaGFzIGFscmVhZHkgYmVlbiByZXF1ZXN0ZWRcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0b2tlbi5yZWFzb24gPSBuZXcgQ2FuY2VsZWRFcnJvcihtZXNzYWdlLCBjb25maWcsIHJlcXVlc3QpO1xuICAgICAgcmVzb2x2ZVByb21pc2UodG9rZW4ucmVhc29uKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaHJvd3MgYSBgQ2FuY2VsZWRFcnJvcmAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAgICovXG4gIHRocm93SWZSZXF1ZXN0ZWQoKSB7XG4gICAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgICB0aHJvdyB0aGlzLnJlYXNvbjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlIHRvIHRoZSBjYW5jZWwgc2lnbmFsXG4gICAqL1xuXG4gIHN1YnNjcmliZShsaXN0ZW5lcikge1xuICAgIGlmICh0aGlzLnJlYXNvbikge1xuICAgICAgbGlzdGVuZXIodGhpcy5yZWFzb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzID0gW2xpc3RlbmVyXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVW5zdWJzY3JpYmUgZnJvbSB0aGUgY2FuY2VsIHNpZ25hbFxuICAgKi9cblxuICB1bnN1YnNjcmliZShsaXN0ZW5lcikge1xuICAgIGlmICghdGhpcy5fbGlzdGVuZXJzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fbGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIGEgbmV3IGBDYW5jZWxUb2tlbmAgYW5kIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBjYWxsZWQsXG4gICAqIGNhbmNlbHMgdGhlIGBDYW5jZWxUb2tlbmAuXG4gICAqL1xuICBzdGF0aWMgc291cmNlKCkge1xuICAgIGxldCBjYW5jZWw7XG4gICAgY29uc3QgdG9rZW4gPSBuZXcgQ2FuY2VsVG9rZW4oZnVuY3Rpb24gZXhlY3V0b3IoYykge1xuICAgICAgY2FuY2VsID0gYztcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW4sXG4gICAgICBjYW5jZWxcbiAgICB9O1xuICB9XG59XG5cbnZhciBDYW5jZWxUb2tlbiQxID0gQ2FuY2VsVG9rZW47XG5cbi8qKlxuICogU3ludGFjdGljIHN1Z2FyIGZvciBpbnZva2luZyBhIGZ1bmN0aW9uIGFuZCBleHBhbmRpbmcgYW4gYXJyYXkgZm9yIGFyZ3VtZW50cy5cbiAqXG4gKiBDb21tb24gdXNlIGNhc2Ugd291bGQgYmUgdG8gdXNlIGBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHlgLlxuICpcbiAqICBgYGBqc1xuICogIGZ1bmN0aW9uIGYoeCwgeSwgeikge31cbiAqICB2YXIgYXJncyA9IFsxLCAyLCAzXTtcbiAqICBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICogIGBgYFxuICpcbiAqIFdpdGggYHNwcmVhZGAgdGhpcyBleGFtcGxlIGNhbiBiZSByZS13cml0dGVuLlxuICpcbiAqICBgYGBqc1xuICogIHNwcmVhZChmdW5jdGlvbih4LCB5LCB6KSB7fSkoWzEsIDIsIDNdKTtcbiAqICBgYGBcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICpcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gc3ByZWFkKGNhbGxiYWNrKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKGFycikge1xuICAgIHJldHVybiBjYWxsYmFjay5hcHBseShudWxsLCBhcnIpO1xuICB9O1xufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgcGF5bG9hZCBpcyBhbiBlcnJvciB0aHJvd24gYnkgQXhpb3NcbiAqXG4gKiBAcGFyYW0geyp9IHBheWxvYWQgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgcGF5bG9hZCBpcyBhbiBlcnJvciB0aHJvd24gYnkgQXhpb3MsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0F4aW9zRXJyb3IocGF5bG9hZCkge1xuICByZXR1cm4gdXRpbHMkMS5pc09iamVjdChwYXlsb2FkKSAmJiAocGF5bG9hZC5pc0F4aW9zRXJyb3IgPT09IHRydWUpO1xufVxuXG5jb25zdCBIdHRwU3RhdHVzQ29kZSA9IHtcbiAgQ29udGludWU6IDEwMCxcbiAgU3dpdGNoaW5nUHJvdG9jb2xzOiAxMDEsXG4gIFByb2Nlc3Npbmc6IDEwMixcbiAgRWFybHlIaW50czogMTAzLFxuICBPazogMjAwLFxuICBDcmVhdGVkOiAyMDEsXG4gIEFjY2VwdGVkOiAyMDIsXG4gIE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjogMjAzLFxuICBOb0NvbnRlbnQ6IDIwNCxcbiAgUmVzZXRDb250ZW50OiAyMDUsXG4gIFBhcnRpYWxDb250ZW50OiAyMDYsXG4gIE11bHRpU3RhdHVzOiAyMDcsXG4gIEFscmVhZHlSZXBvcnRlZDogMjA4LFxuICBJbVVzZWQ6IDIyNixcbiAgTXVsdGlwbGVDaG9pY2VzOiAzMDAsXG4gIE1vdmVkUGVybWFuZW50bHk6IDMwMSxcbiAgRm91bmQ6IDMwMixcbiAgU2VlT3RoZXI6IDMwMyxcbiAgTm90TW9kaWZpZWQ6IDMwNCxcbiAgVXNlUHJveHk6IDMwNSxcbiAgVW51c2VkOiAzMDYsXG4gIFRlbXBvcmFyeVJlZGlyZWN0OiAzMDcsXG4gIFBlcm1hbmVudFJlZGlyZWN0OiAzMDgsXG4gIEJhZFJlcXVlc3Q6IDQwMCxcbiAgVW5hdXRob3JpemVkOiA0MDEsXG4gIFBheW1lbnRSZXF1aXJlZDogNDAyLFxuICBGb3JiaWRkZW46IDQwMyxcbiAgTm90Rm91bmQ6IDQwNCxcbiAgTWV0aG9kTm90QWxsb3dlZDogNDA1LFxuICBOb3RBY2NlcHRhYmxlOiA0MDYsXG4gIFByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZDogNDA3LFxuICBSZXF1ZXN0VGltZW91dDogNDA4LFxuICBDb25mbGljdDogNDA5LFxuICBHb25lOiA0MTAsXG4gIExlbmd0aFJlcXVpcmVkOiA0MTEsXG4gIFByZWNvbmRpdGlvbkZhaWxlZDogNDEyLFxuICBQYXlsb2FkVG9vTGFyZ2U6IDQxMyxcbiAgVXJpVG9vTG9uZzogNDE0LFxuICBVbnN1cHBvcnRlZE1lZGlhVHlwZTogNDE1LFxuICBSYW5nZU5vdFNhdGlzZmlhYmxlOiA0MTYsXG4gIEV4cGVjdGF0aW9uRmFpbGVkOiA0MTcsXG4gIEltQVRlYXBvdDogNDE4LFxuICBNaXNkaXJlY3RlZFJlcXVlc3Q6IDQyMSxcbiAgVW5wcm9jZXNzYWJsZUVudGl0eTogNDIyLFxuICBMb2NrZWQ6IDQyMyxcbiAgRmFpbGVkRGVwZW5kZW5jeTogNDI0LFxuICBUb29FYXJseTogNDI1LFxuICBVcGdyYWRlUmVxdWlyZWQ6IDQyNixcbiAgUHJlY29uZGl0aW9uUmVxdWlyZWQ6IDQyOCxcbiAgVG9vTWFueVJlcXVlc3RzOiA0MjksXG4gIFJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZTogNDMxLFxuICBVbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29uczogNDUxLFxuICBJbnRlcm5hbFNlcnZlckVycm9yOiA1MDAsXG4gIE5vdEltcGxlbWVudGVkOiA1MDEsXG4gIEJhZEdhdGV3YXk6IDUwMixcbiAgU2VydmljZVVuYXZhaWxhYmxlOiA1MDMsXG4gIEdhdGV3YXlUaW1lb3V0OiA1MDQsXG4gIEh0dHBWZXJzaW9uTm90U3VwcG9ydGVkOiA1MDUsXG4gIFZhcmlhbnRBbHNvTmVnb3RpYXRlczogNTA2LFxuICBJbnN1ZmZpY2llbnRTdG9yYWdlOiA1MDcsXG4gIExvb3BEZXRlY3RlZDogNTA4LFxuICBOb3RFeHRlbmRlZDogNTEwLFxuICBOZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZDogNTExLFxufTtcblxuT2JqZWN0LmVudHJpZXMoSHR0cFN0YXR1c0NvZGUpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICBIdHRwU3RhdHVzQ29kZVt2YWx1ZV0gPSBrZXk7XG59KTtcblxudmFyIEh0dHBTdGF0dXNDb2RlJDEgPSBIdHRwU3RhdHVzQ29kZTtcblxuLyoqXG4gKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZGVmYXVsdENvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm5zIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdENvbmZpZykge1xuICBjb25zdCBjb250ZXh0ID0gbmV3IEF4aW9zJDEoZGVmYXVsdENvbmZpZyk7XG4gIGNvbnN0IGluc3RhbmNlID0gYmluZChBeGlvcyQxLnByb3RvdHlwZS5yZXF1ZXN0LCBjb250ZXh0KTtcblxuICAvLyBDb3B5IGF4aW9zLnByb3RvdHlwZSB0byBpbnN0YW5jZVxuICB1dGlscyQxLmV4dGVuZChpbnN0YW5jZSwgQXhpb3MkMS5wcm90b3R5cGUsIGNvbnRleHQsIHthbGxPd25LZXlzOiB0cnVlfSk7XG5cbiAgLy8gQ29weSBjb250ZXh0IHRvIGluc3RhbmNlXG4gIHV0aWxzJDEuZXh0ZW5kKGluc3RhbmNlLCBjb250ZXh0LCBudWxsLCB7YWxsT3duS2V5czogdHJ1ZX0pO1xuXG4gIC8vIEZhY3RvcnkgZm9yIGNyZWF0aW5nIG5ldyBpbnN0YW5jZXNcbiAgaW5zdGFuY2UuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGluc3RhbmNlQ29uZmlnKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUluc3RhbmNlKG1lcmdlQ29uZmlnKGRlZmF1bHRDb25maWcsIGluc3RhbmNlQ29uZmlnKSk7XG4gIH07XG5cbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuXG4vLyBDcmVhdGUgdGhlIGRlZmF1bHQgaW5zdGFuY2UgdG8gYmUgZXhwb3J0ZWRcbmNvbnN0IGF4aW9zID0gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdHMkMSk7XG5cbi8vIEV4cG9zZSBBeGlvcyBjbGFzcyB0byBhbGxvdyBjbGFzcyBpbmhlcml0YW5jZVxuYXhpb3MuQXhpb3MgPSBBeGlvcyQxO1xuXG4vLyBFeHBvc2UgQ2FuY2VsICYgQ2FuY2VsVG9rZW5cbmF4aW9zLkNhbmNlbGVkRXJyb3IgPSBDYW5jZWxlZEVycm9yO1xuYXhpb3MuQ2FuY2VsVG9rZW4gPSBDYW5jZWxUb2tlbiQxO1xuYXhpb3MuaXNDYW5jZWwgPSBpc0NhbmNlbDtcbmF4aW9zLlZFUlNJT04gPSBWRVJTSU9OO1xuYXhpb3MudG9Gb3JtRGF0YSA9IHRvRm9ybURhdGE7XG5cbi8vIEV4cG9zZSBBeGlvc0Vycm9yIGNsYXNzXG5heGlvcy5BeGlvc0Vycm9yID0gQXhpb3NFcnJvcjtcblxuLy8gYWxpYXMgZm9yIENhbmNlbGVkRXJyb3IgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbmF4aW9zLkNhbmNlbCA9IGF4aW9zLkNhbmNlbGVkRXJyb3I7XG5cbi8vIEV4cG9zZSBhbGwvc3ByZWFkXG5heGlvcy5hbGwgPSBmdW5jdGlvbiBhbGwocHJvbWlzZXMpIHtcbiAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKTtcbn07XG5cbmF4aW9zLnNwcmVhZCA9IHNwcmVhZDtcblxuLy8gRXhwb3NlIGlzQXhpb3NFcnJvclxuYXhpb3MuaXNBeGlvc0Vycm9yID0gaXNBeGlvc0Vycm9yO1xuXG4vLyBFeHBvc2UgbWVyZ2VDb25maWdcbmF4aW9zLm1lcmdlQ29uZmlnID0gbWVyZ2VDb25maWc7XG5cbmF4aW9zLkF4aW9zSGVhZGVycyA9IEF4aW9zSGVhZGVycyQxO1xuXG5heGlvcy5mb3JtVG9KU09OID0gdGhpbmcgPT4gZm9ybURhdGFUb0pTT04odXRpbHMkMS5pc0hUTUxGb3JtKHRoaW5nKSA/IG5ldyBGb3JtRGF0YSh0aGluZykgOiB0aGluZyk7XG5cbmF4aW9zLmdldEFkYXB0ZXIgPSBhZGFwdGVycy5nZXRBZGFwdGVyO1xuXG5heGlvcy5IdHRwU3RhdHVzQ29kZSA9IEh0dHBTdGF0dXNDb2RlJDE7XG5cbmF4aW9zLmRlZmF1bHQgPSBheGlvcztcblxubW9kdWxlLmV4cG9ydHMgPSBheGlvcztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWF4aW9zLmNqcy5tYXBcbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0aWQ6IG1vZHVsZUlkLFxuXHRcdGxvYWRlZDogZmFsc2UsXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuXHRtb2R1bGUubG9hZGVkID0gdHJ1ZTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIl9fd2VicGFja19yZXF1aXJlX18uZyA9IChmdW5jdGlvbigpIHtcblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0JykgcmV0dXJuIGdsb2JhbFRoaXM7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHRoaXMgfHwgbmV3IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcpIHJldHVybiB3aW5kb3c7XG5cdH1cbn0pKCk7IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5ubWQgPSAobW9kdWxlKSA9PiB7XG5cdG1vZHVsZS5wYXRocyA9IFtdO1xuXHRpZiAoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XG5cdHJldHVybiBtb2R1bGU7XG59OyIsIi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLy8gVGhpcyBlbnRyeSBtb2R1bGUgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBtb2R1bGVzIHNvIGl0IGNhbid0IGJlIGlubGluZWRcbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg3NTMwKTtcbiJdLCJuYW1lcyI6WyJEb21haW4iLCJkYXRhIiwicmVjZWl2aW5nIiwic2VuZGluZyIsInRoaXMiLCJuYW1lIiwicmVxdWlyZV90bHMiLCJza2lwX3ZlcmlmaWNhdGlvbiIsInN0YXRlIiwid2lsZGNhcmQiLCJzcGFtX2FjdGlvbiIsImNyZWF0ZWRfYXQiLCJzbXRwX3Bhc3N3b3JkIiwic210cF9sb2dpbiIsInR5cGUiLCJyZWNlaXZpbmdfZG5zX3JlY29yZHMiLCJzZW5kaW5nX2Ruc19yZWNvcmRzIiwiZHluYW1pY1Byb3BlcnRpZXMiLCJyZWR1Y2UiLCJhY2MiLCJwcm9wZXJ0eU5hbWUiLCJPYmplY3QiLCJhc3NpZ24iLCJ1cmxfam9pbl8xIiwiX19pbXBvcnREZWZhdWx0IiwicmVxdWlyZSIsIkVycm9yXzEiLCJkb21haW5fMSIsIkRvbWFpbnNDbGllbnQiLCJyZXF1ZXN0IiwiZG9tYWluQ3JlZGVudGlhbHNDbGllbnQiLCJkb21haW5UZW1wbGF0ZXNDbGllbnQiLCJkb21haW5UYWdzQ2xpZW50IiwiZG9tYWluQ3JlZGVudGlhbHMiLCJkb21haW5UZW1wbGF0ZXMiLCJkb21haW5UYWdzIiwicHJvdG90eXBlIiwiX2hhbmRsZUJvb2xWYWx1ZXMiLCJwcm9wc0ZvclJlcGxhY2VtZW50IiwicmVwbGFjZWRQcm9wcyIsImtleXMiLCJrZXkiLCJwcm9wIiwidmFsdWUiLCJ0b1N0cmluZyIsIl9fYXNzaWduIiwiX3BhcnNlTWVzc2FnZSIsInJlc3BvbnNlIiwiYm9keSIsInBhcnNlRG9tYWluTGlzdCIsIml0ZW1zIiwibWFwIiwiaXRlbSIsImRlZmF1bHQiLCJfcGFyc2VEb21haW4iLCJkb21haW4iLCJfcGFyc2VUcmFja2luZ1NldHRpbmdzIiwidHJhY2tpbmciLCJfcGFyc2VUcmFja2luZ1VwZGF0ZSIsImxpc3QiLCJxdWVyeSIsIl90aGlzIiwiZ2V0IiwidGhlbiIsInJlcyIsImNvbmNhdCIsImNyZWF0ZSIsInBvc3RPYmoiLCJwb3N0V2l0aEZEIiwidXBkYXRlIiwicHV0RGF0YSIsInB1dFdpdGhGRCIsInZlcmlmeSIsInB1dCIsImRlc3Ryb3kiLCJkZWxldGUiLCJnZXRDb25uZWN0aW9uIiwiY29ubmVjdGlvbiIsInVwZGF0ZUNvbm5lY3Rpb24iLCJnZXRUcmFja2luZyIsInVwZGF0ZVRyYWNraW5nIiwiYWN0aXZlIiwiZ2V0VXNlckRhdGFFcnJvciIsImdldElwcyIsIl9hIiwiYXNzaWduSXAiLCJpcCIsImRlbGV0ZUlwIiwibGlua0lwUG9vbCIsInBvb2xJZCIsInBvb2xfaWQiLCJ1bmxpbmtJcFBvbGwiLCJyZXBsYWNlbWVudCIsInNlYXJjaFBhcmFtcyIsInVwZGF0ZURLSU1BdXRob3JpdHkiLCJzZWxmIiwidXBkYXRlREtJTVNlbGVjdG9yIiwiZGtpbVNlbGVjdG9yIiwidXBkYXRlV2ViUHJlZml4Iiwid2ViUHJlZml4IiwiRG9tYWluQ3JlZGVudGlhbHNDbGllbnQiLCJiYXNlUm91dGUiLCJfcGFyc2VEb21haW5DcmVkZW50aWFsc0xpc3QiLCJ0b3RhbENvdW50IiwidG90YWxfY291bnQiLCJfcGFyc2VNZXNzYWdlUmVzcG9uc2UiLCJzdGF0dXMiLCJtZXNzYWdlIiwiX3BhcnNlRGVsZXRlZFJlc3BvbnNlIiwic3BlYyIsImNyZWRlbnRpYWxzTG9naW4iLCJOYXZpZ2F0aW9uVGhydVBhZ2VzXzEiLCJEb21haW5UYWciLCJ0YWdJbmZvIiwidGFnIiwiZGVzY3JpcHRpb24iLCJEYXRlIiwiZXhwb3J0cyIsIkRvbWFpblRhZ1N0YXRpc3RpYyIsInRhZ1N0YXRpc3RpY0luZm8iLCJzdGFydCIsImVuZCIsInJlc29sdXRpb24iLCJzdGF0cyIsInN0YXQiLCJ0aW1lIiwiRG9tYWluVGFnc0NsaWVudCIsIl9zdXBlciIsImNhbGwiLCJfX2V4dGVuZHMiLCJwYXJzZUxpc3QiLCJwYWdlcyIsInBhcnNlUGFnZUxpbmtzIiwiX3BhcnNlVGFnU3RhdGlzdGljIiwicmVxdWVzdExpc3RXaXRoUGFnZXMiLCJzdGF0aXN0aWMiLCJjb3VudHJpZXMiLCJwcm92aWRlcnMiLCJkZXZpY2VzIiwiRG9tYWluVGVtcGxhdGVJdGVtIiwiZG9tYWluVGVtcGxhdGVGcm9tQVBJIiwiY3JlYXRlZEF0IiwiY3JlYXRlZEJ5IiwiaWQiLCJ2ZXJzaW9uIiwidmVyc2lvbnMiLCJsZW5ndGgiLCJyZXN1bHQiLCJEb21haW5UZW1wbGF0ZXNDbGllbnQiLCJwYXJzZUNyZWF0aW9uUmVzcG9uc2UiLCJ0ZW1wbGF0ZSIsInBhcnNlQ3JlYXRpb25WZXJzaW9uUmVzcG9uc2UiLCJwYXJzZU11dGF0aW9uUmVzcG9uc2UiLCJ0ZW1wbGF0ZU5hbWUiLCJwYXJzZU5vdGlmaWNhdGlvblJlc3BvbnNlIiwicGFyc2VNdXRhdGVUZW1wbGF0ZVZlcnNpb25SZXNwb25zZSIsInRlbXBsYXRlVmVyc2lvbiIsImQiLCJwYXJzZUxpc3RUZW1wbGF0ZVZlcnNpb25zIiwiZGVzdHJveUFsbCIsImNyZWF0ZVZlcnNpb24iLCJnZXRWZXJzaW9uIiwidXBkYXRlVmVyc2lvbiIsImRlc3Ryb3lWZXJzaW9uIiwibGlzdFZlcnNpb25zIiwiRXZlbnRDbGllbnQiLCJJcFBvb2xzQ2xpZW50IiwicGFyc2VJcFBvb2xzUmVzcG9uc2UiLCJzZW50IiwicGF0Y2hXaXRoRkQiLCJJcHNDbGllbnQiLCJwYXJzZUlwc1Jlc3BvbnNlIiwiUmVxdWVzdF8xIiwiZG9tYWluc0NsaWVudF8xIiwiRXZlbnRzXzEiLCJTdGF0c0NsaWVudF8xIiwiU3VwcHJlc3Npb25zQ2xpZW50XzEiLCJXZWJob29rc18xIiwiTWVzc2FnZXNfMSIsIlJvdXRlc18xIiwidmFsaWRhdGVfMSIsIklQc18xIiwiSVBQb29sc18xIiwibWFpbGluZ0xpc3RzXzEiLCJtYWlsTGlzdE1lbWJlcnNfMSIsImRvbWFpbnNDcmVkZW50aWFsc18xIiwibXVsdGlwbGVWYWxpZGF0aW9uXzEiLCJkb21haW5zVGVtcGxhdGVzXzEiLCJkb21haW5zVGFnc18xIiwiU3ViYWNjb3VudHNfMSIsIk1haWxndW5DbGllbnQiLCJvcHRpb25zIiwiZm9ybURhdGEiLCJjb25maWciLCJ1cmwiLCJ1c2VybmFtZSIsIkVycm9yIiwibWFpbExpc3RzTWVtYmVycyIsIm11bHRpcGxlVmFsaWRhdGlvbkNsaWVudCIsImRvbWFpbnMiLCJ3ZWJob29rcyIsImV2ZW50cyIsInN1cHByZXNzaW9ucyIsIm1lc3NhZ2VzIiwicm91dGVzIiwiaXBzIiwiaXBfcG9vbHMiLCJsaXN0cyIsInZhbGlkYXRlIiwic3ViYWNjb3VudHMiLCJzZXRTdWJhY2NvdW50Iiwic3ViYWNjb3VudElkIiwic2V0U3ViYWNjb3VudEhlYWRlciIsInJlc2V0U3ViYWNjb3VudCIsInJlc2V0U3ViYWNjb3VudEhlYWRlciIsIk1haWxMaXN0c01lbWJlcnMiLCJjaGVja0FuZFVwZGF0ZURhdGEiLCJuZXdEYXRhIiwidmFycyIsIkpTT04iLCJzdHJpbmdpZnkiLCJzdWJzY3JpYmVkIiwibGlzdE1lbWJlcnMiLCJtYWlsTGlzdEFkZHJlc3MiLCJnZXRNZW1iZXIiLCJtYWlsTGlzdE1lbWJlckFkZHJlc3MiLCJtZW1iZXIiLCJjcmVhdGVNZW1iZXIiLCJyZXFEYXRhIiwiY3JlYXRlTWVtYmVycyIsIm1lbWJlcnMiLCJBcnJheSIsImlzQXJyYXkiLCJ1cHNlcnQiLCJ1cGRhdGVNZW1iZXIiLCJkZXN0cm95TWVtYmVyIiwiTWFpbGluZ0xpc3RzQ2xpZW50IiwicGFyc2VWYWxpZGF0aW9uUmVzdWx0IiwidmFsaWRhdGlvblJlc3VsdCIsInBvc3QiLCJjYW5jZWxWYWxpZGF0aW9uIiwiTWVzc2FnZXNDbGllbnQiLCJwcmVwYXJlQm9vbGVhblZhbHVlcyIsInllc05vUHJvcGVydGllcyIsIlNldCIsImhhcyIsIl9wYXJzZVJlc3BvbnNlIiwibW9kaWZpZWREYXRhIiwiUm91dGVzQ2xpZW50Iiwicm91dGUiLCJTdGF0c0NvbnRhaW5lcl8xIiwiU3RhdHNDbGllbnQiLCJsb2dnZXIiLCJjb25zb2xlIiwiY29udmVydERhdGVUb1VUQyIsImlucHV0RGF0ZSIsIndhcm4iLCJ0b1VUQ1N0cmluZyIsInByZXBhcmVTZWFyY2hQYXJhbXMiLCJlbnRyaWVzIiwiYXJyYXlXaXRoUGFpcnMiLCJjdXJyZW50UGFpciIsInJlcGVhdGVkUHJvcGVydHkiLCJfX3NwcmVhZEFycmF5IiwicHVzaCIsInBhcnNlU3RhdHMiLCJnZXREb21haW4iLCJnZXRBY2NvdW50IiwiU3RhdHNDb250YWluZXIiLCJTdWJhY2NvdW50c0NsaWVudCIsImVuYWJsZSIsImRpc2FibGUiLCJTVUJBQ0NPVU5UX0hFQURFUiIsIkVudW1zXzEiLCJCb3VuY2UiLCJTdXBwcmVzc2lvbk1vZGVscyIsIkJPVU5DRVMiLCJhZGRyZXNzIiwiY29kZSIsImVycm9yIiwiQ29tcGxhaW50IiwiQ09NUExBSU5UUyIsIlN1cHByZXNzaW9uIiwiQm91bmNlXzEiLCJDb21wbGFpbnRfMSIsIlVuc3Vic2NyaWJlXzEiLCJXaGl0ZUxpc3RfMSIsImNyZWF0ZU9wdGlvbnMiLCJoZWFkZXJzIiwiU3VwcHJlc3Npb25DbGllbnQiLCJtb2RlbHMiLCJib3VuY2VzIiwiY29tcGxhaW50cyIsInVuc3Vic2NyaWJlcyIsIndoaXRlbGlzdHMiLCJNb2RlbCIsIl9wYXJzZUl0ZW0iLCJjcmVhdGVXaGl0ZUxpc3QiLCJpc0RhdGFBcnJheSIsInByZXBhcmVSZXNwb25zZSIsImNyZWF0ZVVuc3Vic2NyaWJlIiwic29tZSIsInVuc3Vic2NyaWJlIiwidGFncyIsImdldE1vZGVsIiwibW9kZWwiLCJlbmNvZGVVUklDb21wb25lbnQiLCJwb3N0RGF0YSIsIm1vZHVsZSIsIlVuc3Vic2NyaWJlIiwiVU5TVUJTQ1JJQkVTIiwiV2hpdGVMaXN0IiwiV0hJVEVMSVNUUyIsInJlYXNvbiIsIkF0dGFjaG1lbnRzSGFuZGxlcl8xIiwiTXVsdGlwbGVWYWxpZGF0aW9uSm9iIiwicmVzcG9uc2VTdGF0dXNDb2RlIiwicXVhbnRpdHkiLCJyZWNvcmRzUHJvY2Vzc2VkIiwicmVjb3Jkc19wcm9jZXNzZWQiLCJkb3dubG9hZF91cmwiLCJkb3dubG9hZFVybCIsImNzdiIsImpzb24iLCJfYiIsInN1bW1hcnkiLCJjYXRjaEFsbCIsImNhdGNoX2FsbCIsImRlbGl2ZXJhYmxlIiwiZG9Ob3RTZW5kIiwiZG9fbm90X3NlbmQiLCJ1bmRlbGl2ZXJhYmxlIiwidW5rbm93biIsInJpc2siLCJoaWdoIiwibG93IiwibWVkaXVtIiwiTXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50IiwiYXR0YWNobWVudHNIYW5kbGVyIiwiaGFuZGxlUmVzcG9uc2UiLCJqb2JzIiwiam9iIiwidG90YWwiLCJsaXN0SWQiLCJjb252ZXJ0VG9FeHBlY3RlZFNoYXBlIiwiaXNCdWZmZXIiLCJmaWxlIiwibXVsdGlwbGVWYWxpZGF0aW9uRmlsZSIsImlzU3RyZWFtIiwibXVsdGlwbGVWYWxpZGF0aW9uRGF0YSIsIlZhbGlkYXRlQ2xpZW50IiwibXVsdGlwbGVWYWxpZGF0aW9uIiwiV2ViaG9vayIsInVybHMiLCJXZWJob29rc0NsaWVudCIsIl9wYXJzZVdlYmhvb2tMaXN0IiwiX3BhcnNlV2ViaG9va1dpdGhJRCIsIndlYmhvb2tSZXNwb25zZSIsIndlYmhvb2siLCJ1bmRlZmluZWQiLCJfcGFyc2VXZWJob29rVGVzdCIsInRlc3QiLCJ1cmxWYWx1ZXMiLCJCbG9iRnJvbVN0cmVhbSIsInN0cmVhbSIsInNpemUiLCJfc3RyZWFtIiwiZGVmaW5lUHJvcGVydHkiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsIkF0dGFjaG1lbnRzSGFuZGxlciIsImdldEF0dGFjaG1lbnRPcHRpb25zIiwiZmlsZW5hbWUiLCJjb250ZW50VHlwZSIsImtub3duTGVuZ3RoIiwiZ2V0RmlsZUluZm8iLCJnZXRDdXN0b21GaWxlSW5mbyIsImdldEJ1ZmZlckluZm8iLCJidWZmZXIiLCJieXRlTGVuZ3RoIiwicGlwZSIsImlzQ3VzdG9tRmlsZSIsIm9iaiIsImlzQnJvd3NlckZpbGUiLCJCbG9iIiwiQnVmZmVyIiwiZ2V0QXR0YWNobWVudEluZm8iLCJhdHRhY2htZW50IiwiY29udmVydFRvRkRleHBlY3RlZFNoYXBlIiwidXNlclByb3ZpZGVkVmFsdWUiLCJnZXRCbG9iRnJvbVN0cmVhbSIsIkFQSUVycm9yIiwic3RhdHVzVGV4dCIsImJvZHlNZXNzYWdlIiwic3RhY2siLCJkZXRhaWxzIiwiRm9ybURhdGFCdWlsZGVyIiwiRm9ybURhdGFDb25zdHJ1Y3RvciIsImZpbGVLZXlzIiwiY3JlYXRlRm9ybURhdGEiLCJmaWx0ZXIiLCJmb3JtRGF0YUFjYyIsImluY2x1ZGVzIiwiYXR0YWNobWVudFZhbHVlIiwiaXNNZXNzYWdlQXR0YWNobWVudCIsImFkZEZpbGVzVG9GRCIsIm1lc3NhZ2VWYWx1ZSIsImlzTUlNRSIsImFkZE1pbWVEYXRhVG9GRCIsImFkZENvbW1vblByb3BlcnR5VG9GRCIsImZvcm1EYXRhSW5zdGFuY2UiLCJpc0Zvcm1EYXRhUGFja2FnZSIsImFwcGVuZCIsImJyb3dzZXJGb3JtRGF0YSIsImJsb2JJbnN0YW5jZSIsIlJlYWRhYmxlU3RyZWFtIiwiZ2V0SGVhZGVycyIsIkZpbGUiLCJldmVyeSIsImFwcGVuZEZpbGVUb0ZEIiwib3JpZ2luYWxLZXkiLCJvYmpEYXRhIiwiZmQiLCJmcm9tIiwiYmxvYiIsInNldCIsImZvckVhY2giLCJhZGRWYWx1ZUJhc2VkT25GRCIsImZkS2V5IiwiZmRWYWx1ZSIsIk5hdmlnYXRpb25UaHJ1UGFnZXMiLCJwYXJzZVBhZ2UiLCJwYWdlVXJsIiwidXJsU2VwYXJhdG9yIiwiaXRlcmF0b3JOYW1lIiwiVVJMIiwicGFnZVZhbHVlIiwic3BsaXQiLCJwb3AiLCJpdGVyYXRvclBvc2l0aW9uIiwicGFnZSIsInBhZ2luZyIsInVwZGF0ZVVybEFuZFF1ZXJ5IiwiY2xpZW50VXJsIiwicXVlcnlDb3B5IiwidXBkYXRlZFF1ZXJ5IiwiYmFzZTY0IiwiX19pbXBvcnRTdGFyIiwiYXhpb3NfMSIsIkZvcm1EYXRhQnVpbGRlcl8xIiwiUmVxdWVzdCIsInRpbWVvdXQiLCJtYWtlSGVhZGVyc0Zyb21PYmplY3QiLCJmb3JtRGF0YUJ1aWxkZXIiLCJtYXhCb2R5TGVuZ3RoIiwicHJveHkiLCJtZXRob2QiLCJvbkNhbGxPcHRpb25zIiwicmVxdWVzdEhlYWRlcnMiLCJqb2luQW5kVHJhbnNmb3JtSGVhZGVycyIsInBhcmFtcyIsImdldE93blByb3BlcnR5TmFtZXMiLCJVUkxTZWFyY2hQYXJhbXMiLCJ1cmxWYWx1ZSIsInRvTG9jYWxlVXBwZXJDYXNlIiwiX2QiLCJlcnJvclJlc3BvbnNlIiwiZXJyXzEiLCJfYyIsImdldFJlc3BvbnNlQm9keSIsIkF4aW9zSGVhZGVycyIsImJhc2ljIiwiZW5jb2RlIiwic2V0QXV0aG9yaXphdGlvbiIsInJlY2VpdmVkT25DYWxsSGVhZGVycyIsIm9uQ2FsbEhlYWRlcnMiLCJoZWFkZXJzT2JqZWN0IiwiaGVhZGVyc0FjY3VtdWxhdG9yIiwiY29tbWFuZCIsImFkZERlZmF1bHRIZWFkZXJzIiwicmVxdWVzdE9wdGlvbnMiLCJSZXNvbHV0aW9uIiwiV2ViaG9va3NJZHMiLCJZZXNObyIsIl9fZXhwb3J0U3RhciIsIk1haWxndW5DbGllbnRfMSIsIk1haWxndW4iLCJGb3JtRGF0YSIsImNsaWVudCIsInJvb3QiLCJmcmVlRXhwb3J0cyIsImZyZWVHbG9iYWwiLCJnIiwiZ2xvYmFsIiwid2luZG93IiwiSW52YWxpZENoYXJhY3RlckVycm9yIiwiVEFCTEUiLCJSRUdFWF9TUEFDRV9DSEFSQUNURVJTIiwiaW5wdXQiLCJTdHJpbmciLCJhIiwiYiIsImMiLCJwYWRkaW5nIiwib3V0cHV0IiwicG9zaXRpb24iLCJjaGFyQ29kZUF0IiwiY2hhckF0IiwicmVwbGFjZSIsImJpdFN0b3JhZ2UiLCJiaXRDb3VudGVyIiwiaW5kZXhPZiIsImZyb21DaGFyQ29kZSIsIm5vcm1hbGl6ZSIsInN0ckFycmF5IiwicmVzdWx0QXJyYXkiLCJUeXBlRXJyb3IiLCJtYXRjaCIsImZpcnN0Iiwic2hpZnQiLCJpIiwiY29tcG9uZW50Iiwic3RyIiwiam9pbiIsInBhcnRzIiwiYXJndW1lbnRzIiwic2xpY2UiLCJkZWZpbml0aW9uIiwiYmluZCIsImZuIiwidGhpc0FyZyIsImFwcGx5IiwiZ2V0UHJvdG90eXBlT2YiLCJraW5kT2YiLCJjYWNoZSIsInRoaW5nIiwidG9Mb3dlckNhc2UiLCJraW5kT2ZUZXN0IiwidHlwZU9mVGVzdCIsImlzVW5kZWZpbmVkIiwiaXNBcnJheUJ1ZmZlciIsImlzU3RyaW5nIiwiaXNGdW5jdGlvbiIsImlzTnVtYmVyIiwiaXNPYmplY3QiLCJpc1BsYWluT2JqZWN0IiwidmFsIiwiaXRlcmF0b3IiLCJpc0RhdGUiLCJpc0ZpbGUiLCJpc0Jsb2IiLCJpc0ZpbGVMaXN0IiwiaXNVUkxTZWFyY2hQYXJhbXMiLCJpc1JlYWRhYmxlU3RyZWFtIiwiaXNSZXF1ZXN0IiwiaXNSZXNwb25zZSIsImlzSGVhZGVycyIsImFsbE93bktleXMiLCJsIiwibGVuIiwiZmluZEtleSIsIl9rZXkiLCJfZ2xvYmFsIiwiZ2xvYmFsVGhpcyIsImlzQ29udGV4dERlZmluZWQiLCJjb250ZXh0IiwiaXNUeXBlZEFycmF5IiwiVHlwZWRBcnJheSIsIlVpbnQ4QXJyYXkiLCJpc0hUTUxGb3JtIiwiaGFzT3duUHJvcGVydHkiLCJpc1JlZ0V4cCIsInJlZHVjZURlc2NyaXB0b3JzIiwicmVkdWNlciIsImRlc2NyaXB0b3JzIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsInJlZHVjZWREZXNjcmlwdG9ycyIsImRlc2NyaXB0b3IiLCJyZXQiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiQUxQSEEiLCJESUdJVCIsIkFMUEhBQkVUIiwiQUxQSEFfRElHSVQiLCJ0b1VwcGVyQ2FzZSIsImlzQXN5bmNGbiIsInV0aWxzJDEiLCJjb25zdHJ1Y3RvciIsImlzRm9ybURhdGEiLCJraW5kIiwiaXNBcnJheUJ1ZmZlclZpZXciLCJBcnJheUJ1ZmZlciIsImlzVmlldyIsImlzQm9vbGVhbiIsIm1lcmdlIiwiY2FzZWxlc3MiLCJhc3NpZ25WYWx1ZSIsInRhcmdldEtleSIsImV4dGVuZCIsInRyaW0iLCJzdHJpcEJPTSIsImNvbnRlbnQiLCJpbmhlcml0cyIsInN1cGVyQ29uc3RydWN0b3IiLCJwcm9wcyIsInRvRmxhdE9iamVjdCIsInNvdXJjZU9iaiIsImRlc3RPYmoiLCJwcm9wRmlsdGVyIiwibWVyZ2VkIiwiZW5kc1dpdGgiLCJzZWFyY2hTdHJpbmciLCJsYXN0SW5kZXgiLCJ0b0FycmF5IiwiYXJyIiwiZm9yRWFjaEVudHJ5IiwibmV4dCIsImRvbmUiLCJwYWlyIiwibWF0Y2hBbGwiLCJyZWdFeHAiLCJtYXRjaGVzIiwiZXhlYyIsImhhc093blByb3AiLCJmcmVlemVNZXRob2RzIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwidG9PYmplY3RTZXQiLCJhcnJheU9yU3RyaW5nIiwiZGVsaW1pdGVyIiwiZGVmaW5lIiwidG9DYW1lbENhc2UiLCJtIiwicDEiLCJwMiIsIm5vb3AiLCJ0b0Zpbml0ZU51bWJlciIsImRlZmF1bHRWYWx1ZSIsIk51bWJlciIsImlzRmluaXRlIiwiZ2VuZXJhdGVTdHJpbmciLCJhbHBoYWJldCIsIk1hdGgiLCJyYW5kb20iLCJpc1NwZWNDb21wbGlhbnRGb3JtIiwidG9KU09OT2JqZWN0IiwidmlzaXQiLCJzb3VyY2UiLCJ0YXJnZXQiLCJyZWR1Y2VkVmFsdWUiLCJpc1RoZW5hYmxlIiwiY2F0Y2giLCJBeGlvc0Vycm9yIiwiY2FwdHVyZVN0YWNrVHJhY2UiLCJ0b0pTT04iLCJudW1iZXIiLCJmaWxlTmFtZSIsImxpbmVOdW1iZXIiLCJjb2x1bW5OdW1iZXIiLCJwcm90b3R5cGUkMSIsImN1c3RvbVByb3BzIiwiYXhpb3NFcnJvciIsImNhdXNlIiwiaXNWaXNpdGFibGUiLCJyZW1vdmVCcmFja2V0cyIsInJlbmRlcktleSIsInBhdGgiLCJkb3RzIiwidG9rZW4iLCJwcmVkaWNhdGVzIiwidG9Gb3JtRGF0YSIsIm1ldGFUb2tlbnMiLCJpbmRleGVzIiwib3B0aW9uIiwidmlzaXRvciIsImRlZmF1bHRWaXNpdG9yIiwidXNlQmxvYiIsImNvbnZlcnRWYWx1ZSIsInRvSVNPU3RyaW5nIiwiaXNGbGF0QXJyYXkiLCJlbCIsImluZGV4IiwiZXhwb3NlZEhlbHBlcnMiLCJidWlsZCIsImVuY29kZSQxIiwiY2hhck1hcCIsIkF4aW9zVVJMU2VhcmNoUGFyYW1zIiwiX3BhaXJzIiwiYnVpbGRVUkwiLCJfZW5jb2RlIiwic2VyaWFsaXplRm4iLCJzZXJpYWxpemUiLCJzZXJpYWxpemVkUGFyYW1zIiwiaGFzaG1hcmtJbmRleCIsImVuY29kZXIiLCJJbnRlcmNlcHRvck1hbmFnZXIkMSIsIkludGVyY2VwdG9yTWFuYWdlciIsImhhbmRsZXJzIiwidXNlIiwiZnVsZmlsbGVkIiwicmVqZWN0ZWQiLCJzeW5jaHJvbm91cyIsInJ1bldoZW4iLCJlamVjdCIsImNsZWFyIiwiaCIsInRyYW5zaXRpb25hbERlZmF1bHRzIiwic2lsZW50SlNPTlBhcnNpbmciLCJmb3JjZWRKU09OUGFyc2luZyIsImNsYXJpZnlUaW1lb3V0RXJyb3IiLCJwbGF0Zm9ybSQxIiwiaXNCcm93c2VyIiwiY2xhc3NlcyIsInByb3RvY29scyIsImhhc0Jyb3dzZXJFbnYiLCJkb2N1bWVudCIsImhhc1N0YW5kYXJkQnJvd3NlckVudiIsInByb2R1Y3QiLCJuYXZpZ2F0b3IiLCJoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYiLCJXb3JrZXJHbG9iYWxTY29wZSIsImltcG9ydFNjcmlwdHMiLCJvcmlnaW4iLCJsb2NhdGlvbiIsImhyZWYiLCJwbGF0Zm9ybSIsImZyZWV6ZSIsIl9fcHJvdG9fXyIsImZvcm1EYXRhVG9KU09OIiwiYnVpbGRQYXRoIiwiaXNOdW1lcmljS2V5IiwiaXNMYXN0IiwiYXJyYXlUb09iamVjdCIsInBhcnNlUHJvcFBhdGgiLCJkZWZhdWx0cyIsInRyYW5zaXRpb25hbCIsImFkYXB0ZXIiLCJ0cmFuc2Zvcm1SZXF1ZXN0IiwiZ2V0Q29udGVudFR5cGUiLCJoYXNKU09OQ29udGVudFR5cGUiLCJpc09iamVjdFBheWxvYWQiLCJzZXRDb250ZW50VHlwZSIsImhlbHBlcnMiLCJpc05vZGUiLCJ0b1VSTEVuY29kZWRGb3JtIiwiZm9ybVNlcmlhbGl6ZXIiLCJfRm9ybURhdGEiLCJlbnYiLCJyYXdWYWx1ZSIsInBhcnNlciIsInBhcnNlIiwiZSIsInN0cmluZ2lmeVNhZmVseSIsInRyYW5zZm9ybVJlc3BvbnNlIiwiSlNPTlJlcXVlc3RlZCIsInJlc3BvbnNlVHlwZSIsInN0cmljdEpTT05QYXJzaW5nIiwiRVJSX0JBRF9SRVNQT05TRSIsInhzcmZDb29raWVOYW1lIiwieHNyZkhlYWRlck5hbWUiLCJtYXhDb250ZW50TGVuZ3RoIiwidmFsaWRhdGVTdGF0dXMiLCJjb21tb24iLCJkZWZhdWx0cyQxIiwiaWdub3JlRHVwbGljYXRlT2YiLCIkaW50ZXJuYWxzIiwibm9ybWFsaXplSGVhZGVyIiwiaGVhZGVyIiwibm9ybWFsaXplVmFsdWUiLCJtYXRjaEhlYWRlclZhbHVlIiwiaXNIZWFkZXJOYW1lRmlsdGVyIiwidmFsdWVPclJld3JpdGUiLCJyZXdyaXRlIiwic2V0SGVhZGVyIiwiX3ZhbHVlIiwiX2hlYWRlciIsIl9yZXdyaXRlIiwibEhlYWRlciIsInNldEhlYWRlcnMiLCJyYXdIZWFkZXJzIiwicGFyc2VkIiwibGluZSIsInN1YnN0cmluZyIsInBhcnNlSGVhZGVycyIsInRva2VucyIsInRva2Vuc1JFIiwicGFyc2VUb2tlbnMiLCJtYXRjaGVyIiwiZGVsZXRlZCIsImRlbGV0ZUhlYWRlciIsImZvcm1hdCIsIm5vcm1hbGl6ZWQiLCJ3IiwiY2hhciIsImZvcm1hdEhlYWRlciIsInRhcmdldHMiLCJhc1N0cmluZ3MiLCJzdGF0aWMiLCJjb21wdXRlZCIsImFjY2Vzc29ycyIsImRlZmluZUFjY2Vzc29yIiwiYWNjZXNzb3JOYW1lIiwibWV0aG9kTmFtZSIsImFyZzEiLCJhcmcyIiwiYXJnMyIsImNvbmZpZ3VyYWJsZSIsImJ1aWxkQWNjZXNzb3JzIiwiYWNjZXNzb3IiLCJtYXBwZWQiLCJoZWFkZXJWYWx1ZSIsIkF4aW9zSGVhZGVycyQxIiwidHJhbnNmb3JtRGF0YSIsImZucyIsImlzQ2FuY2VsIiwiX19DQU5DRUxfXyIsIkNhbmNlbGVkRXJyb3IiLCJFUlJfQ0FOQ0VMRUQiLCJzZXR0bGUiLCJyZXNvbHZlIiwicmVqZWN0IiwiRVJSX0JBRF9SRVFVRVNUIiwiZmxvb3IiLCJwcm9ncmVzc0V2ZW50UmVkdWNlciIsImxpc3RlbmVyIiwiaXNEb3dubG9hZFN0cmVhbSIsImZyZXEiLCJieXRlc05vdGlmaWVkIiwiX3NwZWVkb21ldGVyIiwic2FtcGxlc0NvdW50IiwibWluIiwiYnl0ZXMiLCJ0aW1lc3RhbXBzIiwiZmlyc3RTYW1wbGVUUyIsImhlYWQiLCJ0YWlsIiwiY2h1bmtMZW5ndGgiLCJub3ciLCJzdGFydGVkQXQiLCJieXRlc0NvdW50IiwicGFzc2VkIiwicm91bmQiLCJzcGVlZG9tZXRlciIsInRpbWVzdGFtcCIsInRocmVzaG9sZCIsInRpbWVyIiwiZm9yY2UiLCJjbGVhclRpbWVvdXQiLCJzZXRUaW1lb3V0IiwidGhyb3R0bGUiLCJsb2FkZWQiLCJsZW5ndGhDb21wdXRhYmxlIiwicHJvZ3Jlc3NCeXRlcyIsInJhdGUiLCJwcm9ncmVzcyIsImVzdGltYXRlZCIsImV2ZW50IiwiaXNVUkxTYW1lT3JpZ2luIiwibXNpZSIsInVzZXJBZ2VudCIsInVybFBhcnNpbmdOb2RlIiwiY3JlYXRlRWxlbWVudCIsIm9yaWdpblVSTCIsInJlc29sdmVVUkwiLCJzZXRBdHRyaWJ1dGUiLCJwcm90b2NvbCIsImhvc3QiLCJzZWFyY2giLCJoYXNoIiwiaG9zdG5hbWUiLCJwb3J0IiwicGF0aG5hbWUiLCJyZXF1ZXN0VVJMIiwiY29va2llcyIsIndyaXRlIiwiZXhwaXJlcyIsInNlY3VyZSIsImNvb2tpZSIsInRvR01UU3RyaW5nIiwicmVhZCIsIlJlZ0V4cCIsImRlY29kZVVSSUNvbXBvbmVudCIsInJlbW92ZSIsImJ1aWxkRnVsbFBhdGgiLCJiYXNlVVJMIiwicmVxdWVzdGVkVVJMIiwicmVsYXRpdmVVUkwiLCJjb21iaW5lVVJMcyIsImhlYWRlcnNUb09iamVjdCIsIm1lcmdlQ29uZmlnIiwiY29uZmlnMSIsImNvbmZpZzIiLCJnZXRNZXJnZWRWYWx1ZSIsIm1lcmdlRGVlcFByb3BlcnRpZXMiLCJ2YWx1ZUZyb21Db25maWcyIiwiZGVmYXVsdFRvQ29uZmlnMiIsIm1lcmdlRGlyZWN0S2V5cyIsIm1lcmdlTWFwIiwicGFyYW1zU2VyaWFsaXplciIsInRpbWVvdXRNZXNzYWdlIiwid2l0aENyZWRlbnRpYWxzIiwid2l0aFhTUkZUb2tlbiIsIm9uVXBsb2FkUHJvZ3Jlc3MiLCJvbkRvd25sb2FkUHJvZ3Jlc3MiLCJkZWNvbXByZXNzIiwiYmVmb3JlUmVkaXJlY3QiLCJ0cmFuc3BvcnQiLCJodHRwQWdlbnQiLCJodHRwc0FnZW50IiwiY2FuY2VsVG9rZW4iLCJzb2NrZXRQYXRoIiwicmVzcG9uc2VFbmNvZGluZyIsImNvbmZpZ1ZhbHVlIiwicmVzb2x2ZUNvbmZpZyIsIm5ld0NvbmZpZyIsImF1dGgiLCJidG9hIiwicGFzc3dvcmQiLCJ1bmVzY2FwZSIsIkJvb2xlYW4iLCJ4c3JmVmFsdWUiLCJ4aHJBZGFwdGVyIiwiWE1MSHR0cFJlcXVlc3QiLCJQcm9taXNlIiwiX2NvbmZpZyIsInJlcXVlc3REYXRhIiwib25DYW5jZWxlZCIsInNpZ25hbCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJvbmxvYWRlbmQiLCJyZXNwb25zZUhlYWRlcnMiLCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiLCJlcnIiLCJyZXNwb25zZVRleHQiLCJvcGVuIiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVhZHlTdGF0ZSIsInJlc3BvbnNlVVJMIiwib25hYm9ydCIsIkVDT05OQUJPUlRFRCIsIm9uZXJyb3IiLCJFUlJfTkVUV09SSyIsIm9udGltZW91dCIsInRpbWVvdXRFcnJvck1lc3NhZ2UiLCJFVElNRURPVVQiLCJzZXRSZXF1ZXN0SGVhZGVyIiwiYWRkRXZlbnRMaXN0ZW5lciIsInVwbG9hZCIsImNhbmNlbCIsImFib3J0Iiwic3Vic2NyaWJlIiwiYWJvcnRlZCIsInBhcnNlUHJvdG9jb2wiLCJzZW5kIiwiY29tcG9zZVNpZ25hbHMkMSIsInNpZ25hbHMiLCJjb250cm9sbGVyIiwiQWJvcnRDb250cm9sbGVyIiwic3RyZWFtQ2h1bmsiLCJjaHVuayIsImNodW5rU2l6ZSIsInBvcyIsInRyYWNrU3RyZWFtIiwib25Qcm9ncmVzcyIsIm9uRmluaXNoIiwiYXN5bmMiLCJpdGVyYWJsZSIsInJlYWRCeXRlcyIsImNsb3NlIiwiZW5xdWV1ZSIsInJldHVybiIsImhpZ2hXYXRlck1hcmsiLCJmZXRjaFByb2dyZXNzRGVjb3JhdG9yIiwiaXNGZXRjaFN1cHBvcnRlZCIsImZldGNoIiwiUmVzcG9uc2UiLCJpc1JlYWRhYmxlU3RyZWFtU3VwcG9ydGVkIiwiZW5jb2RlVGV4dCIsIlRleHRFbmNvZGVyIiwiYXJyYXlCdWZmZXIiLCJzdXBwb3J0c1JlcXVlc3RTdHJlYW0iLCJkdXBsZXhBY2Nlc3NlZCIsImhhc0NvbnRlbnRUeXBlIiwiZHVwbGV4Iiwic3VwcG9ydHNSZXNwb25zZVN0cmVhbSIsInJlc29sdmVycyIsIl8iLCJFUlJfTk9UX1NVUFBPUlQiLCJyZXNvbHZlQm9keUxlbmd0aCIsImdldENvbnRlbnRMZW5ndGgiLCJnZXRCb2R5TGVuZ3RoIiwia25vd25BZGFwdGVycyIsImh0dHAiLCJ4aHIiLCJmZXRjaE9wdGlvbnMiLCJmaW5pc2hlZCIsImNvbXBvc2VkU2lnbmFsIiwic3RvcFRpbWVvdXQiLCJyZXF1ZXN0Q29udGVudExlbmd0aCIsImNvbnRlbnRUeXBlSGVhZGVyIiwiX3JlcXVlc3QiLCJpc1N0cmVhbVJlc3BvbnNlIiwicmVzcG9uc2VDb250ZW50TGVuZ3RoIiwicmVzcG9uc2VEYXRhIiwicmVuZGVyUmVhc29uIiwiaXNSZXNvbHZlZEhhbmRsZSIsImFkYXB0ZXJzIiwibmFtZU9yQWRhcHRlciIsInJlamVjdGVkUmVhc29ucyIsInJlYXNvbnMiLCJ0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkIiwidGhyb3dJZlJlcXVlc3RlZCIsImRpc3BhdGNoUmVxdWVzdCIsIlZFUlNJT04iLCJ2YWxpZGF0b3JzJDEiLCJkZXByZWNhdGVkV2FybmluZ3MiLCJ2YWxpZGF0b3IiLCJmb3JtYXRNZXNzYWdlIiwib3B0IiwiZGVzYyIsIm9wdHMiLCJFUlJfREVQUkVDQVRFRCIsImFzc2VydE9wdGlvbnMiLCJzY2hlbWEiLCJhbGxvd1Vua25vd24iLCJFUlJfQkFEX09QVElPTl9WQUxVRSIsIkVSUl9CQURfT1BUSU9OIiwidmFsaWRhdG9ycyIsIkF4aW9zIiwiaW5zdGFuY2VDb25maWciLCJpbnRlcmNlcHRvcnMiLCJjb25maWdPclVybCIsImR1bW15IiwiYm9vbGVhbiIsImZ1bmN0aW9uIiwiY29udGV4dEhlYWRlcnMiLCJyZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbiIsInN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyIsImludGVyY2VwdG9yIiwidW5zaGlmdCIsInJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbiIsInByb21pc2UiLCJjaGFpbiIsIm9uRnVsZmlsbGVkIiwib25SZWplY3RlZCIsImdldFVyaSIsImdlbmVyYXRlSFRUUE1ldGhvZCIsImlzRm9ybSIsIkF4aW9zJDEiLCJDYW5jZWxUb2tlbiIsImV4ZWN1dG9yIiwicmVzb2x2ZVByb21pc2UiLCJfbGlzdGVuZXJzIiwib25mdWxmaWxsZWQiLCJfcmVzb2x2ZSIsInNwbGljZSIsIkNhbmNlbFRva2VuJDEiLCJIdHRwU3RhdHVzQ29kZSIsIkNvbnRpbnVlIiwiU3dpdGNoaW5nUHJvdG9jb2xzIiwiUHJvY2Vzc2luZyIsIkVhcmx5SGludHMiLCJPayIsIkNyZWF0ZWQiLCJBY2NlcHRlZCIsIk5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbiIsIk5vQ29udGVudCIsIlJlc2V0Q29udGVudCIsIlBhcnRpYWxDb250ZW50IiwiTXVsdGlTdGF0dXMiLCJBbHJlYWR5UmVwb3J0ZWQiLCJJbVVzZWQiLCJNdWx0aXBsZUNob2ljZXMiLCJNb3ZlZFBlcm1hbmVudGx5IiwiRm91bmQiLCJTZWVPdGhlciIsIk5vdE1vZGlmaWVkIiwiVXNlUHJveHkiLCJVbnVzZWQiLCJUZW1wb3JhcnlSZWRpcmVjdCIsIlBlcm1hbmVudFJlZGlyZWN0IiwiQmFkUmVxdWVzdCIsIlVuYXV0aG9yaXplZCIsIlBheW1lbnRSZXF1aXJlZCIsIkZvcmJpZGRlbiIsIk5vdEZvdW5kIiwiTWV0aG9kTm90QWxsb3dlZCIsIk5vdEFjY2VwdGFibGUiLCJQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQiLCJSZXF1ZXN0VGltZW91dCIsIkNvbmZsaWN0IiwiR29uZSIsIkxlbmd0aFJlcXVpcmVkIiwiUHJlY29uZGl0aW9uRmFpbGVkIiwiUGF5bG9hZFRvb0xhcmdlIiwiVXJpVG9vTG9uZyIsIlVuc3VwcG9ydGVkTWVkaWFUeXBlIiwiUmFuZ2VOb3RTYXRpc2ZpYWJsZSIsIkV4cGVjdGF0aW9uRmFpbGVkIiwiSW1BVGVhcG90IiwiTWlzZGlyZWN0ZWRSZXF1ZXN0IiwiVW5wcm9jZXNzYWJsZUVudGl0eSIsIkxvY2tlZCIsIkZhaWxlZERlcGVuZGVuY3kiLCJUb29FYXJseSIsIlVwZ3JhZGVSZXF1aXJlZCIsIlByZWNvbmRpdGlvblJlcXVpcmVkIiwiVG9vTWFueVJlcXVlc3RzIiwiUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlIiwiVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnMiLCJJbnRlcm5hbFNlcnZlckVycm9yIiwiTm90SW1wbGVtZW50ZWQiLCJCYWRHYXRld2F5IiwiU2VydmljZVVuYXZhaWxhYmxlIiwiR2F0ZXdheVRpbWVvdXQiLCJIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZCIsIlZhcmlhbnRBbHNvTmVnb3RpYXRlcyIsIkluc3VmZmljaWVudFN0b3JhZ2UiLCJMb29wRGV0ZWN0ZWQiLCJOb3RFeHRlbmRlZCIsIk5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkIiwiSHR0cFN0YXR1c0NvZGUkMSIsImF4aW9zIiwiY3JlYXRlSW5zdGFuY2UiLCJkZWZhdWx0Q29uZmlnIiwiaW5zdGFuY2UiLCJDYW5jZWwiLCJhbGwiLCJwcm9taXNlcyIsInNwcmVhZCIsImNhbGxiYWNrIiwiaXNBeGlvc0Vycm9yIiwicGF5bG9hZCIsImZvcm1Ub0pTT04iLCJnZXRBZGFwdGVyIiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsIkZ1bmN0aW9uIiwibm1kIiwicGF0aHMiLCJjaGlsZHJlbiJdLCJzb3VyY2VSb290IjoiIn0=
2
+ define((()=>(()=>{var t={2096:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(t,e,r){this.name=t.name,this.require_tls=t.require_tls,this.skip_verification=t.skip_verification,this.state=t.state,this.wildcard=t.wildcard,this.spam_action=t.spam_action,this.created_at=t.created_at,this.smtp_password=t.smtp_password,this.smtp_login=t.smtp_login,this.type=t.type,this.receiving_dns_records=e||null,this.sending_dns_records=r||null;var n=["id","is_disabled","web_prefix","web_scheme"].reduce((function(e,r){return r in t&&(e[r]=t[r]),e}),{});Object.assign(this,n)};e.default=r},548:function(t,e,r){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},n.apply(this,arguments)},o=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var i=o(r(5469)),s=o(r(8426)),a=o(r(2096)),u=function(){function t(t,e,r,n){this.request=t,this.domainCredentials=e,this.domainTemplates=r,this.domainTags=n}return t.prototype._handleBoolValues=function(t){var e=t,r=Object.keys(e).reduce((function(t,r){var n=r;if("boolean"==typeof e[n]){var o=e[n];t[n]="true"===o.toString()?"true":"false"}return t}),{});return n(n({},t),r)},t.prototype._parseMessage=function(t){return t.body},t.prototype.parseDomainList=function(t){return t.body&&t.body.items?t.body.items.map((function(t){return new a.default(t)})):[]},t.prototype._parseDomain=function(t){return new a.default(t.body.domain,t.body.receiving_dns_records,t.body.sending_dns_records)},t.prototype._parseTrackingSettings=function(t){return t.body.tracking},t.prototype._parseTrackingUpdate=function(t){return t.body},t.prototype.list=function(t){var e=this;return this.request.get("/v3/domains",t).then((function(t){return e.parseDomainList(t)}))},t.prototype.get=function(t){var e=this;return this.request.get("/v3/domains/".concat(t)).then((function(t){return e._parseDomain(t)}))},t.prototype.create=function(t){var e=this,r=this._handleBoolValues(t);return this.request.postWithFD("/v3/domains",r).then((function(t){return e._parseDomain(t)}))},t.prototype.update=function(t,e){var r=this,n=this._handleBoolValues(e);return this.request.putWithFD("/v3/domains/".concat(t),n).then((function(t){return r._parseDomain(t)}))},t.prototype.verify=function(t){var e=this;return this.request.put("/v3/domains/".concat(t,"/verify")).then((function(t){return e._parseDomain(t)}))},t.prototype.destroy=function(t){var e=this;return this.request.delete("/v3/domains/".concat(t)).then((function(t){return e._parseMessage(t)}))},t.prototype.getConnection=function(t){return this.request.get("/v3/domains/".concat(t,"/connection")).then((function(t){return t})).then((function(t){return t.body.connection}))},t.prototype.updateConnection=function(t,e){return this.request.put("/v3/domains/".concat(t,"/connection"),e).then((function(t){return t})).then((function(t){return t.body}))},t.prototype.getTracking=function(t){return this.request.get((0,i.default)("/v3/domains",t,"tracking")).then(this._parseTrackingSettings)},t.prototype.updateTracking=function(t,e,r){var n=this;if("boolean"==typeof(null==r?void 0:r.active))throw s.default.getUserDataError("Received boolean value for active property",'Property "active" must contain string value.');return this.request.putWithFD((0,i.default)("/v3/domains",t,"tracking",e),r).then((function(t){return n._parseTrackingUpdate(t)}))},t.prototype.getIps=function(t){return this.request.get((0,i.default)("/v3/domains",t,"ips")).then((function(t){var e;return null===(e=null==t?void 0:t.body)||void 0===e?void 0:e.items}))},t.prototype.assignIp=function(t,e){return this.request.postWithFD((0,i.default)("/v3/domains",t,"ips"),{ip:e})},t.prototype.deleteIp=function(t,e){return this.request.delete((0,i.default)("/v3/domains",t,"ips",e))},t.prototype.linkIpPool=function(t,e){return this.request.postWithFD((0,i.default)("/v3/domains",t,"ips"),{pool_id:e})},t.prototype.unlinkIpPoll=function(t,e){var r="";if(e.pool_id&&e.ip)throw s.default.getUserDataError("Too much data for replacement","Please specify either pool_id or ip (not both)");return e.pool_id?r="?pool_id=".concat(e.pool_id):e.ip&&(r="?ip=".concat(e.ip)),this.request.delete((0,i.default)("/v3/domains",t,"ips","ip_pool",r))},t.prototype.updateDKIMAuthority=function(t,e){return this.request.put("/v3/domains/".concat(t,"/dkim_authority"),{},{query:"self=".concat(e.self)}).then((function(t){return t})).then((function(t){return t.body}))},t.prototype.updateDKIMSelector=function(t,e){return this.request.put("/v3/domains/".concat(t,"/dkim_selector"),{},{query:"dkim_selector=".concat(e.dkimSelector)}).then((function(t){return t}))},t.prototype.updateWebPrefix=function(t,e){return this.request.put("/v3/domains/".concat(t,"/web_prefix"),{},{query:"web_prefix=".concat(e.webPrefix)}).then((function(t){return t}))},t}();e.default=u},7721:function(t,e,r){"use strict";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var o=n(r(5469)),i=function(){function t(t){this.request=t,this.baseRoute="/v3/domains/"}return t.prototype._parseDomainCredentialsList=function(t){return{items:t.body.items,totalCount:t.body.total_count}},t.prototype._parseMessageResponse=function(t){return{status:t.status,message:t.body.message}},t.prototype._parseDeletedResponse=function(t){return{status:t.status,message:t.body.message,spec:t.body.spec}},t.prototype.list=function(t,e){var r=this;return this.request.get((0,o.default)(this.baseRoute,t,"/credentials"),e).then((function(t){return r._parseDomainCredentialsList(t)}))},t.prototype.create=function(t,e){var r=this;return this.request.postWithFD("".concat(this.baseRoute).concat(t,"/credentials"),e).then((function(t){return r._parseMessageResponse(t)}))},t.prototype.update=function(t,e,r){var n=this;return this.request.putWithFD("".concat(this.baseRoute).concat(t,"/credentials/").concat(e),r).then((function(t){return n._parseMessageResponse(t)}))},t.prototype.destroy=function(t,e){var r=this;return this.request.delete("".concat(this.baseRoute).concat(t,"/credentials/").concat(e)).then((function(t){return r._parseDeletedResponse(t)}))},t}();e.default=i},7534:function(t,e,r){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},i.apply(this,arguments)},s=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},a=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}},u=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.DomainTagStatistic=e.DomainTag=void 0;var c=u(r(5469)),l=u(r(2893)),f=function(t){this.tag=t.tag,this.description=t.description,this["first-seen"]=new Date(t["first-seen"]),this["last-seen"]=new Date(t["last-seen"])};e.DomainTag=f;var p=function(t){this.tag=t.body.tag,this.description=t.body.description,this.start=new Date(t.body.start),this.end=new Date(t.body.end),this.resolution=t.body.resolution,this.stats=t.body.stats.map((function(t){return i(i({},t),{time:new Date(t.time)})}))};e.DomainTagStatistic=p;var d=function(t){function e(e){var r=t.call(this,e)||this;return r.request=e,r.baseRoute="/v3/",r}return o(e,t),e.prototype.parseList=function(t){var e={};return e.items=t.body.items.map((function(t){return new f(t)})),e.pages=this.parsePageLinks(t,"?","tag"),e.status=t.status,e},e.prototype._parseTagStatistic=function(t){return new p(t)},e.prototype.list=function(t,e){return s(this,void 0,void 0,(function(){return a(this,(function(r){return[2,this.requestListWithPages((0,c.default)(this.baseRoute,t,"/tags"),e)]}))}))},e.prototype.get=function(t,e){return this.request.get((0,c.default)(this.baseRoute,t,"/tags",e)).then((function(t){return new f(t.body)}))},e.prototype.update=function(t,e,r){return this.request.put((0,c.default)(this.baseRoute,t,"/tags",e),r).then((function(t){return t.body}))},e.prototype.destroy=function(t,e){return this.request.delete("".concat(this.baseRoute).concat(t,"/tags/").concat(e)).then((function(t){return{message:t.body.message,status:t.status}}))},e.prototype.statistic=function(t,e,r){var n=this;return this.request.get((0,c.default)(this.baseRoute,t,"/tags",e,"stats"),r).then((function(t){return n._parseTagStatistic(t)}))},e.prototype.countries=function(t,e){return this.request.get((0,c.default)(this.baseRoute,t,"/tags",e,"stats/aggregates/countries")).then((function(t){return t.body}))},e.prototype.providers=function(t,e){return this.request.get((0,c.default)(this.baseRoute,t,"/tags",e,"stats/aggregates/providers")).then((function(t){return t.body}))},e.prototype.devices=function(t,e){return this.request.get((0,c.default)(this.baseRoute,t,"/tags",e,"stats/aggregates/devices")).then((function(t){return t.body}))},e}(l.default);e.default=d},8992:function(t,e,r){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},i.apply(this,arguments)},s=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},a=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}},u=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.DomainTemplateItem=void 0;var c=u(r(5469)),l=u(r(2893)),f=function(t){this.name=t.name,this.description=t.description,this.createdAt=t.createdAt?new Date(t.createdAt):"",this.createdBy=t.createdBy,this.id=t.id,t.version&&(this.version=t.version,t.version.createdAt&&(this.version.createdAt=new Date(t.version.createdAt))),t.versions&&t.versions.length&&(this.versions=t.versions.map((function(t){var e=i({},t);return e.createdAt=new Date(t.createdAt),e})))};e.DomainTemplateItem=f;var p=function(t){function e(e){var r=t.call(this,e)||this;return r.request=e,r.baseRoute="/v3/",r}return o(e,t),e.prototype.parseCreationResponse=function(t){return new f(t.body.template)},e.prototype.parseCreationVersionResponse=function(t){var e={};return e.status=t.status,e.message=t.body.message,t.body&&t.body.template&&(e.template=new f(t.body.template)),e},e.prototype.parseMutationResponse=function(t){var e={};return e.status=t.status,e.message=t.body.message,t.body&&t.body.template&&(e.templateName=t.body.template.name),e},e.prototype.parseNotificationResponse=function(t){var e={};return e.status=t.status,e.message=t.body.message,e},e.prototype.parseMutateTemplateVersionResponse=function(t){var e={};return e.status=t.status,e.message=t.body.message,t.body.template&&(e.templateName=t.body.template.name,e.templateVersion={tag:t.body.template.version.tag}),e},e.prototype.parseList=function(t){var e={};return e.items=t.body.items.map((function(t){return new f(t)})),e.pages=this.parsePageLinks(t,"?","p"),e.status=t.status,e},e.prototype.parseListTemplateVersions=function(t){var e={};return e.template=new f(t.body.template),e.pages=this.parsePageLinks(t,"?","p"),e},e.prototype.list=function(t,e){return s(this,void 0,void 0,(function(){return a(this,(function(r){return[2,this.requestListWithPages((0,c.default)(this.baseRoute,t,"/templates"),e)]}))}))},e.prototype.get=function(t,e,r){return this.request.get((0,c.default)(this.baseRoute,t,"/templates/",e),r).then((function(t){return new f(t.body.template)}))},e.prototype.create=function(t,e){var r=this;return this.request.postWithFD((0,c.default)(this.baseRoute,t,"/templates"),e).then((function(t){return r.parseCreationResponse(t)}))},e.prototype.update=function(t,e,r){var n=this;return this.request.putWithFD((0,c.default)(this.baseRoute,t,"/templates/",e),r).then((function(t){return n.parseMutationResponse(t)}))},e.prototype.destroy=function(t,e){var r=this;return this.request.delete((0,c.default)(this.baseRoute,t,"/templates/",e)).then((function(t){return r.parseMutationResponse(t)}))},e.prototype.destroyAll=function(t){var e=this;return this.request.delete((0,c.default)(this.baseRoute,t,"/templates")).then((function(t){return e.parseNotificationResponse(t)}))},e.prototype.createVersion=function(t,e,r){var n=this;return this.request.postWithFD((0,c.default)(this.baseRoute,t,"/templates/",e,"/versions"),r).then((function(t){return n.parseCreationVersionResponse(t)}))},e.prototype.getVersion=function(t,e,r){return this.request.get((0,c.default)(this.baseRoute,t,"/templates/",e,"/versions/",r)).then((function(t){return new f(t.body.template)}))},e.prototype.updateVersion=function(t,e,r,n){var o=this;return this.request.putWithFD((0,c.default)(this.baseRoute,t,"/templates/",e,"/versions/",r),n).then((function(t){return o.parseMutateTemplateVersionResponse(t)}))},e.prototype.destroyVersion=function(t,e,r){var n=this;return this.request.delete((0,c.default)(this.baseRoute,t,"/templates/",e,"/versions/",r)).then((function(t){return n.parseMutateTemplateVersionResponse(t)}))},e.prototype.listVersions=function(t,e,r){var n=this;return this.request.get((0,c.default)(this.baseRoute,t,"/templates",e,"/versions"),r).then((function(t){return n.parseListTemplateVersions(t)}))},e}(l.default);e.default=p},5075:function(t,e,r){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},s=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}},a=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var u=a(r(5469)),c=function(t){function e(e){var r=t.call(this,e)||this;return r.request=e,r}return o(e,t),e.prototype.parseList=function(t){var e={};return e.items=t.body.items,e.pages=this.parsePageLinks(t,"/"),e.status=t.status,e},e.prototype.get=function(t,e){return i(this,void 0,void 0,(function(){return s(this,(function(r){return[2,this.requestListWithPages((0,u.default)("/v3",t,"events"),e)]}))}))},e}(a(r(2893)).default);e.default=c},9204:function(t,e){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},r.apply(this,arguments)},n=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},o=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}};Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t){this.request=t}return t.prototype.list=function(){var t=this;return this.request.get("/v1/ip_pools").then((function(e){return t.parseIpPoolsResponse(e)}))},t.prototype.create=function(t){return n(this,void 0,void 0,(function(){var e;return o(this,(function(n){switch(n.label){case 0:return[4,this.request.postWithFD("/v1/ip_pools",t)];case 1:return e=n.sent(),[2,r({status:e.status},e.body)]}}))}))},t.prototype.update=function(t,e){return n(this,void 0,void 0,(function(){var n;return o(this,(function(o){switch(o.label){case 0:return[4,this.request.patchWithFD("/v1/ip_pools/".concat(t),e)];case 1:return n=o.sent(),[2,r({status:n.status},n.body)]}}))}))},t.prototype.delete=function(t,e){return n(this,void 0,void 0,(function(){var n;return o(this,(function(o){switch(o.label){case 0:return[4,this.request.delete("/v1/ip_pools/".concat(t),e)];case 1:return n=o.sent(),[2,r({status:n.status},n.body)]}}))}))},t.prototype.parseIpPoolsResponse=function(t){return r({status:t.status},t.body)},t}();e.default=i},5398:function(t,e){"use strict";var r=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},n=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}};Object.defineProperty(e,"__esModule",{value:!0});var o=function(){function t(t){this.request=t}return t.prototype.list=function(t){return r(this,void 0,void 0,(function(){var e;return n(this,(function(r){switch(r.label){case 0:return[4,this.request.get("/v3/ips",t)];case 1:return e=r.sent(),[2,this.parseIpsResponse(e)]}}))}))},t.prototype.get=function(t){return r(this,void 0,void 0,(function(){var e;return n(this,(function(r){switch(r.label){case 0:return[4,this.request.get("/v3/ips/".concat(t))];case 1:return e=r.sent(),[2,this.parseIpsResponse(e)]}}))}))},t.prototype.parseIpsResponse=function(t){return t.body},t}();e.default=o},4353:function(t,e){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},r.apply(this,arguments)},n=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},o=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}};Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t,e){this.path=e,this.request=t}return t.prototype.list=function(){return n(this,void 0,void 0,(function(){var t;return o(this,(function(e){switch(e.label){case 0:return[4,this.request.get(this.path)];case 1:return[2,{items:(t=e.sent()).body.items,status:t.status}]}}))}))},t.prototype.get=function(t){return n(this,void 0,void 0,(function(){var e;return o(this,(function(n){switch(n.label){case 0:return[4,this.request.get("".concat(this.path,"/").concat(t))];case 1:return e=n.sent(),[2,r(r({},e.body),{status:e.status})]}}))}))},t}();e.default=i},9815:function(t,e){"use strict";var r=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},n=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}};Object.defineProperty(e,"__esModule",{value:!0});var o=function(){function t(t,e){this.request=t,this.path=e}return t.prototype.list=function(){return r(this,void 0,void 0,(function(){var t;return n(this,(function(e){switch(e.label){case 0:return[4,this.request.get(this.path)];case 1:return[2,{status:(t=e.sent()).status,supported_filters:t.body.supported_filters}]}}))}))},t}();e.default=o},2133:function(t,e,r){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},i.apply(this,arguments)},s=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},a=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}},u=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var c=function(t){function e(e,r,n,o,i){void 0===i&&(i=console);var s=t.call(this,e)||this;return s.request=e,s.attributes=r,s.filters=n,s.sharing=o,s.logger=i,s}return o(e,t),e.prototype.convertDateToUTC=function(t,e){return this.logger.warn('Date: "'.concat(e,'" was auto-converted to UTC time zone.\nValue "').concat(e.toISOString(),'" will be used for request.\nConsider using string type for property "').concat(t,'" to avoid auto-converting')),e.toISOString()},e.prototype.prepareQueryData=function(t){var e=this,r=t,n=Object.keys(r).reduce((function(n,o){var i=o;if(r[i]&&"object"==typeof r[i]){var s=t[i];n[i]=e.convertDateToUTC(i,s)}return n}),{});return i(i({},t),n)},e.prototype.prepareInboxPlacementsResult=function(t){var e={},r={created_at:new Date(t.created_at),updated_at:new Date(t.updated_at),sharing_expires_at:new Date(t.sharing_expires_at)};t.Box&&delete(e=i(i({},t.Box),{created_at:new Date(t.Box.created_at),updated_at:new Date(t.Box.updated_at),last_result_at:new Date(t.Box.last_result_at)})).ID;var n=i(i(i(i({},t),{Box:e}),r),{id:t.Id});return delete n.ID,n},e.prototype.parseList=function(t){var e=this,r={};return r.items=t.body.items.map((function(t){return e.prepareInboxPlacementsResult(t)})),r.pages=this.parsePageLinks(t,"?","address"),r.status=t.status,r},e.prototype.list=function(t){return s(this,void 0,void 0,(function(){var e,r;return a(this,(function(n){switch(n.label){case 0:return e=this.prepareQueryData(t),[4,this.request.get("/v4/inbox/results",e)];case 1:return r=n.sent(),[2,this.parseList(r)]}}))}))},e.prototype.get=function(t){return s(this,void 0,void 0,(function(){var e,r;return a(this,(function(n){switch(n.label){case 0:return[4,this.request.get("/v4/inbox/results/".concat(t))];case 1:return e=n.sent(),r=this.prepareInboxPlacementsResult(e.body.result),[2,{status:e.status,inboxPlacementResult:r}]}}))}))},e.prototype.destroy=function(t){return s(this,void 0,void 0,(function(){var e;return a(this,(function(r){switch(r.label){case 0:return[4,this.request.delete("/v4/inbox/results/".concat(t))];case 1:return e=r.sent(),[2,i({status:e.status},e.body)]}}))}))},e.prototype.getResultByShareId=function(t){return s(this,void 0,void 0,(function(){var e,r;return a(this,(function(n){switch(n.label){case 0:return[4,this.request.get("/v4/inbox/sharing/public/".concat(t))];case 1:return e=n.sent(),r=this.prepareInboxPlacementsResult(e.body.result),[2,{status:e.status,inboxPlacementResult:r}]}}))}))},e}(u(r(2893)).default);e.default=c},4895:function(t,e){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},r.apply(this,arguments)},n=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},o=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}};Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t){this.request=t}return t.prototype.prepareInboxPlacementsResultSharing=function(t){var e={expires_at:new Date(t.expires_at)};return r(r({},t),e)},t.prototype.get=function(t){return n(this,void 0,void 0,(function(){var e,n;return o(this,(function(o){switch(o.label){case 0:return[4,this.request.get("/v4/inbox/sharing/".concat(t))];case 1:return e=o.sent(),n=this.prepareInboxPlacementsResultSharing(e.body.sharing),[2,r({status:e.status},n)]}}))}))},t.prototype.update=function(t,e){return n(this,void 0,void 0,(function(){var n,i;return o(this,(function(o){switch(o.label){case 0:return[4,this.request.put("/v4/inbox/sharing/".concat(t),{},{query:"enabled=".concat(e.enabled)})];case 1:return n=o.sent(),i=this.prepareInboxPlacementsResultSharing(n.body.sharing),[2,r(r({},i),{status:n.status})]}}))}))},t}();e.default=i},579:function(t,e,r){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},i.apply(this,arguments)},s=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},a=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}},u=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var c=function(t){function e(e,r,n,o){void 0===o&&(o=console);var i=t.call(this,e)||this;return i.request=e,i.attributes=r,i.filters=n,i.logger=o,i}return o(e,t),e.prototype.convertDateToUTC=function(t,e){return this.logger.warn('Date: "'.concat(e,'" was auto-converted to UTC time zone.\nValue "').concat(e.toISOString(),'" will be used for request.\nConsider using string type for property "').concat(t,'" to avoid auto-converting')),e.toISOString()},e.prototype.prepareQueryData=function(t){var e=this,r=t,n=Object.keys(r).reduce((function(n,o){var i=o;if(r[i]&&"object"==typeof r[i]){var s=t[i];n[i]=e.convertDateToUTC(i,s)}return n}),{});return i(i({},t),n)},e.prototype.prepareResult=function(t){var e=this.prepareSeedList(t.body);return i(i({},e),{status:t.status})},e.prototype.prepareSeedList=function(t){var e,r={created_at:new Date(t.created_at),updated_at:new Date(t.updated_at),last_result_at:new Date(t.last_result_at)};e=t.Seeds?t.Seeds.map((function(t){var e={created_at:new Date(t.created_at),updated_at:new Date(t.updated_at),max_email_count_hit_at:new Date(t.max_email_count_hit_at),last_sent_to_at:new Date(t.last_sent_to_at),last_delivered_at:new Date(t.last_delivered_at)};return i(i({},t),e)})):null;var n=i(i(i({},t),{Seeds:e}),r);return delete n.Id,n},e.prototype.parseList=function(t){var e,r=this,n={items:[]};return n.items=null===(e=t.body.items)||void 0===e?void 0:e.map((function(t){return r.prepareSeedList(t)})),n.pages=this.parsePageLinks(t,"?","address"),n.status=t.status,n},e.prototype.list=function(t){return s(this,void 0,void 0,(function(){var e,r;return a(this,(function(n){switch(n.label){case 0:return e=this.prepareQueryData(t),[4,this.request.get("/v4/inbox/seedlists",e)];case 1:return r=n.sent(),[2,i(i({},this.parseList(r)),{status:200})]}}))}))},e.prototype.get=function(t){return s(this,void 0,void 0,(function(){var e,r;return a(this,(function(n){switch(n.label){case 0:return[4,this.request.get("/v4/inbox/seedlists/".concat(t))];case 1:return e=n.sent(),r=this.prepareSeedList(e.body.seedlist),[2,i(i({},r),{status:e.status})]}}))}))},e.prototype.create=function(t){return s(this,void 0,void 0,(function(){var e;return a(this,(function(r){switch(r.label){case 0:return[4,this.request.postWithFD("/v4/inbox/seedlists",t)];case 1:return e=r.sent(),[2,this.prepareResult(e)]}}))}))},e.prototype.update=function(t,e){return s(this,void 0,void 0,(function(){var r;return a(this,(function(n){switch(n.label){case 0:return[4,this.request.put("/v4/inbox/seedlists/".concat(t),e)];case 1:return r=n.sent(),[2,this.prepareResult(r)]}}))}))},e.prototype.destroy=function(t){return s(this,void 0,void 0,(function(){return a(this,(function(e){return[2,this.request.delete("/v4/inbox/seedlists/".concat(t))]}))}))},e}(u(r(2893)).default);e.default=c},7899:function(t,e){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},r.apply(this,arguments)},n=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},o=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}};Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t,e,r,n){this.request=t,this.seedsLists=e,this.seedsLists=e,this.results=r,this.providers=n}return t.prototype.runTest=function(t){return n(this,void 0,void 0,(function(){var e;return o(this,(function(n){switch(n.label){case 0:return[4,this.request.post("/v4/inbox/tests",t)];case 1:return e=n.sent(),[2,r(r({},e.body),{status:e.status})]}}))}))},t}();e.default=i},4686:function(t,e){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},r.apply(this,arguments)},n=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},o=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}};Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t){this.path="/v4/inbox/providers",this.request=t}return t.prototype.parseList=function(t){var e={};return e.items=t.body.items.map((function(t){var e={created_at:new Date(t.created_at),updated_at:new Date(t.updated_at)};return r(r({},t),e)})),e.status=t.status,e},t.prototype.list=function(){return n(this,void 0,void 0,(function(){var t;return o(this,(function(e){switch(e.label){case 0:return[4,this.request.get(this.path)];case 1:return t=e.sent(),[2,this.parseList(t)]}}))}))},t}();e.default=i},7688:function(t,e,r){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},n.apply(this,arguments)},o=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var i=o(r(6997)),s=o(r(548)),a=o(r(5075)),u=o(r(7728)),c=o(r(1930)),l=o(r(7144)),f=o(r(5486)),p=o(r(444)),d=o(r(9325)),h=o(r(5398)),y=o(r(9204)),b=o(r(293)),v=o(r(5713)),_=o(r(7721)),g=o(r(6116)),m=o(r(8992)),w=o(r(7534)),O=o(r(3126)),j=o(r(579)),P=o(r(7899)),x=o(r(2133)),S=o(r(4353)),D=o(r(9815)),M=o(r(4895)),R=o(r(4686)),E=function(){function t(t,e){var r=n({},t);if(r.url||(r.url="https://api.mailgun.net"),!r.username)throw new Error('Parameter "username" is required');if(!r.key)throw new Error('Parameter "key" is required');this.request=new i.default(r,e);var o=new v.default(this.request),E=new _.default(this.request),T=new m.default(this.request),k=new w.default(this.request),q=new g.default(this.request),A=new M.default(this.request),B=new S.default(this.request,"/v4/inbox/seedlists/a"),C=new S.default(this.request,"/v4/inbox/results/a"),F=new D.default(this.request,"/v4/inbox/seedlists/_filters"),L=new D.default(this.request,"/v4/inbox/results/_filters"),U=new j.default(this.request,B,F),N=new x.default(this.request,C,L,A),I=new R.default(this.request);this.domains=new s.default(this.request,E,T,k),this.webhooks=new l.default(this.request),this.events=new a.default(this.request),this.stats=new u.default(this.request),this.suppressions=new c.default(this.request),this.messages=new f.default(this.request),this.routes=new p.default(this.request),this.ips=new h.default(this.request),this.ip_pools=new y.default(this.request),this.lists=new b.default(this.request,o),this.validate=new d.default(this.request,q),this.subaccounts=new O.default(this.request),this.inboxPlacements=new P.default(this.request,U,N,I)}return t.prototype.setSubaccount=function(t){var e;null===(e=this.request)||void 0===e||e.setSubaccountHeader(t)},t.prototype.resetSubaccount=function(){var t;null===(t=this.request)||void 0===t||t.resetSubaccountHeader()},t}();e.default=E},5713:function(t,e,r){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},i.apply(this,arguments)},s=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},a=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}},u=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var c=function(t){function e(e){var r=t.call(this,e)||this;return r.request=e,r.baseRoute="/v3/lists",r}return o(e,t),e.prototype.checkAndUpdateData=function(t){var e=i({},t);return"object"==typeof t.vars&&(e.vars=JSON.stringify(e.vars)),"boolean"==typeof t.subscribed&&(e.subscribed=t.subscribed?"yes":"no"),e},e.prototype.parseList=function(t){var e={};return e.items=t.body.items,e.pages=this.parsePageLinks(t,"?","address"),e},e.prototype.listMembers=function(t,e){return s(this,void 0,void 0,(function(){return a(this,(function(r){return[2,this.requestListWithPages("".concat(this.baseRoute,"/").concat(t,"/members/pages"),e)]}))}))},e.prototype.getMember=function(t,e){return this.request.get("".concat(this.baseRoute,"/").concat(t,"/members/").concat(e)).then((function(t){return t.body.member}))},e.prototype.createMember=function(t,e){var r=this.checkAndUpdateData(e);return this.request.postWithFD("".concat(this.baseRoute,"/").concat(t,"/members"),r).then((function(t){return t.body.member}))},e.prototype.createMembers=function(t,e){var r={members:Array.isArray(e.members)?JSON.stringify(e.members):e.members,upsert:e.upsert};return this.request.postWithFD("".concat(this.baseRoute,"/").concat(t,"/members.json"),r).then((function(t){return t.body}))},e.prototype.updateMember=function(t,e,r){var n=this.checkAndUpdateData(r);return this.request.putWithFD("".concat(this.baseRoute,"/").concat(t,"/members/").concat(e),n).then((function(t){return t.body.member}))},e.prototype.destroyMember=function(t,e){return this.request.delete("".concat(this.baseRoute,"/").concat(t,"/members/").concat(e)).then((function(t){return t.body}))},e}(u(r(2893)).default);e.default=c},293:function(t,e,r){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},i.apply(this,arguments)},s=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},a=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}},u=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var c=function(t){function e(e,r){var n=t.call(this,e)||this;return n.request=e,n.baseRoute="/v3/lists",n.members=r,n}return o(e,t),e.prototype.parseValidationResult=function(t,e){return{status:t,validationResult:i(i({},e),{created_at:new Date(1e3*e.created_at)})}},e.prototype.parseList=function(t){var e={};return e.items=t.body.items,e.pages=this.parsePageLinks(t,"?","address"),e.status=t.status,e},e.prototype.list=function(t){return s(this,void 0,void 0,(function(){return a(this,(function(e){return[2,this.requestListWithPages("".concat(this.baseRoute,"/pages"),t)]}))}))},e.prototype.get=function(t){return this.request.get("".concat(this.baseRoute,"/").concat(t)).then((function(t){return t.body.list}))},e.prototype.create=function(t){return this.request.postWithFD(this.baseRoute,t).then((function(t){return t.body.list}))},e.prototype.update=function(t,e){return this.request.putWithFD("".concat(this.baseRoute,"/").concat(t),e).then((function(t){return t.body.list}))},e.prototype.destroy=function(t){return this.request.delete("".concat(this.baseRoute,"/").concat(t)).then((function(t){return t.body}))},e.prototype.validate=function(t){return this.request.post("".concat(this.baseRoute,"/").concat(t,"/validate"),{}).then((function(t){return i({status:t.status},t.body)}))},e.prototype.validationResult=function(t){var e=this;return this.request.get("".concat(this.baseRoute,"/").concat(t,"/validate")).then((function(t){return e.parseValidationResult(t.status,t.body)}))},e.prototype.cancelValidation=function(t){return this.request.delete("".concat(this.baseRoute,"/").concat(t,"/validate")).then((function(t){return{status:t.status,message:t.body.message}}))},e}(u(r(2893)).default);e.default=c},5486:function(t,e,r){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},n.apply(this,arguments)},o=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var i=o(r(8426)),s=function(){function t(t){this.request=t}return t.prototype.prepareBooleanValues=function(t){var e=new Set(["o:testmode","t:text","o:dkim","o:tracking","o:tracking-clicks","o:tracking-opens","o:require-tls","o:skip-verification"]);if(!t||0===Object.keys(t).length)throw i.default.getUserDataError("Message data object can not be empty","Message data object can not be empty");return Object.keys(t).reduce((function(r,n){return e.has(n)&&"boolean"==typeof t[n]?r[n]=t[n]?"yes":"no":r[n]=t[n],r}),{})},t.prototype._parseResponse=function(t){return n({status:t.status},t.body)},t.prototype.create=function(t,e){if(e.message)return this.request.postWithFD("/v3/".concat(t,"/messages.mime"),e).then(this._parseResponse);var r=this.prepareBooleanValues(e);return this.request.postWithFD("/v3/".concat(t,"/messages"),r).then(this._parseResponse)},t}();e.default=s},444:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t){this.request=t}return t.prototype.list=function(t){return this.request.get("/v3/routes",t).then((function(t){return t.body.items}))},t.prototype.get=function(t){return this.request.get("/v3/routes/".concat(t)).then((function(t){return t.body.route}))},t.prototype.create=function(t){return this.request.postWithFD("/v3/routes",t).then((function(t){return t.body.route}))},t.prototype.update=function(t,e){return this.request.putWithFD("/v3/routes/".concat(t),e).then((function(t){return t.body}))},t.prototype.destroy=function(t){return this.request.delete("/v3/routes/".concat(t)).then((function(t){return t.body}))},t}();e.default=r},7728:function(t,e,r){"use strict";var n=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;o<i;o++)!n&&o in e||(n||(n=Array.prototype.slice.call(e,0,o)),n[o]=e[o]);return t.concat(n||Array.prototype.slice.call(e))},o=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var i=o(r(5469)),s=o(r(4208)),a=function(){function t(t,e){void 0===e&&(e=console),this.request=t,this.logger=e}return t.prototype.convertDateToUTC=function(t,e){return this.logger.warn('Date:"'.concat(e,'" was auto-converted to UTC time zone.\nValue "').concat(e.toUTCString(),'" will be used for request.\nConsider using string type for property "').concat(t,'" to avoid auto-converting')),[t,e.toUTCString()]},t.prototype.prepareSearchParams=function(t){var e=this,r=[];return"object"==typeof t&&Object.keys(t).length&&(r=Object.entries(t).reduce((function(t,r){var o=r[0],i=r[1];if(Array.isArray(i)&&i.length){var s=i.map((function(t){return[o,t]}));return n(n([],t,!0),s,!0)}return i instanceof Date?(t.push(e.convertDateToUTC(o,i)),t):("string"==typeof i&&t.push([o,i]),t)}),[])),r},t.prototype.parseStats=function(t){return new s.default(t.body)},t.prototype.getDomain=function(t,e){var r=this.prepareSearchParams(e);return this.request.get((0,i.default)("/v3",t,"stats/total"),r).then(this.parseStats)},t.prototype.getAccount=function(t){var e=this.prepareSearchParams(t);return this.request.get("/v3/stats/total",e).then(this.parseStats)},t}();e.default=a},4208:function(t,e){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},r.apply(this,arguments)};Object.defineProperty(e,"__esModule",{value:!0});var n=function(t){this.start=new Date(t.start),this.end=new Date(t.end),this.resolution=t.resolution,this.stats=t.stats.map((function(t){var e=r({},t);return e.time=new Date(t.time),e}))};e.default=n},3126:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t){this.request=t}return t.prototype.list=function(t){return this.request.get("/v5/accounts/subaccounts",t).then((function(t){return t.body}))},t.prototype.get=function(t){return this.request.get("/v5/accounts/subaccounts/".concat(t)).then((function(t){return t.body}))},t.prototype.create=function(t){return this.request.postWithFD("/v5/accounts/subaccounts",{name:t}).then((function(t){return t.body}))},t.prototype.enable=function(t){return this.request.post("/v5/accounts/subaccounts/".concat(t,"/enable")).then((function(t){return t.body}))},t.prototype.disable=function(t){return this.request.post("/v5/accounts/subaccounts/".concat(t,"/disable")).then((function(t){return t.body}))},t.SUBACCOUNT_HEADER="X-Mailgun-On-Behalf-Of",t}();e.default=r},5153:function(t,e,r){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var s=r(8850),a=function(t){function e(e){var r=t.call(this,s.SuppressionModels.BOUNCES)||this;return r.address=e.address,r.code=+e.code,r.error=e.error,r.created_at=new Date(e.created_at),r}return o(e,t),e}(i(r(8198)).default);e.default=a},4336:function(t,e,r){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var s=r(8850),a=function(t){function e(e){var r=t.call(this,s.SuppressionModels.COMPLAINTS)||this;return r.address=e.address,r.created_at=new Date(e.created_at),r}return o(e,t),e}(i(r(8198)).default);e.default=a},8198:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(t){this.type=t};e.default=r},1930:function(t,e,r){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},s=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}},a=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,i=e.length;o<i;o++)!n&&o in e||(n||(n=Array.prototype.slice.call(e,0,o)),n[o]=e[o]);return t.concat(n||Array.prototype.slice.call(e))},u=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var c=u(r(5469)),l=u(r(8426)),f=u(r(2893)),p=u(r(5153)),d=u(r(4336)),h=u(r(2460)),y=u(r(8680)),b={headers:{"Content-Type":"application/json"}},v=function(t){function e(e){var r=t.call(this,e)||this;return r.request=e,r.models={bounces:p.default,complaints:d.default,unsubscribes:h.default,whitelists:y.default},r}return o(e,t),e.prototype.parseList=function(t,e){var r,n={};return n.items=(null===(r=t.body.items)||void 0===r?void 0:r.map((function(t){return new e(t)})))||[],n.pages=this.parsePageLinks(t,"?","address"),n.status=t.status,n},e.prototype._parseItem=function(t,e){return new e(t)},e.prototype.createWhiteList=function(t,e,r){if(r)throw l.default.getUserDataError("Data property should be an object","Whitelist's creation process does not support multiple creations. Data property should be an object");return this.request.postWithFD((0,c.default)("v3",t,"whitelists"),e).then(this.prepareResponse)},e.prototype.createUnsubscribe=function(t,e){if(Array.isArray(e)){if(e.some((function(t){return t.tag})))throw l.default.getUserDataError("Tag property should not be used for creating multiple unsubscribes.","Tag property can be used only if one unsubscribe provided as second argument of create method. Please use tags instead.");return this.request.post((0,c.default)("v3",t,"unsubscribes"),JSON.stringify(e),b).then(this.prepareResponse)}if(null==e?void 0:e.tags)throw l.default.getUserDataError("Tags property should not be used for creating one unsubscribe.","Tags property can be used if you provides an array of unsubscribes as second argument of create method. Please use tag instead");if(Array.isArray(e.tag))throw l.default.getUserDataError("Tag property can not be an array","Please use array of unsubscribes as second argument of create method to be able to provide few tags");return this.request.postWithFD((0,c.default)("v3",t,"unsubscribes"),e).then(this.prepareResponse)},e.prototype.getModel=function(t){if(t in this.models)return this.models[t];throw l.default.getUserDataError("Unknown type value","Type may be only one of [bounces, complaints, unsubscribes, whitelists]")},e.prototype.prepareResponse=function(t){return{message:t.body.message,type:t.body.type||"",value:t.body.value||"",status:t.status}},e.prototype.list=function(t,e,r){return i(this,void 0,void 0,(function(){var n;return s(this,(function(o){return n=this.getModel(e),[2,this.requestListWithPages((0,c.default)("v3",t,e),r,n)]}))}))},e.prototype.get=function(t,e,r){var n=this,o=this.getModel(e);return this.request.get((0,c.default)("v3",t,e,encodeURIComponent(r))).then((function(t){return n._parseItem(t.body,o)}))},e.prototype.create=function(t,e,r){var n;this.getModel(e);var o=Array.isArray(r);return"whitelists"===e?this.createWhiteList(t,r,o):"unsubscribes"===e?this.createUnsubscribe(t,r):(n=o?a([],r,!0):[r],this.request.post((0,c.default)("v3",t,e),JSON.stringify(n),b).then(this.prepareResponse))},e.prototype.destroy=function(t,e,r){return this.getModel(e),this.request.delete((0,c.default)("v3",t,e,encodeURIComponent(r))).then((function(t){return{message:t.body.message,value:t.body.value||"",address:t.body.address||"",status:t.status}}))},e}(f.default);e.default=v,t.exports=v},2460:function(t,e,r){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var s=r(8850),a=function(t){function e(e){var r=t.call(this,s.SuppressionModels.UNSUBSCRIBES)||this;return r.address=e.address,r.tags=e.tags,r.created_at=new Date(e.created_at),r}return o(e,t),e}(i(r(8198)).default);e.default=a},8680:function(t,e,r){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var s=r(8850),a=function(t){function e(e){var r=t.call(this,s.SuppressionModels.WHITELISTS)||this;return r.value=e.value,r.reason=e.reason,r.createdAt=new Date(e.createdAt),r}return o(e,t),e}(i(r(8198)).default);e.default=a},6116:function(t,e,r){"use strict";var n,o=this&&this.__extends||(n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},n(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=this&&this.__assign||function(){return i=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},i.apply(this,arguments)},s=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},a=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}},u=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.MultipleValidationJob=void 0;var c=u(r(2893)),l=u(r(3008)),f=u(r(8426)),p=function(t,e){var r,n;this.createdAt=new Date(t.created_at),this.id=t.id,this.quantity=t.quantity,this.recordsProcessed=t.records_processed,this.status=t.status,this.responseStatusCode=e,t.download_url&&(this.downloadUrl={csv:null===(r=t.download_url)||void 0===r?void 0:r.csv,json:null===(n=t.download_url)||void 0===n?void 0:n.json}),t.summary&&(this.summary={result:{catchAll:t.summary.result.catch_all,deliverable:t.summary.result.deliverable,doNotSend:t.summary.result.do_not_send,undeliverable:t.summary.result.undeliverable,unknown:t.summary.result.unknown},risk:{high:t.summary.risk.high,low:t.summary.risk.low,medium:t.summary.risk.medium,unknown:t.summary.risk.unknown}})};e.MultipleValidationJob=p;var d=function(t){function e(e){var r=t.call(this)||this;return r.request=e,r.attachmentsHandler=new l.default,r}return o(e,t),e.prototype.handleResponse=function(t){return i({status:t.status},null==t?void 0:t.body)},e.prototype.parseList=function(t){var e={};return e.jobs=t.body.jobs.map((function(e){return new p(e,t.status)})),e.pages=this.parsePageLinks(t,"?","pivot"),e.total=t.body.total,e.status=t.status,e},e.prototype.list=function(t){return s(this,void 0,void 0,(function(){return a(this,(function(e){return[2,this.requestListWithPages("/v4/address/validate/bulk",t)]}))}))},e.prototype.get=function(t){return s(this,void 0,void 0,(function(){var e;return a(this,(function(r){switch(r.label){case 0:return[4,this.request.get("/v4/address/validate/bulk/".concat(t))];case 1:return e=r.sent(),[2,new p(e.body,e.status)]}}))}))},e.prototype.convertToExpectedShape=function(t){return this.attachmentsHandler.isBuffer(t.file)?{multipleValidationFile:t.file}:"string"==typeof t.file?{multipleValidationFile:{data:t.file}}:(this.attachmentsHandler.isStream(t.file),{multipleValidationFile:t.file})},e.prototype.create=function(t,e){return s(this,void 0,void 0,(function(){var r,n;return a(this,(function(o){switch(o.label){case 0:if(!e||!e.file)throw f.default.getUserDataError('"file" property expected.','Make sure second argument has "file" property.');return r=this.convertToExpectedShape(e),[4,this.request.postWithFD("/v4/address/validate/bulk/".concat(t),r)];case 1:return n=o.sent(),[2,this.handleResponse(n)]}}))}))},e.prototype.destroy=function(t){return s(this,void 0,void 0,(function(){var e;return a(this,(function(r){switch(r.label){case 0:return[4,this.request.delete("/v4/address/validate/bulk/".concat(t))];case 1:return e=r.sent(),[2,this.handleResponse(e)]}}))}))},e}(c.default);e.default=d},9325:function(t,e){"use strict";var r=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},n=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}};Object.defineProperty(e,"__esModule",{value:!0});var o=function(){function t(t,e){this.request=t,this.multipleValidation=e}return t.prototype.get=function(t){return r(this,void 0,void 0,(function(){var e;return n(this,(function(r){switch(r.label){case 0:return e={address:t},[4,this.request.get("/v4/address/validate",e)];case 1:return[2,r.sent().body]}}))}))},t}();e.default=o},7144:function(t,e,r){"use strict";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.Webhook=void 0;var o=n(r(5469)),i=function(t,e,r){this.id=t,this.url=e,this.urls=r};e.Webhook=i;var s=function(){function t(t){this.request=t}return t.prototype._parseWebhookList=function(t){return t.body.webhooks},t.prototype._parseWebhookWithID=function(t){return function(e){var r,n=null===(r=null==e?void 0:e.body)||void 0===r?void 0:r.webhook,o=null==n?void 0:n.url,s=null==n?void 0:n.urls;return o||(o=s&&s.length?s[0]:void 0),s&&0!==s.length||!o||(s=[o]),new i(t,o,s)}},t.prototype._parseWebhookTest=function(t){return{code:t.body.code,message:t.body.message}},t.prototype.list=function(t,e){return this.request.get((0,o.default)("/v3/domains",t,"webhooks"),e).then(this._parseWebhookList)},t.prototype.get=function(t,e){return this.request.get((0,o.default)("/v3/domains",t,"webhooks",e)).then(this._parseWebhookWithID(e))},t.prototype.create=function(t,e,r,n){return void 0===n&&(n=!1),n?this.request.putWithFD((0,o.default)("/v3/domains",t,"webhooks",e,"test"),{url:r}).then(this._parseWebhookTest):this.request.postWithFD((0,o.default)("/v3/domains",t,"webhooks"),{id:e,url:r}).then(this._parseWebhookWithID(e))},t.prototype.update=function(t,e,r){return this.request.putWithFD((0,o.default)("/v3/domains",t,"webhooks",e),{url:r}).then(this._parseWebhookWithID(e))},t.prototype.destroy=function(t,e){return this.request.delete((0,o.default)("/v3/domains",t,"webhooks",e)).then(this._parseWebhookWithID(e))},t}();e.default=s},3008:function(t,e,r){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},n.apply(this,arguments)},o=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var i=o(r(8426)),s=function(){function t(t,e){this._stream=t,this.size=e}return t.prototype.stream=function(){return this._stream},Object.defineProperty(t.prototype,Symbol.toStringTag,{get:function(){return"Blob"},enumerable:!1,configurable:!0}),t}(),a=function(){function t(){}return t.prototype.getAttachmentOptions=function(t){var e=t.filename,r=t.contentType,o=t.knownLength;return n(n(n({},e?{filename:e}:{filename:"file"}),r&&{contentType:r}),o&&{knownLength:o})},t.prototype.getFileInfo=function(t){var e=t.name,r=t.type,n=t.size;return this.getAttachmentOptions({filename:e,contentType:r,knownLength:n})},t.prototype.getCustomFileInfo=function(t){var e=t.filename,r=t.contentType,n=t.knownLength;return this.getAttachmentOptions({filename:e,contentType:r,knownLength:n})},t.prototype.getBufferInfo=function(t){var e=t.byteLength;return this.getAttachmentOptions({filename:"file",contentType:"",knownLength:e})},t.prototype.isStream=function(t){return"object"==typeof t&&"function"==typeof t.pipe},t.prototype.isCustomFile=function(t){return"object"==typeof t&&!!t.data},t.prototype.isBrowserFile=function(t){return"object"==typeof t&&(!!t.name||"undefined"!=typeof Blob&&t instanceof Blob)},t.prototype.isBuffer=function(t){return"undefined"!=typeof Buffer&&Buffer.isBuffer(t)},t.prototype.getAttachmentInfo=function(t){var e=this.isBrowserFile(t),r=this.isCustomFile(t);if(!("string"==typeof t)){if(e)return this.getFileInfo(t);if("undefined"!=typeof Buffer&&Buffer.isBuffer(t))return this.getBufferInfo(t);if(r)return this.getCustomFileInfo(t)}return{filename:"file",contentType:void 0,knownLength:void 0}},t.prototype.convertToFDexpectedShape=function(t){var e,r=this.isStream(t),n=this.isBrowserFile(t),o=this.isCustomFile(t);if(r||"string"==typeof t||n||this.isBuffer(t))e=t;else{if(!o)throw i.default.getUserDataError("Unknown attachment type ".concat(typeof t),'The "attachment" property expects either Buffer, Blob, or String.\n Also, It is possible to provide an object that has the property "data" with a value that is equal to one of the types counted before.\n Additionally, you may use an array to send more than one attachment.');e=t.data}return e},t.prototype.getBlobFromStream=function(t,e){return new s(t,e)},t}();e.default=a},8426:function(t,e){"use strict";var r,n=this&&this.__extends||(r=function(t,e){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])},r(t,e)},function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function n(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)});Object.defineProperty(e,"__esModule",{value:!0});var o=function(t){function e(e){var r=e.status,n=e.statusText,o=e.message,i=e.body,s=void 0===i?{}:i,a=this,u="",c="";return"string"==typeof s?u=s:(u=(null==s?void 0:s.message)||"",c=(null==s?void 0:s.error)||""),(a=t.call(this)||this).stack="",a.status=r,a.message=o||c||n||"",a.details=u,a.type="MailgunAPIError",a}return n(e,t),e.getUserDataError=function(t,e){return new this({status:400,statusText:t,body:{message:e}})},e}(Error);e.default=o},7613:function(t,e,r){"use strict";var n=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var o=n(r(8426)),i=n(r(3008)),s=function(){function t(t){this.FormDataConstructor=t,this.fileKeys=["attachment","inline","multipleValidationFile"],this.attachmentsHandler=new i.default}return t.prototype.createFormData=function(t){var e=this;if(!t)throw new Error("Please provide data object");return Object.keys(t).filter((function(e){return t[e]})).reduce((function(r,n){if(e.fileKeys.includes(n)){var i=t[n];if(e.isMessageAttachment(i))return e.addFilesToFD(n,i,r),r;throw o.default.getUserDataError("Unknown value ".concat(t[n]," with type ").concat(typeof t[n],' for property "').concat(n,'"'),'The key "'.concat(n,'" should have type of Buffer, Stream, File, or String '))}if("message"===n){var s=t[n];if(!s||!e.isMIME(s))throw o.default.getUserDataError('Unknown data type for "'.concat(n,'" property'),"The mime data should have type of Buffer, String or Blob");return e.addMimeDataToFD(n,s,r),r}return e.addCommonPropertyToFD(n,t[n],r),r}),new this.FormDataConstructor)},t.prototype.addMimeDataToFD=function(t,e,r){if("string"!=typeof e){if(this.isFormDataPackage(r))r.append(t,e,{filename:"MimeMessage"});else if(void 0!==typeof Blob){var n=r;if(e instanceof Blob)return void n.append(t,e,"MimeMessage");if(this.attachmentsHandler.isBuffer(e)){var o=new Blob([e]);n.append(t,o,"MimeMessage")}}}else r.append(t,e)},t.prototype.isMIME=function(t){return"string"==typeof t||"undefined"!=typeof Blob&&t instanceof Blob||this.attachmentsHandler.isBuffer(t)||"undefined"!=typeof ReadableStream&&t instanceof ReadableStream},t.prototype.isFormDataPackage=function(t){return"object"==typeof t&&null!==t&&"function"==typeof t.getHeaders},t.prototype.isMessageAttachment=function(t){var e=this;return this.attachmentsHandler.isCustomFile(t)||"string"==typeof t||"undefined"!=typeof File&&t instanceof File||"undefined"!=typeof Blob&&t instanceof Blob||this.attachmentsHandler.isBuffer(t)||this.attachmentsHandler.isStream(t)||Array.isArray(t)&&t.every((function(r){return e.attachmentsHandler.isCustomFile(r)||"undefined"!=typeof File&&r instanceof File||"undefined"!=typeof Blob&&t instanceof Blob||e.attachmentsHandler.isBuffer(r)||e.attachmentsHandler.isStream(r)}))},t.prototype.addFilesToFD=function(t,e,r){var n=this,o=function(t,e,o){var i="multipleValidationFile"===t?"file":t,s=n.attachmentsHandler.convertToFDexpectedShape(e),a=n.attachmentsHandler.getAttachmentInfo(e);if(n.isFormDataPackage(o)){var u=o,c="string"==typeof s?Buffer.from(s):s;u.append(i,c,a)}else if(void 0!==typeof Blob){var l=r;if("string"==typeof s||n.attachmentsHandler.isBuffer(s)){var f=new Blob([s]);return void l.append(i,f,a.filename)}if(s instanceof Blob)return void l.append(i,s,a.filename);if(n.attachmentsHandler.isStream(s)){var p=n.attachmentsHandler.getBlobFromStream(s,a.knownLength);l.set(i,p,a.filename)}}};Array.isArray(e)?e.forEach((function(e){o(t,e,r)})):o(t,e,r)},t.prototype.addCommonPropertyToFD=function(t,e,r){var n=this,i=function(t,e){if(n.isFormDataPackage(r))return"object"==typeof e?(console.warn('The received value is an object. \n"JSON.Stringify" will be used to avoid TypeError \nTo remove this warning: \nConsider switching to built-in FormData or converting the value on your own.\n'),r.append(t,JSON.stringify(e))):r.append(t,e);if("string"==typeof e)return r.append(t,e);if(void 0!==typeof Blob&&e instanceof Blob)return r.append(t,e);throw o.default.getUserDataError("Unknown value type for Form Data. String or Blob expected","Browser compliant FormData allows only string or Blob values for properties that are not attachments.")};Array.isArray(e)?e.forEach((function(e){i(t,e)})):null!=e&&i(t,e)},t}();e.default=s},2893:function(t,e,r){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},n.apply(this,arguments)},o=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},i=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}},s=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var a=s(r(5469)),u=s(r(8426)),c=function(){function t(t){t&&(this.request=t)}return t.prototype.parsePage=function(t,e,r,n){var o=new URL(e).searchParams,i=e&&"string"==typeof e&&e.split(r).pop()||"",s=null;return n&&(s=o.has(n)?o.get(n):void 0),{id:t,page:"?"===r?"?".concat(i):i,iteratorPosition:s,url:e}},t.prototype.parsePageLinks=function(t,e,r){var n=this;return Object.entries(t.body.paging).reduce((function(t,o){var i=o[0],s=o[1];return t[i]=n.parsePage(i,s,e,r),t}),{})},t.prototype.updateUrlAndQuery=function(t,e){var r=t,o=n({},e);return o.page&&(r=(0,a.default)(t,o.page),delete o.page),{url:r,updatedQuery:o}},t.prototype.requestListWithPages=function(t,e,r){return o(this,void 0,void 0,(function(){var n,o,s,a;return i(this,(function(i){switch(i.label){case 0:return n=this.updateUrlAndQuery(t,e),o=n.url,s=n.updatedQuery,this.request?[4,this.request.get(o,s)]:[3,2];case 1:return a=i.sent(),[2,this.parseList(a,r)];case 2:throw new u.default({status:500,statusText:"Request property is empty",body:{message:""}})}}))}))},t}();e.default=c},6997:function(t,e,r){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(t){for(var e,r=1,n=arguments.length;r<n;r++)for(var o in e=arguments[r])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},n.apply(this,arguments)},o=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),i=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),s=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)"default"!==r&&Object.prototype.hasOwnProperty.call(t,r)&&o(e,t,r);return i(e,t),e},a=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,i){function s(t){try{u(n.next(t))}catch(t){i(t)}}function a(t){try{u(n.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(s,a)}u((n=n.apply(t,e||[])).next())}))},u=this&&this.__generator||function(t,e){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(r)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(r=1,n&&(o=2&a[0]?n.return:a[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,a[1])).done)return o;switch(n=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,n=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=e.call(t,s)}catch(t){a=[6,t],n=0}finally{r=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}},c=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var l=s(r(5914)),f=c(r(5469)),p=s(r(6425)),d=c(r(8426)),h=c(r(7613)),y=c(r(3126)),b=function(){function t(t,e){this.username=t.username,this.key=t.key,this.url=t.url,this.timeout=t.timeout,this.headers=this.makeHeadersFromObject(t.headers),this.formDataBuilder=new h.default(e),this.maxBodyLength=52428800,this.proxy=null==t?void 0:t.proxy}return t.prototype.request=function(t,e,r){var o,i,s;return a(this,void 0,void 0,(function(){var a,c,l,h,y,b,v,_;return u(this,(function(u){switch(u.label){case 0:null==(a=n({},r))||delete a.headers,c=this.joinAndTransformHeaders(r),l=n({},a),(null==a?void 0:a.query)&&Object.getOwnPropertyNames(null==a?void 0:a.query).length>0&&(l.params=new URLSearchParams(a.query),delete l.query),(null==a?void 0:a.body)&&(h=null==a?void 0:a.body,l.data=h,delete l.body),b=(0,f.default)(this.url,e),u.label=1;case 1:return u.trys.push([1,3,,4]),[4,p.default.request(n(n({method:t.toLocaleUpperCase(),timeout:this.timeout,url:b,headers:c},l),{maxBodyLength:this.maxBodyLength,proxy:this.proxy}))];case 2:return y=u.sent(),[3,4];case 3:throw v=u.sent(),_=v,new d.default({status:(null===(o=null==_?void 0:_.response)||void 0===o?void 0:o.status)||400,statusText:(null===(i=null==_?void 0:_.response)||void 0===i?void 0:i.statusText)||_.code,body:(null===(s=null==_?void 0:_.response)||void 0===s?void 0:s.data)||_.message});case 4:return[4,this.getResponseBody(y)];case 5:return[2,u.sent()]}}))}))},t.prototype.getResponseBody=function(t){return a(this,void 0,void 0,(function(){var e;return u(this,(function(r){if(e={body:{},status:null==t?void 0:t.status},"string"==typeof t.data){if("Mailgun Magnificent API"===t.data)throw new d.default({status:400,statusText:"Incorrect url",body:t.data});e.body={message:t.data}}else e.body=t.data;return[2,e]}))}))},t.prototype.joinAndTransformHeaders=function(t){var e=new p.AxiosHeaders,r=l.encode("".concat(this.username,":").concat(this.key));e.setAuthorization("Basic ".concat(r)),e.set(this.headers);var n=t&&t.headers,o=this.makeHeadersFromObject(n);return e.set(o),e},t.prototype.makeHeadersFromObject=function(t){void 0===t&&(t={});var e=new p.AxiosHeaders;return e=Object.entries(t).reduce((function(t,e){var r=e[0],n=e[1];return t.set(r,n),t}),e)},t.prototype.setSubaccountHeader=function(t){var e,r=this.makeHeadersFromObject(n(n({},this.headers),((e={})[y.default.SUBACCOUNT_HEADER]=t,e)));this.headers.set(r)},t.prototype.resetSubaccountHeader=function(){this.headers.delete(y.default.SUBACCOUNT_HEADER)},t.prototype.query=function(t,e,r,o){return this.request(t,e,n({query:r},o))},t.prototype.command=function(t,e,r,o,i){void 0===i&&(i=!0);var s={};i&&(s={"Content-Type":"application/x-www-form-urlencoded"});var a=n(n(n({},s),{body:r}),o);return this.request(t,e,a)},t.prototype.get=function(t,e,r){return this.query("get",t,e,r)},t.prototype.post=function(t,e,r){return this.command("post",t,e,r)},t.prototype.postWithFD=function(t,e){var r=this.formDataBuilder.createFormData(e);return this.command("post",t,r,{headers:{"Content-Type":"multipart/form-data"}},!1)},t.prototype.putWithFD=function(t,e){var r=this.formDataBuilder.createFormData(e);return this.command("put",t,r,{headers:{"Content-Type":"multipart/form-data"}},!1)},t.prototype.patchWithFD=function(t,e){var r=this.formDataBuilder.createFormData(e);return this.command("patch",t,r,{headers:{"Content-Type":"multipart/form-data"}},!1)},t.prototype.put=function(t,e,r){return this.command("put",t,e,r)},t.prototype.delete=function(t,e){return this.command("delete",t,e)},t}();e.default=b},8850:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.YesNo=e.WebhooksIds=e.SuppressionModels=e.Resolution=void 0,function(t){t.HOUR="hour",t.DAY="day",t.MONTH="month"}(e.Resolution||(e.Resolution={})),function(t){t.BOUNCES="bounces",t.COMPLAINTS="complaints",t.UNSUBSCRIBES="unsubscribes",t.WHITELISTS="whitelists"}(e.SuppressionModels||(e.SuppressionModels={})),function(t){t.CLICKED="clicked",t.COMPLAINED="complained",t.DELIVERED="delivered",t.OPENED="opened",t.PERMANENT_FAIL="permanent_fail",t.TEMPORARY_FAIL="temporary_fail",t.UNSUBSCRIBED="unsubscribe"}(e.WebhooksIds||(e.WebhooksIds={})),function(t){t.YES="yes",t.NO="no"}(e.YesNo||(e.YesNo={}))},5286:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},1292:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(5286),e)},9120:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},3641:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},4209:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},7920:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},3662:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(9120),e),o(r(3641),e),o(r(4209),e),o(r(7920),e)},7084:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},2404:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(7084),e)},7569:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},5519:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(7569),e)},6617:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},4225:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(6617),e)},1309:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},1619:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},3460:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},5494:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},5272:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},2567:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},1451:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(3460),e),o(r(1309),e),o(r(1619),e),o(r(2567),e),o(r(5494),e),o(r(5272),e)},6522:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},4659:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(6522),e)},8255:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},7510:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},5475:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(8255),e),o(r(7510),e)},8225:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},8497:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(8225),e)},4461:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},9271:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(4461),e)},5036:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},9900:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},9624:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(5036),e),o(r(9900),e)},2593:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},137:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(2593),e)},1805:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},5500:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},4449:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},1376:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},3572:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},817:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(1805),e),o(r(5500),e),o(r(1376),e),o(r(3572),e),o(r(4449),e)},3128:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},1116:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},403:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(3128),e),o(r(1116),e)},5609:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},3:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(5609),e)},7176:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(1292),e),o(r(3662),e),o(r(4659),e),o(r(5475),e),o(r(9624),e),o(r(817),e),o(r(403),e),o(r(2404),e),o(r(3),e),o(r(8497),e),o(r(9271),e),o(r(4225),e),o(r(5519),e),o(r(137),e),o(r(1451),e)},556:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},2897:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},5481:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},3474:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},8518:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},3635:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(2897),e),o(r(556),e),o(r(5481),e),o(r(3474),e),o(r(8518),e)},3625:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},1054:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},4128:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},2010:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},1358:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},9191:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(3625),e),o(r(1358),e),o(r(1054),e),o(r(4128),e),o(r(2010),e)},5554:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},3803:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(5554),e)},9130:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},6530:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(9130),e)},3990:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},28:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(3990),e)},1534:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},9642:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(1534),e)},1294:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},1156:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},8344:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(1294),e),o(r(1156),e)},7644:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},194:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(7644),e)},2776:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},6024:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(2776),e)},3730:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},4197:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(3730),e)},4610:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},5112:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(4610),e)},3668:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},1075:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},4696:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},8863:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},7387:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},2146:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(3668),e),o(r(1075),e),o(r(4696),e),o(r(8863),e),o(r(7387),e)},1499:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},9919:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},8526:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(1499),e),o(r(9919),e)},8656:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0})},8740:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(8656),e)},2729:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)};Object.defineProperty(e,"__esModule",{value:!0}),o(r(3635),e),o(r(9191),e),o(r(3803),e),o(r(6530),e),o(r(28),e),o(r(9642),e),o(r(8344),e),o(r(194),e),o(r(6024),e),o(r(4197),e),o(r(5112),e),o(r(2146),e),o(r(8526),e),o(r(8740),e)},439:function(t,e,r){"use strict";var n=this&&this.__createBinding||(Object.create?function(t,e,r,n){void 0===n&&(n=r);var o=Object.getOwnPropertyDescriptor(e,r);o&&!("get"in o?!e.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,n,o)}:function(t,e,r,n){void 0===n&&(n=r),t[n]=e[r]}),o=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),i=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var r in t)"default"!==r&&Object.prototype.hasOwnProperty.call(t,r)&&n(e,t,r);return o(e,t),e},s=this&&this.__exportStar||function(t,e){for(var r in t)"default"===r||Object.prototype.hasOwnProperty.call(e,r)||n(e,t,r)},a=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.Interfaces=e.Enums=void 0;var u=a(r(7688));e.Enums=i(r(8850)),s(r(2729),e),e.Interfaces=i(r(7176));var c=function(){function t(t){this.formData=t}return Object.defineProperty(t,"default",{get:function(){return this},enumerable:!1,configurable:!0}),t.prototype.client=function(t){return new u.default(t,this.formData)},t}();e.default=c},5914:function(t,e,r){var n;t=r.nmd(t),function(){var o=e,i=(t&&t.exports,"object"==typeof r.g&&r.g);i.global!==i&&i.window;var s=function(t){this.message=t};(s.prototype=new Error).name="InvalidCharacterError";var a=function(t){throw new s(t)},u="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",c=/[\t\n\f\r ]/g,l={encode:function(t){t=String(t),/[^\0-\xFF]/.test(t)&&a("The string to be encoded contains characters outside of the Latin1 range.");for(var e,r,n,o,i=t.length%3,s="",c=-1,l=t.length-i;++c<l;)e=t.charCodeAt(c)<<16,r=t.charCodeAt(++c)<<8,n=t.charCodeAt(++c),s+=u.charAt((o=e+r+n)>>18&63)+u.charAt(o>>12&63)+u.charAt(o>>6&63)+u.charAt(63&o);return 2==i?(e=t.charCodeAt(c)<<8,r=t.charCodeAt(++c),s+=u.charAt((o=e+r)>>10)+u.charAt(o>>4&63)+u.charAt(o<<2&63)+"="):1==i&&(o=t.charCodeAt(c),s+=u.charAt(o>>2)+u.charAt(o<<4&63)+"=="),s},decode:function(t){var e=(t=String(t).replace(c,"")).length;e%4==0&&(e=(t=t.replace(/==?$/,"")).length),(e%4==1||/[^+a-zA-Z0-9/]/.test(t))&&a("Invalid character: the string to be decoded is not correctly encoded.");for(var r,n,o=0,i="",s=-1;++s<e;)n=u.indexOf(t.charAt(s)),r=o%4?64*r+n:n,o++%4&&(i+=String.fromCharCode(255&r>>(-2*o&6)));return i},version:"1.0.0"};void 0===(n=function(){return l}.call(e,r,e,t))||(t.exports=n)}()},5469:function(t,e,r){var n,o,i;i=function(){return function(){return function(t){var e=[];if(0===t.length)return"";if("string"!=typeof t[0])throw new TypeError("Url must be a string. Received "+t[0]);if(t[0].match(/^[^/:]+:\/*$/)&&t.length>1){var r=t.shift();t[0]=r+t[0]}t[0].match(/^file:\/\/\//)?t[0]=t[0].replace(/^([^/:]+):\/*/,"$1:///"):t[0]=t[0].replace(/^([^/:]+):\/*/,"$1://");for(var n=0;n<t.length;n++){var o=t[n];if("string"!=typeof o)throw new TypeError("Url must be a string. Received "+o);""!==o&&(n>0&&(o=o.replace(/^[\/]+/,"")),o=n<t.length-1?o.replace(/[\/]+$/,""):o.replace(/[\/]+$/,"/"),e.push(o))}var i=e.join("/"),s=(i=i.replace(/\/(\?|&|#[^!])/g,"$1")).split("?");return s.shift()+(s.length>0?"?":"")+s.join("&")}("object"==typeof arguments[0]?arguments[0]:[].slice.call(arguments))}},t.exports?t.exports=i():void 0===(o="function"==typeof(n=i)?n.call(e,r,e,t):n)||(t.exports=o)},6425:(t,e,r)=>{"use strict";function n(t,e){return function(){return t.apply(e,arguments)}}const{toString:o}=Object.prototype,{getPrototypeOf:i}=Object,s=(a=Object.create(null),t=>{const e=o.call(t);return a[e]||(a[e]=e.slice(8,-1).toLowerCase())});var a;const u=t=>(t=t.toLowerCase(),e=>s(e)===t),c=t=>e=>typeof e===t,{isArray:l}=Array,f=c("undefined");const p=u("ArrayBuffer");const d=c("string"),h=c("function"),y=c("number"),b=t=>null!==t&&"object"==typeof t,v=t=>{if("object"!==s(t))return!1;const e=i(t);return!(null!==e&&e!==Object.prototype&&null!==Object.getPrototypeOf(e)||Symbol.toStringTag in t||Symbol.iterator in t)},_=u("Date"),g=u("File"),m=u("Blob"),w=u("FileList"),O=u("URLSearchParams"),[j,P,x,S]=["ReadableStream","Request","Response","Headers"].map(u);function D(t,e,{allOwnKeys:r=!1}={}){if(null==t)return;let n,o;if("object"!=typeof t&&(t=[t]),l(t))for(n=0,o=t.length;n<o;n++)e.call(null,t[n],n,t);else{const o=r?Object.getOwnPropertyNames(t):Object.keys(t),i=o.length;let s;for(n=0;n<i;n++)s=o[n],e.call(null,t[s],s,t)}}function M(t,e){e=e.toLowerCase();const r=Object.keys(t);let n,o=r.length;for(;o-- >0;)if(n=r[o],e===n.toLowerCase())return n;return null}const R="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:r.g,E=t=>!f(t)&&t!==R;const T=(k="undefined"!=typeof Uint8Array&&i(Uint8Array),t=>k&&t instanceof k);var k;const q=u("HTMLFormElement"),A=(({hasOwnProperty:t})=>(e,r)=>t.call(e,r))(Object.prototype),B=u("RegExp"),C=(t,e)=>{const r=Object.getOwnPropertyDescriptors(t),n={};D(r,((r,o)=>{let i;!1!==(i=e(r,o,t))&&(n[o]=i||r)})),Object.defineProperties(t,n)},F="abcdefghijklmnopqrstuvwxyz",L="0123456789",U={DIGIT:L,ALPHA:F,ALPHA_DIGIT:F+F.toUpperCase()+L};const N=u("AsyncFunction"),I=(W="function"==typeof setImmediate,H=h(R.postMessage),W?setImmediate:H?(V=`axios@${Math.random()}`,z=[],R.addEventListener("message",(({source:t,data:e})=>{t===R&&e===V&&z.length&&z.shift()()}),!1),t=>{z.push(t),R.postMessage(V,"*")}):t=>setTimeout(t));var W,H,V,z;const J="undefined"!=typeof queueMicrotask?queueMicrotask.bind(R):"undefined"!=typeof process&&process.nextTick||I;var G={isArray:l,isArrayBuffer:p,isBuffer:function(t){return null!==t&&!f(t)&&null!==t.constructor&&!f(t.constructor)&&h(t.constructor.isBuffer)&&t.constructor.isBuffer(t)},isFormData:t=>{let e;return t&&("function"==typeof FormData&&t instanceof FormData||h(t.append)&&("formdata"===(e=s(t))||"object"===e&&h(t.toString)&&"[object FormData]"===t.toString()))},isArrayBufferView:function(t){let e;return e="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&p(t.buffer),e},isString:d,isNumber:y,isBoolean:t=>!0===t||!1===t,isObject:b,isPlainObject:v,isReadableStream:j,isRequest:P,isResponse:x,isHeaders:S,isUndefined:f,isDate:_,isFile:g,isBlob:m,isRegExp:B,isFunction:h,isStream:t=>b(t)&&h(t.pipe),isURLSearchParams:O,isTypedArray:T,isFileList:w,forEach:D,merge:function t(){const{caseless:e}=E(this)&&this||{},r={},n=(n,o)=>{const i=e&&M(r,o)||o;v(r[i])&&v(n)?r[i]=t(r[i],n):v(n)?r[i]=t({},n):l(n)?r[i]=n.slice():r[i]=n};for(let t=0,e=arguments.length;t<e;t++)arguments[t]&&D(arguments[t],n);return r},extend:(t,e,r,{allOwnKeys:o}={})=>(D(e,((e,o)=>{r&&h(e)?t[o]=n(e,r):t[o]=e}),{allOwnKeys:o}),t),trim:t=>t.trim?t.trim():t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),stripBOM:t=>(65279===t.charCodeAt(0)&&(t=t.slice(1)),t),inherits:(t,e,r,n)=>{t.prototype=Object.create(e.prototype,n),t.prototype.constructor=t,Object.defineProperty(t,"super",{value:e.prototype}),r&&Object.assign(t.prototype,r)},toFlatObject:(t,e,r,n)=>{let o,s,a;const u={};if(e=e||{},null==t)return e;do{for(o=Object.getOwnPropertyNames(t),s=o.length;s-- >0;)a=o[s],n&&!n(a,t,e)||u[a]||(e[a]=t[a],u[a]=!0);t=!1!==r&&i(t)}while(t&&(!r||r(t,e))&&t!==Object.prototype);return e},kindOf:s,kindOfTest:u,endsWith:(t,e,r)=>{t=String(t),(void 0===r||r>t.length)&&(r=t.length),r-=e.length;const n=t.indexOf(e,r);return-1!==n&&n===r},toArray:t=>{if(!t)return null;if(l(t))return t;let e=t.length;if(!y(e))return null;const r=new Array(e);for(;e-- >0;)r[e]=t[e];return r},forEachEntry:(t,e)=>{const r=(t&&t[Symbol.iterator]).call(t);let n;for(;(n=r.next())&&!n.done;){const r=n.value;e.call(t,r[0],r[1])}},matchAll:(t,e)=>{let r;const n=[];for(;null!==(r=t.exec(e));)n.push(r);return n},isHTMLForm:q,hasOwnProperty:A,hasOwnProp:A,reduceDescriptors:C,freezeMethods:t=>{C(t,((e,r)=>{if(h(t)&&-1!==["arguments","caller","callee"].indexOf(r))return!1;const n=t[r];h(n)&&(e.enumerable=!1,"writable"in e?e.writable=!1:e.set||(e.set=()=>{throw Error("Can not rewrite read-only method '"+r+"'")}))}))},toObjectSet:(t,e)=>{const r={},n=t=>{t.forEach((t=>{r[t]=!0}))};return l(t)?n(t):n(String(t).split(e)),r},toCamelCase:t=>t.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,(function(t,e,r){return e.toUpperCase()+r})),noop:()=>{},toFiniteNumber:(t,e)=>null!=t&&Number.isFinite(t=+t)?t:e,findKey:M,global:R,isContextDefined:E,ALPHABET:U,generateString:(t=16,e=U.ALPHA_DIGIT)=>{let r="";const{length:n}=e;for(;t--;)r+=e[Math.random()*n|0];return r},isSpecCompliantForm:function(t){return!!(t&&h(t.append)&&"FormData"===t[Symbol.toStringTag]&&t[Symbol.iterator])},toJSONObject:t=>{const e=new Array(10),r=(t,n)=>{if(b(t)){if(e.indexOf(t)>=0)return;if(!("toJSON"in t)){e[n]=t;const o=l(t)?[]:{};return D(t,((t,e)=>{const i=r(t,n+1);!f(i)&&(o[e]=i)})),e[n]=void 0,o}}return t};return r(t,0)},isAsyncFn:N,isThenable:t=>t&&(b(t)||h(t))&&h(t.then)&&h(t.catch),setImmediate:I,asap:J};function K(t,e,r,n,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack,this.message=t,this.name="AxiosError",e&&(this.code=e),r&&(this.config=r),n&&(this.request=n),o&&(this.response=o)}G.inherits(K,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:G.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});const $=K.prototype,Q={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach((t=>{Q[t]={value:t}})),Object.defineProperties(K,Q),Object.defineProperty($,"isAxiosError",{value:!0}),K.from=(t,e,r,n,o,i)=>{const s=Object.create($);return G.toFlatObject(t,s,(function(t){return t!==Error.prototype}),(t=>"isAxiosError"!==t)),K.call(s,t.message,e,r,n,o),s.cause=t,s.name=t.name,i&&Object.assign(s,i),s};function X(t){return G.isPlainObject(t)||G.isArray(t)}function Y(t){return G.endsWith(t,"[]")?t.slice(0,-2):t}function Z(t,e,r){return t?t.concat(e).map((function(t,e){return t=Y(t),!r&&e?"["+t+"]":t})).join(r?".":""):e}const tt=G.toFlatObject(G,{},null,(function(t){return/^is[A-Z]/.test(t)}));function et(t,e,r){if(!G.isObject(t))throw new TypeError("target must be an object");e=e||new FormData;const n=(r=G.toFlatObject(r,{metaTokens:!0,dots:!1,indexes:!1},!1,(function(t,e){return!G.isUndefined(e[t])}))).metaTokens,o=r.visitor||c,i=r.dots,s=r.indexes,a=(r.Blob||"undefined"!=typeof Blob&&Blob)&&G.isSpecCompliantForm(e);if(!G.isFunction(o))throw new TypeError("visitor must be a function");function u(t){if(null===t)return"";if(G.isDate(t))return t.toISOString();if(!a&&G.isBlob(t))throw new K("Blob is not supported. Use a Buffer instead.");return G.isArrayBuffer(t)||G.isTypedArray(t)?a&&"function"==typeof Blob?new Blob([t]):Buffer.from(t):t}function c(t,r,o){let a=t;if(t&&!o&&"object"==typeof t)if(G.endsWith(r,"{}"))r=n?r:r.slice(0,-2),t=JSON.stringify(t);else if(G.isArray(t)&&function(t){return G.isArray(t)&&!t.some(X)}(t)||(G.isFileList(t)||G.endsWith(r,"[]"))&&(a=G.toArray(t)))return r=Y(r),a.forEach((function(t,n){!G.isUndefined(t)&&null!==t&&e.append(!0===s?Z([r],n,i):null===s?r:r+"[]",u(t))})),!1;return!!X(t)||(e.append(Z(o,r,i),u(t)),!1)}const l=[],f=Object.assign(tt,{defaultVisitor:c,convertValue:u,isVisitable:X});if(!G.isObject(t))throw new TypeError("data must be an object");return function t(r,n){if(!G.isUndefined(r)){if(-1!==l.indexOf(r))throw Error("Circular reference detected in "+n.join("."));l.push(r),G.forEach(r,(function(r,i){!0===(!(G.isUndefined(r)||null===r)&&o.call(e,r,G.isString(i)?i.trim():i,n,f))&&t(r,n?n.concat(i):[i])})),l.pop()}}(t),e}function rt(t){const e={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(t).replace(/[!'()~]|%20|%00/g,(function(t){return e[t]}))}function nt(t,e){this._pairs=[],t&&et(t,this,e)}const ot=nt.prototype;function it(t){return encodeURIComponent(t).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function st(t,e,r){if(!e)return t;const n=r&&r.encode||it,o=r&&r.serialize;let i;if(i=o?o(e,r):G.isURLSearchParams(e)?e.toString():new nt(e,r).toString(n),i){const e=t.indexOf("#");-1!==e&&(t=t.slice(0,e)),t+=(-1===t.indexOf("?")?"?":"&")+i}return t}ot.append=function(t,e){this._pairs.push([t,e])},ot.toString=function(t){const e=t?function(e){return t.call(this,e,rt)}:rt;return this._pairs.map((function(t){return e(t[0])+"="+e(t[1])}),"").join("&")};var at=class InterceptorManager{constructor(){this.handlers=[]}use(t,e,r){return this.handlers.push({fulfilled:t,rejected:e,synchronous:!!r&&r.synchronous,runWhen:r?r.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){G.forEach(this.handlers,(function(e){null!==e&&t(e)}))}},ut={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},ct={isBrowser:!0,classes:{URLSearchParams:"undefined"!=typeof URLSearchParams?URLSearchParams:nt,FormData:"undefined"!=typeof FormData?FormData:null,Blob:"undefined"!=typeof Blob?Blob:null},protocols:["http","https","file","blob","url","data"]};const lt="undefined"!=typeof window&&"undefined"!=typeof document,ft=(pt="undefined"!=typeof navigator&&navigator.product,lt&&["ReactNative","NativeScript","NS"].indexOf(pt)<0);var pt;const dt="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts,ht=lt&&window.location.href||"http://localhost";var yt={...Object.freeze({__proto__:null,hasBrowserEnv:lt,hasStandardBrowserWebWorkerEnv:dt,hasStandardBrowserEnv:ft,origin:ht}),...ct};function bt(t){function e(t,r,n,o){let i=t[o++];if("__proto__"===i)return!0;const s=Number.isFinite(+i),a=o>=t.length;if(i=!i&&G.isArray(n)?n.length:i,a)return G.hasOwnProp(n,i)?n[i]=[n[i],r]:n[i]=r,!s;n[i]&&G.isObject(n[i])||(n[i]=[]);return e(t,r,n[i],o)&&G.isArray(n[i])&&(n[i]=function(t){const e={},r=Object.keys(t);let n;const o=r.length;let i;for(n=0;n<o;n++)i=r[n],e[i]=t[i];return e}(n[i])),!s}if(G.isFormData(t)&&G.isFunction(t.entries)){const r={};return G.forEachEntry(t,((t,n)=>{e(function(t){return G.matchAll(/\w+|\[(\w*)]/g,t).map((t=>"[]"===t[0]?"":t[1]||t[0]))}(t),n,r,0)})),r}return null}const vt={transitional:ut,adapter:["xhr","http","fetch"],transformRequest:[function(t,e){const r=e.getContentType()||"",n=r.indexOf("application/json")>-1,o=G.isObject(t);o&&G.isHTMLForm(t)&&(t=new FormData(t));if(G.isFormData(t))return n?JSON.stringify(bt(t)):t;if(G.isArrayBuffer(t)||G.isBuffer(t)||G.isStream(t)||G.isFile(t)||G.isBlob(t)||G.isReadableStream(t))return t;if(G.isArrayBufferView(t))return t.buffer;if(G.isURLSearchParams(t))return e.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let i;if(o){if(r.indexOf("application/x-www-form-urlencoded")>-1)return function(t,e){return et(t,new yt.classes.URLSearchParams,Object.assign({visitor:function(t,e,r,n){return yt.isNode&&G.isBuffer(t)?(this.append(e,t.toString("base64")),!1):n.defaultVisitor.apply(this,arguments)}},e))}(t,this.formSerializer).toString();if((i=G.isFileList(t))||r.indexOf("multipart/form-data")>-1){const e=this.env&&this.env.FormData;return et(i?{"files[]":t}:t,e&&new e,this.formSerializer)}}return o||n?(e.setContentType("application/json",!1),function(t,e,r){if(G.isString(t))try{return(e||JSON.parse)(t),G.trim(t)}catch(t){if("SyntaxError"!==t.name)throw t}return(r||JSON.stringify)(t)}(t)):t}],transformResponse:[function(t){const e=this.transitional||vt.transitional,r=e&&e.forcedJSONParsing,n="json"===this.responseType;if(G.isResponse(t)||G.isReadableStream(t))return t;if(t&&G.isString(t)&&(r&&!this.responseType||n)){const r=!(e&&e.silentJSONParsing)&&n;try{return JSON.parse(t)}catch(t){if(r){if("SyntaxError"===t.name)throw K.from(t,K.ERR_BAD_RESPONSE,this,null,this.response);throw t}}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:yt.classes.FormData,Blob:yt.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};G.forEach(["delete","get","head","post","put","patch"],(t=>{vt.headers[t]={}}));var _t=vt;const gt=G.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]);const mt=Symbol("internals");function wt(t){return t&&String(t).trim().toLowerCase()}function Ot(t){return!1===t||null==t?t:G.isArray(t)?t.map(Ot):String(t)}function jt(t,e,r,n,o){return G.isFunction(n)?n.call(this,e,r):(o&&(e=r),G.isString(e)?G.isString(n)?-1!==e.indexOf(n):G.isRegExp(n)?n.test(e):void 0:void 0)}class AxiosHeaders{constructor(t){t&&this.set(t)}set(t,e,r){const n=this;function o(t,e,r){const o=wt(e);if(!o)throw new Error("header name must be a non-empty string");const i=G.findKey(n,o);(!i||void 0===n[i]||!0===r||void 0===r&&!1!==n[i])&&(n[i||e]=Ot(t))}const i=(t,e)=>G.forEach(t,((t,r)=>o(t,r,e)));if(G.isPlainObject(t)||t instanceof this.constructor)i(t,e);else if(G.isString(t)&&(t=t.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(t.trim()))i((t=>{const e={};let r,n,o;return t&&t.split("\n").forEach((function(t){o=t.indexOf(":"),r=t.substring(0,o).trim().toLowerCase(),n=t.substring(o+1).trim(),!r||e[r]&&gt[r]||("set-cookie"===r?e[r]?e[r].push(n):e[r]=[n]:e[r]=e[r]?e[r]+", "+n:n)})),e})(t),e);else if(G.isHeaders(t))for(const[e,n]of t.entries())o(n,e,r);else null!=t&&o(e,t,r);return this}get(t,e){if(t=wt(t)){const r=G.findKey(this,t);if(r){const t=this[r];if(!e)return t;if(!0===e)return function(t){const e=Object.create(null),r=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let n;for(;n=r.exec(t);)e[n[1]]=n[2];return e}(t);if(G.isFunction(e))return e.call(this,t,r);if(G.isRegExp(e))return e.exec(t);throw new TypeError("parser must be boolean|regexp|function")}}}has(t,e){if(t=wt(t)){const r=G.findKey(this,t);return!(!r||void 0===this[r]||e&&!jt(0,this[r],r,e))}return!1}delete(t,e){const r=this;let n=!1;function o(t){if(t=wt(t)){const o=G.findKey(r,t);!o||e&&!jt(0,r[o],o,e)||(delete r[o],n=!0)}}return G.isArray(t)?t.forEach(o):o(t),n}clear(t){const e=Object.keys(this);let r=e.length,n=!1;for(;r--;){const o=e[r];t&&!jt(0,this[o],o,t,!0)||(delete this[o],n=!0)}return n}normalize(t){const e=this,r={};return G.forEach(this,((n,o)=>{const i=G.findKey(r,o);if(i)return e[i]=Ot(n),void delete e[o];const s=t?function(t){return t.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,((t,e,r)=>e.toUpperCase()+r))}(o):String(o).trim();s!==o&&delete e[o],e[s]=Ot(n),r[s]=!0})),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){const e=Object.create(null);return G.forEach(this,((r,n)=>{null!=r&&!1!==r&&(e[n]=t&&G.isArray(r)?r.join(", "):r)})),e}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map((([t,e])=>t+": "+e)).join("\n")}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...e){const r=new this(t);return e.forEach((t=>r.set(t))),r}static accessor(t){const e=(this[mt]=this[mt]={accessors:{}}).accessors,r=this.prototype;function n(t){const n=wt(t);e[n]||(!function(t,e){const r=G.toCamelCase(" "+e);["get","set","has"].forEach((n=>{Object.defineProperty(t,n+r,{value:function(t,r,o){return this[n].call(this,e,t,r,o)},configurable:!0})}))}(r,t),e[n]=!0)}return G.isArray(t)?t.forEach(n):n(t),this}}AxiosHeaders.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),G.reduceDescriptors(AxiosHeaders.prototype,(({value:t},e)=>{let r=e[0].toUpperCase()+e.slice(1);return{get:()=>t,set(t){this[r]=t}}})),G.freezeMethods(AxiosHeaders);var Pt=AxiosHeaders;function xt(t,e){const r=this||_t,n=e||r,o=Pt.from(n.headers);let i=n.data;return G.forEach(t,(function(t){i=t.call(r,i,o.normalize(),e?e.status:void 0)})),o.normalize(),i}function St(t){return!(!t||!t.__CANCEL__)}function Dt(t,e,r){K.call(this,null==t?"canceled":t,K.ERR_CANCELED,e,r),this.name="CanceledError"}function Mt(t,e,r){const n=r.config.validateStatus;r.status&&n&&!n(r.status)?e(new K("Request failed with status code "+r.status,[K.ERR_BAD_REQUEST,K.ERR_BAD_RESPONSE][Math.floor(r.status/100)-4],r.config,r.request,r)):t(r)}G.inherits(Dt,K,{__CANCEL__:!0});const Rt=(t,e,r=3)=>{let n=0;const o=function(t,e){t=t||10;const r=new Array(t),n=new Array(t);let o,i=0,s=0;return e=void 0!==e?e:1e3,function(a){const u=Date.now(),c=n[s];o||(o=u),r[i]=a,n[i]=u;let l=s,f=0;for(;l!==i;)f+=r[l++],l%=t;if(i=(i+1)%t,i===s&&(s=(s+1)%t),u-o<e)return;const p=c&&u-c;return p?Math.round(1e3*f/p):void 0}}(50,250);return function(t,e){let r,n,o=0,i=1e3/e;const s=(e,i=Date.now())=>{o=i,r=null,n&&(clearTimeout(n),n=null),t.apply(null,e)};return[(...t)=>{const e=Date.now(),a=e-o;a>=i?s(t,e):(r=t,n||(n=setTimeout((()=>{n=null,s(r)}),i-a)))},()=>r&&s(r)]}((r=>{const i=r.loaded,s=r.lengthComputable?r.total:void 0,a=i-n,u=o(a);n=i;t({loaded:i,total:s,progress:s?i/s:void 0,bytes:a,rate:u||void 0,estimated:u&&s&&i<=s?(s-i)/u:void 0,event:r,lengthComputable:null!=s,[e?"download":"upload"]:!0})}),r)},Et=(t,e)=>{const r=null!=t;return[n=>e[0]({lengthComputable:r,total:t,loaded:n}),e[1]]},Tt=t=>(...e)=>G.asap((()=>t(...e)));var kt=yt.hasStandardBrowserEnv?function(){const t=/(msie|trident)/i.test(navigator.userAgent),e=document.createElement("a");let r;function n(r){let n=r;return t&&(e.setAttribute("href",n),n=e.href),e.setAttribute("href",n),{href:e.href,protocol:e.protocol?e.protocol.replace(/:$/,""):"",host:e.host,search:e.search?e.search.replace(/^\?/,""):"",hash:e.hash?e.hash.replace(/^#/,""):"",hostname:e.hostname,port:e.port,pathname:"/"===e.pathname.charAt(0)?e.pathname:"/"+e.pathname}}return r=n(window.location.href),function(t){const e=G.isString(t)?n(t):t;return e.protocol===r.protocol&&e.host===r.host}}():function(){return!0},qt=yt.hasStandardBrowserEnv?{write(t,e,r,n,o,i){const s=[t+"="+encodeURIComponent(e)];G.isNumber(r)&&s.push("expires="+new Date(r).toGMTString()),G.isString(n)&&s.push("path="+n),G.isString(o)&&s.push("domain="+o),!0===i&&s.push("secure"),document.cookie=s.join("; ")},read(t){const e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove(t){this.write(t,"",Date.now()-864e5)}}:{write(){},read:()=>null,remove(){}};function At(t,e){return t&&!/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)?function(t,e){return e?t.replace(/\/?\/$/,"")+"/"+e.replace(/^\/+/,""):t}(t,e):e}const Bt=t=>t instanceof Pt?{...t}:t;function Ct(t,e){e=e||{};const r={};function n(t,e,r){return G.isPlainObject(t)&&G.isPlainObject(e)?G.merge.call({caseless:r},t,e):G.isPlainObject(e)?G.merge({},e):G.isArray(e)?e.slice():e}function o(t,e,r){return G.isUndefined(e)?G.isUndefined(t)?void 0:n(void 0,t,r):n(t,e,r)}function i(t,e){if(!G.isUndefined(e))return n(void 0,e)}function s(t,e){return G.isUndefined(e)?G.isUndefined(t)?void 0:n(void 0,t):n(void 0,e)}function a(r,o,i){return i in e?n(r,o):i in t?n(void 0,r):void 0}const u={url:i,method:i,data:i,baseURL:s,transformRequest:s,transformResponse:s,paramsSerializer:s,timeout:s,timeoutMessage:s,withCredentials:s,withXSRFToken:s,adapter:s,responseType:s,xsrfCookieName:s,xsrfHeaderName:s,onUploadProgress:s,onDownloadProgress:s,decompress:s,maxContentLength:s,maxBodyLength:s,beforeRedirect:s,transport:s,httpAgent:s,httpsAgent:s,cancelToken:s,socketPath:s,responseEncoding:s,validateStatus:a,headers:(t,e)=>o(Bt(t),Bt(e),!0)};return G.forEach(Object.keys(Object.assign({},t,e)),(function(n){const i=u[n]||o,s=i(t[n],e[n],n);G.isUndefined(s)&&i!==a||(r[n]=s)})),r}var Ft=t=>{const e=Ct({},t);let r,{data:n,withXSRFToken:o,xsrfHeaderName:i,xsrfCookieName:s,headers:a,auth:u}=e;if(e.headers=a=Pt.from(a),e.url=st(At(e.baseURL,e.url),t.params,t.paramsSerializer),u&&a.set("Authorization","Basic "+btoa((u.username||"")+":"+(u.password?unescape(encodeURIComponent(u.password)):""))),G.isFormData(n))if(yt.hasStandardBrowserEnv||yt.hasStandardBrowserWebWorkerEnv)a.setContentType(void 0);else if(!1!==(r=a.getContentType())){const[t,...e]=r?r.split(";").map((t=>t.trim())).filter(Boolean):[];a.setContentType([t||"multipart/form-data",...e].join("; "))}if(yt.hasStandardBrowserEnv&&(o&&G.isFunction(o)&&(o=o(e)),o||!1!==o&&kt(e.url))){const t=i&&s&&qt.read(s);t&&a.set(i,t)}return e};var Lt="undefined"!=typeof XMLHttpRequest&&function(t){return new Promise((function(e,r){const n=Ft(t);let o=n.data;const i=Pt.from(n.headers).normalize();let s,a,u,c,l,{responseType:f,onUploadProgress:p,onDownloadProgress:d}=n;function h(){c&&c(),l&&l(),n.cancelToken&&n.cancelToken.unsubscribe(s),n.signal&&n.signal.removeEventListener("abort",s)}let y=new XMLHttpRequest;function b(){if(!y)return;const n=Pt.from("getAllResponseHeaders"in y&&y.getAllResponseHeaders());Mt((function(t){e(t),h()}),(function(t){r(t),h()}),{data:f&&"text"!==f&&"json"!==f?y.response:y.responseText,status:y.status,statusText:y.statusText,headers:n,config:t,request:y}),y=null}y.open(n.method.toUpperCase(),n.url,!0),y.timeout=n.timeout,"onloadend"in y?y.onloadend=b:y.onreadystatechange=function(){y&&4===y.readyState&&(0!==y.status||y.responseURL&&0===y.responseURL.indexOf("file:"))&&setTimeout(b)},y.onabort=function(){y&&(r(new K("Request aborted",K.ECONNABORTED,t,y)),y=null)},y.onerror=function(){r(new K("Network Error",K.ERR_NETWORK,t,y)),y=null},y.ontimeout=function(){let e=n.timeout?"timeout of "+n.timeout+"ms exceeded":"timeout exceeded";const o=n.transitional||ut;n.timeoutErrorMessage&&(e=n.timeoutErrorMessage),r(new K(e,o.clarifyTimeoutError?K.ETIMEDOUT:K.ECONNABORTED,t,y)),y=null},void 0===o&&i.setContentType(null),"setRequestHeader"in y&&G.forEach(i.toJSON(),(function(t,e){y.setRequestHeader(e,t)})),G.isUndefined(n.withCredentials)||(y.withCredentials=!!n.withCredentials),f&&"json"!==f&&(y.responseType=n.responseType),d&&([u,l]=Rt(d,!0),y.addEventListener("progress",u)),p&&y.upload&&([a,c]=Rt(p),y.upload.addEventListener("progress",a),y.upload.addEventListener("loadend",c)),(n.cancelToken||n.signal)&&(s=e=>{y&&(r(!e||e.type?new Dt(null,t,y):e),y.abort(),y=null)},n.cancelToken&&n.cancelToken.subscribe(s),n.signal&&(n.signal.aborted?s():n.signal.addEventListener("abort",s)));const v=function(t){const e=/^([-+\w]{1,25})(:?\/\/|:)/.exec(t);return e&&e[1]||""}(n.url);v&&-1===yt.protocols.indexOf(v)?r(new K("Unsupported protocol "+v+":",K.ERR_BAD_REQUEST,t)):y.send(o||null)}))};var Ut=(t,e)=>{let r,n=new AbortController;const o=function(t){if(!r){r=!0,s();const e=t instanceof Error?t:this.reason;n.abort(e instanceof K?e:new Dt(e instanceof Error?e.message:e))}};let i=e&&setTimeout((()=>{o(new K(`timeout ${e} of ms exceeded`,K.ETIMEDOUT))}),e);const s=()=>{t&&(i&&clearTimeout(i),i=null,t.forEach((t=>{t&&(t.removeEventListener?t.removeEventListener("abort",o):t.unsubscribe(o))})),t=null)};t.forEach((t=>t&&t.addEventListener&&t.addEventListener("abort",o)));const{signal:a}=n;return a.unsubscribe=s,[a,()=>{i&&clearTimeout(i),i=null}]};const Nt=function*(t,e){let r=t.byteLength;if(!e||r<e)return void(yield t);let n,o=0;for(;o<r;)n=o+e,yield t.slice(o,n),o=n},It=(t,e,r,n,o)=>{const i=async function*(t,e,r){for await(const n of t)yield*Nt(ArrayBuffer.isView(n)?n:await r(String(n)),e)}(t,e,o);let s,a=0,u=t=>{s||(s=!0,n&&n(t))};return new ReadableStream({async pull(t){try{const{done:e,value:n}=await i.next();if(e)return u(),void t.close();let o=n.byteLength;if(r){let t=a+=o;r(t)}t.enqueue(new Uint8Array(n))}catch(t){throw u(t),t}},cancel:t=>(u(t),i.return())},{highWaterMark:2})},Wt="function"==typeof fetch&&"function"==typeof Request&&"function"==typeof Response,Ht=Wt&&"function"==typeof ReadableStream,Vt=Wt&&("function"==typeof TextEncoder?(zt=new TextEncoder,t=>zt.encode(t)):async t=>new Uint8Array(await new Response(t).arrayBuffer()));var zt;const Jt=(t,...e)=>{try{return!!t(...e)}catch(t){return!1}},Gt=Ht&&Jt((()=>{let t=!1;const e=new Request(yt.origin,{body:new ReadableStream,method:"POST",get duplex(){return t=!0,"half"}}).headers.has("Content-Type");return t&&!e})),Kt=Ht&&Jt((()=>G.isReadableStream(new Response("").body))),$t={stream:Kt&&(t=>t.body)};var Qt;Wt&&(Qt=new Response,["text","arrayBuffer","blob","formData","stream"].forEach((t=>{!$t[t]&&($t[t]=G.isFunction(Qt[t])?e=>e[t]():(e,r)=>{throw new K(`Response type '${t}' is not supported`,K.ERR_NOT_SUPPORT,r)})})));const Xt=async(t,e)=>{const r=G.toFiniteNumber(t.getContentLength());return null==r?(async t=>null==t?0:G.isBlob(t)?t.size:G.isSpecCompliantForm(t)?(await new Request(t).arrayBuffer()).byteLength:G.isArrayBufferView(t)||G.isArrayBuffer(t)?t.byteLength:(G.isURLSearchParams(t)&&(t+=""),G.isString(t)?(await Vt(t)).byteLength:void 0))(e):r};const Yt={http:null,xhr:Lt,fetch:Wt&&(async t=>{let{url:e,method:r,data:n,signal:o,cancelToken:i,timeout:s,onDownloadProgress:a,onUploadProgress:u,responseType:c,headers:l,withCredentials:f="same-origin",fetchOptions:p}=Ft(t);c=c?(c+"").toLowerCase():"text";let d,h,[y,b]=o||i||s?Ut([o,i],s):[];const v=()=>{!d&&setTimeout((()=>{y&&y.unsubscribe()})),d=!0};let _;try{if(u&&Gt&&"get"!==r&&"head"!==r&&0!==(_=await Xt(l,n))){let t,r=new Request(e,{method:"POST",body:n,duplex:"half"});if(G.isFormData(n)&&(t=r.headers.get("content-type"))&&l.setContentType(t),r.body){const[t,e]=Et(_,Rt(Tt(u)));n=It(r.body,65536,t,e,Vt)}}G.isString(f)||(f=f?"include":"omit"),h=new Request(e,{...p,signal:y,method:r.toUpperCase(),headers:l.normalize().toJSON(),body:n,duplex:"half",credentials:f});let o=await fetch(h);const i=Kt&&("stream"===c||"response"===c);if(Kt&&(a||i)){const t={};["status","statusText","headers"].forEach((e=>{t[e]=o[e]}));const e=G.toFiniteNumber(o.headers.get("content-length")),[r,n]=a&&Et(e,Rt(Tt(a),!0))||[];o=new Response(It(o.body,65536,r,(()=>{n&&n(),i&&v()}),Vt),t)}c=c||"text";let s=await $t[G.findKey($t,c)||"text"](o,t);return!i&&v(),b&&b(),await new Promise(((e,r)=>{Mt(e,r,{data:s,headers:Pt.from(o.headers),status:o.status,statusText:o.statusText,config:t,request:h})}))}catch(e){if(v(),e&&"TypeError"===e.name&&/fetch/i.test(e.message))throw Object.assign(new K("Network Error",K.ERR_NETWORK,t,h),{cause:e.cause||e});throw K.from(e,e&&e.code,t,h)}})};G.forEach(Yt,((t,e)=>{if(t){try{Object.defineProperty(t,"name",{value:e})}catch(t){}Object.defineProperty(t,"adapterName",{value:e})}}));const Zt=t=>`- ${t}`,te=t=>G.isFunction(t)||null===t||!1===t;var ee=t=>{t=G.isArray(t)?t:[t];const{length:e}=t;let r,n;const o={};for(let i=0;i<e;i++){let e;if(r=t[i],n=r,!te(r)&&(n=Yt[(e=String(r)).toLowerCase()],void 0===n))throw new K(`Unknown adapter '${e}'`);if(n)break;o[e||"#"+i]=n}if(!n){const t=Object.entries(o).map((([t,e])=>`adapter ${t} `+(!1===e?"is not supported by the environment":"is not available in the build")));throw new K("There is no suitable adapter to dispatch the request "+(e?t.length>1?"since :\n"+t.map(Zt).join("\n"):" "+Zt(t[0]):"as no adapter specified"),"ERR_NOT_SUPPORT")}return n};function re(t){if(t.cancelToken&&t.cancelToken.throwIfRequested(),t.signal&&t.signal.aborted)throw new Dt(null,t)}function ne(t){re(t),t.headers=Pt.from(t.headers),t.data=xt.call(t,t.transformRequest),-1!==["post","put","patch"].indexOf(t.method)&&t.headers.setContentType("application/x-www-form-urlencoded",!1);return ee(t.adapter||_t.adapter)(t).then((function(e){return re(t),e.data=xt.call(t,t.transformResponse,e),e.headers=Pt.from(e.headers),e}),(function(e){return St(e)||(re(t),e&&e.response&&(e.response.data=xt.call(t,t.transformResponse,e.response),e.response.headers=Pt.from(e.response.headers))),Promise.reject(e)}))}const oe="1.7.4",ie={};["object","boolean","number","function","string","symbol"].forEach(((t,e)=>{ie[t]=function(r){return typeof r===t||"a"+(e<1?"n ":" ")+t}}));const se={};ie.transitional=function(t,e,r){function n(t,e){return"[Axios v1.7.4] Transitional option '"+t+"'"+e+(r?". "+r:"")}return(r,o,i)=>{if(!1===t)throw new K(n(o," has been removed"+(e?" in "+e:"")),K.ERR_DEPRECATED);return e&&!se[o]&&(se[o]=!0,console.warn(n(o," has been deprecated since v"+e+" and will be removed in the near future"))),!t||t(r,o,i)}};var ae={assertOptions:function(t,e,r){if("object"!=typeof t)throw new K("options must be an object",K.ERR_BAD_OPTION_VALUE);const n=Object.keys(t);let o=n.length;for(;o-- >0;){const i=n[o],s=e[i];if(s){const e=t[i],r=void 0===e||s(e,i,t);if(!0!==r)throw new K("option "+i+" must be "+r,K.ERR_BAD_OPTION_VALUE)}else if(!0!==r)throw new K("Unknown option "+i,K.ERR_BAD_OPTION)}},validators:ie};const ue=ae.validators;class Axios{constructor(t){this.defaults=t,this.interceptors={request:new at,response:new at}}async request(t,e){try{return await this._request(t,e)}catch(t){if(t instanceof Error){let e;Error.captureStackTrace?Error.captureStackTrace(e={}):e=new Error;const r=e.stack?e.stack.replace(/^.+\n/,""):"";try{t.stack?r&&!String(t.stack).endsWith(r.replace(/^.+\n.+\n/,""))&&(t.stack+="\n"+r):t.stack=r}catch(t){}}throw t}}_request(t,e){"string"==typeof t?(e=e||{}).url=t:e=t||{},e=Ct(this.defaults,e);const{transitional:r,paramsSerializer:n,headers:o}=e;void 0!==r&&ae.assertOptions(r,{silentJSONParsing:ue.transitional(ue.boolean),forcedJSONParsing:ue.transitional(ue.boolean),clarifyTimeoutError:ue.transitional(ue.boolean)},!1),null!=n&&(G.isFunction(n)?e.paramsSerializer={serialize:n}:ae.assertOptions(n,{encode:ue.function,serialize:ue.function},!0)),e.method=(e.method||this.defaults.method||"get").toLowerCase();let i=o&&G.merge(o.common,o[e.method]);o&&G.forEach(["delete","get","head","post","put","patch","common"],(t=>{delete o[t]})),e.headers=Pt.concat(i,o);const s=[];let a=!0;this.interceptors.request.forEach((function(t){"function"==typeof t.runWhen&&!1===t.runWhen(e)||(a=a&&t.synchronous,s.unshift(t.fulfilled,t.rejected))}));const u=[];let c;this.interceptors.response.forEach((function(t){u.push(t.fulfilled,t.rejected)}));let l,f=0;if(!a){const t=[ne.bind(this),void 0];for(t.unshift.apply(t,s),t.push.apply(t,u),l=t.length,c=Promise.resolve(e);f<l;)c=c.then(t[f++],t[f++]);return c}l=s.length;let p=e;for(f=0;f<l;){const t=s[f++],e=s[f++];try{p=t(p)}catch(t){e.call(this,t);break}}try{c=ne.call(this,p)}catch(t){return Promise.reject(t)}for(f=0,l=u.length;f<l;)c=c.then(u[f++],u[f++]);return c}getUri(t){return st(At((t=Ct(this.defaults,t)).baseURL,t.url),t.params,t.paramsSerializer)}}G.forEach(["delete","get","head","options"],(function(t){Axios.prototype[t]=function(e,r){return this.request(Ct(r||{},{method:t,url:e,data:(r||{}).data}))}})),G.forEach(["post","put","patch"],(function(t){function e(e){return function(r,n,o){return this.request(Ct(o||{},{method:t,headers:e?{"Content-Type":"multipart/form-data"}:{},url:r,data:n}))}}Axios.prototype[t]=e(),Axios.prototype[t+"Form"]=e(!0)}));var ce=Axios;class CancelToken{constructor(t){if("function"!=typeof t)throw new TypeError("executor must be a function.");let e;this.promise=new Promise((function(t){e=t}));const r=this;this.promise.then((t=>{if(!r._listeners)return;let e=r._listeners.length;for(;e-- >0;)r._listeners[e](t);r._listeners=null})),this.promise.then=t=>{let e;const n=new Promise((t=>{r.subscribe(t),e=t})).then(t);return n.cancel=function(){r.unsubscribe(e)},n},t((function(t,n,o){r.reason||(r.reason=new Dt(t,n,o),e(r.reason))}))}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){this.reason?t(this.reason):this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const e=this._listeners.indexOf(t);-1!==e&&this._listeners.splice(e,1)}static source(){let t;return{token:new CancelToken((function(e){t=e})),cancel:t}}}var le=CancelToken;const fe={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(fe).forEach((([t,e])=>{fe[e]=t}));var pe=fe;const de=function t(e){const r=new ce(e),o=n(ce.prototype.request,r);return G.extend(o,ce.prototype,r,{allOwnKeys:!0}),G.extend(o,r,null,{allOwnKeys:!0}),o.create=function(r){return t(Ct(e,r))},o}(_t);de.Axios=ce,de.CanceledError=Dt,de.CancelToken=le,de.isCancel=St,de.VERSION=oe,de.toFormData=et,de.AxiosError=K,de.Cancel=de.CanceledError,de.all=function(t){return Promise.all(t)},de.spread=function(t){return function(e){return t.apply(null,e)}},de.isAxiosError=function(t){return G.isObject(t)&&!0===t.isAxiosError},de.mergeConfig=Ct,de.AxiosHeaders=Pt,de.formToJSON=t=>bt(G.isHTMLForm(t)?new FormData(t):t),de.getAdapter=ee,de.HttpStatusCode=pe,de.default=de,t.exports=de}},e={};function r(n){var o=e[n];if(void 0!==o)return o.exports;var i=e[n]={id:n,loaded:!1,exports:{}};return t[n].call(i.exports,i,i.exports,r),i.loaded=!0,i.exports}return r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),r.nmd=t=>(t.paths=[],t.children||(t.children=[]),t),r(439)})()));
3
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,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Z0IsRUFBQSxNQUFBNEYsR0FDQSthLEVBQUEzZ0IsRUFBQSxNQUFBNEYsR0FDQSthLEVBQUEzZ0IsRUFBQSxNQUFBNEYsR0FDQSthLEVBQUEzZ0IsRUFBQSxNQUFBNEYsR0FDQSthLEVBQUEzZ0IsRUFBQSxNQUFBNEYsR0FDQSthLEVBQUEzZ0IsRUFBQSxLQUFBNEYsR0FDQSthLEVBQUEzZ0IsRUFBQSxLQUFBNEYsR0FDQSthLEVBQUEzZ0IsRUFBQSxNQUFBNEYsR0FDQSthLEVBQUEzZ0IsRUFBQSxHQUFBNEYsR0FDQSthLEVBQUEzZ0IsRUFBQSxNQUFBNEYsR0FDQSthLEVBQUEzZ0IsRUFBQSxNQUFBNEYsR0FDQSthLEVBQUEzZ0IsRUFBQSxNQUFBNEYsR0FDQSthLEVBQUEzZ0IsRUFBQSxNQUFBNEYsR0FDQSthLEVBQUEzZ0IsRUFBQSxLQUFBNEYsR0FDQSthLEVBQUEzZ0IsRUFBQSxNQUFBNEYsczRCQ2RBK2EsRUFBQTNnQixFQUFBLE1BQUE0RixHQUNBK2EsRUFBQTNnQixFQUFBLEtBQUE0RixHQUNBK2EsRUFBQTNnQixFQUFBLE1BQUE0RixHQUNBK2EsRUFBQTNnQixFQUFBLE1BQUE0RixHQUNBK2EsRUFBQTNnQixFQUFBLE1BQUE0Rix1NEJDSkErYSxFQUFBM2dCLEVBQUEsTUFBQTRGLEdBQ0ErYSxFQUFBM2dCLEVBQUEsTUFBQTRGLEdBQ0ErYSxFQUFBM2dCLEVBQUEsTUFBQTRGLEdBQ0ErYSxFQUFBM2dCLEVBQUEsTUFBQTRGLEdBQ0ErYSxFQUFBM2dCLEVBQUEsTUFBQTRGLHVsQkNKQSthLEVBQUEzZ0IsRUFBQSxNQUFBNEYsdWxCQ0FBK2EsRUFBQTNnQixFQUFBLE1BQUE0RixxbEJDQUErYSxFQUFBM2dCLEVBQUEsTUFBQTRGLHVsQkNBQSthLEVBQUEzZ0IsRUFBQSxNQUFBNEYsbXFCQ0FBK2EsRUFBQTNnQixFQUFBLE1BQUE0RixHQUNBK2EsRUFBQTNnQixFQUFBLE1BQUE0RixzbEJDREErYSxFQUFBM2dCLEVBQUEsTUFBQTRGLHVsQkNBQSthLEVBQUEzZ0IsRUFBQSxNQUFBNEYsdWxC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RTVCLElBQUlDLEVBQWVILEVBQXlCRSxHQUM1QyxRQUFxQjl4QixJQUFqQit4QixFQUNILE9BQU9BLEVBQWFqbEMsUUFHckIsSUFBSStQLEVBQVMrMEIsRUFBeUJFLEdBQVksQ0FDakR0akMsR0FBSXNqQyxFQUNKelMsUUFBUSxFQUNSdnlCLFFBQVMsQ0FBQyxHQVVYLE9BTkFrbEMsRUFBb0JGLEdBQVVya0MsS0FBS29QLEVBQU8vUCxRQUFTK1AsRUFBUUEsRUFBTy9QLFFBQVMra0MsR0FHM0VoMUIsRUFBT3dpQixRQUFTLEVBR1R4aUIsRUFBTy9QLE9BQ2YsUUN6QkEra0MsRUFBb0J6cEIsRUFBSSxXQUN2QixHQUEwQixpQkFBZnVFLFdBQXlCLE9BQU9BLFdBQzNDLElBQ0MsT0FBTzltQixNQUFRLElBQUlvc0MsU0FBUyxjQUFiLEVBQ2hCLENBQUUsTUFBTy9ZLEdBQ1IsR0FBc0IsaUJBQVg1USxPQUFxQixPQUFPQSxNQUN4QyxDQUNBLENBUHVCLEdDQXhCdXBCLEVBQW9CSyxJQUFPcjFCLElBQzFCQSxFQUFPczFCLE1BQVEsR0FDVnQxQixFQUFPdTFCLFdBQVV2MUIsRUFBT3UxQixTQUFXLElBQ2pDdjFCLEdDQWtCZzFCLEVBQW9CIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL0RvbWFpbnMvZG9tYWluLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9Eb21haW5zL2RvbWFpbnNDbGllbnQudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL0RvbWFpbnMvZG9tYWluc0NyZWRlbnRpYWxzLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9Eb21haW5zL2RvbWFpbnNUYWdzLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9Eb21haW5zL2RvbWFpbnNUZW1wbGF0ZXMudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL0V2ZW50cy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvSVBQb29scy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvSVBzLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9JbmJveFBsYWNlbWVudHMvQXR0cmlidXRlc0NsaWVudC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvSW5ib3hQbGFjZW1lbnRzL0ZpbHRlcnNDbGllbnQudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL0luYm94UGxhY2VtZW50cy9SZXN1bHRzL0luYm94UGxhY2VtZW50c1Jlc3VsdHNDbGllbnQudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL0luYm94UGxhY2VtZW50cy9SZXN1bHRzL0luYm94UGxhY2VtZW50c1Jlc3VsdHNTaGFyaW5nQ2xpZW50LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9JbmJveFBsYWNlbWVudHMvU2VlZHNMaXN0cy9TZWVkc0xpc3RzQ2xpZW50LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9JbmJveFBsYWNlbWVudHMvaW5ib3hQbGFjZW1lbnRzLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9JbmJveFBsYWNlbWVudHMvcHJvdmlkZXJzL0luYm94UGxhY2VtZW50c1Byb3ZpZGVycy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvTWFpbGd1bkNsaWVudC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvTWFpbGluZ0xpc3RzL21haWxMaXN0TWVtYmVycy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvTWFpbGluZ0xpc3RzL21haWxpbmdMaXN0cy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvTWVzc2FnZXMudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL1JvdXRlcy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvU3RhdHMvU3RhdHNDbGllbnQudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL1N0YXRzL1N0YXRzQ29udGFpbmVyLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9TdWJhY2NvdW50cy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvU3VwcHJlc3Npb25zL0JvdW5jZS50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvU3VwcHJlc3Npb25zL0NvbXBsYWludC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvU3VwcHJlc3Npb25zL1N1cHByZXNzaW9uLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9TdXBwcmVzc2lvbnMvU3VwcHJlc3Npb25zQ2xpZW50LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9TdXBwcmVzc2lvbnMvVW5zdWJzY3JpYmUudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL1N1cHByZXNzaW9ucy9XaGl0ZUxpc3QudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL1ZhbGlkYXRpb25zL211bHRpcGxlVmFsaWRhdGlvbi50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0NsYXNzZXMvVmFsaWRhdGlvbnMvdmFsaWRhdGUudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL1dlYmhvb2tzLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9jb21tb24vQXR0YWNobWVudHNIYW5kbGVyLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9jb21tb24vRXJyb3IudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL2NvbW1vbi9Gb3JtRGF0YUJ1aWxkZXIudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9DbGFzc2VzL2NvbW1vbi9OYXZpZ2F0aW9uVGhydVBhZ2VzLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvQ2xhc3Nlcy9jb21tb24vUmVxdWVzdC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0VudW1zL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvSW50ZXJmYWNlcy9Db21tb24vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9JbnRlcmZhY2VzL0RvbWFpbnMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9JbnRlcmZhY2VzL0V2ZW50Q2xpZW50L2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvSW50ZXJmYWNlcy9JUFBvb2xzL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvSW50ZXJmYWNlcy9JUHMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9JbnRlcmZhY2VzL0luYm94UGxhY2VtZW50cy9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0ludGVyZmFjZXMvTWFpbGd1bkNsaWVudC9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0ludGVyZmFjZXMvTWFpbGluZ0xpc3RzL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvSW50ZXJmYWNlcy9NZXNzYWdlcy9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0ludGVyZmFjZXMvUm91dGVzL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvSW50ZXJmYWNlcy9TdGF0cy9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0ludGVyZmFjZXMvU3ViYWNjb3VudHMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9JbnRlcmZhY2VzL1N1cHByZXNzaW9ucy9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL0ludGVyZmFjZXMvVmFsaWRhdGlvbnMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9JbnRlcmZhY2VzL1dlYmhvb2tzL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvSW50ZXJmYWNlcy9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL1R5cGVzL0NvbW1vbi9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL1R5cGVzL0RvbWFpbnMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9UeXBlcy9FdmVudHMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9UeXBlcy9JUFBvb2xzL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvVHlwZXMvSVBzL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvVHlwZXMvTWFpbGd1bkNsaWVudC9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL1R5cGVzL01haWxpbmdMaXN0cy9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL1R5cGVzL01lc3NhZ2VzL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvVHlwZXMvUm91dGVzL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvVHlwZXMvU3RhdHMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9UeXBlcy9TdWJhY2NvdW50cy9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL1R5cGVzL1N1cHByZXNzaW9ucy9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL1R5cGVzL1ZhbGlkYXRpb25zL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvVHlwZXMvV2ViaG9va3MvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9UeXBlcy9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9ub2RlX21vZHVsZXMvYmFzZS02NC9iYXNlNjQuanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL25vZGVfbW9kdWxlcy91cmwtam9pbi9saWIvdXJsLWpvaW4uanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL25vZGVfbW9kdWxlcy9heGlvcy9kaXN0L2Jyb3dzZXIvYXhpb3MuY2pzIiwid2VicGFjazovL21haWxndW4uanMvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy93ZWJwYWNrL3J1bnRpbWUvZ2xvYmFsIiwid2VicGFjazovL21haWxndW4uanMvd2VicGFjay9ydW50aW1lL25vZGUgbW9kdWxlIGRlY29yYXRvciIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzL3dlYnBhY2svc3RhcnR1cCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBETlNSZWNvcmQsXG4gIERvbWFpbkRhdGEsXG4gIERvbWFpblNob3J0RGF0YSxcbiAgVERvbWFpblxufSBmcm9tICcuLi8uLi9UeXBlcy9Eb21haW5zJztcblxuLyogZXNsaW50LWRpc2FibGUgY2FtZWxjYXNlICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb21haW4gaW1wbGVtZW50cyBURG9tYWluIHtcbiAgbmFtZTogc3RyaW5nO1xuICByZXF1aXJlX3RsczogYm9vbGVhbjtcbiAgc2tpcF92ZXJpZmljYXRpb246IGJvb2xlYW47XG4gIHN0YXRlOiBzdHJpbmc7XG4gIHdpbGRjYXJkOiBib29sZWFuO1xuICBzcGFtX2FjdGlvbjogc3RyaW5nO1xuICBjcmVhdGVkX2F0OiBzdHJpbmc7XG4gIHNtdHBfcGFzc3dvcmQ6IHN0cmluZztcbiAgc210cF9sb2dpbjogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIHJlY2VpdmluZ19kbnNfcmVjb3JkczogRE5TUmVjb3JkW10gfCBudWxsO1xuICBzZW5kaW5nX2Ruc19yZWNvcmRzOiBETlNSZWNvcmRbXSB8IG51bGw7XG4gIGlkPzogc3RyaW5nO1xuICBpc19kaXNhYmxlZD86IGJvb2xlYW47XG4gIHdlYl9wcmVmaXg/OiBzdHJpbmc7XG4gIHdlYl9zY2hlbWU/OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgZGF0YTogRG9tYWluU2hvcnREYXRhIHwgRG9tYWluRGF0YSxcbiAgICByZWNlaXZpbmc/OiBETlNSZWNvcmRbXSB8IG51bGwsXG4gICAgc2VuZGluZz86IEROU1JlY29yZFtdIHwgbnVsbFxuICApIHtcbiAgICB0aGlzLm5hbWUgPSBkYXRhLm5hbWU7XG4gICAgdGhpcy5yZXF1aXJlX3RscyA9IGRhdGEucmVxdWlyZV90bHM7XG4gICAgdGhpcy5za2lwX3ZlcmlmaWNhdGlvbiA9IGRhdGEuc2tpcF92ZXJpZmljYXRpb247XG4gICAgdGhpcy5zdGF0ZSA9IGRhdGEuc3RhdGU7XG4gICAgdGhpcy53aWxkY2FyZCA9IGRhdGEud2lsZGNhcmQ7XG4gICAgdGhpcy5zcGFtX2FjdGlvbiA9IGRhdGEuc3BhbV9hY3Rpb247XG4gICAgdGhpcy5jcmVhdGVkX2F0ID0gZGF0YS5jcmVhdGVkX2F0O1xuICAgIHRoaXMuc210cF9wYXNzd29yZCA9IGRhdGEuc210cF9wYXNzd29yZDtcbiAgICB0aGlzLnNtdHBfbG9naW4gPSBkYXRhLnNtdHBfbG9naW47XG4gICAgdGhpcy50eXBlID0gZGF0YS50eXBlO1xuICAgIHRoaXMucmVjZWl2aW5nX2Ruc19yZWNvcmRzID0gcmVjZWl2aW5nIHx8IG51bGw7XG4gICAgdGhpcy5zZW5kaW5nX2Ruc19yZWNvcmRzID0gc2VuZGluZyB8fCBudWxsO1xuICAgIC8qXG4gICAgICBkb21haW4gbGlzdCBoYXMgc2hvcnRlciByZXNwb25zZSB0aGVuIGdldCwgY3JlYXRlLCBhbmQgdXBkYXRlIG1ldGhvZHMuXG4gICAgKi9cblxuICAgIGNvbnN0IGR5bmFtaWNLZXlzOiAoa2V5b2YgRG9tYWluRGF0YSlbXSA9IFsnaWQnLCAnaXNfZGlzYWJsZWQnLCAnd2ViX3ByZWZpeCcsICd3ZWJfc2NoZW1lJ107XG5cbiAgICBjb25zdCBkeW5hbWljUHJvcGVydGllcyA9IGR5bmFtaWNLZXlzLnJlZHVjZSgoYWNjLCBwcm9wZXJ0eU5hbWUpID0+IHtcbiAgICAgIGlmIChwcm9wZXJ0eU5hbWUgaW4gZGF0YSkge1xuICAgICAgICBjb25zdCBwcm9wID0gcHJvcGVydHlOYW1lIGFzIGtleW9mIERvbWFpbjtcbiAgICAgICAgYWNjW3Byb3BdID0gKGRhdGEgYXMgRG9tYWluRGF0YSlbcHJvcGVydHlOYW1lXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30gYXMgUmVjb3JkPGtleW9mIERvbWFpbiwgc3RyaW5nIHwgYm9vbGVhbj4pO1xuICAgIE9iamVjdC5hc3NpZ24odGhpcywgZHluYW1pY1Byb3BlcnRpZXMpO1xuICB9XG59XG4iLCJpbXBvcnQgdXJsam9pbiBmcm9tICd1cmwtam9pbic7XG5pbXBvcnQge1xuICBJRG9tYWluVGVtcGxhdGVzQ2xpZW50LFxuICBJRG9tYWluVGFnc0NsaWVudCxcbiAgSURvbWFpbkNyZWRlbnRpYWxzLFxuICBJRG9tYWluc0NsaWVudFxufSBmcm9tICcuLi8uLi9JbnRlcmZhY2VzL0RvbWFpbnMnO1xuXG5pbXBvcnQgeyBBUElSZXNwb25zZSB9IGZyb20gJy4uLy4uL1R5cGVzL0NvbW1vbi9BcGlSZXNwb25zZSc7XG5pbXBvcnQgQVBJRXJyb3IgZnJvbSAnLi4vY29tbW9uL0Vycm9yJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4uL2NvbW1vbi9SZXF1ZXN0JztcblxuaW1wb3J0IERvbWFpbkNyZWRlbnRpYWxzQ2xpZW50IGZyb20gJy4vZG9tYWluc0NyZWRlbnRpYWxzJztcbmltcG9ydCBEb21haW5UZW1wbGF0ZXNDbGllbnQgZnJvbSAnLi9kb21haW5zVGVtcGxhdGVzJztcbmltcG9ydCBEb21haW5UYWdzQ2xpZW50IGZyb20gJy4vZG9tYWluc1RhZ3MnO1xuaW1wb3J0IHtcbiAgRGVzdHJveWVkRG9tYWluUmVzcG9uc2UsXG4gIE1lc3NhZ2VSZXNwb25zZSxcbiAgRG9tYWluTGlzdFJlc3BvbnNlRGF0YSxcbiAgRG9tYWluUmVzcG9uc2VEYXRhLFxuICBEb21haW5UcmFja2luZ1Jlc3BvbnNlLFxuICBEb21haW5UcmFja2luZ0RhdGEsXG4gIFVwZGF0ZURvbWFpblRyYWNraW5nUmVzcG9uc2UsXG4gIFVwZGF0ZWRPcGVuVHJhY2tpbmcsXG4gIERvbWFpbnNRdWVyeSxcbiAgRG9tYWluSW5mbyxcbiAgQ29ubmVjdGlvblNldHRpbmdzLFxuICBDb25uZWN0aW9uU2V0dGluZ3NSZXNwb25zZSxcbiAgVXBkYXRlZENvbm5lY3Rpb25TZXR0aW5ncyxcbiAgVXBkYXRlZENvbm5lY3Rpb25TZXR0aW5nc1JlcyxcbiAgT3BlblRyYWNraW5nSW5mbyxcbiAgQ2xpY2tUcmFja2luZ0luZm8sXG4gIFVuc3Vic2NyaWJlVHJhY2tpbmdJbmZvLFxuICBSZXBsYWNlbWVudEZvclBvb2wsXG4gIERLSU1BdXRob3JpdHlJbmZvLFxuICBVcGRhdGVkREtJTUF1dGhvcml0eSxcbiAgVXBkYXRlZERLSU1BdXRob3JpdHlSZXNwb25zZSxcbiAgREtJTVNlbGVjdG9ySW5mbyxcbiAgVXBkYXRlZERLSU1TZWxlY3RvclJlc3BvbnNlLFxuICBXZWJQcmVmaXhJbmZvLFxuICBVcGRhdGVkV2ViUHJlZml4UmVzcG9uc2UsXG4gIFREb21haW4sXG4gIERvbWFpblVwZGF0ZUluZm8sXG4gIERvbWFpblVwZGF0ZUluZm9SZXEsXG4gIERvbWFpbkluZm9SZXEsXG4gIEJvb2xUb1N0cmluZyxcbn0gZnJvbSAnLi4vLi4vVHlwZXMvRG9tYWlucyc7XG5pbXBvcnQgRG9tYWluIGZyb20gJy4vZG9tYWluJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRG9tYWluc0NsaWVudCBpbXBsZW1lbnRzIElEb21haW5zQ2xpZW50IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcbiAgcHVibGljIGRvbWFpbkNyZWRlbnRpYWxzOiBJRG9tYWluQ3JlZGVudGlhbHM7XG4gIHB1YmxpYyBkb21haW5UZW1wbGF0ZXM6IElEb21haW5UZW1wbGF0ZXNDbGllbnQ7XG4gIHB1YmxpYyBkb21haW5UYWdzOiBJRG9tYWluVGFnc0NsaWVudDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICByZXF1ZXN0OiBSZXF1ZXN0LFxuICAgIGRvbWFpbkNyZWRlbnRpYWxzQ2xpZW50OiBEb21haW5DcmVkZW50aWFsc0NsaWVudCxcbiAgICBkb21haW5UZW1wbGF0ZXNDbGllbnQ6IERvbWFpblRlbXBsYXRlc0NsaWVudCxcbiAgICBkb21haW5UYWdzQ2xpZW50OiBEb21haW5UYWdzQ2xpZW50XG4gICkge1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgdGhpcy5kb21haW5DcmVkZW50aWFscyA9IGRvbWFpbkNyZWRlbnRpYWxzQ2xpZW50O1xuICAgIHRoaXMuZG9tYWluVGVtcGxhdGVzID0gZG9tYWluVGVtcGxhdGVzQ2xpZW50O1xuICAgIHRoaXMuZG9tYWluVGFncyA9IGRvbWFpblRhZ3NDbGllbnQ7XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVCb29sVmFsdWVzKFxuICAgIGRhdGE6IERvbWFpbkluZm8gfCBEb21haW5VcGRhdGVJbmZvXG4gICk6IERvbWFpbkluZm9SZXEgfCBEb21haW5VcGRhdGVJbmZvUmVxIHtcbiAgICBjb25zdCBwcm9wc0ZvclJlcGxhY2VtZW50ID0gZGF0YSBhcyBCb29sVG9TdHJpbmc7XG4gICAgY29uc3QgcmVwbGFjZWRQcm9wcyA9IE9iamVjdC5rZXlzKHByb3BzRm9yUmVwbGFjZW1lbnQpLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICAgIGNvbnN0IHByb3AgPSBrZXkgYXMga2V5b2YgQm9vbFRvU3RyaW5nO1xuICAgICAgaWYgKHR5cGVvZiBwcm9wc0ZvclJlcGxhY2VtZW50W3Byb3BdID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBwcm9wc0ZvclJlcGxhY2VtZW50W3Byb3BdIGFzIGJvb2xlYW47XG4gICAgICAgIGFjY1twcm9wXSA9ICh2YWx1ZS50b1N0cmluZygpID09PSAndHJ1ZScpID8gJ3RydWUnIDogJ2ZhbHNlJztcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30gYXMgUmVjb3JkPGtleW9mIEJvb2xUb1N0cmluZywgJ3RydWUnfCAnZmFsc2UnPik7XG4gICAgcmV0dXJuIHsgLi4uZGF0YSwgLi4ucmVwbGFjZWRQcm9wcyB9IGFzIERvbWFpblVwZGF0ZUluZm9SZXEgfCBEb21haW5JbmZvUmVxO1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFyc2VNZXNzYWdlKHJlc3BvbnNlOiBEZXN0cm95ZWREb21haW5SZXNwb25zZSkgOiBNZXNzYWdlUmVzcG9uc2Uge1xuICAgIHJldHVybiByZXNwb25zZS5ib2R5O1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZURvbWFpbkxpc3QocmVzcG9uc2U6IERvbWFpbkxpc3RSZXNwb25zZURhdGEpOiBURG9tYWluW10ge1xuICAgIGlmIChyZXNwb25zZS5ib2R5ICYmIHJlc3BvbnNlLmJvZHkuaXRlbXMpIHtcbiAgICAgIHJldHVybiByZXNwb25zZS5ib2R5Lml0ZW1zLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICByZXR1cm4gbmV3IERvbWFpbihpdGVtKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH1cblxuICBwcml2YXRlIF9wYXJzZURvbWFpbihyZXNwb25zZTogRG9tYWluUmVzcG9uc2VEYXRhKTogVERvbWFpbiB7XG4gICAgcmV0dXJuIG5ldyBEb21haW4oXG4gICAgICByZXNwb25zZS5ib2R5LmRvbWFpbixcbiAgICAgIHJlc3BvbnNlLmJvZHkucmVjZWl2aW5nX2Ruc19yZWNvcmRzLFxuICAgICAgcmVzcG9uc2UuYm9keS5zZW5kaW5nX2Ruc19yZWNvcmRzXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX3BhcnNlVHJhY2tpbmdTZXR0aW5ncyhyZXNwb25zZTogRG9tYWluVHJhY2tpbmdSZXNwb25zZSkgOiBEb21haW5UcmFja2luZ0RhdGEge1xuICAgIHJldHVybiByZXNwb25zZS5ib2R5LnRyYWNraW5nO1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFyc2VUcmFja2luZ1VwZGF0ZShyZXNwb25zZTogVXBkYXRlRG9tYWluVHJhY2tpbmdSZXNwb25zZSkgOlVwZGF0ZWRPcGVuVHJhY2tpbmcge1xuICAgIHJldHVybiByZXNwb25zZS5ib2R5O1xuICB9XG5cbiAgbGlzdChxdWVyeT86IERvbWFpbnNRdWVyeSk6IFByb21pc2U8VERvbWFpbltdPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQoJy92My9kb21haW5zJywgcXVlcnkpXG4gICAgICAudGhlbigocmVzIDogQVBJUmVzcG9uc2UpID0+IHRoaXMucGFyc2VEb21haW5MaXN0KHJlcyBhcyBEb21haW5MaXN0UmVzcG9uc2VEYXRhKSk7XG4gIH1cblxuICBnZXQoZG9tYWluOiBzdHJpbmcpIDogUHJvbWlzZTxURG9tYWluPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQoYC92My9kb21haW5zLyR7ZG9tYWlufWApXG4gICAgICAudGhlbigocmVzIDogQVBJUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlRG9tYWluKHJlcyBhcyBEb21haW5SZXNwb25zZURhdGEpKTtcbiAgfVxuXG4gIGNyZWF0ZShkYXRhOiBEb21haW5JbmZvKSA6IFByb21pc2U8VERvbWFpbj4ge1xuICAgIGNvbnN0IHBvc3RPYmogPSB0aGlzLl9oYW5kbGVCb29sVmFsdWVzKGRhdGEpO1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRCgnL3YzL2RvbWFpbnMnLCBwb3N0T2JqKVxuICAgICAgLnRoZW4oKHJlcyA6IEFQSVJlc3BvbnNlKSA9PiB0aGlzLl9wYXJzZURvbWFpbihyZXMgYXMgRG9tYWluUmVzcG9uc2VEYXRhKSk7XG4gIH1cblxuICB1cGRhdGUoZG9tYWluOiBzdHJpbmcsIGRhdGE6IERvbWFpblVwZGF0ZUluZm8pIDogUHJvbWlzZTxURG9tYWluPiB7XG4gICAgY29uc3QgcHV0RGF0YSA9IHRoaXMuX2hhbmRsZUJvb2xWYWx1ZXMoZGF0YSk7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXRXaXRoRkQoYC92My9kb21haW5zLyR7ZG9tYWlufWAsIHB1dERhdGEpXG4gICAgICAudGhlbigocmVzIDogQVBJUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlRG9tYWluKHJlcyBhcyBEb21haW5SZXNwb25zZURhdGEpKTtcbiAgfVxuXG4gIHZlcmlmeShkb21haW46IHN0cmluZyk6IFByb21pc2U8VERvbWFpbj4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0KGAvdjMvZG9tYWlucy8ke2RvbWFpbn0vdmVyaWZ5YClcbiAgICAgIC50aGVuKChyZXMgOiBBUElSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VEb21haW4ocmVzIGFzIERvbWFpblJlc3BvbnNlRGF0YSkpO1xuICB9XG5cbiAgZGVzdHJveShkb21haW46IHN0cmluZyk6IFByb21pc2U8TWVzc2FnZVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5kZWxldGUoYC92My9kb21haW5zLyR7ZG9tYWlufWApXG4gICAgICAudGhlbigocmVzIDogQVBJUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlTWVzc2FnZShyZXMgYXMgRGVzdHJveWVkRG9tYWluUmVzcG9uc2UpKTtcbiAgfVxuXG4gIGdldENvbm5lY3Rpb24oZG9tYWluOiBzdHJpbmcpOiBQcm9taXNlPENvbm5lY3Rpb25TZXR0aW5ncz4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KGAvdjMvZG9tYWlucy8ke2RvbWFpbn0vY29ubmVjdGlvbmApXG4gICAgICAudGhlbigocmVzIDogQVBJUmVzcG9uc2UpID0+IHJlcyBhcyBDb25uZWN0aW9uU2V0dGluZ3NSZXNwb25zZSlcbiAgICAgIC50aGVuKChyZXM6Q29ubmVjdGlvblNldHRpbmdzUmVzcG9uc2UpID0+IHJlcy5ib2R5LmNvbm5lY3Rpb24gYXMgQ29ubmVjdGlvblNldHRpbmdzKTtcbiAgfVxuXG4gIHVwZGF0ZUNvbm5lY3Rpb24oZG9tYWluOiBzdHJpbmcsIGRhdGE6IENvbm5lY3Rpb25TZXR0aW5ncyk6IFByb21pc2U8VXBkYXRlZENvbm5lY3Rpb25TZXR0aW5ncz4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0KGAvdjMvZG9tYWlucy8ke2RvbWFpbn0vY29ubmVjdGlvbmAsIGRhdGEpXG4gICAgICAudGhlbigocmVzIDogQVBJUmVzcG9uc2UpID0+IHJlcyBhcyBVcGRhdGVkQ29ubmVjdGlvblNldHRpbmdzUmVzKVxuICAgICAgLnRoZW4oKHJlczpVcGRhdGVkQ29ubmVjdGlvblNldHRpbmdzUmVzKSA9PiByZXMuYm9keSBhcyBVcGRhdGVkQ29ubmVjdGlvblNldHRpbmdzKTtcbiAgfVxuXG4gIC8vIFRyYWNraW5nXG5cbiAgZ2V0VHJhY2tpbmcoZG9tYWluOiBzdHJpbmcpIDogUHJvbWlzZTxEb21haW5UcmFja2luZ0RhdGE+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ3RyYWNraW5nJykpXG4gICAgICAudGhlbih0aGlzLl9wYXJzZVRyYWNraW5nU2V0dGluZ3MpO1xuICB9XG5cbiAgdXBkYXRlVHJhY2tpbmcoXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgdHlwZTogc3RyaW5nLFxuICAgIGRhdGE6IE9wZW5UcmFja2luZ0luZm8gfCBDbGlja1RyYWNraW5nSW5mbyB8IFVuc3Vic2NyaWJlVHJhY2tpbmdJbmZvXG4gICk6IFByb21pc2U8VXBkYXRlZE9wZW5UcmFja2luZz4ge1xuICAgIGlmICh0eXBlb2YgZGF0YT8uYWN0aXZlID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93IEFQSUVycm9yLmdldFVzZXJEYXRhRXJyb3IoJ1JlY2VpdmVkIGJvb2xlYW4gdmFsdWUgZm9yIGFjdGl2ZSBwcm9wZXJ0eScsICdQcm9wZXJ0eSBcImFjdGl2ZVwiIG11c3QgY29udGFpbiBzdHJpbmcgdmFsdWUuJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0V2l0aEZEKHVybGpvaW4oJy92My9kb21haW5zJywgZG9tYWluLCAndHJhY2tpbmcnLCB0eXBlKSwgZGF0YSlcbiAgICAgIC50aGVuKChyZXMgOiBBUElSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VUcmFja2luZ1VwZGF0ZShyZXMgYXMgVXBkYXRlRG9tYWluVHJhY2tpbmdSZXNwb25zZSkpO1xuICB9XG5cbiAgLy8gSVBzXG5cbiAgZ2V0SXBzKGRvbWFpbjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4oJy92My9kb21haW5zJywgZG9tYWluLCAnaXBzJykpXG4gICAgICAudGhlbigocmVzcG9uc2U6IEFQSVJlc3BvbnNlKSA9PiByZXNwb25zZT8uYm9keT8uaXRlbXMpO1xuICB9XG5cbiAgYXNzaWduSXAoZG9tYWluOiBzdHJpbmcsIGlwOiBzdHJpbmcpOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKHVybGpvaW4oJy92My9kb21haW5zJywgZG9tYWluLCAnaXBzJyksIHsgaXAgfSk7XG4gIH1cblxuICBkZWxldGVJcChkb21haW46IHN0cmluZywgaXA6IHN0cmluZyk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZSh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ2lwcycsIGlwKSk7XG4gIH1cblxuICBsaW5rSXBQb29sKGRvbWFpbjogc3RyaW5nLCBwb29sSWQ6IHN0cmluZyk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICdpcHMnKSwgeyBwb29sX2lkOiBwb29sSWQgfSk7XG4gIH1cblxuICB1bmxpbmtJcFBvbGwoZG9tYWluOiBzdHJpbmcsIHJlcGxhY2VtZW50OiBSZXBsYWNlbWVudEZvclBvb2wpOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgbGV0IHNlYXJjaFBhcmFtcyA9ICcnO1xuICAgIGlmIChyZXBsYWNlbWVudC5wb29sX2lkICYmIHJlcGxhY2VtZW50LmlwKSB7XG4gICAgICB0aHJvdyBBUElFcnJvci5nZXRVc2VyRGF0YUVycm9yKCdUb28gbXVjaCBkYXRhIGZvciByZXBsYWNlbWVudCcsICdQbGVhc2Ugc3BlY2lmeSBlaXRoZXIgcG9vbF9pZCBvciBpcCAobm90IGJvdGgpJyk7XG4gICAgfSBlbHNlIGlmIChyZXBsYWNlbWVudC5wb29sX2lkKSB7XG4gICAgICBzZWFyY2hQYXJhbXMgPSBgP3Bvb2xfaWQ9JHtyZXBsYWNlbWVudC5wb29sX2lkfWA7XG4gICAgfSBlbHNlIGlmIChyZXBsYWNlbWVudC5pcCkge1xuICAgICAgc2VhcmNoUGFyYW1zID0gYD9pcD0ke3JlcGxhY2VtZW50LmlwfWA7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKHVybGpvaW4oJy92My9kb21haW5zJywgZG9tYWluLCAnaXBzJywgJ2lwX3Bvb2wnLCBzZWFyY2hQYXJhbXMpKTtcbiAgfVxuXG4gIHVwZGF0ZURLSU1BdXRob3JpdHkoZG9tYWluOiBzdHJpbmcsIGRhdGE6IERLSU1BdXRob3JpdHlJbmZvKTogUHJvbWlzZTxVcGRhdGVkREtJTUF1dGhvcml0eT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0KGAvdjMvZG9tYWlucy8ke2RvbWFpbn0vZGtpbV9hdXRob3JpdHlgLCB7fSwgeyBxdWVyeTogYHNlbGY9JHtkYXRhLnNlbGZ9YCB9KVxuICAgICAgLnRoZW4oKHJlcyA6IEFQSVJlc3BvbnNlKSA9PiByZXMgYXMgVXBkYXRlZERLSU1BdXRob3JpdHlSZXNwb25zZSlcbiAgICAgIC50aGVuKChyZXMgOiBVcGRhdGVkREtJTUF1dGhvcml0eVJlc3BvbnNlKSA9PiByZXMuYm9keSBhcyBVcGRhdGVkREtJTUF1dGhvcml0eSk7XG4gIH1cblxuICB1cGRhdGVES0lNU2VsZWN0b3IoZG9tYWluOiBzdHJpbmcsIGRhdGE6IERLSU1TZWxlY3RvckluZm8pOiBQcm9taXNlPFVwZGF0ZWRES0lNU2VsZWN0b3JSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0KGAvdjMvZG9tYWlucy8ke2RvbWFpbn0vZGtpbV9zZWxlY3RvcmAsIHt9LCB7IHF1ZXJ5OiBgZGtpbV9zZWxlY3Rvcj0ke2RhdGEuZGtpbVNlbGVjdG9yfWAgfSlcbiAgICAgIC50aGVuKChyZXMgOiBBUElSZXNwb25zZSkgPT4gcmVzIGFzIFVwZGF0ZWRES0lNU2VsZWN0b3JSZXNwb25zZSk7XG4gIH1cblxuICB1cGRhdGVXZWJQcmVmaXgoZG9tYWluOiBzdHJpbmcsIGRhdGE6IFdlYlByZWZpeEluZm8pOiBQcm9taXNlPFVwZGF0ZWRXZWJQcmVmaXhSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0KGAvdjMvZG9tYWlucy8ke2RvbWFpbn0vd2ViX3ByZWZpeGAsIHt9LCB7IHF1ZXJ5OiBgd2ViX3ByZWZpeD0ke2RhdGEud2ViUHJlZml4fWAgfSlcbiAgICAgIC50aGVuKChyZXMgOiBBUElSZXNwb25zZSkgPT4gcmVzIGFzIFVwZGF0ZWRXZWJQcmVmaXhSZXNwb25zZSk7XG4gIH1cbn1cbiIsImltcG9ydCB1cmxqb2luIGZyb20gJ3VybC1qb2luJztcbmltcG9ydCB7IEFQSVJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vVHlwZXMvQ29tbW9uL0FwaVJlc3BvbnNlJztcbmltcG9ydCB7IElEb21haW5DcmVkZW50aWFscyB9IGZyb20gJy4uLy4uL0ludGVyZmFjZXMvRG9tYWlucyc7XG5pbXBvcnQge1xuICBEb21haW5DcmVkZW50aWFsc1Jlc3BvbnNlRGF0YSxcbiAgRG9tYWluQ3JlZGVudGlhbHNMaXN0LFxuICBDcmVhdGVkVXBkYXRlZERvbWFpbkNyZWRlbnRpYWxzUmVzcG9uc2UsXG4gIERvbWFpbkNyZWRlbnRpYWxzUmVzdWx0LFxuICBEZWxldGVkRG9tYWluQ3JlZGVudGlhbHNSZXNwb25zZSxcbiAgRG9tYWluQ3JlZGVudGlhbHNRdWVyeSxcbiAgRG9tYWluQ3JlZGVudGlhbHMsXG4gIFVwZGF0ZURvbWFpbkNyZWRlbnRpYWxzRGF0YVxufSBmcm9tICcuLi8uLi9UeXBlcy9Eb21haW5zJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4uL2NvbW1vbi9SZXF1ZXN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRG9tYWluQ3JlZGVudGlhbHNDbGllbnQgaW1wbGVtZW50cyBJRG9tYWluQ3JlZGVudGlhbHMge1xuICBiYXNlUm91dGU6IHN0cmluZztcbiAgcmVxdWVzdDogUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0KSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICB0aGlzLmJhc2VSb3V0ZSA9ICcvdjMvZG9tYWlucy8nO1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFyc2VEb21haW5DcmVkZW50aWFsc0xpc3QoXG4gICAgcmVzcG9uc2U6IERvbWFpbkNyZWRlbnRpYWxzUmVzcG9uc2VEYXRhXG4gICk6IERvbWFpbkNyZWRlbnRpYWxzTGlzdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGl0ZW1zOiByZXNwb25zZS5ib2R5Lml0ZW1zLFxuICAgICAgdG90YWxDb3VudDogcmVzcG9uc2UuYm9keS50b3RhbF9jb3VudFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIF9wYXJzZU1lc3NhZ2VSZXNwb25zZShcbiAgICByZXNwb25zZTogQ3JlYXRlZFVwZGF0ZWREb21haW5DcmVkZW50aWFsc1Jlc3BvbnNlXG4gICk6IERvbWFpbkNyZWRlbnRpYWxzUmVzdWx0IHtcbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIG1lc3NhZ2U6IHJlc3BvbnNlLmJvZHkubWVzc2FnZVxuICAgIH0gYXMgRG9tYWluQ3JlZGVudGlhbHNSZXN1bHQ7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgX3BhcnNlRGVsZXRlZFJlc3BvbnNlKFxuICAgIHJlc3BvbnNlOkRlbGV0ZWREb21haW5DcmVkZW50aWFsc1Jlc3BvbnNlXG4gICk6IERvbWFpbkNyZWRlbnRpYWxzUmVzdWx0IHtcbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIG1lc3NhZ2U6IHJlc3BvbnNlLmJvZHkubWVzc2FnZSxcbiAgICAgIHNwZWM6IHJlc3BvbnNlLmJvZHkuc3BlY1xuICAgIH0gYXMgRG9tYWluQ3JlZGVudGlhbHNSZXN1bHQ7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgbGlzdChkb21haW46IHN0cmluZywgcXVlcnk/OiBEb21haW5DcmVkZW50aWFsc1F1ZXJ5KTogUHJvbWlzZTxEb21haW5DcmVkZW50aWFsc0xpc3Q+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvY3JlZGVudGlhbHMnKSwgcXVlcnkpXG4gICAgICAudGhlbihcbiAgICAgICAgKHJlczogQVBJUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlRG9tYWluQ3JlZGVudGlhbHNMaXN0KHJlcyBhcyBEb21haW5DcmVkZW50aWFsc1Jlc3BvbnNlRGF0YSlcbiAgICAgICk7XG4gIH1cblxuICBjcmVhdGUoXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgZGF0YTogRG9tYWluQ3JlZGVudGlhbHNcbiAgKTogUHJvbWlzZTxEb21haW5DcmVkZW50aWFsc1Jlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRChgJHt0aGlzLmJhc2VSb3V0ZX0ke2RvbWFpbn0vY3JlZGVudGlhbHNgLCBkYXRhKVxuICAgICAgLnRoZW4oKHJlczogQVBJUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlTWVzc2FnZVJlc3BvbnNlKHJlcykpO1xuICB9XG5cbiAgdXBkYXRlKFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIGNyZWRlbnRpYWxzTG9naW46IHN0cmluZyxcbiAgICBkYXRhOiBVcGRhdGVEb21haW5DcmVkZW50aWFsc0RhdGFcbiAgKTogUHJvbWlzZTxEb21haW5DcmVkZW50aWFsc1Jlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0V2l0aEZEKGAke3RoaXMuYmFzZVJvdXRlfSR7ZG9tYWlufS9jcmVkZW50aWFscy8ke2NyZWRlbnRpYWxzTG9naW59YCwgZGF0YSlcbiAgICAgIC50aGVuKChyZXM6IEFQSVJlc3BvbnNlKSA9PiB0aGlzLl9wYXJzZU1lc3NhZ2VSZXNwb25zZShyZXMpKTtcbiAgfVxuXG4gIGRlc3Ryb3koXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgY3JlZGVudGlhbHNMb2dpbjogc3RyaW5nXG4gICk6IFByb21pc2U8RG9tYWluQ3JlZGVudGlhbHNSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZShgJHt0aGlzLmJhc2VSb3V0ZX0ke2RvbWFpbn0vY3JlZGVudGlhbHMvJHtjcmVkZW50aWFsc0xvZ2lufWApXG4gICAgICAudGhlbigocmVzOiBBUElSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VEZWxldGVkUmVzcG9uc2UocmVzKSk7XG4gIH1cbn1cbiIsImltcG9ydCB1cmxqb2luIGZyb20gJ3VybC1qb2luJztcbmltcG9ydCB7IEFQSVJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vVHlwZXMvQ29tbW9uL0FwaVJlc3BvbnNlJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4uL2NvbW1vbi9SZXF1ZXN0JztcblxuaW1wb3J0IHtcbiAgSURvbWFpblRhZ1N0YXRpc3RpY1Jlc3VsdCxcbiAgSURvbWFpblRhZ3NDbGllbnRcbn0gZnJvbSAnLi4vLi4vSW50ZXJmYWNlcy9Eb21haW5zJztcbmltcG9ydCBOYXZpZ2F0aW9uVGhydVBhZ2VzIGZyb20gJy4uL2NvbW1vbi9OYXZpZ2F0aW9uVGhydVBhZ2VzJztcbmltcG9ydCB7IFJlc29sdXRpb24gfSBmcm9tICcuLi8uLi9FbnVtcyc7XG5pbXBvcnQge1xuICBEb21haW5UYWdzSXRlbSxcbiAgRG9tYWluVGFnc0l0ZW1JbmZvLFxuICBEb21haW5UYWdTdGF0aXN0aWNJdGVtLFxuICBEb21haW5UYWdTdGF0QVBJUmVzcG9uc2UsXG4gIERvbWFpblRhZ0FQSVJlc3BvbnNlU3RhdHNJdGVtLFxuICBEb21haW5UYWdzTGlzdCxcbiAgRG9tYWluVGFnc1Jlc3BvbnNlRGF0YSxcbiAgRG9tYWluVGFnc1F1ZXJ5LFxuICBEb21haW5UYWdzTWVzc2FnZVJlcyxcbiAgRG9tYWluVGFnc1N0YXRpc3RpY1F1ZXJ5LFxuICBEb21haW5UYWdDb3VudHJpZXNBZ2dyZWdhdGlvbixcbiAgRG9tYWluVGFnQ291bnRyaWVzQVBJUmVzcG9uc2UsXG4gIERvbWFpblRhZ1Byb3ZpZGVyc0FnZ3JlZ2F0aW9uLFxuICBEb21haW5UYWdQcm92aWRlcnNBUElSZXNwb25zZSxcbiAgRG9tYWluVGFnRGV2aWNlc0FnZ3JlZ2F0aW9uLFxuICBEb21haW5UYWdEZXZpY2VzQVBJUmVzcG9uc2Vcbn0gZnJvbSAnLi4vLi4vVHlwZXMvRG9tYWlucyc7XG5cbmV4cG9ydCBjbGFzcyBEb21haW5UYWcgaW1wbGVtZW50cyBEb21haW5UYWdzSXRlbSB7XG4gIHRhZzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAnZmlyc3Qtc2Vlbic6IERhdGU7XG4gICdsYXN0LXNlZW4nOiBEYXRlO1xuXG4gIGNvbnN0cnVjdG9yKHRhZ0luZm86IERvbWFpblRhZ3NJdGVtSW5mbykge1xuICAgIHRoaXMudGFnID0gdGFnSW5mby50YWc7XG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IHRhZ0luZm8uZGVzY3JpcHRpb247XG4gICAgdGhpc1snZmlyc3Qtc2VlbiddID0gbmV3IERhdGUodGFnSW5mb1snZmlyc3Qtc2VlbiddKTtcbiAgICB0aGlzWydsYXN0LXNlZW4nXSA9IG5ldyBEYXRlKHRhZ0luZm9bJ2xhc3Qtc2VlbiddKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRG9tYWluVGFnU3RhdGlzdGljIGltcGxlbWVudHMgSURvbWFpblRhZ1N0YXRpc3RpY1Jlc3VsdCB7XG4gIHRhZzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBzdGFydDogRGF0ZTtcbiAgZW5kOiBEYXRlO1xuICByZXNvbHV0aW9uOiBSZXNvbHV0aW9uO1xuICBzdGF0czogRG9tYWluVGFnU3RhdGlzdGljSXRlbVtdO1xuXG4gIGNvbnN0cnVjdG9yKHRhZ1N0YXRpc3RpY0luZm86IERvbWFpblRhZ1N0YXRBUElSZXNwb25zZSkge1xuICAgIHRoaXMudGFnID0gdGFnU3RhdGlzdGljSW5mby5ib2R5LnRhZztcbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gdGFnU3RhdGlzdGljSW5mby5ib2R5LmRlc2NyaXB0aW9uO1xuICAgIHRoaXMuc3RhcnQgPSBuZXcgRGF0ZSh0YWdTdGF0aXN0aWNJbmZvLmJvZHkuc3RhcnQpO1xuICAgIHRoaXMuZW5kID0gbmV3IERhdGUodGFnU3RhdGlzdGljSW5mby5ib2R5LmVuZCk7XG4gICAgdGhpcy5yZXNvbHV0aW9uID0gdGFnU3RhdGlzdGljSW5mby5ib2R5LnJlc29sdXRpb247XG4gICAgdGhpcy5zdGF0cyA9IHRhZ1N0YXRpc3RpY0luZm8uYm9keS5zdGF0cy5tYXAoZnVuY3Rpb24gKHN0YXQ6IERvbWFpblRhZ0FQSVJlc3BvbnNlU3RhdHNJdGVtKSB7XG4gICAgICBjb25zdCByZXMgPSB7IC4uLnN0YXQsIHRpbWU6IG5ldyBEYXRlKHN0YXQudGltZSkgfTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRG9tYWluVGFnc0NsaWVudFxuICBleHRlbmRzIE5hdmlnYXRpb25UaHJ1UGFnZXM8RG9tYWluVGFnc0xpc3Q+XG4gIGltcGxlbWVudHMgSURvbWFpblRhZ3NDbGllbnQge1xuICBiYXNlUm91dGU6IHN0cmluZztcbiAgcmVxdWVzdDogUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0KSB7XG4gICAgc3VwZXIocmVxdWVzdCk7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICB0aGlzLmJhc2VSb3V0ZSA9ICcvdjMvJztcbiAgfVxuXG4gIHByb3RlY3RlZCBwYXJzZUxpc3QoXG4gICAgcmVzcG9uc2U6IERvbWFpblRhZ3NSZXNwb25zZURhdGEsXG4gICk6IERvbWFpblRhZ3NMaXN0IHtcbiAgICBjb25zdCBkYXRhID0ge30gYXMgRG9tYWluVGFnc0xpc3Q7XG4gICAgZGF0YS5pdGVtcyA9IHJlc3BvbnNlLmJvZHkuaXRlbXMubWFwKCh0YWdJbmZvOiBEb21haW5UYWdzSXRlbUluZm8pID0+IG5ldyBEb21haW5UYWcodGFnSW5mbykpO1xuXG4gICAgZGF0YS5wYWdlcyA9IHRoaXMucGFyc2VQYWdlTGlua3MocmVzcG9uc2UsICc/JywgJ3RhZycpO1xuICAgIGRhdGEuc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFyc2VUYWdTdGF0aXN0aWMoXG4gICAgcmVzcG9uc2U6IERvbWFpblRhZ1N0YXRBUElSZXNwb25zZVxuICApOiBJRG9tYWluVGFnU3RhdGlzdGljUmVzdWx0IHtcbiAgICByZXR1cm4gbmV3IERvbWFpblRhZ1N0YXRpc3RpYyhyZXNwb25zZSk7XG4gIH1cblxuICBhc3luYyBsaXN0KGRvbWFpbjogc3RyaW5nLCBxdWVyeT86IERvbWFpblRhZ3NRdWVyeSk6IFByb21pc2U8RG9tYWluVGFnc0xpc3Q+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0TGlzdFdpdGhQYWdlcyh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGFncycpLCBxdWVyeSk7XG4gIH1cblxuICBnZXQoZG9tYWluOiBzdHJpbmcsIHRhZzogc3RyaW5nKTogUHJvbWlzZTxEb21haW5UYWdzSXRlbT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90YWdzJywgdGFnKSlcbiAgICAgIC50aGVuKFxuICAgICAgICAocmVzOiBBUElSZXNwb25zZSkgPT4gbmV3IERvbWFpblRhZyhyZXMuYm9keSlcbiAgICAgICk7XG4gIH1cblxuICB1cGRhdGUoZG9tYWluOiBzdHJpbmcsIHRhZzogc3RyaW5nLCBkZXNjcmlwdGlvbjogc3RyaW5nKTogUHJvbWlzZTxEb21haW5UYWdzTWVzc2FnZVJlcz4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0KHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90YWdzJywgdGFnKSwgZGVzY3JpcHRpb24pXG4gICAgICAudGhlbihcbiAgICAgICAgKHJlczogQVBJUmVzcG9uc2UpID0+IHJlcy5ib2R5IGFzIERvbWFpblRhZ3NNZXNzYWdlUmVzXG4gICAgICApO1xuICB9XG5cbiAgZGVzdHJveShcbiAgICBkb21haW46IHN0cmluZyxcbiAgICB0YWc6IHN0cmluZ1xuICApOiBQcm9taXNlPERvbWFpblRhZ3NNZXNzYWdlUmVzPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5kZWxldGUoYCR7dGhpcy5iYXNlUm91dGV9JHtkb21haW59L3RhZ3MvJHt0YWd9YClcbiAgICAgIC50aGVuKChyZXM6IEFQSVJlc3BvbnNlKSA9PiAoXG4gICAgICAgIHtcbiAgICAgICAgICBtZXNzYWdlOiByZXMuYm9keS5tZXNzYWdlLFxuICAgICAgICAgIHN0YXR1czogcmVzLnN0YXR1c1xuICAgICAgICB9IGFzIERvbWFpblRhZ3NNZXNzYWdlUmVzKSk7XG4gIH1cblxuICBzdGF0aXN0aWMoZG9tYWluOiBzdHJpbmcsIHRhZzogc3RyaW5nLCBxdWVyeTogRG9tYWluVGFnc1N0YXRpc3RpY1F1ZXJ5KVxuICAgIDogUHJvbWlzZTxEb21haW5UYWdTdGF0aXN0aWM+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGFncycsIHRhZywgJ3N0YXRzJyksIHF1ZXJ5KVxuICAgICAgLnRoZW4oXG4gICAgICAgIChyZXM6IEFQSVJlc3BvbnNlKSA9PiB0aGlzLl9wYXJzZVRhZ1N0YXRpc3RpYyhyZXMpXG4gICAgICApO1xuICB9XG5cbiAgY291bnRyaWVzKGRvbWFpbjogc3RyaW5nLCB0YWc6IHN0cmluZyk6IFByb21pc2U8RG9tYWluVGFnQ291bnRyaWVzQWdncmVnYXRpb24+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGFncycsIHRhZywgJ3N0YXRzL2FnZ3JlZ2F0ZXMvY291bnRyaWVzJykpXG4gICAgICAudGhlbihcbiAgICAgICAgKHJlczogRG9tYWluVGFnQ291bnRyaWVzQVBJUmVzcG9uc2UpID0+IHJlcy5ib2R5IGFzIERvbWFpblRhZ0NvdW50cmllc0FnZ3JlZ2F0aW9uXG4gICAgICApO1xuICB9XG5cbiAgcHJvdmlkZXJzKGRvbWFpbjogc3RyaW5nLCB0YWc6IHN0cmluZyk6IFByb21pc2U8RG9tYWluVGFnUHJvdmlkZXJzQWdncmVnYXRpb24+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGFncycsIHRhZywgJ3N0YXRzL2FnZ3JlZ2F0ZXMvcHJvdmlkZXJzJykpXG4gICAgICAudGhlbihcbiAgICAgICAgKHJlczogRG9tYWluVGFnUHJvdmlkZXJzQVBJUmVzcG9uc2UpID0+IHJlcy5ib2R5IGFzIERvbWFpblRhZ1Byb3ZpZGVyc0FnZ3JlZ2F0aW9uXG4gICAgICApO1xuICB9XG5cbiAgZGV2aWNlcyhkb21haW46IHN0cmluZywgdGFnOiBzdHJpbmcpOiBQcm9taXNlPERvbWFpblRhZ0RldmljZXNBZ2dyZWdhdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90YWdzJywgdGFnLCAnc3RhdHMvYWdncmVnYXRlcy9kZXZpY2VzJykpXG4gICAgICAudGhlbihcbiAgICAgICAgKHJlczogRG9tYWluVGFnRGV2aWNlc0FQSVJlc3BvbnNlKSA9PiByZXMuYm9keSBhcyBEb21haW5UYWdEZXZpY2VzQWdncmVnYXRpb25cbiAgICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCB1cmxqb2luIGZyb20gJ3VybC1qb2luJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4uL2NvbW1vbi9SZXF1ZXN0JztcblxuaW1wb3J0IHtcbiAgQ3JlYXRlRG9tYWluVGVtcGxhdGVBUElSZXNwb25zZSxcbiAgQ3JlYXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uQVBJUmVzcG9uc2UsXG4gIENyZWF0ZURvbWFpblRlbXBsYXRlVmVyc2lvblJlc3VsdCxcbiAgRG9tYWluVGVtcGxhdGVEYXRhLFxuICBEb21haW5UZW1wbGF0ZXNRdWVyeSxcbiAgRG9tYWluVGVtcGxhdGVVcGRhdGVEYXRhLFxuICBEb21haW5UZW1wbGF0ZVVwZGF0ZVZlcnNpb25EYXRhLFxuICBEb21haW5UZW1wbGF0ZVZlcnNpb25EYXRhLFxuICBHZXREb21haW5UZW1wbGF0ZUFQSVJlc3BvbnNlLFxuICBMaXN0RG9tYWluVGVtcGxhdGVzQVBJUmVzcG9uc2UsXG4gIExpc3REb21haW5UZW1wbGF0ZXNSZXN1bHQsXG4gIExpc3REb21haW5UZW1wbGF0ZVZlcnNpb25zQVBJUmVzcG9uc2UsXG4gIExpc3REb21haW5UZW1wbGF0ZVZlcnNpb25zUmVzdWx0LFxuICBNdXRhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25BUElSZXNwb25zZSxcbiAgTXV0YXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uUmVzdWx0LFxuICBOb3RpZmljYXRpb25BUElSZXNwb25zZSxcbiAgTm90aWZpY2F0aW9uUmVzdWx0LFxuICBTaG9ydFRlbXBsYXRlVmVyc2lvbixcbiAgVGVtcGxhdGVRdWVyeSxcbiAgVGVtcGxhdGVWZXJzaW9uLFxuICBVcGRhdGVPckRlbGV0ZURvbWFpblRlbXBsYXRlQVBJUmVzcG9uc2UsXG4gIFVwZGF0ZU9yRGVsZXRlRG9tYWluVGVtcGxhdGVSZXN1bHRcbn0gZnJvbSAnLi4vLi4vVHlwZXMvRG9tYWlucyc7XG5pbXBvcnQgTmF2aWdhdGlvblRocnVQYWdlcyBmcm9tICcuLi9jb21tb24vTmF2aWdhdGlvblRocnVQYWdlcyc7XG5pbXBvcnQgeyBJRG9tYWluVGVtcGxhdGUsIElEb21haW5UZW1wbGF0ZXNDbGllbnQgfSBmcm9tICcuLi8uLi9JbnRlcmZhY2VzL0RvbWFpbnMnO1xuXG5leHBvcnQgY2xhc3MgRG9tYWluVGVtcGxhdGVJdGVtIGltcGxlbWVudHMgSURvbWFpblRlbXBsYXRlIHtcbiAgbmFtZSA6IHN0cmluZztcbiAgZGVzY3JpcHRpb24gOiBzdHJpbmc7XG4gIGNyZWF0ZWRBdCA6IERhdGUgfCAnJztcbiAgY3JlYXRlZEJ5IDogc3RyaW5nO1xuICBpZCA6IHN0cmluZztcbiAgdmVyc2lvbj86IFRlbXBsYXRlVmVyc2lvbjtcbiAgdmVyc2lvbnM/OiBTaG9ydFRlbXBsYXRlVmVyc2lvbltdO1xuXG4gIGNvbnN0cnVjdG9yKGRvbWFpblRlbXBsYXRlRnJvbUFQSTogSURvbWFpblRlbXBsYXRlKSB7XG4gICAgdGhpcy5uYW1lID0gZG9tYWluVGVtcGxhdGVGcm9tQVBJLm5hbWU7XG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRvbWFpblRlbXBsYXRlRnJvbUFQSS5kZXNjcmlwdGlvbjtcbiAgICB0aGlzLmNyZWF0ZWRBdCA9IGRvbWFpblRlbXBsYXRlRnJvbUFQSS5jcmVhdGVkQXQgPyBuZXcgRGF0ZShkb21haW5UZW1wbGF0ZUZyb21BUEkuY3JlYXRlZEF0KSA6ICcnO1xuICAgIHRoaXMuY3JlYXRlZEJ5ID0gZG9tYWluVGVtcGxhdGVGcm9tQVBJLmNyZWF0ZWRCeTtcbiAgICB0aGlzLmlkID0gZG9tYWluVGVtcGxhdGVGcm9tQVBJLmlkO1xuXG4gICAgaWYgKGRvbWFpblRlbXBsYXRlRnJvbUFQSS52ZXJzaW9uKSB7XG4gICAgICB0aGlzLnZlcnNpb24gPSBkb21haW5UZW1wbGF0ZUZyb21BUEkudmVyc2lvbjtcbiAgICAgIGlmIChkb21haW5UZW1wbGF0ZUZyb21BUEkudmVyc2lvbi5jcmVhdGVkQXQpIHtcbiAgICAgICAgdGhpcy52ZXJzaW9uLmNyZWF0ZWRBdCA9IG5ldyBEYXRlKGRvbWFpblRlbXBsYXRlRnJvbUFQSS52ZXJzaW9uLmNyZWF0ZWRBdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRvbWFpblRlbXBsYXRlRnJvbUFQSS52ZXJzaW9ucyAmJiBkb21haW5UZW1wbGF0ZUZyb21BUEkudmVyc2lvbnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnZlcnNpb25zID0gZG9tYWluVGVtcGxhdGVGcm9tQVBJLnZlcnNpb25zLm1hcCgodmVyc2lvbikgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB7IC4uLnZlcnNpb24gfTtcbiAgICAgICAgcmVzdWx0LmNyZWF0ZWRBdCA9IG5ldyBEYXRlKHZlcnNpb24uY3JlYXRlZEF0KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb21haW5UZW1wbGF0ZXNDbGllbnRcbiAgZXh0ZW5kcyBOYXZpZ2F0aW9uVGhydVBhZ2VzPExpc3REb21haW5UZW1wbGF0ZXNSZXN1bHQ+XG4gIGltcGxlbWVudHMgSURvbWFpblRlbXBsYXRlc0NsaWVudCB7XG4gIGJhc2VSb3V0ZTogc3RyaW5nO1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICBzdXBlcihyZXF1ZXN0KTtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMuYmFzZVJvdXRlID0gJy92My8nO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUNyZWF0aW9uUmVzcG9uc2UoZGF0YTogQ3JlYXRlRG9tYWluVGVtcGxhdGVBUElSZXNwb25zZSk6IElEb21haW5UZW1wbGF0ZSB7XG4gICAgcmV0dXJuIG5ldyBEb21haW5UZW1wbGF0ZUl0ZW0oZGF0YS5ib2R5LnRlbXBsYXRlKTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VDcmVhdGlvblZlcnNpb25SZXNwb25zZShcbiAgICBkYXRhOiBDcmVhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25BUElSZXNwb25zZVxuICApOiBDcmVhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25SZXN1bHQge1xuICAgIGNvbnN0IHJlc3VsdDogQ3JlYXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uUmVzdWx0ID0ge30gYXMgQ3JlYXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uUmVzdWx0O1xuICAgIHJlc3VsdC5zdGF0dXMgPSBkYXRhLnN0YXR1cztcbiAgICByZXN1bHQubWVzc2FnZSA9IGRhdGEuYm9keS5tZXNzYWdlO1xuICAgIGlmIChkYXRhLmJvZHkgJiYgZGF0YS5ib2R5LnRlbXBsYXRlKSB7XG4gICAgICByZXN1bHQudGVtcGxhdGUgPSBuZXcgRG9tYWluVGVtcGxhdGVJdGVtKGRhdGEuYm9keS50ZW1wbGF0ZSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlTXV0YXRpb25SZXNwb25zZShcbiAgICBkYXRhOiBVcGRhdGVPckRlbGV0ZURvbWFpblRlbXBsYXRlQVBJUmVzcG9uc2VcbiAgKTogVXBkYXRlT3JEZWxldGVEb21haW5UZW1wbGF0ZVJlc3VsdCB7XG4gICAgY29uc3QgcmVzdWx0OiBVcGRhdGVPckRlbGV0ZURvbWFpblRlbXBsYXRlUmVzdWx0ID0ge30gYXMgVXBkYXRlT3JEZWxldGVEb21haW5UZW1wbGF0ZVJlc3VsdDtcbiAgICByZXN1bHQuc3RhdHVzID0gZGF0YS5zdGF0dXM7XG4gICAgcmVzdWx0Lm1lc3NhZ2UgPSBkYXRhLmJvZHkubWVzc2FnZTtcbiAgICBpZiAoZGF0YS5ib2R5ICYmIGRhdGEuYm9keS50ZW1wbGF0ZSkge1xuICAgICAgcmVzdWx0LnRlbXBsYXRlTmFtZSA9IGRhdGEuYm9keS50ZW1wbGF0ZS5uYW1lO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZU5vdGlmaWNhdGlvblJlc3BvbnNlKGRhdGE6IE5vdGlmaWNhdGlvbkFQSVJlc3BvbnNlKTogTm90aWZpY2F0aW9uUmVzdWx0IHtcbiAgICBjb25zdCByZXN1bHQ6IE5vdGlmaWNhdGlvblJlc3VsdCA9IHt9IGFzIE5vdGlmaWNhdGlvblJlc3VsdDtcbiAgICByZXN1bHQuc3RhdHVzID0gZGF0YS5zdGF0dXM7XG4gICAgcmVzdWx0Lm1lc3NhZ2UgPSBkYXRhLmJvZHkubWVzc2FnZTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZU11dGF0ZVRlbXBsYXRlVmVyc2lvblJlc3BvbnNlKFxuICAgIGRhdGE6IE11dGF0ZURvbWFpblRlbXBsYXRlVmVyc2lvbkFQSVJlc3BvbnNlXG4gICk6IE11dGF0ZURvbWFpblRlbXBsYXRlVmVyc2lvblJlc3VsdCB7XG4gICAgY29uc3QgcmVzdWx0OiBNdXRhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25SZXN1bHQgPSB7fSBhcyBNdXRhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25SZXN1bHQ7XG4gICAgcmVzdWx0LnN0YXR1cyA9IGRhdGEuc3RhdHVzO1xuICAgIHJlc3VsdC5tZXNzYWdlID0gZGF0YS5ib2R5Lm1lc3NhZ2U7XG4gICAgaWYgKGRhdGEuYm9keS50ZW1wbGF0ZSkge1xuICAgICAgcmVzdWx0LnRlbXBsYXRlTmFtZSA9IGRhdGEuYm9keS50ZW1wbGF0ZS5uYW1lO1xuICAgICAgcmVzdWx0LnRlbXBsYXRlVmVyc2lvbiA9IHsgdGFnOiBkYXRhLmJvZHkudGVtcGxhdGUudmVyc2lvbi50YWcgfTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByb3RlY3RlZCBwYXJzZUxpc3QocmVzcG9uc2U6IExpc3REb21haW5UZW1wbGF0ZXNBUElSZXNwb25zZSk6IExpc3REb21haW5UZW1wbGF0ZXNSZXN1bHQge1xuICAgIGNvbnN0IGRhdGEgPSB7fSBhcyBMaXN0RG9tYWluVGVtcGxhdGVzUmVzdWx0O1xuXG4gICAgZGF0YS5pdGVtcyA9IHJlc3BvbnNlLmJvZHkuaXRlbXMubWFwKChkOiBJRG9tYWluVGVtcGxhdGUpID0+IG5ldyBEb21haW5UZW1wbGF0ZUl0ZW0oZCkpO1xuXG4gICAgZGF0YS5wYWdlcyA9IHRoaXMucGFyc2VQYWdlTGlua3MocmVzcG9uc2UsICc/JywgJ3AnKTtcbiAgICBkYXRhLnN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUxpc3RUZW1wbGF0ZVZlcnNpb25zKFxuICAgIHJlc3BvbnNlOiBMaXN0RG9tYWluVGVtcGxhdGVWZXJzaW9uc0FQSVJlc3BvbnNlXG4gICk6IExpc3REb21haW5UZW1wbGF0ZVZlcnNpb25zUmVzdWx0IHtcbiAgICBjb25zdCBkYXRhID0ge30gYXMgTGlzdERvbWFpblRlbXBsYXRlVmVyc2lvbnNSZXN1bHQ7XG5cbiAgICBkYXRhLnRlbXBsYXRlID0gbmV3IERvbWFpblRlbXBsYXRlSXRlbShyZXNwb25zZS5ib2R5LnRlbXBsYXRlKTtcblxuICAgIGRhdGEucGFnZXMgPSB0aGlzLnBhcnNlUGFnZUxpbmtzKHJlc3BvbnNlLCAnPycsICdwJyk7XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGFzeW5jIGxpc3QoZG9tYWluOiBzdHJpbmcsIHF1ZXJ5PzogRG9tYWluVGVtcGxhdGVzUXVlcnkpOiBQcm9taXNlPExpc3REb21haW5UZW1wbGF0ZXNSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0TGlzdFdpdGhQYWdlcyh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGVtcGxhdGVzJyksIHF1ZXJ5KTtcbiAgfVxuXG4gIGdldChkb21haW46IHN0cmluZywgdGVtcGxhdGVOYW1lOiBzdHJpbmcsIHF1ZXJ5PzogVGVtcGxhdGVRdWVyeSk6IFByb21pc2U8SURvbWFpblRlbXBsYXRlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RlbXBsYXRlcy8nLCB0ZW1wbGF0ZU5hbWUpLCBxdWVyeSlcbiAgICAgIC50aGVuKFxuICAgICAgICAocmVzOiBHZXREb21haW5UZW1wbGF0ZUFQSVJlc3BvbnNlKSA9PiBuZXcgRG9tYWluVGVtcGxhdGVJdGVtKHJlcy5ib2R5LnRlbXBsYXRlKVxuICAgICAgKTtcbiAgfVxuXG4gIGNyZWF0ZShcbiAgICBkb21haW46IHN0cmluZyxcbiAgICBkYXRhOiBEb21haW5UZW1wbGF0ZURhdGFcbiAgKTogUHJvbWlzZTxJRG9tYWluVGVtcGxhdGU+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RlbXBsYXRlcycpLCBkYXRhKVxuICAgICAgLnRoZW4oKHJlczogQ3JlYXRlRG9tYWluVGVtcGxhdGVBUElSZXNwb25zZSkgPT4gdGhpcy5wYXJzZUNyZWF0aW9uUmVzcG9uc2UocmVzKSk7XG4gIH1cblxuICB1cGRhdGUoXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgdGVtcGxhdGVOYW1lOiBzdHJpbmcsXG4gICAgZGF0YTogRG9tYWluVGVtcGxhdGVVcGRhdGVEYXRhXG4gICk6IFByb21pc2U8VXBkYXRlT3JEZWxldGVEb21haW5UZW1wbGF0ZVJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0V2l0aEZEKHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90ZW1wbGF0ZXMvJywgdGVtcGxhdGVOYW1lKSwgZGF0YSlcbiAgICAgIC50aGVuKChyZXM6IFVwZGF0ZU9yRGVsZXRlRG9tYWluVGVtcGxhdGVBUElSZXNwb25zZSkgPT4gdGhpcy5wYXJzZU11dGF0aW9uUmVzcG9uc2UocmVzKSk7XG4gIH1cblxuICBkZXN0cm95KGRvbWFpbjogc3RyaW5nLCB0ZW1wbGF0ZU5hbWU6IHN0cmluZyk6IFByb21pc2U8VXBkYXRlT3JEZWxldGVEb21haW5UZW1wbGF0ZVJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90ZW1wbGF0ZXMvJywgdGVtcGxhdGVOYW1lKSlcbiAgICAgIC50aGVuKChyZXM6IFVwZGF0ZU9yRGVsZXRlRG9tYWluVGVtcGxhdGVBUElSZXNwb25zZSkgPT4gdGhpcy5wYXJzZU11dGF0aW9uUmVzcG9uc2UocmVzKSk7XG4gIH1cblxuICBkZXN0cm95QWxsKGRvbWFpbjogc3RyaW5nKTogUHJvbWlzZTxOb3RpZmljYXRpb25SZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZSh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGVtcGxhdGVzJykpXG4gICAgICAudGhlbigocmVzOiBOb3RpZmljYXRpb25BUElSZXNwb25zZSkgPT4gdGhpcy5wYXJzZU5vdGlmaWNhdGlvblJlc3BvbnNlKHJlcykpO1xuICB9XG5cbiAgY3JlYXRlVmVyc2lvbihcbiAgICBkb21haW46IHN0cmluZyxcbiAgICB0ZW1wbGF0ZU5hbWU6IHN0cmluZyxcbiAgICBkYXRhOiBEb21haW5UZW1wbGF0ZVZlcnNpb25EYXRhXG4gICk6IFByb21pc2U8Q3JlYXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90ZW1wbGF0ZXMvJywgdGVtcGxhdGVOYW1lLCAnL3ZlcnNpb25zJyksIGRhdGEpXG4gICAgICAudGhlbihcbiAgICAgICAgKHJlczogQ3JlYXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uQVBJUmVzcG9uc2UpID0+IHRoaXMucGFyc2VDcmVhdGlvblZlcnNpb25SZXNwb25zZShyZXMpXG4gICAgICApO1xuICB9XG5cbiAgZ2V0VmVyc2lvbihkb21haW46IHN0cmluZywgdGVtcGxhdGVOYW1lOiBzdHJpbmcsIHRhZzogc3RyaW5nKTogUHJvbWlzZTxJRG9tYWluVGVtcGxhdGU+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGVtcGxhdGVzLycsIHRlbXBsYXRlTmFtZSwgJy92ZXJzaW9ucy8nLCB0YWcpKVxuICAgICAgLnRoZW4oXG4gICAgICAgIChyZXM6IEdldERvbWFpblRlbXBsYXRlQVBJUmVzcG9uc2UpID0+IG5ldyBEb21haW5UZW1wbGF0ZUl0ZW0ocmVzLmJvZHkudGVtcGxhdGUpXG4gICAgICApO1xuICB9XG5cbiAgdXBkYXRlVmVyc2lvbihcbiAgICBkb21haW46IHN0cmluZyxcbiAgICB0ZW1wbGF0ZU5hbWU6IHN0cmluZyxcbiAgICB0YWc6IHN0cmluZyxcbiAgICBkYXRhOiBEb21haW5UZW1wbGF0ZVVwZGF0ZVZlcnNpb25EYXRhXG4gICk6IFByb21pc2U8TXV0YXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXRXaXRoRkQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RlbXBsYXRlcy8nLCB0ZW1wbGF0ZU5hbWUsICcvdmVyc2lvbnMvJywgdGFnKSwgZGF0YSlcbiAgICAgIC50aGVuKFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgICAgICAocmVzOiBNdXRhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25BUElSZXNwb25zZSkgPT4gdGhpcy5wYXJzZU11dGF0ZVRlbXBsYXRlVmVyc2lvblJlc3BvbnNlKHJlcylcbiAgICAgICk7XG4gIH1cblxuICBkZXN0cm95VmVyc2lvbihcbiAgICBkb21haW46IHN0cmluZyxcbiAgICB0ZW1wbGF0ZU5hbWU6IHN0cmluZyxcbiAgICB0YWc6IHN0cmluZ1xuICApOiBQcm9taXNlPE11dGF0ZURvbWFpblRlbXBsYXRlVmVyc2lvblJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90ZW1wbGF0ZXMvJywgdGVtcGxhdGVOYW1lLCAnL3ZlcnNpb25zLycsIHRhZykpXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgICAgLnRoZW4oKHJlczogTXV0YXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uQVBJUmVzcG9uc2UpID0+IHRoaXMucGFyc2VNdXRhdGVUZW1wbGF0ZVZlcnNpb25SZXNwb25zZShyZXMpKTtcbiAgfVxuXG4gIGxpc3RWZXJzaW9ucyhcbiAgICBkb21haW46IHN0cmluZyxcbiAgICB0ZW1wbGF0ZU5hbWU6IHN0cmluZyxcbiAgICBxdWVyeT86IERvbWFpblRlbXBsYXRlc1F1ZXJ5XG4gICk6IFByb21pc2U8TGlzdERvbWFpblRlbXBsYXRlVmVyc2lvbnNSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGVtcGxhdGVzJywgdGVtcGxhdGVOYW1lLCAnL3ZlcnNpb25zJyksIHF1ZXJ5KVxuICAgICAgLnRoZW4oXG4gICAgICAgIChyZXM6IExpc3REb21haW5UZW1wbGF0ZVZlcnNpb25zQVBJUmVzcG9uc2UpID0+IHRoaXMucGFyc2VMaXN0VGVtcGxhdGVWZXJzaW9ucyhyZXMpXG4gICAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgdXJsam9pbiBmcm9tICd1cmwtam9pbic7XG5pbXBvcnQgTmF2aWdhdGlvblRocnVQYWdlcyBmcm9tICcuL2NvbW1vbi9OYXZpZ2F0aW9uVGhydVBhZ2VzJztcbmltcG9ydCB7XG4gIEV2ZW50c0xpc3QsXG4gIEV2ZW50c1F1ZXJ5LFxuICBFdmVudHNSZXNwb25zZSxcbn0gZnJvbSAnLi4vVHlwZXMvRXZlbnRzJztcblxuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9jb21tb24vUmVxdWVzdCc7XG5pbXBvcnQgeyBJRXZlbnRDbGllbnQgfSBmcm9tICcuLi9JbnRlcmZhY2VzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXZlbnRDbGllbnRcbiAgZXh0ZW5kcyBOYXZpZ2F0aW9uVGhydVBhZ2VzPEV2ZW50c0xpc3Q+XG4gIGltcGxlbWVudHMgSUV2ZW50Q2xpZW50IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0KSB7XG4gICAgc3VwZXIocmVxdWVzdCk7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgfVxuXG4gIHByb3RlY3RlZCBwYXJzZUxpc3QoXG4gICAgcmVzcG9uc2U6IEV2ZW50c1Jlc3BvbnNlLFxuICApOiBFdmVudHNMaXN0IHtcbiAgICBjb25zdCBkYXRhID0ge30gYXMgRXZlbnRzTGlzdDtcbiAgICBkYXRhLml0ZW1zID0gcmVzcG9uc2UuYm9keS5pdGVtcztcblxuICAgIGRhdGEucGFnZXMgPSB0aGlzLnBhcnNlUGFnZUxpbmtzKHJlc3BvbnNlLCAnLycpO1xuICAgIGRhdGEuc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgYXN5bmMgZ2V0KGRvbWFpbjogc3RyaW5nLCBxdWVyeT86IEV2ZW50c1F1ZXJ5KSA6IFByb21pc2U8RXZlbnRzTGlzdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3RMaXN0V2l0aFBhZ2VzKHVybGpvaW4oJy92MycsIGRvbWFpbiwgJ2V2ZW50cycpLCBxdWVyeSk7XG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlIGNhbWVsY2FzZSAqL1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9jb21tb24vUmVxdWVzdCc7XG5cbmltcG9ydCB7XG4gIElwUG9vbENyZWF0ZURhdGEsXG4gIElwUG9vbENyZWF0ZVJlc3BvbnNlLFxuICBJcFBvb2xDcmVhdGVSZXN1bHQsXG4gIElwUG9vbERlbGV0ZURhdGEsXG4gIElwUG9vbExpc3RSZXNwb25zZSxcbiAgSXBQb29sTGlzdFJlc3VsdCxcbiAgSXBQb29sTWVzc2FnZVJlc3BvbnNlLFxuICBJcFBvb2xNZXNzYWdlUmVzdWx0LFxuICBJcFBvb2xVcGRhdGVEYXRhLFxufSBmcm9tICcuLi9UeXBlcy9JUFBvb2xzJztcbmltcG9ydCB7IElJUFBvb2xzQ2xpZW50IH0gZnJvbSAnLi4vSW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElwUG9vbHNDbGllbnQgaW1wbGVtZW50cyBJSVBQb29sc0NsaWVudCB7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCkge1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gIH1cblxuICBsaXN0KCk6IFByb21pc2U8SXBQb29sTGlzdFJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KCcvdjEvaXBfcG9vbHMnKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiBJcFBvb2xMaXN0UmVzcG9uc2UpID0+IHRoaXMucGFyc2VJcFBvb2xzUmVzcG9uc2UocmVzcG9uc2UpKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZShkYXRhOiBJcFBvb2xDcmVhdGVEYXRhKTogUHJvbWlzZTxJcFBvb2xDcmVhdGVSZXN1bHQ+IHtcbiAgICBjb25zdCByZXNwb25zZTogSXBQb29sQ3JlYXRlUmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRCgnL3YxL2lwX3Bvb2xzJywgZGF0YSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgLi4ucmVzcG9uc2UuYm9keVxuICAgIH07XG4gIH1cblxuICBhc3luYyB1cGRhdGUocG9vbElkOiBzdHJpbmcsIGRhdGE6IElwUG9vbFVwZGF0ZURhdGEpOiBQcm9taXNlPElwUG9vbE1lc3NhZ2VSZXN1bHQ+IHtcbiAgICBjb25zdCByZXNwb25zZTogSXBQb29sTWVzc2FnZVJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LnBhdGNoV2l0aEZEKGAvdjEvaXBfcG9vbHMvJHtwb29sSWR9YCwgZGF0YSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgLi4ucmVzcG9uc2UuYm9keVxuICAgIH07XG4gIH1cblxuICBhc3luYyBkZWxldGUocG9vbElkOiBzdHJpbmcsIGRhdGE6IElwUG9vbERlbGV0ZURhdGEpOiBQcm9taXNlPElwUG9vbE1lc3NhZ2VSZXN1bHQ+IHtcbiAgICBjb25zdCByZXNwb25zZTpJcFBvb2xNZXNzYWdlUmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QuZGVsZXRlKGAvdjEvaXBfcG9vbHMvJHtwb29sSWR9YCwgZGF0YSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgLi4ucmVzcG9uc2UuYm9keVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHBhcnNlSXBQb29sc1Jlc3BvbnNlKHJlc3BvbnNlOiBJcFBvb2xMaXN0UmVzcG9uc2UpOiBJcFBvb2xMaXN0UmVzdWx0IHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAuLi5yZXNwb25zZS5ib2R5XG4gICAgfTtcbiAgfVxufVxuIiwiaW1wb3J0IE1nUmVxdWVzdCBmcm9tICcuL2NvbW1vbi9SZXF1ZXN0JztcbmltcG9ydCB7IElwRGF0YSwgSVBzTGlzdFF1ZXJ5LCBJcHNMaXN0UmVzcG9uc2VCb2R5IH0gZnJvbSAnLi4vVHlwZXMvSVBzJztcbmltcG9ydCB7IElJUHNDbGllbnQgfSBmcm9tICcuLi9JbnRlcmZhY2VzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSXBzQ2xpZW50IGltcGxlbWVudHMgSUlQc0NsaWVudCB7XG4gIHJlcXVlc3Q6IE1nUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBNZ1JlcXVlc3QpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICB9XG5cbiAgYXN5bmMgbGlzdChxdWVyeT86IElQc0xpc3RRdWVyeSk6IFByb21pc2U8SXBzTGlzdFJlc3BvbnNlQm9keT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LmdldCgnL3YzL2lwcycsIHF1ZXJ5KTtcbiAgICByZXR1cm4gdGhpcy5wYXJzZUlwc1Jlc3BvbnNlPElwc0xpc3RSZXNwb25zZUJvZHk+KHJlc3BvbnNlKTtcbiAgfVxuXG4gIGFzeW5jIGdldChpcDogc3RyaW5nKTogUHJvbWlzZTxJcERhdGE+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5nZXQoYC92My9pcHMvJHtpcH1gKTtcbiAgICByZXR1cm4gdGhpcy5wYXJzZUlwc1Jlc3BvbnNlPElwRGF0YT4ocmVzcG9uc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUlwc1Jlc3BvbnNlPFQ+KHJlc3BvbnNlOiB7IGJvZHk6IFQgfSk6IFQge1xuICAgIHJldHVybiByZXNwb25zZS5ib2R5O1xuICB9XG59XG4iLCJpbXBvcnQgeyBJSW5ib3hQbGFjZW1lbnRzQXR0cmlidXRlc0NsaWVudCB9IGZyb20gJy4uLy4uL0ludGVyZmFjZXMnO1xuaW1wb3J0IHtcbiAgSW5ib3hQbGFjZW1lbnRzQXR0cmlidXRlc0FwaVJlc3BvbnNlLFxuICBJbmJveFBsYWNlbWVudHNBdHRyaWJ1dGVzUmVzdWx0LFxuICBJbmJveFBsYWNlbWVudHNWYWx1ZXNBcGlSZXNwb25zZSxcbiAgSW5ib3hQbGFjZW1lbnRzVmFsdWVzUmVzdWx0XG59IGZyb20gJy4uLy4uL1R5cGVzL0luYm94UGxhY2VtZW50cyc7XG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuLi9jb21tb24vUmVxdWVzdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEluYm94UGxhY2VtZW50c0F0dHJpYnV0ZXNDbGllbnQgaW1wbGVtZW50cyBJSW5ib3hQbGFjZW1lbnRzQXR0cmlidXRlc0NsaWVudCB7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG4gIHBhdGg6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICByZXF1ZXN0OiBSZXF1ZXN0LFxuICAgIHBhdGg6IHN0cmluZ1xuICApIHtcbiAgICB0aGlzLnBhdGggPSBwYXRoO1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gIH1cblxuICBhc3luYyBsaXN0KCk6IFByb21pc2U8SW5ib3hQbGFjZW1lbnRzQXR0cmlidXRlc1Jlc3VsdD4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LmdldCh0aGlzLnBhdGgpIGFzIEluYm94UGxhY2VtZW50c0F0dHJpYnV0ZXNBcGlSZXNwb25zZTtcbiAgICByZXR1cm4ge1xuICAgICAgaXRlbXM6IHJlc3BvbnNlLmJvZHkuaXRlbXMsXG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICB9IGFzIEluYm94UGxhY2VtZW50c0F0dHJpYnV0ZXNSZXN1bHQ7XG4gIH1cblxuICBhc3luYyBnZXQoYXR0cmlidXRlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxJbmJveFBsYWNlbWVudHNWYWx1ZXNSZXN1bHQ+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5nZXQoYCR7dGhpcy5wYXRofS8ke2F0dHJpYnV0ZU5hbWV9YCkgYXMgSW5ib3hQbGFjZW1lbnRzVmFsdWVzQXBpUmVzcG9uc2U7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnJlc3BvbnNlLmJvZHksXG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1c1xuICAgIH07XG4gIH1cbn1cbiIsImltcG9ydCB7IEluYm94UGxhY2VtZW50c0ZpbHRlcnNBcGlSZXNwb25zZSwgSW5ib3hQbGFjZW1lbnRzRmlsdGVyc1Jlc3VsdCB9IGZyb20gJy4uLy4uL1R5cGVzL0luYm94UGxhY2VtZW50cyc7XG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuLi9jb21tb24vUmVxdWVzdCc7XG5pbXBvcnQgeyBJSW5ib3hQbGFjZW1lbnRzRmlsdGVyc0NsaWVudCB9IGZyb20gJy4uLy4uL0ludGVyZmFjZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbmJveFBsYWNlbWVudHNGaWx0ZXJzQ2xpZW50IGltcGxlbWVudHMgSUluYm94UGxhY2VtZW50c0ZpbHRlcnNDbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuICBwYXRoOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcmVxdWVzdDogUmVxdWVzdCxcbiAgICBwYXRoOiBzdHJpbmdcbiAgKSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICB0aGlzLnBhdGggPSBwYXRoO1xuICB9XG5cbiAgYXN5bmMgbGlzdCgpOiBQcm9taXNlPEluYm94UGxhY2VtZW50c0ZpbHRlcnNSZXN1bHQ+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJlcXVlc3QuZ2V0KHRoaXMucGF0aCkgYXMgSW5ib3hQbGFjZW1lbnRzRmlsdGVyc0FwaVJlc3BvbnNlO1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IHJlc3VsdC5zdGF0dXMsXG4gICAgICBzdXBwb3J0ZWRfZmlsdGVyczogcmVzdWx0LmJvZHkuc3VwcG9ydGVkX2ZpbHRlcnNcbiAgICB9O1xuICB9XG59XG4iLCJpbXBvcnQge1xuICBJSVBSU2hhcmluZ0NsaWVudCxcbiAgSUluYm94UGxhY2VtZW50c0F0dHJpYnV0ZXNDbGllbnQsXG4gIElJbmJveFBsYWNlbWVudHNGaWx0ZXJzQ2xpZW50LFxuICBJSW5ib3hQbGFjZW1lbnRzUmVzdWx0c0NsaWVudCxcbiAgSUxvZ2dlclxufSBmcm9tICcuLi8uLi8uLi9JbnRlcmZhY2VzJztcblxuaW1wb3J0IHtcbiAgSW5ib3hQbGFjZW1lbnRzQm94LFxuICBJbmJveFBsYWNlbWVudHNEZXN0cm95QVBJUmVzcG9uc2UsXG4gIEluYm94UGxhY2VtZW50c0Rlc3Ryb3lSZXN1bHQsXG4gIEluYm94UGxhY2VtZW50c1Jlc3VsdCxcbiAgSW5ib3hQbGFjZW1lbnRzUmVzdWx0QVBJUmVzcG9uc2UsXG4gIEluYm94UGxhY2VtZW50c1Jlc3VsdEFQSVNoYXBlLFxuICBJbmJveFBsYWNlbWVudHNSZXN1bHRXaXRoU3RhdHVzLFxuICBJbmJveFBsYWNlbWVudHNSZXN1bHRzQXBpUXVlcnksXG4gIEluYm94UGxhY2VtZW50c1Jlc3VsdHNEYXRlcyxcbiAgSW5ib3hQbGFjZW1lbnRzUmVzdWx0c0xpc3QsXG4gIEluYm94UGxhY2VtZW50c1Jlc3VsdHNMaXN0QVBJUmVzcG9uc2UsXG4gIEluYm94UGxhY2VtZW50c1Jlc3VsdHNRdWVyeVxufSBmcm9tICcuLi8uLi8uLi9UeXBlcy9JbmJveFBsYWNlbWVudHMnO1xuXG5pbXBvcnQgTmF2aWdhdGlvblRocnVQYWdlcyBmcm9tICcuLi8uLi9jb21tb24vTmF2aWdhdGlvblRocnVQYWdlcyc7XG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuLi8uLi9jb21tb24vUmVxdWVzdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEluYm94UGxhY2VtZW50c1Jlc3VsdHNDbGllbnRcbiAgZXh0ZW5kcyBOYXZpZ2F0aW9uVGhydVBhZ2VzPEluYm94UGxhY2VtZW50c1Jlc3VsdHNMaXN0PlxuICBpbXBsZW1lbnRzIElJbmJveFBsYWNlbWVudHNSZXN1bHRzQ2xpZW50IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcbiAgcHVibGljIGF0dHJpYnV0ZXM6IElJbmJveFBsYWNlbWVudHNBdHRyaWJ1dGVzQ2xpZW50O1xuICBwdWJsaWMgZmlsdGVyczogSUluYm94UGxhY2VtZW50c0ZpbHRlcnNDbGllbnQ7XG4gIHB1YmxpYyBzaGFyaW5nOiBJSVBSU2hhcmluZ0NsaWVudDtcbiAgcHJpdmF0ZSBsb2dnZXI6IElMb2dnZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcmVxdWVzdDogUmVxdWVzdCxcbiAgICBhdHRyaWJ1dGVzOiBJSW5ib3hQbGFjZW1lbnRzQXR0cmlidXRlc0NsaWVudCxcbiAgICBmaWx0ZXJzOiBJSW5ib3hQbGFjZW1lbnRzRmlsdGVyc0NsaWVudCxcbiAgICBzaGFyaW5nOiBJSVBSU2hhcmluZ0NsaWVudCxcbiAgICBsb2dnZXI6IElMb2dnZXIgPSBjb25zb2xlXG4gICkge1xuICAgIHN1cGVyKHJlcXVlc3QpO1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgdGhpcy5hdHRyaWJ1dGVzID0gYXR0cmlidXRlcztcbiAgICB0aGlzLmZpbHRlcnMgPSBmaWx0ZXJzO1xuICAgIHRoaXMuc2hhcmluZyA9IHNoYXJpbmc7XG4gICAgdGhpcy5sb2dnZXIgPSBsb2dnZXI7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnREYXRlVG9VVEMoa2V5OnN0cmluZywgaW5wdXREYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgICAvKlxuICAgICAgQmVjYXVzZSBcIm5ldyBEYXRlKCcyMDIyLTEyLTI1VDAwOjAwOjAwLjAwMFonKVwiIGJlY29tZXMgXCJTdW4gRGVjIDI1IDIwMjIgMDI6MDA6MDAgR01UKzAyMDBcIlxuICAgICAgKHBsdXMgMiBob3VycyBmcm9tIHRoZSB0aW1lem9uZSlcbiAgICAgIGFuZCBiZWNhdXNlIGZvciBBUEksIHdlIG5lZWQgdG8gcHJvdmlkZSB0aGUgZGF0ZSBpbiB0aGUgZXhwZWN0ZWQgZm9ybWF0XG4gICAgICBleDogJ1RodSwgMTMgT2N0IDIwMTEgMTg6MDI6MDAgKzAwMDAnLlxuICAgICAgSGVyZSB3ZSB0cnkgYXV0by1jb252ZXJ0IHRoZW0gdG8gVVRDXG4gICAgKi9cbiAgICB0aGlzLmxvZ2dlci53YXJuKGBEYXRlOiBcIiR7aW5wdXREYXRlfVwiIHdhcyBhdXRvLWNvbnZlcnRlZCB0byBVVEMgdGltZSB6b25lLlxuVmFsdWUgXCIke2lucHV0RGF0ZS50b0lTT1N0cmluZygpfVwiIHdpbGwgYmUgdXNlZCBmb3IgcmVxdWVzdC5cbkNvbnNpZGVyIHVzaW5nIHN0cmluZyB0eXBlIGZvciBwcm9wZXJ0eSBcIiR7a2V5fVwiIHRvIGF2b2lkIGF1dG8tY29udmVydGluZ2ApO1xuICAgIHJldHVybiBpbnB1dERhdGUudG9JU09TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJlcGFyZVF1ZXJ5RGF0YShcbiAgICBxdWVyeURhdGE6IEluYm94UGxhY2VtZW50c1Jlc3VsdHNRdWVyeVxuICApOiBJbmJveFBsYWNlbWVudHNSZXN1bHRzQXBpUXVlcnkge1xuICAgIGNvbnN0IHByb3BzRm9yUmVwbGFjZW1lbnQgPSBxdWVyeURhdGEgYXMgSW5ib3hQbGFjZW1lbnRzUmVzdWx0c0RhdGVzO1xuICAgIGNvbnN0IHJlcGxhY2VkUHJvcHMgPSBPYmplY3Qua2V5cyhwcm9wc0ZvclJlcGxhY2VtZW50KS5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgICBjb25zdCBwcm9wID0ga2V5IGFzIGtleW9mIEluYm94UGxhY2VtZW50c1Jlc3VsdHNEYXRlcztcbiAgICAgIGlmICghIXByb3BzRm9yUmVwbGFjZW1lbnRbcHJvcF0gJiYgdHlwZW9mIHByb3BzRm9yUmVwbGFjZW1lbnRbcHJvcF0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcXVlcnlEYXRhW3Byb3BdIGFzIERhdGU7XG4gICAgICAgIGFjY1twcm9wXSA9IHRoaXMuY29udmVydERhdGVUb1VUQyhwcm9wLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9IGFzIFJlY29yZDxrZXlvZiBJbmJveFBsYWNlbWVudHNSZXN1bHRzRGF0ZXMsIHN0cmluZz4pO1xuXG4gICAgY29uc3QgcmVzdWx0OiBJbmJveFBsYWNlbWVudHNSZXN1bHRzQXBpUXVlcnkgPSB7XG4gICAgICAuLi5xdWVyeURhdGEsXG4gICAgICAuLi5yZXBsYWNlZFByb3BzXG4gICAgfTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVwYXJlSW5ib3hQbGFjZW1lbnRzUmVzdWx0KGRhdGE6IEluYm94UGxhY2VtZW50c1Jlc3VsdEFQSVNoYXBlKTogSW5ib3hQbGFjZW1lbnRzUmVzdWx0IHtcbiAgICBsZXQgYm94ID0ge30gYXMgSW5ib3hQbGFjZW1lbnRzQm94O1xuXG4gICAgY29uc3QgaGFuZGxlZFNlZWRMaXN0RGF0ZXMgPSB7XG4gICAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZShkYXRhLmNyZWF0ZWRfYXQpLFxuICAgICAgdXBkYXRlZF9hdDogbmV3IERhdGUoZGF0YS51cGRhdGVkX2F0KSxcbiAgICAgIHNoYXJpbmdfZXhwaXJlc19hdDogbmV3IERhdGUoZGF0YS5zaGFyaW5nX2V4cGlyZXNfYXQpLFxuICAgIH07XG5cbiAgICBpZiAoZGF0YS5Cb3gpIHtcbiAgICAgIGJveCA9IHtcbiAgICAgICAgLi4uZGF0YS5Cb3gsXG4gICAgICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKGRhdGEuQm94LmNyZWF0ZWRfYXQpLFxuICAgICAgICB1cGRhdGVkX2F0OiBuZXcgRGF0ZShkYXRhLkJveC51cGRhdGVkX2F0KSxcbiAgICAgICAgbGFzdF9yZXN1bHRfYXQ6IG5ldyBEYXRlKGRhdGEuQm94Lmxhc3RfcmVzdWx0X2F0KSxcbiAgICAgIH07XG4gICAgICBkZWxldGUgKGJveCBhcyB7SUQ/OiBzdHJpbmd9KS5JRDtcbiAgICB9XG5cbiAgICBjb25zdCBpbmJveFBsYWNlbWVudHNSZXN1bHQ6IEluYm94UGxhY2VtZW50c1Jlc3VsdCA9IHtcbiAgICAgIC4uLmRhdGEsXG4gICAgICBCb3g6IGJveCxcbiAgICAgIC4uLmhhbmRsZWRTZWVkTGlzdERhdGVzLFxuICAgICAgaWQ6IGRhdGEuSWQsXG4gICAgfTtcblxuICAgIGRlbGV0ZSAoaW5ib3hQbGFjZW1lbnRzUmVzdWx0IGFzIHtJRD86IHN0cmluZ30pLklEO1xuXG4gICAgcmV0dXJuIGluYm94UGxhY2VtZW50c1Jlc3VsdDtcbiAgfVxuXG4gIHByb3RlY3RlZCBwYXJzZUxpc3QocmVzcG9uc2U6IEluYm94UGxhY2VtZW50c1Jlc3VsdHNMaXN0QVBJUmVzcG9uc2UpOiBJbmJveFBsYWNlbWVudHNSZXN1bHRzTGlzdCB7XG4gICAgY29uc3QgZGF0YSA9IHt9IGFzIEluYm94UGxhY2VtZW50c1Jlc3VsdHNMaXN0O1xuXG4gICAgZGF0YS5pdGVtcyA9IHJlc3BvbnNlLmJvZHkuaXRlbXMubWFwKFxuICAgICAgKGl0ZW06IEluYm94UGxhY2VtZW50c1Jlc3VsdEFQSVNoYXBlKVxuICAgICAgICA6IEluYm94UGxhY2VtZW50c1Jlc3VsdCA9PiB0aGlzLnByZXBhcmVJbmJveFBsYWNlbWVudHNSZXN1bHQoaXRlbSlcbiAgICApO1xuXG4gICAgZGF0YS5wYWdlcyA9IHRoaXMucGFyc2VQYWdlTGlua3MocmVzcG9uc2UsICc/JywgJ2FkZHJlc3MnKTtcbiAgICBkYXRhLnN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgYXN5bmMgbGlzdChxdWVyeTogSW5ib3hQbGFjZW1lbnRzUmVzdWx0c1F1ZXJ5KTogUHJvbWlzZTxJbmJveFBsYWNlbWVudHNSZXN1bHRzTGlzdD4ge1xuICAgIGNvbnN0IHF1ZXJ5RGF0YSA9IHRoaXMucHJlcGFyZVF1ZXJ5RGF0YShxdWVyeSk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QuZ2V0KCcvdjQvaW5ib3gvcmVzdWx0cycsIHF1ZXJ5RGF0YSkgYXMgSW5ib3hQbGFjZW1lbnRzUmVzdWx0c0xpc3RBUElSZXNwb25zZTtcbiAgICByZXR1cm4gdGhpcy5wYXJzZUxpc3QocmVzcG9uc2UpO1xuICB9XG5cbiAgYXN5bmMgZ2V0KGlkOiBzdHJpbmcpOiBQcm9taXNlPEluYm94UGxhY2VtZW50c1Jlc3VsdFdpdGhTdGF0dXM+IHtcbiAgICBjb25zdCByZXNwb25zZTogSW5ib3hQbGFjZW1lbnRzUmVzdWx0QVBJUmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QuZ2V0KGAvdjQvaW5ib3gvcmVzdWx0cy8ke2lkfWApIGFzIEluYm94UGxhY2VtZW50c1Jlc3VsdEFQSVJlc3BvbnNlO1xuICAgIGNvbnN0IGluYm94UGxhY2VtZW50UmVzdWx0OiBJbmJveFBsYWNlbWVudHNSZXN1bHQgPSB0aGlzLnByZXBhcmVJbmJveFBsYWNlbWVudHNSZXN1bHQoXG4gICAgICByZXNwb25zZS5ib2R5LnJlc3VsdFxuICAgICk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgaW5ib3hQbGFjZW1lbnRSZXN1bHRcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZGVzdHJveShpZDogc3RyaW5nKSA6IFByb21pc2U8SW5ib3hQbGFjZW1lbnRzRGVzdHJveVJlc3VsdD4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LmRlbGV0ZShgL3Y0L2luYm94L3Jlc3VsdHMvJHtpZH1gKSBhcyBJbmJveFBsYWNlbWVudHNEZXN0cm95QVBJUmVzcG9uc2U7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgLi4ucmVzcG9uc2UuYm9keVxuICAgIH07XG4gIH1cblxuICBhc3luYyBnZXRSZXN1bHRCeVNoYXJlSWQoc2hhcmVJZDogc3RyaW5nKTogUHJvbWlzZTxJbmJveFBsYWNlbWVudHNSZXN1bHRXaXRoU3RhdHVzPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QuZ2V0KGAvdjQvaW5ib3gvc2hhcmluZy9wdWJsaWMvJHtzaGFyZUlkfWApIGFzIEluYm94UGxhY2VtZW50c1Jlc3VsdEFQSVJlc3BvbnNlO1xuICAgIGNvbnN0IGluYm94UGxhY2VtZW50UmVzdWx0OiBJbmJveFBsYWNlbWVudHNSZXN1bHQgPSB0aGlzLnByZXBhcmVJbmJveFBsYWNlbWVudHNSZXN1bHQoXG4gICAgICByZXNwb25zZS5ib2R5LnJlc3VsdFxuICAgICk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgaW5ib3hQbGFjZW1lbnRSZXN1bHRcbiAgICB9O1xuICB9XG59XG4iLCJpbXBvcnQgeyBJSVBSU2hhcmluZ0NsaWVudCB9IGZyb20gJy4uLy4uLy4uL0ludGVyZmFjZXMnO1xuaW1wb3J0IHtcbiAgSVBSU2hhcmluZ0FQSVJlc3BvbnNlLFxuICBJUFJTaGFyaW5nQXBpU2hhcGUsXG4gIElQUlNoYXJpbmdSZXN1bHQsXG4gIElQUlNoYXJpbmdVcGRhdGVBUElSZXNwb25zZSxcbiAgSVBSU2hhcmluZ1VwZGF0ZURhdGEsXG4gIElQUlNoYXJpbmdVcGRhdGVSZXN1bHRcbn0gZnJvbSAnLi4vLi4vLi4vVHlwZXMvSW5ib3hQbGFjZW1lbnRzJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4uLy4uL2NvbW1vbi9SZXF1ZXN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSVBSU2hhcmluZ0NsaWVudCBpbXBsZW1lbnRzIElJUFJTaGFyaW5nQ2xpZW50IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICByZXF1ZXN0OiBSZXF1ZXN0LFxuICApIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVwYXJlSW5ib3hQbGFjZW1lbnRzUmVzdWx0U2hhcmluZyhkYXRhOiBJUFJTaGFyaW5nQXBpU2hhcGUpOiBJUFJTaGFyaW5nUmVzdWx0IHtcbiAgICBjb25zdCBoYW5kbGVkU2VlZExpc3REYXRlcyA9IHtcbiAgICAgIGV4cGlyZXNfYXQ6IG5ldyBEYXRlKGRhdGEuZXhwaXJlc19hdCksXG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3VsdDogSVBSU2hhcmluZ1Jlc3VsdCA9IHtcbiAgICAgIC4uLmRhdGEsXG4gICAgICAuLi5oYW5kbGVkU2VlZExpc3REYXRlc1xuICAgIH07XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgYXN5bmMgZ2V0KGlkOiBzdHJpbmcpOiBQcm9taXNlPElQUlNoYXJpbmdSZXN1bHQgJiB7c3RhdHVzOiBudW1iZXJ9PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QuZ2V0KGAvdjQvaW5ib3gvc2hhcmluZy8ke2lkfWApIGFzIElQUlNoYXJpbmdBUElSZXNwb25zZTtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLnByZXBhcmVJbmJveFBsYWNlbWVudHNSZXN1bHRTaGFyaW5nKHJlc3BvbnNlLmJvZHkuc2hhcmluZyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgLi4ucmVzdWx0XG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZShcbiAgICBpZDogc3RyaW5nLFxuICAgIGRhdGE6IElQUlNoYXJpbmdVcGRhdGVEYXRhXG4gICk6IFByb21pc2U8SVBSU2hhcmluZ1VwZGF0ZVJlc3VsdCAmIHsgc3RhdHVzOiBudW1iZXIgfT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LnB1dChgL3Y0L2luYm94L3NoYXJpbmcvJHtpZH1gLCB7fSwgeyBxdWVyeTogYGVuYWJsZWQ9JHtkYXRhLmVuYWJsZWR9YCB9KSBhcyBJUFJTaGFyaW5nVXBkYXRlQVBJUmVzcG9uc2U7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5wcmVwYXJlSW5ib3hQbGFjZW1lbnRzUmVzdWx0U2hhcmluZyhyZXNwb25zZS5ib2R5LnNoYXJpbmcpO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5yZXN1bHQsXG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1c1xuICAgIH07XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIElMb2dnZXIsXG4gIElJbmJveFBsYWNlbWVudHNBdHRyaWJ1dGVzQ2xpZW50LFxuICBJU2VlZHNMaXN0c0NsaWVudCxcbiAgSUluYm94UGxhY2VtZW50c0ZpbHRlcnNDbGllbnRcbn0gZnJvbSAnLi4vLi4vLi4vSW50ZXJmYWNlcyc7XG5pbXBvcnQge1xuICBTZWVkTGlzdCxcbiAgU2VlZExpc3RBUElTaGFwZSxcbiAgU2VlZHNMaXN0c0FQSVF1ZXJ5LFxuICBTZWVkc0xpc3RzQVBJUXVlcnlEYXRlcyxcbiAgU2VlZHNMaXN0c0FQSVJlc3BvbnNlLFxuICBTZWVkc0xpc3RzQ3JlYXRpbmdEYXRhLFxuICBTZWVkc0xpc3RzUXVlcnksXG4gIFNlZWRzTGlzdHNSZXN1bHQsXG4gIFNlZWQsXG4gIFNlZWRBUElTaGFwZSxcbiAgU2VlZHNMaXN0c0Rlc3Ryb3lBcGlSZXNwb25zZSxcbiAgU2VlZHNMaXN0c1VwZGF0aW5nRGF0YSxcbiAgU2VlZExpc3RSZXN1bHQsXG4gIFNlZWRMaXN0R2V0QVBJUmVzcG9uc2UsXG4gIFNlZWRMaXN0QVBJUmVzcG9uc2Vcbn0gZnJvbSAnLi4vLi4vLi4vVHlwZXMvSW5ib3hQbGFjZW1lbnRzJztcbmltcG9ydCBOYXZpZ2F0aW9uVGhydVBhZ2VzIGZyb20gJy4uLy4uL2NvbW1vbi9OYXZpZ2F0aW9uVGhydVBhZ2VzJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4uLy4uL2NvbW1vbi9SZXF1ZXN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2VlZHNMaXN0c0NsaWVudFxuICBleHRlbmRzIE5hdmlnYXRpb25UaHJ1UGFnZXM8U2VlZHNMaXN0c1Jlc3VsdD5cbiAgaW1wbGVtZW50cyBJU2VlZHNMaXN0c0NsaWVudCB7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG4gIHB1YmxpYyBhdHRyaWJ1dGVzOiBJSW5ib3hQbGFjZW1lbnRzQXR0cmlidXRlc0NsaWVudDtcbiAgcHVibGljIGZpbHRlcnM6IElJbmJveFBsYWNlbWVudHNGaWx0ZXJzQ2xpZW50O1xuICBwcml2YXRlIGxvZ2dlcjogSUxvZ2dlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICByZXF1ZXN0OiBSZXF1ZXN0LFxuICAgIGF0dHJpYnV0ZXM6IElJbmJveFBsYWNlbWVudHNBdHRyaWJ1dGVzQ2xpZW50LFxuICAgIGZpbHRlcnM6IElJbmJveFBsYWNlbWVudHNGaWx0ZXJzQ2xpZW50LFxuICAgIGxvZ2dlcjogSUxvZ2dlciA9IGNvbnNvbGVcbiAgKSB7XG4gICAgc3VwZXIocmVxdWVzdCk7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzO1xuICAgIHRoaXMuZmlsdGVycyA9IGZpbHRlcnM7XG4gICAgdGhpcy5sb2dnZXIgPSBsb2dnZXI7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnREYXRlVG9VVEMoa2V5OnN0cmluZywgaW5wdXREYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgICAvKlxuICAgICAgQmVjYXVzZSBcIm5ldyBEYXRlKCcyMDIyLTEyLTI1VDAwOjAwOjAwLjAwMFonKVwiIGJlY29tZXMgXCJTdW4gRGVjIDI1IDIwMjIgMDI6MDA6MDAgR01UKzAyMDBcIlxuICAgICAgKHBsdXMgMiBob3VycyBmcm9tIHRoZSB0aW1lem9uZSlcbiAgICAgIGFuZCBiZWNhdXNlIGZvciBBUEksIHdlIG5lZWQgdG8gcHJvdmlkZSB0aGUgZGF0ZSBpbiB0aGUgZXhwZWN0ZWQgZm9ybWF0XG4gICAgICBleDogJ1RodSwgMTMgT2N0IDIwMTEgMTg6MDI6MDAgKzAwMDAnLlxuICAgICAgSGVyZSB3ZSB0cnkgYXV0by1jb252ZXJ0IHRoZW0gdG8gVVRDXG4gICAgKi9cbiAgICB0aGlzLmxvZ2dlci53YXJuKGBEYXRlOiBcIiR7aW5wdXREYXRlfVwiIHdhcyBhdXRvLWNvbnZlcnRlZCB0byBVVEMgdGltZSB6b25lLlxuVmFsdWUgXCIke2lucHV0RGF0ZS50b0lTT1N0cmluZygpfVwiIHdpbGwgYmUgdXNlZCBmb3IgcmVxdWVzdC5cbkNvbnNpZGVyIHVzaW5nIHN0cmluZyB0eXBlIGZvciBwcm9wZXJ0eSBcIiR7a2V5fVwiIHRvIGF2b2lkIGF1dG8tY29udmVydGluZ2ApO1xuICAgIHJldHVybiBpbnB1dERhdGUudG9JU09TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJlcGFyZVF1ZXJ5RGF0YShxdWVyeURhdGE6IFNlZWRzTGlzdHNRdWVyeSkgOiBTZWVkc0xpc3RzQVBJUXVlcnkge1xuICAgIGNvbnN0IHByb3BzRm9yUmVwbGFjZW1lbnQgPSBxdWVyeURhdGEgYXMgU2VlZHNMaXN0c0FQSVF1ZXJ5RGF0ZXM7XG4gICAgY29uc3QgcmVwbGFjZWRQcm9wcyA9IE9iamVjdC5rZXlzKHByb3BzRm9yUmVwbGFjZW1lbnQpLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICAgIGNvbnN0IHByb3AgPSBrZXkgYXMga2V5b2YgU2VlZHNMaXN0c0FQSVF1ZXJ5RGF0ZXM7XG4gICAgICBpZiAoISFwcm9wc0ZvclJlcGxhY2VtZW50W3Byb3BdICYmIHR5cGVvZiBwcm9wc0ZvclJlcGxhY2VtZW50W3Byb3BdID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHF1ZXJ5RGF0YVtwcm9wXSBhcyBEYXRlO1xuICAgICAgICBhY2NbcHJvcF0gPSB0aGlzLmNvbnZlcnREYXRlVG9VVEMocHJvcCwgdmFsdWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSBhcyBSZWNvcmQ8a2V5b2YgU2VlZHNMaXN0c0FQSVF1ZXJ5RGF0ZXMsIHN0cmluZz4pO1xuXG4gICAgY29uc3QgcmVzdWx0OiBTZWVkc0xpc3RzQVBJUXVlcnkgPSB7XG4gICAgICAuLi5xdWVyeURhdGEsXG4gICAgICAuLi5yZXBsYWNlZFByb3BzXG4gICAgfTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVwYXJlUmVzdWx0KGRhdGE6IFNlZWRMaXN0QVBJUmVzcG9uc2UpOiBTZWVkTGlzdFJlc3VsdCB7XG4gICAgbGV0IHJlc3VsdCA9IHt9IGFzIFNlZWRMaXN0UmVzdWx0O1xuICAgIGNvbnN0IHNlZWRMaXN0ID0gdGhpcy5wcmVwYXJlU2VlZExpc3QoZGF0YS5ib2R5KTtcbiAgICByZXN1bHQgPSB7XG4gICAgICAuLi5zZWVkTGlzdCxcbiAgICAgIHN0YXR1czogZGF0YS5zdGF0dXNcbiAgICB9O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIHByZXBhcmVTZWVkTGlzdChkYXRhOiBTZWVkTGlzdEFQSVNoYXBlKTogU2VlZExpc3Qge1xuICAgIGxldCBzZWVkczogU2VlZFtdIHwgbnVsbDtcblxuICAgIGNvbnN0IGhhbmRsZWRTZWVkTGlzdERhdGVzID0ge1xuICAgICAgY3JlYXRlZF9hdDogbmV3IERhdGUoZGF0YS5jcmVhdGVkX2F0KSxcbiAgICAgIHVwZGF0ZWRfYXQ6IG5ldyBEYXRlKGRhdGEudXBkYXRlZF9hdCksXG4gICAgICBsYXN0X3Jlc3VsdF9hdDogbmV3IERhdGUoZGF0YS5sYXN0X3Jlc3VsdF9hdCksXG4gICAgfTtcblxuICAgIGlmIChkYXRhLlNlZWRzKSB7XG4gICAgICBzZWVkcyA9IGRhdGEuU2VlZHMubWFwKChzZWVkSXRlbTogU2VlZEFQSVNoYXBlKTogU2VlZCA9PiB7XG4gICAgICAgIGxldCBzZWVkID0ge30gYXMgU2VlZDtcbiAgICAgICAgY29uc3QgaGFuZGxlZFNlZWREYXRlcyA9IHtcbiAgICAgICAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZShzZWVkSXRlbS5jcmVhdGVkX2F0KSxcbiAgICAgICAgICB1cGRhdGVkX2F0OiBuZXcgRGF0ZShzZWVkSXRlbS51cGRhdGVkX2F0KSxcbiAgICAgICAgICBtYXhfZW1haWxfY291bnRfaGl0X2F0OiBuZXcgRGF0ZShzZWVkSXRlbS5tYXhfZW1haWxfY291bnRfaGl0X2F0KSxcbiAgICAgICAgICBsYXN0X3NlbnRfdG9fYXQ6IG5ldyBEYXRlKHNlZWRJdGVtLmxhc3Rfc2VudF90b19hdCksXG4gICAgICAgICAgbGFzdF9kZWxpdmVyZWRfYXQ6IG5ldyBEYXRlKHNlZWRJdGVtLmxhc3RfZGVsaXZlcmVkX2F0KSxcbiAgICAgICAgfTtcbiAgICAgICAgc2VlZCA9IHtcbiAgICAgICAgICAuLi5zZWVkSXRlbSxcbiAgICAgICAgICAuLi5oYW5kbGVkU2VlZERhdGVzXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBzZWVkO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlZWRzID0gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBzZWVkTGlzdDogU2VlZExpc3QgPSB7XG4gICAgICAuLi5kYXRhLFxuICAgICAgU2VlZHM6IHNlZWRzLFxuICAgICAgLi4uaGFuZGxlZFNlZWRMaXN0RGF0ZXNcbiAgICB9O1xuXG4gICAgZGVsZXRlIChzZWVkTGlzdCBhcyB7SWQ/OiBzdHJpbmd9KS5JZDtcblxuICAgIHJldHVybiBzZWVkTGlzdDtcbiAgfVxuXG4gIHByb3RlY3RlZCBwYXJzZUxpc3QocmVzcG9uc2U6IFNlZWRzTGlzdHNBUElSZXNwb25zZSk6IFNlZWRzTGlzdHNSZXN1bHQge1xuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICBpdGVtczogW11cbiAgICB9IGFzIFNlZWRzTGlzdHNSZXN1bHQ7XG5cbiAgICBkYXRhLml0ZW1zID0gcmVzcG9uc2UuYm9keS5pdGVtcz8ubWFwKFxuICAgICAgKGl0ZW06IFNlZWRMaXN0QVBJU2hhcGUpOiBTZWVkTGlzdCA9PiB0aGlzLnByZXBhcmVTZWVkTGlzdChpdGVtKVxuICAgICk7XG5cbiAgICBkYXRhLnBhZ2VzID0gdGhpcy5wYXJzZVBhZ2VMaW5rcyhyZXNwb25zZSwgJz8nLCAnYWRkcmVzcycpO1xuICAgIGRhdGEuc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBhc3luYyBsaXN0KHF1ZXJ5OiBTZWVkc0xpc3RzUXVlcnkpOiBQcm9taXNlPFNlZWRzTGlzdHNSZXN1bHQ+IHtcbiAgICBjb25zdCBxdWVyeURhdGEgPSB0aGlzLnByZXBhcmVRdWVyeURhdGEocXVlcnkpO1xuICAgIGNvbnN0IHJlc3BvbnNlOiBTZWVkc0xpc3RzQVBJUmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QuZ2V0KCcvdjQvaW5ib3gvc2VlZGxpc3RzJywgcXVlcnlEYXRhKSBhcyBTZWVkc0xpc3RzQVBJUmVzcG9uc2U7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMucGFyc2VMaXN0KHJlc3BvbnNlKSxcbiAgICAgIHN0YXR1czogMjAwXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGdldChpZDogc3RyaW5nKTogUHJvbWlzZTxTZWVkTGlzdFJlc3VsdD4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBTZWVkTGlzdEdldEFQSVJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LmdldChgL3Y0L2luYm94L3NlZWRsaXN0cy8ke2lkfWApIGFzIFNlZWRMaXN0R2V0QVBJUmVzcG9uc2U7XG4gICAgY29uc3QgdXBkYXRlZFNlZWRzTGlzdCA9IHRoaXMucHJlcGFyZVNlZWRMaXN0KHJlc3BvbnNlLmJvZHkuc2VlZGxpc3QpO1xuICAgIHJldHVybiB7XG4gICAgICAuLi51cGRhdGVkU2VlZHNMaXN0LFxuICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXNcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlKGRhdGE6IFNlZWRzTGlzdHNDcmVhdGluZ0RhdGEpOiBQcm9taXNlPFNlZWRMaXN0UmVzdWx0PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRCgnL3Y0L2luYm94L3NlZWRsaXN0cycsIGRhdGEpIGFzIFNlZWRMaXN0QVBJUmVzcG9uc2U7XG4gICAgcmV0dXJuIHRoaXMucHJlcGFyZVJlc3VsdChyZXNwb25zZSk7XG4gIH1cblxuICBhc3luYyB1cGRhdGUoaWQ6IHN0cmluZywgZGF0YTogU2VlZHNMaXN0c1VwZGF0aW5nRGF0YSk6IFByb21pc2U8U2VlZExpc3RSZXN1bHQ+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5wdXQoYC92NC9pbmJveC9zZWVkbGlzdHMvJHtpZH1gLCBkYXRhKSBhcyBTZWVkTGlzdEFQSVJlc3BvbnNlO1xuICAgIHJldHVybiB0aGlzLnByZXBhcmVSZXN1bHQocmVzcG9uc2UpO1xuICB9XG5cbiAgYXN5bmMgZGVzdHJveShpZDogc3RyaW5nKTogUHJvbWlzZTxTZWVkc0xpc3RzRGVzdHJveUFwaVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5kZWxldGUoYC92NC9pbmJveC9zZWVkbGlzdHMvJHtpZH1gKSBhcyB1bmtub3duIGFzIFNlZWRzTGlzdHNEZXN0cm95QXBpUmVzcG9uc2U7XG4gIH1cbn1cbiIsImltcG9ydCB7IElJbmJveFBsYWNlbWVudHNDbGllbnQsIElJbmJveFBsYWNlbWVudHNSZXN1bHRzQ2xpZW50IH0gZnJvbSAnLi4vLi4vSW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBJU2VlZHNMaXN0c0NsaWVudCB9IGZyb20gJy4uLy4uL0ludGVyZmFjZXMvSW5ib3hQbGFjZW1lbnRzL1NlZWRzTGlzdHMvU2VlZHNMaXN0c0NsaWVudCc7XG5pbXBvcnQgeyBJSW5ib3hQbGFjZW1lbnRzUHJvdmlkZXJzQ2xpZW50IH0gZnJvbSAnLi4vLi4vSW50ZXJmYWNlcy9JbmJveFBsYWNlbWVudHMvcHJvdmlkZXJzL0luYm94UGxhY2VtZW50c1Byb3ZpZGVycyc7XG5pbXBvcnQgeyBJbmJveFBsYWNlbWVudHNEYXRhLCBJbmJveFBsYWNlbWVudHNUZXN0UmVzdWx0LCBJbmJveFBsYWNlbWVudHNUZXN0UmVzdWx0QVBJUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9UeXBlcy9JbmJveFBsYWNlbWVudHMnO1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi4vY29tbW9uL1JlcXVlc3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbmJveFBsYWNlbWVudHNDbGllbnQgaW1wbGVtZW50cyBJSW5ib3hQbGFjZW1lbnRzQ2xpZW50IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcbiAgcHVibGljIHNlZWRzTGlzdHM6IElTZWVkc0xpc3RzQ2xpZW50O1xuICBwdWJsaWMgcmVzdWx0czogSUluYm94UGxhY2VtZW50c1Jlc3VsdHNDbGllbnQ7XG4gIHB1YmxpYyBwcm92aWRlcnM6IElJbmJveFBsYWNlbWVudHNQcm92aWRlcnNDbGllbnQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcmVxdWVzdDogUmVxdWVzdCxcbiAgICBzZWVkc0xpc3RzQ2xpZW50OiBJU2VlZHNMaXN0c0NsaWVudCxcbiAgICByZXN1bHRzOiBJSW5ib3hQbGFjZW1lbnRzUmVzdWx0c0NsaWVudCxcbiAgICBwcm92aWRlcnM6IElJbmJveFBsYWNlbWVudHNQcm92aWRlcnNDbGllbnRcbiAgKSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICB0aGlzLnNlZWRzTGlzdHMgPSBzZWVkc0xpc3RzQ2xpZW50O1xuICAgIHRoaXMuc2VlZHNMaXN0cyA9IHNlZWRzTGlzdHNDbGllbnQ7XG4gICAgdGhpcy5yZXN1bHRzID0gcmVzdWx0cztcbiAgICB0aGlzLnByb3ZpZGVycyA9IHByb3ZpZGVycztcbiAgfVxuXG4gIGFzeW5jIHJ1blRlc3QoZGF0YTogSW5ib3hQbGFjZW1lbnRzRGF0YSk6IFByb21pc2U8SW5ib3hQbGFjZW1lbnRzVGVzdFJlc3VsdD4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LnBvc3QoJy92NC9pbmJveC90ZXN0cycsIGRhdGEpIGFzIEluYm94UGxhY2VtZW50c1Rlc3RSZXN1bHRBUElSZXNwb25zZTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4ucmVzcG9uc2UuYm9keSxcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzXG4gICAgfTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgSUluYm94UGxhY2VtZW50c1Byb3ZpZGVyc0NsaWVudCB9IGZyb20gJy4uLy4uLy4uL0ludGVyZmFjZXMvSW5ib3hQbGFjZW1lbnRzL3Byb3ZpZGVycy9JbmJveFBsYWNlbWVudHNQcm92aWRlcnMnO1xuaW1wb3J0IHtcbiAgSW5ib3hQbGFjZW1lbnRzUHJvdmlkZXIsXG4gIEluYm94UGxhY2VtZW50c1Byb3ZpZGVyQVBJU2hhcGUsXG4gIEluYm94UGxhY2VtZW50c1Byb3ZpZGVyc0xpc3QsXG4gIEluYm94UGxhY2VtZW50c1Byb3ZpZGVyc0xpc3RBUElSZXNwb25zZVxufSBmcm9tICcuLi8uLi8uLi9UeXBlcy9JbmJveFBsYWNlbWVudHMnO1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi4vLi4vY29tbW9uL1JlcXVlc3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbmJveFBsYWNlbWVudHNQcm92aWRlcnNDbGllbnQgaW1wbGVtZW50cyBJSW5ib3hQbGFjZW1lbnRzUHJvdmlkZXJzQ2xpZW50IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcbiAgcGF0aDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlcXVlc3Q6IFJlcXVlc3QsXG4gICkge1xuICAgIHRoaXMucGF0aCA9ICcvdjQvaW5ib3gvcHJvdmlkZXJzJztcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUxpc3QoXG4gICAgcmVzcG9uc2U6IEluYm94UGxhY2VtZW50c1Byb3ZpZGVyc0xpc3RBUElSZXNwb25zZVxuICApOiBJbmJveFBsYWNlbWVudHNQcm92aWRlcnNMaXN0IHtcbiAgICBjb25zdCBkYXRhID0ge30gYXMgSW5ib3hQbGFjZW1lbnRzUHJvdmlkZXJzTGlzdDtcblxuICAgIGRhdGEuaXRlbXMgPSByZXNwb25zZS5ib2R5Lml0ZW1zLm1hcChcbiAgICAgIChpdGVtOiBJbmJveFBsYWNlbWVudHNQcm92aWRlckFQSVNoYXBlKTogSW5ib3hQbGFjZW1lbnRzUHJvdmlkZXIgPT4ge1xuICAgICAgICBjb25zdCBoYW5kbGVkUHJvdmlkZXJEYXRlcyA9IHtcbiAgICAgICAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZShpdGVtLmNyZWF0ZWRfYXQpLFxuICAgICAgICAgIHVwZGF0ZWRfYXQ6IG5ldyBEYXRlKGl0ZW0udXBkYXRlZF9hdCksXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJlc3VsdDogSW5ib3hQbGFjZW1lbnRzUHJvdmlkZXIgPSB7XG4gICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAuLi5oYW5kbGVkUHJvdmlkZXJEYXRlc1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICk7XG5cbiAgICBkYXRhLnN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgYXN5bmMgbGlzdCgpOiBQcm9taXNlPEluYm94UGxhY2VtZW50c1Byb3ZpZGVyc0xpc3Q+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5nZXQodGhpcy5wYXRoKSBhcyBJbmJveFBsYWNlbWVudHNQcm92aWRlcnNMaXN0QVBJUmVzcG9uc2U7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VMaXN0KHJlc3BvbnNlKTtcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgY2FtZWxjYXNlICovXG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuL2NvbW1vbi9SZXF1ZXN0JztcbmltcG9ydCB7IE1haWxndW5DbGllbnRPcHRpb25zLCBJbnB1dEZvcm1EYXRhLCBSZXF1ZXN0T3B0aW9ucyB9IGZyb20gJy4uL1R5cGVzJztcblxuaW1wb3J0IERvbWFpbnNDbGllbnQgZnJvbSAnLi9Eb21haW5zL2RvbWFpbnNDbGllbnQnO1xuaW1wb3J0IEV2ZW50Q2xpZW50IGZyb20gJy4vRXZlbnRzJztcbmltcG9ydCBTdGF0c0NsaWVudCBmcm9tICcuL1N0YXRzL1N0YXRzQ2xpZW50JztcbmltcG9ydCBTdXBwcmVzc2lvbkNsaWVudCBmcm9tICcuL1N1cHByZXNzaW9ucy9TdXBwcmVzc2lvbnNDbGllbnQnO1xuaW1wb3J0IFdlYmhvb2tzQ2xpZW50IGZyb20gJy4vV2ViaG9va3MnO1xuaW1wb3J0IE1lc3NhZ2VzQ2xpZW50IGZyb20gJy4vTWVzc2FnZXMnO1xuaW1wb3J0IFJvdXRlc0NsaWVudCBmcm9tICcuL1JvdXRlcyc7XG5pbXBvcnQgVmFsaWRhdGVDbGllbnQgZnJvbSAnLi9WYWxpZGF0aW9ucy92YWxpZGF0ZSc7XG5pbXBvcnQgSXBzQ2xpZW50IGZyb20gJy4vSVBzJztcbmltcG9ydCBJcFBvb2xzQ2xpZW50IGZyb20gJy4vSVBQb29scyc7XG5pbXBvcnQgTWFpbGluZ0xpc3RzQ2xpZW50IGZyb20gJy4vTWFpbGluZ0xpc3RzL21haWxpbmdMaXN0cyc7XG5pbXBvcnQgTWFpbExpc3RzTWVtYmVycyBmcm9tICcuL01haWxpbmdMaXN0cy9tYWlsTGlzdE1lbWJlcnMnO1xuaW1wb3J0IERvbWFpbkNyZWRlbnRpYWxzQ2xpZW50IGZyb20gJy4vRG9tYWlucy9kb21haW5zQ3JlZGVudGlhbHMnO1xuaW1wb3J0IE11bHRpcGxlVmFsaWRhdGlvbkNsaWVudCBmcm9tICcuL1ZhbGlkYXRpb25zL211bHRpcGxlVmFsaWRhdGlvbic7XG5pbXBvcnQgRG9tYWluVGVtcGxhdGVzQ2xpZW50IGZyb20gJy4vRG9tYWlucy9kb21haW5zVGVtcGxhdGVzJztcbmltcG9ydCBEb21haW5UYWdzQ2xpZW50IGZyb20gJy4vRG9tYWlucy9kb21haW5zVGFncyc7XG5pbXBvcnQgU3ViYWNjb3VudHNDbGllbnQgZnJvbSAnLi9TdWJhY2NvdW50cyc7XG5cbmltcG9ydCB7XG4gIElEb21haW5zQ2xpZW50LFxuICBJV2ViSG9va3NDbGllbnQsXG4gIElNYWlsZ3VuQ2xpZW50LFxuICBJTWFpbGluZ0xpc3RzQ2xpZW50LFxuICBJRXZlbnRDbGllbnQsXG4gIElTdGF0c0NsaWVudCxcbiAgSVN1cHByZXNzaW9uQ2xpZW50LFxuICBJTWVzc2FnZXNDbGllbnQsXG4gIElSb3V0ZXNDbGllbnQsXG4gIElWYWxpZGF0aW9uQ2xpZW50LFxuICBJSVBzQ2xpZW50LFxuICBJSVBQb29sc0NsaWVudCxcbiAgSVN1YmFjY291bnRzQ2xpZW50LFxuICBJSW5ib3hQbGFjZW1lbnRzQ2xpZW50LFxufSBmcm9tICcuLi9JbnRlcmZhY2VzJztcbmltcG9ydCBTZWVkc0xpc3RzQ2xpZW50IGZyb20gJy4vSW5ib3hQbGFjZW1lbnRzL1NlZWRzTGlzdHMvU2VlZHNMaXN0c0NsaWVudCc7XG5pbXBvcnQgSW5ib3hQbGFjZW1lbnRzQ2xpZW50IGZyb20gJy4vSW5ib3hQbGFjZW1lbnRzL2luYm94UGxhY2VtZW50cyc7XG5pbXBvcnQgSW5ib3hQbGFjZW1lbnRzUmVzdWx0c0NsaWVudCBmcm9tICcuL0luYm94UGxhY2VtZW50cy9SZXN1bHRzL0luYm94UGxhY2VtZW50c1Jlc3VsdHNDbGllbnQnO1xuaW1wb3J0IEluYm94UGxhY2VtZW50c0F0dHJpYnV0ZXNDbGllbnQgZnJvbSAnLi9JbmJveFBsYWNlbWVudHMvQXR0cmlidXRlc0NsaWVudCc7XG5pbXBvcnQgSW5ib3hQbGFjZW1lbnRzRmlsdGVyc0NsaWVudCBmcm9tICcuL0luYm94UGxhY2VtZW50cy9GaWx0ZXJzQ2xpZW50JztcbmltcG9ydCBJUFJTaGFyaW5nQ2xpZW50IGZyb20gJy4vSW5ib3hQbGFjZW1lbnRzL1Jlc3VsdHMvSW5ib3hQbGFjZW1lbnRzUmVzdWx0c1NoYXJpbmdDbGllbnQnO1xuaW1wb3J0IEluYm94UGxhY2VtZW50c1Byb3ZpZGVyc0NsaWVudCBmcm9tICcuL0luYm94UGxhY2VtZW50cy9wcm92aWRlcnMvSW5ib3hQbGFjZW1lbnRzUHJvdmlkZXJzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWFpbGd1bkNsaWVudCBpbXBsZW1lbnRzIElNYWlsZ3VuQ2xpZW50IHtcbiAgcHJpdmF0ZSByZXF1ZXN0O1xuXG4gIHB1YmxpYyBkb21haW5zOiBJRG9tYWluc0NsaWVudDtcbiAgcHVibGljIHdlYmhvb2tzOiBJV2ViSG9va3NDbGllbnQ7XG4gIHB1YmxpYyBldmVudHM6IElFdmVudENsaWVudDtcbiAgcHVibGljIHN0YXRzOiBJU3RhdHNDbGllbnQ7XG4gIHB1YmxpYyBzdXBwcmVzc2lvbnM6IElTdXBwcmVzc2lvbkNsaWVudDtcbiAgcHVibGljIG1lc3NhZ2VzOiBJTWVzc2FnZXNDbGllbnQ7XG4gIHB1YmxpYyByb3V0ZXM6IElSb3V0ZXNDbGllbnQ7XG4gIHB1YmxpYyB2YWxpZGF0ZTogSVZhbGlkYXRpb25DbGllbnQ7XG4gIHB1YmxpYyBpcHM6IElJUHNDbGllbnQ7XG4gIHB1YmxpYyBpcF9wb29sczogSUlQUG9vbHNDbGllbnQ7XG4gIHB1YmxpYyBsaXN0czogSU1haWxpbmdMaXN0c0NsaWVudDtcbiAgcHVibGljIHN1YmFjY291bnRzOiBJU3ViYWNjb3VudHNDbGllbnQ7XG4gIHB1YmxpYyBpbmJveFBsYWNlbWVudHM6IElJbmJveFBsYWNlbWVudHNDbGllbnQ7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogTWFpbGd1bkNsaWVudE9wdGlvbnMsIGZvcm1EYXRhOiBJbnB1dEZvcm1EYXRhKSB7XG4gICAgY29uc3QgY29uZmlnOiBSZXF1ZXN0T3B0aW9ucyA9IHsgLi4ub3B0aW9ucyB9IGFzIFJlcXVlc3RPcHRpb25zO1xuXG4gICAgaWYgKCFjb25maWcudXJsKSB7XG4gICAgICBjb25maWcudXJsID0gJ2h0dHBzOi8vYXBpLm1haWxndW4ubmV0JztcbiAgICB9XG5cbiAgICBpZiAoIWNvbmZpZy51c2VybmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJhbWV0ZXIgXCJ1c2VybmFtZVwiIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgaWYgKCFjb25maWcua2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlciBcImtleVwiIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIHRoaXMucmVxdWVzdCA9IG5ldyBSZXF1ZXN0KGNvbmZpZywgZm9ybURhdGEpO1xuICAgIGNvbnN0IG1haWxMaXN0c01lbWJlcnMgPSBuZXcgTWFpbExpc3RzTWVtYmVycyh0aGlzLnJlcXVlc3QpO1xuICAgIGNvbnN0IGRvbWFpbkNyZWRlbnRpYWxzQ2xpZW50ID0gbmV3IERvbWFpbkNyZWRlbnRpYWxzQ2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgY29uc3QgZG9tYWluVGVtcGxhdGVzQ2xpZW50ID0gbmV3IERvbWFpblRlbXBsYXRlc0NsaWVudCh0aGlzLnJlcXVlc3QpO1xuICAgIGNvbnN0IGRvbWFpblRhZ3NDbGllbnQgPSBuZXcgRG9tYWluVGFnc0NsaWVudCh0aGlzLnJlcXVlc3QpO1xuICAgIGNvbnN0IG11bHRpcGxlVmFsaWRhdGlvbkNsaWVudCA9IG5ldyBNdWx0aXBsZVZhbGlkYXRpb25DbGllbnQodGhpcy5yZXF1ZXN0KTtcbiAgICBjb25zdCBJbmJveFBsYWNlbWVudHNSZXN1bHRzU2hhcmluZ0NsaWVudCA9IG5ldyBJUFJTaGFyaW5nQ2xpZW50KHRoaXMucmVxdWVzdCk7XG5cbiAgICBjb25zdCBzZWVkc0xpc3RzQXR0cmlidXRlcyA9IG5ldyBJbmJveFBsYWNlbWVudHNBdHRyaWJ1dGVzQ2xpZW50KHRoaXMucmVxdWVzdCwgJy92NC9pbmJveC9zZWVkbGlzdHMvYScpO1xuICAgIGNvbnN0IHJlc3VsdHNBdHRyaWJ1dGVzQ2xpZW50ID0gbmV3IEluYm94UGxhY2VtZW50c0F0dHJpYnV0ZXNDbGllbnQodGhpcy5yZXF1ZXN0LCAnL3Y0L2luYm94L3Jlc3VsdHMvYScpO1xuXG4gICAgY29uc3Qgc2VlZHNMaXN0c0ZpbHRlcnNDbGllbnQgPSBuZXcgSW5ib3hQbGFjZW1lbnRzRmlsdGVyc0NsaWVudCh0aGlzLnJlcXVlc3QsICcvdjQvaW5ib3gvc2VlZGxpc3RzL19maWx0ZXJzJyk7XG4gICAgY29uc3QgcmVzdWx0c0ZpbHRlcnNDbGllbnQgPSBuZXcgSW5ib3hQbGFjZW1lbnRzRmlsdGVyc0NsaWVudCh0aGlzLnJlcXVlc3QsICcvdjQvaW5ib3gvcmVzdWx0cy9fZmlsdGVycycpO1xuXG4gICAgY29uc3Qgc2VlZHNMaXN0c0NsaWVudCA9IG5ldyBTZWVkc0xpc3RzQ2xpZW50KFxuICAgICAgdGhpcy5yZXF1ZXN0LFxuICAgICAgc2VlZHNMaXN0c0F0dHJpYnV0ZXMsXG4gICAgICBzZWVkc0xpc3RzRmlsdGVyc0NsaWVudFxuICAgICk7XG5cbiAgICBjb25zdCBpbmJveFBsYWNlbWVudHNSZXN1bHRzQ2xpZW50ID0gbmV3IEluYm94UGxhY2VtZW50c1Jlc3VsdHNDbGllbnQoXG4gICAgICB0aGlzLnJlcXVlc3QsXG4gICAgICByZXN1bHRzQXR0cmlidXRlc0NsaWVudCxcbiAgICAgIHJlc3VsdHNGaWx0ZXJzQ2xpZW50LFxuICAgICAgSW5ib3hQbGFjZW1lbnRzUmVzdWx0c1NoYXJpbmdDbGllbnRcbiAgICApO1xuXG4gICAgY29uc3QgaW5ib3hQbGFjZW1lbnRzUHJvdmlkZXJzQ2xpZW50ID0gbmV3IEluYm94UGxhY2VtZW50c1Byb3ZpZGVyc0NsaWVudChcbiAgICAgIHRoaXMucmVxdWVzdFxuICAgICk7XG5cbiAgICB0aGlzLmRvbWFpbnMgPSBuZXcgRG9tYWluc0NsaWVudChcbiAgICAgIHRoaXMucmVxdWVzdCxcbiAgICAgIGRvbWFpbkNyZWRlbnRpYWxzQ2xpZW50LFxuICAgICAgZG9tYWluVGVtcGxhdGVzQ2xpZW50LFxuICAgICAgZG9tYWluVGFnc0NsaWVudFxuICAgICk7XG4gICAgdGhpcy53ZWJob29rcyA9IG5ldyBXZWJob29rc0NsaWVudCh0aGlzLnJlcXVlc3QpO1xuICAgIHRoaXMuZXZlbnRzID0gbmV3IEV2ZW50Q2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgdGhpcy5zdGF0cyA9IG5ldyBTdGF0c0NsaWVudCh0aGlzLnJlcXVlc3QpO1xuICAgIHRoaXMuc3VwcHJlc3Npb25zID0gbmV3IFN1cHByZXNzaW9uQ2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgdGhpcy5tZXNzYWdlcyA9IG5ldyBNZXNzYWdlc0NsaWVudCh0aGlzLnJlcXVlc3QpO1xuICAgIHRoaXMucm91dGVzID0gbmV3IFJvdXRlc0NsaWVudCh0aGlzLnJlcXVlc3QpO1xuICAgIHRoaXMuaXBzID0gbmV3IElwc0NsaWVudCh0aGlzLnJlcXVlc3QpO1xuICAgIHRoaXMuaXBfcG9vbHMgPSBuZXcgSXBQb29sc0NsaWVudCh0aGlzLnJlcXVlc3QpO1xuICAgIHRoaXMubGlzdHMgPSBuZXcgTWFpbGluZ0xpc3RzQ2xpZW50KHRoaXMucmVxdWVzdCwgbWFpbExpc3RzTWVtYmVycyk7XG4gICAgdGhpcy52YWxpZGF0ZSA9IG5ldyBWYWxpZGF0ZUNsaWVudCh0aGlzLnJlcXVlc3QsIG11bHRpcGxlVmFsaWRhdGlvbkNsaWVudCk7XG4gICAgdGhpcy5zdWJhY2NvdW50cyA9IG5ldyBTdWJhY2NvdW50c0NsaWVudCh0aGlzLnJlcXVlc3QpO1xuICAgIHRoaXMuaW5ib3hQbGFjZW1lbnRzID0gbmV3IEluYm94UGxhY2VtZW50c0NsaWVudChcbiAgICAgIHRoaXMucmVxdWVzdCxcbiAgICAgIHNlZWRzTGlzdHNDbGllbnQsXG4gICAgICBpbmJveFBsYWNlbWVudHNSZXN1bHRzQ2xpZW50LFxuICAgICAgaW5ib3hQbGFjZW1lbnRzUHJvdmlkZXJzQ2xpZW50LFxuICAgICk7XG4gIH1cblxuICBzZXRTdWJhY2NvdW50KHN1YmFjY291bnRJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5yZXF1ZXN0Py5zZXRTdWJhY2NvdW50SGVhZGVyKHN1YmFjY291bnRJZCk7XG4gIH1cblxuICByZXNldFN1YmFjY291bnQoKTogdm9pZCB7XG4gICAgdGhpcy5yZXF1ZXN0Py5yZXNldFN1YmFjY291bnRIZWFkZXIoKTtcbiAgfVxufVxuIiwiaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi4vY29tbW9uL1JlcXVlc3QnO1xuaW1wb3J0IHtcbiAgTWFpbExpc3RNZW1iZXJzUXVlcnksXG4gIENyZWF0ZVVwZGF0ZU1haWxMaXN0TWVtYmVycyxcbiAgTWFpbExpc3RNZW1iZXIsXG4gIE11bHRpcGxlTWVtYmVyc0RhdGEsXG4gIE11bHRpcGxlTWVtYmVyc1JlcURhdGEsXG4gIERlbGV0ZWRNZW1iZXIsXG4gIENyZWF0ZVVwZGF0ZU1haWxMaXN0TWVtYmVyc1JlcSxcbiAgTmV3TXVsdGlwbGVNZW1iZXJzUmVzcG9uc2UsXG4gIE1haWxMaXN0TWVtYmVyc1Jlc3VsdCxcbiAgTWFpbExpc3RNZW1iZXJzUmVzcG9uc2Vcbn0gZnJvbSAnLi4vLi4vVHlwZXMvTWFpbGluZ0xpc3RzJztcbmltcG9ydCBOYXZpZ2F0aW9uVGhydVBhZ2VzIGZyb20gJy4uL2NvbW1vbi9OYXZpZ2F0aW9uVGhydVBhZ2VzJztcbmltcG9ydCB7IElNYWlsTGlzdHNNZW1iZXJzIH0gZnJvbSAnLi4vLi4vSW50ZXJmYWNlcy9NYWlsaW5nTGlzdHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNYWlsTGlzdHNNZW1iZXJzXG4gIGV4dGVuZHMgTmF2aWdhdGlvblRocnVQYWdlczxNYWlsTGlzdE1lbWJlcnNSZXN1bHQ+XG4gIGltcGxlbWVudHMgSU1haWxMaXN0c01lbWJlcnMge1xuICBiYXNlUm91dGU6IHN0cmluZztcbiAgcmVxdWVzdDogUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0KSB7XG4gICAgc3VwZXIocmVxdWVzdCk7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICB0aGlzLmJhc2VSb3V0ZSA9ICcvdjMvbGlzdHMnO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0FuZFVwZGF0ZURhdGEoZGF0YTogQ3JlYXRlVXBkYXRlTWFpbExpc3RNZW1iZXJzKSB7XG4gICAgY29uc3QgbmV3RGF0YSA9IHsgLi4uZGF0YSB9O1xuXG4gICAgaWYgKHR5cGVvZiBkYXRhLnZhcnMgPT09ICdvYmplY3QnKSB7XG4gICAgICBuZXdEYXRhLnZhcnMgPSBKU09OLnN0cmluZ2lmeShuZXdEYXRhLnZhcnMpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZGF0YS5zdWJzY3JpYmVkID09PSAnYm9vbGVhbicpIHtcbiAgICAgIG5ld0RhdGEuc3Vic2NyaWJlZCA9IGRhdGEuc3Vic2NyaWJlZCA/ICd5ZXMnIDogJ25vJztcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3RGF0YSBhcyBDcmVhdGVVcGRhdGVNYWlsTGlzdE1lbWJlcnNSZXE7XG4gIH1cblxuICBwcm90ZWN0ZWQgcGFyc2VMaXN0KFxuICAgIHJlc3BvbnNlOiBNYWlsTGlzdE1lbWJlcnNSZXNwb25zZSxcbiAgKTogTWFpbExpc3RNZW1iZXJzUmVzdWx0IHtcbiAgICBjb25zdCBkYXRhID0ge30gYXMgTWFpbExpc3RNZW1iZXJzUmVzdWx0O1xuICAgIGRhdGEuaXRlbXMgPSByZXNwb25zZS5ib2R5Lml0ZW1zO1xuXG4gICAgZGF0YS5wYWdlcyA9IHRoaXMucGFyc2VQYWdlTGlua3MocmVzcG9uc2UsICc/JywgJ2FkZHJlc3MnKTtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGFzeW5jIGxpc3RNZW1iZXJzKFxuICAgIG1haWxMaXN0QWRkcmVzczogc3RyaW5nLFxuICAgIHF1ZXJ5PzogTWFpbExpc3RNZW1iZXJzUXVlcnlcbiAgKTogUHJvbWlzZTxNYWlsTGlzdE1lbWJlcnNSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0TGlzdFdpdGhQYWdlcyhgJHt0aGlzLmJhc2VSb3V0ZX0vJHttYWlsTGlzdEFkZHJlc3N9L21lbWJlcnMvcGFnZXNgLCBxdWVyeSk7XG4gIH1cblxuICBnZXRNZW1iZXIobWFpbExpc3RBZGRyZXNzOiBzdHJpbmcsIG1haWxMaXN0TWVtYmVyQWRkcmVzczogc3RyaW5nKTogUHJvbWlzZTxNYWlsTGlzdE1lbWJlcj4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc30vbWVtYmVycy8ke21haWxMaXN0TWVtYmVyQWRkcmVzc31gKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5Lm1lbWJlciBhcyBNYWlsTGlzdE1lbWJlcik7XG4gIH1cblxuICBjcmVhdGVNZW1iZXIoXG4gICAgbWFpbExpc3RBZGRyZXNzOiBzdHJpbmcsXG4gICAgZGF0YTogQ3JlYXRlVXBkYXRlTWFpbExpc3RNZW1iZXJzXG4gICk6IFByb21pc2U8TWFpbExpc3RNZW1iZXI+IHtcbiAgICBjb25zdCByZXFEYXRhID0gdGhpcy5jaGVja0FuZFVwZGF0ZURhdGEoZGF0YSk7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc30vbWVtYmVyc2AsIHJlcURhdGEpXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkubWVtYmVyIGFzIE1haWxMaXN0TWVtYmVyKTtcbiAgfVxuXG4gIGNyZWF0ZU1lbWJlcnMoXG4gICAgbWFpbExpc3RBZGRyZXNzOiBzdHJpbmcsXG4gICAgZGF0YTogTXVsdGlwbGVNZW1iZXJzRGF0YVxuICApOiBQcm9taXNlPE5ld011bHRpcGxlTWVtYmVyc1Jlc3BvbnNlPiB7XG4gICAgY29uc3QgbmV3RGF0YTogTXVsdGlwbGVNZW1iZXJzUmVxRGF0YSA9IHtcbiAgICAgIG1lbWJlcnM6IEFycmF5LmlzQXJyYXkoZGF0YS5tZW1iZXJzKSA/IEpTT04uc3RyaW5naWZ5KGRhdGEubWVtYmVycykgOiBkYXRhLm1lbWJlcnMsXG4gICAgICB1cHNlcnQ6IGRhdGEudXBzZXJ0XG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRChgJHt0aGlzLmJhc2VSb3V0ZX0vJHttYWlsTGlzdEFkZHJlc3N9L21lbWJlcnMuanNvbmAsIG5ld0RhdGEpXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkgYXMgTmV3TXVsdGlwbGVNZW1iZXJzUmVzcG9uc2UpO1xuICB9XG5cbiAgdXBkYXRlTWVtYmVyKFxuICAgIG1haWxMaXN0QWRkcmVzczogc3RyaW5nLFxuICAgIG1haWxMaXN0TWVtYmVyQWRkcmVzczogc3RyaW5nLFxuICAgIGRhdGE6IENyZWF0ZVVwZGF0ZU1haWxMaXN0TWVtYmVyc1xuICApOiBQcm9taXNlPE1haWxMaXN0TWVtYmVyPiB7XG4gICAgY29uc3QgcmVxRGF0YSA9IHRoaXMuY2hlY2tBbmRVcGRhdGVEYXRhKGRhdGEpO1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0V2l0aEZEKGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc30vbWVtYmVycy8ke21haWxMaXN0TWVtYmVyQWRkcmVzc31gLCByZXFEYXRhKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5Lm1lbWJlciBhcyBNYWlsTGlzdE1lbWJlcik7XG4gIH1cblxuICBkZXN0cm95TWVtYmVyKG1haWxMaXN0QWRkcmVzczogc3RyaW5nLCBtYWlsTGlzdE1lbWJlckFkZHJlc3M6IHN0cmluZykgOiBQcm9taXNlPERlbGV0ZWRNZW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZShgJHt0aGlzLmJhc2VSb3V0ZX0vJHttYWlsTGlzdEFkZHJlc3N9L21lbWJlcnMvJHttYWlsTGlzdE1lbWJlckFkZHJlc3N9YClcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keSBhcyBEZWxldGVkTWVtYmVyKTtcbiAgfVxufVxuIiwiaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi4vY29tbW9uL1JlcXVlc3QnO1xuaW1wb3J0IHtcbiAgTGlzdHNRdWVyeSxcbiAgQ3JlYXRlVXBkYXRlTGlzdCxcbiAgRGVzdHJveWVkTGlzdCxcbiAgTWFpbGluZ0xpc3QsXG4gIE1haWxpbmdMaXN0VmFsaWRhdGlvbkFwaVJlc3BvbnNlLFxuICBTdGFydFZhbGlkYXRpb25SZXN1bHQsXG4gIE1haWxpbmdMaXN0VmFsaWRhdGlvblJlc3VsdCxcbiAgTWFpbGluZ0xpc3RDYW5jZWxWYWxpZGF0aW9uUmVzdWx0LFxuICBNYWlsaW5nTGlzdFJlc3VsdCxcbiAgTWFpbGluZ0xpc3RBcGlSZXNwb25zZVxufSBmcm9tICcuLi8uLi9UeXBlcy9NYWlsaW5nTGlzdHMnO1xuaW1wb3J0IHsgSU1haWxMaXN0c01lbWJlcnMgfSBmcm9tICcuLi8uLi9JbnRlcmZhY2VzL01haWxpbmdMaXN0cy9NYWlsaW5nTGlzdE1lbWJlcnMnO1xuaW1wb3J0IE5hdmlnYXRpb25UaHJ1UGFnZXMgZnJvbSAnLi4vY29tbW9uL05hdmlnYXRpb25UaHJ1UGFnZXMnO1xuaW1wb3J0IHsgSU1haWxpbmdMaXN0c0NsaWVudCB9IGZyb20gJy4uLy4uL0ludGVyZmFjZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNYWlsaW5nTGlzdHNDbGllbnRcbiAgZXh0ZW5kcyBOYXZpZ2F0aW9uVGhydVBhZ2VzPE1haWxpbmdMaXN0UmVzdWx0PlxuICBpbXBsZW1lbnRzIElNYWlsaW5nTGlzdHNDbGllbnQge1xuICBiYXNlUm91dGU6IHN0cmluZztcbiAgcmVxdWVzdDogUmVxdWVzdDtcbiAgcHVibGljIG1lbWJlcnM6IElNYWlsTGlzdHNNZW1iZXJzO1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QsIG1lbWJlcnM6IElNYWlsTGlzdHNNZW1iZXJzKSB7XG4gICAgc3VwZXIocmVxdWVzdCk7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICB0aGlzLmJhc2VSb3V0ZSA9ICcvdjMvbGlzdHMnO1xuICAgIHRoaXMubWVtYmVycyA9IG1lbWJlcnM7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlVmFsaWRhdGlvblJlc3VsdChcbiAgICBzdGF0dXM6IG51bWJlcixcbiAgICBkYXRhOiBNYWlsaW5nTGlzdFZhbGlkYXRpb25BcGlSZXNwb25zZVxuICApOiBNYWlsaW5nTGlzdFZhbGlkYXRpb25SZXN1bHQge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXMsXG4gICAgICB2YWxpZGF0aW9uUmVzdWx0OiB7XG4gICAgICAgIC4uLmRhdGEsXG4gICAgICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKGRhdGEuY3JlYXRlZF9hdCAqIDEwMDApIC8vIGFkZCBtaWxsaXNlY29uZCB0byBVbml4IHRpbWVzdGFtcFxuICAgICAgfVxuICAgIH0gYXMgTWFpbGluZ0xpc3RWYWxpZGF0aW9uUmVzdWx0O1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlTGlzdChyZXNwb25zZTogTWFpbGluZ0xpc3RBcGlSZXNwb25zZSk6IE1haWxpbmdMaXN0UmVzdWx0IHtcbiAgICBjb25zdCBkYXRhID0ge30gYXMgTWFpbGluZ0xpc3RSZXN1bHQ7XG5cbiAgICBkYXRhLml0ZW1zID0gcmVzcG9uc2UuYm9keS5pdGVtcztcblxuICAgIGRhdGEucGFnZXMgPSB0aGlzLnBhcnNlUGFnZUxpbmtzKHJlc3BvbnNlLCAnPycsICdhZGRyZXNzJyk7XG4gICAgZGF0YS5zdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGFzeW5jIGxpc3QocXVlcnk/OiBMaXN0c1F1ZXJ5KTogUHJvbWlzZTxNYWlsaW5nTGlzdFJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3RMaXN0V2l0aFBhZ2VzKGAke3RoaXMuYmFzZVJvdXRlfS9wYWdlc2AsIHF1ZXJ5KTtcbiAgfVxuXG4gIGdldChtYWlsTGlzdEFkZHJlc3M6IHN0cmluZyk6IFByb21pc2U8TWFpbGluZ0xpc3Q+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldChgJHt0aGlzLmJhc2VSb3V0ZX0vJHttYWlsTGlzdEFkZHJlc3N9YClcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keS5saXN0IGFzIE1haWxpbmdMaXN0KTtcbiAgfVxuXG4gIGNyZWF0ZShkYXRhOiBDcmVhdGVVcGRhdGVMaXN0KTogUHJvbWlzZTxNYWlsaW5nTGlzdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRCh0aGlzLmJhc2VSb3V0ZSwgZGF0YSlcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keS5saXN0IGFzIE1haWxpbmdMaXN0KTtcbiAgfVxuXG4gIHVwZGF0ZShtYWlsTGlzdEFkZHJlc3M6IHN0cmluZywgZGF0YTogQ3JlYXRlVXBkYXRlTGlzdCk6IFByb21pc2U8TWFpbGluZ0xpc3Q+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnB1dFdpdGhGRChgJHt0aGlzLmJhc2VSb3V0ZX0vJHttYWlsTGlzdEFkZHJlc3N9YCwgZGF0YSlcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keS5saXN0IGFzIE1haWxpbmdMaXN0KTtcbiAgfVxuXG4gIGRlc3Ryb3kobWFpbExpc3RBZGRyZXNzOiBzdHJpbmcpOiBQcm9taXNlPERlc3Ryb3llZExpc3Q+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZShgJHt0aGlzLmJhc2VSb3V0ZX0vJHttYWlsTGlzdEFkZHJlc3N9YClcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keSBhcyBEZXN0cm95ZWRMaXN0KTtcbiAgfVxuXG4gIHZhbGlkYXRlKG1haWxMaXN0QWRkcmVzczogc3RyaW5nKTogUHJvbWlzZTxTdGFydFZhbGlkYXRpb25SZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnBvc3QoYCR7dGhpcy5iYXNlUm91dGV9LyR7bWFpbExpc3RBZGRyZXNzfS92YWxpZGF0ZWAsIHt9KVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiAoe1xuICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgLi4ucmVzcG9uc2UuYm9keVxuICAgICAgfSkgYXMgU3RhcnRWYWxpZGF0aW9uUmVzdWx0KTtcbiAgfVxuXG4gIHZhbGlkYXRpb25SZXN1bHQobWFpbExpc3RBZGRyZXNzOiBzdHJpbmcpOiBQcm9taXNlPE1haWxpbmdMaXN0VmFsaWRhdGlvblJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc30vdmFsaWRhdGVgKVxuICAgICAgLnRoZW4oXG4gICAgICAgIChyZXNwb25zZSkgPT4gdGhpcy5wYXJzZVZhbGlkYXRpb25SZXN1bHQoXG4gICAgICAgICAgcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICAgICByZXNwb25zZS5ib2R5IGFzIE1haWxpbmdMaXN0VmFsaWRhdGlvbkFwaVJlc3BvbnNlXG4gICAgICAgIClcbiAgICAgICk7XG4gIH1cblxuICBjYW5jZWxWYWxpZGF0aW9uKG1haWxMaXN0QWRkcmVzczogc3RyaW5nKTogUHJvbWlzZTxNYWlsaW5nTGlzdENhbmNlbFZhbGlkYXRpb25SZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZShgJHt0aGlzLmJhc2VSb3V0ZX0vJHttYWlsTGlzdEFkZHJlc3N9L3ZhbGlkYXRlYClcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gKHtcbiAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgIG1lc3NhZ2U6IHJlc3BvbnNlLmJvZHkubWVzc2FnZVxuICAgICAgfSBhcyBNYWlsaW5nTGlzdENhbmNlbFZhbGlkYXRpb25SZXN1bHQpKTtcbiAgfVxufVxuIiwiaW1wb3J0IEFQSUVycm9yIGZyb20gJy4vY29tbW9uL0Vycm9yJztcbmltcG9ydCB7XG4gIE1haWxndW5NZXNzYWdlRGF0YSxcbiAgTWVzc2FnZXNTZW5kQVBJUmVzcG9uc2UsXG4gIE1lc3NhZ2VzU2VuZFJlc3VsdFxufSBmcm9tICcuLi9UeXBlcyc7XG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuL2NvbW1vbi9SZXF1ZXN0JztcbmltcG9ydCB7IElNZXNzYWdlc0NsaWVudCB9IGZyb20gJy4uL0ludGVyZmFjZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXNzYWdlc0NsaWVudCBpbXBsZW1lbnRzIElNZXNzYWdlc0NsaWVudCB7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCkge1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gIH1cblxuICBwcml2YXRlIHByZXBhcmVCb29sZWFuVmFsdWVzKGRhdGE6IE1haWxndW5NZXNzYWdlRGF0YSk6IE1haWxndW5NZXNzYWdlRGF0YSB7XG4gICAgY29uc3QgeWVzTm9Qcm9wZXJ0aWVzID0gbmV3IFNldChbXG4gICAgICAnbzp0ZXN0bW9kZScsXG4gICAgICAndDp0ZXh0JyxcbiAgICAgICdvOmRraW0nLFxuICAgICAgJ286dHJhY2tpbmcnLFxuICAgICAgJ286dHJhY2tpbmctY2xpY2tzJyxcbiAgICAgICdvOnRyYWNraW5nLW9wZW5zJyxcbiAgICAgICdvOnJlcXVpcmUtdGxzJyxcbiAgICAgICdvOnNraXAtdmVyaWZpY2F0aW9uJ1xuICAgIF0pO1xuXG4gICAgaWYgKCFkYXRhIHx8IE9iamVjdC5rZXlzKGRhdGEpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgQVBJRXJyb3IuZ2V0VXNlckRhdGFFcnJvcignTWVzc2FnZSBkYXRhIG9iamVjdCBjYW4gbm90IGJlIGVtcHR5JywgJ01lc3NhZ2UgZGF0YSBvYmplY3QgY2FuIG5vdCBiZSBlbXB0eScpO1xuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LmtleXMoZGF0YSkucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgICAgaWYgKHllc05vUHJvcGVydGllcy5oYXMoa2V5KSAmJiB0eXBlb2YgZGF0YVtrZXldID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgYWNjW2tleV0gPSBkYXRhW2tleV0gPyAneWVzJyA6ICdubyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhY2Nba2V5XSA9IGRhdGFba2V5XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30gYXMgTWFpbGd1bk1lc3NhZ2VEYXRhKTtcbiAgfVxuXG4gIF9wYXJzZVJlc3BvbnNlKHJlc3BvbnNlOiBNZXNzYWdlc1NlbmRBUElSZXNwb25zZSk6IE1lc3NhZ2VzU2VuZFJlc3VsdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgLi4ucmVzcG9uc2UuYm9keVxuICAgIH07XG4gIH1cblxuICBjcmVhdGUoZG9tYWluOiBzdHJpbmcsIGRhdGE6IE1haWxndW5NZXNzYWdlRGF0YSk6IFByb21pc2U8TWVzc2FnZXNTZW5kUmVzdWx0PiB7XG4gICAgaWYgKGRhdGEubWVzc2FnZSkge1xuICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKGAvdjMvJHtkb21haW59L21lc3NhZ2VzLm1pbWVgLCBkYXRhKVxuICAgICAgICAudGhlbih0aGlzLl9wYXJzZVJlc3BvbnNlKTtcbiAgICB9XG5cbiAgICBjb25zdCBtb2RpZmllZERhdGEgPSB0aGlzLnByZXBhcmVCb29sZWFuVmFsdWVzKGRhdGEpO1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRChgL3YzLyR7ZG9tYWlufS9tZXNzYWdlc2AsIG1vZGlmaWVkRGF0YSlcbiAgICAgIC50aGVuKHRoaXMuX3BhcnNlUmVzcG9uc2UpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBJUm91dGVzQ2xpZW50IH0gZnJvbSAnLi4vSW50ZXJmYWNlcyc7XG5pbXBvcnQge1xuICBDcmVhdGVVcGRhdGVSb3V0ZURhdGEsIERlc3Ryb3lSb3V0ZVJlc3BvbnNlLCBSb3V0ZSwgUm91dGVzTGlzdFF1ZXJ5LCBVcGRhdGVSb3V0ZVJlc3BvbnNlXG59IGZyb20gJy4uL1R5cGVzL1JvdXRlcyc7XG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuL2NvbW1vbi9SZXF1ZXN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUm91dGVzQ2xpZW50IGltcGxlbWVudHMgSVJvdXRlc0NsaWVudCB7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCkge1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gIH1cblxuICBsaXN0KHF1ZXJ5OiBSb3V0ZXNMaXN0UXVlcnkpOiBQcm9taXNlPFJvdXRlW10+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCgnL3YzL3JvdXRlcycsIHF1ZXJ5KVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5Lml0ZW1zKTtcbiAgfVxuXG4gIGdldChpZDogc3RyaW5nKTogUHJvbWlzZTxSb3V0ZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KGAvdjMvcm91dGVzLyR7aWR9YClcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keS5yb3V0ZSk7XG4gIH1cblxuICBjcmVhdGUoZGF0YTogQ3JlYXRlVXBkYXRlUm91dGVEYXRhKTogUHJvbWlzZTxSb3V0ZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRCgnL3YzL3JvdXRlcycsIGRhdGEpXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkucm91dGUpO1xuICB9XG5cbiAgdXBkYXRlKGlkOiBzdHJpbmcsIGRhdGE6IENyZWF0ZVVwZGF0ZVJvdXRlRGF0YSk6IFByb21pc2U8VXBkYXRlUm91dGVSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0V2l0aEZEKGAvdjMvcm91dGVzLyR7aWR9YCwgZGF0YSlcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keSk7XG4gIH1cblxuICBkZXN0cm95KGlkOiBzdHJpbmcpOiBQcm9taXNlPERlc3Ryb3lSb3V0ZVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5kZWxldGUoYC92My9yb3V0ZXMvJHtpZH1gKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5KTtcbiAgfVxufVxuIiwiaW1wb3J0IHVybGpvaW4gZnJvbSAndXJsLWpvaW4nO1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi4vY29tbW9uL1JlcXVlc3QnO1xuaW1wb3J0IHsgU3RhdHNRdWVyeSwgU3RhdHNPcHRpb25zIH0gZnJvbSAnLi4vLi4vVHlwZXMvU3RhdHMnO1xuaW1wb3J0IHsgSUxvZ2dlciB9IGZyb20gJy4uLy4uL0ludGVyZmFjZXMvQ29tbW9uJztcbmltcG9ydCBTdGF0c0NvbnRhaW5lciBmcm9tICcuL1N0YXRzQ29udGFpbmVyJztcbmltcG9ydCB7IElTdGF0c0NsaWVudCwgSVN0YXRzQ29udGFpbmVyIH0gZnJvbSAnLi4vLi4vSW50ZXJmYWNlcy9TdGF0cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0YXRzQ2xpZW50IGltcGxlbWVudHMgSVN0YXRzQ2xpZW50IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcbiAgcHJpdmF0ZSBsb2dnZXI6IElMb2dnZXI7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCwgbG9nZ2VyOiBJTG9nZ2VyID0gY29uc29sZSkge1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgdGhpcy5sb2dnZXIgPSBsb2dnZXI7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnREYXRlVG9VVEMoa2V5OnN0cmluZywgaW5wdXREYXRlOiBEYXRlKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgLypcbiAgICAgIEJlY2F1c2UgXCJuZXcgRGF0ZSgnMjAyMi0xMi0yNVQwMDowMDowMC4wMDBaJylcIiBiZWNvbWVzIFwiU3VuIERlYyAyNSAyMDIyIDAyOjAwOjAwIEdNVCswMjAwXCJcbiAgICAgIChwbHVzIDIgaG91cnMgZnJvbSB0aGUgdGltZXpvbmUpXG4gICAgICBhbmQgYmVjYXVzZSBmb3IgQVBJLCB3ZSBuZWVkIHRvIHByb3ZpZGUgdGhlIGRhdGUgaW4gdGhlIGV4cGVjdGVkIGZvcm1hdFxuICAgICAgZXg6ICdUaHUsIDEzIE9jdCAyMDExIDE4OjAyOjAwICswMDAwJy5cbiAgICAgIEhlcmUgd2UgdHJ5IGF1dG8tY29udmVydCB0aGVtIHRvIFVUQ1xuICAgICovXG4gICAgdGhpcy5sb2dnZXIud2FybihgRGF0ZTpcIiR7aW5wdXREYXRlfVwiIHdhcyBhdXRvLWNvbnZlcnRlZCB0byBVVEMgdGltZSB6b25lLlxuVmFsdWUgXCIke2lucHV0RGF0ZS50b1VUQ1N0cmluZygpfVwiIHdpbGwgYmUgdXNlZCBmb3IgcmVxdWVzdC5cbkNvbnNpZGVyIHVzaW5nIHN0cmluZyB0eXBlIGZvciBwcm9wZXJ0eSBcIiR7a2V5fVwiIHRvIGF2b2lkIGF1dG8tY29udmVydGluZ2ApO1xuICAgIHJldHVybiBba2V5LCBpbnB1dERhdGUudG9VVENTdHJpbmcoKV07XG4gIH1cblxuICBwcml2YXRlIHByZXBhcmVTZWFyY2hQYXJhbXMocXVlcnk6IFN0YXRzUXVlcnkgfCB1bmRlZmluZWQpOiBBcnJheTxBcnJheTxzdHJpbmc+PiB7XG4gICAgbGV0IHNlYXJjaFBhcmFtcyA9IFtdIGFzIEFycmF5PEFycmF5PHN0cmluZz4+O1xuICAgIGlmICh0eXBlb2YgcXVlcnkgPT09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKHF1ZXJ5KS5sZW5ndGgpIHtcbiAgICAgIHNlYXJjaFBhcmFtcyA9IE9iamVjdC5lbnRyaWVzKHF1ZXJ5KS5yZWR1Y2UoKGFycmF5V2l0aFBhaXJzLCBjdXJyZW50UGFpcikgPT4ge1xuICAgICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBjdXJyZW50UGFpcjtcblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoKSB7IC8vIGV2ZW50OiBbJ2RlbGl2ZXJlZCcsICdhY2NlcHRlZCddXG4gICAgICAgICAgY29uc3QgcmVwZWF0ZWRQcm9wZXJ0eSA9IHZhbHVlLm1hcCgoaXRlbSkgPT4gW2tleSwgaXRlbV0pO1xuICAgICAgICAgIHJldHVybiBbLi4uYXJyYXlXaXRoUGFpcnMsIC4uLnJlcGVhdGVkUHJvcGVydHldOyAvLyBbW2V2ZW50LGRlbGl2ZXJlZF0sIFtldmVudCxhY2NlcHRlZF1dXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgYXJyYXlXaXRoUGFpcnMucHVzaCh0aGlzLmNvbnZlcnREYXRlVG9VVEMoa2V5LCB2YWx1ZSkpO1xuICAgICAgICAgIHJldHVybiBhcnJheVdpdGhQYWlycztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgYXJyYXlXaXRoUGFpcnMucHVzaChba2V5LCB2YWx1ZV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFycmF5V2l0aFBhaXJzO1xuICAgICAgfSwgW10gYXMgQXJyYXk8QXJyYXk8c3RyaW5nPj4pO1xuICAgIH1cblxuICAgIHJldHVybiBzZWFyY2hQYXJhbXM7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlU3RhdHMocmVzcG9uc2U6IHsgYm9keTogU3RhdHNPcHRpb25zIH0pOiBJU3RhdHNDb250YWluZXIge1xuICAgIHJldHVybiBuZXcgU3RhdHNDb250YWluZXIocmVzcG9uc2UuYm9keSk7XG4gIH1cblxuICBnZXREb21haW4oZG9tYWluOiBzdHJpbmcsIHF1ZXJ5PzogU3RhdHNRdWVyeSk6IFByb21pc2U8SVN0YXRzQ29udGFpbmVyPiB7XG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gdGhpcy5wcmVwYXJlU2VhcmNoUGFyYW1zKHF1ZXJ5KTtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKCcvdjMnLCBkb21haW4sICdzdGF0cy90b3RhbCcpLCBzZWFyY2hQYXJhbXMpXG4gICAgICAudGhlbih0aGlzLnBhcnNlU3RhdHMpO1xuICB9XG5cbiAgZ2V0QWNjb3VudChxdWVyeT86IFN0YXRzUXVlcnkpOiBQcm9taXNlPElTdGF0c0NvbnRhaW5lcj4ge1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IHRoaXMucHJlcGFyZVNlYXJjaFBhcmFtcyhxdWVyeSk7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQoJy92My9zdGF0cy90b3RhbCcsIHNlYXJjaFBhcmFtcylcbiAgICAgIC50aGVuKHRoaXMucGFyc2VTdGF0cyk7XG4gIH1cbn1cbiIsImltcG9ydCB7IElTdGF0c0NvbnRhaW5lciB9IGZyb20gJy4uLy4uL0ludGVyZmFjZXMvU3RhdHMnO1xuaW1wb3J0IHsgU3RhdCwgU3RhdHNPcHRpb25zIH0gZnJvbSAnLi4vLi4vVHlwZXMvU3RhdHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdGF0c0NvbnRhaW5lciBpbXBsZW1lbnRzIElTdGF0c0NvbnRhaW5lciB7XG4gICAgc3RhcnQ6IERhdGU7XG4gICAgZW5kOiBEYXRlO1xuICAgIHJlc29sdXRpb246IHN0cmluZztcbiAgICBzdGF0czogU3RhdFtdO1xuICAgIGNvbnN0cnVjdG9yKGRhdGE6IFN0YXRzT3B0aW9ucykge1xuICAgICAgdGhpcy5zdGFydCA9IG5ldyBEYXRlKGRhdGEuc3RhcnQpO1xuICAgICAgdGhpcy5lbmQgPSBuZXcgRGF0ZShkYXRhLmVuZCk7XG4gICAgICB0aGlzLnJlc29sdXRpb24gPSBkYXRhLnJlc29sdXRpb247XG4gICAgICB0aGlzLnN0YXRzID0gZGF0YS5zdGF0cy5tYXAoZnVuY3Rpb24gKHN0YXQ6IFN0YXQpIHtcbiAgICAgICAgY29uc3QgcmVzID0geyAuLi5zdGF0IH07XG4gICAgICAgIHJlcy50aW1lID0gbmV3IERhdGUoc3RhdC50aW1lKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pO1xuICAgIH1cbn1cbiIsImltcG9ydCBSZXF1ZXN0IGZyb20gJy4vY29tbW9uL1JlcXVlc3QnO1xuaW1wb3J0IHsgSVN1YmFjY291bnRzQ2xpZW50IH0gZnJvbSAnLi4vSW50ZXJmYWNlcyc7XG5pbXBvcnQge1xuICBTdWJhY2NvdW50TGlzdFJlc3BvbnNlRGF0YSxcbiAgU3ViYWNjb3VudFJlc3BvbnNlRGF0YSxcbiAgU3ViYWNjb3VudHNRdWVyeSxcbn0gZnJvbSAnLi4vVHlwZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdWJhY2NvdW50c0NsaWVudCBpbXBsZW1lbnRzIElTdWJhY2NvdW50c0NsaWVudCB7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG4gIHN0YXRpYyBTVUJBQ0NPVU5UX0hFQURFUiA9ICdYLU1haWxndW4tT24tQmVoYWxmLU9mJztcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0KSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgfVxuXG4gIGxpc3QocXVlcnk/OiBTdWJhY2NvdW50c1F1ZXJ5KTogUHJvbWlzZTxTdWJhY2NvdW50TGlzdFJlc3BvbnNlRGF0YT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KCcvdjUvYWNjb3VudHMvc3ViYWNjb3VudHMnLCBxdWVyeSlcbiAgICAgIC50aGVuKChyZXMpID0+IHJlcy5ib2R5KTtcbiAgfVxuXG4gIGdldChpZDpzdHJpbmcpOiBQcm9taXNlPFN1YmFjY291bnRSZXNwb25zZURhdGE+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldChgL3Y1L2FjY291bnRzL3N1YmFjY291bnRzLyR7aWR9YClcbiAgICAgIC50aGVuKChyZXMpID0+IHJlcy5ib2R5KTtcbiAgfVxuXG4gIGNyZWF0ZShuYW1lOnN0cmluZyk6IFByb21pc2U8U3ViYWNjb3VudFJlc3BvbnNlRGF0YT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRCgnL3Y1L2FjY291bnRzL3N1YmFjY291bnRzJywgeyBuYW1lIH0pXG4gICAgICAudGhlbigocmVzKSA9PiByZXMuYm9keSk7XG4gIH1cblxuICBlbmFibGUoaWQ6c3RyaW5nKTogUHJvbWlzZTxTdWJhY2NvdW50UmVzcG9uc2VEYXRhPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0KGAvdjUvYWNjb3VudHMvc3ViYWNjb3VudHMvJHtpZH0vZW5hYmxlYClcbiAgICAgIC50aGVuKChyZXMpID0+IHJlcy5ib2R5KTtcbiAgfVxuXG4gIGRpc2FibGUoaWQ6c3RyaW5nKTogUHJvbWlzZTxTdWJhY2NvdW50UmVzcG9uc2VEYXRhPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0KGAvdjUvYWNjb3VudHMvc3ViYWNjb3VudHMvJHtpZH0vZGlzYWJsZWApXG4gICAgICAudGhlbigocmVzKSA9PiByZXMuYm9keSk7XG4gIH1cbn1cbiIsImltcG9ydCB7IFN1cHByZXNzaW9uTW9kZWxzIH0gZnJvbSAnLi4vLi4vRW51bXMnO1xuaW1wb3J0IHsgSUJvdW5jZSB9IGZyb20gJy4uLy4uL0ludGVyZmFjZXMvU3VwcHJlc3Npb25zJztcbmltcG9ydCB7IEJvdW5jZURhdGEgfSBmcm9tICcuLi8uLi9UeXBlcy9TdXBwcmVzc2lvbnMnO1xuaW1wb3J0IFN1cHByZXNzaW9uIGZyb20gJy4vU3VwcHJlc3Npb24nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCb3VuY2UgZXh0ZW5kcyBTdXBwcmVzc2lvbiBpbXBsZW1lbnRzIElCb3VuY2Uge1xuICAgIGFkZHJlc3M6IHN0cmluZztcbiAgICBjb2RlOiBudW1iZXI7XG4gICAgZXJyb3I6IHN0cmluZztcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cbiAgICBjcmVhdGVkX2F0OiBEYXRlO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YTogQm91bmNlRGF0YSkge1xuICAgICAgc3VwZXIoU3VwcHJlc3Npb25Nb2RlbHMuQk9VTkNFUyk7XG4gICAgICB0aGlzLmFkZHJlc3MgPSBkYXRhLmFkZHJlc3M7XG4gICAgICB0aGlzLmNvZGUgPSArZGF0YS5jb2RlO1xuICAgICAgdGhpcy5lcnJvciA9IGRhdGEuZXJyb3I7XG4gICAgICB0aGlzLmNyZWF0ZWRfYXQgPSBuZXcgRGF0ZShkYXRhLmNyZWF0ZWRfYXQpO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IFN1cHByZXNzaW9uTW9kZWxzIH0gZnJvbSAnLi4vLi4vRW51bXMnO1xuaW1wb3J0IHsgSUNvbXBsYWludCB9IGZyb20gJy4uLy4uL0ludGVyZmFjZXMvU3VwcHJlc3Npb25zJztcbmltcG9ydCB7IENvbXBsYWludERhdGEgfSBmcm9tICcuLi8uLi9UeXBlcy9TdXBwcmVzc2lvbnMnO1xuaW1wb3J0IFN1cHByZXNzaW9uIGZyb20gJy4vU3VwcHJlc3Npb24nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb21wbGFpbnQgZXh0ZW5kcyBTdXBwcmVzc2lvbiBpbXBsZW1lbnRzIElDb21wbGFpbnQge1xuICAgIGFkZHJlc3M6IHN0cmluZztcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cbiAgICBjcmVhdGVkX2F0OiBEYXRlO1xuICAgIGNvbnN0cnVjdG9yKGRhdGE6IENvbXBsYWludERhdGEpIHtcbiAgICAgIHN1cGVyKFN1cHByZXNzaW9uTW9kZWxzLkNPTVBMQUlOVFMpO1xuICAgICAgdGhpcy5hZGRyZXNzID0gZGF0YS5hZGRyZXNzO1xuICAgICAgdGhpcy5jcmVhdGVkX2F0ID0gbmV3IERhdGUoZGF0YS5jcmVhdGVkX2F0KTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBTdXBwcmVzc2lvbk1vZGVscyB9IGZyb20gJy4uLy4uL0VudW1zJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3VwcHJlc3Npb24ge1xuICAgIHR5cGU6IHN0cmluZztcbiAgICBjb25zdHJ1Y3Rvcih0eXBlOiBTdXBwcmVzc2lvbk1vZGVscykge1xuICAgICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB9XG59XG4iLCJpbXBvcnQgdXJsam9pbiBmcm9tICd1cmwtam9pbic7XG5cbi8qIGVzbGludC1kaXNhYmxlIGNhbWVsY2FzZSAqL1xuXG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuLi9jb21tb24vUmVxdWVzdCc7XG5cbmltcG9ydCBBUElFcnJvciBmcm9tICcuLi9jb21tb24vRXJyb3InO1xuaW1wb3J0IE5hdmlnYXRpb25UaHJ1UGFnZXMgZnJvbSAnLi4vY29tbW9uL05hdmlnYXRpb25UaHJ1UGFnZXMnO1xuaW1wb3J0IEJvdW5jZSBmcm9tICcuL0JvdW5jZSc7XG5pbXBvcnQgQ29tcGxhaW50IGZyb20gJy4vQ29tcGxhaW50JztcbmltcG9ydCBVbnN1YnNjcmliZSBmcm9tICcuL1Vuc3Vic2NyaWJlJztcbmltcG9ydCBXaGl0ZUxpc3QgZnJvbSAnLi9XaGl0ZUxpc3QnO1xuaW1wb3J0IFN1cHByZXNzaW9uIGZyb20gJy4vU3VwcHJlc3Npb24nO1xuaW1wb3J0IHtcbiAgSUJvdW5jZSxcbiAgSUNvbXBsYWludCxcbiAgSVN1cHByZXNzaW9uQ2xpZW50LFxuICBJVW5zdWJzY3JpYmUsXG4gIElXaGl0ZUxpc3Rcbn0gZnJvbSAnLi4vLi4vSW50ZXJmYWNlcy9TdXBwcmVzc2lvbnMnO1xuaW1wb3J0IHtcbiAgU3VwcHJlc3Npb25MaXN0LFxuICBTdXBwcmVzc2lvbkxpc3RSZXNwb25zZSxcbiAgU3VwcHJlc3Npb25EYXRhVHlwZSxcbiAgU3VwcHJlc3Npb25DcmVhdGlvbkRhdGEsXG4gIFN1cHByZXNzaW9uQ3JlYXRpb25SZXN1bHQsXG4gIFN1cHByZXNzaW9uQ3JlYXRpb25SZXNwb25zZSxcbiAgU3VwcHJlc3Npb25MaXN0UXVlcnksXG4gIFN1cHByZXNzaW9uUmVzcG9uc2UsXG4gIFN1cHByZXNzaW9uRGVzdHJveVJlc3VsdCxcbiAgU3VwcHJlc3Npb25EZXN0cm95UmVzcG9uc2Vcbn0gZnJvbSAnLi4vLi4vVHlwZXMvU3VwcHJlc3Npb25zJztcblxuY29uc3QgY3JlYXRlT3B0aW9ucyA9IHtcbiAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN1cHByZXNzaW9uQ2xpZW50XG4gIGV4dGVuZHMgTmF2aWdhdGlvblRocnVQYWdlczxTdXBwcmVzc2lvbkxpc3Q+XG4gIGltcGxlbWVudHMgSVN1cHByZXNzaW9uQ2xpZW50IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcbiAgbW9kZWxzOiBvYmplY3Q7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCkge1xuICAgIHN1cGVyKHJlcXVlc3QpO1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgdGhpcy5tb2RlbHMgPSB7XG4gICAgICBib3VuY2VzOiBCb3VuY2UsXG4gICAgICBjb21wbGFpbnRzOiBDb21wbGFpbnQsXG4gICAgICB1bnN1YnNjcmliZXM6IFVuc3Vic2NyaWJlLFxuICAgICAgd2hpdGVsaXN0czogV2hpdGVMaXN0LFxuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgcGFyc2VMaXN0KFxuICAgIHJlc3BvbnNlOiBTdXBwcmVzc2lvbkxpc3RSZXNwb25zZSxcbiAgICBNb2RlbDoge1xuICAgICAgbmV3KGRhdGE6IFN1cHByZXNzaW9uRGF0YVR5cGUpOlxuICAgICAgSUJvdW5jZSB8IElDb21wbGFpbnQgfCBJVW5zdWJzY3JpYmUgfCBJV2hpdGVMaXN0XG4gICAgfVxuICApOiBTdXBwcmVzc2lvbkxpc3Qge1xuICAgIGNvbnN0IGRhdGEgPSB7fSBhcyBTdXBwcmVzc2lvbkxpc3Q7XG4gICAgZGF0YS5pdGVtcyA9IHJlc3BvbnNlLmJvZHkuaXRlbXM/Lm1hcCgoaXRlbSkgPT4gbmV3IE1vZGVsKGl0ZW0pKSB8fCBbXTtcblxuICAgIGRhdGEucGFnZXMgPSB0aGlzLnBhcnNlUGFnZUxpbmtzKHJlc3BvbnNlLCAnPycsICdhZGRyZXNzJyk7XG4gICAgZGF0YS5zdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBfcGFyc2VJdGVtPFQgZXh0ZW5kcyBTdXBwcmVzc2lvbj4oXG4gICAgZGF0YSA6IFN1cHByZXNzaW9uRGF0YVR5cGUsXG4gICAgTW9kZWw6IHtcbiAgICAgIG5ldyhkYXRhVHlwZTogU3VwcHJlc3Npb25EYXRhVHlwZSk6VFxuICAgIH1cbiAgKTogVCB7XG4gICAgcmV0dXJuIG5ldyBNb2RlbChkYXRhKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlV2hpdGVMaXN0KFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIGRhdGE6IFN1cHByZXNzaW9uQ3JlYXRpb25EYXRhIHwgU3VwcHJlc3Npb25DcmVhdGlvbkRhdGFbXSxcbiAgICBpc0RhdGFBcnJheTogYm9vbGVhblxuICApOiBQcm9taXNlPFN1cHByZXNzaW9uQ3JlYXRpb25SZXN1bHQ+IHtcbiAgICBpZiAoaXNEYXRhQXJyYXkpIHtcbiAgICAgIHRocm93IEFQSUVycm9yLmdldFVzZXJEYXRhRXJyb3IoXG4gICAgICAgICdEYXRhIHByb3BlcnR5IHNob3VsZCBiZSBhbiBvYmplY3QnLFxuICAgICAgICAnV2hpdGVsaXN0XFwncyBjcmVhdGlvbiBwcm9jZXNzIGRvZXMgbm90IHN1cHBvcnQgbXVsdGlwbGUgY3JlYXRpb25zLiBEYXRhIHByb3BlcnR5IHNob3VsZCBiZSBhbiBvYmplY3QnXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0XG4gICAgICAucG9zdFdpdGhGRCh1cmxqb2luKCd2MycsIGRvbWFpbiwgJ3doaXRlbGlzdHMnKSwgZGF0YSBhcyBTdXBwcmVzc2lvbkNyZWF0aW9uRGF0YSlcbiAgICAgIC50aGVuKHRoaXMucHJlcGFyZVJlc3BvbnNlKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlVW5zdWJzY3JpYmUoXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgZGF0YTogU3VwcHJlc3Npb25DcmVhdGlvbkRhdGEgfCBTdXBwcmVzc2lvbkNyZWF0aW9uRGF0YVtdXG4gICk6IFByb21pc2U8U3VwcHJlc3Npb25DcmVhdGlvblJlc3VsdD4ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7IC8vIFVzZXIgcHJvdmlkZWQgYW4gYXJyYXlcbiAgICAgIGNvbnN0IGlzQ29udGFpbnNUYWcgPSBkYXRhLnNvbWUoKHVuc3Vic2NyaWJlOiBTdXBwcmVzc2lvbkNyZWF0aW9uRGF0YSkgPT4gdW5zdWJzY3JpYmUudGFnKTtcbiAgICAgIGlmIChpc0NvbnRhaW5zVGFnKSB7XG4gICAgICAgIHRocm93IEFQSUVycm9yLmdldFVzZXJEYXRhRXJyb3IoXG4gICAgICAgICAgJ1RhZyBwcm9wZXJ0eSBzaG91bGQgbm90IGJlIHVzZWQgZm9yIGNyZWF0aW5nIG11bHRpcGxlIHVuc3Vic2NyaWJlcy4nLFxuICAgICAgICAgICdUYWcgcHJvcGVydHkgY2FuIGJlIHVzZWQgb25seSBpZiBvbmUgdW5zdWJzY3JpYmUgcHJvdmlkZWQgYXMgc2Vjb25kIGFyZ3VtZW50IG9mIGNyZWF0ZSBtZXRob2QuIFBsZWFzZSB1c2UgdGFncyBpbnN0ZWFkLidcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnJlcXVlc3RcbiAgICAgICAgLnBvc3QodXJsam9pbigndjMnLCBkb21haW4sICd1bnN1YnNjcmliZXMnKSwgSlNPTi5zdHJpbmdpZnkoZGF0YSksIGNyZWF0ZU9wdGlvbnMpXG4gICAgICAgIC50aGVuKHRoaXMucHJlcGFyZVJlc3BvbnNlKTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YT8udGFncykge1xuICAgICAgdGhyb3cgQVBJRXJyb3IuZ2V0VXNlckRhdGFFcnJvcihcbiAgICAgICAgJ1RhZ3MgcHJvcGVydHkgc2hvdWxkIG5vdCBiZSB1c2VkIGZvciBjcmVhdGluZyBvbmUgdW5zdWJzY3JpYmUuJyxcbiAgICAgICAgJ1RhZ3MgcHJvcGVydHkgY2FuIGJlIHVzZWQgaWYgeW91IHByb3ZpZGVzIGFuIGFycmF5IG9mIHVuc3Vic2NyaWJlcyBhcyBzZWNvbmQgYXJndW1lbnQgb2YgY3JlYXRlIG1ldGhvZC4gUGxlYXNlIHVzZSB0YWcgaW5zdGVhZCdcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEudGFnKSkge1xuICAgICAgdGhyb3cgQVBJRXJyb3IuZ2V0VXNlckRhdGFFcnJvcihcbiAgICAgICAgJ1RhZyBwcm9wZXJ0eSBjYW4gbm90IGJlIGFuIGFycmF5JyxcbiAgICAgICAgJ1BsZWFzZSB1c2UgYXJyYXkgb2YgdW5zdWJzY3JpYmVzIGFzIHNlY29uZCBhcmd1bWVudCBvZiBjcmVhdGUgbWV0aG9kIHRvIGJlIGFibGUgdG8gcHJvdmlkZSBmZXcgdGFncydcbiAgICAgICk7XG4gICAgfVxuICAgIC8qIFdlIG5lZWQgRm9ybSBEYXRhIGZvciB1bnN1YnNjcmliZXMgaWYgd2Ugd2FudCB0byBzdXBwb3J0IHRoZSBcInRhZ1wiIHByb3BlcnR5ICovXG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdFxuICAgICAgLnBvc3RXaXRoRkQodXJsam9pbigndjMnLCBkb21haW4sICd1bnN1YnNjcmliZXMnKSwgZGF0YSlcbiAgICAgIC50aGVuKHRoaXMucHJlcGFyZVJlc3BvbnNlKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TW9kZWwodHlwZTogc3RyaW5nKSB7XG4gICAgaWYgKHR5cGUgaW4gdGhpcy5tb2RlbHMpIHtcbiAgICAgIHJldHVybiB0aGlzLm1vZGVsc1t0eXBlIGFzIGtleW9mIHR5cGVvZiB0aGlzLm1vZGVsc107XG4gICAgfVxuICAgIHRocm93IEFQSUVycm9yLmdldFVzZXJEYXRhRXJyb3IoXG4gICAgICAnVW5rbm93biB0eXBlIHZhbHVlJyxcbiAgICAgICdUeXBlIG1heSBiZSBvbmx5IG9uZSBvZiBbYm91bmNlcywgY29tcGxhaW50cywgdW5zdWJzY3JpYmVzLCB3aGl0ZWxpc3RzXSdcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVwYXJlUmVzcG9uc2UocmVzcG9uc2U6IFN1cHByZXNzaW9uQ3JlYXRpb25SZXNwb25zZSk6IFN1cHByZXNzaW9uQ3JlYXRpb25SZXN1bHQge1xuICAgIHJldHVybiB7XG4gICAgICBtZXNzYWdlOiByZXNwb25zZS5ib2R5Lm1lc3NhZ2UsXG4gICAgICB0eXBlOiByZXNwb25zZS5ib2R5LnR5cGUgfHwgJycsXG4gICAgICB2YWx1ZTogcmVzcG9uc2UuYm9keS52YWx1ZSB8fCAnJyxcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGxpc3QoXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgdHlwZTogc3RyaW5nLFxuICAgIHF1ZXJ5PzogU3VwcHJlc3Npb25MaXN0UXVlcnlcbiAgKTogUHJvbWlzZTxTdXBwcmVzc2lvbkxpc3Q+IHtcbiAgICBjb25zdCBtb2RlbCA9IHRoaXMuZ2V0TW9kZWwodHlwZSk7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdExpc3RXaXRoUGFnZXModXJsam9pbigndjMnLCBkb21haW4sIHR5cGUpLCBxdWVyeSwgbW9kZWwpO1xuICB9XG5cbiAgZ2V0KFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIHR5cGU6IHN0cmluZyxcbiAgICBhZGRyZXNzOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxJQm91bmNlIHwgSUNvbXBsYWludCB8IElVbnN1YnNjcmliZSB8IElXaGl0ZUxpc3Q+IHtcbiAgICBjb25zdCBtb2RlbCA9IHRoaXMuZ2V0TW9kZWwodHlwZSk7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdFxuICAgICAgLmdldCh1cmxqb2luKCd2MycsIGRvbWFpbiwgdHlwZSwgZW5jb2RlVVJJQ29tcG9uZW50KGFkZHJlc3MpKSlcbiAgICAgIC50aGVuKChyZXNwb25zZTogU3VwcHJlc3Npb25SZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VJdGVtPHR5cGVvZiBtb2RlbD4ocmVzcG9uc2UuYm9keSwgbW9kZWwpKTtcbiAgfVxuXG4gIGNyZWF0ZShcbiAgICBkb21haW46IHN0cmluZyxcbiAgICB0eXBlOiBzdHJpbmcsXG4gICAgZGF0YTogU3VwcHJlc3Npb25DcmVhdGlvbkRhdGEgfCBTdXBwcmVzc2lvbkNyZWF0aW9uRGF0YVtdXG4gICk6IFByb21pc2U8U3VwcHJlc3Npb25DcmVhdGlvblJlc3VsdD4ge1xuICAgIHRoaXMuZ2V0TW9kZWwodHlwZSk7XG4gICAgLy8gc3VwcG9ydHMgYWRkaW5nIG11bHRpcGxlIHN1cHByZXNzaW9ucyBieSBkZWZhdWx0XG4gICAgbGV0IHBvc3REYXRhO1xuICAgIGNvbnN0IGlzRGF0YUFycmF5ID0gQXJyYXkuaXNBcnJheShkYXRhKTtcblxuICAgIGlmICh0eXBlID09PSAnd2hpdGVsaXN0cycpIHtcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVdoaXRlTGlzdChkb21haW4sIGRhdGEsIGlzRGF0YUFycmF5KTtcbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PT0gJ3Vuc3Vic2NyaWJlcycpIHtcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVVuc3Vic2NyaWJlKGRvbWFpbiwgZGF0YSk7XG4gICAgfVxuXG4gICAgaWYgKCFpc0RhdGFBcnJheSkge1xuICAgICAgcG9zdERhdGEgPSBbZGF0YV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHBvc3REYXRhID0gWy4uLmRhdGFdO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnJlcXVlc3RcbiAgICAgIC5wb3N0KHVybGpvaW4oJ3YzJywgZG9tYWluLCB0eXBlKSwgSlNPTi5zdHJpbmdpZnkocG9zdERhdGEpLCBjcmVhdGVPcHRpb25zKVxuICAgICAgLnRoZW4odGhpcy5wcmVwYXJlUmVzcG9uc2UpO1xuICB9XG5cbiAgZGVzdHJveShcbiAgICBkb21haW46IHN0cmluZyxcbiAgICB0eXBlOiBzdHJpbmcsXG4gICAgYWRkcmVzczogc3RyaW5nXG4gICk6IFByb21pc2U8U3VwcHJlc3Npb25EZXN0cm95UmVzdWx0PiB7XG4gICAgdGhpcy5nZXRNb2RlbCh0eXBlKTtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0XG4gICAgICAuZGVsZXRlKHVybGpvaW4oJ3YzJywgZG9tYWluLCB0eXBlLCBlbmNvZGVVUklDb21wb25lbnQoYWRkcmVzcykpKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiBTdXBwcmVzc2lvbkRlc3Ryb3lSZXNwb25zZSkgPT4gKHtcbiAgICAgICAgbWVzc2FnZTogcmVzcG9uc2UuYm9keS5tZXNzYWdlLFxuICAgICAgICB2YWx1ZTogcmVzcG9uc2UuYm9keS52YWx1ZSB8fCAnJyxcbiAgICAgICAgYWRkcmVzczogcmVzcG9uc2UuYm9keS5hZGRyZXNzIHx8ICcnLFxuICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1c1xuICAgICAgfSkpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gU3VwcHJlc3Npb25DbGllbnQ7XG4iLCJpbXBvcnQgeyBTdXBwcmVzc2lvbk1vZGVscyB9IGZyb20gJy4uLy4uL0VudW1zJztcbmltcG9ydCB7IElVbnN1YnNjcmliZSB9IGZyb20gJy4uLy4uL0ludGVyZmFjZXMvU3VwcHJlc3Npb25zJztcbmltcG9ydCB7IFVuc3Vic2NyaWJlRGF0YSB9IGZyb20gJy4uLy4uL1R5cGVzL1N1cHByZXNzaW9ucyc7XG5cbmltcG9ydCBTdXBwcmVzc2lvbiBmcm9tICcuL1N1cHByZXNzaW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVW5zdWJzY3JpYmUgZXh0ZW5kcyBTdXBwcmVzc2lvbiBpbXBsZW1lbnRzIElVbnN1YnNjcmliZSB7XG4gICAgYWRkcmVzczogc3RyaW5nO1xuICAgIHRhZ3M6IHN0cmluZ1tdO1xuICAgIC8qIGVzbGludC1kaXNhYmxlIGNhbWVsY2FzZSAqL1xuICAgIGNyZWF0ZWRfYXQ6IERhdGU7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhOiBVbnN1YnNjcmliZURhdGEpIHtcbiAgICAgIHN1cGVyKFN1cHByZXNzaW9uTW9kZWxzLlVOU1VCU0NSSUJFUyk7XG4gICAgICB0aGlzLmFkZHJlc3MgPSBkYXRhLmFkZHJlc3M7XG4gICAgICB0aGlzLnRhZ3MgPSBkYXRhLnRhZ3M7XG4gICAgICB0aGlzLmNyZWF0ZWRfYXQgPSBuZXcgRGF0ZShkYXRhLmNyZWF0ZWRfYXQpO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IFN1cHByZXNzaW9uTW9kZWxzIH0gZnJvbSAnLi4vLi4vRW51bXMnO1xuaW1wb3J0IHsgSVdoaXRlTGlzdCB9IGZyb20gJy4uLy4uL0ludGVyZmFjZXMvU3VwcHJlc3Npb25zJztcbmltcG9ydCB7IFdoaXRlTGlzdERhdGEgfSBmcm9tICcuLi8uLi9UeXBlcy9TdXBwcmVzc2lvbnMnO1xuaW1wb3J0IFN1cHByZXNzaW9uIGZyb20gJy4vU3VwcHJlc3Npb24nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXaGl0ZUxpc3QgZXh0ZW5kcyBTdXBwcmVzc2lvbiBpbXBsZW1lbnRzIElXaGl0ZUxpc3Qge1xuICAgIHZhbHVlOiBzdHJpbmc7XG4gICAgcmVhc29uOiBzdHJpbmc7XG4gICAgY3JlYXRlZEF0OiBEYXRlO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YTogV2hpdGVMaXN0RGF0YSkge1xuICAgICAgc3VwZXIoU3VwcHJlc3Npb25Nb2RlbHMuV0hJVEVMSVNUUyk7XG4gICAgICB0aGlzLnZhbHVlID0gZGF0YS52YWx1ZTtcbiAgICAgIHRoaXMucmVhc29uID0gZGF0YS5yZWFzb247XG4gICAgICB0aGlzLmNyZWF0ZWRBdCA9IG5ldyBEYXRlKGRhdGEuY3JlYXRlZEF0KTtcbiAgICB9XG59XG4iLCJpbXBvcnQgTmF2aWdhdGlvblRocnVQYWdlcyBmcm9tICcuLi9jb21tb24vTmF2aWdhdGlvblRocnVQYWdlcyc7XG5pbXBvcnQgeyBBUElSZXNwb25zZSB9IGZyb20gJy4uLy4uL1R5cGVzL0NvbW1vbi9BcGlSZXNwb25zZSc7XG5cbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4uL2NvbW1vbi9SZXF1ZXN0JztcbmltcG9ydCB7IElNdWx0aXBsZVZhbGlkYXRpb25DbGllbnQgfSBmcm9tICcuLi8uLi9JbnRlcmZhY2VzL1ZhbGlkYXRpb25zJztcbmltcG9ydCB7XG4gIE11bHRpcGxlVmFsaWRhdGlvbkpvYlJlc3VsdCxcbiAgTXVsdGlwbGVWYWxpZGF0aW9uSm9iRGF0YSxcbiAgTXVsdGlwbGVWYWxpZGF0aW9uSm9ic0xpc3RSZXN1bHQsXG4gIE11bHRpcGxlVmFsaWRhdGlvbkpvYnNMaXN0UmVzcG9uc2UsXG4gIE11bHRpcGxlVmFsaWRhdGlvbkpvYnNMaXN0UXVlcnksXG4gIE11bHRpcGxlVmFsaWRhdGlvbkNyZWF0aW9uRGF0YSxcbiAgQ3JlYXRlZE11bHRpcGxlVmFsaWRhdGlvbkpvYixcbiAgTXVsdGlwbGVWYWxpZGF0aW9uQ3JlYXRpb25EYXRhVXBkYXRlZCxcbiAgQ2FuY2VsZWRNdWx0aXBsZVZhbGlkYXRpb25Kb2Jcbn0gZnJvbSAnLi4vLi4vVHlwZXMvVmFsaWRhdGlvbnMvTXVsdGlwbGVWYWxpZGF0aW9uJztcbmltcG9ydCBBdHRhY2htZW50c0hhbmRsZXIgZnJvbSAnLi4vY29tbW9uL0F0dGFjaG1lbnRzSGFuZGxlcic7XG5pbXBvcnQgQVBJRXJyb3IgZnJvbSAnLi4vY29tbW9uL0Vycm9yJztcblxuZXhwb3J0IGNsYXNzIE11bHRpcGxlVmFsaWRhdGlvbkpvYiBpbXBsZW1lbnRzIE11bHRpcGxlVmFsaWRhdGlvbkpvYlJlc3VsdCB7XG4gIGNyZWF0ZWRBdDogRGF0ZTtcbiAgaWQ6IHN0cmluZztcbiAgcXVhbnRpdHk6IG51bWJlclxuICByZWNvcmRzUHJvY2Vzc2VkOiBudW1iZXIgfCBudWxsO1xuICBzdGF0dXM6IHN0cmluZztcbiAgZG93bmxvYWRVcmw/OiB7XG4gICAgY3N2OiBzdHJpbmc7XG4gICAganNvbjogc3RyaW5nO1xuICB9O1xuXG4gIHJlc3BvbnNlU3RhdHVzQ29kZTogbnVtYmVyO1xuICBzdW1tYXJ5Pzoge1xuICAgICAgcmVzdWx0OiB7XG4gICAgICAgICAgY2F0Y2hBbGw6IG51bWJlcjtcbiAgICAgICAgICBkZWxpdmVyYWJsZTogbnVtYmVyO1xuICAgICAgICAgIGRvTm90U2VuZDogbnVtYmVyO1xuICAgICAgICAgIHVuZGVsaXZlcmFibGU6IG51bWJlcjtcbiAgICAgICAgICB1bmtub3duOiBudW1iZXI7XG4gICAgICB9O1xuICAgICAgcmlzazoge1xuICAgICAgICAgIGhpZ2g6IG51bWJlcjtcbiAgICAgICAgICBsb3c6IG51bWJlcjtcbiAgICAgICAgICBtZWRpdW06IG51bWJlcjtcbiAgICAgICAgICB1bmtub3duOiBudW1iZXI7XG4gICAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3RvcihkYXRhOiBNdWx0aXBsZVZhbGlkYXRpb25Kb2JEYXRhLCByZXNwb25zZVN0YXR1c0NvZGU6IG51bWJlcikge1xuICAgIHRoaXMuY3JlYXRlZEF0ID0gbmV3IERhdGUoZGF0YS5jcmVhdGVkX2F0KTtcbiAgICB0aGlzLmlkID0gZGF0YS5pZDtcbiAgICB0aGlzLnF1YW50aXR5ID0gZGF0YS5xdWFudGl0eTtcbiAgICB0aGlzLnJlY29yZHNQcm9jZXNzZWQgPSBkYXRhLnJlY29yZHNfcHJvY2Vzc2VkO1xuICAgIHRoaXMuc3RhdHVzID0gZGF0YS5zdGF0dXM7XG4gICAgdGhpcy5yZXNwb25zZVN0YXR1c0NvZGUgPSByZXNwb25zZVN0YXR1c0NvZGU7XG4gICAgaWYgKGRhdGEuZG93bmxvYWRfdXJsKSB7XG4gICAgICB0aGlzLmRvd25sb2FkVXJsID0ge1xuICAgICAgICBjc3Y6IGRhdGEuZG93bmxvYWRfdXJsPy5jc3YsXG4gICAgICAgIGpzb246IGRhdGEuZG93bmxvYWRfdXJsPy5qc29uXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoZGF0YS5zdW1tYXJ5KSB7XG4gICAgICB0aGlzLnN1bW1hcnkgPSB7XG4gICAgICAgIHJlc3VsdDoge1xuICAgICAgICAgIGNhdGNoQWxsOiBkYXRhLnN1bW1hcnkucmVzdWx0LmNhdGNoX2FsbCxcbiAgICAgICAgICBkZWxpdmVyYWJsZTogZGF0YS5zdW1tYXJ5LnJlc3VsdC5kZWxpdmVyYWJsZSxcbiAgICAgICAgICBkb05vdFNlbmQ6IGRhdGEuc3VtbWFyeS5yZXN1bHQuZG9fbm90X3NlbmQsXG4gICAgICAgICAgdW5kZWxpdmVyYWJsZTogZGF0YS5zdW1tYXJ5LnJlc3VsdC51bmRlbGl2ZXJhYmxlLFxuICAgICAgICAgIHVua25vd246IGRhdGEuc3VtbWFyeS5yZXN1bHQudW5rbm93blxuICAgICAgICB9LFxuICAgICAgICByaXNrOiB7XG4gICAgICAgICAgaGlnaDogZGF0YS5zdW1tYXJ5LnJpc2suaGlnaCxcbiAgICAgICAgICBsb3c6IGRhdGEuc3VtbWFyeS5yaXNrLmxvdyxcbiAgICAgICAgICBtZWRpdW06IGRhdGEuc3VtbWFyeS5yaXNrLm1lZGl1bSxcbiAgICAgICAgICB1bmtub3duOiBkYXRhLnN1bW1hcnkucmlzay51bmtub3duXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE11bHRpcGxlVmFsaWRhdGlvbkNsaWVudFxuICBleHRlbmRzIE5hdmlnYXRpb25UaHJ1UGFnZXM8TXVsdGlwbGVWYWxpZGF0aW9uSm9ic0xpc3RSZXN1bHQ+XG4gIGltcGxlbWVudHMgSU11bHRpcGxlVmFsaWRhdGlvbkNsaWVudCB7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG4gIHByaXZhdGUgYXR0YWNobWVudHNIYW5kbGVyOiBBdHRhY2htZW50c0hhbmRsZXI7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICB0aGlzLmF0dGFjaG1lbnRzSGFuZGxlciA9IG5ldyBBdHRhY2htZW50c0hhbmRsZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlUmVzcG9uc2U8VD4ocmVzcG9uc2U6IEFQSVJlc3BvbnNlKTogVCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgLi4ucmVzcG9uc2U/LmJvZHlcbiAgICB9IGFzIFQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgcGFyc2VMaXN0KHJlc3BvbnNlOiBNdWx0aXBsZVZhbGlkYXRpb25Kb2JzTGlzdFJlc3BvbnNlKVxuICAgIDogTXVsdGlwbGVWYWxpZGF0aW9uSm9ic0xpc3RSZXN1bHQge1xuICAgIGNvbnN0IGRhdGEgPSB7fSBhcyBNdWx0aXBsZVZhbGlkYXRpb25Kb2JzTGlzdFJlc3VsdDtcblxuICAgIGRhdGEuam9icyA9IHJlc3BvbnNlLmJvZHkuam9icy5tYXAoKGpvYikgPT4gbmV3IE11bHRpcGxlVmFsaWRhdGlvbkpvYihqb2IsIHJlc3BvbnNlLnN0YXR1cykpO1xuXG4gICAgZGF0YS5wYWdlcyA9IHRoaXMucGFyc2VQYWdlTGlua3MocmVzcG9uc2UsICc/JywgJ3Bpdm90Jyk7XG4gICAgZGF0YS50b3RhbCA9IHJlc3BvbnNlLmJvZHkudG90YWw7XG4gICAgZGF0YS5zdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGFzeW5jIGxpc3QocXVlcnk/OiBNdWx0aXBsZVZhbGlkYXRpb25Kb2JzTGlzdFF1ZXJ5KTogUHJvbWlzZTxNdWx0aXBsZVZhbGlkYXRpb25Kb2JzTGlzdFJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3RMaXN0V2l0aFBhZ2VzKCcvdjQvYWRkcmVzcy92YWxpZGF0ZS9idWxrJywgcXVlcnkpO1xuICB9XG5cbiAgYXN5bmMgZ2V0KGxpc3RJZDogc3RyaW5nKTogUHJvbWlzZTxNdWx0aXBsZVZhbGlkYXRpb25Kb2I+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5nZXQoYC92NC9hZGRyZXNzL3ZhbGlkYXRlL2J1bGsvJHtsaXN0SWR9YCk7XG4gICAgcmV0dXJuIG5ldyBNdWx0aXBsZVZhbGlkYXRpb25Kb2IocmVzcG9uc2UuYm9keSwgcmVzcG9uc2Uuc3RhdHVzKTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydFRvRXhwZWN0ZWRTaGFwZShkYXRhOiBNdWx0aXBsZVZhbGlkYXRpb25DcmVhdGlvbkRhdGEpXG4gICAgOiBNdWx0aXBsZVZhbGlkYXRpb25DcmVhdGlvbkRhdGFVcGRhdGVkIHtcbiAgICBsZXQgbXVsdGlwbGVWYWxpZGF0aW9uRGF0YTogTXVsdGlwbGVWYWxpZGF0aW9uQ3JlYXRpb25EYXRhVXBkYXRlZDtcbiAgICBpZiAodGhpcy5hdHRhY2htZW50c0hhbmRsZXIuaXNCdWZmZXIoZGF0YS5maWxlKSkge1xuICAgICAgbXVsdGlwbGVWYWxpZGF0aW9uRGF0YSA9IHsgbXVsdGlwbGVWYWxpZGF0aW9uRmlsZTogZGF0YS5maWxlIH07XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YS5maWxlID09PSAnc3RyaW5nJykge1xuICAgICAgbXVsdGlwbGVWYWxpZGF0aW9uRGF0YSA9IHsgbXVsdGlwbGVWYWxpZGF0aW9uRmlsZTogeyBkYXRhOiBkYXRhLmZpbGUgfSB9O1xuICAgIH0gZWxzZSBpZiAodGhpcy5hdHRhY2htZW50c0hhbmRsZXIuaXNTdHJlYW0oZGF0YS5maWxlKSkge1xuICAgICAgbXVsdGlwbGVWYWxpZGF0aW9uRGF0YSA9IHsgbXVsdGlwbGVWYWxpZGF0aW9uRmlsZTogZGF0YS5maWxlIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIG11bHRpcGxlVmFsaWRhdGlvbkRhdGEgPSB7IG11bHRpcGxlVmFsaWRhdGlvbkZpbGU6IGRhdGEuZmlsZSB9O1xuICAgIH1cblxuICAgIHJldHVybiBtdWx0aXBsZVZhbGlkYXRpb25EYXRhO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlKFxuICAgIGxpc3RJZDogc3RyaW5nLFxuICAgIGRhdGE6IE11bHRpcGxlVmFsaWRhdGlvbkNyZWF0aW9uRGF0YVxuICApOiBQcm9taXNlPENyZWF0ZWRNdWx0aXBsZVZhbGlkYXRpb25Kb2I+IHtcbiAgICBpZiAoIWRhdGEgfHwgIWRhdGEuZmlsZSkge1xuICAgICAgdGhyb3cgQVBJRXJyb3IuZ2V0VXNlckRhdGFFcnJvcignXCJmaWxlXCIgcHJvcGVydHkgZXhwZWN0ZWQuJywgJ01ha2Ugc3VyZSBzZWNvbmQgYXJndW1lbnQgaGFzIFwiZmlsZVwiIHByb3BlcnR5LicpO1xuICAgIH1cbiAgICBjb25zdCBtdWx0aXBsZVZhbGlkYXRpb25EYXRhID0gdGhpcy5jb252ZXJ0VG9FeHBlY3RlZFNoYXBlKGRhdGEpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQoYC92NC9hZGRyZXNzL3ZhbGlkYXRlL2J1bGsvJHtsaXN0SWR9YCwgbXVsdGlwbGVWYWxpZGF0aW9uRGF0YSk7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlUmVzcG9uc2U8Q3JlYXRlZE11bHRpcGxlVmFsaWRhdGlvbkpvYj4ocmVzcG9uc2UpO1xuICB9XG5cbiAgYXN5bmMgZGVzdHJveShsaXN0SWQ6IHN0cmluZyk6IFByb21pc2U8Q2FuY2VsZWRNdWx0aXBsZVZhbGlkYXRpb25Kb2I+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5kZWxldGUoYC92NC9hZGRyZXNzL3ZhbGlkYXRlL2J1bGsvJHtsaXN0SWR9YCk7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlUmVzcG9uc2U8Q2FuY2VsZWRNdWx0aXBsZVZhbGlkYXRpb25Kb2I+KHJlc3BvbnNlKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVZhbGlkYXRpb25DbGllbnQsIElNdWx0aXBsZVZhbGlkYXRpb25DbGllbnQgfSBmcm9tICcuLi8uLi9JbnRlcmZhY2VzL1ZhbGlkYXRpb25zJztcbmltcG9ydCB7IFZhbGlkYXRpb25RdWVyeSwgVmFsaWRhdGlvblJlc3VsdCwgVmFsaWRhdGlvblJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vVHlwZXMvVmFsaWRhdGlvbnMnO1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi4vY29tbW9uL1JlcXVlc3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWYWxpZGF0ZUNsaWVudCBpbXBsZW1lbnRzIElWYWxpZGF0aW9uQ2xpZW50IHtcbiAgcHVibGljIG11bHRpcGxlVmFsaWRhdGlvbjtcbiAgcmVxdWVzdDogUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0LCBtdWx0aXBsZVZhbGlkYXRpb25DbGllbnQ6IElNdWx0aXBsZVZhbGlkYXRpb25DbGllbnQpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMubXVsdGlwbGVWYWxpZGF0aW9uID0gbXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50O1xuICB9XG5cbiAgYXN5bmMgZ2V0KGFkZHJlc3M6IHN0cmluZyk6IFByb21pc2U8VmFsaWRhdGlvblJlc3VsdD4ge1xuICAgIGNvbnN0IHF1ZXJ5OiBWYWxpZGF0aW9uUXVlcnkgPSB7IGFkZHJlc3MgfTtcbiAgICBjb25zdCByZXN1bHQ6IFZhbGlkYXRpb25SZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5nZXQoJy92NC9hZGRyZXNzL3ZhbGlkYXRlJywgcXVlcnkpO1xuICAgIHJldHVybiByZXN1bHQuYm9keSBhcyBWYWxpZGF0aW9uUmVzdWx0O1xuICB9XG59XG4iLCJpbXBvcnQgdXJsam9pbiBmcm9tICd1cmwtam9pbic7XG5pbXBvcnQgeyBXZWJob29rc0lkcyB9IGZyb20gJy4uL0VudW1zJztcbmltcG9ydCB7IElXZWJIb29rc0NsaWVudCB9IGZyb20gJy4uL0ludGVyZmFjZXMvV2ViaG9va3MnO1xuXG5pbXBvcnQge1xuICBXZWJob29rVmFsaWRhdGlvblJlc3BvbnNlLFxuICBXZWJob29rTGlzdCxcbiAgV2ViaG9va1Jlc3BvbnNlLFxuICBXZWJob29rc1F1ZXJ5LFxuICBXZWJob29rUmVzdWx0XG59IGZyb20gJy4uL1R5cGVzL1dlYmhvb2tzJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vY29tbW9uL1JlcXVlc3QnO1xuXG5leHBvcnQgY2xhc3MgV2ViaG9vayBpbXBsZW1lbnRzIFdlYmhvb2tSZXN1bHQge1xuICBpZDogc3RyaW5nO1xuICB1cmw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgdXJsczogc3RyaW5nW107XG5cbiAgY29uc3RydWN0b3IoaWQ6IHN0cmluZywgdXJsOiBzdHJpbmcgfCB1bmRlZmluZWQsIHVybHM6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5pZCA9IGlkO1xuICAgIHRoaXMudXJsID0gdXJsO1xuICAgIHRoaXMudXJscyA9IHVybHM7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2ViaG9va3NDbGllbnQgaW1wbGVtZW50cyBJV2ViSG9va3NDbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFyc2VXZWJob29rTGlzdChyZXNwb25zZTogeyBib2R5OiB7IHdlYmhvb2tzOiBXZWJob29rTGlzdCB9IH0pOiBXZWJob29rTGlzdCB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmJvZHkud2ViaG9va3M7XG4gIH1cblxuICBfcGFyc2VXZWJob29rV2l0aElEKGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlc3BvbnNlOiBXZWJob29rUmVzcG9uc2UpOiBXZWJob29rUmVzdWx0IHtcbiAgICAgIGNvbnN0IHdlYmhvb2tSZXNwb25zZSA9IHJlc3BvbnNlPy5ib2R5Py53ZWJob29rO1xuICAgICAgbGV0IHVybCA9IHdlYmhvb2tSZXNwb25zZT8udXJsO1xuICAgICAgbGV0IHVybHMgPSB3ZWJob29rUmVzcG9uc2U/LnVybHM7XG4gICAgICBpZiAoIXVybCkge1xuICAgICAgICB1cmwgPSB1cmxzICYmIHVybHMubGVuZ3RoXG4gICAgICAgICAgPyB1cmxzWzBdXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBpZiAoKCF1cmxzIHx8IHVybHMubGVuZ3RoID09PSAwKSAmJiB1cmwpIHtcbiAgICAgICAgdXJscyA9IFt1cmxdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBXZWJob29rKGlkLCB1cmwsIHVybHMgYXMgc3RyaW5nW10pO1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIF9wYXJzZVdlYmhvb2tUZXN0KHJlc3BvbnNlOiB7IGJvZHk6IHsgY29kZTogbnVtYmVyLCBtZXNzYWdlOiBzdHJpbmcgfSB9KVxuICA6IHtjb2RlOiBudW1iZXIsIG1lc3NhZ2U6c3RyaW5nfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvZGU6IHJlc3BvbnNlLmJvZHkuY29kZSxcbiAgICAgIG1lc3NhZ2U6IHJlc3BvbnNlLmJvZHkubWVzc2FnZVxuICAgIH0gYXMgV2ViaG9va1ZhbGlkYXRpb25SZXNwb25zZTtcbiAgfVxuXG4gIGxpc3QoZG9tYWluOiBzdHJpbmcsIHF1ZXJ5OiBXZWJob29rc1F1ZXJ5KTogUHJvbWlzZTxXZWJob29rTGlzdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4oJy92My9kb21haW5zJywgZG9tYWluLCAnd2ViaG9va3MnKSwgcXVlcnkpXG4gICAgICAudGhlbih0aGlzLl9wYXJzZVdlYmhvb2tMaXN0KTtcbiAgfVxuXG4gIGdldChkb21haW46IHN0cmluZywgaWQ6IFdlYmhvb2tzSWRzKTogUHJvbWlzZTxXZWJob29rUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICd3ZWJob29rcycsIGlkKSlcbiAgICAgIC50aGVuKHRoaXMuX3BhcnNlV2ViaG9va1dpdGhJRChpZCkpO1xuICB9XG5cbiAgY3JlYXRlKGRvbWFpbjogc3RyaW5nLFxuICAgIGlkOiBzdHJpbmcsXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgdGVzdCA9IGZhbHNlKTogUHJvbWlzZTxXZWJob29rUmVzdWx0IHwgV2ViaG9va1ZhbGlkYXRpb25SZXNwb25zZT4ge1xuICAgIGlmICh0ZXN0KSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnB1dFdpdGhGRCh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ3dlYmhvb2tzJywgaWQsICd0ZXN0JyksIHsgdXJsIH0pXG4gICAgICAgIC50aGVuKHRoaXMuX3BhcnNlV2ViaG9va1Rlc3QpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRCh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ3dlYmhvb2tzJyksIHsgaWQsIHVybCB9KVxuICAgICAgLnRoZW4odGhpcy5fcGFyc2VXZWJob29rV2l0aElEKGlkKSk7XG4gIH1cblxuICB1cGRhdGUoZG9tYWluOiBzdHJpbmcsIGlkOiBzdHJpbmcsIHVybFZhbHVlczogc3RyaW5nIHwgc3RyaW5nW10pOiBQcm9taXNlPFdlYmhvb2tSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnB1dFdpdGhGRCh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ3dlYmhvb2tzJywgaWQpLCB7IHVybDogdXJsVmFsdWVzIH0pXG4gICAgICAudGhlbih0aGlzLl9wYXJzZVdlYmhvb2tXaXRoSUQoaWQpKTtcbiAgfVxuXG4gIGRlc3Ryb3koZG9tYWluOiBzdHJpbmcsIGlkOiBzdHJpbmcpIDogUHJvbWlzZTxXZWJob29rUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5kZWxldGUodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICd3ZWJob29rcycsIGlkKSlcbiAgICAgIC50aGVuKHRoaXMuX3BhcnNlV2ViaG9va1dpdGhJRChpZCkpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBSZWFkYWJsZSB9IGZyb20gJ3N0cmVhbSc7XG5pbXBvcnQgeyBDdXN0b21GaWxlLCBDdXN0b21GaWxlRGF0YSB9IGZyb20gJy4uLy4uL1R5cGVzJztcbmltcG9ydCBBUElFcnJvciBmcm9tICcuL0Vycm9yJztcbmltcG9ydCB7IEF0dGFjaG1lbnRJbmZvLCBTdHJlYW1WYWx1ZSB9IGZyb20gJy4uLy4uL1R5cGVzL0NvbW1vbi9BdHRhY2htZW50cyc7XG5cbmNsYXNzIEJsb2JGcm9tU3RyZWFtIHtcbiAgcHJpdmF0ZSBfc3RyZWFtOiBSZWFkYWJsZVxuICBzaXplOiBudW1iZXJcblxuICBjb25zdHJ1Y3RvcihzdHJlYW06IFJlYWRhYmxlLCBzaXplOiBudW1iZXIpIHtcbiAgICB0aGlzLl9zdHJlYW0gPSBzdHJlYW07XG4gICAgdGhpcy5zaXplID0gc2l6ZTtcbiAgfVxuXG4gIHN0cmVhbSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RyZWFtO1xuICB9XG5cbiAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgIHJldHVybiAnQmxvYic7XG4gIH1cbn1cblxuY2xhc3MgQXR0YWNobWVudHNIYW5kbGVyIHtcbiAgcHJpdmF0ZSBnZXRBdHRhY2htZW50T3B0aW9ucyhpdGVtOiB7XG4gICAgZmlsZW5hbWU/OiBzdHJpbmc7XG4gICAgY29udGVudFR5cGU/IDogc3RyaW5nO1xuICAgIGtub3duTGVuZ3RoPzogbnVtYmVyO1xuICB9KTogQXR0YWNobWVudEluZm8ge1xuICAgIGNvbnN0IHtcbiAgICAgIGZpbGVuYW1lLFxuICAgICAgY29udGVudFR5cGUsXG4gICAgICBrbm93bkxlbmd0aCxcbiAgICB9ID0gaXRlbTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uKGZpbGVuYW1lID8geyBmaWxlbmFtZSB9IDogeyBmaWxlbmFtZTogJ2ZpbGUnIH0pLFxuICAgICAgLi4uKGNvbnRlbnRUeXBlICYmIHsgY29udGVudFR5cGUgfSksXG4gICAgICAuLi4oa25vd25MZW5ndGggJiYgeyBrbm93bkxlbmd0aCB9KVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldEZpbGVJbmZvKGZpbGU6IEZpbGUpIHsgLy8gYnJvd3NlciBjb21wbGlhbnQgZmlsZVxuICAgIGNvbnN0IHtcbiAgICAgIG5hbWU6IGZpbGVuYW1lLFxuICAgICAgdHlwZTogY29udGVudFR5cGUsXG4gICAgICBzaXplOiBrbm93bkxlbmd0aCxcbiAgICB9ID0gZmlsZTtcbiAgICByZXR1cm4gdGhpcy5nZXRBdHRhY2htZW50T3B0aW9ucyh7IGZpbGVuYW1lLCBjb250ZW50VHlwZSwga25vd25MZW5ndGggfSk7XG4gIH1cblxuICBwcml2YXRlIGdldEN1c3RvbUZpbGVJbmZvKGZpbGU6IEN1c3RvbUZpbGUpIHsgLy8gY3VzdG9tIGNyZWF0ZWQgZmlsZVxuICAgIGNvbnN0IHtcbiAgICAgIGZpbGVuYW1lLFxuICAgICAgY29udGVudFR5cGUsXG4gICAgICBrbm93bkxlbmd0aCxcbiAgICB9ID0gZmlsZTtcbiAgICByZXR1cm4gdGhpcy5nZXRBdHRhY2htZW50T3B0aW9ucyh7IGZpbGVuYW1lLCBjb250ZW50VHlwZSwga25vd25MZW5ndGggfSk7XG4gIH1cblxuICBwcml2YXRlIGdldEJ1ZmZlckluZm8oYnVmZmVyOiBCdWZmZXIpIHtcbiAgICBjb25zdCB7XG4gICAgICBieXRlTGVuZ3RoOiBrbm93bkxlbmd0aCxcbiAgICB9ID0gYnVmZmVyO1xuICAgIHJldHVybiB0aGlzLmdldEF0dGFjaG1lbnRPcHRpb25zKHsgZmlsZW5hbWU6ICdmaWxlJywgY29udGVudFR5cGU6ICcnLCBrbm93bkxlbmd0aCB9KTtcbiAgfVxuXG4gIHB1YmxpYyBpc1N0cmVhbShkYXRhOiB1bmtub3duKSA6IGRhdGEgaXMgU3RyZWFtVmFsdWUge1xuICAgIHJldHVybiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIChkYXRhIGFzIFN0cmVhbVZhbHVlKS5waXBlID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgcHVibGljIGlzQ3VzdG9tRmlsZShvYmo6IHVua25vd24pOiBvYmogaXMgQ3VzdG9tRmlsZSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICdvYmplY3QnXG4gICAgICAmJiAhIShvYmogYXMgQ3VzdG9tRmlsZSkuZGF0YTtcbiAgfVxuXG4gIHB1YmxpYyBpc0Jyb3dzZXJGaWxlKG9iajogdW5rbm93bik6IG9iaiBpcyBGaWxlIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgKCEhKG9iaiBhcyBGaWxlKS5uYW1lIHx8ICh0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgJiYgb2JqIGluc3RhbmNlb2YgQmxvYikpO1xuICB9XG5cbiAgcHVibGljIGlzQnVmZmVyKGRhdGE6IHVua25vd24pOiBkYXRhIGlzIEJ1ZmZlciB7XG4gICAgcmV0dXJuIHR5cGVvZiBCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmIEJ1ZmZlci5pc0J1ZmZlcihkYXRhKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBdHRhY2htZW50SW5mbyhcbiAgICBhdHRhY2htZW50OiBDdXN0b21GaWxlIHwgRmlsZSB8IHN0cmluZyB8IEN1c3RvbUZpbGVEYXRhXG4gICk6IEF0dGFjaG1lbnRJbmZvIHtcbiAgICBjb25zdCBpc0Jyb3dzZXJGaWxlID0gdGhpcy5pc0Jyb3dzZXJGaWxlKGF0dGFjaG1lbnQpO1xuICAgIGNvbnN0IGlzQ3VzdG9tRmlsZSA9IHRoaXMuaXNDdXN0b21GaWxlKGF0dGFjaG1lbnQpO1xuICAgIGNvbnN0IGlzU3RyaW5nID0gdHlwZW9mIGF0dGFjaG1lbnQgPT09ICdzdHJpbmcnO1xuICAgIGlmICghaXNTdHJpbmcpIHtcbiAgICAgIGlmIChpc0Jyb3dzZXJGaWxlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEZpbGVJbmZvKGF0dGFjaG1lbnQgYXMgRmlsZSk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIEJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgQnVmZmVyLmlzQnVmZmVyKGF0dGFjaG1lbnQpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEJ1ZmZlckluZm8oYXR0YWNobWVudCBhcyBCdWZmZXIpO1xuICAgICAgfVxuICAgICAgaWYgKGlzQ3VzdG9tRmlsZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRDdXN0b21GaWxlSW5mbyhhdHRhY2htZW50IGFzIEN1c3RvbUZpbGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG9wdGlvbnM6IEF0dGFjaG1lbnRJbmZvID0ge1xuICAgICAgZmlsZW5hbWU6ICdmaWxlJyxcbiAgICAgIGNvbnRlbnRUeXBlOiB1bmRlZmluZWQsXG4gICAgICBrbm93bkxlbmd0aDogdW5kZWZpbmVkXG4gICAgfTtcbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfVxuXG4gIHB1YmxpYyBjb252ZXJ0VG9GRGV4cGVjdGVkU2hhcGUoXG4gICAgdXNlclByb3ZpZGVkVmFsdWU6IEN1c3RvbUZpbGUgfCBGaWxlIHwgc3RyaW5nIHwgQ3VzdG9tRmlsZURhdGFcbiAgKSB7XG4gICAgY29uc3QgaXNTdHJlYW0gPSB0aGlzLmlzU3RyZWFtKHVzZXJQcm92aWRlZFZhbHVlKTtcbiAgICBjb25zdCBpc0Jyb3dzZXJGaWxlID0gdGhpcy5pc0Jyb3dzZXJGaWxlKHVzZXJQcm92aWRlZFZhbHVlKTtcbiAgICBjb25zdCBpc0N1c3RvbUZpbGUgPSB0aGlzLmlzQ3VzdG9tRmlsZSh1c2VyUHJvdmlkZWRWYWx1ZSk7XG4gICAgY29uc3QgaXNTdHJpbmcgPSB0eXBlb2YgdXNlclByb3ZpZGVkVmFsdWUgPT09ICdzdHJpbmcnO1xuICAgIGxldCByZXN1bHQ7XG4gICAgaWYgKGlzU3RyZWFtIHx8IGlzU3RyaW5nIHx8IGlzQnJvd3NlckZpbGUgfHwgdGhpcy5pc0J1ZmZlcih1c2VyUHJvdmlkZWRWYWx1ZSkpIHtcbiAgICAgIHJlc3VsdCA9IHVzZXJQcm92aWRlZFZhbHVlO1xuICAgIH0gZWxzZSBpZiAoaXNDdXN0b21GaWxlKSB7XG4gICAgICByZXN1bHQgPSB1c2VyUHJvdmlkZWRWYWx1ZS5kYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBBUElFcnJvci5nZXRVc2VyRGF0YUVycm9yKFxuICAgICAgICBgVW5rbm93biBhdHRhY2htZW50IHR5cGUgJHt0eXBlb2YgdXNlclByb3ZpZGVkVmFsdWV9YCxcbiAgICAgICAgYFRoZSBcImF0dGFjaG1lbnRcIiBwcm9wZXJ0eSBleHBlY3RzIGVpdGhlciBCdWZmZXIsIEJsb2IsIG9yIFN0cmluZy5cbiAgICAgICAgICBBbHNvLCBJdCBpcyBwb3NzaWJsZSB0byBwcm92aWRlIGFuIG9iamVjdCB0aGF0IGhhcyB0aGUgcHJvcGVydHkgXCJkYXRhXCIgd2l0aCBhIHZhbHVlIHRoYXQgaXMgZXF1YWwgdG8gb25lIG9mIHRoZSB0eXBlcyBjb3VudGVkIGJlZm9yZS5cbiAgICAgICAgICBBZGRpdGlvbmFsbHksIHlvdSBtYXkgdXNlIGFuIGFycmF5IHRvIHNlbmQgbW9yZSB0aGFuIG9uZSBhdHRhY2htZW50LmBcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0QmxvYkZyb21TdHJlYW0oc3RyZWFtOiBSZWFkYWJsZSwgc2l6ZTogbnVtYmVyKTogQmxvYkZyb21TdHJlYW0ge1xuICAgIHJldHVybiBuZXcgQmxvYkZyb21TdHJlYW0oc3RyZWFtLCBzaXplKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBBdHRhY2htZW50c0hhbmRsZXI7XG4iLCJpbXBvcnQgeyBBUElFcnJvck9wdGlvbnMsIEFQSUVycm9yVHlwZSB9IGZyb20gJy4uLy4uL1R5cGVzL0NvbW1vbic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFQSUVycm9yIGV4dGVuZHMgRXJyb3IgaW1wbGVtZW50cyBBUElFcnJvclR5cGUge1xuICBwdWJsaWMgc3RhdHVzOiBudW1iZXIgO1xuICBwdWJsaWMgc3RhY2s6IHN0cmluZztcbiAgcHVibGljIGRldGFpbHM6IHN0cmluZztcbiAgcHVibGljIHR5cGU6IHN0cmluZztcblxuICBwdWJsaWMgc3RhdGljIGdldFVzZXJEYXRhRXJyb3Ioc3RhdHVzVGV4dDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IHRoaXMoe1xuICAgICAgc3RhdHVzOiA0MDAsXG4gICAgICBzdGF0dXNUZXh0LFxuICAgICAgYm9keToge1xuICAgICAgICBtZXNzYWdlXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcih7XG4gICAgc3RhdHVzLFxuICAgIHN0YXR1c1RleHQsXG4gICAgbWVzc2FnZSxcbiAgICBib2R5ID0ge31cbiAgfTogQVBJRXJyb3JPcHRpb25zKSB7XG4gICAgbGV0IGJvZHlNZXNzYWdlID0gJyc7XG4gICAgbGV0IGVycm9yID0gJyc7XG4gICAgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgYm9keU1lc3NhZ2UgPSBib2R5O1xuICAgIH0gZWxzZSB7XG4gICAgICBib2R5TWVzc2FnZSA9IGJvZHk/Lm1lc3NhZ2UgfHwgJyc7XG4gICAgICBlcnJvciA9IGJvZHk/LmVycm9yIHx8ICcnO1xuICAgIH1cbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5zdGFjayA9ICcnO1xuICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzO1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgZXJyb3IgfHwgc3RhdHVzVGV4dCB8fCAnJztcbiAgICB0aGlzLmRldGFpbHMgPSBib2R5TWVzc2FnZTtcbiAgICB0aGlzLnR5cGUgPSAnTWFpbGd1bkFQSUVycm9yJztcbiAgfVxufVxuIiwiaW1wb3J0ICogYXMgTm9kZUZvcm1EYXRhIGZyb20gJ2Zvcm0tZGF0YSc7XG5pbXBvcnQgeyBSZWFkYWJsZSB9IGZyb20gJ3N0cmVhbSc7XG5pbXBvcnQgeyBGb3JtRGF0YUlucHV0LCBJbnB1dEZvcm1EYXRhIH0gZnJvbSAnLi4vLi4vVHlwZXMvQ29tbW9uJztcbmltcG9ydCBBUElFcnJvciBmcm9tICcuL0Vycm9yJztcblxuaW1wb3J0IHtcbiAgQ3VzdG9tRmlsZSxcbiAgQ3VzdG9tRmlsZURhdGEsXG4gIEZvcm1EYXRhSW5wdXRWYWx1ZSxcbiAgTWVzc2FnZUF0dGFjaG1lbnQsXG4gIE1pbWVNZXNzYWdlXG59IGZyb20gJy4uLy4uL1R5cGVzJztcbmltcG9ydCBBdHRhY2htZW50c0hhbmRsZXIgZnJvbSAnLi9BdHRhY2htZW50c0hhbmRsZXInO1xuaW1wb3J0IHsgQXR0YWNobWVudEluZm8gfSBmcm9tICcuLi8uLi9UeXBlcy9Db21tb24vQXR0YWNobWVudHMnO1xuXG5jbGFzcyBGb3JtRGF0YUJ1aWxkZXIge1xuICBwcml2YXRlIEZvcm1EYXRhQ29uc3RydWN0b3I6IElucHV0Rm9ybURhdGE7XG4gIHByaXZhdGUgZmlsZUtleXM6IHN0cmluZ1tdO1xuICBwcml2YXRlIGF0dGFjaG1lbnRzSGFuZGxlcjogQXR0YWNobWVudHNIYW5kbGVyO1xuXG4gIGNvbnN0cnVjdG9yKEZvcm1EYXRhQ29uc3RydWN0b3I6IElucHV0Rm9ybURhdGEpIHtcbiAgICB0aGlzLkZvcm1EYXRhQ29uc3RydWN0b3IgPSBGb3JtRGF0YUNvbnN0cnVjdG9yO1xuICAgIHRoaXMuZmlsZUtleXMgPSBbJ2F0dGFjaG1lbnQnLCAnaW5saW5lJywgJ211bHRpcGxlVmFsaWRhdGlvbkZpbGUnXTtcbiAgICB0aGlzLmF0dGFjaG1lbnRzSGFuZGxlciA9IG5ldyBBdHRhY2htZW50c0hhbmRsZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVGb3JtRGF0YShkYXRhOiBGb3JtRGF0YUlucHV0KTogTm9kZUZvcm1EYXRhIHwgRm9ybURhdGEge1xuICAgIGlmICghZGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQbGVhc2UgcHJvdmlkZSBkYXRhIG9iamVjdCcpO1xuICAgIH1cbiAgICBjb25zdCBmb3JtRGF0YTogTm9kZUZvcm1EYXRhIHwgRm9ybURhdGEgPSBPYmplY3Qua2V5cyhkYXRhKVxuICAgICAgLmZpbHRlcihmdW5jdGlvbiAoa2V5KSB7IHJldHVybiBkYXRhW2tleV07IH0pXG4gICAgICAucmVkdWNlKChmb3JtRGF0YUFjYzogTm9kZUZvcm1EYXRhIHwgRm9ybURhdGEsIGtleSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5maWxlS2V5cy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgY29uc3QgYXR0YWNobWVudFZhbHVlID0gZGF0YVtrZXldO1xuICAgICAgICAgIGlmICh0aGlzLmlzTWVzc2FnZUF0dGFjaG1lbnQoYXR0YWNobWVudFZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5hZGRGaWxlc1RvRkQoa2V5LCBhdHRhY2htZW50VmFsdWUsIGZvcm1EYXRhQWNjKTtcbiAgICAgICAgICAgIHJldHVybiBmb3JtRGF0YUFjYztcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgQVBJRXJyb3IuZ2V0VXNlckRhdGFFcnJvcihcbiAgICAgICAgICAgIGBVbmtub3duIHZhbHVlICR7ZGF0YVtrZXldfSB3aXRoIHR5cGUgJHt0eXBlb2YgZGF0YVtrZXldfSBmb3IgcHJvcGVydHkgXCIke2tleX1cImAsXG4gICAgICAgICAgICBgVGhlIGtleSBcIiR7a2V5fVwiIHNob3VsZCBoYXZlIHR5cGUgb2YgQnVmZmVyLCBTdHJlYW0sIEZpbGUsIG9yIFN0cmluZyBgXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChrZXkgPT09ICdtZXNzYWdlJykgeyAvLyBtaW1lIG1lc3NhZ2VcbiAgICAgICAgICBjb25zdCBtZXNzYWdlVmFsdWUgPSBkYXRhW2tleV07XG4gICAgICAgICAgaWYgKCFtZXNzYWdlVmFsdWUgfHwgIXRoaXMuaXNNSU1FKG1lc3NhZ2VWYWx1ZSkpIHtcbiAgICAgICAgICAgIHRocm93IEFQSUVycm9yLmdldFVzZXJEYXRhRXJyb3IoXG4gICAgICAgICAgICAgIGBVbmtub3duIGRhdGEgdHlwZSBmb3IgXCIke2tleX1cIiBwcm9wZXJ0eWAsXG4gICAgICAgICAgICAgICdUaGUgbWltZSBkYXRhIHNob3VsZCBoYXZlIHR5cGUgb2YgQnVmZmVyLCBTdHJpbmcgb3IgQmxvYidcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuYWRkTWltZURhdGFUb0ZEKGtleSwgbWVzc2FnZVZhbHVlLCBmb3JtRGF0YUFjYyk7XG4gICAgICAgICAgcmV0dXJuIGZvcm1EYXRhQWNjO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hZGRDb21tb25Qcm9wZXJ0eVRvRkQoa2V5LCBkYXRhW2tleV0sIGZvcm1EYXRhQWNjKTtcbiAgICAgICAgcmV0dXJuIGZvcm1EYXRhQWNjO1xuICAgICAgfSwgbmV3IHRoaXMuRm9ybURhdGFDb25zdHJ1Y3RvcigpKTtcbiAgICByZXR1cm4gZm9ybURhdGE7XG4gIH1cblxuICBwcml2YXRlIGFkZE1pbWVEYXRhVG9GRChcbiAgICBrZXk6IHN0cmluZyxcbiAgICBkYXRhOiBNaW1lTWVzc2FnZSxcbiAgICBmb3JtRGF0YUluc3RhbmNlOiBOb2RlRm9ybURhdGEgfCBGb3JtRGF0YVxuICApOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7IC8vIGlmIHN0cmluZyBvbmx5IHR3byBwYXJhbWV0ZXJzIHNob3VsZCBiZSB1c2VkLlxuICAgICAgZm9ybURhdGFJbnN0YW5jZS5hcHBlbmQoa2V5LCBkYXRhIGFzIHN0cmluZyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNGb3JtRGF0YVBhY2thZ2UoZm9ybURhdGFJbnN0YW5jZSkpIHsgLy8gZm9ybS1kYXRhIHBhY2thZ2UgaXMgdXNlZFxuICAgICAgY29uc3Qgbm9kZUZvcm1EYXRhID0gZm9ybURhdGFJbnN0YW5jZSBhcyBOb2RlRm9ybURhdGE7XG4gICAgICBub2RlRm9ybURhdGEuYXBwZW5kKGtleSwgZGF0YSwgeyBmaWxlbmFtZTogJ01pbWVNZXNzYWdlJyB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIEJsb2IgIT09IHVuZGVmaW5lZCkgeyAvLyBlaXRoZXIgbm9kZSA+IDE4IG9yIGJyb3dzZXJcbiAgICAgIGNvbnN0IGJyb3dzZXJGb3JtRGF0YSA9IGZvcm1EYXRhSW5zdGFuY2UgYXMgRm9ybURhdGE7IC8vIEJyb3dzZXIgY29tcGxpYW50IEZvcm1EYXRhXG4gICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIEJsb2IpIHtcbiAgICAgICAgYnJvd3NlckZvcm1EYXRhLmFwcGVuZChrZXksIGRhdGEsICdNaW1lTWVzc2FnZScpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5hdHRhY2htZW50c0hhbmRsZXIuaXNCdWZmZXIoZGF0YSkpIHsgLy8gbm9kZSBlbnZpcm9ubWVudFxuICAgICAgICBjb25zdCBibG9iSW5zdGFuY2UgPSBuZXcgQmxvYihbZGF0YV0pO1xuICAgICAgICBicm93c2VyRm9ybURhdGEuYXBwZW5kKGtleSwgYmxvYkluc3RhbmNlLCAnTWltZU1lc3NhZ2UnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaXNNSU1FKGRhdGE6IHVua25vd24pIDogZGF0YSBpcyBNaW1lTWVzc2FnZSB7XG4gICAgcmV0dXJuIHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJ1xuICAgICAgfHwgKHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJyAmJiBkYXRhIGluc3RhbmNlb2YgQmxvYilcbiAgICAgIHx8IHRoaXMuYXR0YWNobWVudHNIYW5kbGVyLmlzQnVmZmVyKGRhdGEpXG4gICAgICB8fCAodHlwZW9mIFJlYWRhYmxlU3RyZWFtICE9PSAndW5kZWZpbmVkJyAmJiBkYXRhIGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0Zvcm1EYXRhUGFja2FnZShvYmo6IHVua25vd24pOiBvYmogaXMgTm9kZUZvcm1EYXRhIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ29iamVjdCdcbiAgICAgICYmIG9iaiAhPT0gbnVsbFxuICAgICAgJiYgdHlwZW9mIChvYmogYXMgTm9kZUZvcm1EYXRhKS5nZXRIZWFkZXJzID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgcHJpdmF0ZSBpc01lc3NhZ2VBdHRhY2htZW50KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgTWVzc2FnZUF0dGFjaG1lbnQge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmF0dGFjaG1lbnRzSGFuZGxlci5pc0N1c3RvbUZpbGUodmFsdWUpXG4gICAgICB8fCB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnXG4gICAgICB8fCAodHlwZW9mIEZpbGUgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlIGluc3RhbmNlb2YgRmlsZSlcbiAgICAgIHx8ICh0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsdWUgaW5zdGFuY2VvZiBCbG9iKVxuICAgICAgfHwgdGhpcy5hdHRhY2htZW50c0hhbmRsZXIuaXNCdWZmZXIodmFsdWUpXG4gICAgICB8fCB0aGlzLmF0dGFjaG1lbnRzSGFuZGxlci5pc1N0cmVhbSh2YWx1ZSlcbiAgICAgIHx8IChcbiAgICAgICAgQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUuZXZlcnkoXG4gICAgICAgICAgKGl0ZW0pID0+IHRoaXMuYXR0YWNobWVudHNIYW5kbGVyLmlzQ3VzdG9tRmlsZShpdGVtKVxuICAgICAgICAgICAgfHwgKHR5cGVvZiBGaWxlICE9PSAndW5kZWZpbmVkJyAmJiBpdGVtIGluc3RhbmNlb2YgRmlsZSlcbiAgICAgICAgICAgIHx8ICh0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgJiYgdmFsdWUgaW5zdGFuY2VvZiBCbG9iKVxuICAgICAgICAgICAgfHwgdGhpcy5hdHRhY2htZW50c0hhbmRsZXIuaXNCdWZmZXIoaXRlbSlcbiAgICAgICAgICAgIHx8IHRoaXMuYXR0YWNobWVudHNIYW5kbGVyLmlzU3RyZWFtKGl0ZW0pXG4gICAgICAgIClcbiAgICAgIClcblxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGFkZEZpbGVzVG9GRChcbiAgICBwcm9wZXJ0eU5hbWU6IHR5cGVvZiB0aGlzLmZpbGVLZXlzW251bWJlcl0sXG4gICAgdmFsdWU6IE1lc3NhZ2VBdHRhY2htZW50LFxuICAgIGZvcm1EYXRhSW5zdGFuY2U6IE5vZGVGb3JtRGF0YSB8IEZvcm1EYXRhXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGFwcGVuZEZpbGVUb0ZEID0gKFxuICAgICAgb3JpZ2luYWxLZXk6IHN0cmluZyxcbiAgICAgIGF0dGFjaG1lbnQ6IEN1c3RvbUZpbGUgfCBGaWxlIHwgc3RyaW5nfCBDdXN0b21GaWxlRGF0YSxcbiAgICAgIGZvcm1EYXRhOiBOb2RlRm9ybURhdGEgfCBGb3JtRGF0YVxuICAgICk6IHZvaWQgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gb3JpZ2luYWxLZXkgPT09ICdtdWx0aXBsZVZhbGlkYXRpb25GaWxlJyA/ICdmaWxlJyA6IG9yaWdpbmFsS2V5O1xuICAgICAgY29uc3Qgb2JqRGF0YSA9IHRoaXMuYXR0YWNobWVudHNIYW5kbGVyLmNvbnZlcnRUb0ZEZXhwZWN0ZWRTaGFwZShhdHRhY2htZW50KTtcbiAgICAgIGNvbnN0IG9wdGlvbnM6IEF0dGFjaG1lbnRJbmZvID0gdGhpcy5hdHRhY2htZW50c0hhbmRsZXIuZ2V0QXR0YWNobWVudEluZm8oYXR0YWNobWVudCk7XG5cbiAgICAgIGlmICh0aGlzLmlzRm9ybURhdGFQYWNrYWdlKGZvcm1EYXRhKSkge1xuICAgICAgICBjb25zdCBmZCA9IGZvcm1EYXRhIGFzIE5vZGVGb3JtRGF0YTtcbiAgICAgICAgY29uc3QgZGF0YSA9IHR5cGVvZiBvYmpEYXRhID09PSAnc3RyaW5nJyA/IEJ1ZmZlci5mcm9tKG9iakRhdGEpIDogb2JqRGF0YTtcbiAgICAgICAgZmQuYXBwZW5kKGtleSwgZGF0YSwgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBCbG9iICE9PSB1bmRlZmluZWQpIHsgLy8gZWl0aGVyIG5vZGUgPiAxOCBvciBicm93c2VyXG4gICAgICAgIGNvbnN0IGJyb3dzZXJGb3JtRGF0YSA9IGZvcm1EYXRhSW5zdGFuY2UgYXMgRm9ybURhdGE7IC8vIEJyb3dzZXIgY29tcGxpYW50IEZvcm1EYXRhXG5cbiAgICAgICAgaWYgKHR5cGVvZiBvYmpEYXRhID09PSAnc3RyaW5nJyB8fCB0aGlzLmF0dGFjaG1lbnRzSGFuZGxlci5pc0J1ZmZlcihvYmpEYXRhKSkge1xuICAgICAgICAgIGNvbnN0IGJsb2JJbnN0YW5jZSA9IG5ldyBCbG9iKFtvYmpEYXRhXSk7XG4gICAgICAgICAgYnJvd3NlckZvcm1EYXRhLmFwcGVuZChrZXksIGJsb2JJbnN0YW5jZSwgb3B0aW9ucy5maWxlbmFtZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9iakRhdGEgaW5zdGFuY2VvZiBCbG9iKSB7XG4gICAgICAgICAgYnJvd3NlckZvcm1EYXRhLmFwcGVuZChrZXksIG9iakRhdGEsIG9wdGlvbnMuZmlsZW5hbWUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmF0dGFjaG1lbnRzSGFuZGxlci5pc1N0cmVhbShvYmpEYXRhKSkge1xuICAgICAgICAgIGNvbnN0IGJsb2IgPSB0aGlzLmF0dGFjaG1lbnRzSGFuZGxlci5nZXRCbG9iRnJvbVN0cmVhbShcbiAgICAgICAgICAgIG9iakRhdGEgYXMgdW5rbm93biBhcyBSZWFkYWJsZSxcbiAgICAgICAgICAgIG9wdGlvbnMua25vd25MZW5ndGggYXMgbnVtYmVyXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicm93c2VyRm9ybURhdGEuc2V0KGtleSwgYmxvYiBhcyB1bmtub3duIGFzIEZpbGUsIG9wdGlvbnMuZmlsZW5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgdmFsdWUuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICBhcHBlbmRGaWxlVG9GRChwcm9wZXJ0eU5hbWUsIGl0ZW0sIGZvcm1EYXRhSW5zdGFuY2UpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFwcGVuZEZpbGVUb0ZEKHByb3BlcnR5TmFtZSwgdmFsdWUsIGZvcm1EYXRhSW5zdGFuY2UpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRkQ29tbW9uUHJvcGVydHlUb0ZEKFxuICAgIGtleTogc3RyaW5nLFxuICAgIHZhbHVlOiBGb3JtRGF0YUlucHV0VmFsdWUsXG4gICAgZm9ybURhdGFBY2M6IE5vZGVGb3JtRGF0YSB8IEZvcm1EYXRhXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGFkZFZhbHVlQmFzZWRPbkZEID0gKGZkS2V5OiBzdHJpbmcsIGZkVmFsdWU6IEZvcm1EYXRhSW5wdXRWYWx1ZSk6IHZvaWQgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNGb3JtRGF0YVBhY2thZ2UoZm9ybURhdGFBY2MpKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZmRWYWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIHJlY2VpdmVkIHZhbHVlIGlzIGFuIG9iamVjdC4gXFxuJ1xuICAgICAgICAgICsgJ1wiSlNPTi5TdHJpbmdpZnlcIiB3aWxsIGJlIHVzZWQgdG8gYXZvaWQgVHlwZUVycm9yIFxcbidcbiAgICAgICAgICArICdUbyByZW1vdmUgdGhpcyB3YXJuaW5nOiBcXG4nXG4gICAgICAgICAgKyAnQ29uc2lkZXIgc3dpdGNoaW5nIHRvIGJ1aWx0LWluIEZvcm1EYXRhIG9yIGNvbnZlcnRpbmcgdGhlIHZhbHVlIG9uIHlvdXIgb3duLlxcbicpO1xuICAgICAgICAgIHJldHVybiBmb3JtRGF0YUFjYy5hcHBlbmQoZmRLZXksIEpTT04uc3RyaW5naWZ5KGZkVmFsdWUpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm9ybURhdGFBY2MuYXBwZW5kKGZkS2V5LCBmZFZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgZmRWYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGZvcm1EYXRhQWNjLmFwcGVuZChmZEtleSwgZmRWYWx1ZSk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIEJsb2IgIT09IHVuZGVmaW5lZCAmJiBmZFZhbHVlIGluc3RhbmNlb2YgQmxvYikge1xuICAgICAgICByZXR1cm4gZm9ybURhdGFBY2MuYXBwZW5kKGZkS2V5LCBmZFZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHRocm93IEFQSUVycm9yLmdldFVzZXJEYXRhRXJyb3IoXG4gICAgICAgICdVbmtub3duIHZhbHVlIHR5cGUgZm9yIEZvcm0gRGF0YS4gU3RyaW5nIG9yIEJsb2IgZXhwZWN0ZWQnLFxuICAgICAgICAnQnJvd3NlciBjb21wbGlhbnQgRm9ybURhdGEgYWxsb3dzIG9ubHkgc3RyaW5nIG9yIEJsb2IgdmFsdWVzIGZvciBwcm9wZXJ0aWVzIHRoYXQgYXJlIG5vdCBhdHRhY2htZW50cy4nXG4gICAgICApO1xuICAgIH07XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24gKGl0ZW06IEZvcm1EYXRhSW5wdXRWYWx1ZSkge1xuICAgICAgICBhZGRWYWx1ZUJhc2VkT25GRChrZXksIGl0ZW0pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICBhZGRWYWx1ZUJhc2VkT25GRChrZXksIHZhbHVlKTtcbiAgICB9XG4gIH1cbn1cbmV4cG9ydCBkZWZhdWx0IEZvcm1EYXRhQnVpbGRlcjtcbiIsImltcG9ydCB1cmxqb2luIGZyb20gJ3VybC1qb2luJztcbmltcG9ydCBBUElFcnJvciBmcm9tICcuL0Vycm9yJztcblxuaW1wb3J0IHtcbiAgUGFnZXNMaXN0QWNjdW11bGF0b3IsXG4gIFBhcnNlZFBhZ2UsXG4gIFBhcnNlZFBhZ2VzTGlzdCxcbiAgUXVlcnlXaXRoUGFnZSxcbiAgUmVzcG9uc2VXaXRoUGFnaW5nLFxuICBVcGRhdGVkVXJsQW5kUXVlcnksXG4gIEFQSUVycm9yT3B0aW9uc1xufSBmcm9tICcuLi8uLi9UeXBlcy9Db21tb24nO1xuaW1wb3J0IHtcbiAgSUJvdW5jZSxcbiAgSUNvbXBsYWludCxcbiAgSVVuc3Vic2NyaWJlLFxuICBJV2hpdGVMaXN0XG59IGZyb20gJy4uLy4uL0ludGVyZmFjZXMvU3VwcHJlc3Npb25zJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vUmVxdWVzdCc7XG5pbXBvcnQge1xuICBTdXBwcmVzc2lvbkRhdGFUeXBlXG59IGZyb20gJy4uLy4uL1R5cGVzL1N1cHByZXNzaW9ucyc7XG5cbmV4cG9ydCBkZWZhdWx0IGFic3RyYWN0IGNsYXNzIE5hdmlnYXRpb25UaHJ1UGFnZXMgPFQ+IHtcbiAgcmVxdWVzdD86IFJlcXVlc3Q7XG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q/OiBSZXF1ZXN0KSB7XG4gICAgaWYgKHJlcXVlc3QpIHtcbiAgICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlUGFnZShcbiAgICBpZDogc3RyaW5nLFxuICAgIHBhZ2VVcmw6IHN0cmluZyxcbiAgICB1cmxTZXBhcmF0b3I6IHN0cmluZyxcbiAgICBpdGVyYXRvck5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZFxuICApIDogUGFyc2VkUGFnZSB7XG4gICAgY29uc3QgcGFyc2VkVXJsID0gbmV3IFVSTChwYWdlVXJsKTtcbiAgICBjb25zdCB7IHNlYXJjaFBhcmFtcyB9ID0gcGFyc2VkVXJsO1xuXG4gICAgY29uc3QgcGFnZVZhbHVlID0gcGFnZVVybCAmJiB0eXBlb2YgcGFnZVVybCA9PT0gJ3N0cmluZycgPyBwYWdlVXJsLnNwbGl0KHVybFNlcGFyYXRvcikucG9wKCkgfHwgJycgOiAnJztcbiAgICBsZXQgaXRlcmF0b3JQb3NpdGlvbiA9IG51bGw7XG4gICAgaWYgKGl0ZXJhdG9yTmFtZSkge1xuICAgICAgaXRlcmF0b3JQb3NpdGlvbiA9IHNlYXJjaFBhcmFtcy5oYXMoaXRlcmF0b3JOYW1lKVxuICAgICAgICA/IHNlYXJjaFBhcmFtcy5nZXQoaXRlcmF0b3JOYW1lKVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkLFxuICAgICAgcGFnZTogdXJsU2VwYXJhdG9yID09PSAnPycgPyBgPyR7cGFnZVZhbHVlfWAgOiBwYWdlVmFsdWUsXG4gICAgICBpdGVyYXRvclBvc2l0aW9uLFxuICAgICAgdXJsOiBwYWdlVXJsXG4gICAgfSBhcyBQYXJzZWRQYWdlO1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlUGFnZUxpbmtzKFxuICAgIHJlc3BvbnNlOiBSZXNwb25zZVdpdGhQYWdpbmcsXG4gICAgdXJsU2VwYXJhdG9yOiBzdHJpbmcsXG4gICAgaXRlcmF0b3JOYW1lPzogc3RyaW5nXG4gICk6IFBhcnNlZFBhZ2VzTGlzdCB7XG4gICAgY29uc3QgcGFnZXMgPSBPYmplY3QuZW50cmllcyhyZXNwb25zZS5ib2R5LnBhZ2luZyk7XG4gICAgcmV0dXJuIHBhZ2VzLnJlZHVjZShcbiAgICAgIChhY2M6IFBhZ2VzTGlzdEFjY3VtdWxhdG9yLCBbaWQsIHBhZ2VVcmxdOiBbIGlkOiBzdHJpbmcsIHBhZ2VVcmw6IHN0cmluZ10pID0+IHtcbiAgICAgICAgYWNjW2lkXSA9IHRoaXMucGFyc2VQYWdlKGlkLCBwYWdlVXJsLCB1cmxTZXBhcmF0b3IsIGl0ZXJhdG9yTmFtZSk7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCB7fVxuICAgICkgYXMgdW5rbm93biBhcyBQYXJzZWRQYWdlc0xpc3Q7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVVybEFuZFF1ZXJ5KGNsaWVudFVybDogc3RyaW5nLCBxdWVyeT86IFF1ZXJ5V2l0aFBhZ2UpOiBVcGRhdGVkVXJsQW5kUXVlcnkge1xuICAgIGxldCB1cmwgPSBjbGllbnRVcmw7XG4gICAgY29uc3QgcXVlcnlDb3B5ID0geyAuLi5xdWVyeSB9O1xuICAgIGlmIChxdWVyeUNvcHkucGFnZSkge1xuICAgICAgdXJsID0gdXJsam9pbihjbGllbnRVcmwsIHF1ZXJ5Q29weS5wYWdlKTtcbiAgICAgIGRlbGV0ZSBxdWVyeUNvcHkucGFnZTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHVybCxcbiAgICAgIHVwZGF0ZWRRdWVyeTogcXVlcnlDb3B5XG4gICAgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyByZXF1ZXN0TGlzdFdpdGhQYWdlcyhjbGllbnRVcmw6c3RyaW5nLCBxdWVyeT86IFF1ZXJ5V2l0aFBhZ2UsIE1vZGVsPzoge1xuICAgIG5ldyhkYXRhOiBTdXBwcmVzc2lvbkRhdGFUeXBlKTpcbiAgICBJQm91bmNlIHwgSUNvbXBsYWludCB8IElVbnN1YnNjcmliZSB8IElXaGl0ZUxpc3RcbiAgfSk6IFByb21pc2U8VD4ge1xuICAgIGNvbnN0IHsgdXJsLCB1cGRhdGVkUXVlcnkgfSA9IHRoaXMudXBkYXRlVXJsQW5kUXVlcnkoY2xpZW50VXJsLCBxdWVyeSk7XG4gICAgaWYgKHRoaXMucmVxdWVzdCkge1xuICAgICAgY29uc3QgcmVzcG9uc2U6IFJlc3BvbnNlV2l0aFBhZ2luZyA9IGF3YWl0IHRoaXMucmVxdWVzdC5nZXQodXJsLCB1cGRhdGVkUXVlcnkpO1xuICAgICAgLy8gTW9kZWwgaGVyZSBpcyB1c3VhbGx5IHVuZGVmaW5lZCBleGNlcHQgZm9yIFN1cHByZXNzaW9uIENsaWVudFxuICAgICAgcmV0dXJuIHRoaXMucGFyc2VMaXN0KHJlc3BvbnNlLCBNb2RlbCk7XG4gICAgfVxuICAgIHRocm93IG5ldyBBUElFcnJvcih7XG4gICAgICBzdGF0dXM6IDUwMCxcbiAgICAgIHN0YXR1c1RleHQ6ICdSZXF1ZXN0IHByb3BlcnR5IGlzIGVtcHR5JyxcbiAgICAgIGJvZHk6IHsgbWVzc2FnZTogJycgfVxuICAgIH0gYXMgQVBJRXJyb3JPcHRpb25zKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBwYXJzZUxpc3QocmVzcG9uc2U6IFJlc3BvbnNlV2l0aFBhZ2luZywgTW9kZWw/OiB7XG4gICAgbmV3KGRhdGE6IFN1cHByZXNzaW9uRGF0YVR5cGUpOlxuICAgIElCb3VuY2UgfCBJQ29tcGxhaW50IHwgSVVuc3Vic2NyaWJlIHwgSVdoaXRlTGlzdFxuICB9KTogVDtcbn1cbiIsImltcG9ydCAqIGFzIGJhc2U2NCBmcm9tICdiYXNlLTY0JztcbmltcG9ydCB1cmxqb2luIGZyb20gJ3VybC1qb2luJztcbmltcG9ydCBheGlvcywge1xuICBBeGlvc0Vycm9yLFxuICBBeGlvc1Jlc3BvbnNlLFxuICBBeGlvc0hlYWRlcnMsXG4gIFJhd0F4aW9zUmVxdWVzdEhlYWRlcnMsXG4gIEF4aW9zUHJveHlDb25maWcsXG59IGZyb20gJ2F4aW9zJztcbmltcG9ydCAqIGFzIE5vZGVGb3JtRGF0YSBmcm9tICdmb3JtLWRhdGEnO1xuaW1wb3J0IEFQSUVycm9yIGZyb20gJy4vRXJyb3InO1xuaW1wb3J0IHtcbiAgT25DYWxsUmVxdWVzdE9wdGlvbnMsXG4gIFJlcXVlc3RPcHRpb25zLFxuICBBUElFcnJvck9wdGlvbnMsXG4gIElucHV0Rm9ybURhdGEsXG4gIEFQSVJlc3BvbnNlLFxuICBJcFBvb2xEZWxldGVEYXRhLFxuICBGb3JtRGF0YUlucHV0XG59IGZyb20gJy4uLy4uL1R5cGVzJztcblxuaW1wb3J0IEZvcm1EYXRhQnVpbGRlciBmcm9tICcuL0Zvcm1EYXRhQnVpbGRlcic7XG5pbXBvcnQgU3ViYWNjb3VudHNDbGllbnQgZnJvbSAnLi4vU3ViYWNjb3VudHMnO1xuXG5jbGFzcyBSZXF1ZXN0IHtcbiAgcHJpdmF0ZSB1c2VybmFtZTogc3RyaW5nO1xuICBwcml2YXRlIGtleTogc3RyaW5nO1xuICBwcml2YXRlIHVybDogc3RyaW5nO1xuICBwcml2YXRlIHRpbWVvdXQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBoZWFkZXJzOiBBeGlvc0hlYWRlcnM7XG4gIHByaXZhdGUgZm9ybURhdGFCdWlsZGVyOiBGb3JtRGF0YUJ1aWxkZXI7XG4gIHByaXZhdGUgbWF4Qm9keUxlbmd0aDogbnVtYmVyO1xuICBwcml2YXRlIHByb3h5OiBBeGlvc1Byb3h5Q29uZmlnIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IFJlcXVlc3RPcHRpb25zLCBmb3JtRGF0YTogSW5wdXRGb3JtRGF0YSkge1xuICAgIHRoaXMudXNlcm5hbWUgPSBvcHRpb25zLnVzZXJuYW1lO1xuICAgIHRoaXMua2V5ID0gb3B0aW9ucy5rZXk7XG4gICAgdGhpcy51cmwgPSBvcHRpb25zLnVybCBhcyBzdHJpbmc7XG4gICAgdGhpcy50aW1lb3V0ID0gb3B0aW9ucy50aW1lb3V0O1xuICAgIHRoaXMuaGVhZGVycyA9IHRoaXMubWFrZUhlYWRlcnNGcm9tT2JqZWN0KG9wdGlvbnMuaGVhZGVycyk7XG4gICAgdGhpcy5mb3JtRGF0YUJ1aWxkZXIgPSBuZXcgRm9ybURhdGFCdWlsZGVyKGZvcm1EYXRhKTtcbiAgICB0aGlzLm1heEJvZHlMZW5ndGggPSA1MjQyODgwMDsgLy8gNTAgTUJcbiAgICB0aGlzLnByb3h5ID0gb3B0aW9ucz8ucHJveHk7XG4gIH1cblxuICBhc3luYyByZXF1ZXN0KFxuICAgIG1ldGhvZDogc3RyaW5nLFxuICAgIHVybDogc3RyaW5nLFxuICAgIG9uQ2FsbE9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPlxuICApOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgY29uc3Qgb3B0aW9uczogT25DYWxsUmVxdWVzdE9wdGlvbnMgPSB7IC4uLm9uQ2FsbE9wdGlvbnMgfTtcbiAgICBkZWxldGUgb3B0aW9ucz8uaGVhZGVycztcbiAgICBjb25zdCByZXF1ZXN0SGVhZGVycyA9IHRoaXMuam9pbkFuZFRyYW5zZm9ybUhlYWRlcnMob25DYWxsT3B0aW9ucyk7XG4gICAgY29uc3QgcGFyYW1zID0geyAuLi5vcHRpb25zIH07XG5cbiAgICBpZiAob3B0aW9ucz8ucXVlcnkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob3B0aW9ucz8ucXVlcnkpLmxlbmd0aCA+IDApIHtcbiAgICAgIHBhcmFtcy5wYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKG9wdGlvbnMucXVlcnkpO1xuICAgICAgZGVsZXRlIHBhcmFtcy5xdWVyeTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucz8uYm9keSkge1xuICAgICAgY29uc3QgYm9keSA9IG9wdGlvbnM/LmJvZHk7XG4gICAgICBwYXJhbXMuZGF0YSA9IGJvZHk7XG4gICAgICBkZWxldGUgcGFyYW1zLmJvZHk7XG4gICAgfVxuICAgIGxldCByZXNwb25zZTogQXhpb3NSZXNwb25zZTtcbiAgICBjb25zdCB1cmxWYWx1ZSA9IHVybGpvaW4odGhpcy51cmwsIHVybCk7XG5cbiAgICB0cnkge1xuICAgICAgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5yZXF1ZXN0KHtcbiAgICAgICAgbWV0aG9kOiBtZXRob2QudG9Mb2NhbGVVcHBlckNhc2UoKSxcbiAgICAgICAgdGltZW91dDogdGhpcy50aW1lb3V0LFxuICAgICAgICB1cmw6IHVybFZhbHVlLFxuICAgICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgICAgLi4ucGFyYW1zLFxuICAgICAgICBtYXhCb2R5TGVuZ3RoOiB0aGlzLm1heEJvZHlMZW5ndGgsXG4gICAgICAgIHByb3h5OiB0aGlzLnByb3h5LFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyOiB1bmtub3duKSB7XG4gICAgICBjb25zdCBlcnJvclJlc3BvbnNlID0gZXJyIGFzIEF4aW9zRXJyb3I7XG5cbiAgICAgIHRocm93IG5ldyBBUElFcnJvcih7XG4gICAgICAgIHN0YXR1czogZXJyb3JSZXNwb25zZT8ucmVzcG9uc2U/LnN0YXR1cyB8fCA0MDAsXG4gICAgICAgIHN0YXR1c1RleHQ6IGVycm9yUmVzcG9uc2U/LnJlc3BvbnNlPy5zdGF0dXNUZXh0IHx8IGVycm9yUmVzcG9uc2UuY29kZSxcbiAgICAgICAgYm9keTogZXJyb3JSZXNwb25zZT8ucmVzcG9uc2U/LmRhdGEgfHwgZXJyb3JSZXNwb25zZS5tZXNzYWdlXG4gICAgICB9IGFzIEFQSUVycm9yT3B0aW9ucyk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5nZXRSZXNwb25zZUJvZHkocmVzcG9uc2UpO1xuICAgIHJldHVybiByZXMgYXMgQVBJUmVzcG9uc2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldFJlc3BvbnNlQm9keShyZXNwb25zZTogQXhpb3NSZXNwb25zZSk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICBjb25zdCByZXMgPSB7XG4gICAgICBib2R5OiB7fSxcbiAgICAgIHN0YXR1czogcmVzcG9uc2U/LnN0YXR1c1xuICAgIH0gYXMgQVBJUmVzcG9uc2U7XG5cbiAgICBpZiAodHlwZW9mIHJlc3BvbnNlLmRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAocmVzcG9uc2UuZGF0YSA9PT0gJ01haWxndW4gTWFnbmlmaWNlbnQgQVBJJykge1xuICAgICAgICB0aHJvdyBuZXcgQVBJRXJyb3Ioe1xuICAgICAgICAgIHN0YXR1czogNDAwLFxuICAgICAgICAgIHN0YXR1c1RleHQ6ICdJbmNvcnJlY3QgdXJsJyxcbiAgICAgICAgICBib2R5OiByZXNwb25zZS5kYXRhXG4gICAgICAgIH0gYXMgQVBJRXJyb3JPcHRpb25zKTtcbiAgICAgIH1cbiAgICAgIHJlcy5ib2R5ID0ge1xuICAgICAgICBtZXNzYWdlOiByZXNwb25zZS5kYXRhXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMuYm9keSA9IHJlc3BvbnNlLmRhdGE7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICBwcml2YXRlIGpvaW5BbmRUcmFuc2Zvcm1IZWFkZXJzKFxuICAgIG9uQ2FsbE9wdGlvbnM/OiBPbkNhbGxSZXF1ZXN0T3B0aW9uc1xuICApOiBBeGlvc0hlYWRlcnMge1xuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzID0gbmV3IEF4aW9zSGVhZGVycygpO1xuXG4gICAgY29uc3QgYmFzaWMgPSBiYXNlNjQuZW5jb2RlKGAke3RoaXMudXNlcm5hbWV9OiR7dGhpcy5rZXl9YCk7XG4gICAgcmVxdWVzdEhlYWRlcnMuc2V0QXV0aG9yaXphdGlvbihgQmFzaWMgJHtiYXNpY31gKTtcbiAgICByZXF1ZXN0SGVhZGVycy5zZXQodGhpcy5oZWFkZXJzKTtcblxuICAgIGNvbnN0IHJlY2VpdmVkT25DYWxsSGVhZGVycyA9IG9uQ2FsbE9wdGlvbnMgJiYgb25DYWxsT3B0aW9ucy5oZWFkZXJzO1xuICAgIGNvbnN0IG9uQ2FsbEhlYWRlcnMgPSB0aGlzLm1ha2VIZWFkZXJzRnJvbU9iamVjdChyZWNlaXZlZE9uQ2FsbEhlYWRlcnMpO1xuICAgIHJlcXVlc3RIZWFkZXJzLnNldChvbkNhbGxIZWFkZXJzKTtcbiAgICByZXR1cm4gcmVxdWVzdEhlYWRlcnM7XG4gIH1cblxuICBwcml2YXRlIG1ha2VIZWFkZXJzRnJvbU9iamVjdChcbiAgICBoZWFkZXJzT2JqZWN0OiBSYXdBeGlvc1JlcXVlc3RIZWFkZXJzID0ge31cbiAgKTogQXhpb3NIZWFkZXJzIHtcbiAgICBsZXQgcmVxdWVzdEhlYWRlcnMgPSBuZXcgQXhpb3NIZWFkZXJzKCk7XG4gICAgcmVxdWVzdEhlYWRlcnMgPSBPYmplY3QuZW50cmllcyhoZWFkZXJzT2JqZWN0KS5yZWR1Y2UoXG4gICAgICAoaGVhZGVyc0FjY3VtdWxhdG9yOiBBeGlvc0hlYWRlcnMsIGN1cnJlbnRQYWlyKSA9PiB7XG4gICAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IGN1cnJlbnRQYWlyO1xuICAgICAgICBoZWFkZXJzQWNjdW11bGF0b3Iuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gaGVhZGVyc0FjY3VtdWxhdG9yO1xuICAgICAgfSwgcmVxdWVzdEhlYWRlcnNcbiAgICApO1xuICAgIHJldHVybiByZXF1ZXN0SGVhZGVycztcbiAgfVxuXG4gIHNldFN1YmFjY291bnRIZWFkZXIoc3ViYWNjb3VudElkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5tYWtlSGVhZGVyc0Zyb21PYmplY3Qoe1xuICAgICAgLi4udGhpcy5oZWFkZXJzLFxuICAgICAgW1N1YmFjY291bnRzQ2xpZW50LlNVQkFDQ09VTlRfSEVBREVSXTogc3ViYWNjb3VudElkXG4gICAgfSk7XG4gICAgdGhpcy5oZWFkZXJzLnNldChoZWFkZXJzKTtcbiAgfVxuXG4gIHJlc2V0U3ViYWNjb3VudEhlYWRlcigpOiB2b2lkIHtcbiAgICB0aGlzLmhlYWRlcnMuZGVsZXRlKFN1YmFjY291bnRzQ2xpZW50LlNVQkFDQ09VTlRfSEVBREVSKTtcbiAgfVxuXG4gIHF1ZXJ5KFxuICAgIG1ldGhvZDogc3RyaW5nLFxuICAgIHVybDogc3RyaW5nLFxuICAgIHF1ZXJ5PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBBcnJheTxBcnJheTxzdHJpbmc+PixcbiAgICBvcHRpb25zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgKTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QobWV0aG9kLCB1cmwsIHsgcXVlcnksIC4uLm9wdGlvbnMgfSk7XG4gIH1cblxuICBjb21tYW5kKFxuICAgIG1ldGhvZDogc3RyaW5nLFxuICAgIHVybDogc3RyaW5nLFxuICAgIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10gfCBzdHJpbmcgfCBOb2RlRm9ybURhdGEgfCBGb3JtRGF0YSxcbiAgICBvcHRpb25zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgYWRkRGVmYXVsdEhlYWRlcnMgPSB0cnVlXG4gICk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICBsZXQgaGVhZGVycyA9IHt9O1xuICAgIGlmIChhZGREZWZhdWx0SGVhZGVycykge1xuICAgICAgaGVhZGVycyA9IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnIH07XG4gICAgfVxuICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0ge1xuICAgICAgLi4uaGVhZGVycyxcbiAgICAgIGJvZHk6IGRhdGEsXG4gICAgICAuLi5vcHRpb25zXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgcmVxdWVzdE9wdGlvbnNcbiAgICApO1xuICB9XG5cbiAgZ2V0KFxuICAgIHVybDogc3RyaW5nLFxuICAgIHF1ZXJ5PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBBcnJheTxBcnJheTxzdHJpbmc+PixcbiAgICBvcHRpb25zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgKTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5KCdnZXQnLCB1cmwsIHF1ZXJ5LCBvcHRpb25zKTtcbiAgfVxuXG4gIHBvc3QoXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICApOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuY29tbWFuZCgncG9zdCcsIHVybCwgZGF0YSwgb3B0aW9ucyk7XG4gIH1cblxuICBwb3N0V2l0aEZEKFxuICAgIHVybDogc3RyaW5nLFxuICAgIGRhdGE6IEZvcm1EYXRhSW5wdXRcbiAgKTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIGNvbnN0IGZvcm1EYXRhID0gdGhpcy5mb3JtRGF0YUJ1aWxkZXIuY3JlYXRlRm9ybURhdGEoZGF0YSk7XG4gICAgcmV0dXJuIHRoaXMuY29tbWFuZCgncG9zdCcsIHVybCwgZm9ybURhdGEsIHtcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJyB9XG4gICAgfSwgZmFsc2UpO1xuICB9XG5cbiAgcHV0V2l0aEZEKHVybDogc3RyaW5nLCBkYXRhOiBGb3JtRGF0YUlucHV0KTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIGNvbnN0IGZvcm1EYXRhID0gdGhpcy5mb3JtRGF0YUJ1aWxkZXIuY3JlYXRlRm9ybURhdGEoZGF0YSk7XG4gICAgcmV0dXJuIHRoaXMuY29tbWFuZCgncHV0JywgdXJsLCBmb3JtRGF0YSwge1xuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnIH1cbiAgICB9LCBmYWxzZSk7XG4gIH1cblxuICBwYXRjaFdpdGhGRCh1cmw6IHN0cmluZywgZGF0YTogRm9ybURhdGFJbnB1dCk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICBjb25zdCBmb3JtRGF0YSA9IHRoaXMuZm9ybURhdGFCdWlsZGVyLmNyZWF0ZUZvcm1EYXRhKGRhdGEpO1xuICAgIHJldHVybiB0aGlzLmNvbW1hbmQoJ3BhdGNoJywgdXJsLCBmb3JtRGF0YSwge1xuICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnIH1cbiAgICB9LCBmYWxzZSk7XG4gIH1cblxuICBwdXQodXJsOiBzdHJpbmcsIGRhdGE/OiBGb3JtRGF0YUlucHV0IHwgc3RyaW5nLCBvcHRpb25zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pXG4gIDogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmNvbW1hbmQoJ3B1dCcsIHVybCwgZGF0YSwgb3B0aW9ucyk7XG4gIH1cblxuICBkZWxldGUodXJsOiBzdHJpbmcsIGRhdGE/OiBJcFBvb2xEZWxldGVEYXRhKTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmNvbW1hbmQoJ2RlbGV0ZScsIHVybCwgZGF0YSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUmVxdWVzdDtcbiIsImV4cG9ydCBlbnVtIFJlc29sdXRpb24ge1xuICAgIEhPVVIgPSAnaG91cicsXG4gICAgREFZID0gJ2RheScsXG4gICAgTU9OVEggPSAnbW9udGgnXG59XG5cbmV4cG9ydCBlbnVtIFN1cHByZXNzaW9uTW9kZWxzIHtcbiAgICBCT1VOQ0VTID0gJ2JvdW5jZXMnLFxuICAgIENPTVBMQUlOVFMgPSAnY29tcGxhaW50cycsXG4gICAgVU5TVUJTQ1JJQkVTID0gJ3Vuc3Vic2NyaWJlcycsXG4gICAgV0hJVEVMSVNUUyA9ICd3aGl0ZWxpc3RzJ1xufVxuXG5leHBvcnQgZW51bSBXZWJob29rc0lkcyB7XG4gICAgQ0xJQ0tFRCA9ICdjbGlja2VkJyxcbiAgICBDT01QTEFJTkVEID0gJ2NvbXBsYWluZWQnLFxuICAgIERFTElWRVJFRCA9ICdkZWxpdmVyZWQnLFxuICAgIE9QRU5FRCA9ICdvcGVuZWQnLFxuICAgIFBFUk1BTkVOVF9GQUlMID0gJ3Blcm1hbmVudF9mYWlsJyxcbiAgICBURU1QT1JBUllfRkFJTCA9ICd0ZW1wb3JhcnlfZmFpbCcsXG4gICAgVU5TVUJTQ1JJQkVEID0gJ3Vuc3Vic2NyaWJlJyxcbn1cblxuZXhwb3J0IGVudW0gWWVzTm8ge1xuICAgIFlFUyA9ICd5ZXMnLFxuICAgIE5PID0gJ25vJ1xufVxuIiwiZXhwb3J0ICogZnJvbSAnLi9Mb2dnZXInO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9Eb21haW5DcmVkZW50aWFscyc7XG5leHBvcnQgKiBmcm9tICcuL0RvbWFpblRhZ3MnO1xuZXhwb3J0ICogZnJvbSAnLi9Eb21haW5UZW1wbGF0ZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9Eb21haW5zQ2xpZW50JztcbiIsImV4cG9ydCAqIGZyb20gJy4vSUV2ZW50Q2xpZW50JztcbiIsImV4cG9ydCAqIGZyb20gJy4vSUlQUG9vbHNDbGllbnQnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9JSVBzQ2xpZW50JztcbiIsImV4cG9ydCAqIGZyb20gJy4vSW5ib3hQbGFjZW1lbnRzQ2xpZW50JztcbmV4cG9ydCAqIGZyb20gJy4vQXR0cmlidXRlc0NsaWVudCc7XG5leHBvcnQgKiBmcm9tICcuL0ZpbHRlcnNDbGllbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9TZWVkc0xpc3RzL1NlZWRzTGlzdHNDbGllbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9SZXN1bHRzL0luYm94UGxhY2VtZW50c1Jlc3VsdHMnO1xuZXhwb3J0ICogZnJvbSAnLi9SZXN1bHRzL0luYm94UGxhY2VtZW50c1Jlc3VsdHNTaGFyaW5nJztcbiIsImV4cG9ydCAqIGZyb20gJy4vSU1haWxndW5DbGllbnQnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9NYWlsaW5nTGlzdE1lbWJlcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9NYWlsaW5nTGlzdHNDbGllbnQnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9JTWVzc2FnZXNDbGllbnQnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9JUm91dGVzQ2xpZW50JztcbiIsImV4cG9ydCAqIGZyb20gJy4vU3RhdHNDbGllbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9TdGF0c0NvbnRhaW5lcic7XG4iLCJleHBvcnQgKiBmcm9tICcuL0lTdWJhY2NvdW50c0NsaWVudCc7XG4iLCJleHBvcnQgKiBmcm9tICcuL0JvdW5jZSc7XG5leHBvcnQgKiBmcm9tICcuL0NvbXBsYWludCc7XG5leHBvcnQgKiBmcm9tICcuL1Vuc3Vic2NyaWJlJztcbmV4cG9ydCAqIGZyb20gJy4vV2hpdGVMaXN0JztcbmV4cG9ydCAqIGZyb20gJy4vSVN1cHByZXNzaW9uc0NsaWVudCc7XG4iLCJleHBvcnQgKiBmcm9tICcuL011bHRpcGxlVmFsaWRhdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL1ZhbGlkYXRpb24nO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9JV2ViSG9va3NDbGllbnQnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9Db21tb24nO1xuZXhwb3J0ICogZnJvbSAnLi9Eb21haW5zJztcbmV4cG9ydCAqIGZyb20gJy4vTWFpbGd1bkNsaWVudCc7XG5leHBvcnQgKiBmcm9tICcuL01haWxpbmdMaXN0cyc7XG5leHBvcnQgKiBmcm9tICcuL1N0YXRzJztcbmV4cG9ydCAqIGZyb20gJy4vU3VwcHJlc3Npb25zJztcbmV4cG9ydCAqIGZyb20gJy4vVmFsaWRhdGlvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9FdmVudENsaWVudCc7XG5leHBvcnQgKiBmcm9tICcuL1dlYmhvb2tzJztcbmV4cG9ydCAqIGZyb20gJy4vTWVzc2FnZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9Sb3V0ZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9JUHMnO1xuZXhwb3J0ICogZnJvbSAnLi9JUFBvb2xzJztcbmV4cG9ydCAqIGZyb20gJy4vU3ViYWNjb3VudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9JbmJveFBsYWNlbWVudHMnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9FcnJvcic7XG5leHBvcnQgKiBmcm9tICcuL0FwaVJlc3BvbnNlJztcbmV4cG9ydCAqIGZyb20gJy4vRm9ybURhdGEnO1xuZXhwb3J0ICogZnJvbSAnLi9OYXZpZ2F0aW9uVGhydVBhZ2VzJztcbmV4cG9ydCAqIGZyb20gJy4vUmVxdWVzdE9wdGlvbnMnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9Eb21haW5DcmVkZW50aWFscyc7XG5leHBvcnQgKiBmcm9tICcuL0RvbWFpbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9Eb21haW5UYWdzJztcbmV4cG9ydCAqIGZyb20gJy4vRG9tYWluVGVtcGxhdGVzJztcbmV4cG9ydCAqIGZyb20gJy4vRG9tYWluVHJhY2tpbmcnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9FdmVudHMnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9JcFBvb2xzJztcbiIsImV4cG9ydCAqIGZyb20gJy4vSVBzJztcbiIsImV4cG9ydCAqIGZyb20gJy4vTWFpbGd1bkNsaWVudE9wdGlvbnMnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9NYWlsaW5nTGlzdE1lbWJlcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9NYWlsaW5nTGlzdHMnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9NZXNzYWdlcyc7XG4iLCJleHBvcnQgKiBmcm9tICcuL1JvdXRlcyc7XG4iLCJleHBvcnQgKiBmcm9tICcuL1N0YXRzJztcbiIsImV4cG9ydCAqIGZyb20gJy4vU3ViYWNjb3VudHMnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9Cb3VuY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9Db21wbGFpbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9TdXBwcmVzc2lvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9VbnN1YnNjcmliZSc7XG5leHBvcnQgKiBmcm9tICcuL1doaXRlTGlzdCc7XG4iLCJleHBvcnQgKiBmcm9tICcuL011bHRpcGxlVmFsaWRhdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL1ZhbGlkYXRpb24nO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9XZWJob29rcyc7XG4iLCJleHBvcnQgKiBmcm9tICcuL0NvbW1vbic7XG5leHBvcnQgKiBmcm9tICcuL0RvbWFpbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9FdmVudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9JUFBvb2xzJztcbmV4cG9ydCAqIGZyb20gJy4vSVBzJztcbmV4cG9ydCAqIGZyb20gJy4vTWFpbGd1bkNsaWVudCc7XG5leHBvcnQgKiBmcm9tICcuL01haWxpbmdMaXN0cyc7XG5leHBvcnQgKiBmcm9tICcuL01lc3NhZ2VzJztcbmV4cG9ydCAqIGZyb20gJy4vUm91dGVzJztcbmV4cG9ydCAqIGZyb20gJy4vU3RhdHMnO1xuZXhwb3J0ICogZnJvbSAnLi9TdWJhY2NvdW50cyc7XG5leHBvcnQgKiBmcm9tICcuL1N1cHByZXNzaW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL1ZhbGlkYXRpb25zJztcbmV4cG9ydCAqIGZyb20gJy4vV2ViaG9va3MnO1xuIiwiaW1wb3J0IE1haWxndW5DbGllbnQgZnJvbSAnLi9DbGFzc2VzL01haWxndW5DbGllbnQnO1xuaW1wb3J0IHsgSU1haWxndW5DbGllbnQgfSBmcm9tICcuL0ludGVyZmFjZXMnO1xuaW1wb3J0IHsgSW5wdXRGb3JtRGF0YSwgTWFpbGd1bkNsaWVudE9wdGlvbnMgfSBmcm9tICcuL1R5cGVzJztcblxuZXhwb3J0ICogYXMgRW51bXMgZnJvbSAnLi9FbnVtcyc7XG5leHBvcnQgKiBmcm9tICcuL1R5cGVzJztcbmV4cG9ydCAqIGFzIEludGVyZmFjZXMgZnJvbSAnLi9JbnRlcmZhY2VzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWFpbGd1biB7XG4gIHN0YXRpYyBnZXQgZGVmYXVsdCgpOiB0eXBlb2YgTWFpbGd1biB7IHJldHVybiB0aGlzOyB9XG4gIHByaXZhdGUgZm9ybURhdGE6IElucHV0Rm9ybURhdGFcblxuICBjb25zdHJ1Y3RvcihGb3JtRGF0YTogSW5wdXRGb3JtRGF0YSkge1xuICAgIHRoaXMuZm9ybURhdGEgPSBGb3JtRGF0YTtcbiAgfVxuXG4gIGNsaWVudChvcHRpb25zOiBNYWlsZ3VuQ2xpZW50T3B0aW9ucykgOiBJTWFpbGd1bkNsaWVudCB7XG4gICAgcmV0dXJuIG5ldyBNYWlsZ3VuQ2xpZW50KG9wdGlvbnMsIHRoaXMuZm9ybURhdGEpO1xuICB9XG59XG4iLCIvKiEgaHR0cHM6Ly9tdGhzLmJlL2Jhc2U2NCB2MS4wLjAgYnkgQG1hdGhpYXMgfCBNSVQgbGljZW5zZSAqL1xuOyhmdW5jdGlvbihyb290KSB7XG5cblx0Ly8gRGV0ZWN0IGZyZWUgdmFyaWFibGVzIGBleHBvcnRzYC5cblx0dmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cztcblxuXHQvLyBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC5cblx0dmFyIGZyZWVNb2R1bGUgPSB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJlxuXHRcdG1vZHVsZS5leHBvcnRzID09IGZyZWVFeHBvcnRzICYmIG1vZHVsZTtcblxuXHQvLyBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCwgZnJvbSBOb2RlLmpzIG9yIEJyb3dzZXJpZmllZCBjb2RlLCBhbmQgdXNlXG5cdC8vIGl0IGFzIGByb290YC5cblx0dmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbDtcblx0aWYgKGZyZWVHbG9iYWwuZ2xvYmFsID09PSBmcmVlR2xvYmFsIHx8IGZyZWVHbG9iYWwud2luZG93ID09PSBmcmVlR2xvYmFsKSB7XG5cdFx0cm9vdCA9IGZyZWVHbG9iYWw7XG5cdH1cblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHR2YXIgSW52YWxpZENoYXJhY3RlckVycm9yID0gZnVuY3Rpb24obWVzc2FnZSkge1xuXHRcdHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG5cdH07XG5cdEludmFsaWRDaGFyYWN0ZXJFcnJvci5wcm90b3R5cGUgPSBuZXcgRXJyb3I7XG5cdEludmFsaWRDaGFyYWN0ZXJFcnJvci5wcm90b3R5cGUubmFtZSA9ICdJbnZhbGlkQ2hhcmFjdGVyRXJyb3InO1xuXG5cdHZhciBlcnJvciA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHtcblx0XHQvLyBOb3RlOiB0aGUgZXJyb3IgbWVzc2FnZXMgdXNlZCB0aHJvdWdob3V0IHRoaXMgZmlsZSBtYXRjaCB0aG9zZSB1c2VkIGJ5XG5cdFx0Ly8gdGhlIG5hdGl2ZSBgYXRvYmAvYGJ0b2FgIGltcGxlbWVudGF0aW9uIGluIENocm9taXVtLlxuXHRcdHRocm93IG5ldyBJbnZhbGlkQ2hhcmFjdGVyRXJyb3IobWVzc2FnZSk7XG5cdH07XG5cblx0dmFyIFRBQkxFID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nO1xuXHQvLyBodHRwOi8vd2hhdHdnLm9yZy9odG1sL2NvbW1vbi1taWNyb3N5bnRheGVzLmh0bWwjc3BhY2UtY2hhcmFjdGVyXG5cdHZhciBSRUdFWF9TUEFDRV9DSEFSQUNURVJTID0gL1tcXHRcXG5cXGZcXHIgXS9nO1xuXG5cdC8vIGBkZWNvZGVgIGlzIGRlc2lnbmVkIHRvIGJlIGZ1bGx5IGNvbXBhdGlibGUgd2l0aCBgYXRvYmAgYXMgZGVzY3JpYmVkIGluIHRoZVxuXHQvLyBIVE1MIFN0YW5kYXJkLiBodHRwOi8vd2hhdHdnLm9yZy9odG1sL3dlYmFwcGFwaXMuaHRtbCNkb20td2luZG93YmFzZTY0LWF0b2Jcblx0Ly8gVGhlIG9wdGltaXplZCBiYXNlNjQtZGVjb2RpbmcgYWxnb3JpdGhtIHVzZWQgaXMgYmFzZWQgb24gQGF0a+KAmXMgZXhjZWxsZW50XG5cdC8vIGltcGxlbWVudGF0aW9uLiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9hdGsvMTAyMDM5NlxuXHR2YXIgZGVjb2RlID0gZnVuY3Rpb24oaW5wdXQpIHtcblx0XHRpbnB1dCA9IFN0cmluZyhpbnB1dClcblx0XHRcdC5yZXBsYWNlKFJFR0VYX1NQQUNFX0NIQVJBQ1RFUlMsICcnKTtcblx0XHR2YXIgbGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuXHRcdGlmIChsZW5ndGggJSA0ID09IDApIHtcblx0XHRcdGlucHV0ID0gaW5wdXQucmVwbGFjZSgvPT0/JC8sICcnKTtcblx0XHRcdGxlbmd0aCA9IGlucHV0Lmxlbmd0aDtcblx0XHR9XG5cdFx0aWYgKFxuXHRcdFx0bGVuZ3RoICUgNCA9PSAxIHx8XG5cdFx0XHQvLyBodHRwOi8vd2hhdHdnLm9yZy9DI2FscGhhbnVtZXJpYy1hc2NpaS1jaGFyYWN0ZXJzXG5cdFx0XHQvW14rYS16QS1aMC05L10vLnRlc3QoaW5wdXQpXG5cdFx0KSB7XG5cdFx0XHRlcnJvcihcblx0XHRcdFx0J0ludmFsaWQgY2hhcmFjdGVyOiB0aGUgc3RyaW5nIHRvIGJlIGRlY29kZWQgaXMgbm90IGNvcnJlY3RseSBlbmNvZGVkLidcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHZhciBiaXRDb3VudGVyID0gMDtcblx0XHR2YXIgYml0U3RvcmFnZTtcblx0XHR2YXIgYnVmZmVyO1xuXHRcdHZhciBvdXRwdXQgPSAnJztcblx0XHR2YXIgcG9zaXRpb24gPSAtMTtcblx0XHR3aGlsZSAoKytwb3NpdGlvbiA8IGxlbmd0aCkge1xuXHRcdFx0YnVmZmVyID0gVEFCTEUuaW5kZXhPZihpbnB1dC5jaGFyQXQocG9zaXRpb24pKTtcblx0XHRcdGJpdFN0b3JhZ2UgPSBiaXRDb3VudGVyICUgNCA/IGJpdFN0b3JhZ2UgKiA2NCArIGJ1ZmZlciA6IGJ1ZmZlcjtcblx0XHRcdC8vIFVubGVzcyB0aGlzIGlzIHRoZSBmaXJzdCBvZiBhIGdyb3VwIG9mIDQgY2hhcmFjdGVyc+KAplxuXHRcdFx0aWYgKGJpdENvdW50ZXIrKyAlIDQpIHtcblx0XHRcdFx0Ly8g4oCmY29udmVydCB0aGUgZmlyc3QgOCBiaXRzIHRvIGEgc2luZ2xlIEFTQ0lJIGNoYXJhY3Rlci5cblx0XHRcdFx0b3V0cHV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoXG5cdFx0XHRcdFx0MHhGRiAmIGJpdFN0b3JhZ2UgPj4gKC0yICogYml0Q291bnRlciAmIDYpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvdXRwdXQ7XG5cdH07XG5cblx0Ly8gYGVuY29kZWAgaXMgZGVzaWduZWQgdG8gYmUgZnVsbHkgY29tcGF0aWJsZSB3aXRoIGBidG9hYCBhcyBkZXNjcmliZWQgaW4gdGhlXG5cdC8vIEhUTUwgU3RhbmRhcmQ6IGh0dHA6Ly93aGF0d2cub3JnL2h0bWwvd2ViYXBwYXBpcy5odG1sI2RvbS13aW5kb3diYXNlNjQtYnRvYVxuXHR2YXIgZW5jb2RlID0gZnVuY3Rpb24oaW5wdXQpIHtcblx0XHRpbnB1dCA9IFN0cmluZyhpbnB1dCk7XG5cdFx0aWYgKC9bXlxcMC1cXHhGRl0vLnRlc3QoaW5wdXQpKSB7XG5cdFx0XHQvLyBOb3RlOiBubyBuZWVkIHRvIHNwZWNpYWwtY2FzZSBhc3RyYWwgc3ltYm9scyBoZXJlLCBhcyBzdXJyb2dhdGVzIGFyZVxuXHRcdFx0Ly8gbWF0Y2hlZCwgYW5kIHRoZSBpbnB1dCBpcyBzdXBwb3NlZCB0byBvbmx5IGNvbnRhaW4gQVNDSUkgYW55d2F5LlxuXHRcdFx0ZXJyb3IoXG5cdFx0XHRcdCdUaGUgc3RyaW5nIHRvIGJlIGVuY29kZWQgY29udGFpbnMgY2hhcmFjdGVycyBvdXRzaWRlIG9mIHRoZSAnICtcblx0XHRcdFx0J0xhdGluMSByYW5nZS4nXG5cdFx0XHQpO1xuXHRcdH1cblx0XHR2YXIgcGFkZGluZyA9IGlucHV0Lmxlbmd0aCAlIDM7XG5cdFx0dmFyIG91dHB1dCA9ICcnO1xuXHRcdHZhciBwb3NpdGlvbiA9IC0xO1xuXHRcdHZhciBhO1xuXHRcdHZhciBiO1xuXHRcdHZhciBjO1xuXHRcdHZhciBidWZmZXI7XG5cdFx0Ly8gTWFrZSBzdXJlIGFueSBwYWRkaW5nIGlzIGhhbmRsZWQgb3V0c2lkZSBvZiB0aGUgbG9vcC5cblx0XHR2YXIgbGVuZ3RoID0gaW5wdXQubGVuZ3RoIC0gcGFkZGluZztcblxuXHRcdHdoaWxlICgrK3Bvc2l0aW9uIDwgbGVuZ3RoKSB7XG5cdFx0XHQvLyBSZWFkIHRocmVlIGJ5dGVzLCBpLmUuIDI0IGJpdHMuXG5cdFx0XHRhID0gaW5wdXQuY2hhckNvZGVBdChwb3NpdGlvbikgPDwgMTY7XG5cdFx0XHRiID0gaW5wdXQuY2hhckNvZGVBdCgrK3Bvc2l0aW9uKSA8PCA4O1xuXHRcdFx0YyA9IGlucHV0LmNoYXJDb2RlQXQoKytwb3NpdGlvbik7XG5cdFx0XHRidWZmZXIgPSBhICsgYiArIGM7XG5cdFx0XHQvLyBUdXJuIHRoZSAyNCBiaXRzIGludG8gZm91ciBjaHVua3Mgb2YgNiBiaXRzIGVhY2gsIGFuZCBhcHBlbmQgdGhlXG5cdFx0XHQvLyBtYXRjaGluZyBjaGFyYWN0ZXIgZm9yIGVhY2ggb2YgdGhlbSB0byB0aGUgb3V0cHV0LlxuXHRcdFx0b3V0cHV0ICs9IChcblx0XHRcdFx0VEFCTEUuY2hhckF0KGJ1ZmZlciA+PiAxOCAmIDB4M0YpICtcblx0XHRcdFx0VEFCTEUuY2hhckF0KGJ1ZmZlciA+PiAxMiAmIDB4M0YpICtcblx0XHRcdFx0VEFCTEUuY2hhckF0KGJ1ZmZlciA+PiA2ICYgMHgzRikgK1xuXHRcdFx0XHRUQUJMRS5jaGFyQXQoYnVmZmVyICYgMHgzRilcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0aWYgKHBhZGRpbmcgPT0gMikge1xuXHRcdFx0YSA9IGlucHV0LmNoYXJDb2RlQXQocG9zaXRpb24pIDw8IDg7XG5cdFx0XHRiID0gaW5wdXQuY2hhckNvZGVBdCgrK3Bvc2l0aW9uKTtcblx0XHRcdGJ1ZmZlciA9IGEgKyBiO1xuXHRcdFx0b3V0cHV0ICs9IChcblx0XHRcdFx0VEFCTEUuY2hhckF0KGJ1ZmZlciA+PiAxMCkgK1xuXHRcdFx0XHRUQUJMRS5jaGFyQXQoKGJ1ZmZlciA+PiA0KSAmIDB4M0YpICtcblx0XHRcdFx0VEFCTEUuY2hhckF0KChidWZmZXIgPDwgMikgJiAweDNGKSArXG5cdFx0XHRcdCc9J1xuXHRcdFx0KTtcblx0XHR9IGVsc2UgaWYgKHBhZGRpbmcgPT0gMSkge1xuXHRcdFx0YnVmZmVyID0gaW5wdXQuY2hhckNvZGVBdChwb3NpdGlvbik7XG5cdFx0XHRvdXRwdXQgKz0gKFxuXHRcdFx0XHRUQUJMRS5jaGFyQXQoYnVmZmVyID4+IDIpICtcblx0XHRcdFx0VEFCTEUuY2hhckF0KChidWZmZXIgPDwgNCkgJiAweDNGKSArXG5cdFx0XHRcdCc9PSdcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG91dHB1dDtcblx0fTtcblxuXHR2YXIgYmFzZTY0ID0ge1xuXHRcdCdlbmNvZGUnOiBlbmNvZGUsXG5cdFx0J2RlY29kZSc6IGRlY29kZSxcblx0XHQndmVyc2lvbic6ICcxLjAuMCdcblx0fTtcblxuXHQvLyBTb21lIEFNRCBidWlsZCBvcHRpbWl6ZXJzLCBsaWtlIHIuanMsIGNoZWNrIGZvciBzcGVjaWZpYyBjb25kaXRpb24gcGF0dGVybnNcblx0Ly8gbGlrZSB0aGUgZm9sbG93aW5nOlxuXHRpZiAoXG5cdFx0dHlwZW9mIGRlZmluZSA9PSAnZnVuY3Rpb24nICYmXG5cdFx0dHlwZW9mIGRlZmluZS5hbWQgPT0gJ29iamVjdCcgJiZcblx0XHRkZWZpbmUuYW1kXG5cdCkge1xuXHRcdGRlZmluZShmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBiYXNlNjQ7XG5cdFx0fSk7XG5cdH1cdGVsc2UgaWYgKGZyZWVFeHBvcnRzICYmICFmcmVlRXhwb3J0cy5ub2RlVHlwZSkge1xuXHRcdGlmIChmcmVlTW9kdWxlKSB7IC8vIGluIE5vZGUuanMgb3IgUmluZ29KUyB2MC44LjArXG5cdFx0XHRmcmVlTW9kdWxlLmV4cG9ydHMgPSBiYXNlNjQ7XG5cdFx0fSBlbHNlIHsgLy8gaW4gTmFyd2hhbCBvciBSaW5nb0pTIHYwLjcuMC1cblx0XHRcdGZvciAodmFyIGtleSBpbiBiYXNlNjQpIHtcblx0XHRcdFx0YmFzZTY0Lmhhc093blByb3BlcnR5KGtleSkgJiYgKGZyZWVFeHBvcnRzW2tleV0gPSBiYXNlNjRba2V5XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2UgeyAvLyBpbiBSaGlubyBvciBhIHdlYiBicm93c2VyXG5cdFx0cm9vdC5iYXNlNjQgPSBiYXNlNjQ7XG5cdH1cblxufSh0aGlzKSk7XG4iLCIoZnVuY3Rpb24gKG5hbWUsIGNvbnRleHQsIGRlZmluaXRpb24pIHtcbiAgaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSBtb2R1bGUuZXhwb3J0cyA9IGRlZmluaXRpb24oKTtcbiAgZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSBkZWZpbmUoZGVmaW5pdGlvbik7XG4gIGVsc2UgY29udGV4dFtuYW1lXSA9IGRlZmluaXRpb24oKTtcbn0pKCd1cmxqb2luJywgdGhpcywgZnVuY3Rpb24gKCkge1xuXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZSAoc3RyQXJyYXkpIHtcbiAgICB2YXIgcmVzdWx0QXJyYXkgPSBbXTtcbiAgICBpZiAoc3RyQXJyYXkubGVuZ3RoID09PSAwKSB7IHJldHVybiAnJzsgfVxuXG4gICAgaWYgKHR5cGVvZiBzdHJBcnJheVswXSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VybCBtdXN0IGJlIGEgc3RyaW5nLiBSZWNlaXZlZCAnICsgc3RyQXJyYXlbMF0pO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSBmaXJzdCBwYXJ0IGlzIGEgcGxhaW4gcHJvdG9jb2wsIHdlIGNvbWJpbmUgaXQgd2l0aCB0aGUgbmV4dCBwYXJ0LlxuICAgIGlmIChzdHJBcnJheVswXS5tYXRjaCgvXlteLzpdKzpcXC8qJC8pICYmIHN0ckFycmF5Lmxlbmd0aCA+IDEpIHtcbiAgICAgIHZhciBmaXJzdCA9IHN0ckFycmF5LnNoaWZ0KCk7XG4gICAgICBzdHJBcnJheVswXSA9IGZpcnN0ICsgc3RyQXJyYXlbMF07XG4gICAgfVxuXG4gICAgLy8gVGhlcmUgbXVzdCBiZSB0d28gb3IgdGhyZWUgc2xhc2hlcyBpbiB0aGUgZmlsZSBwcm90b2NvbCwgdHdvIHNsYXNoZXMgaW4gYW55dGhpbmcgZWxzZS5cbiAgICBpZiAoc3RyQXJyYXlbMF0ubWF0Y2goL15maWxlOlxcL1xcL1xcLy8pKSB7XG4gICAgICBzdHJBcnJheVswXSA9IHN0ckFycmF5WzBdLnJlcGxhY2UoL14oW14vOl0rKTpcXC8qLywgJyQxOi8vLycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHJBcnJheVswXSA9IHN0ckFycmF5WzBdLnJlcGxhY2UoL14oW14vOl0rKTpcXC8qLywgJyQxOi8vJyk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHJBcnJheS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNvbXBvbmVudCA9IHN0ckFycmF5W2ldO1xuXG4gICAgICBpZiAodHlwZW9mIGNvbXBvbmVudCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVXJsIG11c3QgYmUgYSBzdHJpbmcuIFJlY2VpdmVkICcgKyBjb21wb25lbnQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29tcG9uZW50ID09PSAnJykgeyBjb250aW51ZTsgfVxuXG4gICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgLy8gUmVtb3ZpbmcgdGhlIHN0YXJ0aW5nIHNsYXNoZXMgZm9yIGVhY2ggY29tcG9uZW50IGJ1dCB0aGUgZmlyc3QuXG4gICAgICAgIGNvbXBvbmVudCA9IGNvbXBvbmVudC5yZXBsYWNlKC9eW1xcL10rLywgJycpO1xuICAgICAgfVxuICAgICAgaWYgKGkgPCBzdHJBcnJheS5sZW5ndGggLSAxKSB7XG4gICAgICAgIC8vIFJlbW92aW5nIHRoZSBlbmRpbmcgc2xhc2hlcyBmb3IgZWFjaCBjb21wb25lbnQgYnV0IHRoZSBsYXN0LlxuICAgICAgICBjb21wb25lbnQgPSBjb21wb25lbnQucmVwbGFjZSgvW1xcL10rJC8sICcnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEZvciB0aGUgbGFzdCBjb21wb25lbnQgd2Ugd2lsbCBjb21iaW5lIG11bHRpcGxlIHNsYXNoZXMgdG8gYSBzaW5nbGUgb25lLlxuICAgICAgICBjb21wb25lbnQgPSBjb21wb25lbnQucmVwbGFjZSgvW1xcL10rJC8sICcvJyk7XG4gICAgICB9XG5cbiAgICAgIHJlc3VsdEFycmF5LnB1c2goY29tcG9uZW50KTtcblxuICAgIH1cblxuICAgIHZhciBzdHIgPSByZXN1bHRBcnJheS5qb2luKCcvJyk7XG4gICAgLy8gRWFjaCBpbnB1dCBjb21wb25lbnQgaXMgbm93IHNlcGFyYXRlZCBieSBhIHNpbmdsZSBzbGFzaCBleGNlcHQgdGhlIHBvc3NpYmxlIGZpcnN0IHBsYWluIHByb3RvY29sIHBhcnQuXG5cbiAgICAvLyByZW1vdmUgdHJhaWxpbmcgc2xhc2ggYmVmb3JlIHBhcmFtZXRlcnMgb3IgaGFzaFxuICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cXC8oXFw/fCZ8I1teIV0pL2csICckMScpO1xuXG4gICAgLy8gcmVwbGFjZSA/IGluIHBhcmFtZXRlcnMgd2l0aCAmXG4gICAgdmFyIHBhcnRzID0gc3RyLnNwbGl0KCc/Jyk7XG4gICAgc3RyID0gcGFydHMuc2hpZnQoKSArIChwYXJ0cy5sZW5ndGggPiAwID8gJz8nOiAnJykgKyBwYXJ0cy5qb2luKCcmJyk7XG5cbiAgICByZXR1cm4gc3RyO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaW5wdXQ7XG5cbiAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1swXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlucHV0ID0gYXJndW1lbnRzWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnB1dCA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9ybWFsaXplKGlucHV0KTtcbiAgfTtcblxufSk7XG4iLCIvLyBBeGlvcyB2MS43LjQgQ29weXJpZ2h0IChjKSAyMDI0IE1hdHQgWmFicmlza2llIGFuZCBjb250cmlidXRvcnNcbid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gYmluZChmbiwgdGhpc0FyZykge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcCgpIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhpc0FyZywgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxuLy8gdXRpbHMgaXMgYSBsaWJyYXJ5IG9mIGdlbmVyaWMgaGVscGVyIGZ1bmN0aW9ucyBub24tc3BlY2lmaWMgdG8gYXhpb3NcblxuY29uc3Qge3RvU3RyaW5nfSA9IE9iamVjdC5wcm90b3R5cGU7XG5jb25zdCB7Z2V0UHJvdG90eXBlT2Z9ID0gT2JqZWN0O1xuXG5jb25zdCBraW5kT2YgPSAoY2FjaGUgPT4gdGhpbmcgPT4ge1xuICAgIGNvbnN0IHN0ciA9IHRvU3RyaW5nLmNhbGwodGhpbmcpO1xuICAgIHJldHVybiBjYWNoZVtzdHJdIHx8IChjYWNoZVtzdHJdID0gc3RyLnNsaWNlKDgsIC0xKS50b0xvd2VyQ2FzZSgpKTtcbn0pKE9iamVjdC5jcmVhdGUobnVsbCkpO1xuXG5jb25zdCBraW5kT2ZUZXN0ID0gKHR5cGUpID0+IHtcbiAgdHlwZSA9IHR5cGUudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuICh0aGluZykgPT4ga2luZE9mKHRoaW5nKSA9PT0gdHlwZVxufTtcblxuY29uc3QgdHlwZU9mVGVzdCA9IHR5cGUgPT4gdGhpbmcgPT4gdHlwZW9mIHRoaW5nID09PSB0eXBlO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3Qge2lzQXJyYXl9ID0gQXJyYXk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgdW5kZWZpbmVkXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNVbmRlZmluZWQgPSB0eXBlT2ZUZXN0KCd1bmRlZmluZWQnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0J1ZmZlcih2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gbnVsbCAmJiAhaXNVbmRlZmluZWQodmFsKSAmJiB2YWwuY29uc3RydWN0b3IgIT09IG51bGwgJiYgIWlzVW5kZWZpbmVkKHZhbC5jb25zdHJ1Y3RvcilcbiAgICAmJiBpc0Z1bmN0aW9uKHZhbC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcikgJiYgdmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyKHZhbCk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNBcnJheUJ1ZmZlciA9IGtpbmRPZlRlc3QoJ0FycmF5QnVmZmVyJyk7XG5cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXJWaWV3KHZhbCkge1xuICBsZXQgcmVzdWx0O1xuICBpZiAoKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcpICYmIChBcnJheUJ1ZmZlci5pc1ZpZXcpKSB7XG4gICAgcmVzdWx0ID0gQXJyYXlCdWZmZXIuaXNWaWV3KHZhbCk7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gKHZhbCkgJiYgKHZhbC5idWZmZXIpICYmIChpc0FycmF5QnVmZmVyKHZhbC5idWZmZXIpKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyaW5nXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmluZywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzU3RyaW5nID0gdHlwZU9mVGVzdCgnc3RyaW5nJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZ1bmN0aW9uLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGdW5jdGlvbiA9IHR5cGVPZlRlc3QoJ2Z1bmN0aW9uJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBOdW1iZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgTnVtYmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNOdW1iZXIgPSB0eXBlT2ZUZXN0KCdudW1iZXInKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNPYmplY3QgPSAodGhpbmcpID0+IHRoaW5nICE9PSBudWxsICYmIHR5cGVvZiB0aGluZyA9PT0gJ29iamVjdCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCb29sZWFuXG4gKlxuICogQHBhcmFtIHsqfSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCb29sZWFuLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNCb29sZWFuID0gdGhpbmcgPT4gdGhpbmcgPT09IHRydWUgfHwgdGhpbmcgPT09IGZhbHNlO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgcGxhaW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHBsYWluIE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzUGxhaW5PYmplY3QgPSAodmFsKSA9PiB7XG4gIGlmIChraW5kT2YodmFsKSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBwcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZih2YWwpO1xuICByZXR1cm4gKHByb3RvdHlwZSA9PT0gbnVsbCB8fCBwcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGUgfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvdHlwZSkgPT09IG51bGwpICYmICEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIHZhbCkgJiYgIShTeW1ib2wuaXRlcmF0b3IgaW4gdmFsKTtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBEYXRlXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIERhdGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0RhdGUgPSBraW5kT2ZUZXN0KCdEYXRlJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGaWxlXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZpbGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0ZpbGUgPSBraW5kT2ZUZXN0KCdGaWxlJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCbG9iXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJsb2IsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Jsb2IgPSBraW5kT2ZUZXN0KCdCbG9iJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGaWxlTGlzdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGaWxlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGaWxlTGlzdCA9IGtpbmRPZlRlc3QoJ0ZpbGVMaXN0Jyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJlYW1cbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyZWFtLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNTdHJlYW0gPSAodmFsKSA9PiBpc09iamVjdCh2YWwpICYmIGlzRnVuY3Rpb24odmFsLnBpcGUpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRm9ybURhdGFcbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gRm9ybURhdGEsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Zvcm1EYXRhID0gKHRoaW5nKSA9PiB7XG4gIGxldCBraW5kO1xuICByZXR1cm4gdGhpbmcgJiYgKFxuICAgICh0eXBlb2YgRm9ybURhdGEgPT09ICdmdW5jdGlvbicgJiYgdGhpbmcgaW5zdGFuY2VvZiBGb3JtRGF0YSkgfHwgKFxuICAgICAgaXNGdW5jdGlvbih0aGluZy5hcHBlbmQpICYmIChcbiAgICAgICAgKGtpbmQgPSBraW5kT2YodGhpbmcpKSA9PT0gJ2Zvcm1kYXRhJyB8fFxuICAgICAgICAvLyBkZXRlY3QgZm9ybS1kYXRhIGluc3RhbmNlXG4gICAgICAgIChraW5kID09PSAnb2JqZWN0JyAmJiBpc0Z1bmN0aW9uKHRoaW5nLnRvU3RyaW5nKSAmJiB0aGluZy50b1N0cmluZygpID09PSAnW29iamVjdCBGb3JtRGF0YV0nKVxuICAgICAgKVxuICAgIClcbiAgKVxufTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzVVJMU2VhcmNoUGFyYW1zID0ga2luZE9mVGVzdCgnVVJMU2VhcmNoUGFyYW1zJyk7XG5cbmNvbnN0IFtpc1JlYWRhYmxlU3RyZWFtLCBpc1JlcXVlc3QsIGlzUmVzcG9uc2UsIGlzSGVhZGVyc10gPSBbJ1JlYWRhYmxlU3RyZWFtJywgJ1JlcXVlc3QnLCAnUmVzcG9uc2UnLCAnSGVhZGVycyddLm1hcChraW5kT2ZUZXN0KTtcblxuLyoqXG4gKiBUcmltIGV4Y2VzcyB3aGl0ZXNwYWNlIG9mZiB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyIFRoZSBTdHJpbmcgdG8gdHJpbVxuICpcbiAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBTdHJpbmcgZnJlZWQgb2YgZXhjZXNzIHdoaXRlc3BhY2VcbiAqL1xuY29uc3QgdHJpbSA9IChzdHIpID0+IHN0ci50cmltID9cbiAgc3RyLnRyaW0oKSA6IHN0ci5yZXBsYWNlKC9eW1xcc1xcdUZFRkZcXHhBMF0rfFtcXHNcXHVGRUZGXFx4QTBdKyQvZywgJycpO1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBhbiBBcnJheSBvciBhbiBPYmplY3QgaW52b2tpbmcgYSBmdW5jdGlvbiBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmIGBvYmpgIGlzIGFuIEFycmF5IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwgaW5kZXgsIGFuZCBjb21wbGV0ZSBhcnJheSBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmICdvYmonIGlzIGFuIE9iamVjdCBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGtleSwgYW5kIGNvbXBsZXRlIG9iamVjdCBmb3IgZWFjaCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdHxBcnJheX0gb2JqIFRoZSBvYmplY3QgdG8gaXRlcmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGNhbGxiYWNrIHRvIGludm9rZSBmb3IgZWFjaCBpdGVtXG4gKlxuICogQHBhcmFtIHtCb29sZWFufSBbYWxsT3duS2V5cyA9IGZhbHNlXVxuICogQHJldHVybnMge2FueX1cbiAqL1xuZnVuY3Rpb24gZm9yRWFjaChvYmosIGZuLCB7YWxsT3duS2V5cyA9IGZhbHNlfSA9IHt9KSB7XG4gIC8vIERvbid0IGJvdGhlciBpZiBubyB2YWx1ZSBwcm92aWRlZFxuICBpZiAob2JqID09PSBudWxsIHx8IHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IGk7XG4gIGxldCBsO1xuXG4gIC8vIEZvcmNlIGFuIGFycmF5IGlmIG5vdCBhbHJlYWR5IHNvbWV0aGluZyBpdGVyYWJsZVxuICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICBvYmogPSBbb2JqXTtcbiAgfVxuXG4gIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgYXJyYXkgdmFsdWVzXG4gICAgZm9yIChpID0gMCwgbCA9IG9iai5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2ldLCBpLCBvYmopO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgb2JqZWN0IGtleXNcbiAgICBjb25zdCBrZXlzID0gYWxsT3duS2V5cyA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikgOiBPYmplY3Qua2V5cyhvYmopO1xuICAgIGNvbnN0IGxlbiA9IGtleXMubGVuZ3RoO1xuICAgIGxldCBrZXk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICBmbi5jYWxsKG51bGwsIG9ialtrZXldLCBrZXksIG9iaik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRLZXkob2JqLCBrZXkpIHtcbiAga2V5ID0ga2V5LnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICBsZXQgaSA9IGtleXMubGVuZ3RoO1xuICBsZXQgX2tleTtcbiAgd2hpbGUgKGktLSA+IDApIHtcbiAgICBfa2V5ID0ga2V5c1tpXTtcbiAgICBpZiAoa2V5ID09PSBfa2V5LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIHJldHVybiBfa2V5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuY29uc3QgX2dsb2JhbCA9ICgoKSA9PiB7XG4gIC8qZXNsaW50IG5vLXVuZGVmOjAqL1xuICBpZiAodHlwZW9mIGdsb2JhbFRoaXMgIT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBnbG9iYWxUaGlzO1xuICByZXR1cm4gdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDogKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogZ2xvYmFsKVxufSkoKTtcblxuY29uc3QgaXNDb250ZXh0RGVmaW5lZCA9IChjb250ZXh0KSA9PiAhaXNVbmRlZmluZWQoY29udGV4dCkgJiYgY29udGV4dCAhPT0gX2dsb2JhbDtcblxuLyoqXG4gKiBBY2NlcHRzIHZhcmFyZ3MgZXhwZWN0aW5nIGVhY2ggYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0LCB0aGVuXG4gKiBpbW11dGFibHkgbWVyZ2VzIHRoZSBwcm9wZXJ0aWVzIG9mIGVhY2ggb2JqZWN0IGFuZCByZXR1cm5zIHJlc3VsdC5cbiAqXG4gKiBXaGVuIG11bHRpcGxlIG9iamVjdHMgY29udGFpbiB0aGUgc2FtZSBrZXkgdGhlIGxhdGVyIG9iamVjdCBpblxuICogdGhlIGFyZ3VtZW50cyBsaXN0IHdpbGwgdGFrZSBwcmVjZWRlbmNlLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciByZXN1bHQgPSBtZXJnZSh7Zm9vOiAxMjN9LCB7Zm9vOiA0NTZ9KTtcbiAqIGNvbnNvbGUubG9nKHJlc3VsdC5mb28pOyAvLyBvdXRwdXRzIDQ1NlxuICogYGBgXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iajEgT2JqZWN0IHRvIG1lcmdlXG4gKlxuICogQHJldHVybnMge09iamVjdH0gUmVzdWx0IG9mIGFsbCBtZXJnZSBwcm9wZXJ0aWVzXG4gKi9cbmZ1bmN0aW9uIG1lcmdlKC8qIG9iajEsIG9iajIsIG9iajMsIC4uLiAqLykge1xuICBjb25zdCB7Y2FzZWxlc3N9ID0gaXNDb250ZXh0RGVmaW5lZCh0aGlzKSAmJiB0aGlzIHx8IHt9O1xuICBjb25zdCByZXN1bHQgPSB7fTtcbiAgY29uc3QgYXNzaWduVmFsdWUgPSAodmFsLCBrZXkpID0+IHtcbiAgICBjb25zdCB0YXJnZXRLZXkgPSBjYXNlbGVzcyAmJiBmaW5kS2V5KHJlc3VsdCwga2V5KSB8fCBrZXk7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QocmVzdWx0W3RhcmdldEtleV0pICYmIGlzUGxhaW5PYmplY3QodmFsKSkge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSBtZXJnZShyZXN1bHRbdGFyZ2V0S2V5XSwgdmFsKTtcbiAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QodmFsKSkge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSBtZXJnZSh7fSwgdmFsKTtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkodmFsKSkge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSB2YWwuc2xpY2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSB2YWw7XG4gICAgfVxuICB9O1xuXG4gIGZvciAobGV0IGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGFyZ3VtZW50c1tpXSAmJiBmb3JFYWNoKGFyZ3VtZW50c1tpXSwgYXNzaWduVmFsdWUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRXh0ZW5kcyBvYmplY3QgYSBieSBtdXRhYmx5IGFkZGluZyB0byBpdCB0aGUgcHJvcGVydGllcyBvZiBvYmplY3QgYi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYSBUaGUgb2JqZWN0IHRvIGJlIGV4dGVuZGVkXG4gKiBAcGFyYW0ge09iamVjdH0gYiBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tXG4gKiBAcGFyYW0ge09iamVjdH0gdGhpc0FyZyBUaGUgb2JqZWN0IHRvIGJpbmQgZnVuY3Rpb24gdG9cbiAqXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFthbGxPd25LZXlzXVxuICogQHJldHVybnMge09iamVjdH0gVGhlIHJlc3VsdGluZyB2YWx1ZSBvZiBvYmplY3QgYVxuICovXG5jb25zdCBleHRlbmQgPSAoYSwgYiwgdGhpc0FyZywge2FsbE93bktleXN9PSB7fSkgPT4ge1xuICBmb3JFYWNoKGIsICh2YWwsIGtleSkgPT4ge1xuICAgIGlmICh0aGlzQXJnICYmIGlzRnVuY3Rpb24odmFsKSkge1xuICAgICAgYVtrZXldID0gYmluZCh2YWwsIHRoaXNBcmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhW2tleV0gPSB2YWw7XG4gICAgfVxuICB9LCB7YWxsT3duS2V5c30pO1xuICByZXR1cm4gYTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGJ5dGUgb3JkZXIgbWFya2VyLiBUaGlzIGNhdGNoZXMgRUYgQkIgQkYgKHRoZSBVVEYtOCBCT00pXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQgd2l0aCBCT01cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBjb250ZW50IHZhbHVlIHdpdGhvdXQgQk9NXG4gKi9cbmNvbnN0IHN0cmlwQk9NID0gKGNvbnRlbnQpID0+IHtcbiAgaWYgKGNvbnRlbnQuY2hhckNvZGVBdCgwKSA9PT0gMHhGRUZGKSB7XG4gICAgY29udGVudCA9IGNvbnRlbnQuc2xpY2UoMSk7XG4gIH1cbiAgcmV0dXJuIGNvbnRlbnQ7XG59O1xuXG4vKipcbiAqIEluaGVyaXQgdGhlIHByb3RvdHlwZSBtZXRob2RzIGZyb20gb25lIGNvbnN0cnVjdG9yIGludG8gYW5vdGhlclxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHN1cGVyQ29uc3RydWN0b3JcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcHJvcHNdXG4gKiBAcGFyYW0ge29iamVjdH0gW2Rlc2NyaXB0b3JzXVxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5jb25zdCBpbmhlcml0cyA9IChjb25zdHJ1Y3Rvciwgc3VwZXJDb25zdHJ1Y3RvciwgcHJvcHMsIGRlc2NyaXB0b3JzKSA9PiB7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIGRlc2NyaXB0b3JzKTtcbiAgY29uc3RydWN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY29uc3RydWN0b3I7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb25zdHJ1Y3RvciwgJ3N1cGVyJywge1xuICAgIHZhbHVlOiBzdXBlckNvbnN0cnVjdG9yLnByb3RvdHlwZVxuICB9KTtcbiAgcHJvcHMgJiYgT2JqZWN0LmFzc2lnbihjb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3BzKTtcbn07XG5cbi8qKlxuICogUmVzb2x2ZSBvYmplY3Qgd2l0aCBkZWVwIHByb3RvdHlwZSBjaGFpbiB0byBhIGZsYXQgb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlT2JqIHNvdXJjZSBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBbZGVzdE9ial1cbiAqIEBwYXJhbSB7RnVuY3Rpb258Qm9vbGVhbn0gW2ZpbHRlcl1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcm9wRmlsdGVyXVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKi9cbmNvbnN0IHRvRmxhdE9iamVjdCA9IChzb3VyY2VPYmosIGRlc3RPYmosIGZpbHRlciwgcHJvcEZpbHRlcikgPT4ge1xuICBsZXQgcHJvcHM7XG4gIGxldCBpO1xuICBsZXQgcHJvcDtcbiAgY29uc3QgbWVyZ2VkID0ge307XG5cbiAgZGVzdE9iaiA9IGRlc3RPYmogfHwge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lcS1udWxsLGVxZXFlcVxuICBpZiAoc291cmNlT2JqID09IG51bGwpIHJldHVybiBkZXN0T2JqO1xuXG4gIGRvIHtcbiAgICBwcm9wcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZU9iaik7XG4gICAgaSA9IHByb3BzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tID4gMCkge1xuICAgICAgcHJvcCA9IHByb3BzW2ldO1xuICAgICAgaWYgKCghcHJvcEZpbHRlciB8fCBwcm9wRmlsdGVyKHByb3AsIHNvdXJjZU9iaiwgZGVzdE9iaikpICYmICFtZXJnZWRbcHJvcF0pIHtcbiAgICAgICAgZGVzdE9ialtwcm9wXSA9IHNvdXJjZU9ialtwcm9wXTtcbiAgICAgICAgbWVyZ2VkW3Byb3BdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgc291cmNlT2JqID0gZmlsdGVyICE9PSBmYWxzZSAmJiBnZXRQcm90b3R5cGVPZihzb3VyY2VPYmopO1xuICB9IHdoaWxlIChzb3VyY2VPYmogJiYgKCFmaWx0ZXIgfHwgZmlsdGVyKHNvdXJjZU9iaiwgZGVzdE9iaikpICYmIHNvdXJjZU9iaiAhPT0gT2JqZWN0LnByb3RvdHlwZSk7XG5cbiAgcmV0dXJuIGRlc3RPYmo7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciBhIHN0cmluZyBlbmRzIHdpdGggdGhlIGNoYXJhY3RlcnMgb2YgYSBzcGVjaWZpZWQgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHBhcmFtIHtTdHJpbmd9IHNlYXJjaFN0cmluZ1xuICogQHBhcmFtIHtOdW1iZXJ9IFtwb3NpdGlvbj0gMF1cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuY29uc3QgZW5kc1dpdGggPSAoc3RyLCBzZWFyY2hTdHJpbmcsIHBvc2l0aW9uKSA9PiB7XG4gIHN0ciA9IFN0cmluZyhzdHIpO1xuICBpZiAocG9zaXRpb24gPT09IHVuZGVmaW5lZCB8fCBwb3NpdGlvbiA+IHN0ci5sZW5ndGgpIHtcbiAgICBwb3NpdGlvbiA9IHN0ci5sZW5ndGg7XG4gIH1cbiAgcG9zaXRpb24gLT0gc2VhcmNoU3RyaW5nLmxlbmd0aDtcbiAgY29uc3QgbGFzdEluZGV4ID0gc3RyLmluZGV4T2Yoc2VhcmNoU3RyaW5nLCBwb3NpdGlvbik7XG4gIHJldHVybiBsYXN0SW5kZXggIT09IC0xICYmIGxhc3RJbmRleCA9PT0gcG9zaXRpb247XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyBuZXcgYXJyYXkgZnJvbSBhcnJheSBsaWtlIG9iamVjdCBvciBudWxsIGlmIGZhaWxlZFxuICpcbiAqIEBwYXJhbSB7Kn0gW3RoaW5nXVxuICpcbiAqIEByZXR1cm5zIHs/QXJyYXl9XG4gKi9cbmNvbnN0IHRvQXJyYXkgPSAodGhpbmcpID0+IHtcbiAgaWYgKCF0aGluZykgcmV0dXJuIG51bGw7XG4gIGlmIChpc0FycmF5KHRoaW5nKSkgcmV0dXJuIHRoaW5nO1xuICBsZXQgaSA9IHRoaW5nLmxlbmd0aDtcbiAgaWYgKCFpc051bWJlcihpKSkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGFyciA9IG5ldyBBcnJheShpKTtcbiAgd2hpbGUgKGktLSA+IDApIHtcbiAgICBhcnJbaV0gPSB0aGluZ1tpXTtcbiAgfVxuICByZXR1cm4gYXJyO1xufTtcblxuLyoqXG4gKiBDaGVja2luZyBpZiB0aGUgVWludDhBcnJheSBleGlzdHMgYW5kIGlmIGl0IGRvZXMsIGl0IHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiB0aGVcbiAqIHRoaW5nIHBhc3NlZCBpbiBpcyBhbiBpbnN0YW5jZSBvZiBVaW50OEFycmF5XG4gKlxuICogQHBhcmFtIHtUeXBlZEFycmF5fVxuICpcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbmNvbnN0IGlzVHlwZWRBcnJheSA9IChUeXBlZEFycmF5ID0+IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuIHRoaW5nID0+IHtcbiAgICByZXR1cm4gVHlwZWRBcnJheSAmJiB0aGluZyBpbnN0YW5jZW9mIFR5cGVkQXJyYXk7XG4gIH07XG59KSh0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2V0UHJvdG90eXBlT2YoVWludDhBcnJheSkpO1xuXG4vKipcbiAqIEZvciBlYWNoIGVudHJ5IGluIHRoZSBvYmplY3QsIGNhbGwgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGtleSBhbmQgdmFsdWUuXG4gKlxuICogQHBhcmFtIHtPYmplY3Q8YW55LCBhbnk+fSBvYmogLSBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIC0gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggZW50cnkuXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmNvbnN0IGZvckVhY2hFbnRyeSA9IChvYmosIGZuKSA9PiB7XG4gIGNvbnN0IGdlbmVyYXRvciA9IG9iaiAmJiBvYmpbU3ltYm9sLml0ZXJhdG9yXTtcblxuICBjb25zdCBpdGVyYXRvciA9IGdlbmVyYXRvci5jYWxsKG9iaik7XG5cbiAgbGV0IHJlc3VsdDtcblxuICB3aGlsZSAoKHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKSkgJiYgIXJlc3VsdC5kb25lKSB7XG4gICAgY29uc3QgcGFpciA9IHJlc3VsdC52YWx1ZTtcbiAgICBmbi5jYWxsKG9iaiwgcGFpclswXSwgcGFpclsxXSk7XG4gIH1cbn07XG5cbi8qKlxuICogSXQgdGFrZXMgYSByZWd1bGFyIGV4cHJlc3Npb24gYW5kIGEgc3RyaW5nLCBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiBhbGwgdGhlIG1hdGNoZXNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVnRXhwIC0gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCBhZ2FpbnN0LlxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciAtIFRoZSBzdHJpbmcgdG8gc2VhcmNoLlxuICpcbiAqIEByZXR1cm5zIHtBcnJheTxib29sZWFuPn1cbiAqL1xuY29uc3QgbWF0Y2hBbGwgPSAocmVnRXhwLCBzdHIpID0+IHtcbiAgbGV0IG1hdGNoZXM7XG4gIGNvbnN0IGFyciA9IFtdO1xuXG4gIHdoaWxlICgobWF0Y2hlcyA9IHJlZ0V4cC5leGVjKHN0cikpICE9PSBudWxsKSB7XG4gICAgYXJyLnB1c2gobWF0Y2hlcyk7XG4gIH1cblxuICByZXR1cm4gYXJyO1xufTtcblxuLyogQ2hlY2tpbmcgaWYgdGhlIGtpbmRPZlRlc3QgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gcGFzc2VkIGFuIEhUTUxGb3JtRWxlbWVudC4gKi9cbmNvbnN0IGlzSFRNTEZvcm0gPSBraW5kT2ZUZXN0KCdIVE1MRm9ybUVsZW1lbnQnKTtcblxuY29uc3QgdG9DYW1lbENhc2UgPSBzdHIgPT4ge1xuICByZXR1cm4gc3RyLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWy1fXFxzXShbYS16XFxkXSkoXFx3KikvZyxcbiAgICBmdW5jdGlvbiByZXBsYWNlcihtLCBwMSwgcDIpIHtcbiAgICAgIHJldHVybiBwMS50b1VwcGVyQ2FzZSgpICsgcDI7XG4gICAgfVxuICApO1xufTtcblxuLyogQ3JlYXRpbmcgYSBmdW5jdGlvbiB0aGF0IHdpbGwgY2hlY2sgaWYgYW4gb2JqZWN0IGhhcyBhIHByb3BlcnR5LiAqL1xuY29uc3QgaGFzT3duUHJvcGVydHkgPSAoKHtoYXNPd25Qcm9wZXJ0eX0pID0+IChvYmosIHByb3ApID0+IGhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkoT2JqZWN0LnByb3RvdHlwZSk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBSZWdFeHAgb2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFJlZ0V4cCBvYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1JlZ0V4cCA9IGtpbmRPZlRlc3QoJ1JlZ0V4cCcpO1xuXG5jb25zdCByZWR1Y2VEZXNjcmlwdG9ycyA9IChvYmosIHJlZHVjZXIpID0+IHtcbiAgY29uc3QgZGVzY3JpcHRvcnMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvYmopO1xuICBjb25zdCByZWR1Y2VkRGVzY3JpcHRvcnMgPSB7fTtcblxuICBmb3JFYWNoKGRlc2NyaXB0b3JzLCAoZGVzY3JpcHRvciwgbmFtZSkgPT4ge1xuICAgIGxldCByZXQ7XG4gICAgaWYgKChyZXQgPSByZWR1Y2VyKGRlc2NyaXB0b3IsIG5hbWUsIG9iaikpICE9PSBmYWxzZSkge1xuICAgICAgcmVkdWNlZERlc2NyaXB0b3JzW25hbWVdID0gcmV0IHx8IGRlc2NyaXB0b3I7XG4gICAgfVxuICB9KTtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhvYmosIHJlZHVjZWREZXNjcmlwdG9ycyk7XG59O1xuXG4vKipcbiAqIE1ha2VzIGFsbCBtZXRob2RzIHJlYWQtb25seVxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICovXG5cbmNvbnN0IGZyZWV6ZU1ldGhvZHMgPSAob2JqKSA9PiB7XG4gIHJlZHVjZURlc2NyaXB0b3JzKG9iaiwgKGRlc2NyaXB0b3IsIG5hbWUpID0+IHtcbiAgICAvLyBza2lwIHJlc3RyaWN0ZWQgcHJvcHMgaW4gc3RyaWN0IG1vZGVcbiAgICBpZiAoaXNGdW5jdGlvbihvYmopICYmIFsnYXJndW1lbnRzJywgJ2NhbGxlcicsICdjYWxsZWUnXS5pbmRleE9mKG5hbWUpICE9PSAtMSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gb2JqW25hbWVdO1xuXG4gICAgaWYgKCFpc0Z1bmN0aW9uKHZhbHVlKSkgcmV0dXJuO1xuXG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZmFsc2U7XG5cbiAgICBpZiAoJ3dyaXRhYmxlJyBpbiBkZXNjcmlwdG9yKSB7XG4gICAgICBkZXNjcmlwdG9yLndyaXRhYmxlID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFkZXNjcmlwdG9yLnNldCkge1xuICAgICAgZGVzY3JpcHRvci5zZXQgPSAoKSA9PiB7XG4gICAgICAgIHRocm93IEVycm9yKCdDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCBcXCcnICsgbmFtZSArICdcXCcnKTtcbiAgICAgIH07XG4gICAgfVxuICB9KTtcbn07XG5cbmNvbnN0IHRvT2JqZWN0U2V0ID0gKGFycmF5T3JTdHJpbmcsIGRlbGltaXRlcikgPT4ge1xuICBjb25zdCBvYmogPSB7fTtcblxuICBjb25zdCBkZWZpbmUgPSAoYXJyKSA9PiB7XG4gICAgYXJyLmZvckVhY2godmFsdWUgPT4ge1xuICAgICAgb2JqW3ZhbHVlXSA9IHRydWU7XG4gICAgfSk7XG4gIH07XG5cbiAgaXNBcnJheShhcnJheU9yU3RyaW5nKSA/IGRlZmluZShhcnJheU9yU3RyaW5nKSA6IGRlZmluZShTdHJpbmcoYXJyYXlPclN0cmluZykuc3BsaXQoZGVsaW1pdGVyKSk7XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fTtcblxuY29uc3QgdG9GaW5pdGVOdW1iZXIgPSAodmFsdWUsIGRlZmF1bHRWYWx1ZSkgPT4ge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBOdW1iZXIuaXNGaW5pdGUodmFsdWUgPSArdmFsdWUpID8gdmFsdWUgOiBkZWZhdWx0VmFsdWU7XG59O1xuXG5jb25zdCBBTFBIQSA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eic7XG5cbmNvbnN0IERJR0lUID0gJzAxMjM0NTY3ODknO1xuXG5jb25zdCBBTFBIQUJFVCA9IHtcbiAgRElHSVQsXG4gIEFMUEhBLFxuICBBTFBIQV9ESUdJVDogQUxQSEEgKyBBTFBIQS50b1VwcGVyQ2FzZSgpICsgRElHSVRcbn07XG5cbmNvbnN0IGdlbmVyYXRlU3RyaW5nID0gKHNpemUgPSAxNiwgYWxwaGFiZXQgPSBBTFBIQUJFVC5BTFBIQV9ESUdJVCkgPT4ge1xuICBsZXQgc3RyID0gJyc7XG4gIGNvbnN0IHtsZW5ndGh9ID0gYWxwaGFiZXQ7XG4gIHdoaWxlIChzaXplLS0pIHtcbiAgICBzdHIgKz0gYWxwaGFiZXRbTWF0aC5yYW5kb20oKSAqIGxlbmd0aHwwXTtcbiAgfVxuXG4gIHJldHVybiBzdHI7XG59O1xuXG4vKipcbiAqIElmIHRoZSB0aGluZyBpcyBhIEZvcm1EYXRhIG9iamVjdCwgcmV0dXJuIHRydWUsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXG4gKlxuICogQHBhcmFtIHt1bmtub3dufSB0aGluZyAtIFRoZSB0aGluZyB0byBjaGVjay5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNTcGVjQ29tcGxpYW50Rm9ybSh0aGluZykge1xuICByZXR1cm4gISEodGhpbmcgJiYgaXNGdW5jdGlvbih0aGluZy5hcHBlbmQpICYmIHRoaW5nW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdGb3JtRGF0YScgJiYgdGhpbmdbU3ltYm9sLml0ZXJhdG9yXSk7XG59XG5cbmNvbnN0IHRvSlNPTk9iamVjdCA9IChvYmopID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgQXJyYXkoMTApO1xuXG4gIGNvbnN0IHZpc2l0ID0gKHNvdXJjZSwgaSkgPT4ge1xuXG4gICAgaWYgKGlzT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIGlmIChzdGFjay5pbmRleE9mKHNvdXJjZSkgPj0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmKCEoJ3RvSlNPTicgaW4gc291cmNlKSkge1xuICAgICAgICBzdGFja1tpXSA9IHNvdXJjZTtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gaXNBcnJheShzb3VyY2UpID8gW10gOiB7fTtcblxuICAgICAgICBmb3JFYWNoKHNvdXJjZSwgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICBjb25zdCByZWR1Y2VkVmFsdWUgPSB2aXNpdCh2YWx1ZSwgaSArIDEpO1xuICAgICAgICAgICFpc1VuZGVmaW5lZChyZWR1Y2VkVmFsdWUpICYmICh0YXJnZXRba2V5XSA9IHJlZHVjZWRWYWx1ZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHN0YWNrW2ldID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfTtcblxuICByZXR1cm4gdmlzaXQob2JqLCAwKTtcbn07XG5cbmNvbnN0IGlzQXN5bmNGbiA9IGtpbmRPZlRlc3QoJ0FzeW5jRnVuY3Rpb24nKTtcblxuY29uc3QgaXNUaGVuYWJsZSA9ICh0aGluZykgPT5cbiAgdGhpbmcgJiYgKGlzT2JqZWN0KHRoaW5nKSB8fCBpc0Z1bmN0aW9uKHRoaW5nKSkgJiYgaXNGdW5jdGlvbih0aGluZy50aGVuKSAmJiBpc0Z1bmN0aW9uKHRoaW5nLmNhdGNoKTtcblxuLy8gb3JpZ2luYWwgY29kZVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL0RpZ2l0YWxCcmFpbkpTL0F4aW9zUHJvbWlzZS9ibG9iLzE2ZGVhYjEzNzEwZWMwOTc3OTkyMjEzMWYzZmE1OTU0MzIwZjgzYWIvbGliL3V0aWxzLmpzI0wxMS1MMzRcblxuY29uc3QgX3NldEltbWVkaWF0ZSA9ICgoc2V0SW1tZWRpYXRlU3VwcG9ydGVkLCBwb3N0TWVzc2FnZVN1cHBvcnRlZCkgPT4ge1xuICBpZiAoc2V0SW1tZWRpYXRlU3VwcG9ydGVkKSB7XG4gICAgcmV0dXJuIHNldEltbWVkaWF0ZTtcbiAgfVxuXG4gIHJldHVybiBwb3N0TWVzc2FnZVN1cHBvcnRlZCA/ICgodG9rZW4sIGNhbGxiYWNrcykgPT4ge1xuICAgIF9nbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgKHtzb3VyY2UsIGRhdGF9KSA9PiB7XG4gICAgICBpZiAoc291cmNlID09PSBfZ2xvYmFsICYmIGRhdGEgPT09IHRva2VuKSB7XG4gICAgICAgIGNhbGxiYWNrcy5sZW5ndGggJiYgY2FsbGJhY2tzLnNoaWZ0KCkoKTtcbiAgICAgIH1cbiAgICB9LCBmYWxzZSk7XG5cbiAgICByZXR1cm4gKGNiKSA9PiB7XG4gICAgICBjYWxsYmFja3MucHVzaChjYik7XG4gICAgICBfZ2xvYmFsLnBvc3RNZXNzYWdlKHRva2VuLCBcIipcIik7XG4gICAgfVxuICB9KShgYXhpb3NAJHtNYXRoLnJhbmRvbSgpfWAsIFtdKSA6IChjYikgPT4gc2V0VGltZW91dChjYik7XG59KShcbiAgdHlwZW9mIHNldEltbWVkaWF0ZSA9PT0gJ2Z1bmN0aW9uJyxcbiAgaXNGdW5jdGlvbihfZ2xvYmFsLnBvc3RNZXNzYWdlKVxuKTtcblxuY29uc3QgYXNhcCA9IHR5cGVvZiBxdWV1ZU1pY3JvdGFzayAhPT0gJ3VuZGVmaW5lZCcgP1xuICBxdWV1ZU1pY3JvdGFzay5iaW5kKF9nbG9iYWwpIDogKCB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgcHJvY2Vzcy5uZXh0VGljayB8fCBfc2V0SW1tZWRpYXRlKTtcblxuLy8gKioqKioqKioqKioqKioqKioqKioqXG5cbnZhciB1dGlscyQxID0ge1xuICBpc0FycmF5LFxuICBpc0FycmF5QnVmZmVyLFxuICBpc0J1ZmZlcixcbiAgaXNGb3JtRGF0YSxcbiAgaXNBcnJheUJ1ZmZlclZpZXcsXG4gIGlzU3RyaW5nLFxuICBpc051bWJlcixcbiAgaXNCb29sZWFuLFxuICBpc09iamVjdCxcbiAgaXNQbGFpbk9iamVjdCxcbiAgaXNSZWFkYWJsZVN0cmVhbSxcbiAgaXNSZXF1ZXN0LFxuICBpc1Jlc3BvbnNlLFxuICBpc0hlYWRlcnMsXG4gIGlzVW5kZWZpbmVkLFxuICBpc0RhdGUsXG4gIGlzRmlsZSxcbiAgaXNCbG9iLFxuICBpc1JlZ0V4cCxcbiAgaXNGdW5jdGlvbixcbiAgaXNTdHJlYW0sXG4gIGlzVVJMU2VhcmNoUGFyYW1zLFxuICBpc1R5cGVkQXJyYXksXG4gIGlzRmlsZUxpc3QsXG4gIGZvckVhY2gsXG4gIG1lcmdlLFxuICBleHRlbmQsXG4gIHRyaW0sXG4gIHN0cmlwQk9NLFxuICBpbmhlcml0cyxcbiAgdG9GbGF0T2JqZWN0LFxuICBraW5kT2YsXG4gIGtpbmRPZlRlc3QsXG4gIGVuZHNXaXRoLFxuICB0b0FycmF5LFxuICBmb3JFYWNoRW50cnksXG4gIG1hdGNoQWxsLFxuICBpc0hUTUxGb3JtLFxuICBoYXNPd25Qcm9wZXJ0eSxcbiAgaGFzT3duUHJvcDogaGFzT3duUHJvcGVydHksIC8vIGFuIGFsaWFzIHRvIGF2b2lkIEVTTGludCBuby1wcm90b3R5cGUtYnVpbHRpbnMgZGV0ZWN0aW9uXG4gIHJlZHVjZURlc2NyaXB0b3JzLFxuICBmcmVlemVNZXRob2RzLFxuICB0b09iamVjdFNldCxcbiAgdG9DYW1lbENhc2UsXG4gIG5vb3AsXG4gIHRvRmluaXRlTnVtYmVyLFxuICBmaW5kS2V5LFxuICBnbG9iYWw6IF9nbG9iYWwsXG4gIGlzQ29udGV4dERlZmluZWQsXG4gIEFMUEhBQkVULFxuICBnZW5lcmF0ZVN0cmluZyxcbiAgaXNTcGVjQ29tcGxpYW50Rm9ybSxcbiAgdG9KU09OT2JqZWN0LFxuICBpc0FzeW5jRm4sXG4gIGlzVGhlbmFibGUsXG4gIHNldEltbWVkaWF0ZTogX3NldEltbWVkaWF0ZSxcbiAgYXNhcFxufTtcblxuLyoqXG4gKiBDcmVhdGUgYW4gRXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UsIGNvbmZpZywgZXJyb3IgY29kZSwgcmVxdWVzdCBhbmQgcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvZGVdIFRoZSBlcnJvciBjb2RlIChmb3IgZXhhbXBsZSwgJ0VDT05OQUJPUlRFRCcpLlxuICogQHBhcmFtIHtPYmplY3R9IFtjb25maWddIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge09iamVjdH0gW3JlcXVlc3RdIFRoZSByZXF1ZXN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXNwb25zZV0gVGhlIHJlc3BvbnNlLlxuICpcbiAqIEByZXR1cm5zIHtFcnJvcn0gVGhlIGNyZWF0ZWQgZXJyb3IuXG4gKi9cbmZ1bmN0aW9uIEF4aW9zRXJyb3IobWVzc2FnZSwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSkge1xuICBFcnJvci5jYWxsKHRoaXMpO1xuXG4gIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuc3RhY2sgPSAobmV3IEVycm9yKCkpLnN0YWNrO1xuICB9XG5cbiAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgdGhpcy5uYW1lID0gJ0F4aW9zRXJyb3InO1xuICBjb2RlICYmICh0aGlzLmNvZGUgPSBjb2RlKTtcbiAgY29uZmlnICYmICh0aGlzLmNvbmZpZyA9IGNvbmZpZyk7XG4gIHJlcXVlc3QgJiYgKHRoaXMucmVxdWVzdCA9IHJlcXVlc3QpO1xuICByZXNwb25zZSAmJiAodGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlKTtcbn1cblxudXRpbHMkMS5pbmhlcml0cyhBeGlvc0Vycm9yLCBFcnJvciwge1xuICB0b0pTT046IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gU3RhbmRhcmRcbiAgICAgIG1lc3NhZ2U6IHRoaXMubWVzc2FnZSxcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIC8vIE1pY3Jvc29mdFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICBudW1iZXI6IHRoaXMubnVtYmVyLFxuICAgICAgLy8gTW96aWxsYVxuICAgICAgZmlsZU5hbWU6IHRoaXMuZmlsZU5hbWUsXG4gICAgICBsaW5lTnVtYmVyOiB0aGlzLmxpbmVOdW1iZXIsXG4gICAgICBjb2x1bW5OdW1iZXI6IHRoaXMuY29sdW1uTnVtYmVyLFxuICAgICAgc3RhY2s6IHRoaXMuc3RhY2ssXG4gICAgICAvLyBBeGlvc1xuICAgICAgY29uZmlnOiB1dGlscyQxLnRvSlNPTk9iamVjdCh0aGlzLmNvbmZpZyksXG4gICAgICBjb2RlOiB0aGlzLmNvZGUsXG4gICAgICBzdGF0dXM6IHRoaXMucmVzcG9uc2UgJiYgdGhpcy5yZXNwb25zZS5zdGF0dXMgPyB0aGlzLnJlc3BvbnNlLnN0YXR1cyA6IG51bGxcbiAgICB9O1xuICB9XG59KTtcblxuY29uc3QgcHJvdG90eXBlJDEgPSBBeGlvc0Vycm9yLnByb3RvdHlwZTtcbmNvbnN0IGRlc2NyaXB0b3JzID0ge307XG5cbltcbiAgJ0VSUl9CQURfT1BUSU9OX1ZBTFVFJyxcbiAgJ0VSUl9CQURfT1BUSU9OJyxcbiAgJ0VDT05OQUJPUlRFRCcsXG4gICdFVElNRURPVVQnLFxuICAnRVJSX05FVFdPUksnLFxuICAnRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUycsXG4gICdFUlJfREVQUkVDQVRFRCcsXG4gICdFUlJfQkFEX1JFU1BPTlNFJyxcbiAgJ0VSUl9CQURfUkVRVUVTVCcsXG4gICdFUlJfQ0FOQ0VMRUQnLFxuICAnRVJSX05PVF9TVVBQT1JUJyxcbiAgJ0VSUl9JTlZBTElEX1VSTCdcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5dLmZvckVhY2goY29kZSA9PiB7XG4gIGRlc2NyaXB0b3JzW2NvZGVdID0ge3ZhbHVlOiBjb2RlfTtcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBeGlvc0Vycm9yLCBkZXNjcmlwdG9ycyk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG90eXBlJDEsICdpc0F4aW9zRXJyb3InLCB7dmFsdWU6IHRydWV9KTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbkF4aW9zRXJyb3IuZnJvbSA9IChlcnJvciwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSwgY3VzdG9tUHJvcHMpID0+IHtcbiAgY29uc3QgYXhpb3NFcnJvciA9IE9iamVjdC5jcmVhdGUocHJvdG90eXBlJDEpO1xuXG4gIHV0aWxzJDEudG9GbGF0T2JqZWN0KGVycm9yLCBheGlvc0Vycm9yLCBmdW5jdGlvbiBmaWx0ZXIob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAhPT0gRXJyb3IucHJvdG90eXBlO1xuICB9LCBwcm9wID0+IHtcbiAgICByZXR1cm4gcHJvcCAhPT0gJ2lzQXhpb3NFcnJvcic7XG4gIH0pO1xuXG4gIEF4aW9zRXJyb3IuY2FsbChheGlvc0Vycm9yLCBlcnJvci5tZXNzYWdlLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlKTtcblxuICBheGlvc0Vycm9yLmNhdXNlID0gZXJyb3I7XG5cbiAgYXhpb3NFcnJvci5uYW1lID0gZXJyb3IubmFtZTtcblxuICBjdXN0b21Qcm9wcyAmJiBPYmplY3QuYXNzaWduKGF4aW9zRXJyb3IsIGN1c3RvbVByb3BzKTtcblxuICByZXR1cm4gYXhpb3NFcnJvcjtcbn07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzdHJpY3RcbnZhciBodHRwQWRhcHRlciA9IG51bGw7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgZ2l2ZW4gdGhpbmcgaXMgYSBhcnJheSBvciBqcyBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRoaW5nIC0gVGhlIG9iamVjdCBvciBhcnJheSB0byBiZSB2aXNpdGVkLlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc1Zpc2l0YWJsZSh0aGluZykge1xuICByZXR1cm4gdXRpbHMkMS5pc1BsYWluT2JqZWN0KHRoaW5nKSB8fCB1dGlscyQxLmlzQXJyYXkodGhpbmcpO1xufVxuXG4vKipcbiAqIEl0IHJlbW92ZXMgdGhlIGJyYWNrZXRzIGZyb20gdGhlIGVuZCBvZiBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBwYXJhbWV0ZXIuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gdGhlIGtleSB3aXRob3V0IHRoZSBicmFja2V0cy5cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQnJhY2tldHMoa2V5KSB7XG4gIHJldHVybiB1dGlscyQxLmVuZHNXaXRoKGtleSwgJ1tdJykgPyBrZXkuc2xpY2UoMCwgLTIpIDoga2V5O1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgcGF0aCwgYSBrZXksIGFuZCBhIGJvb2xlYW4sIGFuZCByZXR1cm5zIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBUaGUgcGF0aCB0byB0aGUgY3VycmVudCBrZXkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgY3VycmVudCBvYmplY3QgYmVpbmcgaXRlcmF0ZWQgb3Zlci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkb3RzIC0gSWYgdHJ1ZSwgdGhlIGtleSB3aWxsIGJlIHJlbmRlcmVkIHdpdGggZG90cyBpbnN0ZWFkIG9mIGJyYWNrZXRzLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBwYXRoIHRvIHRoZSBjdXJyZW50IGtleS5cbiAqL1xuZnVuY3Rpb24gcmVuZGVyS2V5KHBhdGgsIGtleSwgZG90cykge1xuICBpZiAoIXBhdGgpIHJldHVybiBrZXk7XG4gIHJldHVybiBwYXRoLmNvbmNhdChrZXkpLm1hcChmdW5jdGlvbiBlYWNoKHRva2VuLCBpKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgdG9rZW4gPSByZW1vdmVCcmFja2V0cyh0b2tlbik7XG4gICAgcmV0dXJuICFkb3RzICYmIGkgPyAnWycgKyB0b2tlbiArICddJyA6IHRva2VuO1xuICB9KS5qb2luKGRvdHMgPyAnLicgOiAnJyk7XG59XG5cbi8qKlxuICogSWYgdGhlIGFycmF5IGlzIGFuIGFycmF5IGFuZCBub25lIG9mIGl0cyBlbGVtZW50cyBhcmUgdmlzaXRhYmxlLCB0aGVuIGl0J3MgYSBmbGF0IGFycmF5LlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gYXJyIC0gVGhlIGFycmF5IHRvIGNoZWNrXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzRmxhdEFycmF5KGFycikge1xuICByZXR1cm4gdXRpbHMkMS5pc0FycmF5KGFycikgJiYgIWFyci5zb21lKGlzVmlzaXRhYmxlKTtcbn1cblxuY29uc3QgcHJlZGljYXRlcyA9IHV0aWxzJDEudG9GbGF0T2JqZWN0KHV0aWxzJDEsIHt9LCBudWxsLCBmdW5jdGlvbiBmaWx0ZXIocHJvcCkge1xuICByZXR1cm4gL15pc1tBLVpdLy50ZXN0KHByb3ApO1xufSk7XG5cbi8qKlxuICogQ29udmVydCBhIGRhdGEgb2JqZWN0IHRvIEZvcm1EYXRhXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHBhcmFtIHs/T2JqZWN0fSBbZm9ybURhdGFdXG4gKiBAcGFyYW0gez9PYmplY3R9IFtvcHRpb25zXVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMudmlzaXRvcl1cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMubWV0YVRva2VucyA9IHRydWVdXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLmRvdHMgPSBmYWxzZV1cbiAqIEBwYXJhbSB7P0Jvb2xlYW59IFtvcHRpb25zLmluZGV4ZXMgPSBmYWxzZV1cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICoqL1xuXG4vKipcbiAqIEl0IGNvbnZlcnRzIGFuIG9iamVjdCBpbnRvIGEgRm9ybURhdGEgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3Q8YW55LCBhbnk+fSBvYmogLSBUaGUgb2JqZWN0IHRvIGNvbnZlcnQgdG8gZm9ybSBkYXRhLlxuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1EYXRhIC0gVGhlIEZvcm1EYXRhIG9iamVjdCB0byBhcHBlbmQgdG8uXG4gKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJuc1xuICovXG5mdW5jdGlvbiB0b0Zvcm1EYXRhKG9iaiwgZm9ybURhdGEsIG9wdGlvbnMpIHtcbiAgaWYgKCF1dGlscyQxLmlzT2JqZWN0KG9iaikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBmb3JtRGF0YSA9IGZvcm1EYXRhIHx8IG5ldyAoRm9ybURhdGEpKCk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIG9wdGlvbnMgPSB1dGlscyQxLnRvRmxhdE9iamVjdChvcHRpb25zLCB7XG4gICAgbWV0YVRva2VuczogdHJ1ZSxcbiAgICBkb3RzOiBmYWxzZSxcbiAgICBpbmRleGVzOiBmYWxzZVxuICB9LCBmYWxzZSwgZnVuY3Rpb24gZGVmaW5lZChvcHRpb24sIHNvdXJjZSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lcS1udWxsLGVxZXFlcVxuICAgIHJldHVybiAhdXRpbHMkMS5pc1VuZGVmaW5lZChzb3VyY2Vbb3B0aW9uXSk7XG4gIH0pO1xuXG4gIGNvbnN0IG1ldGFUb2tlbnMgPSBvcHRpb25zLm1ldGFUb2tlbnM7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICBjb25zdCB2aXNpdG9yID0gb3B0aW9ucy52aXNpdG9yIHx8IGRlZmF1bHRWaXNpdG9yO1xuICBjb25zdCBkb3RzID0gb3B0aW9ucy5kb3RzO1xuICBjb25zdCBpbmRleGVzID0gb3B0aW9ucy5pbmRleGVzO1xuICBjb25zdCBfQmxvYiA9IG9wdGlvbnMuQmxvYiB8fCB0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgJiYgQmxvYjtcbiAgY29uc3QgdXNlQmxvYiA9IF9CbG9iICYmIHV0aWxzJDEuaXNTcGVjQ29tcGxpYW50Rm9ybShmb3JtRGF0YSk7XG5cbiAgaWYgKCF1dGlscyQxLmlzRnVuY3Rpb24odmlzaXRvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd2aXNpdG9yIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICB9XG5cbiAgZnVuY3Rpb24gY29udmVydFZhbHVlKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsKSByZXR1cm4gJyc7XG5cbiAgICBpZiAodXRpbHMkMS5pc0RhdGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWUudG9JU09TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBpZiAoIXVzZUJsb2IgJiYgdXRpbHMkMS5pc0Jsb2IodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4nKTtcbiAgICB9XG5cbiAgICBpZiAodXRpbHMkMS5pc0FycmF5QnVmZmVyKHZhbHVlKSB8fCB1dGlscyQxLmlzVHlwZWRBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB1c2VCbG9iICYmIHR5cGVvZiBCbG9iID09PSAnZnVuY3Rpb24nID8gbmV3IEJsb2IoW3ZhbHVlXSkgOiBCdWZmZXIuZnJvbSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmF1bHQgdmlzaXRvci5cbiAgICpcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ3xOdW1iZXJ9IGtleVxuICAgKiBAcGFyYW0ge0FycmF5PFN0cmluZ3xOdW1iZXI+fSBwYXRoXG4gICAqIEB0aGlzIHtGb3JtRGF0YX1cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHJldHVybiB0cnVlIHRvIHZpc2l0IHRoZSBlYWNoIHByb3Agb2YgdGhlIHZhbHVlIHJlY3Vyc2l2ZWx5XG4gICAqL1xuICBmdW5jdGlvbiBkZWZhdWx0VmlzaXRvcih2YWx1ZSwga2V5LCBwYXRoKSB7XG4gICAgbGV0IGFyciA9IHZhbHVlO1xuXG4gICAgaWYgKHZhbHVlICYmICFwYXRoICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmICh1dGlscyQxLmVuZHNXaXRoKGtleSwgJ3t9JykpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIGtleSA9IG1ldGFUb2tlbnMgPyBrZXkgOiBrZXkuc2xpY2UoMCwgLTIpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgdmFsdWUgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAodXRpbHMkMS5pc0FycmF5KHZhbHVlKSAmJiBpc0ZsYXRBcnJheSh2YWx1ZSkpIHx8XG4gICAgICAgICgodXRpbHMkMS5pc0ZpbGVMaXN0KHZhbHVlKSB8fCB1dGlscyQxLmVuZHNXaXRoKGtleSwgJ1tdJykpICYmIChhcnIgPSB1dGlscyQxLnRvQXJyYXkodmFsdWUpKVxuICAgICAgICApKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBrZXkgPSByZW1vdmVCcmFja2V0cyhrZXkpO1xuXG4gICAgICAgIGFyci5mb3JFYWNoKGZ1bmN0aW9uIGVhY2goZWwsIGluZGV4KSB7XG4gICAgICAgICAgISh1dGlscyQxLmlzVW5kZWZpbmVkKGVsKSB8fCBlbCA9PT0gbnVsbCkgJiYgZm9ybURhdGEuYXBwZW5kKFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5lc3RlZC10ZXJuYXJ5XG4gICAgICAgICAgICBpbmRleGVzID09PSB0cnVlID8gcmVuZGVyS2V5KFtrZXldLCBpbmRleCwgZG90cykgOiAoaW5kZXhlcyA9PT0gbnVsbCA/IGtleSA6IGtleSArICdbXScpLFxuICAgICAgICAgICAgY29udmVydFZhbHVlKGVsKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzVmlzaXRhYmxlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZm9ybURhdGEuYXBwZW5kKHJlbmRlcktleShwYXRoLCBrZXksIGRvdHMpLCBjb252ZXJ0VmFsdWUodmFsdWUpKTtcblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHN0YWNrID0gW107XG5cbiAgY29uc3QgZXhwb3NlZEhlbHBlcnMgPSBPYmplY3QuYXNzaWduKHByZWRpY2F0ZXMsIHtcbiAgICBkZWZhdWx0VmlzaXRvcixcbiAgICBjb252ZXJ0VmFsdWUsXG4gICAgaXNWaXNpdGFibGVcbiAgfSk7XG5cbiAgZnVuY3Rpb24gYnVpbGQodmFsdWUsIHBhdGgpIHtcbiAgICBpZiAodXRpbHMkMS5pc1VuZGVmaW5lZCh2YWx1ZSkpIHJldHVybjtcblxuICAgIGlmIChzdGFjay5pbmRleE9mKHZhbHVlKSAhPT0gLTEpIHtcbiAgICAgIHRocm93IEVycm9yKCdDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gJyArIHBhdGguam9pbignLicpKTtcbiAgICB9XG5cbiAgICBzdGFjay5wdXNoKHZhbHVlKTtcblxuICAgIHV0aWxzJDEuZm9yRWFjaCh2YWx1ZSwgZnVuY3Rpb24gZWFjaChlbCwga2V5KSB7XG4gICAgICBjb25zdCByZXN1bHQgPSAhKHV0aWxzJDEuaXNVbmRlZmluZWQoZWwpIHx8IGVsID09PSBudWxsKSAmJiB2aXNpdG9yLmNhbGwoXG4gICAgICAgIGZvcm1EYXRhLCBlbCwgdXRpbHMkMS5pc1N0cmluZyhrZXkpID8ga2V5LnRyaW0oKSA6IGtleSwgcGF0aCwgZXhwb3NlZEhlbHBlcnNcbiAgICAgICk7XG5cbiAgICAgIGlmIChyZXN1bHQgPT09IHRydWUpIHtcbiAgICAgICAgYnVpbGQoZWwsIHBhdGggPyBwYXRoLmNvbmNhdChrZXkpIDogW2tleV0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgc3RhY2sucG9wKCk7XG4gIH1cblxuICBpZiAoIXV0aWxzJDEuaXNPYmplY3Qob2JqKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2RhdGEgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgfVxuXG4gIGJ1aWxkKG9iaik7XG5cbiAgcmV0dXJuIGZvcm1EYXRhO1xufVxuXG4vKipcbiAqIEl0IGVuY29kZXMgYSBzdHJpbmcgYnkgcmVwbGFjaW5nIGFsbCBjaGFyYWN0ZXJzIHRoYXQgYXJlIG5vdCBpbiB0aGUgdW5yZXNlcnZlZCBzZXQgd2l0aFxuICogdGhlaXIgcGVyY2VudC1lbmNvZGVkIGVxdWl2YWxlbnRzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciAtIFRoZSBzdHJpbmcgdG8gZW5jb2RlLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBlbmNvZGVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gZW5jb2RlJDEoc3RyKSB7XG4gIGNvbnN0IGNoYXJNYXAgPSB7XG4gICAgJyEnOiAnJTIxJyxcbiAgICBcIidcIjogJyUyNycsXG4gICAgJygnOiAnJTI4JyxcbiAgICAnKSc6ICclMjknLFxuICAgICd+JzogJyU3RScsXG4gICAgJyUyMCc6ICcrJyxcbiAgICAnJTAwJzogJ1xceDAwJ1xuICB9O1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHN0cikucmVwbGFjZSgvWyEnKCl+XXwlMjB8JTAwL2csIGZ1bmN0aW9uIHJlcGxhY2VyKG1hdGNoKSB7XG4gICAgcmV0dXJuIGNoYXJNYXBbbWF0Y2hdO1xuICB9KTtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHBhcmFtcyBvYmplY3QgYW5kIGNvbnZlcnRzIGl0IHRvIGEgRm9ybURhdGEgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyB0byBiZSBjb252ZXJ0ZWQgdG8gYSBGb3JtRGF0YSBvYmplY3QuXG4gKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvYmplY3QgcGFzc2VkIHRvIHRoZSBBeGlvcyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gQXhpb3NVUkxTZWFyY2hQYXJhbXMocGFyYW1zLCBvcHRpb25zKSB7XG4gIHRoaXMuX3BhaXJzID0gW107XG5cbiAgcGFyYW1zICYmIHRvRm9ybURhdGEocGFyYW1zLCB0aGlzLCBvcHRpb25zKTtcbn1cblxuY29uc3QgcHJvdG90eXBlID0gQXhpb3NVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlO1xuXG5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gYXBwZW5kKG5hbWUsIHZhbHVlKSB7XG4gIHRoaXMuX3BhaXJzLnB1c2goW25hbWUsIHZhbHVlXSk7XG59O1xuXG5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyhlbmNvZGVyKSB7XG4gIGNvbnN0IF9lbmNvZGUgPSBlbmNvZGVyID8gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gZW5jb2Rlci5jYWxsKHRoaXMsIHZhbHVlLCBlbmNvZGUkMSk7XG4gIH0gOiBlbmNvZGUkMTtcblxuICByZXR1cm4gdGhpcy5fcGFpcnMubWFwKGZ1bmN0aW9uIGVhY2gocGFpcikge1xuICAgIHJldHVybiBfZW5jb2RlKHBhaXJbMF0pICsgJz0nICsgX2VuY29kZShwYWlyWzFdKTtcbiAgfSwgJycpLmpvaW4oJyYnKTtcbn07XG5cbi8qKlxuICogSXQgcmVwbGFjZXMgYWxsIGluc3RhbmNlcyBvZiB0aGUgY2hhcmFjdGVycyBgOmAsIGAkYCwgYCxgLCBgK2AsIGBbYCwgYW5kIGBdYCB3aXRoIHRoZWlyXG4gKiBVUkkgZW5jb2RlZCBjb3VudGVycGFydHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsIFRoZSB2YWx1ZSB0byBiZSBlbmNvZGVkLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBlbmNvZGVkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBlbmNvZGUodmFsKSB7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQodmFsKS5cbiAgICByZXBsYWNlKC8lM0EvZ2ksICc6JykuXG4gICAgcmVwbGFjZSgvJTI0L2csICckJykuXG4gICAgcmVwbGFjZSgvJTJDL2dpLCAnLCcpLlxuICAgIHJlcGxhY2UoLyUyMC9nLCAnKycpLlxuICAgIHJlcGxhY2UoLyU1Qi9naSwgJ1snKS5cbiAgICByZXBsYWNlKC8lNUQvZ2ksICddJyk7XG59XG5cbi8qKlxuICogQnVpbGQgYSBVUkwgYnkgYXBwZW5kaW5nIHBhcmFtcyB0byB0aGUgZW5kXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgYmFzZSBvZiB0aGUgdXJsIChlLmcuLCBodHRwOi8vd3d3Lmdvb2dsZS5jb20pXG4gKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtc10gVGhlIHBhcmFtcyB0byBiZSBhcHBlbmRlZFxuICogQHBhcmFtIHs/b2JqZWN0fSBvcHRpb25zXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGZvcm1hdHRlZCB1cmxcbiAqL1xuZnVuY3Rpb24gYnVpbGRVUkwodXJsLCBwYXJhbXMsIG9wdGlvbnMpIHtcbiAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gIGlmICghcGFyYW1zKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuICBcbiAgY29uc3QgX2VuY29kZSA9IG9wdGlvbnMgJiYgb3B0aW9ucy5lbmNvZGUgfHwgZW5jb2RlO1xuXG4gIGNvbnN0IHNlcmlhbGl6ZUZuID0gb3B0aW9ucyAmJiBvcHRpb25zLnNlcmlhbGl6ZTtcblxuICBsZXQgc2VyaWFsaXplZFBhcmFtcztcblxuICBpZiAoc2VyaWFsaXplRm4pIHtcbiAgICBzZXJpYWxpemVkUGFyYW1zID0gc2VyaWFsaXplRm4ocGFyYW1zLCBvcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICBzZXJpYWxpemVkUGFyYW1zID0gdXRpbHMkMS5pc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMpID9cbiAgICAgIHBhcmFtcy50b1N0cmluZygpIDpcbiAgICAgIG5ldyBBeGlvc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMsIG9wdGlvbnMpLnRvU3RyaW5nKF9lbmNvZGUpO1xuICB9XG5cbiAgaWYgKHNlcmlhbGl6ZWRQYXJhbXMpIHtcbiAgICBjb25zdCBoYXNobWFya0luZGV4ID0gdXJsLmluZGV4T2YoXCIjXCIpO1xuXG4gICAgaWYgKGhhc2htYXJrSW5kZXggIT09IC0xKSB7XG4gICAgICB1cmwgPSB1cmwuc2xpY2UoMCwgaGFzaG1hcmtJbmRleCk7XG4gICAgfVxuICAgIHVybCArPSAodXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJicpICsgc2VyaWFsaXplZFBhcmFtcztcbiAgfVxuXG4gIHJldHVybiB1cmw7XG59XG5cbmNsYXNzIEludGVyY2VwdG9yTWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaGFuZGxlcnMgPSBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBuZXcgaW50ZXJjZXB0b3IgdG8gdGhlIHN0YWNrXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bGZpbGxlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGB0aGVuYCBmb3IgYSBgUHJvbWlzZWBcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0ZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgcmVqZWN0YCBmb3IgYSBgUHJvbWlzZWBcbiAgICpcbiAgICogQHJldHVybiB7TnVtYmVyfSBBbiBJRCB1c2VkIHRvIHJlbW92ZSBpbnRlcmNlcHRvciBsYXRlclxuICAgKi9cbiAgdXNlKGZ1bGZpbGxlZCwgcmVqZWN0ZWQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLmhhbmRsZXJzLnB1c2goe1xuICAgICAgZnVsZmlsbGVkLFxuICAgICAgcmVqZWN0ZWQsXG4gICAgICBzeW5jaHJvbm91czogb3B0aW9ucyA/IG9wdGlvbnMuc3luY2hyb25vdXMgOiBmYWxzZSxcbiAgICAgIHJ1bldoZW46IG9wdGlvbnMgPyBvcHRpb25zLnJ1bldoZW4gOiBudWxsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlcnMubGVuZ3RoIC0gMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gaW50ZXJjZXB0b3IgZnJvbSB0aGUgc3RhY2tcbiAgICpcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGlkIFRoZSBJRCB0aGF0IHdhcyByZXR1cm5lZCBieSBgdXNlYFxuICAgKlxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gYHRydWVgIGlmIHRoZSBpbnRlcmNlcHRvciB3YXMgcmVtb3ZlZCwgYGZhbHNlYCBvdGhlcndpc2VcbiAgICovXG4gIGVqZWN0KGlkKSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlcnNbaWRdKSB7XG4gICAgICB0aGlzLmhhbmRsZXJzW2lkXSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIGFsbCBpbnRlcmNlcHRvcnMgZnJvbSB0aGUgc3RhY2tcbiAgICpcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBjbGVhcigpIHtcbiAgICBpZiAodGhpcy5oYW5kbGVycykge1xuICAgICAgdGhpcy5oYW5kbGVycyA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJdGVyYXRlIG92ZXIgYWxsIHRoZSByZWdpc3RlcmVkIGludGVyY2VwdG9yc1xuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBza2lwcGluZyBvdmVyIGFueVxuICAgKiBpbnRlcmNlcHRvcnMgdGhhdCBtYXkgaGF2ZSBiZWNvbWUgYG51bGxgIGNhbGxpbmcgYGVqZWN0YC5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggaW50ZXJjZXB0b3JcbiAgICpcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBmb3JFYWNoKGZuKSB7XG4gICAgdXRpbHMkMS5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsIGZ1bmN0aW9uIGZvckVhY2hIYW5kbGVyKGgpIHtcbiAgICAgIGlmIChoICE9PSBudWxsKSB7XG4gICAgICAgIGZuKGgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbnZhciBJbnRlcmNlcHRvck1hbmFnZXIkMSA9IEludGVyY2VwdG9yTWFuYWdlcjtcblxudmFyIHRyYW5zaXRpb25hbERlZmF1bHRzID0ge1xuICBzaWxlbnRKU09OUGFyc2luZzogdHJ1ZSxcbiAgZm9yY2VkSlNPTlBhcnNpbmc6IHRydWUsXG4gIGNsYXJpZnlUaW1lb3V0RXJyb3I6IGZhbHNlXG59O1xuXG52YXIgVVJMU2VhcmNoUGFyYW1zJDEgPSB0eXBlb2YgVVJMU2VhcmNoUGFyYW1zICE9PSAndW5kZWZpbmVkJyA/IFVSTFNlYXJjaFBhcmFtcyA6IEF4aW9zVVJMU2VhcmNoUGFyYW1zO1xuXG52YXIgRm9ybURhdGEkMSA9IHR5cGVvZiBGb3JtRGF0YSAhPT0gJ3VuZGVmaW5lZCcgPyBGb3JtRGF0YSA6IG51bGw7XG5cbnZhciBCbG9iJDEgPSB0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgPyBCbG9iIDogbnVsbDtcblxudmFyIHBsYXRmb3JtJDEgPSB7XG4gIGlzQnJvd3NlcjogdHJ1ZSxcbiAgY2xhc3Nlczoge1xuICAgIFVSTFNlYXJjaFBhcmFtczogVVJMU2VhcmNoUGFyYW1zJDEsXG4gICAgRm9ybURhdGE6IEZvcm1EYXRhJDEsXG4gICAgQmxvYjogQmxvYiQxXG4gIH0sXG4gIHByb3RvY29sczogWydodHRwJywgJ2h0dHBzJywgJ2ZpbGUnLCAnYmxvYicsICd1cmwnLCAnZGF0YSddXG59O1xuXG5jb25zdCBoYXNCcm93c2VyRW52ID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJztcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgd2UncmUgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnRcbiAqXG4gKiBUaGlzIGFsbG93cyBheGlvcyB0byBydW4gaW4gYSB3ZWIgd29ya2VyLCBhbmQgcmVhY3QtbmF0aXZlLlxuICogQm90aCBlbnZpcm9ubWVudHMgc3VwcG9ydCBYTUxIdHRwUmVxdWVzdCwgYnV0IG5vdCBmdWxseSBzdGFuZGFyZCBnbG9iYWxzLlxuICpcbiAqIHdlYiB3b3JrZXJzOlxuICogIHR5cGVvZiB3aW5kb3cgLT4gdW5kZWZpbmVkXG4gKiAgdHlwZW9mIGRvY3VtZW50IC0+IHVuZGVmaW5lZFxuICpcbiAqIHJlYWN0LW5hdGl2ZTpcbiAqICBuYXZpZ2F0b3IucHJvZHVjdCAtPiAnUmVhY3ROYXRpdmUnXG4gKiBuYXRpdmVzY3JpcHRcbiAqICBuYXZpZ2F0b3IucHJvZHVjdCAtPiAnTmF0aXZlU2NyaXB0JyBvciAnTlMnXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmNvbnN0IGhhc1N0YW5kYXJkQnJvd3NlckVudiA9IChcbiAgKHByb2R1Y3QpID0+IHtcbiAgICByZXR1cm4gaGFzQnJvd3NlckVudiAmJiBbJ1JlYWN0TmF0aXZlJywgJ05hdGl2ZVNjcmlwdCcsICdOUyddLmluZGV4T2YocHJvZHVjdCkgPCAwXG4gIH0pKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci5wcm9kdWN0KTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgd2UncmUgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgd2ViV29ya2VyIGVudmlyb25tZW50XG4gKlxuICogQWx0aG91Z2ggdGhlIGBpc1N0YW5kYXJkQnJvd3NlckVudmAgbWV0aG9kIGluZGljYXRlcyB0aGF0XG4gKiBgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXJgLCB0aGUgV2ViV29ya2VyIHdpbGwgc3RpbGwgYmVcbiAqIGZpbHRlcmVkIG91dCBkdWUgdG8gaXRzIGp1ZGdtZW50IHN0YW5kYXJkXG4gKiBgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJ2AuXG4gKiBUaGlzIGxlYWRzIHRvIGEgcHJvYmxlbSB3aGVuIGF4aW9zIHBvc3QgYEZvcm1EYXRhYCBpbiB3ZWJXb3JrZXJcbiAqL1xuY29uc3QgaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52ID0gKCgpID0+IHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICAgc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlICYmXG4gICAgdHlwZW9mIHNlbGYuaW1wb3J0U2NyaXB0cyA9PT0gJ2Z1bmN0aW9uJ1xuICApO1xufSkoKTtcblxuY29uc3Qgb3JpZ2luID0gaGFzQnJvd3NlckVudiAmJiB3aW5kb3cubG9jYXRpb24uaHJlZiB8fCAnaHR0cDovL2xvY2FsaG9zdCc7XG5cbnZhciB1dGlscyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgX19wcm90b19fOiBudWxsLFxuICBoYXNCcm93c2VyRW52OiBoYXNCcm93c2VyRW52LFxuICBoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnY6IGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudixcbiAgaGFzU3RhbmRhcmRCcm93c2VyRW52OiBoYXNTdGFuZGFyZEJyb3dzZXJFbnYsXG4gIG9yaWdpbjogb3JpZ2luXG59KTtcblxudmFyIHBsYXRmb3JtID0ge1xuICAuLi51dGlscyxcbiAgLi4ucGxhdGZvcm0kMVxufTtcblxuZnVuY3Rpb24gdG9VUkxFbmNvZGVkRm9ybShkYXRhLCBvcHRpb25zKSB7XG4gIHJldHVybiB0b0Zvcm1EYXRhKGRhdGEsIG5ldyBwbGF0Zm9ybS5jbGFzc2VzLlVSTFNlYXJjaFBhcmFtcygpLCBPYmplY3QuYXNzaWduKHtcbiAgICB2aXNpdG9yOiBmdW5jdGlvbih2YWx1ZSwga2V5LCBwYXRoLCBoZWxwZXJzKSB7XG4gICAgICBpZiAocGxhdGZvcm0uaXNOb2RlICYmIHV0aWxzJDEuaXNCdWZmZXIodmFsdWUpKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKGtleSwgdmFsdWUudG9TdHJpbmcoJ2Jhc2U2NCcpKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaGVscGVycy5kZWZhdWx0VmlzaXRvci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgfSwgb3B0aW9ucykpO1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgc3RyaW5nIGxpa2UgYGZvb1t4XVt5XVt6XWAgYW5kIHJldHVybnMgYW4gYXJyYXkgbGlrZSBgWydmb28nLCAneCcsICd5JywgJ3onXVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBzdHJpbmdzLlxuICovXG5mdW5jdGlvbiBwYXJzZVByb3BQYXRoKG5hbWUpIHtcbiAgLy8gZm9vW3hdW3ldW3pdXG4gIC8vIGZvby54LnkuelxuICAvLyBmb28teC15LXpcbiAgLy8gZm9vIHggeSB6XG4gIHJldHVybiB1dGlscyQxLm1hdGNoQWxsKC9cXHcrfFxcWyhcXHcqKV0vZywgbmFtZSkubWFwKG1hdGNoID0+IHtcbiAgICByZXR1cm4gbWF0Y2hbMF0gPT09ICdbXScgPyAnJyA6IG1hdGNoWzFdIHx8IG1hdGNoWzBdO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGFuIGFycmF5IHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PGFueT59IGFyciAtIFRoZSBhcnJheSB0byBjb252ZXJ0IHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAcmV0dXJucyBBbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSBrZXlzIGFuZCB2YWx1ZXMgYXMgdGhlIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheVRvT2JqZWN0KGFycikge1xuICBjb25zdCBvYmogPSB7fTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGFycik7XG4gIGxldCBpO1xuICBjb25zdCBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgbGV0IGtleTtcbiAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAga2V5ID0ga2V5c1tpXTtcbiAgICBvYmpba2V5XSA9IGFycltrZXldO1xuICB9XG4gIHJldHVybiBvYmo7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBGb3JtRGF0YSBvYmplY3QgYW5kIHJldHVybnMgYSBKYXZhU2NyaXB0IG9iamVjdFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtRGF0YSBUaGUgRm9ybURhdGEgb2JqZWN0IHRvIGNvbnZlcnQgdG8gSlNPTi5cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0PHN0cmluZywgYW55PiB8IG51bGx9IFRoZSBjb252ZXJ0ZWQgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBmb3JtRGF0YVRvSlNPTihmb3JtRGF0YSkge1xuICBmdW5jdGlvbiBidWlsZFBhdGgocGF0aCwgdmFsdWUsIHRhcmdldCwgaW5kZXgpIHtcbiAgICBsZXQgbmFtZSA9IHBhdGhbaW5kZXgrK107XG5cbiAgICBpZiAobmFtZSA9PT0gJ19fcHJvdG9fXycpIHJldHVybiB0cnVlO1xuXG4gICAgY29uc3QgaXNOdW1lcmljS2V5ID0gTnVtYmVyLmlzRmluaXRlKCtuYW1lKTtcbiAgICBjb25zdCBpc0xhc3QgPSBpbmRleCA+PSBwYXRoLmxlbmd0aDtcbiAgICBuYW1lID0gIW5hbWUgJiYgdXRpbHMkMS5pc0FycmF5KHRhcmdldCkgPyB0YXJnZXQubGVuZ3RoIDogbmFtZTtcblxuICAgIGlmIChpc0xhc3QpIHtcbiAgICAgIGlmICh1dGlscyQxLmhhc093blByb3AodGFyZ2V0LCBuYW1lKSkge1xuICAgICAgICB0YXJnZXRbbmFtZV0gPSBbdGFyZ2V0W25hbWVdLCB2YWx1ZV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRbbmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICFpc051bWVyaWNLZXk7XG4gICAgfVxuXG4gICAgaWYgKCF0YXJnZXRbbmFtZV0gfHwgIXV0aWxzJDEuaXNPYmplY3QodGFyZ2V0W25hbWVdKSkge1xuICAgICAgdGFyZ2V0W25hbWVdID0gW107XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYnVpbGRQYXRoKHBhdGgsIHZhbHVlLCB0YXJnZXRbbmFtZV0sIGluZGV4KTtcblxuICAgIGlmIChyZXN1bHQgJiYgdXRpbHMkMS5pc0FycmF5KHRhcmdldFtuYW1lXSkpIHtcbiAgICAgIHRhcmdldFtuYW1lXSA9IGFycmF5VG9PYmplY3QodGFyZ2V0W25hbWVdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gIWlzTnVtZXJpY0tleTtcbiAgfVxuXG4gIGlmICh1dGlscyQxLmlzRm9ybURhdGEoZm9ybURhdGEpICYmIHV0aWxzJDEuaXNGdW5jdGlvbihmb3JtRGF0YS5lbnRyaWVzKSkge1xuICAgIGNvbnN0IG9iaiA9IHt9O1xuXG4gICAgdXRpbHMkMS5mb3JFYWNoRW50cnkoZm9ybURhdGEsIChuYW1lLCB2YWx1ZSkgPT4ge1xuICAgICAgYnVpbGRQYXRoKHBhcnNlUHJvcFBhdGgobmFtZSksIHZhbHVlLCBvYmosIDApO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgc3RyaW5nLCB0cmllcyB0byBwYXJzZSBpdCwgYW5kIGlmIGl0IGZhaWxzLCBpdCByZXR1cm5zIHRoZSBzdHJpbmdpZmllZCB2ZXJzaW9uXG4gKiBvZiB0aGUgaW5wdXRcbiAqXG4gKiBAcGFyYW0ge2FueX0gcmF3VmFsdWUgLSBUaGUgdmFsdWUgdG8gYmUgc3RyaW5naWZpZWQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwYXJzZXIgLSBBIGZ1bmN0aW9uIHRoYXQgcGFyc2VzIGEgc3RyaW5nIGludG8gYSBKYXZhU2NyaXB0IG9iamVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVuY29kZXIgLSBBIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSB2YWx1ZSBhbmQgcmV0dXJucyBhIHN0cmluZy5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIHN0cmluZ2lmaWVkIHZlcnNpb24gb2YgdGhlIHJhd1ZhbHVlLlxuICovXG5mdW5jdGlvbiBzdHJpbmdpZnlTYWZlbHkocmF3VmFsdWUsIHBhcnNlciwgZW5jb2Rlcikge1xuICBpZiAodXRpbHMkMS5pc1N0cmluZyhyYXdWYWx1ZSkpIHtcbiAgICB0cnkge1xuICAgICAgKHBhcnNlciB8fCBKU09OLnBhcnNlKShyYXdWYWx1ZSk7XG4gICAgICByZXR1cm4gdXRpbHMkMS50cmltKHJhd1ZhbHVlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZS5uYW1lICE9PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIChlbmNvZGVyIHx8IEpTT04uc3RyaW5naWZ5KShyYXdWYWx1ZSk7XG59XG5cbmNvbnN0IGRlZmF1bHRzID0ge1xuXG4gIHRyYW5zaXRpb25hbDogdHJhbnNpdGlvbmFsRGVmYXVsdHMsXG5cbiAgYWRhcHRlcjogWyd4aHInLCAnaHR0cCcsICdmZXRjaCddLFxuXG4gIHRyYW5zZm9ybVJlcXVlc3Q6IFtmdW5jdGlvbiB0cmFuc2Zvcm1SZXF1ZXN0KGRhdGEsIGhlYWRlcnMpIHtcbiAgICBjb25zdCBjb250ZW50VHlwZSA9IGhlYWRlcnMuZ2V0Q29udGVudFR5cGUoKSB8fCAnJztcbiAgICBjb25zdCBoYXNKU09OQ29udGVudFR5cGUgPSBjb250ZW50VHlwZS5pbmRleE9mKCdhcHBsaWNhdGlvbi9qc29uJykgPiAtMTtcbiAgICBjb25zdCBpc09iamVjdFBheWxvYWQgPSB1dGlscyQxLmlzT2JqZWN0KGRhdGEpO1xuXG4gICAgaWYgKGlzT2JqZWN0UGF5bG9hZCAmJiB1dGlscyQxLmlzSFRNTEZvcm0oZGF0YSkpIHtcbiAgICAgIGRhdGEgPSBuZXcgRm9ybURhdGEoZGF0YSk7XG4gICAgfVxuXG4gICAgY29uc3QgaXNGb3JtRGF0YSA9IHV0aWxzJDEuaXNGb3JtRGF0YShkYXRhKTtcblxuICAgIGlmIChpc0Zvcm1EYXRhKSB7XG4gICAgICByZXR1cm4gaGFzSlNPTkNvbnRlbnRUeXBlID8gSlNPTi5zdHJpbmdpZnkoZm9ybURhdGFUb0pTT04oZGF0YSkpIDogZGF0YTtcbiAgICB9XG5cbiAgICBpZiAodXRpbHMkMS5pc0FycmF5QnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscyQxLmlzQnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscyQxLmlzU3RyZWFtKGRhdGEpIHx8XG4gICAgICB1dGlscyQxLmlzRmlsZShkYXRhKSB8fFxuICAgICAgdXRpbHMkMS5pc0Jsb2IoZGF0YSkgfHxcbiAgICAgIHV0aWxzJDEuaXNSZWFkYWJsZVN0cmVhbShkYXRhKVxuICAgICkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGlmICh1dGlscyQxLmlzQXJyYXlCdWZmZXJWaWV3KGRhdGEpKSB7XG4gICAgICByZXR1cm4gZGF0YS5idWZmZXI7XG4gICAgfVxuICAgIGlmICh1dGlscyQxLmlzVVJMU2VhcmNoUGFyYW1zKGRhdGEpKSB7XG4gICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKCdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCcsIGZhbHNlKTtcbiAgICAgIHJldHVybiBkYXRhLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgbGV0IGlzRmlsZUxpc3Q7XG5cbiAgICBpZiAoaXNPYmplY3RQYXlsb2FkKSB7XG4gICAgICBpZiAoY29udGVudFR5cGUuaW5kZXhPZignYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJykgPiAtMSkge1xuICAgICAgICByZXR1cm4gdG9VUkxFbmNvZGVkRm9ybShkYXRhLCB0aGlzLmZvcm1TZXJpYWxpemVyKS50b1N0cmluZygpO1xuICAgICAgfVxuXG4gICAgICBpZiAoKGlzRmlsZUxpc3QgPSB1dGlscyQxLmlzRmlsZUxpc3QoZGF0YSkpIHx8IGNvbnRlbnRUeXBlLmluZGV4T2YoJ211bHRpcGFydC9mb3JtLWRhdGEnKSA+IC0xKSB7XG4gICAgICAgIGNvbnN0IF9Gb3JtRGF0YSA9IHRoaXMuZW52ICYmIHRoaXMuZW52LkZvcm1EYXRhO1xuXG4gICAgICAgIHJldHVybiB0b0Zvcm1EYXRhKFxuICAgICAgICAgIGlzRmlsZUxpc3QgPyB7J2ZpbGVzW10nOiBkYXRhfSA6IGRhdGEsXG4gICAgICAgICAgX0Zvcm1EYXRhICYmIG5ldyBfRm9ybURhdGEoKSxcbiAgICAgICAgICB0aGlzLmZvcm1TZXJpYWxpemVyXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzT2JqZWN0UGF5bG9hZCB8fCBoYXNKU09OQ29udGVudFR5cGUgKSB7XG4gICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKCdhcHBsaWNhdGlvbi9qc29uJywgZmFsc2UpO1xuICAgICAgcmV0dXJuIHN0cmluZ2lmeVNhZmVseShkYXRhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfV0sXG5cbiAgdHJhbnNmb3JtUmVzcG9uc2U6IFtmdW5jdGlvbiB0cmFuc2Zvcm1SZXNwb25zZShkYXRhKSB7XG4gICAgY29uc3QgdHJhbnNpdGlvbmFsID0gdGhpcy50cmFuc2l0aW9uYWwgfHwgZGVmYXVsdHMudHJhbnNpdGlvbmFsO1xuICAgIGNvbnN0IGZvcmNlZEpTT05QYXJzaW5nID0gdHJhbnNpdGlvbmFsICYmIHRyYW5zaXRpb25hbC5mb3JjZWRKU09OUGFyc2luZztcbiAgICBjb25zdCBKU09OUmVxdWVzdGVkID0gdGhpcy5yZXNwb25zZVR5cGUgPT09ICdqc29uJztcblxuICAgIGlmICh1dGlscyQxLmlzUmVzcG9uc2UoZGF0YSkgfHwgdXRpbHMkMS5pc1JlYWRhYmxlU3RyZWFtKGRhdGEpKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YSAmJiB1dGlscyQxLmlzU3RyaW5nKGRhdGEpICYmICgoZm9yY2VkSlNPTlBhcnNpbmcgJiYgIXRoaXMucmVzcG9uc2VUeXBlKSB8fCBKU09OUmVxdWVzdGVkKSkge1xuICAgICAgY29uc3Qgc2lsZW50SlNPTlBhcnNpbmcgPSB0cmFuc2l0aW9uYWwgJiYgdHJhbnNpdGlvbmFsLnNpbGVudEpTT05QYXJzaW5nO1xuICAgICAgY29uc3Qgc3RyaWN0SlNPTlBhcnNpbmcgPSAhc2lsZW50SlNPTlBhcnNpbmcgJiYgSlNPTlJlcXVlc3RlZDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChzdHJpY3RKU09OUGFyc2luZykge1xuICAgICAgICAgIGlmIChlLm5hbWUgPT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgICAgIHRocm93IEF4aW9zRXJyb3IuZnJvbShlLCBBeGlvc0Vycm9yLkVSUl9CQURfUkVTUE9OU0UsIHRoaXMsIG51bGwsIHRoaXMucmVzcG9uc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIC8qKlxuICAgKiBBIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIHRvIGFib3J0IGEgcmVxdWVzdC4gSWYgc2V0IHRvIDAgKGRlZmF1bHQpIGFcbiAgICogdGltZW91dCBpcyBub3QgY3JlYXRlZC5cbiAgICovXG4gIHRpbWVvdXQ6IDAsXG5cbiAgeHNyZkNvb2tpZU5hbWU6ICdYU1JGLVRPS0VOJyxcbiAgeHNyZkhlYWRlck5hbWU6ICdYLVhTUkYtVE9LRU4nLFxuXG4gIG1heENvbnRlbnRMZW5ndGg6IC0xLFxuICBtYXhCb2R5TGVuZ3RoOiAtMSxcblxuICBlbnY6IHtcbiAgICBGb3JtRGF0YTogcGxhdGZvcm0uY2xhc3Nlcy5Gb3JtRGF0YSxcbiAgICBCbG9iOiBwbGF0Zm9ybS5jbGFzc2VzLkJsb2JcbiAgfSxcblxuICB2YWxpZGF0ZVN0YXR1czogZnVuY3Rpb24gdmFsaWRhdGVTdGF0dXMoc3RhdHVzKSB7XG4gICAgcmV0dXJuIHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwO1xuICB9LFxuXG4gIGhlYWRlcnM6IHtcbiAgICBjb21tb246IHtcbiAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qJyxcbiAgICAgICdDb250ZW50LVR5cGUnOiB1bmRlZmluZWRcbiAgICB9XG4gIH1cbn07XG5cbnV0aWxzJDEuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdwb3N0JywgJ3B1dCcsICdwYXRjaCddLCAobWV0aG9kKSA9PiB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHt9O1xufSk7XG5cbnZhciBkZWZhdWx0cyQxID0gZGVmYXVsdHM7XG5cbi8vIFJhd0F4aW9zSGVhZGVycyB3aG9zZSBkdXBsaWNhdGVzIGFyZSBpZ25vcmVkIGJ5IG5vZGVcbi8vIGMuZi4gaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9odHRwLmh0bWwjaHR0cF9tZXNzYWdlX2hlYWRlcnNcbmNvbnN0IGlnbm9yZUR1cGxpY2F0ZU9mID0gdXRpbHMkMS50b09iamVjdFNldChbXG4gICdhZ2UnLCAnYXV0aG9yaXphdGlvbicsICdjb250ZW50LWxlbmd0aCcsICdjb250ZW50LXR5cGUnLCAnZXRhZycsXG4gICdleHBpcmVzJywgJ2Zyb20nLCAnaG9zdCcsICdpZi1tb2RpZmllZC1zaW5jZScsICdpZi11bm1vZGlmaWVkLXNpbmNlJyxcbiAgJ2xhc3QtbW9kaWZpZWQnLCAnbG9jYXRpb24nLCAnbWF4LWZvcndhcmRzJywgJ3Byb3h5LWF1dGhvcml6YXRpb24nLFxuICAncmVmZXJlcicsICdyZXRyeS1hZnRlcicsICd1c2VyLWFnZW50J1xuXSk7XG5cbi8qKlxuICogUGFyc2UgaGVhZGVycyBpbnRvIGFuIG9iamVjdFxuICpcbiAqIGBgYFxuICogRGF0ZTogV2VkLCAyNyBBdWcgMjAxNCAwODo1ODo0OSBHTVRcbiAqIENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvblxuICogQ29ubmVjdGlvbjoga2VlcC1hbGl2ZVxuICogVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWRcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSByYXdIZWFkZXJzIEhlYWRlcnMgbmVlZGluZyB0byBiZSBwYXJzZWRcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBIZWFkZXJzIHBhcnNlZCBpbnRvIGFuIG9iamVjdFxuICovXG52YXIgcGFyc2VIZWFkZXJzID0gcmF3SGVhZGVycyA9PiB7XG4gIGNvbnN0IHBhcnNlZCA9IHt9O1xuICBsZXQga2V5O1xuICBsZXQgdmFsO1xuICBsZXQgaTtcblxuICByYXdIZWFkZXJzICYmIHJhd0hlYWRlcnMuc3BsaXQoJ1xcbicpLmZvckVhY2goZnVuY3Rpb24gcGFyc2VyKGxpbmUpIHtcbiAgICBpID0gbGluZS5pbmRleE9mKCc6Jyk7XG4gICAga2V5ID0gbGluZS5zdWJzdHJpbmcoMCwgaSkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFsID0gbGluZS5zdWJzdHJpbmcoaSArIDEpLnRyaW0oKTtcblxuICAgIGlmICgha2V5IHx8IChwYXJzZWRba2V5XSAmJiBpZ25vcmVEdXBsaWNhdGVPZltrZXldKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdzZXQtY29va2llJykge1xuICAgICAgaWYgKHBhcnNlZFtrZXldKSB7XG4gICAgICAgIHBhcnNlZFtrZXldLnB1c2godmFsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnNlZFtrZXldID0gW3ZhbF07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnNlZFtrZXldID0gcGFyc2VkW2tleV0gPyBwYXJzZWRba2V5XSArICcsICcgKyB2YWwgOiB2YWw7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcGFyc2VkO1xufTtcblxuY29uc3QgJGludGVybmFscyA9IFN5bWJvbCgnaW50ZXJuYWxzJyk7XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUhlYWRlcihoZWFkZXIpIHtcbiAgcmV0dXJuIGhlYWRlciAmJiBTdHJpbmcoaGVhZGVyKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplVmFsdWUodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSBmYWxzZSB8fCB2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHV0aWxzJDEuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5tYXAobm9ybWFsaXplVmFsdWUpIDogU3RyaW5nKHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VUb2tlbnMoc3RyKSB7XG4gIGNvbnN0IHRva2VucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGNvbnN0IHRva2Vuc1JFID0gLyhbXlxccyw7PV0rKVxccyooPzo9XFxzKihbXiw7XSspKT8vZztcbiAgbGV0IG1hdGNoO1xuXG4gIHdoaWxlICgobWF0Y2ggPSB0b2tlbnNSRS5leGVjKHN0cikpKSB7XG4gICAgdG9rZW5zW21hdGNoWzFdXSA9IG1hdGNoWzJdO1xuICB9XG5cbiAgcmV0dXJuIHRva2Vucztcbn1cblxuY29uc3QgaXNWYWxpZEhlYWRlck5hbWUgPSAoc3RyKSA9PiAvXlstX2EtekEtWjAtOV5gfH4sISMkJSYnKisuXSskLy50ZXN0KHN0ci50cmltKCkpO1xuXG5mdW5jdGlvbiBtYXRjaEhlYWRlclZhbHVlKGNvbnRleHQsIHZhbHVlLCBoZWFkZXIsIGZpbHRlciwgaXNIZWFkZXJOYW1lRmlsdGVyKSB7XG4gIGlmICh1dGlscyQxLmlzRnVuY3Rpb24oZmlsdGVyKSkge1xuICAgIHJldHVybiBmaWx0ZXIuY2FsbCh0aGlzLCB2YWx1ZSwgaGVhZGVyKTtcbiAgfVxuXG4gIGlmIChpc0hlYWRlck5hbWVGaWx0ZXIpIHtcbiAgICB2YWx1ZSA9IGhlYWRlcjtcbiAgfVxuXG4gIGlmICghdXRpbHMkMS5pc1N0cmluZyh2YWx1ZSkpIHJldHVybjtcblxuICBpZiAodXRpbHMkMS5pc1N0cmluZyhmaWx0ZXIpKSB7XG4gICAgcmV0dXJuIHZhbHVlLmluZGV4T2YoZmlsdGVyKSAhPT0gLTE7XG4gIH1cblxuICBpZiAodXRpbHMkMS5pc1JlZ0V4cChmaWx0ZXIpKSB7XG4gICAgcmV0dXJuIGZpbHRlci50ZXN0KHZhbHVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmb3JtYXRIZWFkZXIoaGVhZGVyKSB7XG4gIHJldHVybiBoZWFkZXIudHJpbSgpXG4gICAgLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvKFthLXpcXGRdKShcXHcqKS9nLCAodywgY2hhciwgc3RyKSA9PiB7XG4gICAgICByZXR1cm4gY2hhci50b1VwcGVyQ2FzZSgpICsgc3RyO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBidWlsZEFjY2Vzc29ycyhvYmosIGhlYWRlcikge1xuICBjb25zdCBhY2Nlc3Nvck5hbWUgPSB1dGlscyQxLnRvQ2FtZWxDYXNlKCcgJyArIGhlYWRlcik7XG5cbiAgWydnZXQnLCAnc2V0JywgJ2hhcyddLmZvckVhY2gobWV0aG9kTmFtZSA9PiB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgbWV0aG9kTmFtZSArIGFjY2Vzc29yTmFtZSwge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uKGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbbWV0aG9kTmFtZV0uY2FsbCh0aGlzLCBoZWFkZXIsIGFyZzEsIGFyZzIsIGFyZzMpO1xuICAgICAgfSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9KTtcbn1cblxuY2xhc3MgQXhpb3NIZWFkZXJzIHtcbiAgY29uc3RydWN0b3IoaGVhZGVycykge1xuICAgIGhlYWRlcnMgJiYgdGhpcy5zZXQoaGVhZGVycyk7XG4gIH1cblxuICBzZXQoaGVhZGVyLCB2YWx1ZU9yUmV3cml0ZSwgcmV3cml0ZSkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gICAgZnVuY3Rpb24gc2V0SGVhZGVyKF92YWx1ZSwgX2hlYWRlciwgX3Jld3JpdGUpIHtcbiAgICAgIGNvbnN0IGxIZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoX2hlYWRlcik7XG5cbiAgICAgIGlmICghbEhlYWRlcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2hlYWRlciBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzJDEuZmluZEtleShzZWxmLCBsSGVhZGVyKTtcblxuICAgICAgaWYoIWtleSB8fCBzZWxmW2tleV0gPT09IHVuZGVmaW5lZCB8fCBfcmV3cml0ZSA9PT0gdHJ1ZSB8fCAoX3Jld3JpdGUgPT09IHVuZGVmaW5lZCAmJiBzZWxmW2tleV0gIT09IGZhbHNlKSkge1xuICAgICAgICBzZWxmW2tleSB8fCBfaGVhZGVyXSA9IG5vcm1hbGl6ZVZhbHVlKF92YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc2V0SGVhZGVycyA9IChoZWFkZXJzLCBfcmV3cml0ZSkgPT5cbiAgICAgIHV0aWxzJDEuZm9yRWFjaChoZWFkZXJzLCAoX3ZhbHVlLCBfaGVhZGVyKSA9PiBzZXRIZWFkZXIoX3ZhbHVlLCBfaGVhZGVyLCBfcmV3cml0ZSkpO1xuXG4gICAgaWYgKHV0aWxzJDEuaXNQbGFpbk9iamVjdChoZWFkZXIpIHx8IGhlYWRlciBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3IpIHtcbiAgICAgIHNldEhlYWRlcnMoaGVhZGVyLCB2YWx1ZU9yUmV3cml0ZSk7XG4gICAgfSBlbHNlIGlmKHV0aWxzJDEuaXNTdHJpbmcoaGVhZGVyKSAmJiAoaGVhZGVyID0gaGVhZGVyLnRyaW0oKSkgJiYgIWlzVmFsaWRIZWFkZXJOYW1lKGhlYWRlcikpIHtcbiAgICAgIHNldEhlYWRlcnMocGFyc2VIZWFkZXJzKGhlYWRlciksIHZhbHVlT3JSZXdyaXRlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzJDEuaXNIZWFkZXJzKGhlYWRlcikpIHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIGhlYWRlci5lbnRyaWVzKCkpIHtcbiAgICAgICAgc2V0SGVhZGVyKHZhbHVlLCBrZXksIHJld3JpdGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBoZWFkZXIgIT0gbnVsbCAmJiBzZXRIZWFkZXIodmFsdWVPclJld3JpdGUsIGhlYWRlciwgcmV3cml0ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBnZXQoaGVhZGVyLCBwYXJzZXIpIHtcbiAgICBoZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoaGVhZGVyKTtcblxuICAgIGlmIChoZWFkZXIpIHtcbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzJDEuZmluZEtleSh0aGlzLCBoZWFkZXIpO1xuXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1trZXldO1xuXG4gICAgICAgIGlmICghcGFyc2VyKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcnNlciA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZVRva2Vucyh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXRpbHMkMS5pc0Z1bmN0aW9uKHBhcnNlcikpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VyLmNhbGwodGhpcywgdmFsdWUsIGtleSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXRpbHMkMS5pc1JlZ0V4cChwYXJzZXIpKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlci5leGVjKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3BhcnNlciBtdXN0IGJlIGJvb2xlYW58cmVnZXhwfGZ1bmN0aW9uJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaGFzKGhlYWRlciwgbWF0Y2hlcikge1xuICAgIGhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihoZWFkZXIpO1xuXG4gICAgaWYgKGhlYWRlcikge1xuICAgICAgY29uc3Qga2V5ID0gdXRpbHMkMS5maW5kS2V5KHRoaXMsIGhlYWRlcik7XG5cbiAgICAgIHJldHVybiAhIShrZXkgJiYgdGhpc1trZXldICE9PSB1bmRlZmluZWQgJiYgKCFtYXRjaGVyIHx8IG1hdGNoSGVhZGVyVmFsdWUodGhpcywgdGhpc1trZXldLCBrZXksIG1hdGNoZXIpKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZGVsZXRlKGhlYWRlciwgbWF0Y2hlcikge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGxldCBkZWxldGVkID0gZmFsc2U7XG5cbiAgICBmdW5jdGlvbiBkZWxldGVIZWFkZXIoX2hlYWRlcikge1xuICAgICAgX2hlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihfaGVhZGVyKTtcblxuICAgICAgaWYgKF9oZWFkZXIpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdXRpbHMkMS5maW5kS2V5KHNlbGYsIF9oZWFkZXIpO1xuXG4gICAgICAgIGlmIChrZXkgJiYgKCFtYXRjaGVyIHx8IG1hdGNoSGVhZGVyVmFsdWUoc2VsZiwgc2VsZltrZXldLCBrZXksIG1hdGNoZXIpKSkge1xuICAgICAgICAgIGRlbGV0ZSBzZWxmW2tleV07XG5cbiAgICAgICAgICBkZWxldGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh1dGlscyQxLmlzQXJyYXkoaGVhZGVyKSkge1xuICAgICAgaGVhZGVyLmZvckVhY2goZGVsZXRlSGVhZGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlSGVhZGVyKGhlYWRlcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlbGV0ZWQ7XG4gIH1cblxuICBjbGVhcihtYXRjaGVyKSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMpO1xuICAgIGxldCBpID0ga2V5cy5sZW5ndGg7XG4gICAgbGV0IGRlbGV0ZWQgPSBmYWxzZTtcblxuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIGNvbnN0IGtleSA9IGtleXNbaV07XG4gICAgICBpZighbWF0Y2hlciB8fCBtYXRjaEhlYWRlclZhbHVlKHRoaXMsIHRoaXNba2V5XSwga2V5LCBtYXRjaGVyLCB0cnVlKSkge1xuICAgICAgICBkZWxldGUgdGhpc1trZXldO1xuICAgICAgICBkZWxldGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGVsZXRlZDtcbiAgfVxuXG4gIG5vcm1hbGl6ZShmb3JtYXQpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBjb25zdCBoZWFkZXJzID0ge307XG5cbiAgICB1dGlscyQxLmZvckVhY2godGhpcywgKHZhbHVlLCBoZWFkZXIpID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzJDEuZmluZEtleShoZWFkZXJzLCBoZWFkZXIpO1xuXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIHNlbGZba2V5XSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKTtcbiAgICAgICAgZGVsZXRlIHNlbGZbaGVhZGVyXTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBub3JtYWxpemVkID0gZm9ybWF0ID8gZm9ybWF0SGVhZGVyKGhlYWRlcikgOiBTdHJpbmcoaGVhZGVyKS50cmltKCk7XG5cbiAgICAgIGlmIChub3JtYWxpemVkICE9PSBoZWFkZXIpIHtcbiAgICAgICAgZGVsZXRlIHNlbGZbaGVhZGVyXTtcbiAgICAgIH1cblxuICAgICAgc2VsZltub3JtYWxpemVkXSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKTtcblxuICAgICAgaGVhZGVyc1tub3JtYWxpemVkXSA9IHRydWU7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGNvbmNhdCguLi50YXJnZXRzKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IuY29uY2F0KHRoaXMsIC4uLnRhcmdldHMpO1xuICB9XG5cbiAgdG9KU09OKGFzU3RyaW5ncykge1xuICAgIGNvbnN0IG9iaiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICB1dGlscyQxLmZvckVhY2godGhpcywgKHZhbHVlLCBoZWFkZXIpID0+IHtcbiAgICAgIHZhbHVlICE9IG51bGwgJiYgdmFsdWUgIT09IGZhbHNlICYmIChvYmpbaGVhZGVyXSA9IGFzU3RyaW5ncyAmJiB1dGlscyQxLmlzQXJyYXkodmFsdWUpID8gdmFsdWUuam9pbignLCAnKSA6IHZhbHVlKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSlbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpLm1hcCgoW2hlYWRlciwgdmFsdWVdKSA9PiBoZWFkZXIgKyAnOiAnICsgdmFsdWUpLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgIHJldHVybiAnQXhpb3NIZWFkZXJzJztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tKHRoaW5nKSB7XG4gICAgcmV0dXJuIHRoaW5nIGluc3RhbmNlb2YgdGhpcyA/IHRoaW5nIDogbmV3IHRoaXModGhpbmcpO1xuICB9XG5cbiAgc3RhdGljIGNvbmNhdChmaXJzdCwgLi4udGFyZ2V0cykge1xuICAgIGNvbnN0IGNvbXB1dGVkID0gbmV3IHRoaXMoZmlyc3QpO1xuXG4gICAgdGFyZ2V0cy5mb3JFYWNoKCh0YXJnZXQpID0+IGNvbXB1dGVkLnNldCh0YXJnZXQpKTtcblxuICAgIHJldHVybiBjb21wdXRlZDtcbiAgfVxuXG4gIHN0YXRpYyBhY2Nlc3NvcihoZWFkZXIpIHtcbiAgICBjb25zdCBpbnRlcm5hbHMgPSB0aGlzWyRpbnRlcm5hbHNdID0gKHRoaXNbJGludGVybmFsc10gPSB7XG4gICAgICBhY2Nlc3NvcnM6IHt9XG4gICAgfSk7XG5cbiAgICBjb25zdCBhY2Nlc3NvcnMgPSBpbnRlcm5hbHMuYWNjZXNzb3JzO1xuICAgIGNvbnN0IHByb3RvdHlwZSA9IHRoaXMucHJvdG90eXBlO1xuXG4gICAgZnVuY3Rpb24gZGVmaW5lQWNjZXNzb3IoX2hlYWRlcikge1xuICAgICAgY29uc3QgbEhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihfaGVhZGVyKTtcblxuICAgICAgaWYgKCFhY2Nlc3NvcnNbbEhlYWRlcl0pIHtcbiAgICAgICAgYnVpbGRBY2Nlc3NvcnMocHJvdG90eXBlLCBfaGVhZGVyKTtcbiAgICAgICAgYWNjZXNzb3JzW2xIZWFkZXJdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB1dGlscyQxLmlzQXJyYXkoaGVhZGVyKSA/IGhlYWRlci5mb3JFYWNoKGRlZmluZUFjY2Vzc29yKSA6IGRlZmluZUFjY2Vzc29yKGhlYWRlcik7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxufVxuXG5BeGlvc0hlYWRlcnMuYWNjZXNzb3IoWydDb250ZW50LVR5cGUnLCAnQ29udGVudC1MZW5ndGgnLCAnQWNjZXB0JywgJ0FjY2VwdC1FbmNvZGluZycsICdVc2VyLUFnZW50JywgJ0F1dGhvcml6YXRpb24nXSk7XG5cbi8vIHJlc2VydmVkIG5hbWVzIGhvdGZpeFxudXRpbHMkMS5yZWR1Y2VEZXNjcmlwdG9ycyhBeGlvc0hlYWRlcnMucHJvdG90eXBlLCAoe3ZhbHVlfSwga2V5KSA9PiB7XG4gIGxldCBtYXBwZWQgPSBrZXlbMF0udG9VcHBlckNhc2UoKSArIGtleS5zbGljZSgxKTsgLy8gbWFwIGBzZXRgID0+IGBTZXRgXG4gIHJldHVybiB7XG4gICAgZ2V0OiAoKSA9PiB2YWx1ZSxcbiAgICBzZXQoaGVhZGVyVmFsdWUpIHtcbiAgICAgIHRoaXNbbWFwcGVkXSA9IGhlYWRlclZhbHVlO1xuICAgIH1cbiAgfVxufSk7XG5cbnV0aWxzJDEuZnJlZXplTWV0aG9kcyhBeGlvc0hlYWRlcnMpO1xuXG52YXIgQXhpb3NIZWFkZXJzJDEgPSBBeGlvc0hlYWRlcnM7XG5cbi8qKlxuICogVHJhbnNmb3JtIHRoZSBkYXRhIGZvciBhIHJlcXVlc3Qgb3IgYSByZXNwb25zZVxuICpcbiAqIEBwYXJhbSB7QXJyYXl8RnVuY3Rpb259IGZucyBBIHNpbmdsZSBmdW5jdGlvbiBvciBBcnJheSBvZiBmdW5jdGlvbnNcbiAqIEBwYXJhbSB7P09iamVjdH0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlIG9iamVjdFxuICpcbiAqIEByZXR1cm5zIHsqfSBUaGUgcmVzdWx0aW5nIHRyYW5zZm9ybWVkIGRhdGFcbiAqL1xuZnVuY3Rpb24gdHJhbnNmb3JtRGF0YShmbnMsIHJlc3BvbnNlKSB7XG4gIGNvbnN0IGNvbmZpZyA9IHRoaXMgfHwgZGVmYXVsdHMkMTtcbiAgY29uc3QgY29udGV4dCA9IHJlc3BvbnNlIHx8IGNvbmZpZztcbiAgY29uc3QgaGVhZGVycyA9IEF4aW9zSGVhZGVycyQxLmZyb20oY29udGV4dC5oZWFkZXJzKTtcbiAgbGV0IGRhdGEgPSBjb250ZXh0LmRhdGE7XG5cbiAgdXRpbHMkMS5mb3JFYWNoKGZucywgZnVuY3Rpb24gdHJhbnNmb3JtKGZuKSB7XG4gICAgZGF0YSA9IGZuLmNhbGwoY29uZmlnLCBkYXRhLCBoZWFkZXJzLm5vcm1hbGl6ZSgpLCByZXNwb25zZSA/IHJlc3BvbnNlLnN0YXR1cyA6IHVuZGVmaW5lZCk7XG4gIH0pO1xuXG4gIGhlYWRlcnMubm9ybWFsaXplKCk7XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbmZ1bmN0aW9uIGlzQ2FuY2VsKHZhbHVlKSB7XG4gIHJldHVybiAhISh2YWx1ZSAmJiB2YWx1ZS5fX0NBTkNFTF9fKTtcbn1cblxuLyoqXG4gKiBBIGBDYW5jZWxlZEVycm9yYCBpcyBhbiBvYmplY3QgdGhhdCBpcyB0aHJvd24gd2hlbiBhbiBvcGVyYXRpb24gaXMgY2FuY2VsZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmc9fSBtZXNzYWdlIFRoZSBtZXNzYWdlLlxuICogQHBhcmFtIHtPYmplY3Q9fSBjb25maWcgVGhlIGNvbmZpZy5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gcmVxdWVzdCBUaGUgcmVxdWVzdC5cbiAqXG4gKiBAcmV0dXJucyB7Q2FuY2VsZWRFcnJvcn0gVGhlIGNyZWF0ZWQgZXJyb3IuXG4gKi9cbmZ1bmN0aW9uIENhbmNlbGVkRXJyb3IobWVzc2FnZSwgY29uZmlnLCByZXF1ZXN0KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lcS1udWxsLGVxZXFlcVxuICBBeGlvc0Vycm9yLmNhbGwodGhpcywgbWVzc2FnZSA9PSBudWxsID8gJ2NhbmNlbGVkJyA6IG1lc3NhZ2UsIEF4aW9zRXJyb3IuRVJSX0NBTkNFTEVELCBjb25maWcsIHJlcXVlc3QpO1xuICB0aGlzLm5hbWUgPSAnQ2FuY2VsZWRFcnJvcic7XG59XG5cbnV0aWxzJDEuaW5oZXJpdHMoQ2FuY2VsZWRFcnJvciwgQXhpb3NFcnJvciwge1xuICBfX0NBTkNFTF9fOiB0cnVlXG59KTtcblxuLyoqXG4gKiBSZXNvbHZlIG9yIHJlamVjdCBhIFByb21pc2UgYmFzZWQgb24gcmVzcG9uc2Ugc3RhdHVzLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlc29sdmUgQSBmdW5jdGlvbiB0aGF0IHJlc29sdmVzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0IEEgZnVuY3Rpb24gdGhhdCByZWplY3RzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtvYmplY3R9IHJlc3BvbnNlIFRoZSByZXNwb25zZS5cbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBUaGUgcmVzcG9uc2UuXG4gKi9cbmZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKSB7XG4gIGNvbnN0IHZhbGlkYXRlU3RhdHVzID0gcmVzcG9uc2UuY29uZmlnLnZhbGlkYXRlU3RhdHVzO1xuICBpZiAoIXJlc3BvbnNlLnN0YXR1cyB8fCAhdmFsaWRhdGVTdGF0dXMgfHwgdmFsaWRhdGVTdGF0dXMocmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICB9IGVsc2Uge1xuICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcihcbiAgICAgICdSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICcgKyByZXNwb25zZS5zdGF0dXMsXG4gICAgICBbQXhpb3NFcnJvci5FUlJfQkFEX1JFUVVFU1QsIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcihyZXNwb25zZS5zdGF0dXMgLyAxMDApIC0gNF0sXG4gICAgICByZXNwb25zZS5jb25maWcsXG4gICAgICByZXNwb25zZS5yZXF1ZXN0LFxuICAgICAgcmVzcG9uc2VcbiAgICApKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZVByb3RvY29sKHVybCkge1xuICBjb25zdCBtYXRjaCA9IC9eKFstK1xcd117MSwyNX0pKDo/XFwvXFwvfDopLy5leGVjKHVybCk7XG4gIHJldHVybiBtYXRjaCAmJiBtYXRjaFsxXSB8fCAnJztcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGUgZGF0YSBtYXhSYXRlXG4gKiBAcGFyYW0ge051bWJlcn0gW3NhbXBsZXNDb3VudD0gMTBdXG4gKiBAcGFyYW0ge051bWJlcn0gW21pbj0gMTAwMF1cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gc3BlZWRvbWV0ZXIoc2FtcGxlc0NvdW50LCBtaW4pIHtcbiAgc2FtcGxlc0NvdW50ID0gc2FtcGxlc0NvdW50IHx8IDEwO1xuICBjb25zdCBieXRlcyA9IG5ldyBBcnJheShzYW1wbGVzQ291bnQpO1xuICBjb25zdCB0aW1lc3RhbXBzID0gbmV3IEFycmF5KHNhbXBsZXNDb3VudCk7XG4gIGxldCBoZWFkID0gMDtcbiAgbGV0IHRhaWwgPSAwO1xuICBsZXQgZmlyc3RTYW1wbGVUUztcblxuICBtaW4gPSBtaW4gIT09IHVuZGVmaW5lZCA/IG1pbiA6IDEwMDA7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIHB1c2goY2h1bmtMZW5ndGgpIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgY29uc3Qgc3RhcnRlZEF0ID0gdGltZXN0YW1wc1t0YWlsXTtcblxuICAgIGlmICghZmlyc3RTYW1wbGVUUykge1xuICAgICAgZmlyc3RTYW1wbGVUUyA9IG5vdztcbiAgICB9XG5cbiAgICBieXRlc1toZWFkXSA9IGNodW5rTGVuZ3RoO1xuICAgIHRpbWVzdGFtcHNbaGVhZF0gPSBub3c7XG5cbiAgICBsZXQgaSA9IHRhaWw7XG4gICAgbGV0IGJ5dGVzQ291bnQgPSAwO1xuXG4gICAgd2hpbGUgKGkgIT09IGhlYWQpIHtcbiAgICAgIGJ5dGVzQ291bnQgKz0gYnl0ZXNbaSsrXTtcbiAgICAgIGkgPSBpICUgc2FtcGxlc0NvdW50O1xuICAgIH1cblxuICAgIGhlYWQgPSAoaGVhZCArIDEpICUgc2FtcGxlc0NvdW50O1xuXG4gICAgaWYgKGhlYWQgPT09IHRhaWwpIHtcbiAgICAgIHRhaWwgPSAodGFpbCArIDEpICUgc2FtcGxlc0NvdW50O1xuICAgIH1cblxuICAgIGlmIChub3cgLSBmaXJzdFNhbXBsZVRTIDwgbWluKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGFzc2VkID0gc3RhcnRlZEF0ICYmIG5vdyAtIHN0YXJ0ZWRBdDtcblxuICAgIHJldHVybiBwYXNzZWQgPyBNYXRoLnJvdW5kKGJ5dGVzQ291bnQgKiAxMDAwIC8gcGFzc2VkKSA6IHVuZGVmaW5lZDtcbiAgfTtcbn1cblxuLyoqXG4gKiBUaHJvdHRsZSBkZWNvcmF0b3JcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcGFyYW0ge051bWJlcn0gZnJlcVxuICogQHJldHVybiB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIHRocm90dGxlKGZuLCBmcmVxKSB7XG4gIGxldCB0aW1lc3RhbXAgPSAwO1xuICBsZXQgdGhyZXNob2xkID0gMTAwMCAvIGZyZXE7XG4gIGxldCBsYXN0QXJncztcbiAgbGV0IHRpbWVyO1xuXG4gIGNvbnN0IGludm9rZSA9IChhcmdzLCBub3cgPSBEYXRlLm5vdygpKSA9PiB7XG4gICAgdGltZXN0YW1wID0gbm93O1xuICAgIGxhc3RBcmdzID0gbnVsbDtcbiAgICBpZiAodGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICB0aW1lciA9IG51bGw7XG4gICAgfVxuICAgIGZuLmFwcGx5KG51bGwsIGFyZ3MpO1xuICB9O1xuXG4gIGNvbnN0IHRocm90dGxlZCA9ICguLi5hcmdzKSA9PiB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBwYXNzZWQgPSBub3cgLSB0aW1lc3RhbXA7XG4gICAgaWYgKCBwYXNzZWQgPj0gdGhyZXNob2xkKSB7XG4gICAgICBpbnZva2UoYXJncywgbm93KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGFzdEFyZ3MgPSBhcmdzO1xuICAgICAgaWYgKCF0aW1lcikge1xuICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRpbWVyID0gbnVsbDtcbiAgICAgICAgICBpbnZva2UobGFzdEFyZ3MpO1xuICAgICAgICB9LCB0aHJlc2hvbGQgLSBwYXNzZWQpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBjb25zdCBmbHVzaCA9ICgpID0+IGxhc3RBcmdzICYmIGludm9rZShsYXN0QXJncyk7XG5cbiAgcmV0dXJuIFt0aHJvdHRsZWQsIGZsdXNoXTtcbn1cblxuY29uc3QgcHJvZ3Jlc3NFdmVudFJlZHVjZXIgPSAobGlzdGVuZXIsIGlzRG93bmxvYWRTdHJlYW0sIGZyZXEgPSAzKSA9PiB7XG4gIGxldCBieXRlc05vdGlmaWVkID0gMDtcbiAgY29uc3QgX3NwZWVkb21ldGVyID0gc3BlZWRvbWV0ZXIoNTAsIDI1MCk7XG5cbiAgcmV0dXJuIHRocm90dGxlKGUgPT4ge1xuICAgIGNvbnN0IGxvYWRlZCA9IGUubG9hZGVkO1xuICAgIGNvbnN0IHRvdGFsID0gZS5sZW5ndGhDb21wdXRhYmxlID8gZS50b3RhbCA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBwcm9ncmVzc0J5dGVzID0gbG9hZGVkIC0gYnl0ZXNOb3RpZmllZDtcbiAgICBjb25zdCByYXRlID0gX3NwZWVkb21ldGVyKHByb2dyZXNzQnl0ZXMpO1xuICAgIGNvbnN0IGluUmFuZ2UgPSBsb2FkZWQgPD0gdG90YWw7XG5cbiAgICBieXRlc05vdGlmaWVkID0gbG9hZGVkO1xuXG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIGxvYWRlZCxcbiAgICAgIHRvdGFsLFxuICAgICAgcHJvZ3Jlc3M6IHRvdGFsID8gKGxvYWRlZCAvIHRvdGFsKSA6IHVuZGVmaW5lZCxcbiAgICAgIGJ5dGVzOiBwcm9ncmVzc0J5dGVzLFxuICAgICAgcmF0ZTogcmF0ZSA/IHJhdGUgOiB1bmRlZmluZWQsXG4gICAgICBlc3RpbWF0ZWQ6IHJhdGUgJiYgdG90YWwgJiYgaW5SYW5nZSA/ICh0b3RhbCAtIGxvYWRlZCkgLyByYXRlIDogdW5kZWZpbmVkLFxuICAgICAgZXZlbnQ6IGUsXG4gICAgICBsZW5ndGhDb21wdXRhYmxlOiB0b3RhbCAhPSBudWxsLFxuICAgICAgW2lzRG93bmxvYWRTdHJlYW0gPyAnZG93bmxvYWQnIDogJ3VwbG9hZCddOiB0cnVlXG4gICAgfTtcblxuICAgIGxpc3RlbmVyKGRhdGEpO1xuICB9LCBmcmVxKTtcbn07XG5cbmNvbnN0IHByb2dyZXNzRXZlbnREZWNvcmF0b3IgPSAodG90YWwsIHRocm90dGxlZCkgPT4ge1xuICBjb25zdCBsZW5ndGhDb21wdXRhYmxlID0gdG90YWwgIT0gbnVsbDtcblxuICByZXR1cm4gWyhsb2FkZWQpID0+IHRocm90dGxlZFswXSh7XG4gICAgbGVuZ3RoQ29tcHV0YWJsZSxcbiAgICB0b3RhbCxcbiAgICBsb2FkZWRcbiAgfSksIHRocm90dGxlZFsxXV07XG59O1xuXG5jb25zdCBhc3luY0RlY29yYXRvciA9IChmbikgPT4gKC4uLmFyZ3MpID0+IHV0aWxzJDEuYXNhcCgoKSA9PiBmbiguLi5hcmdzKSk7XG5cbnZhciBpc1VSTFNhbWVPcmlnaW4gPSBwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYgP1xuXG4vLyBTdGFuZGFyZCBicm93c2VyIGVudnMgaGF2ZSBmdWxsIHN1cHBvcnQgb2YgdGhlIEFQSXMgbmVlZGVkIHRvIHRlc3Rcbi8vIHdoZXRoZXIgdGhlIHJlcXVlc3QgVVJMIGlzIG9mIHRoZSBzYW1lIG9yaWdpbiBhcyBjdXJyZW50IGxvY2F0aW9uLlxuICAoZnVuY3Rpb24gc3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgIGNvbnN0IG1zaWUgPSAvKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuICAgIGNvbnN0IHVybFBhcnNpbmdOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIGxldCBvcmlnaW5VUkw7XG5cbiAgICAvKipcbiAgICAqIFBhcnNlIGEgVVJMIHRvIGRpc2NvdmVyIGl0cyBjb21wb25lbnRzXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHVybCBUaGUgVVJMIHRvIGJlIHBhcnNlZFxuICAgICogQHJldHVybnMge09iamVjdH1cbiAgICAqL1xuICAgIGZ1bmN0aW9uIHJlc29sdmVVUkwodXJsKSB7XG4gICAgICBsZXQgaHJlZiA9IHVybDtcblxuICAgICAgaWYgKG1zaWUpIHtcbiAgICAgICAgLy8gSUUgbmVlZHMgYXR0cmlidXRlIHNldCB0d2ljZSB0byBub3JtYWxpemUgcHJvcGVydGllc1xuICAgICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcbiAgICAgICAgaHJlZiA9IHVybFBhcnNpbmdOb2RlLmhyZWY7XG4gICAgICB9XG5cbiAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuXG4gICAgICAvLyB1cmxQYXJzaW5nTm9kZSBwcm92aWRlcyB0aGUgVXJsVXRpbHMgaW50ZXJmYWNlIC0gaHR0cDovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3VybHV0aWxzXG4gICAgICByZXR1cm4ge1xuICAgICAgICBocmVmOiB1cmxQYXJzaW5nTm9kZS5ocmVmLFxuICAgICAgICBwcm90b2NvbDogdXJsUGFyc2luZ05vZGUucHJvdG9jb2wgPyB1cmxQYXJzaW5nTm9kZS5wcm90b2NvbC5yZXBsYWNlKC86JC8sICcnKSA6ICcnLFxuICAgICAgICBob3N0OiB1cmxQYXJzaW5nTm9kZS5ob3N0LFxuICAgICAgICBzZWFyY2g6IHVybFBhcnNpbmdOb2RlLnNlYXJjaCA/IHVybFBhcnNpbmdOb2RlLnNlYXJjaC5yZXBsYWNlKC9eXFw/LywgJycpIDogJycsXG4gICAgICAgIGhhc2g6IHVybFBhcnNpbmdOb2RlLmhhc2ggPyB1cmxQYXJzaW5nTm9kZS5oYXNoLnJlcGxhY2UoL14jLywgJycpIDogJycsXG4gICAgICAgIGhvc3RuYW1lOiB1cmxQYXJzaW5nTm9kZS5ob3N0bmFtZSxcbiAgICAgICAgcG9ydDogdXJsUGFyc2luZ05vZGUucG9ydCxcbiAgICAgICAgcGF0aG5hbWU6ICh1cmxQYXJzaW5nTm9kZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJykgP1xuICAgICAgICAgIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lIDpcbiAgICAgICAgICAnLycgKyB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBvcmlnaW5VUkwgPSByZXNvbHZlVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcblxuICAgIC8qKlxuICAgICogRGV0ZXJtaW5lIGlmIGEgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4gYXMgdGhlIGN1cnJlbnQgbG9jYXRpb25cbiAgICAqXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gcmVxdWVzdFVSTCBUaGUgVVJMIHRvIHRlc3RcbiAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luLCBvdGhlcndpc2UgZmFsc2VcbiAgICAqL1xuICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4ocmVxdWVzdFVSTCkge1xuICAgICAgY29uc3QgcGFyc2VkID0gKHV0aWxzJDEuaXNTdHJpbmcocmVxdWVzdFVSTCkpID8gcmVzb2x2ZVVSTChyZXF1ZXN0VVJMKSA6IHJlcXVlc3RVUkw7XG4gICAgICByZXR1cm4gKHBhcnNlZC5wcm90b2NvbCA9PT0gb3JpZ2luVVJMLnByb3RvY29sICYmXG4gICAgICAgICAgcGFyc2VkLmhvc3QgPT09IG9yaWdpblVSTC5ob3N0KTtcbiAgICB9O1xuICB9KSgpIDpcblxuICAvLyBOb24gc3RhbmRhcmQgYnJvd3NlciBlbnZzICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICAoZnVuY3Rpb24gbm9uU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4oKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICB9KSgpO1xuXG52YXIgY29va2llcyA9IHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudiA/XG5cbiAgLy8gU3RhbmRhcmQgYnJvd3NlciBlbnZzIHN1cHBvcnQgZG9jdW1lbnQuY29va2llXG4gIHtcbiAgICB3cml0ZShuYW1lLCB2YWx1ZSwgZXhwaXJlcywgcGF0aCwgZG9tYWluLCBzZWN1cmUpIHtcbiAgICAgIGNvbnN0IGNvb2tpZSA9IFtuYW1lICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKV07XG5cbiAgICAgIHV0aWxzJDEuaXNOdW1iZXIoZXhwaXJlcykgJiYgY29va2llLnB1c2goJ2V4cGlyZXM9JyArIG5ldyBEYXRlKGV4cGlyZXMpLnRvR01UU3RyaW5nKCkpO1xuXG4gICAgICB1dGlscyQxLmlzU3RyaW5nKHBhdGgpICYmIGNvb2tpZS5wdXNoKCdwYXRoPScgKyBwYXRoKTtcblxuICAgICAgdXRpbHMkMS5pc1N0cmluZyhkb21haW4pICYmIGNvb2tpZS5wdXNoKCdkb21haW49JyArIGRvbWFpbik7XG5cbiAgICAgIHNlY3VyZSA9PT0gdHJ1ZSAmJiBjb29raWUucHVzaCgnc2VjdXJlJyk7XG5cbiAgICAgIGRvY3VtZW50LmNvb2tpZSA9IGNvb2tpZS5qb2luKCc7ICcpO1xuICAgIH0sXG5cbiAgICByZWFkKG5hbWUpIHtcbiAgICAgIGNvbnN0IG1hdGNoID0gZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoJyhefDtcXFxccyopKCcgKyBuYW1lICsgJyk9KFteO10qKScpKTtcbiAgICAgIHJldHVybiAobWF0Y2ggPyBkZWNvZGVVUklDb21wb25lbnQobWF0Y2hbM10pIDogbnVsbCk7XG4gICAgfSxcblxuICAgIHJlbW92ZShuYW1lKSB7XG4gICAgICB0aGlzLndyaXRlKG5hbWUsICcnLCBEYXRlLm5vdygpIC0gODY0MDAwMDApO1xuICAgIH1cbiAgfVxuXG4gIDpcblxuICAvLyBOb24tc3RhbmRhcmQgYnJvd3NlciBlbnYgKHdlYiB3b3JrZXJzLCByZWFjdC1uYXRpdmUpIGxhY2sgbmVlZGVkIHN1cHBvcnQuXG4gIHtcbiAgICB3cml0ZSgpIHt9LFxuICAgIHJlYWQoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuICAgIHJlbW92ZSgpIHt9XG4gIH07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgVVJMIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQWJzb2x1dGVVUkwodXJsKSB7XG4gIC8vIEEgVVJMIGlzIGNvbnNpZGVyZWQgYWJzb2x1dGUgaWYgaXQgYmVnaW5zIHdpdGggXCI8c2NoZW1lPjovL1wiIG9yIFwiLy9cIiAocHJvdG9jb2wtcmVsYXRpdmUgVVJMKS5cbiAgLy8gUkZDIDM5ODYgZGVmaW5lcyBzY2hlbWUgbmFtZSBhcyBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgYmVnaW5uaW5nIHdpdGggYSBsZXR0ZXIgYW5kIGZvbGxvd2VkXG4gIC8vIGJ5IGFueSBjb21iaW5hdGlvbiBvZiBsZXR0ZXJzLCBkaWdpdHMsIHBsdXMsIHBlcmlvZCwgb3IgaHlwaGVuLlxuICByZXR1cm4gL14oW2Etel1bYS16XFxkK1xcLS5dKjopP1xcL1xcLy9pLnRlc3QodXJsKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIHNwZWNpZmllZCBVUkxzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpdmVVUkwgVGhlIHJlbGF0aXZlIFVSTFxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBVUkxcbiAqL1xuZnVuY3Rpb24gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVsYXRpdmVVUkwpIHtcbiAgcmV0dXJuIHJlbGF0aXZlVVJMXG4gICAgPyBiYXNlVVJMLnJlcGxhY2UoL1xcLz9cXC8kLywgJycpICsgJy8nICsgcmVsYXRpdmVVUkwucmVwbGFjZSgvXlxcLysvLCAnJylcbiAgICA6IGJhc2VVUkw7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBiYXNlVVJMIHdpdGggdGhlIHJlcXVlc3RlZFVSTCxcbiAqIG9ubHkgd2hlbiB0aGUgcmVxdWVzdGVkVVJMIGlzIG5vdCBhbHJlYWR5IGFuIGFic29sdXRlIFVSTC5cbiAqIElmIHRoZSByZXF1ZXN0VVJMIGlzIGFic29sdXRlLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHJlcXVlc3RlZFVSTCB1bnRvdWNoZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVxdWVzdGVkVVJMIEFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBjb21iaW5lXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIGZ1bGwgcGF0aFxuICovXG5mdW5jdGlvbiBidWlsZEZ1bGxQYXRoKGJhc2VVUkwsIHJlcXVlc3RlZFVSTCkge1xuICBpZiAoYmFzZVVSTCAmJiAhaXNBYnNvbHV0ZVVSTChyZXF1ZXN0ZWRVUkwpKSB7XG4gICAgcmV0dXJuIGNvbWJpbmVVUkxzKGJhc2VVUkwsIHJlcXVlc3RlZFVSTCk7XG4gIH1cbiAgcmV0dXJuIHJlcXVlc3RlZFVSTDtcbn1cblxuY29uc3QgaGVhZGVyc1RvT2JqZWN0ID0gKHRoaW5nKSA9PiB0aGluZyBpbnN0YW5jZW9mIEF4aW9zSGVhZGVycyQxID8geyAuLi50aGluZyB9IDogdGhpbmc7XG5cbi8qKlxuICogQ29uZmlnLXNwZWNpZmljIG1lcmdlLWZ1bmN0aW9uIHdoaWNoIGNyZWF0ZXMgYSBuZXcgY29uZmlnLW9iamVjdFxuICogYnkgbWVyZ2luZyB0d28gY29uZmlndXJhdGlvbiBvYmplY3RzIHRvZ2V0aGVyLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcxXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMlxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IE5ldyBvYmplY3QgcmVzdWx0aW5nIGZyb20gbWVyZ2luZyBjb25maWcyIHRvIGNvbmZpZzFcbiAqL1xuZnVuY3Rpb24gbWVyZ2VDb25maWcoY29uZmlnMSwgY29uZmlnMikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgY29uZmlnMiA9IGNvbmZpZzIgfHwge307XG4gIGNvbnN0IGNvbmZpZyA9IHt9O1xuXG4gIGZ1bmN0aW9uIGdldE1lcmdlZFZhbHVlKHRhcmdldCwgc291cmNlLCBjYXNlbGVzcykge1xuICAgIGlmICh1dGlscyQxLmlzUGxhaW5PYmplY3QodGFyZ2V0KSAmJiB1dGlscyQxLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzJDEubWVyZ2UuY2FsbCh7Y2FzZWxlc3N9LCB0YXJnZXQsIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscyQxLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzJDEubWVyZ2Uoe30sIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscyQxLmlzQXJyYXkoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHNvdXJjZS5zbGljZSgpO1xuICAgIH1cbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIG1lcmdlRGVlcFByb3BlcnRpZXMoYSwgYiwgY2FzZWxlc3MpIHtcbiAgICBpZiAoIXV0aWxzJDEuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZShhLCBiLCBjYXNlbGVzcyk7XG4gICAgfSBlbHNlIGlmICghdXRpbHMkMS5pc1VuZGVmaW5lZChhKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYSwgY2FzZWxlc3MpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiB2YWx1ZUZyb21Db25maWcyKGEsIGIpIHtcbiAgICBpZiAoIXV0aWxzJDEuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBkZWZhdWx0VG9Db25maWcyKGEsIGIpIHtcbiAgICBpZiAoIXV0aWxzJDEuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGIpO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzJDEuaXNVbmRlZmluZWQoYSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGEpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBtZXJnZURpcmVjdEtleXMoYSwgYiwgcHJvcCkge1xuICAgIGlmIChwcm9wIGluIGNvbmZpZzIpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZShhLCBiKTtcbiAgICB9IGVsc2UgaWYgKHByb3AgaW4gY29uZmlnMSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbWVyZ2VNYXAgPSB7XG4gICAgdXJsOiB2YWx1ZUZyb21Db25maWcyLFxuICAgIG1ldGhvZDogdmFsdWVGcm9tQ29uZmlnMixcbiAgICBkYXRhOiB2YWx1ZUZyb21Db25maWcyLFxuICAgIGJhc2VVUkw6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdHJhbnNmb3JtUmVxdWVzdDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0cmFuc2Zvcm1SZXNwb25zZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBwYXJhbXNTZXJpYWxpemVyOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRpbWVvdXQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdGltZW91dE1lc3NhZ2U6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgd2l0aENyZWRlbnRpYWxzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHdpdGhYU1JGVG9rZW46IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgYWRhcHRlcjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICByZXNwb25zZVR5cGU6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgeHNyZkNvb2tpZU5hbWU6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgeHNyZkhlYWRlck5hbWU6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgb25VcGxvYWRQcm9ncmVzczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBvbkRvd25sb2FkUHJvZ3Jlc3M6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgZGVjb21wcmVzczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBtYXhDb250ZW50TGVuZ3RoOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG1heEJvZHlMZW5ndGg6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgYmVmb3JlUmVkaXJlY3Q6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdHJhbnNwb3J0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGh0dHBBZ2VudDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBodHRwc0FnZW50OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGNhbmNlbFRva2VuOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHNvY2tldFBhdGg6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgcmVzcG9uc2VFbmNvZGluZzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB2YWxpZGF0ZVN0YXR1czogbWVyZ2VEaXJlY3RLZXlzLFxuICAgIGhlYWRlcnM6IChhLCBiKSA9PiBtZXJnZURlZXBQcm9wZXJ0aWVzKGhlYWRlcnNUb09iamVjdChhKSwgaGVhZGVyc1RvT2JqZWN0KGIpLCB0cnVlKVxuICB9O1xuXG4gIHV0aWxzJDEuZm9yRWFjaChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LCBjb25maWcxLCBjb25maWcyKSksIGZ1bmN0aW9uIGNvbXB1dGVDb25maWdWYWx1ZShwcm9wKSB7XG4gICAgY29uc3QgbWVyZ2UgPSBtZXJnZU1hcFtwcm9wXSB8fCBtZXJnZURlZXBQcm9wZXJ0aWVzO1xuICAgIGNvbnN0IGNvbmZpZ1ZhbHVlID0gbWVyZ2UoY29uZmlnMVtwcm9wXSwgY29uZmlnMltwcm9wXSwgcHJvcCk7XG4gICAgKHV0aWxzJDEuaXNVbmRlZmluZWQoY29uZmlnVmFsdWUpICYmIG1lcmdlICE9PSBtZXJnZURpcmVjdEtleXMpIHx8IChjb25maWdbcHJvcF0gPSBjb25maWdWYWx1ZSk7XG4gIH0pO1xuXG4gIHJldHVybiBjb25maWc7XG59XG5cbnZhciByZXNvbHZlQ29uZmlnID0gKGNvbmZpZykgPT4ge1xuICBjb25zdCBuZXdDb25maWcgPSBtZXJnZUNvbmZpZyh7fSwgY29uZmlnKTtcblxuICBsZXQge2RhdGEsIHdpdGhYU1JGVG9rZW4sIHhzcmZIZWFkZXJOYW1lLCB4c3JmQ29va2llTmFtZSwgaGVhZGVycywgYXV0aH0gPSBuZXdDb25maWc7XG5cbiAgbmV3Q29uZmlnLmhlYWRlcnMgPSBoZWFkZXJzID0gQXhpb3NIZWFkZXJzJDEuZnJvbShoZWFkZXJzKTtcblxuICBuZXdDb25maWcudXJsID0gYnVpbGRVUkwoYnVpbGRGdWxsUGF0aChuZXdDb25maWcuYmFzZVVSTCwgbmV3Q29uZmlnLnVybCksIGNvbmZpZy5wYXJhbXMsIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyKTtcblxuICAvLyBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uXG4gIGlmIChhdXRoKSB7XG4gICAgaGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCAnQmFzaWMgJyArXG4gICAgICBidG9hKChhdXRoLnVzZXJuYW1lIHx8ICcnKSArICc6JyArIChhdXRoLnBhc3N3b3JkID8gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGF1dGgucGFzc3dvcmQpKSA6ICcnKSlcbiAgICApO1xuICB9XG5cbiAgbGV0IGNvbnRlbnRUeXBlO1xuXG4gIGlmICh1dGlscyQxLmlzRm9ybURhdGEoZGF0YSkpIHtcbiAgICBpZiAocGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52IHx8IHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudikge1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSh1bmRlZmluZWQpOyAvLyBMZXQgdGhlIGJyb3dzZXIgc2V0IGl0XG4gICAgfSBlbHNlIGlmICgoY29udGVudFR5cGUgPSBoZWFkZXJzLmdldENvbnRlbnRUeXBlKCkpICE9PSBmYWxzZSkge1xuICAgICAgLy8gZml4IHNlbWljb2xvbiBkdXBsaWNhdGlvbiBpc3N1ZSBmb3IgUmVhY3ROYXRpdmUgRm9ybURhdGEgaW1wbGVtZW50YXRpb25cbiAgICAgIGNvbnN0IFt0eXBlLCAuLi50b2tlbnNdID0gY29udGVudFR5cGUgPyBjb250ZW50VHlwZS5zcGxpdCgnOycpLm1hcCh0b2tlbiA9PiB0b2tlbi50cmltKCkpLmZpbHRlcihCb29sZWFuKSA6IFtdO1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZShbdHlwZSB8fCAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsIC4uLnRva2Vuc10uam9pbignOyAnKSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gIC8vIFRoaXMgaXMgb25seSBkb25lIGlmIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50LlxuICAvLyBTcGVjaWZpY2FsbHkgbm90IGlmIHdlJ3JlIGluIGEgd2ViIHdvcmtlciwgb3IgcmVhY3QtbmF0aXZlLlxuXG4gIGlmIChwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYpIHtcbiAgICB3aXRoWFNSRlRva2VuICYmIHV0aWxzJDEuaXNGdW5jdGlvbih3aXRoWFNSRlRva2VuKSAmJiAod2l0aFhTUkZUb2tlbiA9IHdpdGhYU1JGVG9rZW4obmV3Q29uZmlnKSk7XG5cbiAgICBpZiAod2l0aFhTUkZUb2tlbiB8fCAod2l0aFhTUkZUb2tlbiAhPT0gZmFsc2UgJiYgaXNVUkxTYW1lT3JpZ2luKG5ld0NvbmZpZy51cmwpKSkge1xuICAgICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgICBjb25zdCB4c3JmVmFsdWUgPSB4c3JmSGVhZGVyTmFtZSAmJiB4c3JmQ29va2llTmFtZSAmJiBjb29raWVzLnJlYWQoeHNyZkNvb2tpZU5hbWUpO1xuXG4gICAgICBpZiAoeHNyZlZhbHVlKSB7XG4gICAgICAgIGhlYWRlcnMuc2V0KHhzcmZIZWFkZXJOYW1lLCB4c3JmVmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXdDb25maWc7XG59O1xuXG5jb25zdCBpc1hIUkFkYXB0ZXJTdXBwb3J0ZWQgPSB0eXBlb2YgWE1MSHR0cFJlcXVlc3QgIT09ICd1bmRlZmluZWQnO1xuXG52YXIgeGhyQWRhcHRlciA9IGlzWEhSQWRhcHRlclN1cHBvcnRlZCAmJiBmdW5jdGlvbiAoY29uZmlnKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiBkaXNwYXRjaFhoclJlcXVlc3QocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgY29uc3QgX2NvbmZpZyA9IHJlc29sdmVDb25maWcoY29uZmlnKTtcbiAgICBsZXQgcmVxdWVzdERhdGEgPSBfY29uZmlnLmRhdGE7XG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5mcm9tKF9jb25maWcuaGVhZGVycykubm9ybWFsaXplKCk7XG4gICAgbGV0IHtyZXNwb25zZVR5cGUsIG9uVXBsb2FkUHJvZ3Jlc3MsIG9uRG93bmxvYWRQcm9ncmVzc30gPSBfY29uZmlnO1xuICAgIGxldCBvbkNhbmNlbGVkO1xuICAgIGxldCB1cGxvYWRUaHJvdHRsZWQsIGRvd25sb2FkVGhyb3R0bGVkO1xuICAgIGxldCBmbHVzaFVwbG9hZCwgZmx1c2hEb3dubG9hZDtcblxuICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICBmbHVzaFVwbG9hZCAmJiBmbHVzaFVwbG9hZCgpOyAvLyBmbHVzaCBldmVudHNcbiAgICAgIGZsdXNoRG93bmxvYWQgJiYgZmx1c2hEb3dubG9hZCgpOyAvLyBmbHVzaCBldmVudHNcblxuICAgICAgX2NvbmZpZy5jYW5jZWxUb2tlbiAmJiBfY29uZmlnLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKG9uQ2FuY2VsZWQpO1xuXG4gICAgICBfY29uZmlnLnNpZ25hbCAmJiBfY29uZmlnLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgIH1cblxuICAgIGxldCByZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICByZXF1ZXN0Lm9wZW4oX2NvbmZpZy5tZXRob2QudG9VcHBlckNhc2UoKSwgX2NvbmZpZy51cmwsIHRydWUpO1xuXG4gICAgLy8gU2V0IHRoZSByZXF1ZXN0IHRpbWVvdXQgaW4gTVNcbiAgICByZXF1ZXN0LnRpbWVvdXQgPSBfY29uZmlnLnRpbWVvdXQ7XG5cbiAgICBmdW5jdGlvbiBvbmxvYWRlbmQoKSB7XG4gICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gUHJlcGFyZSB0aGUgcmVzcG9uc2VcbiAgICAgIGNvbnN0IHJlc3BvbnNlSGVhZGVycyA9IEF4aW9zSGVhZGVycyQxLmZyb20oXG4gICAgICAgICdnZXRBbGxSZXNwb25zZUhlYWRlcnMnIGluIHJlcXVlc3QgJiYgcmVxdWVzdC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9ICFyZXNwb25zZVR5cGUgfHwgcmVzcG9uc2VUeXBlID09PSAndGV4dCcgfHwgcmVzcG9uc2VUeXBlID09PSAnanNvbicgP1xuICAgICAgICByZXF1ZXN0LnJlc3BvbnNlVGV4dCA6IHJlcXVlc3QucmVzcG9uc2U7XG4gICAgICBjb25zdCByZXNwb25zZSA9IHtcbiAgICAgICAgZGF0YTogcmVzcG9uc2VEYXRhLFxuICAgICAgICBzdGF0dXM6IHJlcXVlc3Quc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXF1ZXN0LnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHJlc3BvbnNlSGVhZGVycyxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXF1ZXN0XG4gICAgICB9O1xuXG4gICAgICBzZXR0bGUoZnVuY3Rpb24gX3Jlc29sdmUodmFsdWUpIHtcbiAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0sIGZ1bmN0aW9uIF9yZWplY3QoZXJyKSB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9LCByZXNwb25zZSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICgnb25sb2FkZW5kJyBpbiByZXF1ZXN0KSB7XG4gICAgICAvLyBVc2Ugb25sb2FkZW5kIGlmIGF2YWlsYWJsZVxuICAgICAgcmVxdWVzdC5vbmxvYWRlbmQgPSBvbmxvYWRlbmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIExpc3RlbiBmb3IgcmVhZHkgc3RhdGUgdG8gZW11bGF0ZSBvbmxvYWRlbmRcbiAgICAgIHJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gaGFuZGxlTG9hZCgpIHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0IHx8IHJlcXVlc3QucmVhZHlTdGF0ZSAhPT0gNCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSByZXF1ZXN0IGVycm9yZWQgb3V0IGFuZCB3ZSBkaWRuJ3QgZ2V0IGEgcmVzcG9uc2UsIHRoaXMgd2lsbCBiZVxuICAgICAgICAvLyBoYW5kbGVkIGJ5IG9uZXJyb3IgaW5zdGVhZFxuICAgICAgICAvLyBXaXRoIG9uZSBleGNlcHRpb246IHJlcXVlc3QgdGhhdCB1c2luZyBmaWxlOiBwcm90b2NvbCwgbW9zdCBicm93c2Vyc1xuICAgICAgICAvLyB3aWxsIHJldHVybiBzdGF0dXMgYXMgMCBldmVuIHRob3VnaCBpdCdzIGEgc3VjY2Vzc2Z1bCByZXF1ZXN0XG4gICAgICAgIGlmIChyZXF1ZXN0LnN0YXR1cyA9PT0gMCAmJiAhKHJlcXVlc3QucmVzcG9uc2VVUkwgJiYgcmVxdWVzdC5yZXNwb25zZVVSTC5pbmRleE9mKCdmaWxlOicpID09PSAwKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyByZWFkeXN0YXRlIGhhbmRsZXIgaXMgY2FsbGluZyBiZWZvcmUgb25lcnJvciBvciBvbnRpbWVvdXQgaGFuZGxlcnMsXG4gICAgICAgIC8vIHNvIHdlIHNob3VsZCBjYWxsIG9ubG9hZGVuZCBvbiB0aGUgbmV4dCAndGljaydcbiAgICAgICAgc2V0VGltZW91dChvbmxvYWRlbmQpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgYnJvd3NlciByZXF1ZXN0IGNhbmNlbGxhdGlvbiAoYXMgb3Bwb3NlZCB0byBhIG1hbnVhbCBjYW5jZWxsYXRpb24pXG4gICAgcmVxdWVzdC5vbmFib3J0ID0gZnVuY3Rpb24gaGFuZGxlQWJvcnQoKSB7XG4gICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ1JlcXVlc3QgYWJvcnRlZCcsIEF4aW9zRXJyb3IuRUNPTk5BQk9SVEVELCBjb25maWcsIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSBsb3cgbGV2ZWwgbmV0d29yayBlcnJvcnNcbiAgICByZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbiBoYW5kbGVFcnJvcigpIHtcbiAgICAgIC8vIFJlYWwgZXJyb3JzIGFyZSBoaWRkZW4gZnJvbSB1cyBieSB0aGUgYnJvd3NlclxuICAgICAgLy8gb25lcnJvciBzaG91bGQgb25seSBmaXJlIGlmIGl0J3MgYSBuZXR3b3JrIGVycm9yXG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ05ldHdvcmsgRXJyb3InLCBBeGlvc0Vycm9yLkVSUl9ORVRXT1JLLCBjb25maWcsIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSB0aW1lb3V0XG4gICAgcmVxdWVzdC5vbnRpbWVvdXQgPSBmdW5jdGlvbiBoYW5kbGVUaW1lb3V0KCkge1xuICAgICAgbGV0IHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBfY29uZmlnLnRpbWVvdXQgPyAndGltZW91dCBvZiAnICsgX2NvbmZpZy50aW1lb3V0ICsgJ21zIGV4Y2VlZGVkJyA6ICd0aW1lb3V0IGV4Y2VlZGVkJztcbiAgICAgIGNvbnN0IHRyYW5zaXRpb25hbCA9IF9jb25maWcudHJhbnNpdGlvbmFsIHx8IHRyYW5zaXRpb25hbERlZmF1bHRzO1xuICAgICAgaWYgKF9jb25maWcudGltZW91dEVycm9yTWVzc2FnZSkge1xuICAgICAgICB0aW1lb3V0RXJyb3JNZXNzYWdlID0gX2NvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlO1xuICAgICAgfVxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICB0aW1lb3V0RXJyb3JNZXNzYWdlLFxuICAgICAgICB0cmFuc2l0aW9uYWwuY2xhcmlmeVRpbWVvdXRFcnJvciA/IEF4aW9zRXJyb3IuRVRJTUVET1VUIDogQXhpb3NFcnJvci5FQ09OTkFCT1JURUQsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gUmVtb3ZlIENvbnRlbnQtVHlwZSBpZiBkYXRhIGlzIHVuZGVmaW5lZFxuICAgIHJlcXVlc3REYXRhID09PSB1bmRlZmluZWQgJiYgcmVxdWVzdEhlYWRlcnMuc2V0Q29udGVudFR5cGUobnVsbCk7XG5cbiAgICAvLyBBZGQgaGVhZGVycyB0byB0aGUgcmVxdWVzdFxuICAgIGlmICgnc2V0UmVxdWVzdEhlYWRlcicgaW4gcmVxdWVzdCkge1xuICAgICAgdXRpbHMkMS5mb3JFYWNoKHJlcXVlc3RIZWFkZXJzLnRvSlNPTigpLCBmdW5jdGlvbiBzZXRSZXF1ZXN0SGVhZGVyKHZhbCwga2V5KSB7XG4gICAgICAgIHJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcihrZXksIHZhbCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBZGQgd2l0aENyZWRlbnRpYWxzIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKCF1dGlscyQxLmlzVW5kZWZpbmVkKF9jb25maWcud2l0aENyZWRlbnRpYWxzKSkge1xuICAgICAgcmVxdWVzdC53aXRoQ3JlZGVudGlhbHMgPSAhIV9jb25maWcud2l0aENyZWRlbnRpYWxzO1xuICAgIH1cblxuICAgIC8vIEFkZCByZXNwb25zZVR5cGUgdG8gcmVxdWVzdCBpZiBuZWVkZWRcbiAgICBpZiAocmVzcG9uc2VUeXBlICYmIHJlc3BvbnNlVHlwZSAhPT0gJ2pzb24nKSB7XG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVHlwZSA9IF9jb25maWcucmVzcG9uc2VUeXBlO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBwcm9ncmVzcyBpZiBuZWVkZWRcbiAgICBpZiAob25Eb3dubG9hZFByb2dyZXNzKSB7XG4gICAgICAoW2Rvd25sb2FkVGhyb3R0bGVkLCBmbHVzaERvd25sb2FkXSA9IHByb2dyZXNzRXZlbnRSZWR1Y2VyKG9uRG93bmxvYWRQcm9ncmVzcywgdHJ1ZSkpO1xuICAgICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGRvd25sb2FkVGhyb3R0bGVkKTtcbiAgICB9XG5cbiAgICAvLyBOb3QgYWxsIGJyb3dzZXJzIHN1cHBvcnQgdXBsb2FkIGV2ZW50c1xuICAgIGlmIChvblVwbG9hZFByb2dyZXNzICYmIHJlcXVlc3QudXBsb2FkKSB7XG4gICAgICAoW3VwbG9hZFRocm90dGxlZCwgZmx1c2hVcGxvYWRdID0gcHJvZ3Jlc3NFdmVudFJlZHVjZXIob25VcGxvYWRQcm9ncmVzcykpO1xuXG4gICAgICByZXF1ZXN0LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHVwbG9hZFRocm90dGxlZCk7XG5cbiAgICAgIHJlcXVlc3QudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlbmQnLCBmbHVzaFVwbG9hZCk7XG4gICAgfVxuXG4gICAgaWYgKF9jb25maWcuY2FuY2VsVG9rZW4gfHwgX2NvbmZpZy5zaWduYWwpIHtcbiAgICAgIC8vIEhhbmRsZSBjYW5jZWxsYXRpb25cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgICBvbkNhbmNlbGVkID0gY2FuY2VsID0+IHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdCghY2FuY2VsIHx8IGNhbmNlbC50eXBlID8gbmV3IENhbmNlbGVkRXJyb3IobnVsbCwgY29uZmlnLCByZXF1ZXN0KSA6IGNhbmNlbCk7XG4gICAgICAgIHJlcXVlc3QuYWJvcnQoKTtcbiAgICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgICB9O1xuXG4gICAgICBfY29uZmlnLmNhbmNlbFRva2VuICYmIF9jb25maWcuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKG9uQ2FuY2VsZWQpO1xuICAgICAgaWYgKF9jb25maWcuc2lnbmFsKSB7XG4gICAgICAgIF9jb25maWcuc2lnbmFsLmFib3J0ZWQgPyBvbkNhbmNlbGVkKCkgOiBfY29uZmlnLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHByb3RvY29sID0gcGFyc2VQcm90b2NvbChfY29uZmlnLnVybCk7XG5cbiAgICBpZiAocHJvdG9jb2wgJiYgcGxhdGZvcm0ucHJvdG9jb2xzLmluZGV4T2YocHJvdG9jb2wpID09PSAtMSkge1xuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdVbnN1cHBvcnRlZCBwcm90b2NvbCAnICsgcHJvdG9jb2wgKyAnOicsIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULCBjb25maWcpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cblxuICAgIC8vIFNlbmQgdGhlIHJlcXVlc3RcbiAgICByZXF1ZXN0LnNlbmQocmVxdWVzdERhdGEgfHwgbnVsbCk7XG4gIH0pO1xufTtcblxuY29uc3QgY29tcG9zZVNpZ25hbHMgPSAoc2lnbmFscywgdGltZW91dCkgPT4ge1xuICBsZXQgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICBsZXQgYWJvcnRlZDtcblxuICBjb25zdCBvbmFib3J0ID0gZnVuY3Rpb24gKGNhbmNlbCkge1xuICAgIGlmICghYWJvcnRlZCkge1xuICAgICAgYWJvcnRlZCA9IHRydWU7XG4gICAgICB1bnN1YnNjcmliZSgpO1xuICAgICAgY29uc3QgZXJyID0gY2FuY2VsIGluc3RhbmNlb2YgRXJyb3IgPyBjYW5jZWwgOiB0aGlzLnJlYXNvbjtcbiAgICAgIGNvbnRyb2xsZXIuYWJvcnQoZXJyIGluc3RhbmNlb2YgQXhpb3NFcnJvciA/IGVyciA6IG5ldyBDYW5jZWxlZEVycm9yKGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBlcnIpKTtcbiAgICB9XG4gIH07XG5cbiAgbGV0IHRpbWVyID0gdGltZW91dCAmJiBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICBvbmFib3J0KG5ldyBBeGlvc0Vycm9yKGB0aW1lb3V0ICR7dGltZW91dH0gb2YgbXMgZXhjZWVkZWRgLCBBeGlvc0Vycm9yLkVUSU1FRE9VVCkpO1xuICB9LCB0aW1lb3V0KTtcblxuICBjb25zdCB1bnN1YnNjcmliZSA9ICgpID0+IHtcbiAgICBpZiAoc2lnbmFscykge1xuICAgICAgdGltZXIgJiYgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgIHRpbWVyID0gbnVsbDtcbiAgICAgIHNpZ25hbHMuZm9yRWFjaChzaWduYWwgPT4ge1xuICAgICAgICBzaWduYWwgJiZcbiAgICAgICAgKHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyID8gc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25hYm9ydCkgOiBzaWduYWwudW5zdWJzY3JpYmUob25hYm9ydCkpO1xuICAgICAgfSk7XG4gICAgICBzaWduYWxzID0gbnVsbDtcbiAgICB9XG4gIH07XG5cbiAgc2lnbmFscy5mb3JFYWNoKChzaWduYWwpID0+IHNpZ25hbCAmJiBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lciAmJiBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbmFib3J0KSk7XG5cbiAgY29uc3Qge3NpZ25hbH0gPSBjb250cm9sbGVyO1xuXG4gIHNpZ25hbC51bnN1YnNjcmliZSA9IHVuc3Vic2NyaWJlO1xuXG4gIHJldHVybiBbc2lnbmFsLCAoKSA9PiB7XG4gICAgdGltZXIgJiYgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICB0aW1lciA9IG51bGw7XG4gIH1dO1xufTtcblxudmFyIGNvbXBvc2VTaWduYWxzJDEgPSBjb21wb3NlU2lnbmFscztcblxuY29uc3Qgc3RyZWFtQ2h1bmsgPSBmdW5jdGlvbiogKGNodW5rLCBjaHVua1NpemUpIHtcbiAgbGV0IGxlbiA9IGNodW5rLmJ5dGVMZW5ndGg7XG5cbiAgaWYgKCFjaHVua1NpemUgfHwgbGVuIDwgY2h1bmtTaXplKSB7XG4gICAgeWllbGQgY2h1bms7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IHBvcyA9IDA7XG4gIGxldCBlbmQ7XG5cbiAgd2hpbGUgKHBvcyA8IGxlbikge1xuICAgIGVuZCA9IHBvcyArIGNodW5rU2l6ZTtcbiAgICB5aWVsZCBjaHVuay5zbGljZShwb3MsIGVuZCk7XG4gICAgcG9zID0gZW5kO1xuICB9XG59O1xuXG5jb25zdCByZWFkQnl0ZXMgPSBhc3luYyBmdW5jdGlvbiogKGl0ZXJhYmxlLCBjaHVua1NpemUsIGVuY29kZSkge1xuICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGl0ZXJhYmxlKSB7XG4gICAgeWllbGQqIHN0cmVhbUNodW5rKEFycmF5QnVmZmVyLmlzVmlldyhjaHVuaykgPyBjaHVuayA6IChhd2FpdCBlbmNvZGUoU3RyaW5nKGNodW5rKSkpLCBjaHVua1NpemUpO1xuICB9XG59O1xuXG5jb25zdCB0cmFja1N0cmVhbSA9IChzdHJlYW0sIGNodW5rU2l6ZSwgb25Qcm9ncmVzcywgb25GaW5pc2gsIGVuY29kZSkgPT4ge1xuICBjb25zdCBpdGVyYXRvciA9IHJlYWRCeXRlcyhzdHJlYW0sIGNodW5rU2l6ZSwgZW5jb2RlKTtcblxuICBsZXQgYnl0ZXMgPSAwO1xuICBsZXQgZG9uZTtcbiAgbGV0IF9vbkZpbmlzaCA9IChlKSA9PiB7XG4gICAgaWYgKCFkb25lKSB7XG4gICAgICBkb25lID0gdHJ1ZTtcbiAgICAgIG9uRmluaXNoICYmIG9uRmluaXNoKGUpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHtcbiAgICBhc3luYyBwdWxsKGNvbnRyb2xsZXIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHtkb25lLCB2YWx1ZX0gPSBhd2FpdCBpdGVyYXRvci5uZXh0KCk7XG5cbiAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgIF9vbkZpbmlzaCgpO1xuICAgICAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbGVuID0gdmFsdWUuYnl0ZUxlbmd0aDtcbiAgICAgICAgaWYgKG9uUHJvZ3Jlc3MpIHtcbiAgICAgICAgICBsZXQgbG9hZGVkQnl0ZXMgPSBieXRlcyArPSBsZW47XG4gICAgICAgICAgb25Qcm9ncmVzcyhsb2FkZWRCeXRlcyk7XG4gICAgICAgIH1cbiAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KHZhbHVlKSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgX29uRmluaXNoKGVycik7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9LFxuICAgIGNhbmNlbChyZWFzb24pIHtcbiAgICAgIF9vbkZpbmlzaChyZWFzb24pO1xuICAgICAgcmV0dXJuIGl0ZXJhdG9yLnJldHVybigpO1xuICAgIH1cbiAgfSwge1xuICAgIGhpZ2hXYXRlck1hcms6IDJcbiAgfSlcbn07XG5cbmNvbnN0IGlzRmV0Y2hTdXBwb3J0ZWQgPSB0eXBlb2YgZmV0Y2ggPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFJlcXVlc3QgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFJlc3BvbnNlID09PSAnZnVuY3Rpb24nO1xuY29uc3QgaXNSZWFkYWJsZVN0cmVhbVN1cHBvcnRlZCA9IGlzRmV0Y2hTdXBwb3J0ZWQgJiYgdHlwZW9mIFJlYWRhYmxlU3RyZWFtID09PSAnZnVuY3Rpb24nO1xuXG4vLyB1c2VkIG9ubHkgaW5zaWRlIHRoZSBmZXRjaCBhZGFwdGVyXG5jb25zdCBlbmNvZGVUZXh0ID0gaXNGZXRjaFN1cHBvcnRlZCAmJiAodHlwZW9mIFRleHRFbmNvZGVyID09PSAnZnVuY3Rpb24nID9cbiAgICAoKGVuY29kZXIpID0+IChzdHIpID0+IGVuY29kZXIuZW5jb2RlKHN0cikpKG5ldyBUZXh0RW5jb2RlcigpKSA6XG4gICAgYXN5bmMgKHN0cikgPT4gbmV3IFVpbnQ4QXJyYXkoYXdhaXQgbmV3IFJlc3BvbnNlKHN0cikuYXJyYXlCdWZmZXIoKSlcbik7XG5cbmNvbnN0IHRlc3QgPSAoZm4sIC4uLmFyZ3MpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFmbiguLi5hcmdzKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59O1xuXG5jb25zdCBzdXBwb3J0c1JlcXVlc3RTdHJlYW0gPSBpc1JlYWRhYmxlU3RyZWFtU3VwcG9ydGVkICYmIHRlc3QoKCkgPT4ge1xuICBsZXQgZHVwbGV4QWNjZXNzZWQgPSBmYWxzZTtcblxuICBjb25zdCBoYXNDb250ZW50VHlwZSA9IG5ldyBSZXF1ZXN0KHBsYXRmb3JtLm9yaWdpbiwge1xuICAgIGJvZHk6IG5ldyBSZWFkYWJsZVN0cmVhbSgpLFxuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIGdldCBkdXBsZXgoKSB7XG4gICAgICBkdXBsZXhBY2Nlc3NlZCA9IHRydWU7XG4gICAgICByZXR1cm4gJ2hhbGYnO1xuICAgIH0sXG4gIH0pLmhlYWRlcnMuaGFzKCdDb250ZW50LVR5cGUnKTtcblxuICByZXR1cm4gZHVwbGV4QWNjZXNzZWQgJiYgIWhhc0NvbnRlbnRUeXBlO1xufSk7XG5cbmNvbnN0IERFRkFVTFRfQ0hVTktfU0laRSA9IDY0ICogMTAyNDtcblxuY29uc3Qgc3VwcG9ydHNSZXNwb25zZVN0cmVhbSA9IGlzUmVhZGFibGVTdHJlYW1TdXBwb3J0ZWQgJiZcbiAgdGVzdCgoKSA9PiB1dGlscyQxLmlzUmVhZGFibGVTdHJlYW0obmV3IFJlc3BvbnNlKCcnKS5ib2R5KSk7XG5cblxuY29uc3QgcmVzb2x2ZXJzID0ge1xuICBzdHJlYW06IHN1cHBvcnRzUmVzcG9uc2VTdHJlYW0gJiYgKChyZXMpID0+IHJlcy5ib2R5KVxufTtcblxuaXNGZXRjaFN1cHBvcnRlZCAmJiAoKChyZXMpID0+IHtcbiAgWyd0ZXh0JywgJ2FycmF5QnVmZmVyJywgJ2Jsb2InLCAnZm9ybURhdGEnLCAnc3RyZWFtJ10uZm9yRWFjaCh0eXBlID0+IHtcbiAgICAhcmVzb2x2ZXJzW3R5cGVdICYmIChyZXNvbHZlcnNbdHlwZV0gPSB1dGlscyQxLmlzRnVuY3Rpb24ocmVzW3R5cGVdKSA/IChyZXMpID0+IHJlc1t0eXBlXSgpIDpcbiAgICAgIChfLCBjb25maWcpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoYFJlc3BvbnNlIHR5cGUgJyR7dHlwZX0nIGlzIG5vdCBzdXBwb3J0ZWRgLCBBeGlvc0Vycm9yLkVSUl9OT1RfU1VQUE9SVCwgY29uZmlnKTtcbiAgICAgIH0pO1xuICB9KTtcbn0pKG5ldyBSZXNwb25zZSkpO1xuXG5jb25zdCBnZXRCb2R5TGVuZ3RoID0gYXN5bmMgKGJvZHkpID0+IHtcbiAgaWYgKGJvZHkgPT0gbnVsbCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgaWYodXRpbHMkMS5pc0Jsb2IoYm9keSkpIHtcbiAgICByZXR1cm4gYm9keS5zaXplO1xuICB9XG5cbiAgaWYodXRpbHMkMS5pc1NwZWNDb21wbGlhbnRGb3JtKGJvZHkpKSB7XG4gICAgcmV0dXJuIChhd2FpdCBuZXcgUmVxdWVzdChib2R5KS5hcnJheUJ1ZmZlcigpKS5ieXRlTGVuZ3RoO1xuICB9XG5cbiAgaWYodXRpbHMkMS5pc0FycmF5QnVmZmVyVmlldyhib2R5KSB8fCB1dGlscyQxLmlzQXJyYXlCdWZmZXIoYm9keSkpIHtcbiAgICByZXR1cm4gYm9keS5ieXRlTGVuZ3RoO1xuICB9XG5cbiAgaWYodXRpbHMkMS5pc1VSTFNlYXJjaFBhcmFtcyhib2R5KSkge1xuICAgIGJvZHkgPSBib2R5ICsgJyc7XG4gIH1cblxuICBpZih1dGlscyQxLmlzU3RyaW5nKGJvZHkpKSB7XG4gICAgcmV0dXJuIChhd2FpdCBlbmNvZGVUZXh0KGJvZHkpKS5ieXRlTGVuZ3RoO1xuICB9XG59O1xuXG5jb25zdCByZXNvbHZlQm9keUxlbmd0aCA9IGFzeW5jIChoZWFkZXJzLCBib2R5KSA9PiB7XG4gIGNvbnN0IGxlbmd0aCA9IHV0aWxzJDEudG9GaW5pdGVOdW1iZXIoaGVhZGVycy5nZXRDb250ZW50TGVuZ3RoKCkpO1xuXG4gIHJldHVybiBsZW5ndGggPT0gbnVsbCA/IGdldEJvZHlMZW5ndGgoYm9keSkgOiBsZW5ndGg7XG59O1xuXG52YXIgZmV0Y2hBZGFwdGVyID0gaXNGZXRjaFN1cHBvcnRlZCAmJiAoYXN5bmMgKGNvbmZpZykgPT4ge1xuICBsZXQge1xuICAgIHVybCxcbiAgICBtZXRob2QsXG4gICAgZGF0YSxcbiAgICBzaWduYWwsXG4gICAgY2FuY2VsVG9rZW4sXG4gICAgdGltZW91dCxcbiAgICBvbkRvd25sb2FkUHJvZ3Jlc3MsXG4gICAgb25VcGxvYWRQcm9ncmVzcyxcbiAgICByZXNwb25zZVR5cGUsXG4gICAgaGVhZGVycyxcbiAgICB3aXRoQ3JlZGVudGlhbHMgPSAnc2FtZS1vcmlnaW4nLFxuICAgIGZldGNoT3B0aW9uc1xuICB9ID0gcmVzb2x2ZUNvbmZpZyhjb25maWcpO1xuXG4gIHJlc3BvbnNlVHlwZSA9IHJlc3BvbnNlVHlwZSA/IChyZXNwb25zZVR5cGUgKyAnJykudG9Mb3dlckNhc2UoKSA6ICd0ZXh0JztcblxuICBsZXQgW2NvbXBvc2VkU2lnbmFsLCBzdG9wVGltZW91dF0gPSAoc2lnbmFsIHx8IGNhbmNlbFRva2VuIHx8IHRpbWVvdXQpID9cbiAgICBjb21wb3NlU2lnbmFscyQxKFtzaWduYWwsIGNhbmNlbFRva2VuXSwgdGltZW91dCkgOiBbXTtcblxuICBsZXQgZmluaXNoZWQsIHJlcXVlc3Q7XG5cbiAgY29uc3Qgb25GaW5pc2ggPSAoKSA9PiB7XG4gICAgIWZpbmlzaGVkICYmIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29tcG9zZWRTaWduYWwgJiYgY29tcG9zZWRTaWduYWwudW5zdWJzY3JpYmUoKTtcbiAgICB9KTtcblxuICAgIGZpbmlzaGVkID0gdHJ1ZTtcbiAgfTtcblxuICBsZXQgcmVxdWVzdENvbnRlbnRMZW5ndGg7XG5cbiAgdHJ5IHtcbiAgICBpZiAoXG4gICAgICBvblVwbG9hZFByb2dyZXNzICYmIHN1cHBvcnRzUmVxdWVzdFN0cmVhbSAmJiBtZXRob2QgIT09ICdnZXQnICYmIG1ldGhvZCAhPT0gJ2hlYWQnICYmXG4gICAgICAocmVxdWVzdENvbnRlbnRMZW5ndGggPSBhd2FpdCByZXNvbHZlQm9keUxlbmd0aChoZWFkZXJzLCBkYXRhKSkgIT09IDBcbiAgICApIHtcbiAgICAgIGxldCBfcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHVybCwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgYm9keTogZGF0YSxcbiAgICAgICAgZHVwbGV4OiBcImhhbGZcIlxuICAgICAgfSk7XG5cbiAgICAgIGxldCBjb250ZW50VHlwZUhlYWRlcjtcblxuICAgICAgaWYgKHV0aWxzJDEuaXNGb3JtRGF0YShkYXRhKSAmJiAoY29udGVudFR5cGVIZWFkZXIgPSBfcmVxdWVzdC5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJykpKSB7XG4gICAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUoY29udGVudFR5cGVIZWFkZXIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoX3JlcXVlc3QuYm9keSkge1xuICAgICAgICBjb25zdCBbb25Qcm9ncmVzcywgZmx1c2hdID0gcHJvZ3Jlc3NFdmVudERlY29yYXRvcihcbiAgICAgICAgICByZXF1ZXN0Q29udGVudExlbmd0aCxcbiAgICAgICAgICBwcm9ncmVzc0V2ZW50UmVkdWNlcihhc3luY0RlY29yYXRvcihvblVwbG9hZFByb2dyZXNzKSlcbiAgICAgICAgKTtcblxuICAgICAgICBkYXRhID0gdHJhY2tTdHJlYW0oX3JlcXVlc3QuYm9keSwgREVGQVVMVF9DSFVOS19TSVpFLCBvblByb2dyZXNzLCBmbHVzaCwgZW5jb2RlVGV4dCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF1dGlscyQxLmlzU3RyaW5nKHdpdGhDcmVkZW50aWFscykpIHtcbiAgICAgIHdpdGhDcmVkZW50aWFscyA9IHdpdGhDcmVkZW50aWFscyA/ICdpbmNsdWRlJyA6ICdvbWl0JztcbiAgICB9XG5cbiAgICByZXF1ZXN0ID0gbmV3IFJlcXVlc3QodXJsLCB7XG4gICAgICAuLi5mZXRjaE9wdGlvbnMsXG4gICAgICBzaWduYWw6IGNvbXBvc2VkU2lnbmFsLFxuICAgICAgbWV0aG9kOiBtZXRob2QudG9VcHBlckNhc2UoKSxcbiAgICAgIGhlYWRlcnM6IGhlYWRlcnMubm9ybWFsaXplKCkudG9KU09OKCksXG4gICAgICBib2R5OiBkYXRhLFxuICAgICAgZHVwbGV4OiBcImhhbGZcIixcbiAgICAgIGNyZWRlbnRpYWxzOiB3aXRoQ3JlZGVudGlhbHNcbiAgICB9KTtcblxuICAgIGxldCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHJlcXVlc3QpO1xuXG4gICAgY29uc3QgaXNTdHJlYW1SZXNwb25zZSA9IHN1cHBvcnRzUmVzcG9uc2VTdHJlYW0gJiYgKHJlc3BvbnNlVHlwZSA9PT0gJ3N0cmVhbScgfHwgcmVzcG9uc2VUeXBlID09PSAncmVzcG9uc2UnKTtcblxuICAgIGlmIChzdXBwb3J0c1Jlc3BvbnNlU3RyZWFtICYmIChvbkRvd25sb2FkUHJvZ3Jlc3MgfHwgaXNTdHJlYW1SZXNwb25zZSkpIHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB7fTtcblxuICAgICAgWydzdGF0dXMnLCAnc3RhdHVzVGV4dCcsICdoZWFkZXJzJ10uZm9yRWFjaChwcm9wID0+IHtcbiAgICAgICAgb3B0aW9uc1twcm9wXSA9IHJlc3BvbnNlW3Byb3BdO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlQ29udGVudExlbmd0aCA9IHV0aWxzJDEudG9GaW5pdGVOdW1iZXIocmVzcG9uc2UuaGVhZGVycy5nZXQoJ2NvbnRlbnQtbGVuZ3RoJykpO1xuXG4gICAgICBjb25zdCBbb25Qcm9ncmVzcywgZmx1c2hdID0gb25Eb3dubG9hZFByb2dyZXNzICYmIHByb2dyZXNzRXZlbnREZWNvcmF0b3IoXG4gICAgICAgIHJlc3BvbnNlQ29udGVudExlbmd0aCxcbiAgICAgICAgcHJvZ3Jlc3NFdmVudFJlZHVjZXIoYXN5bmNEZWNvcmF0b3Iob25Eb3dubG9hZFByb2dyZXNzKSwgdHJ1ZSlcbiAgICAgICkgfHwgW107XG5cbiAgICAgIHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKFxuICAgICAgICB0cmFja1N0cmVhbShyZXNwb25zZS5ib2R5LCBERUZBVUxUX0NIVU5LX1NJWkUsIG9uUHJvZ3Jlc3MsICgpID0+IHtcbiAgICAgICAgICBmbHVzaCAmJiBmbHVzaCgpO1xuICAgICAgICAgIGlzU3RyZWFtUmVzcG9uc2UgJiYgb25GaW5pc2goKTtcbiAgICAgICAgfSwgZW5jb2RlVGV4dCksXG4gICAgICAgIG9wdGlvbnNcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmVzcG9uc2VUeXBlID0gcmVzcG9uc2VUeXBlIHx8ICd0ZXh0JztcblxuICAgIGxldCByZXNwb25zZURhdGEgPSBhd2FpdCByZXNvbHZlcnNbdXRpbHMkMS5maW5kS2V5KHJlc29sdmVycywgcmVzcG9uc2VUeXBlKSB8fCAndGV4dCddKHJlc3BvbnNlLCBjb25maWcpO1xuXG4gICAgIWlzU3RyZWFtUmVzcG9uc2UgJiYgb25GaW5pc2goKTtcblxuICAgIHN0b3BUaW1lb3V0ICYmIHN0b3BUaW1lb3V0KCk7XG5cbiAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwge1xuICAgICAgICBkYXRhOiByZXNwb25zZURhdGEsXG4gICAgICAgIGhlYWRlcnM6IEF4aW9zSGVhZGVycyQxLmZyb20ocmVzcG9uc2UuaGVhZGVycyksXG4gICAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXNwb25zZS5zdGF0dXNUZXh0LFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcXVlc3RcbiAgICAgIH0pO1xuICAgIH0pXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIG9uRmluaXNoKCk7XG5cbiAgICBpZiAoZXJyICYmIGVyci5uYW1lID09PSAnVHlwZUVycm9yJyAmJiAvZmV0Y2gvaS50ZXN0KGVyci5tZXNzYWdlKSkge1xuICAgICAgdGhyb3cgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgbmV3IEF4aW9zRXJyb3IoJ05ldHdvcmsgRXJyb3InLCBBeGlvc0Vycm9yLkVSUl9ORVRXT1JLLCBjb25maWcsIHJlcXVlc3QpLFxuICAgICAgICB7XG4gICAgICAgICAgY2F1c2U6IGVyci5jYXVzZSB8fCBlcnJcbiAgICAgICAgfVxuICAgICAgKVxuICAgIH1cblxuICAgIHRocm93IEF4aW9zRXJyb3IuZnJvbShlcnIsIGVyciAmJiBlcnIuY29kZSwgY29uZmlnLCByZXF1ZXN0KTtcbiAgfVxufSk7XG5cbmNvbnN0IGtub3duQWRhcHRlcnMgPSB7XG4gIGh0dHA6IGh0dHBBZGFwdGVyLFxuICB4aHI6IHhockFkYXB0ZXIsXG4gIGZldGNoOiBmZXRjaEFkYXB0ZXJcbn07XG5cbnV0aWxzJDEuZm9yRWFjaChrbm93bkFkYXB0ZXJzLCAoZm4sIHZhbHVlKSA9PiB7XG4gIGlmIChmbikge1xuICAgIHRyeSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sICduYW1lJywge3ZhbHVlfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgJ2FkYXB0ZXJOYW1lJywge3ZhbHVlfSk7XG4gIH1cbn0pO1xuXG5jb25zdCByZW5kZXJSZWFzb24gPSAocmVhc29uKSA9PiBgLSAke3JlYXNvbn1gO1xuXG5jb25zdCBpc1Jlc29sdmVkSGFuZGxlID0gKGFkYXB0ZXIpID0+IHV0aWxzJDEuaXNGdW5jdGlvbihhZGFwdGVyKSB8fCBhZGFwdGVyID09PSBudWxsIHx8IGFkYXB0ZXIgPT09IGZhbHNlO1xuXG52YXIgYWRhcHRlcnMgPSB7XG4gIGdldEFkYXB0ZXI6IChhZGFwdGVycykgPT4ge1xuICAgIGFkYXB0ZXJzID0gdXRpbHMkMS5pc0FycmF5KGFkYXB0ZXJzKSA/IGFkYXB0ZXJzIDogW2FkYXB0ZXJzXTtcblxuICAgIGNvbnN0IHtsZW5ndGh9ID0gYWRhcHRlcnM7XG4gICAgbGV0IG5hbWVPckFkYXB0ZXI7XG4gICAgbGV0IGFkYXB0ZXI7XG5cbiAgICBjb25zdCByZWplY3RlZFJlYXNvbnMgPSB7fTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIG5hbWVPckFkYXB0ZXIgPSBhZGFwdGVyc1tpXTtcbiAgICAgIGxldCBpZDtcblxuICAgICAgYWRhcHRlciA9IG5hbWVPckFkYXB0ZXI7XG5cbiAgICAgIGlmICghaXNSZXNvbHZlZEhhbmRsZShuYW1lT3JBZGFwdGVyKSkge1xuICAgICAgICBhZGFwdGVyID0ga25vd25BZGFwdGVyc1soaWQgPSBTdHJpbmcobmFtZU9yQWRhcHRlcikpLnRvTG93ZXJDYXNlKCldO1xuXG4gICAgICAgIGlmIChhZGFwdGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihgVW5rbm93biBhZGFwdGVyICcke2lkfSdgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoYWRhcHRlcikge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgcmVqZWN0ZWRSZWFzb25zW2lkIHx8ICcjJyArIGldID0gYWRhcHRlcjtcbiAgICB9XG5cbiAgICBpZiAoIWFkYXB0ZXIpIHtcblxuICAgICAgY29uc3QgcmVhc29ucyA9IE9iamVjdC5lbnRyaWVzKHJlamVjdGVkUmVhc29ucylcbiAgICAgICAgLm1hcCgoW2lkLCBzdGF0ZV0pID0+IGBhZGFwdGVyICR7aWR9IGAgK1xuICAgICAgICAgIChzdGF0ZSA9PT0gZmFsc2UgPyAnaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZW52aXJvbm1lbnQnIDogJ2lzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkJylcbiAgICAgICAgKTtcblxuICAgICAgbGV0IHMgPSBsZW5ndGggP1xuICAgICAgICAocmVhc29ucy5sZW5ndGggPiAxID8gJ3NpbmNlIDpcXG4nICsgcmVhc29ucy5tYXAocmVuZGVyUmVhc29uKS5qb2luKCdcXG4nKSA6ICcgJyArIHJlbmRlclJlYXNvbihyZWFzb25zWzBdKSkgOlxuICAgICAgICAnYXMgbm8gYWRhcHRlciBzcGVjaWZpZWQnO1xuXG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgYFRoZXJlIGlzIG5vIHN1aXRhYmxlIGFkYXB0ZXIgdG8gZGlzcGF0Y2ggdGhlIHJlcXVlc3QgYCArIHMsXG4gICAgICAgICdFUlJfTk9UX1NVUFBPUlQnXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBhZGFwdGVyO1xuICB9LFxuICBhZGFwdGVyczoga25vd25BZGFwdGVyc1xufTtcblxuLyoqXG4gKiBUaHJvd3MgYSBgQ2FuY2VsZWRFcnJvcmAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIFRoZSBjb25maWcgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdFxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZykge1xuICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgY29uZmlnLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKTtcbiAgfVxuXG4gIGlmIChjb25maWcuc2lnbmFsICYmIGNvbmZpZy5zaWduYWwuYWJvcnRlZCkge1xuICAgIHRocm93IG5ldyBDYW5jZWxlZEVycm9yKG51bGwsIGNvbmZpZyk7XG4gIH1cbn1cblxuLyoqXG4gKiBEaXNwYXRjaCBhIHJlcXVlc3QgdG8gdGhlIHNlcnZlciB1c2luZyB0aGUgY29uZmlndXJlZCBhZGFwdGVyLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyB0aGF0IGlzIHRvIGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0XG4gKlxuICogQHJldHVybnMge1Byb21pc2V9IFRoZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZFxuICovXG5mdW5jdGlvbiBkaXNwYXRjaFJlcXVlc3QoY29uZmlnKSB7XG4gIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICBjb25maWcuaGVhZGVycyA9IEF4aW9zSGVhZGVycyQxLmZyb20oY29uZmlnLmhlYWRlcnMpO1xuXG4gIC8vIFRyYW5zZm9ybSByZXF1ZXN0IGRhdGFcbiAgY29uZmlnLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgY29uZmlnLFxuICAgIGNvbmZpZy50cmFuc2Zvcm1SZXF1ZXN0XG4gICk7XG5cbiAgaWYgKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXS5pbmRleE9mKGNvbmZpZy5tZXRob2QpICE9PSAtMSkge1xuICAgIGNvbmZpZy5oZWFkZXJzLnNldENvbnRlbnRUeXBlKCdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLCBmYWxzZSk7XG4gIH1cblxuICBjb25zdCBhZGFwdGVyID0gYWRhcHRlcnMuZ2V0QWRhcHRlcihjb25maWcuYWRhcHRlciB8fCBkZWZhdWx0cyQxLmFkYXB0ZXIpO1xuXG4gIHJldHVybiBhZGFwdGVyKGNvbmZpZykudGhlbihmdW5jdGlvbiBvbkFkYXB0ZXJSZXNvbHV0aW9uKHJlc3BvbnNlKSB7XG4gICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICByZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgICAgY29uZmlnLFxuICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlLFxuICAgICAgcmVzcG9uc2VcbiAgICApO1xuXG4gICAgcmVzcG9uc2UuaGVhZGVycyA9IEF4aW9zSGVhZGVycyQxLmZyb20ocmVzcG9uc2UuaGVhZGVycyk7XG5cbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH0sIGZ1bmN0aW9uIG9uQWRhcHRlclJlamVjdGlvbihyZWFzb24pIHtcbiAgICBpZiAoIWlzQ2FuY2VsKHJlYXNvbikpIHtcbiAgICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICAgIGlmIChyZWFzb24gJiYgcmVhc29uLnJlc3BvbnNlKSB7XG4gICAgICAgIHJlYXNvbi5yZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBjb25maWcudHJhbnNmb3JtUmVzcG9uc2UsXG4gICAgICAgICAgcmVhc29uLnJlc3BvbnNlXG4gICAgICAgICk7XG4gICAgICAgIHJlYXNvbi5yZXNwb25zZS5oZWFkZXJzID0gQXhpb3NIZWFkZXJzJDEuZnJvbShyZWFzb24ucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlYXNvbik7XG4gIH0pO1xufVxuXG5jb25zdCBWRVJTSU9OID0gXCIxLjcuNFwiO1xuXG5jb25zdCB2YWxpZGF0b3JzJDEgPSB7fTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcblsnb2JqZWN0JywgJ2Jvb2xlYW4nLCAnbnVtYmVyJywgJ2Z1bmN0aW9uJywgJ3N0cmluZycsICdzeW1ib2wnXS5mb3JFYWNoKCh0eXBlLCBpKSA9PiB7XG4gIHZhbGlkYXRvcnMkMVt0eXBlXSA9IGZ1bmN0aW9uIHZhbGlkYXRvcih0aGluZykge1xuICAgIHJldHVybiB0eXBlb2YgdGhpbmcgPT09IHR5cGUgfHwgJ2EnICsgKGkgPCAxID8gJ24gJyA6ICcgJykgKyB0eXBlO1xuICB9O1xufSk7XG5cbmNvbnN0IGRlcHJlY2F0ZWRXYXJuaW5ncyA9IHt9O1xuXG4vKipcbiAqIFRyYW5zaXRpb25hbCBvcHRpb24gdmFsaWRhdG9yXG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbnxib29sZWFuP30gdmFsaWRhdG9yIC0gc2V0IHRvIGZhbHNlIGlmIHRoZSB0cmFuc2l0aW9uYWwgb3B0aW9uIGhhcyBiZWVuIHJlbW92ZWRcbiAqIEBwYXJhbSB7c3RyaW5nP30gdmVyc2lvbiAtIGRlcHJlY2F0ZWQgdmVyc2lvbiAvIHJlbW92ZWQgc2luY2UgdmVyc2lvblxuICogQHBhcmFtIHtzdHJpbmc/fSBtZXNzYWdlIC0gc29tZSBtZXNzYWdlIHdpdGggYWRkaXRpb25hbCBpbmZvXG4gKlxuICogQHJldHVybnMge2Z1bmN0aW9ufVxuICovXG52YWxpZGF0b3JzJDEudHJhbnNpdGlvbmFsID0gZnVuY3Rpb24gdHJhbnNpdGlvbmFsKHZhbGlkYXRvciwgdmVyc2lvbiwgbWVzc2FnZSkge1xuICBmdW5jdGlvbiBmb3JtYXRNZXNzYWdlKG9wdCwgZGVzYykge1xuICAgIHJldHVybiAnW0F4aW9zIHYnICsgVkVSU0lPTiArICddIFRyYW5zaXRpb25hbCBvcHRpb24gXFwnJyArIG9wdCArICdcXCcnICsgZGVzYyArIChtZXNzYWdlID8gJy4gJyArIG1lc3NhZ2UgOiAnJyk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICByZXR1cm4gKHZhbHVlLCBvcHQsIG9wdHMpID0+IHtcbiAgICBpZiAodmFsaWRhdG9yID09PSBmYWxzZSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoXG4gICAgICAgIGZvcm1hdE1lc3NhZ2Uob3B0LCAnIGhhcyBiZWVuIHJlbW92ZWQnICsgKHZlcnNpb24gPyAnIGluICcgKyB2ZXJzaW9uIDogJycpKSxcbiAgICAgICAgQXhpb3NFcnJvci5FUlJfREVQUkVDQVRFRFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodmVyc2lvbiAmJiAhZGVwcmVjYXRlZFdhcm5pbmdzW29wdF0pIHtcbiAgICAgIGRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdID0gdHJ1ZTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGZvcm1hdE1lc3NhZ2UoXG4gICAgICAgICAgb3B0LFxuICAgICAgICAgICcgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2JyArIHZlcnNpb24gKyAnIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlJ1xuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0b3IgPyB2YWxpZGF0b3IodmFsdWUsIG9wdCwgb3B0cykgOiB0cnVlO1xuICB9O1xufTtcblxuLyoqXG4gKiBBc3NlcnQgb2JqZWN0J3MgcHJvcGVydGllcyB0eXBlXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAqIEBwYXJhbSB7b2JqZWN0fSBzY2hlbWFcbiAqIEBwYXJhbSB7Ym9vbGVhbj99IGFsbG93VW5rbm93blxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cblxuZnVuY3Rpb24gYXNzZXJ0T3B0aW9ucyhvcHRpb25zLCBzY2hlbWEsIGFsbG93VW5rbm93bikge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ29wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QnLCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtcbiAgfVxuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob3B0aW9ucyk7XG4gIGxldCBpID0ga2V5cy5sZW5ndGg7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgY29uc3Qgb3B0ID0ga2V5c1tpXTtcbiAgICBjb25zdCB2YWxpZGF0b3IgPSBzY2hlbWFbb3B0XTtcbiAgICBpZiAodmFsaWRhdG9yKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG9wdGlvbnNbb3B0XTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsaWRhdG9yKHZhbHVlLCBvcHQsIG9wdGlvbnMpO1xuICAgICAgaWYgKHJlc3VsdCAhPT0gdHJ1ZSkge1xuICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignb3B0aW9uICcgKyBvcHQgKyAnIG11c3QgYmUgJyArIHJlc3VsdCwgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTl9WQUxVRSk7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGFsbG93VW5rbm93biAhPT0gdHJ1ZSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ1Vua25vd24gb3B0aW9uICcgKyBvcHQsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT04pO1xuICAgIH1cbiAgfVxufVxuXG52YXIgdmFsaWRhdG9yID0ge1xuICBhc3NlcnRPcHRpb25zLFxuICB2YWxpZGF0b3JzOiB2YWxpZGF0b3JzJDFcbn07XG5cbmNvbnN0IHZhbGlkYXRvcnMgPSB2YWxpZGF0b3IudmFsaWRhdG9ycztcblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuY2xhc3MgQXhpb3Mge1xuICBjb25zdHJ1Y3RvcihpbnN0YW5jZUNvbmZpZykge1xuICAgIHRoaXMuZGVmYXVsdHMgPSBpbnN0YW5jZUNvbmZpZztcbiAgICB0aGlzLmludGVyY2VwdG9ycyA9IHtcbiAgICAgIHJlcXVlc3Q6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIkMSgpLFxuICAgICAgcmVzcG9uc2U6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIkMSgpXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwYXRjaCBhIHJlcXVlc3RcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd8T2JqZWN0fSBjb25maWdPclVybCBUaGUgY29uZmlnIHNwZWNpZmljIGZvciB0aGlzIHJlcXVlc3QgKG1lcmdlZCB3aXRoIHRoaXMuZGVmYXVsdHMpXG4gICAqIEBwYXJhbSB7P09iamVjdH0gY29uZmlnXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBUaGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWRcbiAgICovXG4gIGFzeW5jIHJlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5fcmVxdWVzdChjb25maWdPclVybCwgY29uZmlnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICBsZXQgZHVtbXk7XG5cbiAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UgPyBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShkdW1teSA9IHt9KSA6IChkdW1teSA9IG5ldyBFcnJvcigpKTtcblxuICAgICAgICAvLyBzbGljZSBvZmYgdGhlIEVycm9yOiAuLi4gbGluZVxuICAgICAgICBjb25zdCBzdGFjayA9IGR1bW15LnN0YWNrID8gZHVtbXkuc3RhY2sucmVwbGFjZSgvXi4rXFxuLywgJycpIDogJyc7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKCFlcnIuc3RhY2spIHtcbiAgICAgICAgICAgIGVyci5zdGFjayA9IHN0YWNrO1xuICAgICAgICAgICAgLy8gbWF0Y2ggd2l0aG91dCB0aGUgMiB0b3Agc3RhY2sgbGluZXNcbiAgICAgICAgICB9IGVsc2UgaWYgKHN0YWNrICYmICFTdHJpbmcoZXJyLnN0YWNrKS5lbmRzV2l0aChzdGFjay5yZXBsYWNlKC9eLitcXG4uK1xcbi8sICcnKSkpIHtcbiAgICAgICAgICAgIGVyci5zdGFjayArPSAnXFxuJyArIHN0YWNrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIC8vIGlnbm9yZSB0aGUgY2FzZSB3aGVyZSBcInN0YWNrXCIgaXMgYW4gdW4td3JpdGFibGUgcHJvcGVydHlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG5cbiAgX3JlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZykge1xuICAgIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAgIC8vIEFsbG93IGZvciBheGlvcygnZXhhbXBsZS91cmwnWywgY29uZmlnXSkgYSBsYSBmZXRjaCBBUElcbiAgICBpZiAodHlwZW9mIGNvbmZpZ09yVXJsID09PSAnc3RyaW5nJykge1xuICAgICAgY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICAgICAgY29uZmlnLnVybCA9IGNvbmZpZ09yVXJsO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25maWcgPSBjb25maWdPclVybCB8fCB7fTtcbiAgICB9XG5cbiAgICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuXG4gICAgY29uc3Qge3RyYW5zaXRpb25hbCwgcGFyYW1zU2VyaWFsaXplciwgaGVhZGVyc30gPSBjb25maWc7XG5cbiAgICBpZiAodHJhbnNpdGlvbmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKHRyYW5zaXRpb25hbCwge1xuICAgICAgICBzaWxlbnRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgICAgZm9yY2VkSlNPTlBhcnNpbmc6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiksXG4gICAgICAgIGNsYXJpZnlUaW1lb3V0RXJyb3I6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbilcbiAgICAgIH0sIGZhbHNlKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zU2VyaWFsaXplciAhPSBudWxsKSB7XG4gICAgICBpZiAodXRpbHMkMS5pc0Z1bmN0aW9uKHBhcmFtc1NlcmlhbGl6ZXIpKSB7XG4gICAgICAgIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyID0ge1xuICAgICAgICAgIHNlcmlhbGl6ZTogcGFyYW1zU2VyaWFsaXplclxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsaWRhdG9yLmFzc2VydE9wdGlvbnMocGFyYW1zU2VyaWFsaXplciwge1xuICAgICAgICAgIGVuY29kZTogdmFsaWRhdG9ycy5mdW5jdGlvbixcbiAgICAgICAgICBzZXJpYWxpemU6IHZhbGlkYXRvcnMuZnVuY3Rpb25cbiAgICAgICAgfSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2V0IGNvbmZpZy5tZXRob2RcbiAgICBjb25maWcubWV0aG9kID0gKGNvbmZpZy5tZXRob2QgfHwgdGhpcy5kZWZhdWx0cy5tZXRob2QgfHwgJ2dldCcpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAvLyBGbGF0dGVuIGhlYWRlcnNcbiAgICBsZXQgY29udGV4dEhlYWRlcnMgPSBoZWFkZXJzICYmIHV0aWxzJDEubWVyZ2UoXG4gICAgICBoZWFkZXJzLmNvbW1vbixcbiAgICAgIGhlYWRlcnNbY29uZmlnLm1ldGhvZF1cbiAgICApO1xuXG4gICAgaGVhZGVycyAmJiB1dGlscyQxLmZvckVhY2goXG4gICAgICBbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdwb3N0JywgJ3B1dCcsICdwYXRjaCcsICdjb21tb24nXSxcbiAgICAgIChtZXRob2QpID0+IHtcbiAgICAgICAgZGVsZXRlIGhlYWRlcnNbbWV0aG9kXTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uZmlnLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5jb25jYXQoY29udGV4dEhlYWRlcnMsIGhlYWRlcnMpO1xuXG4gICAgLy8gZmlsdGVyIG91dCBza2lwcGVkIGludGVyY2VwdG9yc1xuICAgIGNvbnN0IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluID0gW107XG4gICAgbGV0IHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyA9IHRydWU7XG4gICAgdGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uIHVuc2hpZnRSZXF1ZXN0SW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgICBpZiAodHlwZW9mIGludGVyY2VwdG9yLnJ1bldoZW4gPT09ICdmdW5jdGlvbicgJiYgaW50ZXJjZXB0b3IucnVuV2hlbihjb25maWcpID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyA9IHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvci5zeW5jaHJvbm91cztcblxuICAgICAgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4udW5zaGlmdChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbiA9IFtdO1xuICAgIHRoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24gcHVzaFJlc3BvbnNlSW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgICByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ucHVzaChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgICB9KTtcblxuICAgIGxldCBwcm9taXNlO1xuICAgIGxldCBpID0gMDtcbiAgICBsZXQgbGVuO1xuXG4gICAgaWYgKCFzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMpIHtcbiAgICAgIGNvbnN0IGNoYWluID0gW2Rpc3BhdGNoUmVxdWVzdC5iaW5kKHRoaXMpLCB1bmRlZmluZWRdO1xuICAgICAgY2hhaW4udW5zaGlmdC5hcHBseShjaGFpbiwgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4pO1xuICAgICAgY2hhaW4ucHVzaC5hcHBseShjaGFpbiwgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluKTtcbiAgICAgIGxlbiA9IGNoYWluLmxlbmd0aDtcblxuICAgICAgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShjb25maWcpO1xuXG4gICAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKGNoYWluW2krK10sIGNoYWluW2krK10pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9XG5cbiAgICBsZW4gPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi5sZW5ndGg7XG5cbiAgICBsZXQgbmV3Q29uZmlnID0gY29uZmlnO1xuXG4gICAgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgY29uc3Qgb25GdWxmaWxsZWQgPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbltpKytdO1xuICAgICAgY29uc3Qgb25SZWplY3RlZCA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluW2krK107XG4gICAgICB0cnkge1xuICAgICAgICBuZXdDb25maWcgPSBvbkZ1bGZpbGxlZChuZXdDb25maWcpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgb25SZWplY3RlZC5jYWxsKHRoaXMsIGVycm9yKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHByb21pc2UgPSBkaXNwYXRjaFJlcXVlc3QuY2FsbCh0aGlzLCBuZXdDb25maWcpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgIH1cblxuICAgIGkgPSAwO1xuICAgIGxlbiA9IHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5sZW5ndGg7XG5cbiAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihyZXNwb25zZUludGVyY2VwdG9yQ2hhaW5baSsrXSwgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluW2krK10pO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9XG5cbiAgZ2V0VXJpKGNvbmZpZykge1xuICAgIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG4gICAgY29uc3QgZnVsbFBhdGggPSBidWlsZEZ1bGxQYXRoKGNvbmZpZy5iYXNlVVJMLCBjb25maWcudXJsKTtcbiAgICByZXR1cm4gYnVpbGRVUkwoZnVsbFBhdGgsIGNvbmZpZy5wYXJhbXMsIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyKTtcbiAgfVxufVxuXG4vLyBQcm92aWRlIGFsaWFzZXMgZm9yIHN1cHBvcnRlZCByZXF1ZXN0IG1ldGhvZHNcbnV0aWxzJDEuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdvcHRpb25zJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24odXJsLCBjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgZGF0YTogKGNvbmZpZyB8fCB7fSkuZGF0YVxuICAgIH0pKTtcbiAgfTtcbn0pO1xuXG51dGlscyQxLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG5cbiAgZnVuY3Rpb24gZ2VuZXJhdGVIVFRQTWV0aG9kKGlzRm9ybSkge1xuICAgIHJldHVybiBmdW5jdGlvbiBodHRwTWV0aG9kKHVybCwgZGF0YSwgY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgICBtZXRob2QsXG4gICAgICAgIGhlYWRlcnM6IGlzRm9ybSA/IHtcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnXG4gICAgICAgIH0gOiB7fSxcbiAgICAgICAgdXJsLFxuICAgICAgICBkYXRhXG4gICAgICB9KSk7XG4gICAgfTtcbiAgfVxuXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZ2VuZXJhdGVIVFRQTWV0aG9kKCk7XG5cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZCArICdGb3JtJ10gPSBnZW5lcmF0ZUhUVFBNZXRob2QodHJ1ZSk7XG59KTtcblxudmFyIEF4aW9zJDEgPSBBeGlvcztcblxuLyoqXG4gKiBBIGBDYW5jZWxUb2tlbmAgaXMgYW4gb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVxdWVzdCBjYW5jZWxsYXRpb24gb2YgYW4gb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGV4ZWN1dG9yIFRoZSBleGVjdXRvciBmdW5jdGlvbi5cbiAqXG4gKiBAcmV0dXJucyB7Q2FuY2VsVG9rZW59XG4gKi9cbmNsYXNzIENhbmNlbFRva2VuIHtcbiAgY29uc3RydWN0b3IoZXhlY3V0b3IpIHtcbiAgICBpZiAodHlwZW9mIGV4ZWN1dG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uJyk7XG4gICAgfVxuXG4gICAgbGV0IHJlc29sdmVQcm9taXNlO1xuXG4gICAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gcHJvbWlzZUV4ZWN1dG9yKHJlc29sdmUpIHtcbiAgICAgIHJlc29sdmVQcm9taXNlID0gcmVzb2x2ZTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHRva2VuID0gdGhpcztcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgdGhpcy5wcm9taXNlLnRoZW4oY2FuY2VsID0+IHtcbiAgICAgIGlmICghdG9rZW4uX2xpc3RlbmVycykgcmV0dXJuO1xuXG4gICAgICBsZXQgaSA9IHRva2VuLl9saXN0ZW5lcnMubGVuZ3RoO1xuXG4gICAgICB3aGlsZSAoaS0tID4gMCkge1xuICAgICAgICB0b2tlbi5fbGlzdGVuZXJzW2ldKGNhbmNlbCk7XG4gICAgICB9XG4gICAgICB0b2tlbi5fbGlzdGVuZXJzID0gbnVsbDtcbiAgICB9KTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgdGhpcy5wcm9taXNlLnRoZW4gPSBvbmZ1bGZpbGxlZCA9PiB7XG4gICAgICBsZXQgX3Jlc29sdmU7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICB0b2tlbi5zdWJzY3JpYmUocmVzb2x2ZSk7XG4gICAgICAgIF9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgIH0pLnRoZW4ob25mdWxmaWxsZWQpO1xuXG4gICAgICBwcm9taXNlLmNhbmNlbCA9IGZ1bmN0aW9uIHJlamVjdCgpIHtcbiAgICAgICAgdG9rZW4udW5zdWJzY3JpYmUoX3Jlc29sdmUpO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfTtcblxuICAgIGV4ZWN1dG9yKGZ1bmN0aW9uIGNhbmNlbChtZXNzYWdlLCBjb25maWcsIHJlcXVlc3QpIHtcbiAgICAgIGlmICh0b2tlbi5yZWFzb24pIHtcbiAgICAgICAgLy8gQ2FuY2VsbGF0aW9uIGhhcyBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdG9rZW4ucmVhc29uID0gbmV3IENhbmNlbGVkRXJyb3IobWVzc2FnZSwgY29uZmlnLCByZXF1ZXN0KTtcbiAgICAgIHJlc29sdmVQcm9taXNlKHRva2VuLnJlYXNvbik7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhyb3dzIGEgYENhbmNlbGVkRXJyb3JgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gICAqL1xuICB0aHJvd0lmUmVxdWVzdGVkKCkge1xuICAgIGlmICh0aGlzLnJlYXNvbikge1xuICAgICAgdGhyb3cgdGhpcy5yZWFzb247XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN1YnNjcmliZSB0byB0aGUgY2FuY2VsIHNpZ25hbFxuICAgKi9cblxuICBzdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgICBpZiAodGhpcy5yZWFzb24pIHtcbiAgICAgIGxpc3RlbmVyKHRoaXMucmVhc29uKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbGlzdGVuZXJzKSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycyA9IFtsaXN0ZW5lcl07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVuc3Vic2NyaWJlIGZyb20gdGhlIGNhbmNlbCBzaWduYWxcbiAgICovXG5cbiAgdW5zdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgICBpZiAoIXRoaXMuX2xpc3RlbmVycykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX2xpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbiBvYmplY3QgdGhhdCBjb250YWlucyBhIG5ldyBgQ2FuY2VsVG9rZW5gIGFuZCBhIGZ1bmN0aW9uIHRoYXQsIHdoZW4gY2FsbGVkLFxuICAgKiBjYW5jZWxzIHRoZSBgQ2FuY2VsVG9rZW5gLlxuICAgKi9cbiAgc3RhdGljIHNvdXJjZSgpIHtcbiAgICBsZXQgY2FuY2VsO1xuICAgIGNvbnN0IHRva2VuID0gbmV3IENhbmNlbFRva2VuKGZ1bmN0aW9uIGV4ZWN1dG9yKGMpIHtcbiAgICAgIGNhbmNlbCA9IGM7XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRva2VuLFxuICAgICAgY2FuY2VsXG4gICAgfTtcbiAgfVxufVxuXG52YXIgQ2FuY2VsVG9rZW4kMSA9IENhbmNlbFRva2VuO1xuXG4vKipcbiAqIFN5bnRhY3RpYyBzdWdhciBmb3IgaW52b2tpbmcgYSBmdW5jdGlvbiBhbmQgZXhwYW5kaW5nIGFuIGFycmF5IGZvciBhcmd1bWVudHMuXG4gKlxuICogQ29tbW9uIHVzZSBjYXNlIHdvdWxkIGJlIHRvIHVzZSBgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5YC5cbiAqXG4gKiAgYGBganNcbiAqICBmdW5jdGlvbiBmKHgsIHksIHopIHt9XG4gKiAgdmFyIGFyZ3MgPSBbMSwgMiwgM107XG4gKiAgZi5hcHBseShudWxsLCBhcmdzKTtcbiAqICBgYGBcbiAqXG4gKiBXaXRoIGBzcHJlYWRgIHRoaXMgZXhhbXBsZSBjYW4gYmUgcmUtd3JpdHRlbi5cbiAqXG4gKiAgYGBganNcbiAqICBzcHJlYWQoZnVuY3Rpb24oeCwgeSwgeikge30pKFsxLCAyLCAzXSk7XG4gKiAgYGBgXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIHNwcmVhZChjYWxsYmFjaykge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcChhcnIpIHtcbiAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkobnVsbCwgYXJyKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHBheWxvYWQgaXMgYW4gZXJyb3IgdGhyb3duIGJ5IEF4aW9zXG4gKlxuICogQHBhcmFtIHsqfSBwYXlsb2FkIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHBheWxvYWQgaXMgYW4gZXJyb3IgdGhyb3duIGJ5IEF4aW9zLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBeGlvc0Vycm9yKHBheWxvYWQpIHtcbiAgcmV0dXJuIHV0aWxzJDEuaXNPYmplY3QocGF5bG9hZCkgJiYgKHBheWxvYWQuaXNBeGlvc0Vycm9yID09PSB0cnVlKTtcbn1cblxuY29uc3QgSHR0cFN0YXR1c0NvZGUgPSB7XG4gIENvbnRpbnVlOiAxMDAsXG4gIFN3aXRjaGluZ1Byb3RvY29sczogMTAxLFxuICBQcm9jZXNzaW5nOiAxMDIsXG4gIEVhcmx5SGludHM6IDEwMyxcbiAgT2s6IDIwMCxcbiAgQ3JlYXRlZDogMjAxLFxuICBBY2NlcHRlZDogMjAyLFxuICBOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb246IDIwMyxcbiAgTm9Db250ZW50OiAyMDQsXG4gIFJlc2V0Q29udGVudDogMjA1LFxuICBQYXJ0aWFsQ29udGVudDogMjA2LFxuICBNdWx0aVN0YXR1czogMjA3LFxuICBBbHJlYWR5UmVwb3J0ZWQ6IDIwOCxcbiAgSW1Vc2VkOiAyMjYsXG4gIE11bHRpcGxlQ2hvaWNlczogMzAwLFxuICBNb3ZlZFBlcm1hbmVudGx5OiAzMDEsXG4gIEZvdW5kOiAzMDIsXG4gIFNlZU90aGVyOiAzMDMsXG4gIE5vdE1vZGlmaWVkOiAzMDQsXG4gIFVzZVByb3h5OiAzMDUsXG4gIFVudXNlZDogMzA2LFxuICBUZW1wb3JhcnlSZWRpcmVjdDogMzA3LFxuICBQZXJtYW5lbnRSZWRpcmVjdDogMzA4LFxuICBCYWRSZXF1ZXN0OiA0MDAsXG4gIFVuYXV0aG9yaXplZDogNDAxLFxuICBQYXltZW50UmVxdWlyZWQ6IDQwMixcbiAgRm9yYmlkZGVuOiA0MDMsXG4gIE5vdEZvdW5kOiA0MDQsXG4gIE1ldGhvZE5vdEFsbG93ZWQ6IDQwNSxcbiAgTm90QWNjZXB0YWJsZTogNDA2LFxuICBQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6IDQwNyxcbiAgUmVxdWVzdFRpbWVvdXQ6IDQwOCxcbiAgQ29uZmxpY3Q6IDQwOSxcbiAgR29uZTogNDEwLFxuICBMZW5ndGhSZXF1aXJlZDogNDExLFxuICBQcmVjb25kaXRpb25GYWlsZWQ6IDQxMixcbiAgUGF5bG9hZFRvb0xhcmdlOiA0MTMsXG4gIFVyaVRvb0xvbmc6IDQxNCxcbiAgVW5zdXBwb3J0ZWRNZWRpYVR5cGU6IDQxNSxcbiAgUmFuZ2VOb3RTYXRpc2ZpYWJsZTogNDE2LFxuICBFeHBlY3RhdGlvbkZhaWxlZDogNDE3LFxuICBJbUFUZWFwb3Q6IDQxOCxcbiAgTWlzZGlyZWN0ZWRSZXF1ZXN0OiA0MjEsXG4gIFVucHJvY2Vzc2FibGVFbnRpdHk6IDQyMixcbiAgTG9ja2VkOiA0MjMsXG4gIEZhaWxlZERlcGVuZGVuY3k6IDQyNCxcbiAgVG9vRWFybHk6IDQyNSxcbiAgVXBncmFkZVJlcXVpcmVkOiA0MjYsXG4gIFByZWNvbmRpdGlvblJlcXVpcmVkOiA0MjgsXG4gIFRvb01hbnlSZXF1ZXN0czogNDI5LFxuICBSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6IDQzMSxcbiAgVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnM6IDQ1MSxcbiAgSW50ZXJuYWxTZXJ2ZXJFcnJvcjogNTAwLFxuICBOb3RJbXBsZW1lbnRlZDogNTAxLFxuICBCYWRHYXRld2F5OiA1MDIsXG4gIFNlcnZpY2VVbmF2YWlsYWJsZTogNTAzLFxuICBHYXRld2F5VGltZW91dDogNTA0LFxuICBIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZDogNTA1LFxuICBWYXJpYW50QWxzb05lZ290aWF0ZXM6IDUwNixcbiAgSW5zdWZmaWNpZW50U3RvcmFnZTogNTA3LFxuICBMb29wRGV0ZWN0ZWQ6IDUwOCxcbiAgTm90RXh0ZW5kZWQ6IDUxMCxcbiAgTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6IDUxMSxcbn07XG5cbk9iamVjdC5lbnRyaWVzKEh0dHBTdGF0dXNDb2RlKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgSHR0cFN0YXR1c0NvZGVbdmFsdWVdID0ga2V5O1xufSk7XG5cbnZhciBIdHRwU3RhdHVzQ29kZSQxID0gSHR0cFN0YXR1c0NvZGU7XG5cbi8qKlxuICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGRlZmF1bHRDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJucyB7QXhpb3N9IEEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRDb25maWcpIHtcbiAgY29uc3QgY29udGV4dCA9IG5ldyBBeGlvcyQxKGRlZmF1bHRDb25maWcpO1xuICBjb25zdCBpbnN0YW5jZSA9IGJpbmQoQXhpb3MkMS5wcm90b3R5cGUucmVxdWVzdCwgY29udGV4dCk7XG5cbiAgLy8gQ29weSBheGlvcy5wcm90b3R5cGUgdG8gaW5zdGFuY2VcbiAgdXRpbHMkMS5leHRlbmQoaW5zdGFuY2UsIEF4aW9zJDEucHJvdG90eXBlLCBjb250ZXh0LCB7YWxsT3duS2V5czogdHJ1ZX0pO1xuXG4gIC8vIENvcHkgY29udGV4dCB0byBpbnN0YW5jZVxuICB1dGlscyQxLmV4dGVuZChpbnN0YW5jZSwgY29udGV4dCwgbnVsbCwge2FsbE93bktleXM6IHRydWV9KTtcblxuICAvLyBGYWN0b3J5IGZvciBjcmVhdGluZyBuZXcgaW5zdGFuY2VzXG4gIGluc3RhbmNlLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShpbnN0YW5jZUNvbmZpZykge1xuICAgIHJldHVybiBjcmVhdGVJbnN0YW5jZShtZXJnZUNvbmZpZyhkZWZhdWx0Q29uZmlnLCBpbnN0YW5jZUNvbmZpZykpO1xuICB9O1xuXG4gIHJldHVybiBpbnN0YW5jZTtcbn1cblxuLy8gQ3JlYXRlIHRoZSBkZWZhdWx0IGluc3RhbmNlIHRvIGJlIGV4cG9ydGVkXG5jb25zdCBheGlvcyA9IGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRzJDEpO1xuXG4vLyBFeHBvc2UgQXhpb3MgY2xhc3MgdG8gYWxsb3cgY2xhc3MgaW5oZXJpdGFuY2VcbmF4aW9zLkF4aW9zID0gQXhpb3MkMTtcblxuLy8gRXhwb3NlIENhbmNlbCAmIENhbmNlbFRva2VuXG5heGlvcy5DYW5jZWxlZEVycm9yID0gQ2FuY2VsZWRFcnJvcjtcbmF4aW9zLkNhbmNlbFRva2VuID0gQ2FuY2VsVG9rZW4kMTtcbmF4aW9zLmlzQ2FuY2VsID0gaXNDYW5jZWw7XG5heGlvcy5WRVJTSU9OID0gVkVSU0lPTjtcbmF4aW9zLnRvRm9ybURhdGEgPSB0b0Zvcm1EYXRhO1xuXG4vLyBFeHBvc2UgQXhpb3NFcnJvciBjbGFzc1xuYXhpb3MuQXhpb3NFcnJvciA9IEF4aW9zRXJyb3I7XG5cbi8vIGFsaWFzIGZvciBDYW5jZWxlZEVycm9yIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG5heGlvcy5DYW5jZWwgPSBheGlvcy5DYW5jZWxlZEVycm9yO1xuXG4vLyBFeHBvc2UgYWxsL3NwcmVhZFxuYXhpb3MuYWxsID0gZnVuY3Rpb24gYWxsKHByb21pc2VzKSB7XG4gIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XG59O1xuXG5heGlvcy5zcHJlYWQgPSBzcHJlYWQ7XG5cbi8vIEV4cG9zZSBpc0F4aW9zRXJyb3JcbmF4aW9zLmlzQXhpb3NFcnJvciA9IGlzQXhpb3NFcnJvcjtcblxuLy8gRXhwb3NlIG1lcmdlQ29uZmlnXG5heGlvcy5tZXJnZUNvbmZpZyA9IG1lcmdlQ29uZmlnO1xuXG5heGlvcy5BeGlvc0hlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMTtcblxuYXhpb3MuZm9ybVRvSlNPTiA9IHRoaW5nID0+IGZvcm1EYXRhVG9KU09OKHV0aWxzJDEuaXNIVE1MRm9ybSh0aGluZykgPyBuZXcgRm9ybURhdGEodGhpbmcpIDogdGhpbmcpO1xuXG5heGlvcy5nZXRBZGFwdGVyID0gYWRhcHRlcnMuZ2V0QWRhcHRlcjtcblxuYXhpb3MuSHR0cFN0YXR1c0NvZGUgPSBIdHRwU3RhdHVzQ29kZSQxO1xuXG5heGlvcy5kZWZhdWx0ID0gYXhpb3M7XG5cbm1vZHVsZS5leHBvcnRzID0gYXhpb3M7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1heGlvcy5janMubWFwXG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdGlkOiBtb2R1bGVJZCxcblx0XHRsb2FkZWQ6IGZhbHNlLFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcblx0bW9kdWxlLmxvYWRlZCA9IHRydWU7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmcgPSAoZnVuY3Rpb24oKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuXHR0cnkge1xuXHRcdHJldHVybiB0aGlzIHx8IG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSByZXR1cm4gd2luZG93O1xuXHR9XG59KSgpOyIsIl9fd2VicGFja19yZXF1aXJlX18ubm1kID0gKG1vZHVsZSkgPT4ge1xuXHRtb2R1bGUucGF0aHMgPSBbXTtcblx0aWYgKCFtb2R1bGUuY2hpbGRyZW4pIG1vZHVsZS5jaGlsZHJlbiA9IFtdO1xuXHRyZXR1cm4gbW9kdWxlO1xufTsiLCIvLyBzdGFydHVwXG4vLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8vIFRoaXMgZW50cnkgbW9kdWxlIGlzIHJlZmVyZW5jZWQgYnkgb3RoZXIgbW9kdWxlcyBzbyBpdCBjYW4ndCBiZSBpbmxpbmVkXG52YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oNDM5KTtcbiJdLCJuYW1lcyI6WyJEb21haW4iLCJkYXRhIiwicmVjZWl2aW5nIiwic2VuZGluZyIsInRoaXMiLCJuYW1lIiwicmVxdWlyZV90bHMiLCJza2lwX3ZlcmlmaWNhdGlvbiIsInN0YXRlIiwid2lsZGNhcmQiLCJzcGFtX2FjdGlvbiIsImNyZWF0ZWRfYXQiLCJzbXRwX3Bhc3N3b3JkIiwic210cF9sb2dpbiIsInR5cGUiLCJyZWNlaXZpbmdfZG5zX3JlY29yZHMiLCJzZW5kaW5nX2Ruc19yZWNvcmRzIiwiZHluYW1pY1Byb3BlcnRpZXMiLCJyZWR1Y2UiLCJhY2MiLCJwcm9wZXJ0eU5hbWUiLCJPYmplY3QiLCJhc3NpZ24iLCJ1cmxfam9pbl8xIiwiX19pbXBvcnREZWZhdWx0IiwicmVxdWlyZSIsIkVycm9yXzEiLCJkb21haW5fMSIsIkRvbWFpbnNDbGllbnQiLCJyZXF1ZXN0IiwiZG9tYWluQ3JlZGVudGlhbHNDbGllbnQiLCJkb21haW5UZW1wbGF0ZXNDbGllbnQiLCJkb21haW5UYWdzQ2xpZW50IiwiZG9tYWluQ3JlZGVudGlhbHMiLCJkb21haW5UZW1wbGF0ZXMiLCJkb21haW5UYWdzIiwicHJvdG90eXBlIiwiX2hhbmRsZUJvb2xWYWx1ZXMiLCJwcm9wc0ZvclJlcGxhY2VtZW50IiwicmVwbGFjZWRQcm9wcyIsImtleXMiLCJrZXkiLCJwcm9wIiwidmFsdWUiLCJ0b1N0cmluZyIsIl9fYXNzaWduIiwiX3BhcnNlTWVzc2FnZSIsInJlc3BvbnNlIiwiYm9keSIsInBhcnNlRG9tYWluTGlzdCIsIml0ZW1zIiwibWFwIiwiaXRlbSIsImRlZmF1bHQiLCJfcGFyc2VEb21haW4iLCJkb21haW4iLCJfcGFyc2VUcmFja2luZ1NldHRpbmdzIiwidHJhY2tpbmciLCJfcGFyc2VUcmFja2luZ1VwZGF0ZSIsImxpc3QiLCJxdWVyeSIsIl90aGlzIiwiZ2V0IiwidGhlbiIsInJlcyIsImNvbmNhdCIsImNyZWF0ZSIsInBvc3RPYmoiLCJwb3N0V2l0aEZEIiwidXBkYXRlIiwicHV0RGF0YSIsInB1dFdpdGhGRCIsInZlcmlmeSIsInB1dCIsImRlc3Ryb3kiLCJkZWxldGUiLCJnZXRDb25uZWN0aW9uIiwiY29ubmVjdGlvbiIsInVwZGF0ZUNvbm5lY3Rpb24iLCJnZXRUcmFja2luZyIsInVwZGF0ZVRyYWNraW5nIiwiYWN0aXZlIiwiZ2V0VXNlckRhdGFFcnJvciIsImdldElwcyIsIl9hIiwiYXNzaWduSXAiLCJpcCIsImRlbGV0ZUlwIiwibGlua0lwUG9vbCIsInBvb2xJZCIsInBvb2xfaWQiLCJ1bmxpbmtJcFBvbGwiLCJyZXBsYWNlbWVudCIsInNlYXJjaFBhcmFtcyIsInVwZGF0ZURLSU1BdXRob3JpdHkiLCJzZWxmIiwidXBkYXRlREtJTVNlbGVjdG9yIiwiZGtpbVNlbGVjdG9yIiwidXBkYXRlV2ViUHJlZml4Iiwid2ViUHJlZml4IiwiRG9tYWluQ3JlZGVudGlhbHNDbGllbnQiLCJiYXNlUm91dGUiLCJfcGFyc2VEb21haW5DcmVkZW50aWFsc0xpc3QiLCJ0b3RhbENvdW50IiwidG90YWxfY291bnQiLCJfcGFyc2VNZXNzYWdlUmVzcG9uc2UiLCJzdGF0dXMiLCJtZXNzYWdlIiwiX3BhcnNlRGVsZXRlZFJlc3BvbnNlIiwic3BlYyIsImNyZWRlbnRpYWxzTG9naW4iLCJOYXZpZ2F0aW9uVGhydVBhZ2VzXzEiLCJEb21haW5UYWciLCJ0YWdJbmZvIiwidGFnIiwiZGVzY3JpcHRpb24iLCJEYXRlIiwiZXhwb3J0cyIsIkRvbWFpblRhZ1N0YXRpc3RpYyIsInRhZ1N0YXRpc3RpY0luZm8iLCJzdGFydCIsImVuZCIsInJlc29sdXRpb24iLCJzdGF0cyIsInN0YXQiLCJ0aW1lIiwiRG9tYWluVGFnc0NsaWVudCIsIl9zdXBlciIsImNhbGwiLCJfX2V4dGVuZHMiLCJwYXJzZUxpc3QiLCJwYWdlcyIsInBhcnNlUGFnZUxpbmtzIiwiX3BhcnNlVGFnU3RhdGlzdGljIiwicmVxdWVzdExpc3RXaXRoUGFnZXMiLCJzdGF0aXN0aWMiLCJjb3VudHJpZXMiLCJwcm92aWRlcnMiLCJkZXZpY2VzIiwiRG9tYWluVGVtcGxhdGVJdGVtIiwiZG9tYWluVGVtcGxhdGVGcm9tQVBJIiwiY3JlYXRlZEF0IiwiY3JlYXRlZEJ5IiwiaWQiLCJ2ZXJzaW9uIiwidmVyc2lvbnMiLCJsZW5ndGgiLCJyZXN1bHQiLCJEb21haW5UZW1wbGF0ZXNDbGllbnQiLCJwYXJzZUNyZWF0aW9uUmVzcG9uc2UiLCJ0ZW1wbGF0ZSIsInBhcnNlQ3JlYXRpb25WZXJzaW9uUmVzcG9uc2UiLCJwYXJzZU11dGF0aW9uUmVzcG9uc2UiLCJ0ZW1wbGF0ZU5hbWUiLCJwYXJzZU5vdGlmaWNhdGlvblJlc3BvbnNlIiwicGFyc2VNdXRhdGVUZW1wbGF0ZVZlcnNpb25SZXNwb25zZSIsInRlbXBsYXRlVmVyc2lvbiIsImQiLCJwYXJzZUxpc3RUZW1wbGF0ZVZlcnNpb25zIiwiZGVzdHJveUFsbCIsImNyZWF0ZVZlcnNpb24iLCJnZXRWZXJzaW9uIiwidXBkYXRlVmVyc2lvbiIsImRlc3Ryb3lWZXJzaW9uIiwibGlzdFZlcnNpb25zIiwiRXZlbnRDbGllbnQiLCJJcFBvb2xzQ2xpZW50IiwicGFyc2VJcFBvb2xzUmVzcG9uc2UiLCJzZW50IiwicGF0Y2hXaXRoRkQiLCJJcHNDbGllbnQiLCJwYXJzZUlwc1Jlc3BvbnNlIiwiSW5ib3hQbGFjZW1lbnRzQXR0cmlidXRlc0NsaWVudCIsInBhdGgiLCJhdHRyaWJ1dGVOYW1lIiwiSW5ib3hQbGFjZW1lbnRzRmlsdGVyc0NsaWVudCIsInN1cHBvcnRlZF9maWx0ZXJzIiwiSW5ib3hQbGFjZW1lbnRzUmVzdWx0c0NsaWVudCIsImF0dHJpYnV0ZXMiLCJmaWx0ZXJzIiwic2hhcmluZyIsImxvZ2dlciIsImNvbnNvbGUiLCJjb252ZXJ0RGF0ZVRvVVRDIiwiaW5wdXREYXRlIiwid2FybiIsInRvSVNPU3RyaW5nIiwicHJlcGFyZVF1ZXJ5RGF0YSIsInF1ZXJ5RGF0YSIsInByZXBhcmVJbmJveFBsYWNlbWVudHNSZXN1bHQiLCJib3giLCJoYW5kbGVkU2VlZExpc3REYXRlcyIsInVwZGF0ZWRfYXQiLCJzaGFyaW5nX2V4cGlyZXNfYXQiLCJCb3giLCJsYXN0X3Jlc3VsdF9hdCIsIklEIiwiaW5ib3hQbGFjZW1lbnRzUmVzdWx0IiwiSWQiLCJpbmJveFBsYWNlbWVudFJlc3VsdCIsImdldFJlc3VsdEJ5U2hhcmVJZCIsInNoYXJlSWQiLCJJUFJTaGFyaW5nQ2xpZW50IiwicHJlcGFyZUluYm94UGxhY2VtZW50c1Jlc3VsdFNoYXJpbmciLCJleHBpcmVzX2F0IiwiZW5hYmxlZCIsIlNlZWRzTGlzdHNDbGllbnQiLCJwcmVwYXJlUmVzdWx0Iiwic2VlZExpc3QiLCJwcmVwYXJlU2VlZExpc3QiLCJzZWVkcyIsIlNlZWRzIiwic2VlZEl0ZW0iLCJoYW5kbGVkU2VlZERhdGVzIiwibWF4X2VtYWlsX2NvdW50X2hpdF9hdCIsImxhc3Rfc2VudF90b19hdCIsImxhc3RfZGVsaXZlcmVkX2F0IiwidXBkYXRlZFNlZWRzTGlzdCIsInNlZWRsaXN0IiwiSW5ib3hQbGFjZW1lbnRzQ2xpZW50Iiwic2VlZHNMaXN0c0NsaWVudCIsInJlc3VsdHMiLCJzZWVkc0xpc3RzIiwicnVuVGVzdCIsInBvc3QiLCJJbmJveFBsYWNlbWVudHNQcm92aWRlcnNDbGllbnQiLCJoYW5kbGVkUHJvdmlkZXJEYXRlcyIsIlJlcXVlc3RfMSIsImRvbWFpbnNDbGllbnRfMSIsIkV2ZW50c18xIiwiU3RhdHNDbGllbnRfMSIsIlN1cHByZXNzaW9uc0NsaWVudF8xIiwiV2ViaG9va3NfMSIsIk1lc3NhZ2VzXzEiLCJSb3V0ZXNfMSIsInZhbGlkYXRlXzEiLCJJUHNfMSIsIklQUG9vbHNfMSIsIm1haWxpbmdMaXN0c18xIiwibWFpbExpc3RNZW1iZXJzXzEiLCJkb21haW5zQ3JlZGVudGlhbHNfMSIsIm11bHRpcGxlVmFsaWRhdGlvbl8xIiwiZG9tYWluc1RlbXBsYXRlc18xIiwiZG9tYWluc1RhZ3NfMSIsIlN1YmFjY291bnRzXzEiLCJTZWVkc0xpc3RzQ2xpZW50XzEiLCJpbmJveFBsYWNlbWVudHNfMSIsIkluYm94UGxhY2VtZW50c1Jlc3VsdHNDbGllbnRfMSIsIkF0dHJpYnV0ZXNDbGllbnRfMSIsIkZpbHRlcnNDbGllbnRfMSIsIkluYm94UGxhY2VtZW50c1Jlc3VsdHNTaGFyaW5nQ2xpZW50XzEiLCJJbmJveFBsYWNlbWVudHNQcm92aWRlcnNfMSIsIk1haWxndW5DbGllbnQiLCJvcHRpb25zIiwiZm9ybURhdGEiLCJjb25maWciLCJ1cmwiLCJ1c2VybmFtZSIsIkVycm9yIiwibWFpbExpc3RzTWVtYmVycyIsIm11bHRpcGxlVmFsaWRhdGlvbkNsaWVudCIsIkluYm94UGxhY2VtZW50c1Jlc3VsdHNTaGFyaW5nQ2xpZW50Iiwic2VlZHNMaXN0c0F0dHJpYnV0ZXMiLCJyZXN1bHRzQXR0cmlidXRlc0NsaWVudCIsInNlZWRzTGlzdHNGaWx0ZXJzQ2xpZW50IiwicmVzdWx0c0ZpbHRlcnNDbGllbnQiLCJpbmJveFBsYWNlbWVudHNSZXN1bHRzQ2xpZW50IiwiaW5ib3hQbGFjZW1lbnRzUHJvdmlkZXJzQ2xpZW50IiwiZG9tYWlucyIsIndlYmhvb2tzIiwiZXZlbnRzIiwic3VwcHJlc3Npb25zIiwibWVzc2FnZXMiLCJyb3V0ZXMiLCJpcHMiLCJpcF9wb29scyIsImxpc3RzIiwidmFsaWRhdGUiLCJzdWJhY2NvdW50cyIsImluYm94UGxhY2VtZW50cyIsInNldFN1YmFjY291bnQiLCJzdWJhY2NvdW50SWQiLCJzZXRTdWJhY2NvdW50SGVhZGVyIiwicmVzZXRTdWJhY2NvdW50IiwicmVzZXRTdWJhY2NvdW50SGVhZGVyIiwiTWFpbExpc3RzTWVtYmVycyIsImNoZWNrQW5kVXBkYXRlRGF0YSIsIm5ld0RhdGEiLCJ2YXJzIiwiSlNPTiIsInN0cmluZ2lmeSIsInN1YnNjcmliZWQiLCJsaXN0TWVtYmVycyIsIm1haWxMaXN0QWRkcmVzcyIsImdldE1lbWJlciIsIm1haWxMaXN0TWVtYmVyQWRkcmVzcyIsIm1lbWJlciIsImNyZWF0ZU1lbWJlciIsInJlcURhdGEiLCJjcmVhdGVNZW1iZXJzIiwibWVtYmVycyIsIkFycmF5IiwiaXNBcnJheSIsInVwc2VydCIsInVwZGF0ZU1lbWJlciIsImRlc3Ryb3lNZW1iZXIiLCJNYWlsaW5nTGlzdHNDbGllbnQiLCJwYXJzZVZhbGlkYXRpb25SZXN1bHQiLCJ2YWxpZGF0aW9uUmVzdWx0IiwiY2FuY2VsVmFsaWRhdGlvbiIsIk1lc3NhZ2VzQ2xpZW50IiwicHJlcGFyZUJvb2xlYW5WYWx1ZXMiLCJ5ZXNOb1Byb3BlcnRpZXMiLCJTZXQiLCJoYXMiLCJfcGFyc2VSZXNwb25zZSIsIm1vZGlmaWVkRGF0YSIsIlJvdXRlc0NsaWVudCIsInJvdXRlIiwiU3RhdHNDb250YWluZXJfMSIsIlN0YXRzQ2xpZW50IiwidG9VVENTdHJpbmciLCJwcmVwYXJlU2VhcmNoUGFyYW1zIiwiZW50cmllcyIsImFycmF5V2l0aFBhaXJzIiwiY3VycmVudFBhaXIiLCJyZXBlYXRlZFByb3BlcnR5IiwiX19zcHJlYWRBcnJheSIsInB1c2giLCJwYXJzZVN0YXRzIiwiZ2V0RG9tYWluIiwiZ2V0QWNjb3VudCIsIlN0YXRzQ29udGFpbmVyIiwiU3ViYWNjb3VudHNDbGllbnQiLCJlbmFibGUiLCJkaXNhYmxlIiwiU1VCQUNDT1VOVF9IRUFERVIiLCJFbnVtc18xIiwiQm91bmNlIiwiU3VwcHJlc3Npb25Nb2RlbHMiLCJCT1VOQ0VTIiwiYWRkcmVzcyIsImNvZGUiLCJlcnJvciIsIkNvbXBsYWludCIsIkNPTVBMQUlOVFMiLCJTdXBwcmVzc2lvbiIsIkJvdW5jZV8xIiwiQ29tcGxhaW50XzEiLCJVbnN1YnNjcmliZV8xIiwiV2hpdGVMaXN0XzEiLCJjcmVhdGVPcHRpb25zIiwiaGVhZGVycyIsIlN1cHByZXNzaW9uQ2xpZW50IiwibW9kZWxzIiwiYm91bmNlcyIsImNvbXBsYWludHMiLCJ1bnN1YnNjcmliZXMiLCJ3aGl0ZWxpc3RzIiwiTW9kZWwiLCJfcGFyc2VJdGVtIiwiY3JlYXRlV2hpdGVMaXN0IiwiaXNEYXRhQXJyYXkiLCJwcmVwYXJlUmVzcG9uc2UiLCJjcmVhdGVVbnN1YnNjcmliZSIsInNvbWUiLCJ1bnN1YnNjcmliZSIsInRhZ3MiLCJnZXRNb2RlbCIsIm1vZGVsIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwicG9zdERhdGEiLCJtb2R1bGUiLCJVbnN1YnNjcmliZSIsIlVOU1VCU0NSSUJFUyIsIldoaXRlTGlzdCIsIldISVRFTElTVFMiLCJyZWFzb24iLCJBdHRhY2htZW50c0hhbmRsZXJfMSIsIk11bHRpcGxlVmFsaWRhdGlvbkpvYiIsInJlc3BvbnNlU3RhdHVzQ29kZSIsInF1YW50aXR5IiwicmVjb3Jkc1Byb2Nlc3NlZCIsInJlY29yZHNfcHJvY2Vzc2VkIiwiZG93bmxvYWRfdXJsIiwiZG93bmxvYWRVcmwiLCJjc3YiLCJqc29uIiwiX2IiLCJzdW1tYXJ5IiwiY2F0Y2hBbGwiLCJjYXRjaF9hbGwiLCJkZWxpdmVyYWJsZSIsImRvTm90U2VuZCIsImRvX25vdF9zZW5kIiwidW5kZWxpdmVyYWJsZSIsInVua25vd24iLCJyaXNrIiwiaGlnaCIsImxvdyIsIm1lZGl1bSIsIk11bHRpcGxlVmFsaWRhdGlvbkNsaWVudCIsImF0dGFjaG1lbnRzSGFuZGxlciIsImhhbmRsZVJlc3BvbnNlIiwiam9icyIsImpvYiIsInRvdGFsIiwibGlzdElkIiwiY29udmVydFRvRXhwZWN0ZWRTaGFwZSIsImlzQnVmZmVyIiwiZmlsZSIsIm11bHRpcGxlVmFsaWRhdGlvbkZpbGUiLCJpc1N0cmVhbSIsIm11bHRpcGxlVmFsaWRhdGlvbkRhdGEiLCJWYWxpZGF0ZUNsaWVudCIsIm11bHRpcGxlVmFsaWRhdGlvbiIsIldlYmhvb2siLCJ1cmxzIiwiV2ViaG9va3NDbGllbnQiLCJfcGFyc2VXZWJob29rTGlzdCIsIl9wYXJzZVdlYmhvb2tXaXRoSUQiLCJ3ZWJob29rUmVzcG9uc2UiLCJ3ZWJob29rIiwidW5kZWZpbmVkIiwiX3BhcnNlV2ViaG9va1Rlc3QiLCJ0ZXN0IiwidXJsVmFsdWVzIiwiQmxvYkZyb21TdHJlYW0iLCJzdHJlYW0iLCJzaXplIiwiX3N0cmVhbSIsImRlZmluZVByb3BlcnR5IiwiU3ltYm9sIiwidG9TdHJpbmdUYWciLCJBdHRhY2htZW50c0hhbmRsZXIiLCJnZXRBdHRhY2htZW50T3B0aW9ucyIsImZpbGVuYW1lIiwiY29udGVudFR5cGUiLCJrbm93bkxlbmd0aCIsImdldEZpbGVJbmZvIiwiZ2V0Q3VzdG9tRmlsZUluZm8iLCJnZXRCdWZmZXJJbmZvIiwiYnVmZmVyIiwiYnl0ZUxlbmd0aCIsInBpcGUiLCJpc0N1c3RvbUZpbGUiLCJvYmoiLCJpc0Jyb3dzZXJGaWxlIiwiQmxvYiIsIkJ1ZmZlciIsImdldEF0dGFjaG1lbnRJbmZvIiwiYXR0YWNobWVudCIsImNvbnZlcnRUb0ZEZXhwZWN0ZWRTaGFwZSIsInVzZXJQcm92aWRlZFZhbHVlIiwiZ2V0QmxvYkZyb21TdHJlYW0iLCJBUElFcnJvciIsInN0YXR1c1RleHQiLCJib2R5TWVzc2FnZSIsInN0YWNrIiwiZGV0YWlscyIsIkZvcm1EYXRhQnVpbGRlciIsIkZvcm1EYXRhQ29uc3RydWN0b3IiLCJmaWxlS2V5cyIsImNyZWF0ZUZvcm1EYXRhIiwiZmlsdGVyIiwiZm9ybURhdGFBY2MiLCJpbmNsdWRlcyIsImF0dGFjaG1lbnRWYWx1ZSIsImlzTWVzc2FnZUF0dGFjaG1lbnQiLCJhZGRGaWxlc1RvRkQiLCJtZXNzYWdlVmFsdWUiLCJpc01JTUUiLCJhZGRNaW1lRGF0YVRvRkQiLCJhZGRDb21tb25Qcm9wZXJ0eVRvRkQiLCJmb3JtRGF0YUluc3RhbmNlIiwiaXNGb3JtRGF0YVBhY2thZ2UiLCJhcHBlbmQiLCJicm93c2VyRm9ybURhdGEiLCJibG9iSW5zdGFuY2UiLCJSZWFkYWJsZVN0cmVhbSIsImdldEhlYWRlcnMiLCJGaWxlIiwiZXZlcnkiLCJhcHBlbmRGaWxlVG9GRCIsIm9yaWdpbmFsS2V5Iiwib2JqRGF0YSIsImZkIiwiZnJvbSIsImJsb2IiLCJzZXQiLCJmb3JFYWNoIiwiYWRkVmFsdWVCYXNlZE9uRkQiLCJmZEtleSIsImZkVmFsdWUiLCJOYXZpZ2F0aW9uVGhydVBhZ2VzIiwicGFyc2VQYWdlIiwicGFnZVVybCIsInVybFNlcGFyYXRvciIsIml0ZXJhdG9yTmFtZSIsIlVSTCIsInBhZ2VWYWx1ZSIsInNwbGl0IiwicG9wIiwiaXRlcmF0b3JQb3NpdGlvbiIsInBhZ2UiLCJwYWdpbmciLCJ1cGRhdGVVcmxBbmRRdWVyeSIsImNsaWVudFVybCIsInF1ZXJ5Q29weSIsInVwZGF0ZWRRdWVyeSIsImJhc2U2NCIsIl9faW1wb3J0U3RhciIsImF4aW9zXzEiLCJGb3JtRGF0YUJ1aWxkZXJfMSIsIlJlcXVlc3QiLCJ0aW1lb3V0IiwibWFrZUhlYWRlcnNGcm9tT2JqZWN0IiwiZm9ybURhdGFCdWlsZGVyIiwibWF4Qm9keUxlbmd0aCIsInByb3h5IiwibWV0aG9kIiwib25DYWxsT3B0aW9ucyIsInJlcXVlc3RIZWFkZXJzIiwiam9pbkFuZFRyYW5zZm9ybUhlYWRlcnMiLCJwYXJhbXMiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwiVVJMU2VhcmNoUGFyYW1zIiwidXJsVmFsdWUiLCJ0b0xvY2FsZVVwcGVyQ2FzZSIsIl9kIiwiZXJyb3JSZXNwb25zZSIsImVycl8xIiwiX2MiLCJnZXRSZXNwb25zZUJvZHkiLCJBeGlvc0hlYWRlcnMiLCJiYXNpYyIsImVuY29kZSIsInNldEF1dGhvcml6YXRpb24iLCJyZWNlaXZlZE9uQ2FsbEhlYWRlcnMiLCJvbkNhbGxIZWFkZXJzIiwiaGVhZGVyc09iamVjdCIsImhlYWRlcnNBY2N1bXVsYXRvciIsImNvbW1hbmQiLCJhZGREZWZhdWx0SGVhZGVycyIsInJlcXVlc3RPcHRpb25zIiwiUmVzb2x1dGlvbiIsIldlYmhvb2tzSWRzIiwiWWVzTm8iLCJfX2V4cG9ydFN0YXIiLCJNYWlsZ3VuQ2xpZW50XzEiLCJNYWlsZ3VuIiwiRm9ybURhdGEiLCJjbGllbnQiLCJmcmVlRXhwb3J0cyIsImZyZWVHbG9iYWwiLCJnIiwiZ2xvYmFsIiwid2luZG93IiwiSW52YWxpZENoYXJhY3RlckVycm9yIiwiVEFCTEUiLCJSRUdFWF9TUEFDRV9DSEFSQUNURVJTIiwiaW5wdXQiLCJTdHJpbmciLCJhIiwiYiIsImMiLCJwYWRkaW5nIiwib3V0cHV0IiwicG9zaXRpb24iLCJjaGFyQ29kZUF0IiwiY2hhckF0IiwicmVwbGFjZSIsImJpdFN0b3JhZ2UiLCJiaXRDb3VudGVyIiwiaW5kZXhPZiIsImZyb21DaGFyQ29kZSIsInN0ckFycmF5IiwicmVzdWx0QXJyYXkiLCJUeXBlRXJyb3IiLCJtYXRjaCIsImZpcnN0Iiwic2hpZnQiLCJpIiwiY29tcG9uZW50Iiwic3RyIiwiam9pbiIsInBhcnRzIiwibm9ybWFsaXplIiwiYXJndW1lbnRzIiwic2xpY2UiLCJkZWZpbml0aW9uIiwiYmluZCIsImZuIiwidGhpc0FyZyIsImFwcGx5IiwiZ2V0UHJvdG90eXBlT2YiLCJraW5kT2YiLCJjYWNoZSIsInRoaW5nIiwidG9Mb3dlckNhc2UiLCJraW5kT2ZUZXN0IiwidHlwZU9mVGVzdCIsImlzVW5kZWZpbmVkIiwiaXNBcnJheUJ1ZmZlciIsImlzU3RyaW5nIiwiaXNGdW5jdGlvbiIsImlzTnVtYmVyIiwiaXNPYmplY3QiLCJpc1BsYWluT2JqZWN0IiwidmFsIiwiaXRlcmF0b3IiLCJpc0RhdGUiLCJpc0ZpbGUiLCJpc0Jsb2IiLCJpc0ZpbGVMaXN0IiwiaXNVUkxTZWFyY2hQYXJhbXMiLCJpc1JlYWRhYmxlU3RyZWFtIiwiaXNSZXF1ZXN0IiwiaXNSZXNwb25zZSIsImlzSGVhZGVycyIsImFsbE93bktleXMiLCJsIiwibGVuIiwiZmluZEtleSIsIl9rZXkiLCJfZ2xvYmFsIiwiZ2xvYmFsVGhpcyIsImlzQ29udGV4dERlZmluZWQiLCJjb250ZXh0IiwiaXNUeXBlZEFycmF5IiwiVHlwZWRBcnJheSIsIlVpbnQ4QXJyYXkiLCJpc0hUTUxGb3JtIiwiaGFzT3duUHJvcGVydHkiLCJpc1JlZ0V4cCIsInJlZHVjZURlc2NyaXB0b3JzIiwicmVkdWNlciIsImRlc2NyaXB0b3JzIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsInJlZHVjZWREZXNjcmlwdG9ycyIsImRlc2NyaXB0b3IiLCJyZXQiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiQUxQSEEiLCJESUdJVCIsIkFMUEhBQkVUIiwiQUxQSEFfRElHSVQiLCJ0b1VwcGVyQ2FzZSIsImlzQXN5bmNGbiIsIl9zZXRJbW1lZGlhdGUiLCJzZXRJbW1lZGlhdGVTdXBwb3J0ZWQiLCJzZXRJbW1lZGlhdGUiLCJwb3N0TWVzc2FnZVN1cHBvcnRlZCIsInBvc3RNZXNzYWdlIiwidG9rZW4iLCJNYXRoIiwicmFuZG9tIiwiY2FsbGJhY2tzIiwiYWRkRXZlbnRMaXN0ZW5lciIsInNvdXJjZSIsImNiIiwic2V0VGltZW91dCIsImFzYXAiLCJxdWV1ZU1pY3JvdGFzayIsInByb2Nlc3MiLCJuZXh0VGljayIsInV0aWxzJDEiLCJjb25zdHJ1Y3RvciIsImlzRm9ybURhdGEiLCJraW5kIiwiaXNBcnJheUJ1ZmZlclZpZXciLCJBcnJheUJ1ZmZlciIsImlzVmlldyIsImlzQm9vbGVhbiIsIm1lcmdlIiwiY2FzZWxlc3MiLCJhc3NpZ25WYWx1ZSIsInRhcmdldEtleSIsImV4dGVuZCIsInRyaW0iLCJzdHJpcEJPTSIsImNvbnRlbnQiLCJpbmhlcml0cyIsInN1cGVyQ29uc3RydWN0b3IiLCJwcm9wcyIsInRvRmxhdE9iamVjdCIsInNvdXJjZU9iaiIsImRlc3RPYmoiLCJwcm9wRmlsdGVyIiwibWVyZ2VkIiwiZW5kc1dpdGgiLCJzZWFyY2hTdHJpbmciLCJsYXN0SW5kZXgiLCJ0b0FycmF5IiwiYXJyIiwiZm9yRWFjaEVudHJ5IiwibmV4dCIsImRvbmUiLCJwYWlyIiwibWF0Y2hBbGwiLCJyZWdFeHAiLCJtYXRjaGVzIiwiZXhlYyIsImhhc093blByb3AiLCJmcmVlemVNZXRob2RzIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwidG9PYmplY3RTZXQiLCJhcnJheU9yU3RyaW5nIiwiZGVsaW1pdGVyIiwiZGVmaW5lIiwidG9DYW1lbENhc2UiLCJtIiwicDEiLCJwMiIsIm5vb3AiLCJ0b0Zpbml0ZU51bWJlciIsImRlZmF1bHRWYWx1ZSIsIk51bWJlciIsImlzRmluaXRlIiwiZ2VuZXJhdGVTdHJpbmciLCJhbHBoYWJldCIsImlzU3BlY0NvbXBsaWFudEZvcm0iLCJ0b0pTT05PYmplY3QiLCJ2aXNpdCIsInRhcmdldCIsInJlZHVjZWRWYWx1ZSIsImlzVGhlbmFibGUiLCJjYXRjaCIsIkF4aW9zRXJyb3IiLCJjYXB0dXJlU3RhY2tUcmFjZSIsInRvSlNPTiIsIm51bWJlciIsImZpbGVOYW1lIiwibGluZU51bWJlciIsImNvbHVtbk51bWJlciIsInByb3RvdHlwZSQxIiwiY3VzdG9tUHJvcHMiLCJheGlvc0Vycm9yIiwiY2F1c2UiLCJpc1Zpc2l0YWJsZSIsInJlbW92ZUJyYWNrZXRzIiwicmVuZGVyS2V5IiwiZG90cyIsInByZWRpY2F0ZXMiLCJ0b0Zvcm1EYXRhIiwibWV0YVRva2VucyIsImluZGV4ZXMiLCJvcHRpb24iLCJ2aXNpdG9yIiwiZGVmYXVsdFZpc2l0b3IiLCJ1c2VCbG9iIiwiY29udmVydFZhbHVlIiwiaXNGbGF0QXJyYXkiLCJlbCIsImluZGV4IiwiZXhwb3NlZEhlbHBlcnMiLCJidWlsZCIsImVuY29kZSQxIiwiY2hhck1hcCIsIkF4aW9zVVJMU2VhcmNoUGFyYW1zIiwiX3BhaXJzIiwiYnVpbGRVUkwiLCJfZW5jb2RlIiwic2VyaWFsaXplRm4iLCJzZXJpYWxpemUiLCJzZXJpYWxpemVkUGFyYW1zIiwiaGFzaG1hcmtJbmRleCIsImVuY29kZXIiLCJJbnRlcmNlcHRvck1hbmFnZXIkMSIsIkludGVyY2VwdG9yTWFuYWdlciIsImhhbmRsZXJzIiwidXNlIiwiZnVsZmlsbGVkIiwicmVqZWN0ZWQiLCJzeW5jaHJvbm91cyIsInJ1bldoZW4iLCJlamVjdCIsImNsZWFyIiwiaCIsInRyYW5zaXRpb25hbERlZmF1bHRzIiwic2lsZW50SlNPTlBhcnNpbmciLCJmb3JjZWRKU09OUGFyc2luZyIsImNsYXJpZnlUaW1lb3V0RXJyb3IiLCJwbGF0Zm9ybSQxIiwiaXNCcm93c2VyIiwiY2xhc3NlcyIsInByb3RvY29scyIsImhhc0Jyb3dzZXJFbnYiLCJkb2N1bWVudCIsImhhc1N0YW5kYXJkQnJvd3NlckVudiIsInByb2R1Y3QiLCJuYXZpZ2F0b3IiLCJoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYiLCJXb3JrZXJHbG9iYWxTY29wZSIsImltcG9ydFNjcmlwdHMiLCJvcmlnaW4iLCJsb2NhdGlvbiIsImhyZWYiLCJwbGF0Zm9ybSIsImZyZWV6ZSIsIl9fcHJvdG9fXyIsImZvcm1EYXRhVG9KU09OIiwiYnVpbGRQYXRoIiwiaXNOdW1lcmljS2V5IiwiaXNMYXN0IiwiYXJyYXlUb09iamVjdCIsInBhcnNlUHJvcFBhdGgiLCJkZWZhdWx0cyIsInRyYW5zaXRpb25hbCIsImFkYXB0ZXIiLCJ0cmFuc2Zvcm1SZXF1ZXN0IiwiZ2V0Q29udGVudFR5cGUiLCJoYXNKU09OQ29udGVudFR5cGUiLCJpc09iamVjdFBheWxvYWQiLCJzZXRDb250ZW50VHlwZSIsImhlbHBlcnMiLCJpc05vZGUiLCJ0b1VSTEVuY29kZWRGb3JtIiwiZm9ybVNlcmlhbGl6ZXIiLCJfRm9ybURhdGEiLCJlbnYiLCJyYXdWYWx1ZSIsInBhcnNlciIsInBhcnNlIiwiZSIsInN0cmluZ2lmeVNhZmVseSIsInRyYW5zZm9ybVJlc3BvbnNlIiwiSlNPTlJlcXVlc3RlZCIsInJlc3BvbnNlVHlwZSIsInN0cmljdEpTT05QYXJzaW5nIiwiRVJSX0JBRF9SRVNQT05TRSIsInhzcmZDb29raWVOYW1lIiwieHNyZkhlYWRlck5hbWUiLCJtYXhDb250ZW50TGVuZ3RoIiwidmFsaWRhdGVTdGF0dXMiLCJjb21tb24iLCJkZWZhdWx0cyQxIiwiaWdub3JlRHVwbGljYXRlT2YiLCIkaW50ZXJuYWxzIiwibm9ybWFsaXplSGVhZGVyIiwiaGVhZGVyIiwibm9ybWFsaXplVmFsdWUiLCJtYXRjaEhlYWRlclZhbHVlIiwiaXNIZWFkZXJOYW1lRmlsdGVyIiwidmFsdWVPclJld3JpdGUiLCJyZXdyaXRlIiwic2V0SGVhZGVyIiwiX3ZhbHVlIiwiX2hlYWRlciIsIl9yZXdyaXRlIiwibEhlYWRlciIsInNldEhlYWRlcnMiLCJyYXdIZWFkZXJzIiwicGFyc2VkIiwibGluZSIsInN1YnN0cmluZyIsInBhcnNlSGVhZGVycyIsInRva2VucyIsInRva2Vuc1JFIiwicGFyc2VUb2tlbnMiLCJtYXRjaGVyIiwiZGVsZXRlZCIsImRlbGV0ZUhlYWRlciIsImZvcm1hdCIsIm5vcm1hbGl6ZWQiLCJ3IiwiY2hhciIsImZvcm1hdEhlYWRlciIsInRhcmdldHMiLCJhc1N0cmluZ3MiLCJjb21wdXRlZCIsImFjY2Vzc29yIiwiYWNjZXNzb3JzIiwiZGVmaW5lQWNjZXNzb3IiLCJhY2Nlc3Nvck5hbWUiLCJtZXRob2ROYW1lIiwiYXJnMSIsImFyZzIiLCJhcmczIiwiY29uZmlndXJhYmxlIiwiYnVpbGRBY2Nlc3NvcnMiLCJtYXBwZWQiLCJoZWFkZXJWYWx1ZSIsIkF4aW9zSGVhZGVycyQxIiwidHJhbnNmb3JtRGF0YSIsImZucyIsImlzQ2FuY2VsIiwiX19DQU5DRUxfXyIsIkNhbmNlbGVkRXJyb3IiLCJFUlJfQ0FOQ0VMRUQiLCJzZXR0bGUiLCJyZXNvbHZlIiwicmVqZWN0IiwiRVJSX0JBRF9SRVFVRVNUIiwiZmxvb3IiLCJwcm9ncmVzc0V2ZW50UmVkdWNlciIsImxpc3RlbmVyIiwiaXNEb3dubG9hZFN0cmVhbSIsImZyZXEiLCJieXRlc05vdGlmaWVkIiwiX3NwZWVkb21ldGVyIiwic2FtcGxlc0NvdW50IiwibWluIiwiYnl0ZXMiLCJ0aW1lc3RhbXBzIiwiZmlyc3RTYW1wbGVUUyIsImhlYWQiLCJ0YWlsIiwiY2h1bmtMZW5ndGgiLCJub3ciLCJzdGFydGVkQXQiLCJieXRlc0NvdW50IiwicGFzc2VkIiwicm91bmQiLCJzcGVlZG9tZXRlciIsImxhc3RBcmdzIiwidGltZXIiLCJ0aW1lc3RhbXAiLCJ0aHJlc2hvbGQiLCJpbnZva2UiLCJhcmdzIiwiY2xlYXJUaW1lb3V0IiwidGhyb3R0bGUiLCJsb2FkZWQiLCJsZW5ndGhDb21wdXRhYmxlIiwicHJvZ3Jlc3NCeXRlcyIsInJhdGUiLCJwcm9ncmVzcyIsImVzdGltYXRlZCIsImV2ZW50IiwicHJvZ3Jlc3NFdmVudERlY29yYXRvciIsInRocm90dGxlZCIsImFzeW5jRGVjb3JhdG9yIiwiaXNVUkxTYW1lT3JpZ2luIiwibXNpZSIsInVzZXJBZ2VudCIsInVybFBhcnNpbmdOb2RlIiwiY3JlYXRlRWxlbWVudCIsIm9yaWdpblVSTCIsInJlc29sdmVVUkwiLCJzZXRBdHRyaWJ1dGUiLCJwcm90b2NvbCIsImhvc3QiLCJzZWFyY2giLCJoYXNoIiwiaG9zdG5hbWUiLCJwb3J0IiwicGF0aG5hbWUiLCJyZXF1ZXN0VVJMIiwiY29va2llcyIsIndyaXRlIiwiZXhwaXJlcyIsInNlY3VyZSIsImNvb2tpZSIsInRvR01UU3RyaW5nIiwicmVhZCIsIlJlZ0V4cCIsImRlY29kZVVSSUNvbXBvbmVudCIsInJlbW92ZSIsImJ1aWxkRnVsbFBhdGgiLCJiYXNlVVJMIiwicmVxdWVzdGVkVVJMIiwicmVsYXRpdmVVUkwiLCJjb21iaW5lVVJMcyIsImhlYWRlcnNUb09iamVjdCIsIm1lcmdlQ29uZmlnIiwiY29uZmlnMSIsImNvbmZpZzIiLCJnZXRNZXJnZWRWYWx1ZSIsIm1lcmdlRGVlcFByb3BlcnRpZXMiLCJ2YWx1ZUZyb21Db25maWcyIiwiZGVmYXVsdFRvQ29uZmlnMiIsIm1lcmdlRGlyZWN0S2V5cyIsIm1lcmdlTWFwIiwicGFyYW1zU2VyaWFsaXplciIsInRpbWVvdXRNZXNzYWdlIiwid2l0aENyZWRlbnRpYWxzIiwid2l0aFhTUkZUb2tlbiIsIm9uVXBsb2FkUHJvZ3Jlc3MiLCJvbkRvd25sb2FkUHJvZ3Jlc3MiLCJkZWNvbXByZXNzIiwiYmVmb3JlUmVkaXJlY3QiLCJ0cmFuc3BvcnQiLCJodHRwQWdlbnQiLCJodHRwc0FnZW50IiwiY2FuY2VsVG9rZW4iLCJzb2NrZXRQYXRoIiwicmVzcG9uc2VFbmNvZGluZyIsImNvbmZpZ1ZhbHVlIiwicmVzb2x2ZUNvbmZpZyIsIm5ld0NvbmZpZyIsImF1dGgiLCJidG9hIiwicGFzc3dvcmQiLCJ1bmVzY2FwZSIsIkJvb2xlYW4iLCJ4c3JmVmFsdWUiLCJ4aHJBZGFwdGVyIiwiWE1MSHR0cFJlcXVlc3QiLCJQcm9taXNlIiwiX2NvbmZpZyIsInJlcXVlc3REYXRhIiwib25DYW5jZWxlZCIsInVwbG9hZFRocm90dGxlZCIsImRvd25sb2FkVGhyb3R0bGVkIiwiZmx1c2hVcGxvYWQiLCJmbHVzaERvd25sb2FkIiwic2lnbmFsIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIm9ubG9hZGVuZCIsInJlc3BvbnNlSGVhZGVycyIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsImVyciIsInJlc3BvbnNlVGV4dCIsIm9wZW4iLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwicmVzcG9uc2VVUkwiLCJvbmFib3J0IiwiRUNPTk5BQk9SVEVEIiwib25lcnJvciIsIkVSUl9ORVRXT1JLIiwib250aW1lb3V0IiwidGltZW91dEVycm9yTWVzc2FnZSIsIkVUSU1FRE9VVCIsInNldFJlcXVlc3RIZWFkZXIiLCJ1cGxvYWQiLCJjYW5jZWwiLCJhYm9ydCIsInN1YnNjcmliZSIsImFib3J0ZWQiLCJwYXJzZVByb3RvY29sIiwic2VuZCIsImNvbXBvc2VTaWduYWxzJDEiLCJzaWduYWxzIiwiY29udHJvbGxlciIsIkFib3J0Q29udHJvbGxlciIsInN0cmVhbUNodW5rIiwiY2h1bmsiLCJjaHVua1NpemUiLCJwb3MiLCJ0cmFja1N0cmVhbSIsIm9uUHJvZ3Jlc3MiLCJvbkZpbmlzaCIsImFzeW5jIiwiaXRlcmFibGUiLCJyZWFkQnl0ZXMiLCJfb25GaW5pc2giLCJwdWxsIiwiY2xvc2UiLCJsb2FkZWRCeXRlcyIsImVucXVldWUiLCJyZXR1cm4iLCJoaWdoV2F0ZXJNYXJrIiwiaXNGZXRjaFN1cHBvcnRlZCIsImZldGNoIiwiUmVzcG9uc2UiLCJpc1JlYWRhYmxlU3RyZWFtU3VwcG9ydGVkIiwiZW5jb2RlVGV4dCIsIlRleHRFbmNvZGVyIiwiYXJyYXlCdWZmZXIiLCJzdXBwb3J0c1JlcXVlc3RTdHJlYW0iLCJkdXBsZXhBY2Nlc3NlZCIsImhhc0NvbnRlbnRUeXBlIiwiZHVwbGV4Iiwic3VwcG9ydHNSZXNwb25zZVN0cmVhbSIsInJlc29sdmVycyIsIl8iLCJFUlJfTk9UX1NVUFBPUlQiLCJyZXNvbHZlQm9keUxlbmd0aCIsImdldENvbnRlbnRMZW5ndGgiLCJnZXRCb2R5TGVuZ3RoIiwia25vd25BZGFwdGVycyIsImh0dHAiLCJ4aHIiLCJmZXRjaE9wdGlvbnMiLCJmaW5pc2hlZCIsImNvbXBvc2VkU2lnbmFsIiwic3RvcFRpbWVvdXQiLCJyZXF1ZXN0Q29udGVudExlbmd0aCIsImNvbnRlbnRUeXBlSGVhZGVyIiwiX3JlcXVlc3QiLCJmbHVzaCIsImNyZWRlbnRpYWxzIiwiaXNTdHJlYW1SZXNwb25zZSIsInJlc3BvbnNlQ29udGVudExlbmd0aCIsInJlc3BvbnNlRGF0YSIsInJlbmRlclJlYXNvbiIsImlzUmVzb2x2ZWRIYW5kbGUiLCJhZGFwdGVycyIsIm5hbWVPckFkYXB0ZXIiLCJyZWplY3RlZFJlYXNvbnMiLCJyZWFzb25zIiwidGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZCIsInRocm93SWZSZXF1ZXN0ZWQiLCJkaXNwYXRjaFJlcXVlc3QiLCJWRVJTSU9OIiwidmFsaWRhdG9ycyQxIiwiZGVwcmVjYXRlZFdhcm5pbmdzIiwidmFsaWRhdG9yIiwiZm9ybWF0TWVzc2FnZSIsIm9wdCIsImRlc2MiLCJvcHRzIiwiRVJSX0RFUFJFQ0FURUQiLCJhc3NlcnRPcHRpb25zIiwic2NoZW1hIiwiYWxsb3dVbmtub3duIiwiRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsInZhbGlkYXRvcnMiLCJBeGlvcyIsImluc3RhbmNlQ29uZmlnIiwiaW50ZXJjZXB0b3JzIiwiY29uZmlnT3JVcmwiLCJkdW1teSIsImJvb2xlYW4iLCJmdW5jdGlvbiIsImNvbnRleHRIZWFkZXJzIiwicmVxdWVzdEludGVyY2VwdG9yQ2hhaW4iLCJzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMiLCJpbnRlcmNlcHRvciIsInVuc2hpZnQiLCJyZXNwb25zZUludGVyY2VwdG9yQ2hhaW4iLCJwcm9taXNlIiwiY2hhaW4iLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJnZXRVcmkiLCJnZW5lcmF0ZUhUVFBNZXRob2QiLCJpc0Zvcm0iLCJBeGlvcyQxIiwiQ2FuY2VsVG9rZW4iLCJleGVjdXRvciIsInJlc29sdmVQcm9taXNlIiwiX2xpc3RlbmVycyIsIm9uZnVsZmlsbGVkIiwiX3Jlc29sdmUiLCJzcGxpY2UiLCJDYW5jZWxUb2tlbiQxIiwiSHR0cFN0YXR1c0NvZGUiLCJDb250aW51ZSIsIlN3aXRjaGluZ1Byb3RvY29scyIsIlByb2Nlc3NpbmciLCJFYXJseUhpbnRzIiwiT2siLCJDcmVhdGVkIiwiQWNjZXB0ZWQiLCJOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb24iLCJOb0NvbnRlbnQiLCJSZXNldENvbnRlbnQiLCJQYXJ0aWFsQ29udGVudCIsIk11bHRpU3RhdHVzIiwiQWxyZWFkeVJlcG9ydGVkIiwiSW1Vc2VkIiwiTXVsdGlwbGVDaG9pY2VzIiwiTW92ZWRQZXJtYW5lbnRseSIsIkZvdW5kIiwiU2VlT3RoZXIiLCJOb3RNb2RpZmllZCIsIlVzZVByb3h5IiwiVW51c2VkIiwiVGVtcG9yYXJ5UmVkaXJlY3QiLCJQZXJtYW5lbnRSZWRpcmVjdCIsIkJhZFJlcXVlc3QiLCJVbmF1dGhvcml6ZWQiLCJQYXltZW50UmVxdWlyZWQiLCJGb3JiaWRkZW4iLCJOb3RGb3VuZCIsIk1ldGhvZE5vdEFsbG93ZWQiLCJOb3RBY2NlcHRhYmxlIiwiUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkIiwiUmVxdWVzdFRpbWVvdXQiLCJDb25mbGljdCIsIkdvbmUiLCJMZW5ndGhSZXF1aXJlZCIsIlByZWNvbmRpdGlvbkZhaWxlZCIsIlBheWxvYWRUb29MYXJnZSIsIlVyaVRvb0xvbmciLCJVbnN1cHBvcnRlZE1lZGlhVHlwZSIsIlJhbmdlTm90U2F0aXNmaWFibGUiLCJFeHBlY3RhdGlvbkZhaWxlZCIsIkltQVRlYXBvdCIsIk1pc2RpcmVjdGVkUmVxdWVzdCIsIlVucHJvY2Vzc2FibGVFbnRpdHkiLCJMb2NrZWQiLCJGYWlsZWREZXBlbmRlbmN5IiwiVG9vRWFybHkiLCJVcGdyYWRlUmVxdWlyZWQiLCJQcmVjb25kaXRpb25SZXF1aXJlZCIsIlRvb01hbnlSZXF1ZXN0cyIsIlJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZSIsIlVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zIiwiSW50ZXJuYWxTZXJ2ZXJFcnJvciIsIk5vdEltcGxlbWVudGVkIiwiQmFkR2F0ZXdheSIsIlNlcnZpY2VVbmF2YWlsYWJsZSIsIkdhdGV3YXlUaW1lb3V0IiwiSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQiLCJWYXJpYW50QWxzb05lZ290aWF0ZXMiLCJJbnN1ZmZpY2llbnRTdG9yYWdlIiwiTG9vcERldGVjdGVkIiwiTm90RXh0ZW5kZWQiLCJOZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZCIsIkh0dHBTdGF0dXNDb2RlJDEiLCJheGlvcyIsImNyZWF0ZUluc3RhbmNlIiwiZGVmYXVsdENvbmZpZyIsImluc3RhbmNlIiwiQ2FuY2VsIiwiYWxsIiwicHJvbWlzZXMiLCJzcHJlYWQiLCJjYWxsYmFjayIsImlzQXhpb3NFcnJvciIsInBheWxvYWQiLCJmb3JtVG9KU09OIiwiZ2V0QWRhcHRlciIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsIl9fd2VicGFja19tb2R1bGVzX18iLCJGdW5jdGlvbiIsIm5tZCIsInBhdGhzIiwiY2hpbGRyZW4iXSwic291cmNlUm9vdCI6IiJ9