mailgun.js 5.2.2 → 6.0.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.
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={475: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 s=o(r(438)),i=o(r(373)),a=o(r(22)),u=o(r(747)),c=o(r(778)),p=o(r(750)),h=o(r(197)),f=o(r(277)),d=o(r(721)),l=o(r(345)),y=o(r(602)),m=o(r(126)),b=o(r(135)),v=o(r(60)),_=o(r(587)),g=o(r(955)),w=o(r(75)),q=function(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 s.default(r,e);var o=new b.default(this.request),q=new v.default(this.request),R=new g.default(this.request),D=new w.default(this.request),T=new _.default(this.request);this.domains=new i.default(this.request,q,R,D),this.webhooks=new p.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 h.default(this.request),this.routes=new f.default(this.request),this.ips=new l.default(this.request),this.ip_pools=new y.default(this.request),this.lists=new m.default(this.request,o),this.validate=new d.default(this.request,T)};e.default=q},373: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}),e.Domain=void 0;var s=o(r(78)),i=o(r(142)),a=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};e.Domain=a;var u=function(){function t(t,e,r,n){this.request=t,this.domainCredentials=e,this.domainTemplates=r,this.domainTags=n}return t.prototype._parseMessage=function(t){return t.body},t.prototype._parseDomainList=function(t){return t.body.items.map((function(t){return new a(t)}))},t.prototype._parseDomain=function(t){return new a(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=n({},t);return"force_dkim_authority"in r&&"boolean"==typeof r.force_dkim_authority&&(r.force_dkim_authority="true"===r.toString()?"true":"false"),this.request.postWithFD("/v3/domains",r).then((function(t){return e._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,s.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 new i.default({status:400,statusText:"Received boolean value for active property",body:{message:'Property "active" must contain string value.'}});return this.request.putWithFD((0,s.default)("/v3/domains",t,"tracking",e),r).then((function(t){return n._parseTrackingUpdate(t)}))},t.prototype.getIps=function(t){return this.request.get((0,s.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,s.default)("/v3/domains",t,"ips"),{ip:e})},t.prototype.deleteIp=function(t,e){return this.request.delete((0,s.default)("/v3/domains",t,"ips",e))},t.prototype.linkIpPool=function(t,e){return this.request.postWithFD((0,s.default)("/v3/domains",t,"ips"),{pool_id:e})},t.prototype.unlinkIpPoll=function(t,e){var r="";if(e.pool_id&&e.ip)throw new i.default({status:400,statusText:"Too much data for replacement",body:{message:"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,s.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},60: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(78)),s=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=s},75: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}),e.DomainTagStatistic=e.DomainTag=void 0;var s=o(r(78)),i=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=i;var a=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 n(n({},t),{time:new Date(t.time)})}))};e.DomainTagStatistic=a;var u=function(){function t(t){this.request=t,this.baseRoute="/v3/"}return t.prototype._parsePageLinks=function(t){return Object.entries(t.body.paging).reduce((function(t,e){var r=e[0],n=e[1];return t[r]={id:r,url:n},t}),{})},t.prototype._parseDomainTagsList=function(t){return{items:t.body.items.map((function(t){return new i(t)})),pages:this._parsePageLinks(t)}},t.prototype._parseTagStatistic=function(t){return new a(t)},t.prototype.list=function(t,e){var r=this;return this.request.get((0,s.default)(this.baseRoute,t,"/tags"),e).then((function(t){return r._parseDomainTagsList(t)}))},t.prototype.get=function(t,e){return this.request.get((0,s.default)(this.baseRoute,t,"/tags",e)).then((function(t){return new i(t.body)}))},t.prototype.update=function(t,e,r){return this.request.put((0,s.default)(this.baseRoute,t,"/tags",e),r).then((function(t){return t.body}))},t.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}}))},t.prototype.statistic=function(t,e,r){var n=this;return this.request.get((0,s.default)(this.baseRoute,t,"/tags",e,"stats"),r).then((function(t){return n._parseTagStatistic(t)}))},t.prototype.countries=function(t,e){return this.request.get((0,s.default)(this.baseRoute,t,"/tags",e,"stats/aggregates/countries")).then((function(t){return t.body}))},t.prototype.providers=function(t,e){return this.request.get((0,s.default)(this.baseRoute,t,"/tags",e,"stats/aggregates/providers")).then((function(t){return t.body}))},t.prototype.devices=function(t,e){return this.request.get((0,s.default)(this.baseRoute,t,"/tags",e,"stats/aggregates/devices")).then((function(t){return t.body}))},t}();e.default=u},955: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}),e.DomainTemplateItem=void 0;var s=o(r(78)),i=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=n({},t);return e.createdAt=new Date(t.createdAt),e})))};e.DomainTemplateItem=i;var a=function(){function t(t){this.request=t,this.baseRoute="/v3/"}return t.prototype.parseCreationResponse=function(t){return new i(t.body.template)},t.prototype.parseCreationVersionResponse=function(t){var e={};return e.status=t.status,e.message=t.body.message,t.body&&t.body.template&&(e.template=new i(t.body.template)),e},t.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},t.prototype.parseNotificationResponse=function(t){var e={};return e.status=t.status,e.message=t.body.message,e},t.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},t.prototype.parseList=function(t){var e={};return e.items=t.body.items.map((function(t){return new i(t)})),e.pages=t.body.paging,e},t.prototype.parseListTemplateVersions=function(t){var e={};return e.template=new i(t.body.template),e.pages=t.body.paging,e},t.prototype.list=function(t,e){var r=this;return this.request.get((0,s.default)(this.baseRoute,t,"/templates"),e).then((function(t){return r.parseList(t)}))},t.prototype.get=function(t,e,r){return this.request.get((0,s.default)(this.baseRoute,t,"/templates/",e),r).then((function(t){return new i(t.body.template)}))},t.prototype.create=function(t,e){var r=this;return this.request.postWithFD((0,s.default)(this.baseRoute,t,"/templates"),e).then((function(t){return r.parseCreationResponse(t)}))},t.prototype.update=function(t,e,r){var n=this;return this.request.putWithFD((0,s.default)(this.baseRoute,t,"/templates/",e),r).then((function(t){return n.parseMutationResponse(t)}))},t.prototype.destroy=function(t,e){var r=this;return this.request.delete((0,s.default)(this.baseRoute,t,"/templates/",e)).then((function(t){return r.parseMutationResponse(t)}))},t.prototype.destroyAll=function(t){var e=this;return this.request.delete((0,s.default)(this.baseRoute,t,"/templates")).then((function(t){return e.parseNotificationResponse(t)}))},t.prototype.createVersion=function(t,e,r){var n=this;return this.request.postWithFD((0,s.default)(this.baseRoute,t,"/templates/",e,"/versions"),r).then((function(t){return n.parseCreationVersionResponse(t)}))},t.prototype.getVersion=function(t,e,r){return this.request.get((0,s.default)(this.baseRoute,t,"/templates/",e,"/versions/",r)).then((function(t){return new i(t.body.template)}))},t.prototype.updateVersion=function(t,e,r,n){var o=this;return this.request.putWithFD((0,s.default)(this.baseRoute,t,"/templates/",e,"/versions/",r),n).then((function(t){return o.parseMutateTemplateVersionResponse(t)}))},t.prototype.destroyVersion=function(t,e,r){var n=this;return this.request.delete((0,s.default)(this.baseRoute,t,"/templates/",e,"/versions/",r)).then((function(t){return n.parseMutateTemplateVersionResponse(t)}))},t.prototype.listVersions=function(t,e,r){var n=this;return this.request.get((0,s.default)(this.baseRoute,t,"/templates",e,"/versions"),r).then((function(t){return n.parseListTemplateVersions(t)}))},t}();e.default=a},142: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,s=e.body,i=void 0===s?{}:s,a=this,u=i.message,c=i.error;return(a=t.call(this)||this).stack="",a.status=r,a.message=o||c||n,a.details=u,a}return n(e,t),e}(Error);e.default=o},22: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 s=o(r(78)),i=function(){function t(t){this.request=t}return t.prototype._parsePageNumber=function(t){return t.split("/").pop()||""},t.prototype._parsePage=function(t,e){return{id:t,number:this._parsePageNumber(e),url:e}},t.prototype._parsePageLinks=function(t){var e=this;return Object.entries(t.body.paging).reduce((function(t,r){var n=r[0],o=r[1];return t[n]=e._parsePage(n,o),t}),{})},t.prototype._parseEventList=function(t){return{items:t.body.items,pages:this._parsePageLinks(t)}},t.prototype.get=function(t,e){var r,o=this,i=n({},e);return i&&i.page?(r=(0,s.default)("/v3",t,"events",i.page),delete i.page):r=(0,s.default)("/v3",t,"events"),this.request.get(r,i).then((function(t){return o._parseEventList(t)}))},t}();e.default=i},175: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(475)),s=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 o.default(t,this.formData)},t}();e.default=s},990:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SuppressionModels=void 0,function(t){t.BOUNCES="bounces",t.COMPLAINTS="complaints",t.UNSUBSCRIBES="unsubscribes",t.WHITELISTS="whitelists"}(e.SuppressionModels||(e.SuppressionModels={}))},602:(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){var e=this;return this.request.get("/v1/ip_pools",t).then((function(t){return e.parseIpPoolsResponse(t)}))},t.prototype.create=function(t){return this.request.postWithFD("/v1/ip_pools",t).then((function(t){return null==t?void 0:t.body}))},t.prototype.update=function(t,e){return this.request.patchWithFD("/v1/ip_pools/".concat(t),e).then((function(t){return null==t?void 0:t.body}))},t.prototype.delete=function(t,e){return this.request.delete("/v1/ip_pools/".concat(t),e).then((function(t){return null==t?void 0:t.body}))},t.prototype.parseIpPoolsResponse=function(t){return t.body.ip_pools},t}();e.default=r},345:(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){var e=this;return this.request.get("/v3/ips",t).then((function(t){return e.parseIpsResponse(t)}))},t.prototype.get=function(t){var e=this;return this.request.get("/v3/ips/".concat(t)).then((function(t){return e.parseIpsResponse(t)}))},t.prototype.parseIpsResponse=function(t){return t.body},t}();e.default=r},126: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(){function t(t,e){this.request=t,this.baseRoute="/v3/lists",this.members=e}return t.prototype.parseValidationResult=function(t,e){return{status:t,validationResult:r(r({},e),{created_at:new Date(1e3*e.created_at)})}},t.prototype.list=function(t){return this.request.get("".concat(this.baseRoute,"/pages"),t).then((function(t){return t.body.items}))},t.prototype.get=function(t){return this.request.get("".concat(this.baseRoute,"/").concat(t)).then((function(t){return t.body.list}))},t.prototype.create=function(t){return this.request.postWithFD(this.baseRoute,t).then((function(t){return t.body.list}))},t.prototype.update=function(t,e){return this.request.putWithFD("".concat(this.baseRoute,"/").concat(t),e).then((function(t){return t.body.list}))},t.prototype.destroy=function(t){return this.request.delete("".concat(this.baseRoute,"/").concat(t)).then((function(t){return t.body}))},t.prototype.validate=function(t){return this.request.post("".concat(this.baseRoute,"/").concat(t,"/validate"),{}).then((function(t){return r({status:t.status},t.body)}))},t.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)}))},t.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}}))},t}();e.default=n},135: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(){function t(t){this.request=t,this.baseRoute="/v3/lists"}return t.prototype.checkAndUpdateData=function(t){var e=r({},t);return"object"==typeof t.vars&&(e.vars=JSON.stringify(e.vars)),"boolean"==typeof t.subscribed&&(e.subscribed=t.subscribed?"yes":"no"),e},t.prototype.listMembers=function(t,e){return this.request.get("".concat(this.baseRoute,"/").concat(t,"/members/pages"),e).then((function(t){return t.body.items}))},t.prototype.getMember=function(t,e){return this.request.get("".concat(this.baseRoute,"/").concat(t,"/members/").concat(e)).then((function(t){return t.body.member}))},t.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}))},t.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}))},t.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}))},t.prototype.destroyMember=function(t,e){return this.request.delete("".concat(this.baseRoute,"/").concat(t,"/members/").concat(e)).then((function(t){return t.body}))},t}();e.default=n},197: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(){function t(t){this.request=t}return t.prototype._parseResponse=function(t){return r({status:t.status},t.body)},t.prototype.create=function(t,e){return e.message?this.request.postWithFD("/v3/".concat(t,"/messages.mime"),e).then(this._parseResponse):this.request.postWithFD("/v3/".concat(t,"/messages"),e).then(this._parseResponse)},t}();e.default=n},587:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t){this.request=t}return t.prototype.list=function(){return this.request.get("/v4/address/validate/bulk").then((function(t){return t.body}))},t.prototype.get=function(t){return this.request.get("/v4/address/validate/bulk/".concat(t)).then((function(t){return t.body}))},t.prototype.create=function(t,e){return this.request.postWithFD("/v4/address/validate/bulk/".concat(t),e).then((function(t){return t.body}))},t.prototype.destroy=function(t){return this.request.delete("/v4/address/validate/bulk/".concat(t)).then((function(t){return t}))},t}();e.default=r},438: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]}),s=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)&&o(e,t,r);return s(e,t),e},a=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,s){function i(t){try{u(n.next(t))}catch(t){s(t)}}function a(t){try{u(n.throw(t))}catch(t){s(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(i,a)}u((n=n.apply(t,e||[])).next())}))},u=this&&this.__generator||function(t,e){var r,n,o,s,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return s={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function a(s){return function(a){return function(s){if(r)throw new TypeError("Generator is already executing.");for(;i;)try{if(r=1,n&&(o=2&s[0]?n.return:s[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,s[1])).done)return o;switch(n=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,n=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){i.label=s[1];break}if(6===s[0]&&i.label<o[1]){i.label=o[1],o=s;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(s);break}o[2]&&i.ops.pop(),i.trys.pop();continue}s=e.call(t,i)}catch(t){s=[6,t],n=0}finally{r=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,a])}}},c=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var p=i(r(501)),h=c(r(78)),f=c(r(899)),d=c(r(142)),l=function(t){return"object"==typeof t&&"function"==typeof t.pipe};function y(t){return void 0!==t.getHeaders}var m=function(){function t(t,e){this.username=t.username,this.key=t.key,this.url=t.url,this.timeout=t.timeout,this.headers=t.headers||{},this.FormDataConstructor=e}return t.prototype.request=function(t,e,r){return a(this,void 0,void 0,(function(){var o,s,i,a,c,y,m;return u(this,(function(u){switch(u.label){case 0:return o=n({},r),s=p.encode("".concat(this.username,":").concat(this.key)),i=n(n({Authorization:"Basic ".concat(s)},this.headers),null==o?void 0:o.headers),null==o||delete o.headers,i["Content-Type"]||delete i["Content-Type"],a=n({},o),(null==o?void 0:o.query)&&Object.getOwnPropertyNames(null==o?void 0:o.query).length>0&&(a.searchParams=o.query,delete a.query),[4,(0,f.default)((0,h.default)(this.url,e),n({method:t.toLocaleUpperCase(),headers:i,throwHttpErrors:!1,timeout:this.timeout},a))];case 1:return(null==(c=u.sent())?void 0:c.ok)?[3,6]:(null==c?void 0:c.body)&&l(c.body)?[4,(b=c.body,v=[],new Promise((function(t,e){b.on("data",(function(t){return v.push(t)})),b.on("error",e),b.on("end",(function(){return t(Buffer.concat(v).toString("utf8"))}))})))]:[3,3];case 2:return m=u.sent(),[3,5];case 3:return[4,null==c?void 0:c.json()];case 4:m=u.sent(),u.label=5;case 5:throw y=m,new d.default({status:null==c?void 0:c.status,statusText:null==c?void 0:c.statusText,body:{message:y}});case 6:return[4,this.getResponseBody(c)];case 7:return[2,u.sent()]}var b,v}))}))},t.prototype.getResponseBody=function(t){return a(this,void 0,void 0,(function(){var e,r,n;return u(this,(function(o){switch(o.label){case 0:e={body:{},status:null==t?void 0:t.status},r="",o.label=1;case 1:return o.trys.push([1,3,,4]),[4,t.text()];case 2:return r=o.sent(),n=JSON.parse(r),e.body=n,[2,e];case 3:return o.sent(),e.status=400,e.body={message:r},[2,e];case 4:return[2]}}))}))},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){return this.request(t,e,n({headers:{"Content-Type":"application/x-www-form-urlencoded"},body:r},o))},t.prototype.get=function(t,e,r){return this.query("get",t,e,r)},t.prototype.head=function(t,e,r){return this.query("head",t,e,r)},t.prototype.options=function(t,e,r){return this.query("options",t,e,r)},t.prototype.post=function(t,e,r){return this.command("post",t,e,r)},t.prototype.postWithFD=function(t,e){if(!e)throw new Error("Please provide data object");var r=this.createFormData(e);return this.command("post",t,r,{headers:{"Content-Type":null}})},t.prototype.putWithFD=function(t,e){if(!e)throw new Error("Please provide data object");var r=this.createFormData(e);return this.command("put",t,r,{headers:{"Content-Type":null}})},t.prototype.patchWithFD=function(t,e){if(!e)throw new Error("Please provide data object");var r=this.createFormData(e);return this.command("patch",t,r,{headers:{"Content-Type":null}})},t.prototype.createFormData=function(t){var e=this;return Object.keys(t).filter((function(e){return t[e]})).reduce((function(r,n){return["attachment","inline","file"].includes(n)?(e.addFilesToFD(n,t[n],r),r):"message"===n?(e.addMimeDataToFD(n,t[n],r),r):(e.addCommonPropertyToFD(n,t[n],r),r)}),new this.FormDataConstructor)},t.prototype.addMimeDataToFD=function(t,e,r){y(r)?Buffer.isBuffer(e)&&r.append(t,e,{filename:"MimeMessage"}):r.append(t,e,"MimeMessage")},t.prototype.addFilesToFD=function(t,e,r){var o=function(t,e,r){var o=l(e)?e:e.data,s=function(t){if("object"!=typeof t||l(t))return{};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})}(e);y(r)?r.append(t,o,s):r.append(t,o,s.filename)};Array.isArray(e)?e.forEach((function(e){o(t,e,r)})):o(t,e,r)},t.prototype.addCommonPropertyToFD=function(t,e,r){Array.isArray(e)?e.forEach((function(e){r.append(t,e)})):null!=e&&r.append(t,e)},t.prototype.put=function(t,e,r){return this.command("put",t,e,r)},t.prototype.patch=function(t,e,r){return this.command("patch",t,e,r)},t.prototype.delete=function(t,e,r){return this.command("delete",t,e,r)},t}();e.default=m},277:(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},747: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.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,s=e.length;o<s;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))},s=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var i=s(r(78)),a=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=n({},t);return e.time=new Date(t.time),e}))},u=function(){function t(t){this.request=t}return t.prototype.prepareSearchParams=function(t){var e=[];return"object"==typeof t&&Object.keys(t).length&&(e=Object.entries(t).reduce((function(t,e){var r=e[0],n=e[1];if(Array.isArray(n)&&n.length){var s=n.map((function(t){return[r,t]}));return o(o([],t,!0),s,!0)}return t.push([r,n]),t}),[])),e},t.prototype._parseStats=function(t){return new a(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=u},778: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)}),s=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,s=e.length;o<s;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))},i=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.WhiteList=e.Unsubscribe=e.Complaint=e.Bounce=e.Suppression=void 0;var a=i(r(78)),u=r(990),c=i(r(142)),p={headers:{"Content-Type":"application/json"}},h=function(t){this.type=t};e.Suppression=h;var f=function(t){function e(e){var r=t.call(this,u.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}(h);e.Bounce=f;var d=function(t){function e(e){var r=t.call(this,u.SuppressionModels.COMPLAINTS)||this;return r.address=e.address,r.created_at=new Date(e.created_at),r}return o(e,t),e}(h);e.Complaint=d;var l=function(t){function e(e){var r=t.call(this,u.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}(h);e.Unsubscribe=l;var y=function(t){function e(e){var r=t.call(this,u.SuppressionModels.WHITELISTS)||this;return r.value=e.value,r.reason=e.reason,r.createdAt=new Date(e.createdAt),r}return o(e,t),e}(h);e.WhiteList=y;var m=function(){function t(t){this.request=t,this.models=new Map,this.models.set("bounces",f),this.models.set("complaints",d),this.models.set("unsubscribes",l),this.models.set("whitelists",y)}return t.prototype._parsePage=function(t,e){var r=new URL(e).searchParams;return{id:t,page:r.has("page")?r.get("page"):void 0,address:r.has("address")?r.get("address"):void 0,url:e}},t.prototype._parsePageLinks=function(t){var e=this;return Object.entries(t.body.paging).reduce((function(t,r){var n=r[0],o=r[1];return t[n]=e._parsePage(n,o),t}),{})},t.prototype._parseList=function(t,e){var r={};return r.items=t.body.items.map((function(t){return new e(t)})),r.pages=this._parsePageLinks(t),r},t.prototype._parseItem=function(t,e){return new e(t)},t.prototype.createWhiteList=function(t,e){if(Array.isArray(e))throw new c.default({status:400,statusText:"Data property should be an object",body:{message:"Whitelist's creation process does not support multiple creations. Data property should be an object"}});return this.request.postWithFD((0,a.default)("v3",t,"whitelists"),e).then(this.prepareResponse)},t.prototype.checkType=function(t){if(!this.models.has(t))throw new c.default({status:400,statusText:"Unknown type value",body:{message:"Type may be only one of [bounces, complaints, unsubscribes, whitelists]"}})},t.prototype.prepareResponse=function(t){return{message:t.body.message,type:t.body.type||"",value:t.body.value||"",status:t.status}},t.prototype.list=function(t,e,r){var n=this;this.checkType(e);var o=this.models.get(e);return this.request.get((0,a.default)("v3",t,e),r).then((function(t){return n._parseList(t,o)}))},t.prototype.get=function(t,e,r){var n=this;this.checkType(e);var o=this.models.get(e);return this.request.get((0,a.default)("v3",t,e,encodeURIComponent(r))).then((function(t){return n._parseItem(t.body,o)}))},t.prototype.create=function(t,e,r){var n;return this.checkType(e),"whitelists"===e?this.createWhiteList(t,r):(n=Array.isArray(r)?s([],r,!0):[r],this.request.post((0,a.default)("v3",t,e),JSON.stringify(n),p).then(this.prepareResponse))},t.prototype.destroy=function(t,e,r){return this.checkType(e),this.request.delete((0,a.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}}))},t}();e.default=m,t.exports=m},721:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t,e){this.request=t,this.multipleValidation=e}return t.prototype.get=function(t){return this.request.get("/v4/address/validate",{address:t}).then((function(t){return t})).then((function(t){return t.body}))},t}();e.default=r},750: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(78)),s=function(t,e){this.id=t,this.url=e},i=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;return o||(o=(null==n?void 0:n.urls)&&n.urls.length?n.urls[0]:void 0),new s(t,o)}},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=i},501:function(t,e,r){var n;t=r.nmd(t),function(o){var s=e,i=(t&&t.exports,"object"==typeof r.g&&r.g);i.global!==i&&i.window;var a=function(t){this.message=t};(a.prototype=new Error).name="InvalidCharacterError";var u=function(t){throw new a(t)},c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",p=/[\t\n\f\r ]/g,h={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,s=t.length%3,i="",a=-1,p=t.length-s;++a<p;)e=t.charCodeAt(a)<<16,r=t.charCodeAt(++a)<<8,n=t.charCodeAt(++a),i+=c.charAt((o=e+r+n)>>18&63)+c.charAt(o>>12&63)+c.charAt(o>>6&63)+c.charAt(63&o);return 2==s?(e=t.charCodeAt(a)<<8,r=t.charCodeAt(++a),i+=c.charAt((o=e+r)>>10)+c.charAt(o>>4&63)+c.charAt(o<<2&63)+"="):1==s&&(o=t.charCodeAt(a),i+=c.charAt(o>>2)+c.charAt(o<<4&63)+"=="),i},decode:function(t){var e=(t=String(t).replace(p,"")).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,s="",i=-1;++i<e;)n=c.indexOf(t.charAt(i)),r=o%4?64*r+n:n,o++%4&&(s+=String.fromCharCode(255&r>>(-2*o&6)));return s},version:"1.0.0"};void 0===(n=function(){return h}.call(e,r,e,t))||(t.exports=n)}()},899:(t,e,r)=>{"use strict";r.r(e),r.d(e,{default:()=>R});const n={},o=t=>"undefined"!=typeof self&&self&&t in self?self:"undefined"!=typeof window&&window&&t in window?window:void 0!==r.g&&r.g&&t in r.g?r.g:"undefined"!=typeof globalThis&&globalThis?globalThis:void 0,s=["Headers","Request","Response","ReadableStream","fetch","AbortController","FormData"];for(const t of s)Object.defineProperty(n,t,{get(){const e=o(t),r=e&&e[t];return"function"==typeof r?r.bind(e):r}});const i=t=>null!==t&&"object"==typeof t,a="function"==typeof n.AbortController,u="function"==typeof n.ReadableStream,c="function"==typeof n.FormData,p=(t,e)=>{const r=new n.Headers(t||{}),o=e instanceof n.Headers,s=new n.Headers(e||{});for(const[t,e]of s)o&&"undefined"===e||void 0===e?r.delete(t):r.set(t,e);return r},h=(...t)=>{let e={},r={};for(const n of t){if(Array.isArray(n))Array.isArray(e)||(e=[]),e=[...e,...n];else if(i(n)){for(let[t,r]of Object.entries(n))i(r)&&t in e&&(r=h(e[t],r)),e={...e,[t]:r};i(n.headers)&&(r=p(r,n.headers))}e.headers=r}return e},f=["get","post","put","patch","head","delete"],d={json:"application/json",text:"text/*",formData:"multipart/form-data",arrayBuffer:"*/*",blob:"*/*"},l=[413,429,503],y=Symbol("stop");class HTTPError extends Error{constructor(t){super(t.statusText||String(0===t.status||t.status?t.status:"Unknown response error")),this.name="HTTPError",this.response=t}}class TimeoutError extends Error{constructor(t){super("Request timed out"),this.name="TimeoutError",this.request=t}}const m=t=>new Promise((e=>setTimeout(e,t))),b=t=>f.includes(t)?t.toUpperCase():t,v={limit:2,methods:["get","put","head","delete","options","trace"],statusCodes:[408,413,429,500,502,503,504],afterStatusCodes:l},_=(t={})=>{if("number"==typeof t)return{...v,limit:t};if(t.methods&&!Array.isArray(t.methods))throw new Error("retry.methods must be an array");if(t.statusCodes&&!Array.isArray(t.statusCodes))throw new Error("retry.statusCodes must be an array");return{...v,...t,afterStatusCodes:l}},g=2147483647;class Ky{constructor(t,e={}){if(this._retryCount=0,this._input=t,this._options={credentials:this._input.credentials||"same-origin",...e,headers:p(this._input.headers,e.headers),hooks:h({beforeRequest:[],beforeRetry:[],afterResponse:[]},e.hooks),method:b(e.method||this._input.method),prefixUrl:String(e.prefixUrl||""),retry:_(e.retry),throwHttpErrors:!1!==e.throwHttpErrors,timeout:void 0===e.timeout?1e4:e.timeout,fetch:e.fetch||n.fetch},"string"!=typeof this._input&&!(this._input instanceof URL||this._input instanceof n.Request))throw new TypeError("`input` must be a string, URL, or Request");if(this._options.prefixUrl&&"string"==typeof this._input){if(this._input.startsWith("/"))throw new Error("`input` must not begin with a slash when using `prefixUrl`");this._options.prefixUrl.endsWith("/")||(this._options.prefixUrl+="/"),this._input=this._options.prefixUrl+this._input}if(a&&(this.abortController=new n.AbortController,this._options.signal&&this._options.signal.addEventListener("abort",(()=>{this.abortController.abort()})),this._options.signal=this.abortController.signal),this.request=new n.Request(this._input,this._options),this._options.searchParams){const t="?"+new URLSearchParams(this._options.searchParams).toString(),e=this.request.url.replace(/(?:\?.*?)?(?=#|$)/,t);!(c&&this._options.body instanceof n.FormData||this._options.body instanceof URLSearchParams)||this._options.headers&&this._options.headers["content-type"]||this.request.headers.delete("content-type"),this.request=new n.Request(new n.Request(e,this.request),this._options)}void 0!==this._options.json&&(this._options.body=JSON.stringify(this._options.json),this.request.headers.set("content-type","application/json"),this.request=new n.Request(this.request,{body:this._options.body}));const r=async()=>{if(this._options.timeout>g)throw new RangeError("The `timeout` option cannot be greater than 2147483647");await m(1);let t=await this._fetch();for(const e of this._options.hooks.afterResponse){const r=await e(this.request,this._options,this._decorateResponse(t.clone()));r instanceof n.Response&&(t=r)}if(this._decorateResponse(t),!t.ok&&this._options.throwHttpErrors)throw new HTTPError(t);if(this._options.onDownloadProgress){if("function"!=typeof this._options.onDownloadProgress)throw new TypeError("The `onDownloadProgress` option must be a function");if(!u)throw new Error("Streams are not supported in your environment. `ReadableStream` is missing.");return this._stream(t.clone(),this._options.onDownloadProgress)}return t},o=this._options.retry.methods.includes(this.request.method.toLowerCase())?this._retry(r):r();for(const[t,r]of Object.entries(d))o[t]=async()=>{this.request.headers.set("accept",this.request.headers.get("accept")||r);const n=(await o).clone();if("json"===t){if(204===n.status)return"";if(e.parseJson)return e.parseJson(await n.text())}return n[t]()};return o}_calculateRetryDelay(t){if(this._retryCount++,this._retryCount<this._options.retry.limit&&!(t instanceof TimeoutError)){if(t instanceof HTTPError){if(!this._options.retry.statusCodes.includes(t.response.status))return 0;const e=t.response.headers.get("Retry-After");if(e&&this._options.retry.afterStatusCodes.includes(t.response.status)){let t=Number(e);return Number.isNaN(t)?t=Date.parse(e)-Date.now():t*=1e3,void 0!==this._options.retry.maxRetryAfter&&t>this._options.retry.maxRetryAfter?0:t}if(413===t.response.status)return 0}return.3*2**(this._retryCount-1)*1e3}return 0}_decorateResponse(t){return this._options.parseJson&&(t.json=async()=>this._options.parseJson(await t.text())),t}async _retry(t){try{return await t()}catch(e){const r=Math.min(this._calculateRetryDelay(e),g);if(0!==r&&this._retryCount>0){await m(r);for(const t of this._options.hooks.beforeRetry){if(await t({request:this.request,options:this._options,error:e,retryCount:this._retryCount})===y)return}return this._retry(t)}if(this._options.throwHttpErrors)throw e}}async _fetch(){for(const t of this._options.hooks.beforeRequest){const e=await t(this.request,this._options);if(e instanceof Request){this.request=e;break}if(e instanceof Response)return e}return!1===this._options.timeout?this._options.fetch(this.request.clone()):(t=this.request.clone(),e=this.abortController,r=this._options,new Promise(((n,o)=>{const s=setTimeout((()=>{e&&e.abort(),o(new TimeoutError(t))}),r.timeout);r.fetch(t).then(n).catch(o).then((()=>{clearTimeout(s)}))})));var t,e,r}_stream(t,e){const r=Number(t.headers.get("content-length"))||0;let o=0;return new n.Response(new n.ReadableStream({start(n){const s=t.body.getReader();e&&e({percent:0,transferredBytes:0,totalBytes:r},new Uint8Array),async function t(){const{done:i,value:a}=await s.read();if(i)n.close();else{if(e){o+=a.byteLength;e({percent:0===r?0:o/r,transferredBytes:o,totalBytes:r},a)}n.enqueue(a),t()}}()}}))}}const w=(...t)=>{for(const e of t)if((!i(e)||Array.isArray(e))&&void 0!==e)throw new TypeError("The `options` argument must be an object");return h({},...t)},q=t=>{const e=(e,r)=>new Ky(e,w(t,r));for(const r of f)e[r]=(e,n)=>new Ky(e,w(t,n,{method:r}));return e.HTTPError=HTTPError,e.TimeoutError=TimeoutError,e.create=t=>q(w(t)),e.extend=e=>q(w(t,e)),e.stop=y,e},R=q()},78:function(t,e,r){var n,o,s;s=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 s=e.join("/"),i=(s=s.replace(/\/(\?|&|#[^!])/g,"$1")).split("?");return s=i.shift()+(i.length>0?"?":"")+i.join("&")}return function(){return t("object"==typeof arguments[0]?arguments[0]:[].slice.call(arguments))}},t.exports?t.exports=s():void 0===(o="function"==typeof(n=s)?n.call(e,r,e,t):n)||(t.exports=o)}},e={};function r(n){var o=e[n];if(void 0!==o)return o.exports;var s=e[n]={id:n,loaded:!1,exports:{}};return t[n].call(s.exports,s,s.exports,r),s.loaded=!0,s.exports}return r.d=(t,e)=>{for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},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.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.nmd=t=>(t.paths=[],t.children||(t.children=[]),t),r(175)})()));
3
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,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Vy9jLE1DSjNFaWQsRUFBb0J4SixFQUFJLFdBQ3ZCLEdBQTBCLGlCQUFmMEIsV0FBeUIsT0FBT0EsV0FDM0MsSUFDQyxPQUFPbFYsTUFBUSxJQUFJdWQsU0FBUyxjQUFiLEdBQ2QsTUFBT0MsR0FDUixHQUFzQixpQkFBWDlKLE9BQXFCLE9BQU9BLFFBTGpCLEdDQXhCc0osRUFBb0JLLEVBQUksQ0FBQzFOLEVBQUs4TixJQUFVdlcsT0FBTzBNLFVBQVU4SixlQUFlYixLQUFLbE4sRUFBSzhOLEdDQ2xGVCxFQUFvQlcsRUFBS3phLElBQ0gsb0JBQVgwVCxRQUEwQkEsT0FBT2dILGFBQzFDMVcsT0FBT2tPLGVBQWVsUyxFQUFTMFQsT0FBT2dILFlBQWEsQ0FBRW5PLE1BQU8sV0FFN0R2SSxPQUFPa08sZUFBZWxTLEVBQVMsYUFBYyxDQUFFdU0sT0FBTyxLQ0x2RHVOLEVBQW9CYSxJQUFPcEwsSUFDMUJBLEVBQU9xTCxNQUFRLEdBQ1ZyTCxFQUFPc0wsV0FBVXRMLEVBQU9zTCxTQUFXLElBQ2pDdEwsR0NBa0J1SyxFQUFvQiIsInNvdXJjZXMiOlsid2VicGFjazovL21haWxndW4uanMvLi9saWIvY2xpZW50LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvZG9tYWlucy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL2RvbWFpbnNDcmVkZW50aWFscy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL2RvbWFpbnNUYWdzLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvZG9tYWluc1RlbXBsYXRlcy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL2Vycm9yLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvZXZlbnRzLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9pbnRlcmZhY2VzL1N1cHJlc3Npb25zLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvaXAtcG9vbHMudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9pcHMudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9saXN0cy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL21haWxMaXN0TWVtYmVycy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL21lc3NhZ2VzLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvbXVsdGlwbGVWYWxpZGF0aW9uLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvcmVxdWVzdC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL3JvdXRlcy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL3N0YXRzLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvc3VwcHJlc3Npb25zLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvdmFsaWRhdGUudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi93ZWJob29rcy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbm9kZV9tb2R1bGVzL2Jhc2UtNjQvYmFzZTY0LmpzIiwid2VicGFjazovL21haWxndW4uanMvLi9ub2RlX21vZHVsZXMva3kvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL25vZGVfbW9kdWxlcy91cmwtam9pbi9saWIvdXJsLWpvaW4uanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzL3dlYnBhY2svcnVudGltZS9nbG9iYWwiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL21haWxndW4uanMvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzL3dlYnBhY2svcnVudGltZS9ub2RlIG1vZHVsZSBkZWNvcmF0b3IiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy93ZWJwYWNrL3N0YXJ0dXAiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgY2FtZWxjYXNlICovXG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuL3JlcXVlc3QnO1xuaW1wb3J0IE9wdGlvbnMgZnJvbSAnLi9pbnRlcmZhY2VzL09wdGlvbnMnO1xuaW1wb3J0IFJlcXVlc3RPcHRpb25zIGZyb20gJy4vaW50ZXJmYWNlcy9SZXF1ZXN0T3B0aW9ucyc7XG5cbmltcG9ydCBEb21haW5DbGllbnQgZnJvbSAnLi9kb21haW5zJztcbmltcG9ydCBFdmVudENsaWVudCBmcm9tICcuL2V2ZW50cyc7XG5pbXBvcnQgU3RhdHNDbGllbnQgZnJvbSAnLi9zdGF0cyc7XG5pbXBvcnQgU3VwcHJlc3Npb25DbGllbnQgZnJvbSAnLi9zdXBwcmVzc2lvbnMnO1xuaW1wb3J0IFdlYmhvb2tDbGllbnQgZnJvbSAnLi93ZWJob29rcyc7XG5pbXBvcnQgTWVzc2FnZXNDbGllbnQgZnJvbSAnLi9tZXNzYWdlcyc7XG5pbXBvcnQgUm91dGVzQ2xpZW50IGZyb20gJy4vcm91dGVzJztcbmltcG9ydCBWYWxpZGF0ZUNsaWVudCBmcm9tICcuL3ZhbGlkYXRlJztcbmltcG9ydCBJcHNDbGllbnQgZnJvbSAnLi9pcHMnO1xuaW1wb3J0IElwUG9vbHNDbGllbnQgZnJvbSAnLi9pcC1wb29scyc7XG5pbXBvcnQgTGlzdHNDbGllbnQgZnJvbSAnLi9saXN0cyc7XG5pbXBvcnQgTWFpbExpc3RzTWVtYmVycyBmcm9tICcuL21haWxMaXN0TWVtYmVycyc7XG5pbXBvcnQgeyBJbnB1dEZvcm1EYXRhIH0gZnJvbSAnLi9pbnRlcmZhY2VzL0lGb3JtRGF0YSc7XG5pbXBvcnQgRG9tYWluQ3JlZGVudGlhbHNDbGllbnQgZnJvbSAnLi9kb21haW5zQ3JlZGVudGlhbHMnO1xuaW1wb3J0IE11bHRpcGxlVmFsaWRhdGlvbkNsaWVudCBmcm9tICcuL211bHRpcGxlVmFsaWRhdGlvbic7XG5pbXBvcnQgRG9tYWluVGVtcGxhdGVzQ2xpZW50IGZyb20gJy4vZG9tYWluc1RlbXBsYXRlcyc7XG5pbXBvcnQgRG9tYWluVGFnc0NsaWVudCBmcm9tICcuL2RvbWFpbnNUYWdzJztcbmltcG9ydCB7IElNYWlsZ3VuQ2xpZW50IH0gZnJvbSAnLi9pbnRlcmZhY2VzL0lNYWlsZ3VuQ2xpZW50JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2xpZW50IGltcGxlbWVudHMgSU1haWxndW5DbGllbnQge1xuICBwcml2YXRlIHJlcXVlc3Q7XG5cbiAgcHVibGljIGRvbWFpbnM7XG4gIHB1YmxpYyB3ZWJob29rcztcbiAgcHVibGljIGV2ZW50cztcbiAgcHVibGljIHN0YXRzO1xuICBwdWJsaWMgc3VwcHJlc3Npb25zO1xuICBwdWJsaWMgbWVzc2FnZXM7XG4gIHB1YmxpYyByb3V0ZXM7XG4gIHB1YmxpYyB2YWxpZGF0ZTtcbiAgcHVibGljIGlwcztcbiAgcHVibGljIGlwX3Bvb2xzO1xuICBwdWJsaWMgbGlzdHM7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogT3B0aW9ucywgZm9ybURhdGE6IElucHV0Rm9ybURhdGEpIHtcbiAgICBjb25zdCBjb25maWc6IFJlcXVlc3RPcHRpb25zID0geyAuLi5vcHRpb25zIH0gYXMgUmVxdWVzdE9wdGlvbnM7XG5cbiAgICBpZiAoIWNvbmZpZy51cmwpIHtcbiAgICAgIGNvbmZpZy51cmwgPSAnaHR0cHM6Ly9hcGkubWFpbGd1bi5uZXQnO1xuICAgIH1cblxuICAgIGlmICghY29uZmlnLnVzZXJuYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlciBcInVzZXJuYW1lXCIgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICBpZiAoIWNvbmZpZy5rZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGFyYW1ldGVyIFwia2V5XCIgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICAvKiogQGludGVybmFsICovXG4gICAgdGhpcy5yZXF1ZXN0ID0gbmV3IFJlcXVlc3QoY29uZmlnLCBmb3JtRGF0YSk7XG4gICAgY29uc3QgbWFpbExpc3RzTWVtYmVycyA9IG5ldyBNYWlsTGlzdHNNZW1iZXJzKHRoaXMucmVxdWVzdCk7XG4gICAgY29uc3QgZG9tYWluQ3JlZGVudGlhbHNDbGllbnQgPSBuZXcgRG9tYWluQ3JlZGVudGlhbHNDbGllbnQodGhpcy5yZXF1ZXN0KTtcbiAgICBjb25zdCBkb21haW5UZW1wbGF0ZXNDbGllbnQgPSBuZXcgRG9tYWluVGVtcGxhdGVzQ2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgY29uc3QgZG9tYWluVGFnc0NsaWVudCA9IG5ldyBEb21haW5UYWdzQ2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgY29uc3QgbXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50ID0gbmV3IE11bHRpcGxlVmFsaWRhdGlvbkNsaWVudCh0aGlzLnJlcXVlc3QpO1xuXG4gICAgdGhpcy5kb21haW5zID0gbmV3IERvbWFpbkNsaWVudChcbiAgICAgIHRoaXMucmVxdWVzdCxcbiAgICAgIGRvbWFpbkNyZWRlbnRpYWxzQ2xpZW50LFxuICAgICAgZG9tYWluVGVtcGxhdGVzQ2xpZW50LFxuICAgICAgZG9tYWluVGFnc0NsaWVudFxuICAgICk7XG4gICAgdGhpcy53ZWJob29rcyA9IG5ldyBXZWJob29rQ2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgdGhpcy5ldmVudHMgPSBuZXcgRXZlbnRDbGllbnQodGhpcy5yZXF1ZXN0KTtcbiAgICB0aGlzLnN0YXRzID0gbmV3IFN0YXRzQ2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgdGhpcy5zdXBwcmVzc2lvbnMgPSBuZXcgU3VwcHJlc3Npb25DbGllbnQodGhpcy5yZXF1ZXN0KTtcbiAgICB0aGlzLm1lc3NhZ2VzID0gbmV3IE1lc3NhZ2VzQ2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgdGhpcy5yb3V0ZXMgPSBuZXcgUm91dGVzQ2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgdGhpcy5pcHMgPSBuZXcgSXBzQ2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgdGhpcy5pcF9wb29scyA9IG5ldyBJcFBvb2xzQ2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgdGhpcy5saXN0cyA9IG5ldyBMaXN0c0NsaWVudCh0aGlzLnJlcXVlc3QsIG1haWxMaXN0c01lbWJlcnMpO1xuICAgIHRoaXMudmFsaWRhdGUgPSBuZXcgVmFsaWRhdGVDbGllbnQodGhpcy5yZXF1ZXN0LCBtdWx0aXBsZVZhbGlkYXRpb25DbGllbnQpO1xuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cbmltcG9ydCB1cmxqb2luIGZyb20gJ3VybC1qb2luJztcbmltcG9ydCB7XG4gIERvbWFpblJlc3BvbnNlRGF0YSxcbiAgRGVzdHJveWVkRG9tYWluUmVzcG9uc2UsXG4gIERvbWFpbnNRdWVyeSxcbiAgRG9tYWluSW5mbyxcbiAgRG9tYWluTGlzdFJlc3BvbnNlRGF0YSxcbiAgRG9tYWluU2hvcnREYXRhLFxuICBETlNSZWNvcmQsXG4gIENvbm5lY3Rpb25TZXR0aW5nc1Jlc3BvbnNlLFxuICBDb25uZWN0aW9uU2V0dGluZ3MsXG4gIFVwZGF0ZWRDb25uZWN0aW9uU2V0dGluZ3MsXG4gIFVwZGF0ZWRDb25uZWN0aW9uU2V0dGluZ3NSZXMsXG4gIERLSU1BdXRob3JpdHlJbmZvLFxuICBVcGRhdGVkREtJTUF1dGhvcml0eSxcbiAgVXBkYXRlZERLSU1BdXRob3JpdHlSZXNwb25zZSxcbiAgREtJTVNlbGVjdG9ySW5mbyxcbiAgVXBkYXRlZERLSU1TZWxlY3RvclJlc3BvbnNlLFxuICBXZWJQcmVmaXhJbmZvLFxuICBVcGRhdGVkV2ViUHJlZml4UmVzcG9uc2UsXG4gIFJlcGxhY2VtZW50Rm9yUG9vbCxcbiAgTWVzc2FnZVJlc3BvbnNlLFxufSBmcm9tICcuL2ludGVyZmFjZXMvRG9tYWlucyc7XG5cbmltcG9ydCBBUElSZXNwb25zZSBmcm9tICcuL2ludGVyZmFjZXMvQXBpUmVzcG9uc2UnO1xuaW1wb3J0IEFQSUVycm9yIGZyb20gJy4vZXJyb3InO1xuaW1wb3J0IEFQSUVycm9yT3B0aW9ucyBmcm9tICcuL2ludGVyZmFjZXMvQVBJRXJyb3JPcHRpb25zJztcblxuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0JztcbmltcG9ydCB7XG4gIERvbWFpblRyYWNraW5nUmVzcG9uc2UsXG4gIERvbWFpblRyYWNraW5nRGF0YSxcbiAgT3BlblRyYWNraW5nSW5mbyxcbiAgQ2xpY2tUcmFja2luZ0luZm8sXG4gIFVuc3Vic2NyaWJlVHJhY2tpbmdJbmZvLFxuICBVcGRhdGVEb21haW5UcmFja2luZ1Jlc3BvbnNlLFxuICBVcGRhdGVkT3BlblRyYWNraW5nXG59IGZyb20gJy4vaW50ZXJmYWNlcy9Eb21haW5UcmFja2luZyc7XG5pbXBvcnQgeyBJRG9tYWluQ3JlZGVudGlhbHMgfSBmcm9tICcuL2ludGVyZmFjZXMvRG9tYWluQ3JlZGVudGlhbHMnO1xuaW1wb3J0IHsgSURvbWFpblRlbXBsYXRlc0NsaWVudCB9IGZyb20gJy4vaW50ZXJmYWNlcy9Eb21haW5UZW1wbGF0ZXMnO1xuaW1wb3J0IERvbWFpbkNyZWRlbnRpYWxzQ2xpZW50IGZyb20gJy4vZG9tYWluc0NyZWRlbnRpYWxzJztcbmltcG9ydCBEb21haW5UZW1wbGF0ZXNDbGllbnQgZnJvbSAnLi9kb21haW5zVGVtcGxhdGVzJztcbmltcG9ydCB7IElEb21haW5UYWdzQ2xpZW50IH0gZnJvbSAnLi9pbnRlcmZhY2VzL0RvbWFpblRhZ3MnO1xuaW1wb3J0IERvbWFpblRhZ3NDbGllbnQgZnJvbSAnLi9kb21haW5zVGFncyc7XG5cbmV4cG9ydCBjbGFzcyBEb21haW4ge1xuICBuYW1lOiBzdHJpbmc7XG4gIHJlcXVpcmVfdGxzOiBib29sZWFuO1xuICBza2lwX3ZlcmlmaWNhdGlvbjogYm9vbGVhbjtcbiAgc3RhdGU6IHN0cmluZztcbiAgd2lsZGNhcmQ6IGJvb2xlYW47XG4gIHNwYW1fYWN0aW9uOiBzdHJpbmc7XG4gIGNyZWF0ZWRfYXQ6IHN0cmluZztcbiAgc210cF9wYXNzd29yZDogc3RyaW5nO1xuICBzbXRwX2xvZ2luOiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbiAgcmVjZWl2aW5nX2Ruc19yZWNvcmRzOiBETlNSZWNvcmRbXSB8IG51bGw7XG4gIHNlbmRpbmdfZG5zX3JlY29yZHM6IEROU1JlY29yZFtdIHwgbnVsbDtcblxuICBjb25zdHJ1Y3RvcihkYXRhOiBEb21haW5TaG9ydERhdGEsIHJlY2VpdmluZz86IEROU1JlY29yZFtdIHwgbnVsbCwgc2VuZGluZz86IEROU1JlY29yZFtdIHwgbnVsbCkge1xuICAgIHRoaXMubmFtZSA9IGRhdGEubmFtZTtcbiAgICB0aGlzLnJlcXVpcmVfdGxzID0gZGF0YS5yZXF1aXJlX3RscztcbiAgICB0aGlzLnNraXBfdmVyaWZpY2F0aW9uID0gZGF0YS5za2lwX3ZlcmlmaWNhdGlvbjtcbiAgICB0aGlzLnN0YXRlID0gZGF0YS5zdGF0ZTtcbiAgICB0aGlzLndpbGRjYXJkID0gZGF0YS53aWxkY2FyZDtcbiAgICB0aGlzLnNwYW1fYWN0aW9uID0gZGF0YS5zcGFtX2FjdGlvbjtcbiAgICB0aGlzLmNyZWF0ZWRfYXQgPSBkYXRhLmNyZWF0ZWRfYXQ7XG4gICAgdGhpcy5zbXRwX3Bhc3N3b3JkID0gZGF0YS5zbXRwX3Bhc3N3b3JkO1xuICAgIHRoaXMuc210cF9sb2dpbiA9IGRhdGEuc210cF9sb2dpbjtcbiAgICB0aGlzLnR5cGUgPSBkYXRhLnR5cGU7XG5cbiAgICB0aGlzLnJlY2VpdmluZ19kbnNfcmVjb3JkcyA9IHJlY2VpdmluZyB8fCBudWxsO1xuICAgIHRoaXMuc2VuZGluZ19kbnNfcmVjb3JkcyA9IHNlbmRpbmcgfHwgbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb21haW5DbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuICBwdWJsaWMgZG9tYWluQ3JlZGVudGlhbHM6IElEb21haW5DcmVkZW50aWFscztcbiAgcHVibGljIGRvbWFpblRlbXBsYXRlczogSURvbWFpblRlbXBsYXRlc0NsaWVudDtcbiAgcHVibGljIGRvbWFpblRhZ3M6IElEb21haW5UYWdzQ2xpZW50O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlcXVlc3Q6IFJlcXVlc3QsXG4gICAgZG9tYWluQ3JlZGVudGlhbHNDbGllbnQ6IERvbWFpbkNyZWRlbnRpYWxzQ2xpZW50LFxuICAgIGRvbWFpblRlbXBsYXRlc0NsaWVudDogRG9tYWluVGVtcGxhdGVzQ2xpZW50LFxuICAgIGRvbWFpblRhZ3NDbGllbnQ6IERvbWFpblRhZ3NDbGllbnRcbiAgKSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICB0aGlzLmRvbWFpbkNyZWRlbnRpYWxzID0gZG9tYWluQ3JlZGVudGlhbHNDbGllbnQ7XG4gICAgdGhpcy5kb21haW5UZW1wbGF0ZXMgPSBkb21haW5UZW1wbGF0ZXNDbGllbnQ7XG4gICAgdGhpcy5kb21haW5UYWdzID0gZG9tYWluVGFnc0NsaWVudDtcbiAgfVxuXG4gIHByaXZhdGUgX3BhcnNlTWVzc2FnZShyZXNwb25zZTogRGVzdHJveWVkRG9tYWluUmVzcG9uc2UpIDogTWVzc2FnZVJlc3BvbnNlIHtcbiAgICByZXR1cm4gcmVzcG9uc2UuYm9keTtcbiAgfVxuXG4gIHByaXZhdGUgX3BhcnNlRG9tYWluTGlzdChyZXNwb25zZTogRG9tYWluTGlzdFJlc3BvbnNlRGF0YSk6IERvbWFpbltdIHtcbiAgICByZXR1cm4gcmVzcG9uc2UuYm9keS5pdGVtcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBuZXcgRG9tYWluKGl0ZW0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFyc2VEb21haW4ocmVzcG9uc2U6IERvbWFpblJlc3BvbnNlRGF0YSk6IERvbWFpbiB7XG4gICAgcmV0dXJuIG5ldyBEb21haW4oXG4gICAgICByZXNwb25zZS5ib2R5LmRvbWFpbixcbiAgICAgIHJlc3BvbnNlLmJvZHkucmVjZWl2aW5nX2Ruc19yZWNvcmRzLFxuICAgICAgcmVzcG9uc2UuYm9keS5zZW5kaW5nX2Ruc19yZWNvcmRzXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX3BhcnNlVHJhY2tpbmdTZXR0aW5ncyhyZXNwb25zZTogRG9tYWluVHJhY2tpbmdSZXNwb25zZSkgOiBEb21haW5UcmFja2luZ0RhdGEge1xuICAgIHJldHVybiByZXNwb25zZS5ib2R5LnRyYWNraW5nO1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFyc2VUcmFja2luZ1VwZGF0ZShyZXNwb25zZTogVXBkYXRlRG9tYWluVHJhY2tpbmdSZXNwb25zZSkgOlVwZGF0ZWRPcGVuVHJhY2tpbmcge1xuICAgIHJldHVybiByZXNwb25zZS5ib2R5O1xuICB9XG5cbiAgbGlzdChxdWVyeT86IERvbWFpbnNRdWVyeSk6IFByb21pc2U8RG9tYWluW10+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCgnL3YzL2RvbWFpbnMnLCBxdWVyeSlcbiAgICAgIC50aGVuKChyZXMgOiBBUElSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VEb21haW5MaXN0KHJlcyBhcyBEb21haW5MaXN0UmVzcG9uc2VEYXRhKSk7XG4gIH1cblxuICBnZXQoZG9tYWluOiBzdHJpbmcpIDogUHJvbWlzZTxEb21haW4+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldChgL3YzL2RvbWFpbnMvJHtkb21haW59YClcbiAgICAgIC50aGVuKChyZXMgOiBBUElSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VEb21haW4ocmVzIGFzIERvbWFpblJlc3BvbnNlRGF0YSkpO1xuICB9XG5cbiAgY3JlYXRlKGRhdGE6IERvbWFpbkluZm8pIDogUHJvbWlzZTxEb21haW4+IHtcbiAgICBjb25zdCBwb3N0T2JqID0geyAuLi5kYXRhIH07XG4gICAgaWYgKCdmb3JjZV9ka2ltX2F1dGhvcml0eScgaW4gcG9zdE9iaiAmJiB0eXBlb2YgcG9zdE9iai5mb3JjZV9ka2ltX2F1dGhvcml0eSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICBwb3N0T2JqLmZvcmNlX2RraW1fYXV0aG9yaXR5ID0gcG9zdE9iai50b1N0cmluZygpID09PSAndHJ1ZScgPyAndHJ1ZScgOiAnZmFsc2UnO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRCgnL3YzL2RvbWFpbnMnLCBwb3N0T2JqKVxuICAgICAgLnRoZW4oKHJlcyA6IEFQSVJlc3BvbnNlKSA9PiB0aGlzLl9wYXJzZURvbWFpbihyZXMgYXMgRG9tYWluUmVzcG9uc2VEYXRhKSk7XG4gIH1cblxuICB2ZXJpZnkoZG9tYWluOiBzdHJpbmcpOiBQcm9taXNlPERvbWFpbj4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0KGAvdjMvZG9tYWlucy8ke2RvbWFpbn0vdmVyaWZ5YCwge30pXG4gICAgICAudGhlbigocmVzIDogQVBJUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlRG9tYWluKHJlcyBhcyBEb21haW5SZXNwb25zZURhdGEpKTtcbiAgfVxuXG4gIGRlc3Ryb3koZG9tYWluOiBzdHJpbmcpOiBQcm9taXNlPE1lc3NhZ2VSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKGAvdjMvZG9tYWlucy8ke2RvbWFpbn1gKVxuICAgICAgLnRoZW4oKHJlcyA6IEFQSVJlc3BvbnNlKSA9PiB0aGlzLl9wYXJzZU1lc3NhZ2UocmVzIGFzIERlc3Ryb3llZERvbWFpblJlc3BvbnNlKSk7XG4gIH1cblxuICBnZXRDb25uZWN0aW9uKGRvbWFpbjogc3RyaW5nKTogUHJvbWlzZTxDb25uZWN0aW9uU2V0dGluZ3M+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldChgL3YzL2RvbWFpbnMvJHtkb21haW59L2Nvbm5lY3Rpb25gKVxuICAgICAgLnRoZW4oKHJlcyA6IEFQSVJlc3BvbnNlKSA9PiByZXMgYXMgQ29ubmVjdGlvblNldHRpbmdzUmVzcG9uc2UpXG4gICAgICAudGhlbigocmVzOkNvbm5lY3Rpb25TZXR0aW5nc1Jlc3BvbnNlKSA9PiByZXMuYm9keS5jb25uZWN0aW9uIGFzIENvbm5lY3Rpb25TZXR0aW5ncyk7XG4gIH1cblxuICB1cGRhdGVDb25uZWN0aW9uKGRvbWFpbjogc3RyaW5nLCBkYXRhOiBDb25uZWN0aW9uU2V0dGluZ3MpOiBQcm9taXNlPFVwZGF0ZWRDb25uZWN0aW9uU2V0dGluZ3M+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnB1dChgL3YzL2RvbWFpbnMvJHtkb21haW59L2Nvbm5lY3Rpb25gLCBkYXRhKVxuICAgICAgLnRoZW4oKHJlcyA6IEFQSVJlc3BvbnNlKSA9PiByZXMgYXMgVXBkYXRlZENvbm5lY3Rpb25TZXR0aW5nc1JlcylcbiAgICAgIC50aGVuKChyZXM6VXBkYXRlZENvbm5lY3Rpb25TZXR0aW5nc1JlcykgPT4gcmVzLmJvZHkgYXMgVXBkYXRlZENvbm5lY3Rpb25TZXR0aW5ncyk7XG4gIH1cblxuICAvLyBUcmFja2luZ1xuXG4gIGdldFRyYWNraW5nKGRvbWFpbjogc3RyaW5nKSA6IFByb21pc2U8RG9tYWluVHJhY2tpbmdEYXRhPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICd0cmFja2luZycpKVxuICAgICAgLnRoZW4odGhpcy5fcGFyc2VUcmFja2luZ1NldHRpbmdzKTtcbiAgfVxuXG4gIHVwZGF0ZVRyYWNraW5nKFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIHR5cGU6IHN0cmluZyxcbiAgICBkYXRhOiBPcGVuVHJhY2tpbmdJbmZvIHwgQ2xpY2tUcmFja2luZ0luZm8gfCBVbnN1YnNjcmliZVRyYWNraW5nSW5mb1xuICApOiBQcm9taXNlPFVwZGF0ZWRPcGVuVHJhY2tpbmc+IHtcbiAgICBpZiAodHlwZW9mIGRhdGE/LmFjdGl2ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyBuZXcgQVBJRXJyb3IoeyBzdGF0dXM6IDQwMCwgc3RhdHVzVGV4dDogJ1JlY2VpdmVkIGJvb2xlYW4gdmFsdWUgZm9yIGFjdGl2ZSBwcm9wZXJ0eScsIGJvZHk6IHsgbWVzc2FnZTogJ1Byb3BlcnR5IFwiYWN0aXZlXCIgbXVzdCBjb250YWluIHN0cmluZyB2YWx1ZS4nIH0gfSBhcyBBUElFcnJvck9wdGlvbnMpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnB1dFdpdGhGRCh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ3RyYWNraW5nJywgdHlwZSksIGRhdGEpXG4gICAgICAudGhlbigocmVzIDogQVBJUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlVHJhY2tpbmdVcGRhdGUocmVzIGFzIFVwZGF0ZURvbWFpblRyYWNraW5nUmVzcG9uc2UpKTtcbiAgfVxuXG4gIC8vIElQc1xuXG4gIGdldElwcyhkb21haW46IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ2lwcycpKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiBBUElSZXNwb25zZSkgPT4gcmVzcG9uc2U/LmJvZHk/Lml0ZW1zKTtcbiAgfVxuXG4gIGFzc2lnbklwKGRvbWFpbjogc3RyaW5nLCBpcDogc3RyaW5nKTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRCh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ2lwcycpLCB7IGlwIH0pO1xuICB9XG5cbiAgZGVsZXRlSXAoZG9tYWluOiBzdHJpbmcsIGlwOiBzdHJpbmcpOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5kZWxldGUodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICdpcHMnLCBpcCkpO1xuICB9XG5cbiAgbGlua0lwUG9vbChkb21haW46IHN0cmluZywgcG9vbF9pZDogc3RyaW5nKTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRCh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ2lwcycpLCB7IHBvb2xfaWQgfSk7XG4gIH1cblxuICB1bmxpbmtJcFBvbGwoZG9tYWluOiBzdHJpbmcsIHJlcGxhY2VtZW50OiBSZXBsYWNlbWVudEZvclBvb2wpOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgbGV0IHNlYXJjaFBhcmFtcyA9ICcnO1xuICAgIGlmIChyZXBsYWNlbWVudC5wb29sX2lkICYmIHJlcGxhY2VtZW50LmlwKSB7XG4gICAgICB0aHJvdyBuZXcgQVBJRXJyb3IoXG4gICAgICAgIHtcbiAgICAgICAgICBzdGF0dXM6IDQwMCxcbiAgICAgICAgICBzdGF0dXNUZXh0OiAnVG9vIG11Y2ggZGF0YSBmb3IgcmVwbGFjZW1lbnQnLFxuICAgICAgICAgIGJvZHk6IHsgbWVzc2FnZTogJ1BsZWFzZSBzcGVjaWZ5IGVpdGhlciBwb29sX2lkIG9yIGlwIChub3QgYm90aCknIH1cbiAgICAgICAgfSBhcyBBUElFcnJvck9wdGlvbnNcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChyZXBsYWNlbWVudC5wb29sX2lkKSB7XG4gICAgICBzZWFyY2hQYXJhbXMgPSBgP3Bvb2xfaWQ9JHtyZXBsYWNlbWVudC5wb29sX2lkfWA7XG4gICAgfSBlbHNlIGlmIChyZXBsYWNlbWVudC5pcCkge1xuICAgICAgc2VhcmNoUGFyYW1zID0gYD9pcD0ke3JlcGxhY2VtZW50LmlwfWA7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKHVybGpvaW4oJy92My9kb21haW5zJywgZG9tYWluLCAnaXBzJywgJ2lwX3Bvb2wnLCBzZWFyY2hQYXJhbXMpKTtcbiAgfVxuXG4gIHVwZGF0ZURLSU1BdXRob3JpdHkoZG9tYWluOiBzdHJpbmcsIGRhdGE6IERLSU1BdXRob3JpdHlJbmZvKTogUHJvbWlzZTxVcGRhdGVkREtJTUF1dGhvcml0eT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0KGAvdjMvZG9tYWlucy8ke2RvbWFpbn0vZGtpbV9hdXRob3JpdHlgLCB7fSwgeyBxdWVyeTogYHNlbGY9JHtkYXRhLnNlbGZ9YCB9KVxuICAgICAgLnRoZW4oKHJlcyA6IEFQSVJlc3BvbnNlKSA9PiByZXMgYXMgVXBkYXRlZERLSU1BdXRob3JpdHlSZXNwb25zZSlcbiAgICAgIC50aGVuKChyZXMgOiBVcGRhdGVkREtJTUF1dGhvcml0eVJlc3BvbnNlKSA9PiByZXMuYm9keSBhcyBVcGRhdGVkREtJTUF1dGhvcml0eSk7XG4gIH1cblxuICB1cGRhdGVES0lNU2VsZWN0b3IoZG9tYWluOiBzdHJpbmcsIGRhdGE6IERLSU1TZWxlY3RvckluZm8pOiBQcm9taXNlPFVwZGF0ZWRES0lNU2VsZWN0b3JSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0KGAvdjMvZG9tYWlucy8ke2RvbWFpbn0vZGtpbV9zZWxlY3RvcmAsIHt9LCB7IHF1ZXJ5OiBgZGtpbV9zZWxlY3Rvcj0ke2RhdGEuZGtpbVNlbGVjdG9yfWAgfSlcbiAgICAgIC50aGVuKChyZXMgOiBBUElSZXNwb25zZSkgPT4gcmVzIGFzIFVwZGF0ZWRES0lNU2VsZWN0b3JSZXNwb25zZSk7XG4gIH1cblxuICB1cGRhdGVXZWJQcmVmaXgoZG9tYWluOiBzdHJpbmcsIGRhdGE6IFdlYlByZWZpeEluZm8pOiBQcm9taXNlPFVwZGF0ZWRXZWJQcmVmaXhSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0KGAvdjMvZG9tYWlucy8ke2RvbWFpbn0vd2ViX3ByZWZpeGAsIHt9LCB7IHF1ZXJ5OiBgd2ViX3ByZWZpeD0ke2RhdGEud2ViUHJlZml4fWAgfSlcbiAgICAgIC50aGVuKChyZXMgOiBBUElSZXNwb25zZSkgPT4gcmVzIGFzIFVwZGF0ZWRXZWJQcmVmaXhSZXNwb25zZSk7XG4gIH1cbn1cbiIsImltcG9ydCB1cmxqb2luIGZyb20gJ3VybC1qb2luJztcbmltcG9ydCBBUElSZXNwb25zZSBmcm9tICcuL2ludGVyZmFjZXMvQXBpUmVzcG9uc2UnO1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0JztcblxuaW1wb3J0IHtcbiAgQ3JlYXRlZFVwZGF0ZWREb21haW5DcmVkZW50aWFsc1Jlc3BvbnNlLFxuICBEZWxldGVkRG9tYWluQ3JlZGVudGlhbHNSZXNwb25zZSxcbiAgRG9tYWluQ3JlZGVudGlhbHMsXG4gIERvbWFpbkNyZWRlbnRpYWxzTGlzdCxcbiAgRG9tYWluQ3JlZGVudGlhbHNRdWVyeSxcbiAgRG9tYWluQ3JlZGVudGlhbHNSZXNwb25zZURhdGEsXG4gIERvbWFpbkNyZWRlbnRpYWxzUmVzdWx0LFxuICBJRG9tYWluQ3JlZGVudGlhbHMsXG4gIFVwZGF0ZURvbWFpbkNyZWRlbnRpYWxzRGF0YVxufSBmcm9tICcuL2ludGVyZmFjZXMvRG9tYWluQ3JlZGVudGlhbHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb21haW5DcmVkZW50aWFsc0NsaWVudCBpbXBsZW1lbnRzIElEb21haW5DcmVkZW50aWFscyB7XG4gIGJhc2VSb3V0ZTogc3RyaW5nO1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMuYmFzZVJvdXRlID0gJy92My9kb21haW5zLyc7XG4gIH1cblxuICBwcml2YXRlIF9wYXJzZURvbWFpbkNyZWRlbnRpYWxzTGlzdChcbiAgICByZXNwb25zZTogRG9tYWluQ3JlZGVudGlhbHNSZXNwb25zZURhdGFcbiAgKTogRG9tYWluQ3JlZGVudGlhbHNMaXN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgaXRlbXM6IHJlc3BvbnNlLmJvZHkuaXRlbXMsXG4gICAgICB0b3RhbENvdW50OiByZXNwb25zZS5ib2R5LnRvdGFsX2NvdW50XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgX3BhcnNlTWVzc2FnZVJlc3BvbnNlKFxuICAgIHJlc3BvbnNlOiBDcmVhdGVkVXBkYXRlZERvbWFpbkNyZWRlbnRpYWxzUmVzcG9uc2VcbiAgKTogRG9tYWluQ3JlZGVudGlhbHNSZXN1bHQge1xuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgbWVzc2FnZTogcmVzcG9uc2UuYm9keS5tZXNzYWdlXG4gICAgfSBhcyBEb21haW5DcmVkZW50aWFsc1Jlc3VsdDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFyc2VEZWxldGVkUmVzcG9uc2UoXG4gICAgcmVzcG9uc2U6RGVsZXRlZERvbWFpbkNyZWRlbnRpYWxzUmVzcG9uc2VcbiAgKTogRG9tYWluQ3JlZGVudGlhbHNSZXN1bHQge1xuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgbWVzc2FnZTogcmVzcG9uc2UuYm9keS5tZXNzYWdlLFxuICAgICAgc3BlYzogcmVzcG9uc2UuYm9keS5zcGVjXG4gICAgfSBhcyBEb21haW5DcmVkZW50aWFsc1Jlc3VsdDtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBsaXN0KGRvbWFpbjogc3RyaW5nLCBxdWVyeT86IERvbWFpbkNyZWRlbnRpYWxzUXVlcnkpOiBQcm9taXNlPERvbWFpbkNyZWRlbnRpYWxzTGlzdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy9jcmVkZW50aWFscycpLCBxdWVyeSlcbiAgICAgIC50aGVuKFxuICAgICAgICAocmVzOiBBUElSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VEb21haW5DcmVkZW50aWFsc0xpc3QocmVzIGFzIERvbWFpbkNyZWRlbnRpYWxzUmVzcG9uc2VEYXRhKVxuICAgICAgKTtcbiAgfVxuXG4gIGNyZWF0ZShcbiAgICBkb21haW46IHN0cmluZyxcbiAgICBkYXRhOiBEb21haW5DcmVkZW50aWFsc1xuICApOiBQcm9taXNlPERvbWFpbkNyZWRlbnRpYWxzUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKGAke3RoaXMuYmFzZVJvdXRlfSR7ZG9tYWlufS9jcmVkZW50aWFsc2AsIGRhdGEpXG4gICAgICAudGhlbigocmVzOiBBUElSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VNZXNzYWdlUmVzcG9uc2UocmVzKSk7XG4gIH1cblxuICB1cGRhdGUoXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgY3JlZGVudGlhbHNMb2dpbjogc3RyaW5nLFxuICAgIGRhdGE6IFVwZGF0ZURvbWFpbkNyZWRlbnRpYWxzRGF0YVxuICApOiBQcm9taXNlPERvbWFpbkNyZWRlbnRpYWxzUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXRXaXRoRkQoYCR7dGhpcy5iYXNlUm91dGV9JHtkb21haW59L2NyZWRlbnRpYWxzLyR7Y3JlZGVudGlhbHNMb2dpbn1gLCBkYXRhKVxuICAgICAgLnRoZW4oKHJlczogQVBJUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlTWVzc2FnZVJlc3BvbnNlKHJlcykpO1xuICB9XG5cbiAgZGVzdHJveShcbiAgICBkb21haW46IHN0cmluZyxcbiAgICBjcmVkZW50aWFsc0xvZ2luOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxEb21haW5DcmVkZW50aWFsc1Jlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKGAke3RoaXMuYmFzZVJvdXRlfSR7ZG9tYWlufS9jcmVkZW50aWFscy8ke2NyZWRlbnRpYWxzTG9naW59YClcbiAgICAgIC50aGVuKChyZXM6IEFQSVJlc3BvbnNlKSA9PiB0aGlzLl9wYXJzZURlbGV0ZWRSZXNwb25zZShyZXMpKTtcbiAgfVxufVxuIiwiaW1wb3J0IHVybGpvaW4gZnJvbSAndXJsLWpvaW4nO1xuaW1wb3J0IEFQSVJlc3BvbnNlIGZyb20gJy4vaW50ZXJmYWNlcy9BcGlSZXNwb25zZSc7XG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuL3JlcXVlc3QnO1xuXG5pbXBvcnQge1xuICBEb21haW5UYWdBUElSZXNwb25zZVN0YXRzSXRlbSxcbiAgRG9tYWluVGFnQ291bnRyaWVzQWdncmVnYXRpb24sXG4gIERvbWFpblRhZ0NvdW50cmllc0FQSVJlc3BvbnNlLFxuICBEb21haW5UYWdEZXZpY2VzQWdncmVnYXRpb24sXG4gIERvbWFpblRhZ0RldmljZXNBUElSZXNwb25zZSxcbiAgRG9tYWluVGFnUHJvdmlkZXJzQWdncmVnYXRpb24sXG4gIERvbWFpblRhZ1Byb3ZpZGVyc0FQSVJlc3BvbnNlLFxuICBEb21haW5UYWdzSXRlbSxcbiAgRG9tYWluVGFnc0l0ZW1JbmZvLFxuICBEb21haW5UYWdzTGlzdCxcbiAgRG9tYWluVGFnc01lc3NhZ2VSZXMsXG4gIERvbWFpblRhZ3NRdWVyeSxcbiAgRG9tYWluVGFnc1Jlc3BvbnNlRGF0YSxcbiAgRG9tYWluVGFnc1N0YXRpc3RpY1F1ZXJ5LFxuICBEb21haW5UYWdTdGF0QVBJUmVzcG9uc2UsXG4gIERvbWFpblRhZ1N0YXRpc3RpY0l0ZW0sXG4gIERvbWFpblRhZ1N0YXRpc3RpY1Jlc3VsdCxcbiAgSURvbWFpblRhZ3NDbGllbnQsXG4gIFBhZ2VzTGlzdCxcbiAgUGFnZXNMaXN0QWNjdW11bGF0b3IsXG4gIFBhcnNlZFBhZ2VzTGlzdCxcbiAgUmVzb2x1dGlvblxufSBmcm9tICcuL2ludGVyZmFjZXMvRG9tYWluVGFncyc7XG5cbmV4cG9ydCBjbGFzcyBEb21haW5UYWcgaW1wbGVtZW50cyBEb21haW5UYWdzSXRlbSB7XG4gIHRhZzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAnZmlyc3Qtc2Vlbic6IERhdGU7XG4gICdsYXN0LXNlZW4nOiBEYXRlO1xuXG4gIGNvbnN0cnVjdG9yKHRhZ0luZm86IERvbWFpblRhZ3NJdGVtSW5mbykge1xuICAgIHRoaXMudGFnID0gdGFnSW5mby50YWc7XG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IHRhZ0luZm8uZGVzY3JpcHRpb247XG4gICAgdGhpc1snZmlyc3Qtc2VlbiddID0gbmV3IERhdGUodGFnSW5mb1snZmlyc3Qtc2VlbiddKTtcbiAgICB0aGlzWydsYXN0LXNlZW4nXSA9IG5ldyBEYXRlKHRhZ0luZm9bJ2xhc3Qtc2VlbiddKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRG9tYWluVGFnU3RhdGlzdGljIGltcGxlbWVudHMgRG9tYWluVGFnU3RhdGlzdGljUmVzdWx0IHtcbiAgdGFnOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHN0YXJ0OiBEYXRlO1xuICBlbmQ6IERhdGU7XG4gIHJlc29sdXRpb246IFJlc29sdXRpb247XG4gIHN0YXRzOiBEb21haW5UYWdTdGF0aXN0aWNJdGVtW107XG5cbiAgY29uc3RydWN0b3IodGFnU3RhdGlzdGljSW5mbzogRG9tYWluVGFnU3RhdEFQSVJlc3BvbnNlKSB7XG4gICAgdGhpcy50YWcgPSB0YWdTdGF0aXN0aWNJbmZvLmJvZHkudGFnO1xuICAgIHRoaXMuZGVzY3JpcHRpb24gPSB0YWdTdGF0aXN0aWNJbmZvLmJvZHkuZGVzY3JpcHRpb247XG4gICAgdGhpcy5zdGFydCA9IG5ldyBEYXRlKHRhZ1N0YXRpc3RpY0luZm8uYm9keS5zdGFydCk7XG4gICAgdGhpcy5lbmQgPSBuZXcgRGF0ZSh0YWdTdGF0aXN0aWNJbmZvLmJvZHkuZW5kKTtcbiAgICB0aGlzLnJlc29sdXRpb24gPSB0YWdTdGF0aXN0aWNJbmZvLmJvZHkucmVzb2x1dGlvbjtcbiAgICB0aGlzLnN0YXRzID0gdGFnU3RhdGlzdGljSW5mby5ib2R5LnN0YXRzLm1hcChmdW5jdGlvbiAoc3RhdDogRG9tYWluVGFnQVBJUmVzcG9uc2VTdGF0c0l0ZW0pIHtcbiAgICAgIGNvbnN0IHJlcyA9IHsgLi4uc3RhdCwgdGltZTogbmV3IERhdGUoc3RhdC50aW1lKSB9O1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb21haW5UYWdzQ2xpZW50IGltcGxlbWVudHMgSURvbWFpblRhZ3NDbGllbnQge1xuICBiYXNlUm91dGU6IHN0cmluZztcbiAgcmVxdWVzdDogUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0KSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICB0aGlzLmJhc2VSb3V0ZSA9ICcvdjMvJztcbiAgfVxuXG4gIHByaXZhdGUgX3BhcnNlUGFnZUxpbmtzKHJlc3BvbnNlOiBEb21haW5UYWdzUmVzcG9uc2VEYXRhKTogUGFyc2VkUGFnZXNMaXN0IHtcbiAgICBjb25zdCBwYWdlcyA9IE9iamVjdC5lbnRyaWVzKHJlc3BvbnNlLmJvZHkucGFnaW5nIGFzIFBhZ2VzTGlzdCk7XG4gICAgcmV0dXJuIHBhZ2VzLnJlZHVjZShcbiAgICAgIChhY2M6IFBhZ2VzTGlzdEFjY3VtdWxhdG9yLCBlbnRyaWU6IFt1cmw6IHN0cmluZywgaWQ6IHN0cmluZ10pID0+IHtcbiAgICAgICAgY29uc3QgaWQgPSBlbnRyaWVbMF07XG4gICAgICAgIGNvbnN0IHVybCA9IGVudHJpZVsxXTtcbiAgICAgICAgYWNjW2lkXSA9IHtcbiAgICAgICAgICBpZCxcbiAgICAgICAgICB1cmxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIHt9XG4gICAgKSBhcyB1bmtub3duIGFzIFBhcnNlZFBhZ2VzTGlzdDtcbiAgfVxuXG4gIHByaXZhdGUgX3BhcnNlRG9tYWluVGFnc0xpc3QoXG4gICAgcmVzcG9uc2U6IERvbWFpblRhZ3NSZXNwb25zZURhdGFcbiAgKTogRG9tYWluVGFnc0xpc3Qge1xuICAgIHJldHVybiB7XG4gICAgICBpdGVtczogcmVzcG9uc2UuYm9keS5pdGVtcy5tYXAoKHRhZ0luZm8pID0+IG5ldyBEb21haW5UYWcodGFnSW5mbykpLFxuICAgICAgcGFnZXM6IHRoaXMuX3BhcnNlUGFnZUxpbmtzKHJlc3BvbnNlKVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIF9wYXJzZVRhZ1N0YXRpc3RpYyhcbiAgICByZXNwb25zZTogRG9tYWluVGFnU3RhdEFQSVJlc3BvbnNlXG4gICk6IERvbWFpblRhZ1N0YXRpc3RpYyB7XG4gICAgcmV0dXJuIG5ldyBEb21haW5UYWdTdGF0aXN0aWMocmVzcG9uc2UpO1xuICB9XG5cbiAgbGlzdChkb21haW46IHN0cmluZywgcXVlcnk/OiBEb21haW5UYWdzUXVlcnkpOiBQcm9taXNlPERvbWFpblRhZ3NMaXN0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RhZ3MnKSwgcXVlcnkpXG4gICAgICAudGhlbihcbiAgICAgICAgKHJlczogQVBJUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlRG9tYWluVGFnc0xpc3QocmVzIGFzIERvbWFpblRhZ3NSZXNwb25zZURhdGEpXG4gICAgICApO1xuICB9XG5cbiAgZ2V0KGRvbWFpbjogc3RyaW5nLCB0YWc6IHN0cmluZyk6IFByb21pc2U8RG9tYWluVGFnc0l0ZW0+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGFncycsIHRhZykpXG4gICAgICAudGhlbihcbiAgICAgICAgKHJlczogQVBJUmVzcG9uc2UpID0+IG5ldyBEb21haW5UYWcocmVzLmJvZHkpXG4gICAgICApO1xuICB9XG5cbiAgdXBkYXRlKGRvbWFpbjogc3RyaW5nLCB0YWc6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZyk6IFByb21pc2U8RG9tYWluVGFnc01lc3NhZ2VSZXM+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnB1dCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGFncycsIHRhZyksIGRlc2NyaXB0aW9uKVxuICAgICAgLnRoZW4oXG4gICAgICAgIChyZXM6IEFQSVJlc3BvbnNlKSA9PiByZXMuYm9keSBhcyBEb21haW5UYWdzTWVzc2FnZVJlc1xuICAgICAgKTtcbiAgfVxuXG4gIGRlc3Ryb3koXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgdGFnOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxEb21haW5UYWdzTWVzc2FnZVJlcz4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKGAke3RoaXMuYmFzZVJvdXRlfSR7ZG9tYWlufS90YWdzLyR7dGFnfWApXG4gICAgICAudGhlbigocmVzOiBBUElSZXNwb25zZSkgPT4gKFxuICAgICAgICB7XG4gICAgICAgICAgbWVzc2FnZTogcmVzLmJvZHkubWVzc2FnZSxcbiAgICAgICAgICBzdGF0dXM6IHJlcy5zdGF0dXNcbiAgICAgICAgfSBhcyBEb21haW5UYWdzTWVzc2FnZVJlcykpO1xuICB9XG5cbiAgc3RhdGlzdGljKGRvbWFpbjogc3RyaW5nLCB0YWc6IHN0cmluZywgcXVlcnk6IERvbWFpblRhZ3NTdGF0aXN0aWNRdWVyeSlcbiAgICA6IFByb21pc2U8RG9tYWluVGFnU3RhdGlzdGljPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RhZ3MnLCB0YWcsICdzdGF0cycpLCBxdWVyeSlcbiAgICAgIC50aGVuKFxuICAgICAgICAocmVzOiBBUElSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VUYWdTdGF0aXN0aWMocmVzKVxuICAgICAgKTtcbiAgfVxuXG4gIGNvdW50cmllcyhkb21haW46IHN0cmluZywgdGFnOiBzdHJpbmcpOiBQcm9taXNlPERvbWFpblRhZ0NvdW50cmllc0FnZ3JlZ2F0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RhZ3MnLCB0YWcsICdzdGF0cy9hZ2dyZWdhdGVzL2NvdW50cmllcycpKVxuICAgICAgLnRoZW4oXG4gICAgICAgIChyZXM6IERvbWFpblRhZ0NvdW50cmllc0FQSVJlc3BvbnNlKSA9PiByZXMuYm9keSBhcyBEb21haW5UYWdDb3VudHJpZXNBZ2dyZWdhdGlvblxuICAgICAgKTtcbiAgfVxuXG4gIHByb3ZpZGVycyhkb21haW46IHN0cmluZywgdGFnOiBzdHJpbmcpOiBQcm9taXNlPERvbWFpblRhZ1Byb3ZpZGVyc0FnZ3JlZ2F0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RhZ3MnLCB0YWcsICdzdGF0cy9hZ2dyZWdhdGVzL3Byb3ZpZGVycycpKVxuICAgICAgLnRoZW4oXG4gICAgICAgIChyZXM6IERvbWFpblRhZ1Byb3ZpZGVyc0FQSVJlc3BvbnNlKSA9PiByZXMuYm9keSBhcyBEb21haW5UYWdQcm92aWRlcnNBZ2dyZWdhdGlvblxuICAgICAgKTtcbiAgfVxuXG4gIGRldmljZXMoZG9tYWluOiBzdHJpbmcsIHRhZzogc3RyaW5nKTogUHJvbWlzZTxEb21haW5UYWdEZXZpY2VzQWdncmVnYXRpb24+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGFncycsIHRhZywgJ3N0YXRzL2FnZ3JlZ2F0ZXMvZGV2aWNlcycpKVxuICAgICAgLnRoZW4oXG4gICAgICAgIChyZXM6IERvbWFpblRhZ0RldmljZXNBUElSZXNwb25zZSkgPT4gcmVzLmJvZHkgYXMgRG9tYWluVGFnRGV2aWNlc0FnZ3JlZ2F0aW9uXG4gICAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgdXJsam9pbiBmcm9tICd1cmwtam9pbic7XG5pbXBvcnQgQVBJUmVzcG9uc2UgZnJvbSAnLi9pbnRlcmZhY2VzL0FwaVJlc3BvbnNlJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vcmVxdWVzdCc7XG5cbmltcG9ydCB7XG4gIENyZWF0ZURvbWFpblRlbXBsYXRlQVBJUmVzcG9uc2UsXG4gIENyZWF0ZURvbWFpblRlbXBsYXRlVmVyc2lvbkFQSVJlc3BvbnNlLFxuICBDcmVhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25SZXN1bHQsXG4gIERvbWFpblRlbXBsYXRlLCBEb21haW5UZW1wbGF0ZURhdGEsXG4gIERvbWFpblRlbXBsYXRlc1F1ZXJ5LFxuICBEb21haW5UZW1wbGF0ZVVwZGF0ZURhdGEsXG4gIERvbWFpblRlbXBsYXRlVXBkYXRlVmVyc2lvbkRhdGEsXG4gIERvbWFpblRlbXBsYXRlVmVyc2lvbkRhdGEsXG4gIEdldERvbWFpblRlbXBsYXRlQVBJUmVzcG9uc2UsXG4gIElEb21haW5UZW1wbGF0ZXNDbGllbnQsXG4gIExpc3REb21haW5UZW1wbGF0ZXNBUElSZXNwb25zZSxcbiAgTGlzdERvbWFpblRlbXBsYXRlc1Jlc3VsdCxcbiAgTGlzdERvbWFpblRlbXBsYXRlVmVyc2lvbnNBUElSZXNwb25zZSxcbiAgTGlzdERvbWFpblRlbXBsYXRlVmVyc2lvbnNSZXN1bHQsXG4gIE11dGF0ZURvbWFpblRlbXBsYXRlVmVyc2lvbkFQSVJlc3BvbnNlLFxuICBNdXRhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25SZXN1bHQsXG4gIE5vdGlmaWNhdGlvbkFQSVJlc3BvbnNlLFxuICBOb3RpZmljYXRpb25SZXN1bHQsXG4gIFNob3J0VGVtcGxhdGVWZXJzaW9uLFxuICBUZW1wbGF0ZVF1ZXJ5LFxuICBUZW1wbGF0ZVZlcnNpb24sXG4gIFVwZGF0ZU9yRGVsZXRlRG9tYWluVGVtcGxhdGVBUElSZXNwb25zZSxcbiAgVXBkYXRlT3JEZWxldGVEb21haW5UZW1wbGF0ZVJlc3VsdFxufSBmcm9tICcuL2ludGVyZmFjZXMvRG9tYWluVGVtcGxhdGVzJztcblxuZXhwb3J0IGNsYXNzIERvbWFpblRlbXBsYXRlSXRlbSBpbXBsZW1lbnRzIERvbWFpblRlbXBsYXRlIHtcbiAgbmFtZSA6IHN0cmluZztcbiAgZGVzY3JpcHRpb24gOiBzdHJpbmc7XG4gIGNyZWF0ZWRBdCA6IERhdGUgfCAnJztcbiAgY3JlYXRlZEJ5IDogc3RyaW5nO1xuICBpZCA6IHN0cmluZztcbiAgdmVyc2lvbj86IFRlbXBsYXRlVmVyc2lvbjtcbiAgdmVyc2lvbnM/OiBTaG9ydFRlbXBsYXRlVmVyc2lvbltdO1xuXG4gIGNvbnN0cnVjdG9yKGRvbWFpblRlbXBsYXRlRnJvbUFQSTogRG9tYWluVGVtcGxhdGUpIHtcbiAgICB0aGlzLm5hbWUgPSBkb21haW5UZW1wbGF0ZUZyb21BUEkubmFtZTtcbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gZG9tYWluVGVtcGxhdGVGcm9tQVBJLmRlc2NyaXB0aW9uO1xuICAgIHRoaXMuY3JlYXRlZEF0ID0gZG9tYWluVGVtcGxhdGVGcm9tQVBJLmNyZWF0ZWRBdCA/IG5ldyBEYXRlKGRvbWFpblRlbXBsYXRlRnJvbUFQSS5jcmVhdGVkQXQpIDogJyc7XG4gICAgdGhpcy5jcmVhdGVkQnkgPSBkb21haW5UZW1wbGF0ZUZyb21BUEkuY3JlYXRlZEJ5O1xuICAgIHRoaXMuaWQgPSBkb21haW5UZW1wbGF0ZUZyb21BUEkuaWQ7XG5cbiAgICBpZiAoZG9tYWluVGVtcGxhdGVGcm9tQVBJLnZlcnNpb24pIHtcbiAgICAgIHRoaXMudmVyc2lvbiA9IGRvbWFpblRlbXBsYXRlRnJvbUFQSS52ZXJzaW9uO1xuICAgICAgaWYgKGRvbWFpblRlbXBsYXRlRnJvbUFQSS52ZXJzaW9uLmNyZWF0ZWRBdCkge1xuICAgICAgICB0aGlzLnZlcnNpb24uY3JlYXRlZEF0ID0gbmV3IERhdGUoZG9tYWluVGVtcGxhdGVGcm9tQVBJLnZlcnNpb24uY3JlYXRlZEF0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZG9tYWluVGVtcGxhdGVGcm9tQVBJLnZlcnNpb25zICYmIGRvbWFpblRlbXBsYXRlRnJvbUFQSS52ZXJzaW9ucy5sZW5ndGgpIHtcbiAgICAgIHRoaXMudmVyc2lvbnMgPSBkb21haW5UZW1wbGF0ZUZyb21BUEkudmVyc2lvbnMubWFwKCh2ZXJzaW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHsgLi4udmVyc2lvbiB9O1xuICAgICAgICByZXN1bHQuY3JlYXRlZEF0ID0gbmV3IERhdGUodmVyc2lvbi5jcmVhdGVkQXQpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvbWFpblRlbXBsYXRlc0NsaWVudCBpbXBsZW1lbnRzIElEb21haW5UZW1wbGF0ZXNDbGllbnQge1xuICBiYXNlUm91dGU6IHN0cmluZztcbiAgcmVxdWVzdDogUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0KSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICB0aGlzLmJhc2VSb3V0ZSA9ICcvdjMvJztcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VDcmVhdGlvblJlc3BvbnNlKGRhdGE6IENyZWF0ZURvbWFpblRlbXBsYXRlQVBJUmVzcG9uc2UpOiBEb21haW5UZW1wbGF0ZUl0ZW0ge1xuICAgIHJldHVybiBuZXcgRG9tYWluVGVtcGxhdGVJdGVtKGRhdGEuYm9keS50ZW1wbGF0ZSk7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlQ3JlYXRpb25WZXJzaW9uUmVzcG9uc2UoXG4gICAgZGF0YTogQ3JlYXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uQVBJUmVzcG9uc2VcbiAgKTogQ3JlYXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uUmVzdWx0IHtcbiAgICBjb25zdCByZXN1bHQ6IENyZWF0ZURvbWFpblRlbXBsYXRlVmVyc2lvblJlc3VsdCA9IHt9IGFzIENyZWF0ZURvbWFpblRlbXBsYXRlVmVyc2lvblJlc3VsdDtcbiAgICByZXN1bHQuc3RhdHVzID0gZGF0YS5zdGF0dXM7XG4gICAgcmVzdWx0Lm1lc3NhZ2UgPSBkYXRhLmJvZHkubWVzc2FnZTtcbiAgICBpZiAoZGF0YS5ib2R5ICYmIGRhdGEuYm9keS50ZW1wbGF0ZSkge1xuICAgICAgcmVzdWx0LnRlbXBsYXRlID0gbmV3IERvbWFpblRlbXBsYXRlSXRlbShkYXRhLmJvZHkudGVtcGxhdGUpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZU11dGF0aW9uUmVzcG9uc2UoXG4gICAgZGF0YTogVXBkYXRlT3JEZWxldGVEb21haW5UZW1wbGF0ZUFQSVJlc3BvbnNlXG4gICk6IFVwZGF0ZU9yRGVsZXRlRG9tYWluVGVtcGxhdGVSZXN1bHQge1xuICAgIGNvbnN0IHJlc3VsdDogVXBkYXRlT3JEZWxldGVEb21haW5UZW1wbGF0ZVJlc3VsdCA9IHt9IGFzIFVwZGF0ZU9yRGVsZXRlRG9tYWluVGVtcGxhdGVSZXN1bHQ7XG4gICAgcmVzdWx0LnN0YXR1cyA9IGRhdGEuc3RhdHVzO1xuICAgIHJlc3VsdC5tZXNzYWdlID0gZGF0YS5ib2R5Lm1lc3NhZ2U7XG4gICAgaWYgKGRhdGEuYm9keSAmJiBkYXRhLmJvZHkudGVtcGxhdGUpIHtcbiAgICAgIHJlc3VsdC50ZW1wbGF0ZU5hbWUgPSBkYXRhLmJvZHkudGVtcGxhdGUubmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VOb3RpZmljYXRpb25SZXNwb25zZShkYXRhOiBOb3RpZmljYXRpb25BUElSZXNwb25zZSk6IE5vdGlmaWNhdGlvblJlc3VsdCB7XG4gICAgY29uc3QgcmVzdWx0OiBOb3RpZmljYXRpb25SZXN1bHQgPSB7fSBhcyBOb3RpZmljYXRpb25SZXN1bHQ7XG4gICAgcmVzdWx0LnN0YXR1cyA9IGRhdGEuc3RhdHVzO1xuICAgIHJlc3VsdC5tZXNzYWdlID0gZGF0YS5ib2R5Lm1lc3NhZ2U7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VNdXRhdGVUZW1wbGF0ZVZlcnNpb25SZXNwb25zZShcbiAgICBkYXRhOiBNdXRhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25BUElSZXNwb25zZVxuICApOiBNdXRhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25SZXN1bHQge1xuICAgIGNvbnN0IHJlc3VsdDogTXV0YXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uUmVzdWx0ID0ge30gYXMgTXV0YXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uUmVzdWx0O1xuICAgIHJlc3VsdC5zdGF0dXMgPSBkYXRhLnN0YXR1cztcbiAgICByZXN1bHQubWVzc2FnZSA9IGRhdGEuYm9keS5tZXNzYWdlO1xuICAgIGlmIChkYXRhLmJvZHkudGVtcGxhdGUpIHtcbiAgICAgIHJlc3VsdC50ZW1wbGF0ZU5hbWUgPSBkYXRhLmJvZHkudGVtcGxhdGUubmFtZTtcbiAgICAgIHJlc3VsdC50ZW1wbGF0ZVZlcnNpb24gPSB7IHRhZzogZGF0YS5ib2R5LnRlbXBsYXRlLnZlcnNpb24udGFnIH07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlTGlzdChyZXNwb25zZTogTGlzdERvbWFpblRlbXBsYXRlc0FQSVJlc3BvbnNlKTogTGlzdERvbWFpblRlbXBsYXRlc1Jlc3VsdCB7XG4gICAgY29uc3QgZGF0YSA9IHt9IGFzIExpc3REb21haW5UZW1wbGF0ZXNSZXN1bHQ7XG5cbiAgICBkYXRhLml0ZW1zID0gcmVzcG9uc2UuYm9keS5pdGVtcy5tYXAoKGQ6IERvbWFpblRlbXBsYXRlKSA9PiBuZXcgRG9tYWluVGVtcGxhdGVJdGVtKGQpKTtcblxuICAgIGRhdGEucGFnZXMgPSByZXNwb25zZS5ib2R5LnBhZ2luZztcblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUxpc3RUZW1wbGF0ZVZlcnNpb25zKFxuICAgIHJlc3BvbnNlOiBMaXN0RG9tYWluVGVtcGxhdGVWZXJzaW9uc0FQSVJlc3BvbnNlXG4gICk6IExpc3REb21haW5UZW1wbGF0ZVZlcnNpb25zUmVzdWx0IHtcbiAgICBjb25zdCBkYXRhID0ge30gYXMgTGlzdERvbWFpblRlbXBsYXRlVmVyc2lvbnNSZXN1bHQ7XG5cbiAgICBkYXRhLnRlbXBsYXRlID0gbmV3IERvbWFpblRlbXBsYXRlSXRlbShyZXNwb25zZS5ib2R5LnRlbXBsYXRlKTtcblxuICAgIGRhdGEucGFnZXMgPSByZXNwb25zZS5ib2R5LnBhZ2luZztcblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgbGlzdChkb21haW46IHN0cmluZywgcXVlcnk/OiBEb21haW5UZW1wbGF0ZXNRdWVyeSk6IFByb21pc2U8TGlzdERvbWFpblRlbXBsYXRlc1Jlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90ZW1wbGF0ZXMnKSwgcXVlcnkpXG4gICAgICAudGhlbihcbiAgICAgICAgKHJlczogQVBJUmVzcG9uc2UpID0+IHRoaXMucGFyc2VMaXN0KHJlcylcbiAgICAgICk7XG4gIH1cblxuICBnZXQoZG9tYWluOiBzdHJpbmcsIHRlbXBsYXRlTmFtZTogc3RyaW5nLCBxdWVyeT86IFRlbXBsYXRlUXVlcnkpOiBQcm9taXNlPERvbWFpblRlbXBsYXRlSXRlbT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90ZW1wbGF0ZXMvJywgdGVtcGxhdGVOYW1lKSwgcXVlcnkpXG4gICAgICAudGhlbihcbiAgICAgICAgKHJlczogR2V0RG9tYWluVGVtcGxhdGVBUElSZXNwb25zZSkgPT4gbmV3IERvbWFpblRlbXBsYXRlSXRlbShyZXMuYm9keS50ZW1wbGF0ZSlcbiAgICAgICk7XG4gIH1cblxuICBjcmVhdGUoXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgZGF0YTogRG9tYWluVGVtcGxhdGVEYXRhXG4gICk6IFByb21pc2U8RG9tYWluVGVtcGxhdGVJdGVtPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90ZW1wbGF0ZXMnKSwgZGF0YSlcbiAgICAgIC50aGVuKChyZXM6IENyZWF0ZURvbWFpblRlbXBsYXRlQVBJUmVzcG9uc2UpID0+IHRoaXMucGFyc2VDcmVhdGlvblJlc3BvbnNlKHJlcykpO1xuICB9XG5cbiAgdXBkYXRlKFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIHRlbXBsYXRlTmFtZTogc3RyaW5nLFxuICAgIGRhdGE6IERvbWFpblRlbXBsYXRlVXBkYXRlRGF0YVxuICApOiBQcm9taXNlPFVwZGF0ZU9yRGVsZXRlRG9tYWluVGVtcGxhdGVSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnB1dFdpdGhGRCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGVtcGxhdGVzLycsIHRlbXBsYXRlTmFtZSksIGRhdGEpXG4gICAgICAudGhlbigocmVzOiBVcGRhdGVPckRlbGV0ZURvbWFpblRlbXBsYXRlQVBJUmVzcG9uc2UpID0+IHRoaXMucGFyc2VNdXRhdGlvblJlc3BvbnNlKHJlcykpO1xuICB9XG5cbiAgZGVzdHJveShkb21haW46IHN0cmluZywgdGVtcGxhdGVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPFVwZGF0ZU9yRGVsZXRlRG9tYWluVGVtcGxhdGVSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZSh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGVtcGxhdGVzLycsIHRlbXBsYXRlTmFtZSkpXG4gICAgICAudGhlbigocmVzOiBVcGRhdGVPckRlbGV0ZURvbWFpblRlbXBsYXRlQVBJUmVzcG9uc2UpID0+IHRoaXMucGFyc2VNdXRhdGlvblJlc3BvbnNlKHJlcykpO1xuICB9XG5cbiAgZGVzdHJveUFsbChkb21haW46IHN0cmluZyk6IFByb21pc2U8Tm90aWZpY2F0aW9uUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5kZWxldGUodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RlbXBsYXRlcycpKVxuICAgICAgLnRoZW4oKHJlczogTm90aWZpY2F0aW9uQVBJUmVzcG9uc2UpID0+IHRoaXMucGFyc2VOb3RpZmljYXRpb25SZXNwb25zZShyZXMpKTtcbiAgfVxuXG4gIGNyZWF0ZVZlcnNpb24oXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgdGVtcGxhdGVOYW1lOiBzdHJpbmcsXG4gICAgZGF0YTogRG9tYWluVGVtcGxhdGVWZXJzaW9uRGF0YVxuICApOiBQcm9taXNlPENyZWF0ZURvbWFpblRlbXBsYXRlVmVyc2lvblJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGVtcGxhdGVzLycsIHRlbXBsYXRlTmFtZSwgJy92ZXJzaW9ucycpLCBkYXRhKVxuICAgICAgLnRoZW4oXG4gICAgICAgIChyZXM6IENyZWF0ZURvbWFpblRlbXBsYXRlVmVyc2lvbkFQSVJlc3BvbnNlKSA9PiB0aGlzLnBhcnNlQ3JlYXRpb25WZXJzaW9uUmVzcG9uc2UocmVzKVxuICAgICAgKTtcbiAgfVxuXG4gIGdldFZlcnNpb24oZG9tYWluOiBzdHJpbmcsIHRlbXBsYXRlTmFtZTogc3RyaW5nLCB0YWc6IHN0cmluZyk6IFByb21pc2U8RG9tYWluVGVtcGxhdGVJdGVtPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RlbXBsYXRlcy8nLCB0ZW1wbGF0ZU5hbWUsICcvdmVyc2lvbnMvJywgdGFnKSlcbiAgICAgIC50aGVuKFxuICAgICAgICAocmVzOiBHZXREb21haW5UZW1wbGF0ZUFQSVJlc3BvbnNlKSA9PiBuZXcgRG9tYWluVGVtcGxhdGVJdGVtKHJlcy5ib2R5LnRlbXBsYXRlKVxuICAgICAgKTtcbiAgfVxuXG4gIHVwZGF0ZVZlcnNpb24oXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgdGVtcGxhdGVOYW1lOiBzdHJpbmcsXG4gICAgdGFnOiBzdHJpbmcsXG4gICAgZGF0YTogRG9tYWluVGVtcGxhdGVVcGRhdGVWZXJzaW9uRGF0YVxuICApOiBQcm9taXNlPE11dGF0ZURvbWFpblRlbXBsYXRlVmVyc2lvblJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0V2l0aEZEKHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90ZW1wbGF0ZXMvJywgdGVtcGxhdGVOYW1lLCAnL3ZlcnNpb25zLycsIHRhZyksIGRhdGEpXG4gICAgICAudGhlbihcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICAgICAgKHJlczogTXV0YXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uQVBJUmVzcG9uc2UpID0+IHRoaXMucGFyc2VNdXRhdGVUZW1wbGF0ZVZlcnNpb25SZXNwb25zZShyZXMpXG4gICAgICApO1xuICB9XG5cbiAgZGVzdHJveVZlcnNpb24oXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgdGVtcGxhdGVOYW1lOiBzdHJpbmcsXG4gICAgdGFnOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxNdXRhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25SZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZSh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGVtcGxhdGVzLycsIHRlbXBsYXRlTmFtZSwgJy92ZXJzaW9ucy8nLCB0YWcpKVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICAgIC50aGVuKChyZXM6IE11dGF0ZURvbWFpblRlbXBsYXRlVmVyc2lvbkFQSVJlc3BvbnNlKSA9PiB0aGlzLnBhcnNlTXV0YXRlVGVtcGxhdGVWZXJzaW9uUmVzcG9uc2UocmVzKSk7XG4gIH1cblxuICBsaXN0VmVyc2lvbnMoXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgdGVtcGxhdGVOYW1lOiBzdHJpbmcsXG4gICAgcXVlcnk/OiBEb21haW5UZW1wbGF0ZXNRdWVyeVxuICApOiBQcm9taXNlPExpc3REb21haW5UZW1wbGF0ZVZlcnNpb25zUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RlbXBsYXRlcycsIHRlbXBsYXRlTmFtZSwgJy92ZXJzaW9ucycpLCBxdWVyeSlcbiAgICAgIC50aGVuKFxuICAgICAgICAocmVzOiBMaXN0RG9tYWluVGVtcGxhdGVWZXJzaW9uc0FQSVJlc3BvbnNlKSA9PiB0aGlzLnBhcnNlTGlzdFRlbXBsYXRlVmVyc2lvbnMocmVzKVxuICAgICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0IEFQSUVycm9yT3B0aW9ucyBmcm9tICcuL2ludGVyZmFjZXMvQVBJRXJyb3JPcHRpb25zJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQVBJRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHN0YXR1czogbnVtYmVyIHwgc3RyaW5nO1xuICBzdGFjazogc3RyaW5nO1xuICBkZXRhaWxzOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioe1xuICAgIHN0YXR1cyxcbiAgICBzdGF0dXNUZXh0LFxuICAgIG1lc3NhZ2UsXG4gICAgYm9keSA9IHt9XG4gIH06IEFQSUVycm9yT3B0aW9ucykge1xuICAgIGNvbnN0IHsgbWVzc2FnZTogYm9keU1lc3NhZ2UsIGVycm9yIH0gPSBib2R5O1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLnN0YWNrID0gJyc7XG4gICAgdGhpcy5zdGF0dXMgPSBzdGF0dXM7XG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCBlcnJvciB8fCBzdGF0dXNUZXh0O1xuICAgIHRoaXMuZGV0YWlscyA9IGJvZHlNZXNzYWdlO1xuICB9XG59XG4iLCJpbXBvcnQgdXJsam9pbiBmcm9tICd1cmwtam9pbic7XG5pbXBvcnQge1xuICBFdmVudHNMaXN0LFxuICBFdmVudHNQYWdlLFxuICBFdmVudHNRdWVyeSxcbiAgRXZlbnRzUmVzcG9uc2UsXG4gIFBhZ2VzTGlzdCxcbiAgUGFnZXNMaXN0QWNjdW11bGF0b3IsXG4gIFBhcnNlZFBhZ2VzTGlzdFxufSBmcm9tICcuL2ludGVyZmFjZXMvRXZlbnRzJztcblxuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXZlbnRDbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICB9XG5cbiAgX3BhcnNlUGFnZU51bWJlcih1cmw6IHN0cmluZykgOiBzdHJpbmcge1xuICAgIHJldHVybiB1cmwuc3BsaXQoJy8nKS5wb3AoKSB8fCAnJztcbiAgfVxuXG4gIF9wYXJzZVBhZ2UoaWQ6IHN0cmluZywgdXJsOiBzdHJpbmcpIDogRXZlbnRzUGFnZSB7XG4gICAgcmV0dXJuIHsgaWQsIG51bWJlcjogdGhpcy5fcGFyc2VQYWdlTnVtYmVyKHVybCksIHVybCB9O1xuICB9XG5cbiAgX3BhcnNlUGFnZUxpbmtzKHJlc3BvbnNlOiBFdmVudHNSZXNwb25zZSkgOiBQYXJzZWRQYWdlc0xpc3Qge1xuICAgIGNvbnN0IHBhZ2VzID0gT2JqZWN0LmVudHJpZXMocmVzcG9uc2UuYm9keS5wYWdpbmcgYXMgUGFnZXNMaXN0KTtcbiAgICByZXR1cm4gcGFnZXMucmVkdWNlKFxuICAgICAgKGFjYzogUGFnZXNMaXN0QWNjdW11bGF0b3IsIHBhaXI6IFt1cmw6IHN0cmluZywgaWQ6IHN0cmluZ10pID0+IHtcbiAgICAgICAgY29uc3QgaWQgPSBwYWlyWzBdO1xuICAgICAgICBjb25zdCB1cmwgPSBwYWlyWzFdO1xuICAgICAgICBhY2NbaWRdID0gdGhpcy5fcGFyc2VQYWdlKGlkLCB1cmwpO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwge31cbiAgICApIGFzIHVua25vd24gYXMgUGFyc2VkUGFnZXNMaXN0O1xuICB9XG5cbiAgX3BhcnNlRXZlbnRMaXN0KHJlc3BvbnNlOiBFdmVudHNSZXNwb25zZSkgOiBFdmVudHNMaXN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgaXRlbXM6IHJlc3BvbnNlLmJvZHkuaXRlbXMsXG4gICAgICBwYWdlczogdGhpcy5fcGFyc2VQYWdlTGlua3MocmVzcG9uc2UpXG4gICAgfTtcbiAgfVxuXG4gIGdldChkb21haW46IHN0cmluZywgcXVlcnk/OiBFdmVudHNRdWVyeSkgOiBQcm9taXNlPEV2ZW50c0xpc3Q+IHtcbiAgICBsZXQgdXJsO1xuICAgIGNvbnN0IHF1ZXJ5Q29weSA9IHsgLi4ucXVlcnkgfTtcbiAgICBpZiAocXVlcnlDb3B5ICYmIHF1ZXJ5Q29weS5wYWdlKSB7XG4gICAgICB1cmwgPSB1cmxqb2luKCcvdjMnLCBkb21haW4sICdldmVudHMnLCBxdWVyeUNvcHkucGFnZSk7XG4gICAgICBkZWxldGUgcXVlcnlDb3B5LnBhZ2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVybCA9IHVybGpvaW4oJy92MycsIGRvbWFpbiwgJ2V2ZW50cycpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmwsIHF1ZXJ5Q29weSlcbiAgICAgIC50aGVuKChyZXNwb25zZTogRXZlbnRzUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlRXZlbnRMaXN0KHJlc3BvbnNlKSk7XG4gIH1cbn1cbiIsImltcG9ydCBDbGllbnQgZnJvbSAnLi9jbGllbnQnO1xuaW1wb3J0IHsgSW5wdXRGb3JtRGF0YSB9IGZyb20gJy4vaW50ZXJmYWNlcy9JRm9ybURhdGEnO1xuaW1wb3J0IE9wdGlvbnMgZnJvbSAnLi9pbnRlcmZhY2VzL09wdGlvbnMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNYWlsZ3VuIHtcbiAgc3RhdGljIGdldCBkZWZhdWx0KCk6IHR5cGVvZiBNYWlsZ3VuIHsgcmV0dXJuIHRoaXM7IH1cbiAgcHJpdmF0ZSBmb3JtRGF0YTogSW5wdXRGb3JtRGF0YVxuXG4gIGNvbnN0cnVjdG9yKEZvcm1EYXRhOiBJbnB1dEZvcm1EYXRhKSB7XG4gICAgdGhpcy5mb3JtRGF0YSA9IEZvcm1EYXRhO1xuICB9XG5cbiAgY2xpZW50KG9wdGlvbnM6IE9wdGlvbnMpIDogQ2xpZW50IHtcbiAgICByZXR1cm4gbmV3IENsaWVudChvcHRpb25zLCB0aGlzLmZvcm1EYXRhKTtcbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgQm91bmNlLCBDb21wbGFpbnQsIFVuc3Vic2NyaWJlLCBXaGl0ZUxpc3Rcbn0gZnJvbSAnLi4vc3VwcHJlc3Npb25zJztcblxuLyogZXNsaW50LWRpc2FibGUgY2FtZWxjYXNlICovXG5leHBvcnQgaW50ZXJmYWNlIEJvdW5jZURhdGEge1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIGNvZGU6IG51bWJlcjtcbiAgZXJyb3I6IHN0cmluZztcbiAgY3JlYXRlZF9hdDogc3RyaW5nIHwgRGF0ZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21wbGFpbnREYXRhIHtcbiAgYWRkcmVzczogc3RyaW5nO1xuICBjcmVhdGVkX2F0OiBzdHJpbmcgfCBEYXRlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVuc3Vic2NyaWJlRGF0YSB7XG4gIGFkZHJlc3M6IHN0cmluZztcbiAgdGFnczogYW55O1xuICBjcmVhdGVkX2F0OiBzdHJpbmcgfCBEYXRlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdoaXRlTGlzdERhdGEge1xuICB0eXBlOiBzdHJpbmc7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIHJlYXNvbjogc3RyaW5nO1xuICBjcmVhdGVkQXQ6IHN0cmluZyB8IERhdGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkUGFnZSB7XG4gIGlkOiBzdHJpbmc7XG4gIHBhZ2U6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGFkZHJlc3M6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIHVybDogc3RyaW5nXG59XG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlZFBhZ2VzTGlzdCB7XG4gIHByZXZpb3VzOiBQYXJzZWRQYWdlO1xuICBmaXJzdDogUGFyc2VkUGFnZTtcbiAgbGFzdDogUGFyc2VkUGFnZTtcbiAgbmV4dDogUGFyc2VkUGFnZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdXBwcmVzc2lvbkxpc3Qge1xuICBpdGVtczogKEJvdW5jZSB8IENvbXBsYWludCB8IFVuc3Vic2NyaWJlIHwgV2hpdGVMaXN0KVtdO1xuICBwYWdlczogUGFyc2VkUGFnZXNMaXN0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2VzTGlzdCB7XG4gIHByZXZpb3VzOiBzdHJpbmc7XG4gIGZpcnN0OiBzdHJpbmc7XG4gIGxhc3Q6IHN0cmluZztcbiAgbmV4dDogc3RyaW5nO1xufVxuXG5leHBvcnQgZW51bSBTdXBwcmVzc2lvbk1vZGVscyB7XG4gIEJPVU5DRVMgPSAnYm91bmNlcycsXG4gIENPTVBMQUlOVFMgPSAnY29tcGxhaW50cycsXG4gIFVOU1VCU0NSSUJFUyA9ICd1bnN1YnNjcmliZXMnLFxuICBXSElURUxJU1RTID0gJ3doaXRlbGlzdHMnXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFnZXNMaXN0QWNjdW11bGF0b3Ige1xuICBbaW5kZXg6IHN0cmluZ106IFBhcnNlZFBhZ2U7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3VwcHJlc3Npb25MaXN0UXVlcnkge1xuICBsaW1pdD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdXBwcmVzc2lvbkxpc3RSZXNwb25zZSB7XG4gIGJvZHk6IHtcbiAgICBpdGVtczogQm91bmNlRGF0YVtdIHwgQ29tcGxhaW50RGF0YVtdIHwgVW5zdWJzY3JpYmVEYXRhW10gfCBXaGl0ZUxpc3REYXRhW107XG4gICAgcGFnaW5nOiBQYWdlc0xpc3Q7XG4gIH1cbiAgc3RhdHVzOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3VwcHJlc3Npb25SZXNwb25zZSB7XG4gIGJvZHk6IEJvdW5jZURhdGEgfCBDb21wbGFpbnREYXRhIHwgVW5zdWJzY3JpYmVEYXRhIHwgV2hpdGVMaXN0RGF0YTtcbiAgc3RhdHVzOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3VwcHJlc3Npb25EZXN0cm95UmVzcG9uc2Uge1xuICBib2R5OiB7XG4gICAgbWVzc2FnZTogc3RyaW5nO1xuICAgIHZhbHVlPzogc3RyaW5nO1xuICAgIGFkZHJlc3M/OiBzdHJpbmc7XG4gIH1cbiAgc3RhdHVzOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3VwcHJlc3Npb25EZXN0cm95UmVzdWx0IHtcbiAgbWVzc2FnZTogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIHN0YXR1czogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN1cHByZXNzaW9uQ3JlYXRpb25EYXRhIHtcbiAgYWRkcmVzczogc3RyaW5nO1xuICBjb2RlPzogbnVtYmVyO1xuICBlcnJvcj86IHN0cmluZztcbiAgZG9tYWluPzogc3RyaW5nO1xuICB0YWc/OiBzdHJpbmc7XG4gIGNyZWF0ZWRfYXQ/OiBzdHJpbmcgO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN1cHByZXNzaW9uQ3JlYXRpb25SZXNwb25zZSB7XG4gIGJvZHk6e1xuICAgIG1lc3NhZ2U6c3RyaW5nO1xuICAgIHR5cGU/OiBzdHJpbmc7XG4gICAgdmFsdWU/OiBzdHJpbmc7XG4gIH1cbiAgc3RhdHVzOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3VwcHJlc3Npb25DcmVhdGlvblJlc3VsdCB7XG4gIG1lc3NhZ2U6c3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIHN0YXR1czogbnVtYmVyO1xufVxuIiwiLyogZXNsaW50LWRpc2FibGUgY2FtZWxjYXNlICovXG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuL3JlcXVlc3QnO1xuXG5pbXBvcnQgeyBJcFBvb2wsIElwUG9vbExpc3RSZXNwb25zZSwgSXBQb29sVXBkYXRlRGF0YSB9IGZyb20gJy4vaW50ZXJmYWNlcy9JcFBvb2xzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSXBQb29sc0NsaWVudCB7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCkge1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gIH1cblxuICBsaXN0KHF1ZXJ5OiBhbnkpOiBQcm9taXNlPElwUG9vbFtdPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQoJy92MS9pcF9wb29scycsIHF1ZXJ5KVxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiBJcFBvb2xMaXN0UmVzcG9uc2UpID0+IHRoaXMucGFyc2VJcFBvb2xzUmVzcG9uc2UocmVzcG9uc2UpKTtcbiAgfVxuXG4gIGNyZWF0ZShkYXRhOiB7IG5hbWU6IHN0cmluZywgZGVzY3JpcHRpb24/OiBzdHJpbmcsIGlwcz86IHN0cmluZ1tdIH0pIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQoJy92MS9pcF9wb29scycsIGRhdGEpXG4gICAgICAudGhlbigocmVzcG9uc2U6IHsgYm9keTogeyBtZXNzYWdlOiBzdHJpbmcsIHBvb2xfaWQ6IHN0cmluZyB9IH0pID0+IHJlc3BvbnNlPy5ib2R5KTtcbiAgfVxuXG4gIHVwZGF0ZShwb29sSWQ6IHN0cmluZywgZGF0YTogSXBQb29sVXBkYXRlRGF0YSkgOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucGF0Y2hXaXRoRkQoYC92MS9pcF9wb29scy8ke3Bvb2xJZH1gLCBkYXRhKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiB7IGJvZHk6IGFueSB9KSA9PiByZXNwb25zZT8uYm9keSk7XG4gIH1cblxuICBkZWxldGUocG9vbElkOiBzdHJpbmcsIGRhdGE6IHsgaWQ6IHN0cmluZywgcG9vbF9pZDogc3RyaW5nIH0pIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZShgL3YxL2lwX3Bvb2xzLyR7cG9vbElkfWAsIGRhdGEpXG4gICAgICAudGhlbigocmVzcG9uc2U6IHsgYm9keTogYW55IH0pID0+IHJlc3BvbnNlPy5ib2R5KTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VJcFBvb2xzUmVzcG9uc2UocmVzcG9uc2U6IHsgYm9keTogYW55IHwgYW55IH0pIHtcbiAgICByZXR1cm4gcmVzcG9uc2UuYm9keS5pcF9wb29scztcbiAgfVxufVxuIiwiaW1wb3J0IE1nUmVxdWVzdCBmcm9tICcuL3JlcXVlc3QnO1xuaW1wb3J0IHsgSXBEYXRhLCBJcHNMaXN0UmVzcG9uc2VCb2R5IH0gZnJvbSAnLi9pbnRlcmZhY2VzL0lwcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElwc0NsaWVudCB7XG4gIHJlcXVlc3Q6IE1nUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBNZ1JlcXVlc3QpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICB9XG5cbiAgbGlzdChxdWVyeTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQoJy92My9pcHMnLCBxdWVyeSlcbiAgICAgIC50aGVuKChyZXNwb25zZTogeyBib2R5OiBJcHNMaXN0UmVzcG9uc2VCb2R5IH0pID0+IHRoaXMucGFyc2VJcHNSZXNwb25zZShyZXNwb25zZSkpO1xuICB9XG5cbiAgZ2V0KGlwOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldChgL3YzL2lwcy8ke2lwfWApXG4gICAgICAudGhlbigocmVzcG9uc2U6IHsgYm9keTogSXBEYXRhIH0pID0+IHRoaXMucGFyc2VJcHNSZXNwb25zZShyZXNwb25zZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUlwc1Jlc3BvbnNlKHJlc3BvbnNlOiB7IGJvZHk6IElwc0xpc3RSZXNwb25zZUJvZHkgfCBJcERhdGEgfSkge1xuICAgIHJldHVybiByZXNwb25zZS5ib2R5O1xuICB9XG59XG4iLCJpbXBvcnQgUmVxdWVzdCBmcm9tICcuL3JlcXVlc3QnO1xuaW1wb3J0IHtcbiAgTGlzdHNRdWVyeSxcbiAgQ3JlYXRlVXBkYXRlTGlzdCxcbiAgRGVzdHJveWVkTGlzdCxcbiAgTWFpbGluZ0xpc3QsXG4gIFZhbGlkYXRpb25BcGlSZXNwb25zZSxcbiAgU3RhcnRWYWxpZGF0aW9uUmVzdWx0LFxuICBWYWxpZGF0aW9uUmVzdWx0LFxuICBDYW5jZWxWYWxpZGF0aW9uUmVzdWx0XG59IGZyb20gJy4vaW50ZXJmYWNlcy9saXN0cyc7XG5pbXBvcnQgeyBJTWFpbExpc3RzTWVtYmVycyB9IGZyb20gJy4vaW50ZXJmYWNlcy9tYWlsTGlzdE1lbWJlcnMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMaXN0c0NsaWVudCB7XG4gIGJhc2VSb3V0ZTogc3RyaW5nO1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuICBtZW1iZXJzOiBJTWFpbExpc3RzTWVtYmVycztcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0LCBtZW1iZXJzOklNYWlsTGlzdHNNZW1iZXJzKSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICB0aGlzLmJhc2VSb3V0ZSA9ICcvdjMvbGlzdHMnO1xuICAgIHRoaXMubWVtYmVycyA9IG1lbWJlcnM7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlVmFsaWRhdGlvblJlc3VsdChzdGF0dXM6IG51bWJlciwgZGF0YTogVmFsaWRhdGlvbkFwaVJlc3BvbnNlKTogVmFsaWRhdGlvblJlc3VsdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1cyxcbiAgICAgIHZhbGlkYXRpb25SZXN1bHQ6IHtcbiAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgY3JlYXRlZF9hdDogbmV3IERhdGUoZGF0YS5jcmVhdGVkX2F0ICogMTAwMCkgLy8gYWRkIG1pbGxpc2Vjb25kIHRvIFVuaXggdGltZXN0YW1wXG4gICAgICB9XG4gICAgfSBhcyBWYWxpZGF0aW9uUmVzdWx0O1xuICB9XG5cbiAgbGlzdChxdWVyeT86IExpc3RzUXVlcnkpOiBQcm9taXNlPE1haWxpbmdMaXN0W10+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldChgJHt0aGlzLmJhc2VSb3V0ZX0vcGFnZXNgLCBxdWVyeSlcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keS5pdGVtcyBhcyBNYWlsaW5nTGlzdFtdKTtcbiAgfVxuXG4gIGdldChtYWlsTGlzdEFkZHJlc3M6IHN0cmluZyk6IFByb21pc2U8TWFpbGluZ0xpc3Q+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldChgJHt0aGlzLmJhc2VSb3V0ZX0vJHttYWlsTGlzdEFkZHJlc3N9YClcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keS5saXN0IGFzIE1haWxpbmdMaXN0KTtcbiAgfVxuXG4gIGNyZWF0ZShkYXRhOiBDcmVhdGVVcGRhdGVMaXN0KTogUHJvbWlzZTxNYWlsaW5nTGlzdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRCh0aGlzLmJhc2VSb3V0ZSwgZGF0YSlcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keS5saXN0IGFzIE1haWxpbmdMaXN0KTtcbiAgfVxuXG4gIHVwZGF0ZShtYWlsTGlzdEFkZHJlc3M6IHN0cmluZywgZGF0YTogQ3JlYXRlVXBkYXRlTGlzdCk6IFByb21pc2U8TWFpbGluZ0xpc3Q+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnB1dFdpdGhGRChgJHt0aGlzLmJhc2VSb3V0ZX0vJHttYWlsTGlzdEFkZHJlc3N9YCwgZGF0YSlcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keS5saXN0IGFzIE1haWxpbmdMaXN0KTtcbiAgfVxuXG4gIGRlc3Ryb3kobWFpbExpc3RBZGRyZXNzOiBzdHJpbmcpOiBQcm9taXNlPERlc3Ryb3llZExpc3Q+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZShgJHt0aGlzLmJhc2VSb3V0ZX0vJHttYWlsTGlzdEFkZHJlc3N9YClcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keSBhcyBEZXN0cm95ZWRMaXN0KTtcbiAgfVxuXG4gIHZhbGlkYXRlKG1haWxMaXN0QWRkcmVzczogc3RyaW5nKTogUHJvbWlzZTxTdGFydFZhbGlkYXRpb25SZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnBvc3QoYCR7dGhpcy5iYXNlUm91dGV9LyR7bWFpbExpc3RBZGRyZXNzfS92YWxpZGF0ZWAsIHt9KVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiAoe1xuICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgLi4ucmVzcG9uc2UuYm9keVxuICAgICAgfSkgYXMgU3RhcnRWYWxpZGF0aW9uUmVzdWx0KTtcbiAgfVxuXG4gIHZhbGlkYXRpb25SZXN1bHQobWFpbExpc3RBZGRyZXNzOiBzdHJpbmcpOiBQcm9taXNlPFZhbGlkYXRpb25SZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldChgJHt0aGlzLmJhc2VSb3V0ZX0vJHttYWlsTGlzdEFkZHJlc3N9L3ZhbGlkYXRlYClcbiAgICAgIC50aGVuKFxuICAgICAgICAocmVzcG9uc2UpID0+IHRoaXMucGFyc2VWYWxpZGF0aW9uUmVzdWx0KFxuICAgICAgICAgIHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgICAgcmVzcG9uc2UuYm9keSBhcyBWYWxpZGF0aW9uQXBpUmVzcG9uc2VcbiAgICAgICAgKVxuICAgICAgKTtcbiAgfVxuXG4gIGNhbmNlbFZhbGlkYXRpb24obWFpbExpc3RBZGRyZXNzOiBzdHJpbmcpOiBQcm9taXNlPENhbmNlbFZhbGlkYXRpb25SZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZShgJHt0aGlzLmJhc2VSb3V0ZX0vJHttYWlsTGlzdEFkZHJlc3N9L3ZhbGlkYXRlYClcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gKHtcbiAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgIG1lc3NhZ2U6IHJlc3BvbnNlLmJvZHkubWVzc2FnZVxuICAgICAgfSBhcyBDYW5jZWxWYWxpZGF0aW9uUmVzdWx0KSk7XG4gIH1cbn1cbiIsImltcG9ydCBSZXF1ZXN0IGZyb20gJy4vcmVxdWVzdCc7XG5pbXBvcnQge1xuICBNYWlsTGlzdE1lbWJlcnNRdWVyeSxcbiAgSU1haWxMaXN0c01lbWJlcnMsXG4gIENyZWF0ZVVwZGF0ZU1haWxMaXN0TWVtYmVycyxcbiAgTWFpbExpc3RNZW1iZXIsXG4gIE11bHRpcGxlTWVtYmVyc0RhdGEsXG4gIE11bHRpcGxlTWVtYmVyc1JlcURhdGEsXG4gIERlbGV0ZWRNZW1iZXIsXG4gIENyZWF0ZVVwZGF0ZU1haWxMaXN0TWVtYmVyc1JlcSxcbiAgTmV3TXVsdGlwbGVNZW1iZXJzUmVzcG9uc2Vcbn0gZnJvbSAnLi9pbnRlcmZhY2VzL21haWxMaXN0TWVtYmVycyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1haWxMaXN0c01lbWJlcnMgaW1wbGVtZW50cyBJTWFpbExpc3RzTWVtYmVycyB7XG4gIGJhc2VSb3V0ZTogc3RyaW5nO1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMuYmFzZVJvdXRlID0gJy92My9saXN0cyc7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrQW5kVXBkYXRlRGF0YShkYXRhOiBDcmVhdGVVcGRhdGVNYWlsTGlzdE1lbWJlcnMpIHtcbiAgICBjb25zdCBuZXdEYXRhID0geyAuLi5kYXRhIH07XG5cbiAgICBpZiAodHlwZW9mIGRhdGEudmFycyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIG5ld0RhdGEudmFycyA9IEpTT04uc3RyaW5naWZ5KG5ld0RhdGEudmFycyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBkYXRhLnN1YnNjcmliZWQgPT09ICdib29sZWFuJykge1xuICAgICAgbmV3RGF0YS5zdWJzY3JpYmVkID0gZGF0YS5zdWJzY3JpYmVkID8gJ3llcycgOiAnbm8nO1xuICAgIH1cblxuICAgIHJldHVybiBuZXdEYXRhIGFzIENyZWF0ZVVwZGF0ZU1haWxMaXN0TWVtYmVyc1JlcTtcbiAgfVxuXG4gIGxpc3RNZW1iZXJzKG1haWxMaXN0QWRkcmVzczogc3RyaW5nLCBxdWVyeT86IE1haWxMaXN0TWVtYmVyc1F1ZXJ5KTogUHJvbWlzZTxNYWlsTGlzdE1lbWJlcltdPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQoYCR7dGhpcy5iYXNlUm91dGV9LyR7bWFpbExpc3RBZGRyZXNzfS9tZW1iZXJzL3BhZ2VzYCwgcXVlcnkpXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkuaXRlbXMgYXMgTWFpbExpc3RNZW1iZXJbXSk7XG4gIH1cblxuICBnZXRNZW1iZXIobWFpbExpc3RBZGRyZXNzOiBzdHJpbmcsIG1haWxMaXN0TWVtYmVyQWRkcmVzczogc3RyaW5nKTogUHJvbWlzZTxNYWlsTGlzdE1lbWJlcj4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc30vbWVtYmVycy8ke21haWxMaXN0TWVtYmVyQWRkcmVzc31gKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5Lm1lbWJlciBhcyBNYWlsTGlzdE1lbWJlcik7XG4gIH1cblxuICBjcmVhdGVNZW1iZXIoXG4gICAgbWFpbExpc3RBZGRyZXNzOiBzdHJpbmcsXG4gICAgZGF0YTogQ3JlYXRlVXBkYXRlTWFpbExpc3RNZW1iZXJzXG4gICk6IFByb21pc2U8TWFpbExpc3RNZW1iZXI+IHtcbiAgICBjb25zdCByZXFEYXRhID0gdGhpcy5jaGVja0FuZFVwZGF0ZURhdGEoZGF0YSk7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc30vbWVtYmVyc2AsIHJlcURhdGEpXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkubWVtYmVyIGFzIE1haWxMaXN0TWVtYmVyKTtcbiAgfVxuXG4gIGNyZWF0ZU1lbWJlcnMoXG4gICAgbWFpbExpc3RBZGRyZXNzOiBzdHJpbmcsXG4gICAgZGF0YTogTXVsdGlwbGVNZW1iZXJzRGF0YVxuICApOiBQcm9taXNlPE5ld011bHRpcGxlTWVtYmVyc1Jlc3BvbnNlPiB7XG4gICAgY29uc3QgbmV3RGF0YTogTXVsdGlwbGVNZW1iZXJzUmVxRGF0YSA9IHtcbiAgICAgIG1lbWJlcnM6IEFycmF5LmlzQXJyYXkoZGF0YS5tZW1iZXJzKSA/IEpTT04uc3RyaW5naWZ5KGRhdGEubWVtYmVycykgOiBkYXRhLm1lbWJlcnMsXG4gICAgICB1cHNlcnQ6IGRhdGEudXBzZXJ0XG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRChgJHt0aGlzLmJhc2VSb3V0ZX0vJHttYWlsTGlzdEFkZHJlc3N9L21lbWJlcnMuanNvbmAsIG5ld0RhdGEpXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkgYXMgTmV3TXVsdGlwbGVNZW1iZXJzUmVzcG9uc2UpO1xuICB9XG5cbiAgdXBkYXRlTWVtYmVyKFxuICAgIG1haWxMaXN0QWRkcmVzczogc3RyaW5nLFxuICAgIG1haWxMaXN0TWVtYmVyQWRkcmVzczogc3RyaW5nLFxuICAgIGRhdGE6IENyZWF0ZVVwZGF0ZU1haWxMaXN0TWVtYmVyc1xuICApOiBQcm9taXNlPE1haWxMaXN0TWVtYmVyPiB7XG4gICAgY29uc3QgcmVxRGF0YSA9IHRoaXMuY2hlY2tBbmRVcGRhdGVEYXRhKGRhdGEpO1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0V2l0aEZEKGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc30vbWVtYmVycy8ke21haWxMaXN0TWVtYmVyQWRkcmVzc31gLCByZXFEYXRhKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5Lm1lbWJlciBhcyBNYWlsTGlzdE1lbWJlcik7XG4gIH1cblxuICBkZXN0cm95TWVtYmVyKG1haWxMaXN0QWRkcmVzczogc3RyaW5nLCBtYWlsTGlzdE1lbWJlckFkZHJlc3M6IHN0cmluZykgOiBQcm9taXNlPERlbGV0ZWRNZW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZShgJHt0aGlzLmJhc2VSb3V0ZX0vJHttYWlsTGlzdEFkZHJlc3N9L21lbWJlcnMvJHttYWlsTGlzdE1lbWJlckFkZHJlc3N9YClcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keSBhcyBEZWxldGVkTWVtYmVyKTtcbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgTWFpbGd1bk1lc3NhZ2VEYXRhLFxuICBNZXNzYWdlc1NlbmRBUElSZXNwb25zZSxcbiAgTWVzc2FnZXNTZW5kUmVzdWx0XG59IGZyb20gJy4vaW50ZXJmYWNlcy9NZXNzYWdlcyc7XG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuL3JlcXVlc3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXNzYWdlc0NsaWVudCB7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCkge1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gIH1cblxuICBfcGFyc2VSZXNwb25zZShyZXNwb25zZTogTWVzc2FnZXNTZW5kQVBJUmVzcG9uc2UpOiBNZXNzYWdlc1NlbmRSZXN1bHQge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIC4uLnJlc3BvbnNlLmJvZHlcbiAgICB9O1xuICB9XG5cbiAgY3JlYXRlKGRvbWFpbjogc3RyaW5nLCBkYXRhOiBNYWlsZ3VuTWVzc2FnZURhdGEpOiBQcm9taXNlPE1lc3NhZ2VzU2VuZFJlc3VsdD4ge1xuICAgIGlmIChkYXRhLm1lc3NhZ2UpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRChgL3YzLyR7ZG9tYWlufS9tZXNzYWdlcy5taW1lYCwgZGF0YSlcbiAgICAgICAgLnRoZW4odGhpcy5fcGFyc2VSZXNwb25zZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKGAvdjMvJHtkb21haW59L21lc3NhZ2VzYCwgZGF0YSlcbiAgICAgIC50aGVuKHRoaXMuX3BhcnNlUmVzcG9uc2UpO1xuICB9XG59XG4iLCJpbXBvcnQge1xuICBDYW5jZWxlZE11bHRpcGxlVmFsaWRhdGlvbkpvYixcbiAgQ3JlYXRlZE11bHRpcGxlVmFsaWRhdGlvbkpvYixcbiAgSU11bHRpcGxlVmFsaWRhdGlvbkNsaWVudCxcbiAgTXVsdGlwbGVWYWxpZGF0aW9uSm9iLFxuICBNdWx0aXBsZVZhbGlkYXRpb25Kb2JzTGlzdFJlc3VsdFxufVxuICBmcm9tICcuL2ludGVyZmFjZXMvTXVsdGlwbGVWYWxpZGF0aW9uJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vcmVxdWVzdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE11bHRpcGxlVmFsaWRhdGlvbkNsaWVudCBpbXBsZW1lbnRzIElNdWx0aXBsZVZhbGlkYXRpb25DbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICB9XG5cbiAgbGlzdCgpOiBQcm9taXNlPE11bHRpcGxlVmFsaWRhdGlvbkpvYnNMaXN0UmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQoJy92NC9hZGRyZXNzL3ZhbGlkYXRlL2J1bGsnKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5IGFzIE11bHRpcGxlVmFsaWRhdGlvbkpvYnNMaXN0UmVzdWx0KTtcbiAgfVxuXG4gIGdldChsaXN0SWQ6IHN0cmluZyk6IFByb21pc2U8TXVsdGlwbGVWYWxpZGF0aW9uSm9iPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQoYC92NC9hZGRyZXNzL3ZhbGlkYXRlL2J1bGsvJHtsaXN0SWR9YClcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keSk7XG4gIH1cblxuICBjcmVhdGUobGlzdElkOiBzdHJpbmcsIGZpbGU6IGFueSk6IFByb21pc2U8Q3JlYXRlZE11bHRpcGxlVmFsaWRhdGlvbkpvYj4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRChgL3Y0L2FkZHJlc3MvdmFsaWRhdGUvYnVsay8ke2xpc3RJZH1gLCBmaWxlKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5KTtcbiAgfVxuXG4gIGRlc3Ryb3kobGlzdElkOiBzdHJpbmcpOiBQcm9taXNlPENhbmNlbGVkTXVsdGlwbGVWYWxpZGF0aW9uSm9iPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5kZWxldGUoYC92NC9hZGRyZXNzL3ZhbGlkYXRlL2J1bGsvJHtsaXN0SWR9YClcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UpO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBOb2RlRm9ybURhdGEgZnJvbSAnZm9ybS1kYXRhJztcbmltcG9ydCAqIGFzIGJhc2U2NCBmcm9tICdiYXNlLTY0JztcbmltcG9ydCB1cmxqb2luIGZyb20gJ3VybC1qb2luJztcbmltcG9ydCBreSBmcm9tICdreS11bml2ZXJzYWwnO1xuaW1wb3J0IEFQSUVycm9yIGZyb20gJy4vZXJyb3InO1xuaW1wb3J0IFJlcXVlc3RPcHRpb25zIGZyb20gJy4vaW50ZXJmYWNlcy9SZXF1ZXN0T3B0aW9ucyc7XG5pbXBvcnQgQVBJRXJyb3JPcHRpb25zIGZyb20gJy4vaW50ZXJmYWNlcy9BUElFcnJvck9wdGlvbnMnO1xuaW1wb3J0IHsgSW5wdXRGb3JtRGF0YSB9IGZyb20gJy4vaW50ZXJmYWNlcy9JRm9ybURhdGEnO1xuaW1wb3J0IEFQSVJlc3BvbnNlIGZyb20gJy4vaW50ZXJmYWNlcy9BcGlSZXNwb25zZSc7XG5cbmNvbnN0IGlzU3RyZWFtID0gKGRhdGE6IGFueSkgPT4gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmIHR5cGVvZiBkYXRhLnBpcGUgPT09ICdmdW5jdGlvbic7XG5cbmZ1bmN0aW9uIGlzTm9kZUZvcm1EYXRhKGZvcm1EYXRhSW5zdGFuY2U6IE5vZGVGb3JtRGF0YSB8IEZvcm1EYXRhKVxuICA6IGZvcm1EYXRhSW5zdGFuY2UgaXMgTm9kZUZvcm1EYXRhIHtcbiAgcmV0dXJuICg8Tm9kZUZvcm1EYXRhPmZvcm1EYXRhSW5zdGFuY2UpLmdldEhlYWRlcnMgIT09IHVuZGVmaW5lZDtcbn1cblxuY29uc3QgZ2V0QXR0YWNobWVudE9wdGlvbnMgPSAoaXRlbTogYW55KToge1xuICBmaWxlbmFtZT86IHN0cmluZyxcbiAgY29udGVudFR5cGU/OiBzdHJpbmcsXG4gIGtub3duTGVuZ3RoPzogbnVtYmVyXG59ID0+IHtcbiAgaWYgKHR5cGVvZiBpdGVtICE9PSAnb2JqZWN0JyB8fCBpc1N0cmVhbShpdGVtKSkgcmV0dXJuIHt9O1xuXG4gIGNvbnN0IHtcbiAgICBmaWxlbmFtZSxcbiAgICBjb250ZW50VHlwZSxcbiAgICBrbm93bkxlbmd0aFxuICB9ID0gaXRlbTtcblxuICByZXR1cm4ge1xuICAgIC4uLihmaWxlbmFtZSA/IHsgZmlsZW5hbWUgfSA6IHsgZmlsZW5hbWU6ICdmaWxlJyB9KSxcbiAgICAuLi4oY29udGVudFR5cGUgJiYgeyBjb250ZW50VHlwZSB9KSxcbiAgICAuLi4oa25vd25MZW5ndGggJiYgeyBrbm93bkxlbmd0aCB9KVxuICB9O1xufTtcblxuY29uc3Qgc3RyZWFtVG9TdHJpbmcgPSAoc3RyZWFtOiBhbnkpID0+IHtcbiAgY29uc3QgY2h1bmtzOiBhbnkgPSBbXTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBzdHJlYW0ub24oJ2RhdGEnLCAoY2h1bms6IGFueSkgPT4gY2h1bmtzLnB1c2goY2h1bmspKTtcbiAgICBzdHJlYW0ub24oJ2Vycm9yJywgcmVqZWN0KTtcbiAgICBzdHJlYW0ub24oJ2VuZCcsICgpID0+IHJlc29sdmUoQnVmZmVyLmNvbmNhdChjaHVua3MpLnRvU3RyaW5nKCd1dGY4JykpKTtcbiAgfSk7XG59O1xuXG5jbGFzcyBSZXF1ZXN0IHtcbiAgcHJpdmF0ZSB1c2VybmFtZTogc3RyaW5nO1xuICBwcml2YXRlIGtleTogc3RyaW5nO1xuICBwcml2YXRlIHVybDogc3RyaW5nO1xuICBwcml2YXRlIHRpbWVvdXQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBoZWFkZXJzOiBhbnk7XG4gIHByaXZhdGUgRm9ybURhdGFDb25zdHJ1Y3RvcjogSW5wdXRGb3JtRGF0YTtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBSZXF1ZXN0T3B0aW9ucywgZm9ybURhdGE6IElucHV0Rm9ybURhdGEpIHtcbiAgICB0aGlzLnVzZXJuYW1lID0gb3B0aW9ucy51c2VybmFtZTtcbiAgICB0aGlzLmtleSA9IG9wdGlvbnMua2V5O1xuICAgIHRoaXMudXJsID0gb3B0aW9ucy51cmwgYXMgc3RyaW5nO1xuICAgIHRoaXMudGltZW91dCA9IG9wdGlvbnMudGltZW91dDtcbiAgICB0aGlzLmhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnMgfHwge307XG4gICAgdGhpcy5Gb3JtRGF0YUNvbnN0cnVjdG9yID0gZm9ybURhdGE7XG4gIH1cblxuICBhc3luYyByZXF1ZXN0KG1ldGhvZDogc3RyaW5nLCB1cmw6IHN0cmluZywgaW5wdXRPcHRpb25zPzogYW55KTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7IC4uLmlucHV0T3B0aW9ucyB9O1xuICAgIGNvbnN0IGJhc2ljID0gYmFzZTY0LmVuY29kZShgJHt0aGlzLnVzZXJuYW1lfToke3RoaXMua2V5fWApO1xuICAgIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgICBBdXRob3JpemF0aW9uOiBgQmFzaWMgJHtiYXNpY31gLFxuICAgICAgLi4udGhpcy5oZWFkZXJzLFxuICAgICAgLi4ub3B0aW9ucz8uaGVhZGVyc1xuICAgIH07XG5cbiAgICBkZWxldGUgb3B0aW9ucz8uaGVhZGVycztcblxuICAgIGlmICghaGVhZGVyc1snQ29udGVudC1UeXBlJ10pIHtcbiAgICAgIC8vIGZvciBmb3JtLWRhdGEgaXQgd2lsbCBiZSBOdWxsIHNvIHdlIG5lZWQgdG8gcmVtb3ZlIGl0XG4gICAgICBkZWxldGUgaGVhZGVyc1snQ29udGVudC1UeXBlJ107XG4gICAgfVxuXG4gICAgY29uc3QgcGFyYW1zID0geyAuLi5vcHRpb25zIH07XG5cbiAgICBpZiAob3B0aW9ucz8ucXVlcnkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob3B0aW9ucz8ucXVlcnkpLmxlbmd0aCA+IDApIHtcbiAgICAgIHBhcmFtcy5zZWFyY2hQYXJhbXMgPSBvcHRpb25zLnF1ZXJ5O1xuICAgICAgZGVsZXRlIHBhcmFtcy5xdWVyeTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGt5KFxuICAgICAgdXJsam9pbih0aGlzLnVybCwgdXJsKSxcbiAgICAgIHtcbiAgICAgICAgbWV0aG9kOiBtZXRob2QudG9Mb2NhbGVVcHBlckNhc2UoKSxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgdGhyb3dIdHRwRXJyb3JzOiBmYWxzZSxcbiAgICAgICAgdGltZW91dDogdGhpcy50aW1lb3V0LFxuICAgICAgICAuLi5wYXJhbXNcbiAgICAgIH1cbiAgICApO1xuXG4gICAgaWYgKCFyZXNwb25zZT8ub2spIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSByZXNwb25zZT8uYm9keSAmJiBpc1N0cmVhbShyZXNwb25zZS5ib2R5KVxuICAgICAgICA/IGF3YWl0IHN0cmVhbVRvU3RyaW5nKHJlc3BvbnNlLmJvZHkpXG4gICAgICAgIDogYXdhaXQgcmVzcG9uc2U/Lmpzb24oKTtcblxuICAgICAgdGhyb3cgbmV3IEFQSUVycm9yKHtcbiAgICAgICAgc3RhdHVzOiByZXNwb25zZT8uc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXNwb25zZT8uc3RhdHVzVGV4dCxcbiAgICAgICAgYm9keTogeyBtZXNzYWdlIH1cbiAgICAgIH0gYXMgQVBJRXJyb3JPcHRpb25zKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmdldFJlc3BvbnNlQm9keShyZXNwb25zZSk7XG4gICAgcmV0dXJuIHJlcyBhcyBBUElSZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0UmVzcG9uc2VCb2R5KHJlc3BvbnNlOiBhbnkpOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgY29uc3QgcmVzID0ge1xuICAgICAgYm9keToge30sXG4gICAgICBzdGF0dXM6IHJlc3BvbnNlPy5zdGF0dXNcbiAgICB9IGFzIEFQSVJlc3BvbnNlO1xuICAgIGxldCByZXNwb25zZVN0cmluZyA9ICcnO1xuICAgIHRyeSB7XG4gICAgICByZXNwb25zZVN0cmluZyA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICAgIGNvbnN0IGpzb25Cb2R5ID0gSlNPTi5wYXJzZShyZXNwb25zZVN0cmluZyk7XG4gICAgICByZXMuYm9keSA9IGpzb25Cb2R5O1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgcmVzLnN0YXR1cyA9IDQwMDtcbiAgICAgIHJlcy5ib2R5ID0ge1xuICAgICAgICBtZXNzYWdlOiByZXNwb25zZVN0cmluZyxcbiAgICAgIH07XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgfVxuXG4gIHF1ZXJ5KG1ldGhvZDogc3RyaW5nLCB1cmw6IHN0cmluZywgcXVlcnk6IGFueSwgb3B0aW9ucz86IGFueSkgOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdChtZXRob2QsIHVybCwgeyBxdWVyeSwgLi4ub3B0aW9ucyB9KTtcbiAgfVxuXG4gIGNvbW1hbmQobWV0aG9kOiBzdHJpbmcsIHVybDogc3RyaW5nLCBkYXRhOiBhbnksIG9wdGlvbnM/OiBhbnkpIDogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QobWV0aG9kLCB1cmwsIHtcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnIH0sXG4gICAgICBib2R5OiBkYXRhLFxuICAgICAgLi4ub3B0aW9uc1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0KHVybDogc3RyaW5nLCBxdWVyeT86IGFueSwgb3B0aW9ucz86IGFueSkgOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnkoJ2dldCcsIHVybCwgcXVlcnksIG9wdGlvbnMpO1xuICB9XG5cbiAgaGVhZCh1cmw6IHN0cmluZywgcXVlcnk6IGFueSwgb3B0aW9uczogYW55KSA6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeSgnaGVhZCcsIHVybCwgcXVlcnksIG9wdGlvbnMpO1xuICB9XG5cbiAgb3B0aW9ucyh1cmw6IHN0cmluZywgcXVlcnk6IGFueSwgb3B0aW9uczogYW55KSA6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeSgnb3B0aW9ucycsIHVybCwgcXVlcnksIG9wdGlvbnMpO1xuICB9XG5cbiAgcG9zdCh1cmw6IHN0cmluZywgZGF0YTogYW55LCBvcHRpb25zPzogYW55KSA6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5jb21tYW5kKCdwb3N0JywgdXJsLCBkYXRhLCBvcHRpb25zKTtcbiAgfVxuXG4gIHBvc3RXaXRoRkQodXJsOiBzdHJpbmcsIGRhdGE6IGFueSk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGxlYXNlIHByb3ZpZGUgZGF0YSBvYmplY3QnKTtcbiAgICB9XG4gICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7XG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiBudWxsIH1cbiAgICB9O1xuICAgIGNvbnN0IGZvcm1EYXRhID0gdGhpcy5jcmVhdGVGb3JtRGF0YShkYXRhKTtcbiAgICByZXR1cm4gdGhpcy5jb21tYW5kKCdwb3N0JywgdXJsLCBmb3JtRGF0YSwgcGFyYW1zKTtcbiAgfVxuXG4gIHB1dFdpdGhGRCh1cmw6IHN0cmluZywgZGF0YTogYW55KTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIGlmICghZGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQbGVhc2UgcHJvdmlkZSBkYXRhIG9iamVjdCcpO1xuICAgIH1cbiAgICBjb25zdCBwYXJhbXM6IGFueSA9IHtcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6IG51bGwgfVxuICAgIH07XG4gICAgY29uc3QgZm9ybURhdGEgPSB0aGlzLmNyZWF0ZUZvcm1EYXRhKGRhdGEpO1xuICAgIHJldHVybiB0aGlzLmNvbW1hbmQoJ3B1dCcsIHVybCwgZm9ybURhdGEsIHBhcmFtcyk7XG4gIH1cblxuICBwYXRjaFdpdGhGRCh1cmw6IHN0cmluZywgZGF0YTogYW55KTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIGlmICghZGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQbGVhc2UgcHJvdmlkZSBkYXRhIG9iamVjdCcpO1xuICAgIH1cbiAgICBjb25zdCBwYXJhbXM6IGFueSA9IHtcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6IG51bGwgfVxuICAgIH07XG4gICAgY29uc3QgZm9ybURhdGEgPSB0aGlzLmNyZWF0ZUZvcm1EYXRhKGRhdGEpO1xuICAgIHJldHVybiB0aGlzLmNvbW1hbmQoJ3BhdGNoJywgdXJsLCBmb3JtRGF0YSwgcGFyYW1zKTtcbiAgfVxuXG4gIGNyZWF0ZUZvcm1EYXRhKGRhdGE6IGFueSk6IE5vZGVGb3JtRGF0YSB8IEZvcm1EYXRhIHtcbiAgICBjb25zdCBmb3JtRGF0YTogTm9kZUZvcm1EYXRhIHwgRm9ybURhdGEgPSBPYmplY3Qua2V5cyhkYXRhKVxuICAgICAgLmZpbHRlcihmdW5jdGlvbiAoa2V5KSB7IHJldHVybiBkYXRhW2tleV07IH0pXG4gICAgICAucmVkdWNlKChmb3JtRGF0YUFjYzogTm9kZUZvcm1EYXRhIHwgRm9ybURhdGEsIGtleSkgPT4ge1xuICAgICAgICBjb25zdCBmaWxlS2V5cyA9IFsnYXR0YWNobWVudCcsICdpbmxpbmUnLCAnZmlsZSddO1xuICAgICAgICBpZiAoZmlsZUtleXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgIHRoaXMuYWRkRmlsZXNUb0ZEKGtleSwgZGF0YVtrZXldLCBmb3JtRGF0YUFjYyk7XG4gICAgICAgICAgcmV0dXJuIGZvcm1EYXRhQWNjO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGtleSA9PT0gJ21lc3NhZ2UnKSB7IC8vIG1pbWUgbWVzc2FnZVxuICAgICAgICAgIHRoaXMuYWRkTWltZURhdGFUb0ZEKGtleSwgZGF0YVtrZXldLCBmb3JtRGF0YUFjYyk7XG4gICAgICAgICAgcmV0dXJuIGZvcm1EYXRhQWNjO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hZGRDb21tb25Qcm9wZXJ0eVRvRkQoa2V5LCBkYXRhW2tleV0sIGZvcm1EYXRhQWNjKTtcbiAgICAgICAgcmV0dXJuIGZvcm1EYXRhQWNjO1xuICAgICAgfSwgbmV3IHRoaXMuRm9ybURhdGFDb25zdHJ1Y3RvcigpKTtcbiAgICByZXR1cm4gZm9ybURhdGE7XG4gIH1cblxuICBwcml2YXRlIGFkZE1pbWVEYXRhVG9GRChcbiAgICBrZXk6IHN0cmluZyxcbiAgICBkYXRhOiBCdWZmZXIgfCBCbG9iLFxuICAgIGZvcm1EYXRhSW5zdGFuY2U6IE5vZGVGb3JtRGF0YSB8IEZvcm1EYXRhXG4gICk6IHZvaWQge1xuICAgIGlmIChpc05vZGVGb3JtRGF0YShmb3JtRGF0YUluc3RhbmNlKSkge1xuICAgICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihkYXRhKSkge1xuICAgICAgICBmb3JtRGF0YUluc3RhbmNlLmFwcGVuZChrZXksIGRhdGEsIHsgZmlsZW5hbWU6ICdNaW1lTWVzc2FnZScgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvcm1EYXRhSW5zdGFuY2UuYXBwZW5kKGtleSwgZGF0YSBhcyBCbG9iLCAnTWltZU1lc3NhZ2UnKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkZEZpbGVzVG9GRChcbiAgICBwcm9wZXJ0eU5hbWU6IHN0cmluZyxcbiAgICB2YWx1ZTogYW55LFxuICAgIGZvcm1EYXRhSW5zdGFuY2U6IE5vZGVGb3JtRGF0YSB8IEZvcm1EYXRhXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGFwcGVuZEZpbGVUb0ZEID0gKFxuICAgICAga2V5OiBzdHJpbmcsXG4gICAgICBvYmo6IGFueSxcbiAgICAgIGZvcm1EYXRhOiBOb2RlRm9ybURhdGEgfCBGb3JtRGF0YVxuICAgICk6IHZvaWQgPT4ge1xuICAgICAgY29uc3QgaXNTdHJlYW1EYXRhID0gaXNTdHJlYW0ob2JqKTtcbiAgICAgIGNvbnN0IG9iakRhdGEgPSBpc1N0cmVhbURhdGEgPyBvYmogOiBvYmouZGF0YTtcbiAgICAgIC8vIGdldEF0dGFjaG1lbnRPcHRpb25zIHNob3VsZCBiZSBjYWxsZWQgd2l0aCBvYmogcGFyYW1ldGVyIHRvIHByZXZlbnQgbG9vc2luZyBmaWxlbmFtZVxuICAgICAgY29uc3Qgb3B0aW9ucyA9IGdldEF0dGFjaG1lbnRPcHRpb25zKG9iaik7XG4gICAgICBpZiAoaXNOb2RlRm9ybURhdGEoZm9ybURhdGEpKSB7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZChrZXksIG9iakRhdGEsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBmb3JtRGF0YS5hcHBlbmQoa2V5LCBvYmpEYXRhLCBvcHRpb25zLmZpbGVuYW1lKTtcbiAgICB9O1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIGFwcGVuZEZpbGVUb0ZEKHByb3BlcnR5TmFtZSwgaXRlbSwgZm9ybURhdGFJbnN0YW5jZSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBwZW5kRmlsZVRvRkQocHJvcGVydHlOYW1lLCB2YWx1ZSwgZm9ybURhdGFJbnN0YW5jZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRDb21tb25Qcm9wZXJ0eVRvRkQoXG4gICAga2V5OiBzdHJpbmcsXG4gICAgdmFsdWU6IGFueSxcbiAgICBmb3JtRGF0YUFjYzogTm9kZUZvcm1EYXRhIHwgRm9ybURhdGFcbiAgKTogdm9pZCB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtOiBhbnkpIHtcbiAgICAgICAgZm9ybURhdGFBY2MuYXBwZW5kKGtleSwgaXRlbSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgIGZvcm1EYXRhQWNjLmFwcGVuZChrZXksIHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwdXQodXJsOiBzdHJpbmcsIGRhdGE6IGFueSwgb3B0aW9ucz86IGFueSk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5jb21tYW5kKCdwdXQnLCB1cmwsIGRhdGEsIG9wdGlvbnMpO1xuICB9XG5cbiAgcGF0Y2godXJsOiBzdHJpbmcsIGRhdGE6IGFueSwgb3B0aW9ucz86IGFueSk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5jb21tYW5kKCdwYXRjaCcsIHVybCwgZGF0YSwgb3B0aW9ucyk7XG4gIH1cblxuICBkZWxldGUodXJsOiBzdHJpbmcsIGRhdGE/OiBhbnksIG9wdGlvbnM/OiBhbnkpOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuY29tbWFuZCgnZGVsZXRlJywgdXJsLCBkYXRhLCBvcHRpb25zKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBSZXF1ZXN0O1xuIiwiaW1wb3J0IHtcbiAgQ3JlYXRlVXBkYXRlUm91dGVEYXRhLCBEZXN0cm95Um91dGVSZXNwb25zZSwgUm91dGUsIFJvdXRlc0xpc3RRdWVyeSwgVXBkYXRlUm91dGVSZXNwb25zZVxufSBmcm9tICcuL2ludGVyZmFjZXMvcm91dGVzJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vcmVxdWVzdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJvdXRlc0NsaWVudCB7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCkge1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gIH1cblxuICBsaXN0KHF1ZXJ5OiBSb3V0ZXNMaXN0UXVlcnkpOiBQcm9taXNlPFJvdXRlW10+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCgnL3YzL3JvdXRlcycsIHF1ZXJ5KVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5Lml0ZW1zKTtcbiAgfVxuXG4gIGdldChpZDogc3RyaW5nKTogUHJvbWlzZTxSb3V0ZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KGAvdjMvcm91dGVzLyR7aWR9YClcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keS5yb3V0ZSk7XG4gIH1cblxuICBjcmVhdGUoZGF0YTogQ3JlYXRlVXBkYXRlUm91dGVEYXRhKTogUHJvbWlzZTxSb3V0ZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRCgnL3YzL3JvdXRlcycsIGRhdGEpXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkucm91dGUpO1xuICB9XG5cbiAgdXBkYXRlKGlkOiBzdHJpbmcsIGRhdGE6IENyZWF0ZVVwZGF0ZVJvdXRlRGF0YSk6IFByb21pc2U8VXBkYXRlUm91dGVSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0V2l0aEZEKGAvdjMvcm91dGVzLyR7aWR9YCwgZGF0YSlcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keSk7XG4gIH1cblxuICBkZXN0cm95KGlkOiBzdHJpbmcpOiBQcm9taXNlPERlc3Ryb3lSb3V0ZVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5kZWxldGUoYC92My9yb3V0ZXMvJHtpZH1gKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5KTtcbiAgfVxufVxuIiwiaW1wb3J0IHVybGpvaW4gZnJvbSAndXJsLWpvaW4nO1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0JztcbmltcG9ydCB7IFN0YXRzUXVlcnksIFN0YXRzT3B0aW9ucywgU3RhdCB9IGZyb20gJy4vaW50ZXJmYWNlcy9TdGF0c09wdGlvbnMnO1xuXG5jbGFzcyBTdGF0cyB7XG4gIHN0YXJ0OiBEYXRlO1xuICBlbmQ6IERhdGU7XG4gIHJlc29sdXRpb246IHN0cmluZztcbiAgc3RhdHM6IFN0YXRbXTtcblxuICBjb25zdHJ1Y3RvcihkYXRhOiBTdGF0c09wdGlvbnMpIHtcbiAgICB0aGlzLnN0YXJ0ID0gbmV3IERhdGUoZGF0YS5zdGFydCk7XG4gICAgdGhpcy5lbmQgPSBuZXcgRGF0ZShkYXRhLmVuZCk7XG4gICAgdGhpcy5yZXNvbHV0aW9uID0gZGF0YS5yZXNvbHV0aW9uO1xuICAgIHRoaXMuc3RhdHMgPSBkYXRhLnN0YXRzLm1hcChmdW5jdGlvbiAoc3RhdDogU3RhdCkge1xuICAgICAgY29uc3QgcmVzID0geyAuLi5zdGF0IH07XG4gICAgICByZXMudGltZSA9IG5ldyBEYXRlKHN0YXQudGltZSk7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0YXRzQ2xpZW50IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0KSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgfVxuXG4gIHByaXZhdGUgcHJlcGFyZVNlYXJjaFBhcmFtcyhxdWVyeTogU3RhdHNRdWVyeSB8IHVuZGVmaW5lZCk6IEFycmF5PEFycmF5PHN0cmluZz4+IHtcbiAgICBsZXQgc2VhcmNoUGFyYW1zID0gW10gYXMgQXJyYXk8QXJyYXk8c3RyaW5nPj47XG4gICAgaWYgKHR5cGVvZiBxdWVyeSA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMocXVlcnkpLmxlbmd0aCkge1xuICAgICAgc2VhcmNoUGFyYW1zID0gT2JqZWN0LmVudHJpZXMocXVlcnkpLnJlZHVjZSgoYXJyYXlXaXRoUGFpcnMsIGN1cnJlbnRQYWlyKSA9PiB7XG4gICAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IGN1cnJlbnRQYWlyO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc3QgcmVwZWF0ZWRQcm9wZXJ0eSA9IHZhbHVlLm1hcCgoaXRlbSkgPT4gW2tleSwgaXRlbV0pO1xuICAgICAgICAgIHJldHVybiBbLi4uYXJyYXlXaXRoUGFpcnMsIC4uLnJlcGVhdGVkUHJvcGVydHldO1xuICAgICAgICB9XG4gICAgICAgIGFycmF5V2l0aFBhaXJzLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgICAgICAgcmV0dXJuIGFycmF5V2l0aFBhaXJzO1xuICAgICAgfSwgW10gYXMgQXJyYXk8QXJyYXk8c3RyaW5nPj4pO1xuICAgIH1cblxuICAgIHJldHVybiBzZWFyY2hQYXJhbXM7XG4gIH1cblxuICBfcGFyc2VTdGF0cyhyZXNwb25zZTogeyBib2R5OiBTdGF0c09wdGlvbnMgfSk6IFN0YXRzIHtcbiAgICByZXR1cm4gbmV3IFN0YXRzKHJlc3BvbnNlLmJvZHkpO1xuICB9XG5cbiAgZ2V0RG9tYWluKGRvbWFpbjogc3RyaW5nLCBxdWVyeT86IFN0YXRzUXVlcnkpOiBQcm9taXNlPFN0YXRzPiB7XG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gdGhpcy5wcmVwYXJlU2VhcmNoUGFyYW1zKHF1ZXJ5KTtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKCcvdjMnLCBkb21haW4sICdzdGF0cy90b3RhbCcpLCBzZWFyY2hQYXJhbXMpXG4gICAgICAudGhlbih0aGlzLl9wYXJzZVN0YXRzKTtcbiAgfVxuXG4gIGdldEFjY291bnQocXVlcnk/OiBTdGF0c1F1ZXJ5KTogUHJvbWlzZTxTdGF0cz4ge1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IHRoaXMucHJlcGFyZVNlYXJjaFBhcmFtcyhxdWVyeSk7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQoJy92My9zdGF0cy90b3RhbCcsIHNlYXJjaFBhcmFtcylcbiAgICAgIC50aGVuKHRoaXMuX3BhcnNlU3RhdHMpO1xuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cbmltcG9ydCB1cmxqb2luIGZyb20gJ3VybC1qb2luJztcblxuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0JztcbmltcG9ydCB7XG4gIEJvdW5jZURhdGEsXG4gIENvbXBsYWludERhdGEsXG4gIFBhZ2VzTGlzdCxcbiAgUGFnZXNMaXN0QWNjdW11bGF0b3IsXG4gIFBhcnNlZFBhZ2UsXG4gIFBhcnNlZFBhZ2VzTGlzdCxcbiAgU3VwcHJlc3Npb25DcmVhdGlvbkRhdGEsXG4gIFN1cHByZXNzaW9uQ3JlYXRpb25SZXNwb25zZSxcbiAgU3VwcHJlc3Npb25DcmVhdGlvblJlc3VsdCxcbiAgU3VwcHJlc3Npb25EZXN0cm95UmVzcG9uc2UsXG4gIFN1cHByZXNzaW9uRGVzdHJveVJlc3VsdCxcbiAgU3VwcHJlc3Npb25MaXN0LFxuICBTdXBwcmVzc2lvbkxpc3RRdWVyeSxcbiAgU3VwcHJlc3Npb25MaXN0UmVzcG9uc2UsXG4gIFN1cHByZXNzaW9uTW9kZWxzLFxuICBTdXBwcmVzc2lvblJlc3BvbnNlLFxuICBVbnN1YnNjcmliZURhdGEsXG4gIFdoaXRlTGlzdERhdGEsXG59IGZyb20gJy4vaW50ZXJmYWNlcy9TdXByZXNzaW9ucyc7XG5pbXBvcnQgQVBJRXJyb3IgZnJvbSAnLi9lcnJvcic7XG5pbXBvcnQgQVBJRXJyb3JPcHRpb25zIGZyb20gJy4vaW50ZXJmYWNlcy9BUElFcnJvck9wdGlvbnMnO1xuXG5jb25zdCBjcmVhdGVPcHRpb25zID0ge1xuICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfVxufTtcbmV4cG9ydCBjbGFzcyBTdXBwcmVzc2lvbiB7XG4gIHR5cGU6IHN0cmluZztcbiAgY29uc3RydWN0b3IodHlwZTogU3VwcHJlc3Npb25Nb2RlbHMpIHtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICB9XG59XG5leHBvcnQgY2xhc3MgQm91bmNlIGV4dGVuZHMgU3VwcHJlc3Npb24ge1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIGNvZGU6IG51bWJlcjtcbiAgZXJyb3I6IHN0cmluZztcbiAgY3JlYXRlZF9hdDogRGF0ZTtcblxuICBjb25zdHJ1Y3RvcihkYXRhOiBCb3VuY2VEYXRhKSB7XG4gICAgc3VwZXIoU3VwcHJlc3Npb25Nb2RlbHMuQk9VTkNFUyk7XG4gICAgdGhpcy5hZGRyZXNzID0gZGF0YS5hZGRyZXNzO1xuICAgIHRoaXMuY29kZSA9ICtkYXRhLmNvZGU7XG4gICAgdGhpcy5lcnJvciA9IGRhdGEuZXJyb3I7XG4gICAgdGhpcy5jcmVhdGVkX2F0ID0gbmV3IERhdGUoZGF0YS5jcmVhdGVkX2F0KTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29tcGxhaW50IGV4dGVuZHMgU3VwcHJlc3Npb24ge1xuICBhZGRyZXNzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGNyZWF0ZWRfYXQ6IERhdGU7XG5cbiAgY29uc3RydWN0b3IoZGF0YTogQ29tcGxhaW50RGF0YSkge1xuICAgIHN1cGVyKFN1cHByZXNzaW9uTW9kZWxzLkNPTVBMQUlOVFMpO1xuICAgIHRoaXMuYWRkcmVzcyA9IGRhdGEuYWRkcmVzcztcbiAgICB0aGlzLmNyZWF0ZWRfYXQgPSBuZXcgRGF0ZShkYXRhLmNyZWF0ZWRfYXQpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVbnN1YnNjcmliZSBleHRlbmRzIFN1cHByZXNzaW9uIHtcbiAgYWRkcmVzczogc3RyaW5nO1xuICB0YWdzOiBzdHJpbmdbXTtcbiAgY3JlYXRlZF9hdDogRGF0ZTtcblxuICBjb25zdHJ1Y3RvcihkYXRhOiBVbnN1YnNjcmliZURhdGEpIHtcbiAgICBzdXBlcihTdXBwcmVzc2lvbk1vZGVscy5VTlNVQlNDUklCRVMpO1xuICAgIHRoaXMuYWRkcmVzcyA9IGRhdGEuYWRkcmVzcztcbiAgICB0aGlzLnRhZ3MgPSBkYXRhLnRhZ3M7XG4gICAgdGhpcy5jcmVhdGVkX2F0ID0gbmV3IERhdGUoZGF0YS5jcmVhdGVkX2F0KTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgV2hpdGVMaXN0IGV4dGVuZHMgU3VwcHJlc3Npb24ge1xuICB2YWx1ZTogc3RyaW5nO1xuICByZWFzb246IHN0cmluZztcbiAgY3JlYXRlZEF0OiBEYXRlO1xuXG4gIGNvbnN0cnVjdG9yKGRhdGE6IFdoaXRlTGlzdERhdGEpIHtcbiAgICBzdXBlcihTdXBwcmVzc2lvbk1vZGVscy5XSElURUxJU1RTKTtcbiAgICB0aGlzLnZhbHVlID0gZGF0YS52YWx1ZTtcbiAgICB0aGlzLnJlYXNvbiA9IGRhdGEucmVhc29uO1xuICAgIHRoaXMuY3JlYXRlZEF0ID0gbmV3IERhdGUoZGF0YS5jcmVhdGVkQXQpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN1cHByZXNzaW9uQ2xpZW50IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcbiAgbW9kZWxzOiBNYXA8c3RyaW5nLCBhbnk+O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMubW9kZWxzID0gbmV3IE1hcCgpO1xuICAgIHRoaXMubW9kZWxzLnNldCgnYm91bmNlcycsIEJvdW5jZSk7XG4gICAgdGhpcy5tb2RlbHMuc2V0KCdjb21wbGFpbnRzJywgQ29tcGxhaW50KTtcbiAgICB0aGlzLm1vZGVscy5zZXQoJ3Vuc3Vic2NyaWJlcycsIFVuc3Vic2NyaWJlKTtcbiAgICB0aGlzLm1vZGVscy5zZXQoJ3doaXRlbGlzdHMnLCBXaGl0ZUxpc3QpO1xuICB9XG5cbiAgX3BhcnNlUGFnZShpZDogc3RyaW5nLCBwYWdlVXJsOiBzdHJpbmcpIDogUGFyc2VkUGFnZSB7XG4gICAgY29uc3QgcGFyc2VkVXJsID0gbmV3IFVSTChwYWdlVXJsKTtcbiAgICBjb25zdCB7IHNlYXJjaFBhcmFtcyB9ID0gcGFyc2VkVXJsO1xuICAgIHJldHVybiB7XG4gICAgICBpZCxcbiAgICAgIHBhZ2U6IHNlYXJjaFBhcmFtcy5oYXMoJ3BhZ2UnKSA/IHNlYXJjaFBhcmFtcy5nZXQoJ3BhZ2UnKSA6IHVuZGVmaW5lZCxcbiAgICAgIGFkZHJlc3M6IHNlYXJjaFBhcmFtcy5oYXMoJ2FkZHJlc3MnKSA/IHNlYXJjaFBhcmFtcy5nZXQoJ2FkZHJlc3MnKSA6IHVuZGVmaW5lZCxcbiAgICAgIHVybDogcGFnZVVybFxuICAgIH07XG4gIH1cblxuICBfcGFyc2VQYWdlTGlua3MocmVzcG9uc2U6IFN1cHByZXNzaW9uTGlzdFJlc3BvbnNlKTogUGFyc2VkUGFnZXNMaXN0IHtcbiAgICBjb25zdCBwYWdlcyA9IE9iamVjdC5lbnRyaWVzKHJlc3BvbnNlLmJvZHkucGFnaW5nIGFzIFBhZ2VzTGlzdCk7XG4gICAgcmV0dXJuIHBhZ2VzLnJlZHVjZShcbiAgICAgIChhY2M6IFBhZ2VzTGlzdEFjY3VtdWxhdG9yLCBwYWlyOiBbcGFnZVVybDogc3RyaW5nLCBpZDogc3RyaW5nXSkgPT4ge1xuICAgICAgICBjb25zdCBpZCA9IHBhaXJbMF07XG4gICAgICAgIGNvbnN0IHBhZ2VVcmwgPSBwYWlyWzFdO1xuICAgICAgICBhY2NbaWRdID0gdGhpcy5fcGFyc2VQYWdlKGlkLCBwYWdlVXJsKTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIHt9XG4gICAgKSBhcyB1bmtub3duIGFzIFBhcnNlZFBhZ2VzTGlzdDtcbiAgfVxuXG4gIF9wYXJzZUxpc3QoXG4gICAgcmVzcG9uc2U6IFN1cHByZXNzaW9uTGlzdFJlc3BvbnNlLFxuICAgIE1vZGVsOiB7XG4gICAgICBuZXcoZGF0YTogQm91bmNlRGF0YSB8IENvbXBsYWludERhdGEgfCBVbnN1YnNjcmliZURhdGEgfCBXaGl0ZUxpc3REYXRhKTpcbiAgICAgIEJvdW5jZSB8IENvbXBsYWludCB8IFVuc3Vic2NyaWJlIHwgV2hpdGVMaXN0XG4gICAgfVxuICApOiBTdXBwcmVzc2lvbkxpc3Qge1xuICAgIGNvbnN0IGRhdGEgPSB7fSBhcyBTdXBwcmVzc2lvbkxpc3Q7XG4gICAgZGF0YS5pdGVtcyA9IHJlc3BvbnNlLmJvZHkuaXRlbXMubWFwKChpdGVtKSA9PiBuZXcgTW9kZWwoaXRlbSkpO1xuXG4gICAgZGF0YS5wYWdlcyA9IHRoaXMuX3BhcnNlUGFnZUxpbmtzKHJlc3BvbnNlKTtcblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgX3BhcnNlSXRlbTxUIGV4dGVuZHMgU3VwcHJlc3Npb24+KFxuICAgIGRhdGEgOiBCb3VuY2VEYXRhIHwgQ29tcGxhaW50RGF0YSB8IFVuc3Vic2NyaWJlRGF0YSB8IFdoaXRlTGlzdERhdGEsXG4gICAgTW9kZWw6IHtcbiAgICAgIG5ldyhkYXRhOiBCb3VuY2VEYXRhIHwgQ29tcGxhaW50RGF0YSB8IFVuc3Vic2NyaWJlRGF0YSB8IFdoaXRlTGlzdERhdGEpOlxuICAgICAgVFxuICAgIH1cbiAgKTogVCB7XG4gICAgcmV0dXJuIG5ldyBNb2RlbChkYXRhKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlV2hpdGVMaXN0KFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIGRhdGE6IFN1cHByZXNzaW9uQ3JlYXRpb25EYXRhIHwgU3VwcHJlc3Npb25DcmVhdGlvbkRhdGFbXVxuICApOiBQcm9taXNlPFN1cHByZXNzaW9uQ3JlYXRpb25SZXN1bHQ+IHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgdGhyb3cgbmV3IEFQSUVycm9yKHtcbiAgICAgICAgc3RhdHVzOiA0MDAsXG4gICAgICAgIHN0YXR1c1RleHQ6ICdEYXRhIHByb3BlcnR5IHNob3VsZCBiZSBhbiBvYmplY3QnLFxuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgbWVzc2FnZTogJ1doaXRlbGlzdFxcJ3MgY3JlYXRpb24gcHJvY2VzcyBkb2VzIG5vdCBzdXBwb3J0IG11bHRpcGxlIGNyZWF0aW9ucy4gRGF0YSBwcm9wZXJ0eSBzaG91bGQgYmUgYW4gb2JqZWN0J1xuICAgICAgICB9XG4gICAgICB9IGFzIEFQSUVycm9yT3B0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnJlcXVlc3RcbiAgICAgIC5wb3N0V2l0aEZEKHVybGpvaW4oJ3YzJywgZG9tYWluLCAnd2hpdGVsaXN0cycpLCBkYXRhKVxuICAgICAgLnRoZW4odGhpcy5wcmVwYXJlUmVzcG9uc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja1R5cGUodHlwZTogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLm1vZGVscy5oYXModHlwZSkpIHtcbiAgICAgIHRocm93IG5ldyBBUElFcnJvcih7XG4gICAgICAgIHN0YXR1czogNDAwLFxuICAgICAgICBzdGF0dXNUZXh0OiAnVW5rbm93biB0eXBlIHZhbHVlJyxcbiAgICAgICAgYm9keTogeyBtZXNzYWdlOiAnVHlwZSBtYXkgYmUgb25seSBvbmUgb2YgW2JvdW5jZXMsIGNvbXBsYWludHMsIHVuc3Vic2NyaWJlcywgd2hpdGVsaXN0c10nIH1cbiAgICAgIH0gYXMgQVBJRXJyb3JPcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHByZXBhcmVSZXNwb25zZShyZXNwb25zZTogU3VwcHJlc3Npb25DcmVhdGlvblJlc3BvbnNlKTogU3VwcHJlc3Npb25DcmVhdGlvblJlc3VsdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1lc3NhZ2U6IHJlc3BvbnNlLmJvZHkubWVzc2FnZSxcbiAgICAgIHR5cGU6IHJlc3BvbnNlLmJvZHkudHlwZSB8fCAnJyxcbiAgICAgIHZhbHVlOiByZXNwb25zZS5ib2R5LnZhbHVlIHx8ICcnLFxuICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXNcbiAgICB9O1xuICB9XG5cbiAgbGlzdChcbiAgICBkb21haW46IHN0cmluZyxcbiAgICB0eXBlOiBzdHJpbmcsXG4gICAgcXVlcnk/OiBTdXBwcmVzc2lvbkxpc3RRdWVyeVxuICApOiBQcm9taXNlPFN1cHByZXNzaW9uTGlzdD4ge1xuICAgIHRoaXMuY2hlY2tUeXBlKHR5cGUpO1xuXG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLm1vZGVscy5nZXQodHlwZSk7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdFxuICAgICAgLmdldCh1cmxqb2luKCd2MycsIGRvbWFpbiwgdHlwZSksIHF1ZXJ5KVxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiBTdXBwcmVzc2lvbkxpc3RSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VMaXN0KHJlc3BvbnNlLCBtb2RlbCkpO1xuICB9XG5cbiAgZ2V0KFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIHR5cGU6IHN0cmluZyxcbiAgICBhZGRyZXNzOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxCb3VuY2UgfCBDb21wbGFpbnQgfCBVbnN1YnNjcmliZSB8IFdoaXRlTGlzdD4ge1xuICAgIHRoaXMuY2hlY2tUeXBlKHR5cGUpO1xuXG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLm1vZGVscy5nZXQodHlwZSk7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdFxuICAgICAgLmdldCh1cmxqb2luKCd2MycsIGRvbWFpbiwgdHlwZSwgZW5jb2RlVVJJQ29tcG9uZW50KGFkZHJlc3MpKSlcbiAgICAgIC50aGVuKChyZXNwb25zZTogU3VwcHJlc3Npb25SZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VJdGVtPHR5cGVvZiBtb2RlbD4ocmVzcG9uc2UuYm9keSwgbW9kZWwpKTtcbiAgfVxuXG4gIGNyZWF0ZShcbiAgICBkb21haW46IHN0cmluZyxcbiAgICB0eXBlOiBzdHJpbmcsXG4gICAgZGF0YTogU3VwcHJlc3Npb25DcmVhdGlvbkRhdGEgfCBTdXBwcmVzc2lvbkNyZWF0aW9uRGF0YVtdXG4gICk6IFByb21pc2U8U3VwcHJlc3Npb25DcmVhdGlvblJlc3VsdD4ge1xuICAgIHRoaXMuY2hlY2tUeXBlKHR5cGUpO1xuICAgIC8vIHN1cHBvcnRzIGFkZGluZyBtdWx0aXBsZSBzdXBwcmVzc2lvbnMgYnkgZGVmYXVsdFxuICAgIGxldCBwb3N0RGF0YTtcbiAgICBpZiAodHlwZSA9PT0gJ3doaXRlbGlzdHMnKSB7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVXaGl0ZUxpc3QoZG9tYWluLCBkYXRhKTtcbiAgICB9XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgIHBvc3REYXRhID0gW2RhdGFdO1xuICAgIH0gZWxzZSB7XG4gICAgICBwb3N0RGF0YSA9IFsuLi5kYXRhXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0XG4gICAgICAucG9zdCh1cmxqb2luKCd2MycsIGRvbWFpbiwgdHlwZSksIEpTT04uc3RyaW5naWZ5KHBvc3REYXRhKSwgY3JlYXRlT3B0aW9ucylcbiAgICAgIC50aGVuKHRoaXMucHJlcGFyZVJlc3BvbnNlKTtcbiAgfVxuXG4gIGRlc3Ryb3koXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgdHlwZTogc3RyaW5nLFxuICAgIGFkZHJlc3M6IHN0cmluZ1xuICApOiBQcm9taXNlPFN1cHByZXNzaW9uRGVzdHJveVJlc3VsdD4ge1xuICAgIHRoaXMuY2hlY2tUeXBlKHR5cGUpO1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3RcbiAgICAgIC5kZWxldGUodXJsam9pbigndjMnLCBkb21haW4sIHR5cGUsIGVuY29kZVVSSUNvbXBvbmVudChhZGRyZXNzKSkpXG4gICAgICAudGhlbigocmVzcG9uc2U6IFN1cHByZXNzaW9uRGVzdHJveVJlc3BvbnNlKSA9PiAoe1xuICAgICAgICBtZXNzYWdlOiByZXNwb25zZS5ib2R5Lm1lc3NhZ2UsXG4gICAgICAgIHZhbHVlOiByZXNwb25zZS5ib2R5LnZhbHVlIHx8ICcnLFxuICAgICAgICBhZGRyZXNzOiByZXNwb25zZS5ib2R5LmFkZHJlc3MgfHwgJycsXG4gICAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzXG4gICAgICB9KSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTdXBwcmVzc2lvbkNsaWVudDtcbiIsImltcG9ydCBBUElSZXNwb25zZSBmcm9tICcuL2ludGVyZmFjZXMvQXBpUmVzcG9uc2UnO1xuaW1wb3J0IHsgSU11bHRpcGxlVmFsaWRhdGlvbkNsaWVudCB9IGZyb20gJy4vaW50ZXJmYWNlcy9NdWx0aXBsZVZhbGlkYXRpb24nO1xuaW1wb3J0IHsgVmFsaWRhdGlvblJlc3VsdCwgVmFsaWRhdGlvblJlc3BvbnNlIH0gZnJvbSAnLi9pbnRlcmZhY2VzL1ZhbGlkYXRlJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vcmVxdWVzdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZhbGlkYXRlQ2xpZW50IHtcbiAgcHVibGljIG11bHRpcGxlVmFsaWRhdGlvbjtcbiAgcmVxdWVzdDogUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0LCBtdWx0aXBsZVZhbGlkYXRpb25DbGllbnQ6IElNdWx0aXBsZVZhbGlkYXRpb25DbGllbnQpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMubXVsdGlwbGVWYWxpZGF0aW9uID0gbXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50O1xuICB9XG5cbiAgZ2V0KGFkZHJlc3M6IHN0cmluZyk6IFByb21pc2U8VmFsaWRhdGlvblJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KCcvdjQvYWRkcmVzcy92YWxpZGF0ZScsIHsgYWRkcmVzcyB9KVxuICAgICAgLnRoZW4oKHJlc3BvbnNlIDogQVBJUmVzcG9uc2UpID0+IHJlc3BvbnNlKVxuICAgICAgLnRoZW4oKHJlcyA6IFZhbGlkYXRpb25SZXNwb25zZSkgPT4gcmVzLmJvZHkgYXMgVmFsaWRhdGlvblJlc3VsdCk7XG4gIH1cbn1cbiIsImltcG9ydCB1cmxqb2luIGZyb20gJ3VybC1qb2luJztcblxuaW1wb3J0IHtcbiAgVmFsaWRhdGlvblJlc3BvbnNlLFxuICBXZWJob29rTGlzdCxcbiAgV2ViaG9va1Jlc3BvbnNlLFxuICBXZWJob29rc0lkcyxcbiAgV2ViaG9va3NRdWVyeVxufSBmcm9tICcuL2ludGVyZmFjZXMvV2ViaG9va3MnO1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0JztcblxuY2xhc3MgV2ViaG9vayB7XG4gIGlkOiBzdHJpbmc7XG4gIHVybDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKGlkOiBzdHJpbmcsIHVybDogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5pZCA9IGlkO1xuICAgIHRoaXMudXJsID0gdXJsO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdlYmhvb2tDbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICB9XG5cbiAgX3BhcnNlV2ViaG9va0xpc3QocmVzcG9uc2U6IHsgYm9keTogeyB3ZWJob29rczogV2ViaG9va0xpc3QgfSB9KTogV2ViaG9va0xpc3Qge1xuICAgIHJldHVybiByZXNwb25zZS5ib2R5LndlYmhvb2tzO1xuICB9XG5cbiAgX3BhcnNlV2ViaG9va1dpdGhJRChpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNwb25zZTogV2ViaG9va1Jlc3BvbnNlKTogV2ViaG9vayB7XG4gICAgICBjb25zdCB3ZWJob29rUmVzcG9uc2UgPSByZXNwb25zZT8uYm9keT8ud2ViaG9vaztcbiAgICAgIGxldCB1cmwgPSB3ZWJob29rUmVzcG9uc2U/LnVybDtcbiAgICAgIGlmICghdXJsKSB7XG4gICAgICAgIHVybCA9IHdlYmhvb2tSZXNwb25zZT8udXJscyAmJiB3ZWJob29rUmVzcG9uc2UudXJscy5sZW5ndGhcbiAgICAgICAgICA/IHdlYmhvb2tSZXNwb25zZS51cmxzWzBdXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IFdlYmhvb2soaWQsIHVybCk7XG4gICAgfTtcbiAgfVxuXG4gIF9wYXJzZVdlYmhvb2tUZXN0KHJlc3BvbnNlOiB7IGJvZHk6IHsgY29kZTogbnVtYmVyLCBtZXNzYWdlOiBzdHJpbmcgfSB9KVxuICA6IHtjb2RlOiBudW1iZXIsIG1lc3NhZ2U6c3RyaW5nfSB7XG4gICAgcmV0dXJuIHsgY29kZTogcmVzcG9uc2UuYm9keS5jb2RlLCBtZXNzYWdlOiByZXNwb25zZS5ib2R5Lm1lc3NhZ2UgfSBhcyBWYWxpZGF0aW9uUmVzcG9uc2U7XG4gIH1cblxuICBsaXN0KGRvbWFpbjogc3RyaW5nLCBxdWVyeTogV2ViaG9va3NRdWVyeSk6IFByb21pc2U8V2ViaG9va0xpc3Q+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ3dlYmhvb2tzJyksIHF1ZXJ5KVxuICAgICAgLnRoZW4odGhpcy5fcGFyc2VXZWJob29rTGlzdCk7XG4gIH1cblxuICBnZXQoZG9tYWluOiBzdHJpbmcsIGlkOiBXZWJob29rc0lkcyk6IFByb21pc2U8V2ViaG9vaz4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4oJy92My9kb21haW5zJywgZG9tYWluLCAnd2ViaG9va3MnLCBpZCkpXG4gICAgICAudGhlbih0aGlzLl9wYXJzZVdlYmhvb2tXaXRoSUQoaWQpKTtcbiAgfVxuXG4gIGNyZWF0ZShkb21haW46IHN0cmluZyxcbiAgICBpZDogc3RyaW5nLFxuICAgIHVybDogc3RyaW5nLFxuICAgIHRlc3QgPSBmYWxzZSk6IFByb21pc2U8V2ViaG9vayB8IFZhbGlkYXRpb25SZXNwb25zZT4ge1xuICAgIGlmICh0ZXN0KSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnB1dFdpdGhGRCh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ3dlYmhvb2tzJywgaWQsICd0ZXN0JyksIHsgdXJsIH0pXG4gICAgICAgIC50aGVuKHRoaXMuX3BhcnNlV2ViaG9va1Rlc3QpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRCh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ3dlYmhvb2tzJyksIHsgaWQsIHVybCB9KVxuICAgICAgLnRoZW4odGhpcy5fcGFyc2VXZWJob29rV2l0aElEKGlkKSk7XG4gIH1cblxuICB1cGRhdGUoZG9tYWluOiBzdHJpbmcsIGlkOiBzdHJpbmcsIHVybDogc3RyaW5nKTogUHJvbWlzZTxXZWJob29rPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXRXaXRoRkQodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICd3ZWJob29rcycsIGlkKSwgeyB1cmwgfSlcbiAgICAgIC50aGVuKHRoaXMuX3BhcnNlV2ViaG9va1dpdGhJRChpZCkpO1xuICB9XG5cbiAgZGVzdHJveShkb21haW46IHN0cmluZywgaWQ6IHN0cmluZykgOiBQcm9taXNlPFdlYmhvb2s+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZSh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ3dlYmhvb2tzJywgaWQpKVxuICAgICAgLnRoZW4odGhpcy5fcGFyc2VXZWJob29rV2l0aElEKGlkKSk7XG4gIH1cbn1cbiIsIi8qISBodHRwczovL210aHMuYmUvYmFzZTY0IHYxLjAuMCBieSBAbWF0aGlhcyB8IE1JVCBsaWNlbnNlICovXG47KGZ1bmN0aW9uKHJvb3QpIHtcblxuXHQvLyBEZXRlY3QgZnJlZSB2YXJpYWJsZXMgYGV4cG9ydHNgLlxuXHR2YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzO1xuXG5cdC8vIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLlxuXHR2YXIgZnJlZU1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmXG5cdFx0bW9kdWxlLmV4cG9ydHMgPT0gZnJlZUV4cG9ydHMgJiYgbW9kdWxlO1xuXG5cdC8vIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgLCBmcm9tIE5vZGUuanMgb3IgQnJvd3NlcmlmaWVkIGNvZGUsIGFuZCB1c2Vcblx0Ly8gaXQgYXMgYHJvb3RgLlxuXHR2YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsO1xuXHRpZiAoZnJlZUdsb2JhbC5nbG9iYWwgPT09IGZyZWVHbG9iYWwgfHwgZnJlZUdsb2JhbC53aW5kb3cgPT09IGZyZWVHbG9iYWwpIHtcblx0XHRyb290ID0gZnJlZUdsb2JhbDtcblx0fVxuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdHZhciBJbnZhbGlkQ2hhcmFjdGVyRXJyb3IgPSBmdW5jdGlvbihtZXNzYWdlKSB7XG5cdFx0dGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcblx0fTtcblx0SW52YWxpZENoYXJhY3RlckVycm9yLnByb3RvdHlwZSA9IG5ldyBFcnJvcjtcblx0SW52YWxpZENoYXJhY3RlckVycm9yLnByb3RvdHlwZS5uYW1lID0gJ0ludmFsaWRDaGFyYWN0ZXJFcnJvcic7XG5cblx0dmFyIGVycm9yID0gZnVuY3Rpb24obWVzc2FnZSkge1xuXHRcdC8vIE5vdGU6IHRoZSBlcnJvciBtZXNzYWdlcyB1c2VkIHRocm91Z2hvdXQgdGhpcyBmaWxlIG1hdGNoIHRob3NlIHVzZWQgYnlcblx0XHQvLyB0aGUgbmF0aXZlIGBhdG9iYC9gYnRvYWAgaW1wbGVtZW50YXRpb24gaW4gQ2hyb21pdW0uXG5cdFx0dGhyb3cgbmV3IEludmFsaWRDaGFyYWN0ZXJFcnJvcihtZXNzYWdlKTtcblx0fTtcblxuXHR2YXIgVEFCTEUgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyc7XG5cdC8vIGh0dHA6Ly93aGF0d2cub3JnL2h0bWwvY29tbW9uLW1pY3Jvc3ludGF4ZXMuaHRtbCNzcGFjZS1jaGFyYWN0ZXJcblx0dmFyIFJFR0VYX1NQQUNFX0NIQVJBQ1RFUlMgPSAvW1xcdFxcblxcZlxcciBdL2c7XG5cblx0Ly8gYGRlY29kZWAgaXMgZGVzaWduZWQgdG8gYmUgZnVsbHkgY29tcGF0aWJsZSB3aXRoIGBhdG9iYCBhcyBkZXNjcmliZWQgaW4gdGhlXG5cdC8vIEhUTUwgU3RhbmRhcmQuIGh0dHA6Ly93aGF0d2cub3JnL2h0bWwvd2ViYXBwYXBpcy5odG1sI2RvbS13aW5kb3diYXNlNjQtYXRvYlxuXHQvLyBUaGUgb3B0aW1pemVkIGJhc2U2NC1kZWNvZGluZyBhbGdvcml0aG0gdXNlZCBpcyBiYXNlZCBvbiBAYXRr4oCZcyBleGNlbGxlbnRcblx0Ly8gaW1wbGVtZW50YXRpb24uIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2F0ay8xMDIwMzk2XG5cdHZhciBkZWNvZGUgPSBmdW5jdGlvbihpbnB1dCkge1xuXHRcdGlucHV0ID0gU3RyaW5nKGlucHV0KVxuXHRcdFx0LnJlcGxhY2UoUkVHRVhfU1BBQ0VfQ0hBUkFDVEVSUywgJycpO1xuXHRcdHZhciBsZW5ndGggPSBpbnB1dC5sZW5ndGg7XG5cdFx0aWYgKGxlbmd0aCAlIDQgPT0gMCkge1xuXHRcdFx0aW5wdXQgPSBpbnB1dC5yZXBsYWNlKC89PT8kLywgJycpO1xuXHRcdFx0bGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuXHRcdH1cblx0XHRpZiAoXG5cdFx0XHRsZW5ndGggJSA0ID09IDEgfHxcblx0XHRcdC8vIGh0dHA6Ly93aGF0d2cub3JnL0MjYWxwaGFudW1lcmljLWFzY2lpLWNoYXJhY3RlcnNcblx0XHRcdC9bXithLXpBLVowLTkvXS8udGVzdChpbnB1dClcblx0XHQpIHtcblx0XHRcdGVycm9yKFxuXHRcdFx0XHQnSW52YWxpZCBjaGFyYWN0ZXI6IHRoZSBzdHJpbmcgdG8gYmUgZGVjb2RlZCBpcyBub3QgY29ycmVjdGx5IGVuY29kZWQuJ1xuXHRcdFx0KTtcblx0XHR9XG5cdFx0dmFyIGJpdENvdW50ZXIgPSAwO1xuXHRcdHZhciBiaXRTdG9yYWdlO1xuXHRcdHZhciBidWZmZXI7XG5cdFx0dmFyIG91dHB1dCA9ICcnO1xuXHRcdHZhciBwb3NpdGlvbiA9IC0xO1xuXHRcdHdoaWxlICgrK3Bvc2l0aW9uIDwgbGVuZ3RoKSB7XG5cdFx0XHRidWZmZXIgPSBUQUJMRS5pbmRleE9mKGlucHV0LmNoYXJBdChwb3NpdGlvbikpO1xuXHRcdFx0Yml0U3RvcmFnZSA9IGJpdENvdW50ZXIgJSA0ID8gYml0U3RvcmFnZSAqIDY0ICsgYnVmZmVyIDogYnVmZmVyO1xuXHRcdFx0Ly8gVW5sZXNzIHRoaXMgaXMgdGhlIGZpcnN0IG9mIGEgZ3JvdXAgb2YgNCBjaGFyYWN0ZXJz4oCmXG5cdFx0XHRpZiAoYml0Q291bnRlcisrICUgNCkge1xuXHRcdFx0XHQvLyDigKZjb252ZXJ0IHRoZSBmaXJzdCA4IGJpdHMgdG8gYSBzaW5nbGUgQVNDSUkgY2hhcmFjdGVyLlxuXHRcdFx0XHRvdXRwdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShcblx0XHRcdFx0XHQweEZGICYgYml0U3RvcmFnZSA+PiAoLTIgKiBiaXRDb3VudGVyICYgNilcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dDtcblx0fTtcblxuXHQvLyBgZW5jb2RlYCBpcyBkZXNpZ25lZCB0byBiZSBmdWxseSBjb21wYXRpYmxlIHdpdGggYGJ0b2FgIGFzIGRlc2NyaWJlZCBpbiB0aGVcblx0Ly8gSFRNTCBTdGFuZGFyZDogaHR0cDovL3doYXR3Zy5vcmcvaHRtbC93ZWJhcHBhcGlzLmh0bWwjZG9tLXdpbmRvd2Jhc2U2NC1idG9hXG5cdHZhciBlbmNvZGUgPSBmdW5jdGlvbihpbnB1dCkge1xuXHRcdGlucHV0ID0gU3RyaW5nKGlucHV0KTtcblx0XHRpZiAoL1teXFwwLVxceEZGXS8udGVzdChpbnB1dCkpIHtcblx0XHRcdC8vIE5vdGU6IG5vIG5lZWQgdG8gc3BlY2lhbC1jYXNlIGFzdHJhbCBzeW1ib2xzIGhlcmUsIGFzIHN1cnJvZ2F0ZXMgYXJlXG5cdFx0XHQvLyBtYXRjaGVkLCBhbmQgdGhlIGlucHV0IGlzIHN1cHBvc2VkIHRvIG9ubHkgY29udGFpbiBBU0NJSSBhbnl3YXkuXG5cdFx0XHRlcnJvcihcblx0XHRcdFx0J1RoZSBzdHJpbmcgdG8gYmUgZW5jb2RlZCBjb250YWlucyBjaGFyYWN0ZXJzIG91dHNpZGUgb2YgdGhlICcgK1xuXHRcdFx0XHQnTGF0aW4xIHJhbmdlLidcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHZhciBwYWRkaW5nID0gaW5wdXQubGVuZ3RoICUgMztcblx0XHR2YXIgb3V0cHV0ID0gJyc7XG5cdFx0dmFyIHBvc2l0aW9uID0gLTE7XG5cdFx0dmFyIGE7XG5cdFx0dmFyIGI7XG5cdFx0dmFyIGM7XG5cdFx0dmFyIGJ1ZmZlcjtcblx0XHQvLyBNYWtlIHN1cmUgYW55IHBhZGRpbmcgaXMgaGFuZGxlZCBvdXRzaWRlIG9mIHRoZSBsb29wLlxuXHRcdHZhciBsZW5ndGggPSBpbnB1dC5sZW5ndGggLSBwYWRkaW5nO1xuXG5cdFx0d2hpbGUgKCsrcG9zaXRpb24gPCBsZW5ndGgpIHtcblx0XHRcdC8vIFJlYWQgdGhyZWUgYnl0ZXMsIGkuZS4gMjQgYml0cy5cblx0XHRcdGEgPSBpbnB1dC5jaGFyQ29kZUF0KHBvc2l0aW9uKSA8PCAxNjtcblx0XHRcdGIgPSBpbnB1dC5jaGFyQ29kZUF0KCsrcG9zaXRpb24pIDw8IDg7XG5cdFx0XHRjID0gaW5wdXQuY2hhckNvZGVBdCgrK3Bvc2l0aW9uKTtcblx0XHRcdGJ1ZmZlciA9IGEgKyBiICsgYztcblx0XHRcdC8vIFR1cm4gdGhlIDI0IGJpdHMgaW50byBmb3VyIGNodW5rcyBvZiA2IGJpdHMgZWFjaCwgYW5kIGFwcGVuZCB0aGVcblx0XHRcdC8vIG1hdGNoaW5nIGNoYXJhY3RlciBmb3IgZWFjaCBvZiB0aGVtIHRvIHRoZSBvdXRwdXQuXG5cdFx0XHRvdXRwdXQgKz0gKFxuXHRcdFx0XHRUQUJMRS5jaGFyQXQoYnVmZmVyID4+IDE4ICYgMHgzRikgK1xuXHRcdFx0XHRUQUJMRS5jaGFyQXQoYnVmZmVyID4+IDEyICYgMHgzRikgK1xuXHRcdFx0XHRUQUJMRS5jaGFyQXQoYnVmZmVyID4+IDYgJiAweDNGKSArXG5cdFx0XHRcdFRBQkxFLmNoYXJBdChidWZmZXIgJiAweDNGKVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRpZiAocGFkZGluZyA9PSAyKSB7XG5cdFx0XHRhID0gaW5wdXQuY2hhckNvZGVBdChwb3NpdGlvbikgPDwgODtcblx0XHRcdGIgPSBpbnB1dC5jaGFyQ29kZUF0KCsrcG9zaXRpb24pO1xuXHRcdFx0YnVmZmVyID0gYSArIGI7XG5cdFx0XHRvdXRwdXQgKz0gKFxuXHRcdFx0XHRUQUJMRS5jaGFyQXQoYnVmZmVyID4+IDEwKSArXG5cdFx0XHRcdFRBQkxFLmNoYXJBdCgoYnVmZmVyID4+IDQpICYgMHgzRikgK1xuXHRcdFx0XHRUQUJMRS5jaGFyQXQoKGJ1ZmZlciA8PCAyKSAmIDB4M0YpICtcblx0XHRcdFx0Jz0nXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSBpZiAocGFkZGluZyA9PSAxKSB7XG5cdFx0XHRidWZmZXIgPSBpbnB1dC5jaGFyQ29kZUF0KHBvc2l0aW9uKTtcblx0XHRcdG91dHB1dCArPSAoXG5cdFx0XHRcdFRBQkxFLmNoYXJBdChidWZmZXIgPj4gMikgK1xuXHRcdFx0XHRUQUJMRS5jaGFyQXQoKGJ1ZmZlciA8PCA0KSAmIDB4M0YpICtcblx0XHRcdFx0Jz09J1xuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gb3V0cHV0O1xuXHR9O1xuXG5cdHZhciBiYXNlNjQgPSB7XG5cdFx0J2VuY29kZSc6IGVuY29kZSxcblx0XHQnZGVjb2RlJzogZGVjb2RlLFxuXHRcdCd2ZXJzaW9uJzogJzEuMC4wJ1xuXHR9O1xuXG5cdC8vIFNvbWUgQU1EIGJ1aWxkIG9wdGltaXplcnMsIGxpa2Ugci5qcywgY2hlY2sgZm9yIHNwZWNpZmljIGNvbmRpdGlvbiBwYXR0ZXJuc1xuXHQvLyBsaWtlIHRoZSBmb2xsb3dpbmc6XG5cdGlmIChcblx0XHR0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiZcblx0XHR0eXBlb2YgZGVmaW5lLmFtZCA9PSAnb2JqZWN0JyAmJlxuXHRcdGRlZmluZS5hbWRcblx0KSB7XG5cdFx0ZGVmaW5lKGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIGJhc2U2NDtcblx0XHR9KTtcblx0fVx0ZWxzZSBpZiAoZnJlZUV4cG9ydHMgJiYgIWZyZWVFeHBvcnRzLm5vZGVUeXBlKSB7XG5cdFx0aWYgKGZyZWVNb2R1bGUpIHsgLy8gaW4gTm9kZS5qcyBvciBSaW5nb0pTIHYwLjguMCtcblx0XHRcdGZyZWVNb2R1bGUuZXhwb3J0cyA9IGJhc2U2NDtcblx0XHR9IGVsc2UgeyAvLyBpbiBOYXJ3aGFsIG9yIFJpbmdvSlMgdjAuNy4wLVxuXHRcdFx0Zm9yICh2YXIga2V5IGluIGJhc2U2NCkge1xuXHRcdFx0XHRiYXNlNjQuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAoZnJlZUV4cG9ydHNba2V5XSA9IGJhc2U2NFtrZXldKTtcblx0XHRcdH1cblx0XHR9XG5cdH0gZWxzZSB7IC8vIGluIFJoaW5vIG9yIGEgd2ViIGJyb3dzZXJcblx0XHRyb290LmJhc2U2NCA9IGJhc2U2NDtcblx0fVxuXG59KHRoaXMpKTtcbiIsIi8qISBNSVQgTGljZW5zZSDCqSBTaW5kcmUgU29yaHVzICovXG5cbmNvbnN0IGdsb2JhbHMgPSB7fTtcblxuY29uc3QgZ2V0R2xvYmFsID0gcHJvcGVydHkgPT4ge1xuXHQvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXHRpZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnICYmIHNlbGYgJiYgcHJvcGVydHkgaW4gc2VsZikge1xuXHRcdHJldHVybiBzZWxmO1xuXHR9XG5cblx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0aWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdyAmJiBwcm9wZXJ0eSBpbiB3aW5kb3cpIHtcblx0XHRyZXR1cm4gd2luZG93O1xuXHR9XG5cblx0aWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnICYmIGdsb2JhbCAmJiBwcm9wZXJ0eSBpbiBnbG9iYWwpIHtcblx0XHRyZXR1cm4gZ2xvYmFsO1xuXHR9XG5cblx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWxUaGlzKSB7XG5cdFx0cmV0dXJuIGdsb2JhbFRoaXM7XG5cdH1cbn07XG5cbmNvbnN0IGdsb2JhbFByb3BlcnRpZXMgPSBbXG5cdCdIZWFkZXJzJyxcblx0J1JlcXVlc3QnLFxuXHQnUmVzcG9uc2UnLFxuXHQnUmVhZGFibGVTdHJlYW0nLFxuXHQnZmV0Y2gnLFxuXHQnQWJvcnRDb250cm9sbGVyJyxcblx0J0Zvcm1EYXRhJ1xuXTtcblxuZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBnbG9iYWxQcm9wZXJ0aWVzKSB7XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnbG9iYWxzLCBwcm9wZXJ0eSwge1xuXHRcdGdldCgpIHtcblx0XHRcdGNvbnN0IGdsb2JhbE9iamVjdCA9IGdldEdsb2JhbChwcm9wZXJ0eSk7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IGdsb2JhbE9iamVjdCAmJiBnbG9iYWxPYmplY3RbcHJvcGVydHldO1xuXHRcdFx0cmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IHZhbHVlLmJpbmQoZ2xvYmFsT2JqZWN0KSA6IHZhbHVlO1xuXHRcdH1cblx0fSk7XG59XG5cbmNvbnN0IGlzT2JqZWN0ID0gdmFsdWUgPT4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JztcbmNvbnN0IHN1cHBvcnRzQWJvcnRDb250cm9sbGVyID0gdHlwZW9mIGdsb2JhbHMuQWJvcnRDb250cm9sbGVyID09PSAnZnVuY3Rpb24nO1xuY29uc3Qgc3VwcG9ydHNTdHJlYW1zID0gdHlwZW9mIGdsb2JhbHMuUmVhZGFibGVTdHJlYW0gPT09ICdmdW5jdGlvbic7XG5jb25zdCBzdXBwb3J0c0Zvcm1EYXRhID0gdHlwZW9mIGdsb2JhbHMuRm9ybURhdGEgPT09ICdmdW5jdGlvbic7XG5cbmNvbnN0IG1lcmdlSGVhZGVycyA9IChzb3VyY2UxLCBzb3VyY2UyKSA9PiB7XG5cdGNvbnN0IHJlc3VsdCA9IG5ldyBnbG9iYWxzLkhlYWRlcnMoc291cmNlMSB8fCB7fSk7XG5cdGNvbnN0IGlzSGVhZGVyc0luc3RhbmNlID0gc291cmNlMiBpbnN0YW5jZW9mIGdsb2JhbHMuSGVhZGVycztcblx0Y29uc3Qgc291cmNlID0gbmV3IGdsb2JhbHMuSGVhZGVycyhzb3VyY2UyIHx8IHt9KTtcblxuXHRmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBzb3VyY2UpIHtcblx0XHRpZiAoKGlzSGVhZGVyc0luc3RhbmNlICYmIHZhbHVlID09PSAndW5kZWZpbmVkJykgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmVzdWx0LmRlbGV0ZShrZXkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXN1bHQuc2V0KGtleSwgdmFsdWUpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXN1bHQ7XG59O1xuXG5jb25zdCBkZWVwTWVyZ2UgPSAoLi4uc291cmNlcykgPT4ge1xuXHRsZXQgcmV0dXJuVmFsdWUgPSB7fTtcblx0bGV0IGhlYWRlcnMgPSB7fTtcblxuXHRmb3IgKGNvbnN0IHNvdXJjZSBvZiBzb3VyY2VzKSB7XG5cdFx0aWYgKEFycmF5LmlzQXJyYXkoc291cmNlKSkge1xuXHRcdFx0aWYgKCEoQXJyYXkuaXNBcnJheShyZXR1cm5WYWx1ZSkpKSB7XG5cdFx0XHRcdHJldHVyblZhbHVlID0gW107XG5cdFx0XHR9XG5cblx0XHRcdHJldHVyblZhbHVlID0gWy4uLnJldHVyblZhbHVlLCAuLi5zb3VyY2VdO1xuXHRcdH0gZWxzZSBpZiAoaXNPYmplY3Qoc291cmNlKSkge1xuXHRcdFx0Zm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHNvdXJjZSkpIHtcblx0XHRcdFx0aWYgKGlzT2JqZWN0KHZhbHVlKSAmJiAoa2V5IGluIHJldHVyblZhbHVlKSkge1xuXHRcdFx0XHRcdHZhbHVlID0gZGVlcE1lcmdlKHJldHVyblZhbHVlW2tleV0sIHZhbHVlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVyblZhbHVlID0gey4uLnJldHVyblZhbHVlLCBba2V5XTogdmFsdWV9O1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXNPYmplY3Qoc291cmNlLmhlYWRlcnMpKSB7XG5cdFx0XHRcdGhlYWRlcnMgPSBtZXJnZUhlYWRlcnMoaGVhZGVycywgc291cmNlLmhlYWRlcnMpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVyblZhbHVlLmhlYWRlcnMgPSBoZWFkZXJzO1xuXHR9XG5cblx0cmV0dXJuIHJldHVyblZhbHVlO1xufTtcblxuY29uc3QgcmVxdWVzdE1ldGhvZHMgPSBbXG5cdCdnZXQnLFxuXHQncG9zdCcsXG5cdCdwdXQnLFxuXHQncGF0Y2gnLFxuXHQnaGVhZCcsXG5cdCdkZWxldGUnXG5dO1xuXG5jb25zdCByZXNwb25zZVR5cGVzID0ge1xuXHRqc29uOiAnYXBwbGljYXRpb24vanNvbicsXG5cdHRleHQ6ICd0ZXh0LyonLFxuXHRmb3JtRGF0YTogJ211bHRpcGFydC9mb3JtLWRhdGEnLFxuXHRhcnJheUJ1ZmZlcjogJyovKicsXG5cdGJsb2I6ICcqLyonXG59O1xuXG5jb25zdCByZXRyeU1ldGhvZHMgPSBbXG5cdCdnZXQnLFxuXHQncHV0Jyxcblx0J2hlYWQnLFxuXHQnZGVsZXRlJyxcblx0J29wdGlvbnMnLFxuXHQndHJhY2UnXG5dO1xuXG5jb25zdCByZXRyeVN0YXR1c0NvZGVzID0gW1xuXHQ0MDgsXG5cdDQxMyxcblx0NDI5LFxuXHQ1MDAsXG5cdDUwMixcblx0NTAzLFxuXHQ1MDRcbl07XG5cbmNvbnN0IHJldHJ5QWZ0ZXJTdGF0dXNDb2RlcyA9IFtcblx0NDEzLFxuXHQ0MjksXG5cdDUwM1xuXTtcblxuY29uc3Qgc3RvcCA9IFN5bWJvbCgnc3RvcCcpO1xuXG5jbGFzcyBIVFRQRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG5cdGNvbnN0cnVjdG9yKHJlc3BvbnNlKSB7XG5cdFx0Ly8gU2V0IHRoZSBtZXNzYWdlIHRvIHRoZSBzdGF0dXMgdGV4dCwgc3VjaCBhcyBVbmF1dGhvcml6ZWQsXG5cdFx0Ly8gd2l0aCBzb21lIGZhbGxiYWNrcy4gVGhpcyBtZXNzYWdlIHNob3VsZCBuZXZlciBiZSB1bmRlZmluZWQuXG5cdFx0c3VwZXIoXG5cdFx0XHRyZXNwb25zZS5zdGF0dXNUZXh0IHx8XG5cdFx0XHRTdHJpbmcoXG5cdFx0XHRcdChyZXNwb25zZS5zdGF0dXMgPT09IDAgfHwgcmVzcG9uc2Uuc3RhdHVzKSA/XG5cdFx0XHRcdFx0cmVzcG9uc2Uuc3RhdHVzIDogJ1Vua25vd24gcmVzcG9uc2UgZXJyb3InXG5cdFx0XHQpXG5cdFx0KTtcblx0XHR0aGlzLm5hbWUgPSAnSFRUUEVycm9yJztcblx0XHR0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7XG5cdH1cbn1cblxuY2xhc3MgVGltZW91dEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuXHRjb25zdHJ1Y3RvcihyZXF1ZXN0KSB7XG5cdFx0c3VwZXIoJ1JlcXVlc3QgdGltZWQgb3V0Jyk7XG5cdFx0dGhpcy5uYW1lID0gJ1RpbWVvdXRFcnJvcic7XG5cdFx0dGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcblx0fVxufVxuXG5jb25zdCBkZWxheSA9IG1zID0+IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xuXG4vLyBgUHJvbWlzZS5yYWNlKClgIHdvcmthcm91bmQgKCM5MSlcbmNvbnN0IHRpbWVvdXQgPSAocmVxdWVzdCwgYWJvcnRDb250cm9sbGVyLCBvcHRpb25zKSA9PlxuXHRuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0Y29uc3QgdGltZW91dElEID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRpZiAoYWJvcnRDb250cm9sbGVyKSB7XG5cdFx0XHRcdGFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRyZWplY3QobmV3IFRpbWVvdXRFcnJvcihyZXF1ZXN0KSk7XG5cdFx0fSwgb3B0aW9ucy50aW1lb3V0KTtcblxuXHRcdC8qIGVzbGludC1kaXNhYmxlIHByb21pc2UvcHJlZmVyLWF3YWl0LXRvLXRoZW4gKi9cblx0XHRvcHRpb25zLmZldGNoKHJlcXVlc3QpXG5cdFx0XHQudGhlbihyZXNvbHZlKVxuXHRcdFx0LmNhdGNoKHJlamVjdClcblx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXRJRCk7XG5cdFx0XHR9KTtcblx0XHQvKiBlc2xpbnQtZW5hYmxlIHByb21pc2UvcHJlZmVyLWF3YWl0LXRvLXRoZW4gKi9cblx0fSk7XG5cbmNvbnN0IG5vcm1hbGl6ZVJlcXVlc3RNZXRob2QgPSBpbnB1dCA9PiByZXF1ZXN0TWV0aG9kcy5pbmNsdWRlcyhpbnB1dCkgPyBpbnB1dC50b1VwcGVyQ2FzZSgpIDogaW5wdXQ7XG5cbmNvbnN0IGRlZmF1bHRSZXRyeU9wdGlvbnMgPSB7XG5cdGxpbWl0OiAyLFxuXHRtZXRob2RzOiByZXRyeU1ldGhvZHMsXG5cdHN0YXR1c0NvZGVzOiByZXRyeVN0YXR1c0NvZGVzLFxuXHRhZnRlclN0YXR1c0NvZGVzOiByZXRyeUFmdGVyU3RhdHVzQ29kZXNcbn07XG5cbmNvbnN0IG5vcm1hbGl6ZVJldHJ5T3B0aW9ucyA9IChyZXRyeSA9IHt9KSA9PiB7XG5cdGlmICh0eXBlb2YgcmV0cnkgPT09ICdudW1iZXInKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdC4uLmRlZmF1bHRSZXRyeU9wdGlvbnMsXG5cdFx0XHRsaW1pdDogcmV0cnlcblx0XHR9O1xuXHR9XG5cblx0aWYgKHJldHJ5Lm1ldGhvZHMgJiYgIUFycmF5LmlzQXJyYXkocmV0cnkubWV0aG9kcykpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ3JldHJ5Lm1ldGhvZHMgbXVzdCBiZSBhbiBhcnJheScpO1xuXHR9XG5cblx0aWYgKHJldHJ5LnN0YXR1c0NvZGVzICYmICFBcnJheS5pc0FycmF5KHJldHJ5LnN0YXR1c0NvZGVzKSkge1xuXHRcdHRocm93IG5ldyBFcnJvcigncmV0cnkuc3RhdHVzQ29kZXMgbXVzdCBiZSBhbiBhcnJheScpO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHQuLi5kZWZhdWx0UmV0cnlPcHRpb25zLFxuXHRcdC4uLnJldHJ5LFxuXHRcdGFmdGVyU3RhdHVzQ29kZXM6IHJldHJ5QWZ0ZXJTdGF0dXNDb2Rlc1xuXHR9O1xufTtcblxuLy8gVGhlIG1heGltdW0gdmFsdWUgb2YgYSAzMmJpdCBpbnQgKHNlZSBpc3N1ZSAjMTE3KVxuY29uc3QgbWF4U2FmZVRpbWVvdXQgPSAyMTQ3NDgzNjQ3O1xuXG5jbGFzcyBLeSB7XG5cdGNvbnN0cnVjdG9yKGlucHV0LCBvcHRpb25zID0ge30pIHtcblx0XHR0aGlzLl9yZXRyeUNvdW50ID0gMDtcblx0XHR0aGlzLl9pbnB1dCA9IGlucHV0O1xuXHRcdHRoaXMuX29wdGlvbnMgPSB7XG5cdFx0XHQvLyBUT0RPOiBjcmVkZW50aWFscyBjYW4gYmUgcmVtb3ZlZCB3aGVuIHRoZSBzcGVjIGNoYW5nZSBpcyBpbXBsZW1lbnRlZCBpbiBhbGwgYnJvd3NlcnMuIENvbnRleHQ6IGh0dHBzOi8vd3d3LmNocm9tZXN0YXR1cy5jb20vZmVhdHVyZS80NTM5NDczMzEyMzUwMjA4XG5cdFx0XHRjcmVkZW50aWFsczogdGhpcy5faW5wdXQuY3JlZGVudGlhbHMgfHwgJ3NhbWUtb3JpZ2luJyxcblx0XHRcdC4uLm9wdGlvbnMsXG5cdFx0XHRoZWFkZXJzOiBtZXJnZUhlYWRlcnModGhpcy5faW5wdXQuaGVhZGVycywgb3B0aW9ucy5oZWFkZXJzKSxcblx0XHRcdGhvb2tzOiBkZWVwTWVyZ2Uoe1xuXHRcdFx0XHRiZWZvcmVSZXF1ZXN0OiBbXSxcblx0XHRcdFx0YmVmb3JlUmV0cnk6IFtdLFxuXHRcdFx0XHRhZnRlclJlc3BvbnNlOiBbXVxuXHRcdFx0fSwgb3B0aW9ucy5ob29rcyksXG5cdFx0XHRtZXRob2Q6IG5vcm1hbGl6ZVJlcXVlc3RNZXRob2Qob3B0aW9ucy5tZXRob2QgfHwgdGhpcy5faW5wdXQubWV0aG9kKSxcblx0XHRcdHByZWZpeFVybDogU3RyaW5nKG9wdGlvbnMucHJlZml4VXJsIHx8ICcnKSxcblx0XHRcdHJldHJ5OiBub3JtYWxpemVSZXRyeU9wdGlvbnMob3B0aW9ucy5yZXRyeSksXG5cdFx0XHR0aHJvd0h0dHBFcnJvcnM6IG9wdGlvbnMudGhyb3dIdHRwRXJyb3JzICE9PSBmYWxzZSxcblx0XHRcdHRpbWVvdXQ6IHR5cGVvZiBvcHRpb25zLnRpbWVvdXQgPT09ICd1bmRlZmluZWQnID8gMTAwMDAgOiBvcHRpb25zLnRpbWVvdXQsXG5cdFx0XHRmZXRjaDogb3B0aW9ucy5mZXRjaCB8fCBnbG9iYWxzLmZldGNoXG5cdFx0fTtcblxuXHRcdGlmICh0eXBlb2YgdGhpcy5faW5wdXQgIT09ICdzdHJpbmcnICYmICEodGhpcy5faW5wdXQgaW5zdGFuY2VvZiBVUkwgfHwgdGhpcy5faW5wdXQgaW5zdGFuY2VvZiBnbG9iYWxzLlJlcXVlc3QpKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdgaW5wdXRgIG11c3QgYmUgYSBzdHJpbmcsIFVSTCwgb3IgUmVxdWVzdCcpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLl9vcHRpb25zLnByZWZpeFVybCAmJiB0eXBlb2YgdGhpcy5faW5wdXQgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRpZiAodGhpcy5faW5wdXQuc3RhcnRzV2l0aCgnLycpKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignYGlucHV0YCBtdXN0IG5vdCBiZWdpbiB3aXRoIGEgc2xhc2ggd2hlbiB1c2luZyBgcHJlZml4VXJsYCcpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIXRoaXMuX29wdGlvbnMucHJlZml4VXJsLmVuZHNXaXRoKCcvJykpIHtcblx0XHRcdFx0dGhpcy5fb3B0aW9ucy5wcmVmaXhVcmwgKz0gJy8nO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLl9pbnB1dCA9IHRoaXMuX29wdGlvbnMucHJlZml4VXJsICsgdGhpcy5faW5wdXQ7XG5cdFx0fVxuXG5cdFx0aWYgKHN1cHBvcnRzQWJvcnRDb250cm9sbGVyKSB7XG5cdFx0XHR0aGlzLmFib3J0Q29udHJvbGxlciA9IG5ldyBnbG9iYWxzLkFib3J0Q29udHJvbGxlcigpO1xuXHRcdFx0aWYgKHRoaXMuX29wdGlvbnMuc2lnbmFsKSB7XG5cdFx0XHRcdHRoaXMuX29wdGlvbnMuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMuYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLl9vcHRpb25zLnNpZ25hbCA9IHRoaXMuYWJvcnRDb250cm9sbGVyLnNpZ25hbDtcblx0XHR9XG5cblx0XHR0aGlzLnJlcXVlc3QgPSBuZXcgZ2xvYmFscy5SZXF1ZXN0KHRoaXMuX2lucHV0LCB0aGlzLl9vcHRpb25zKTtcblxuXHRcdGlmICh0aGlzLl9vcHRpb25zLnNlYXJjaFBhcmFtcykge1xuXHRcdFx0Y29uc3Qgc2VhcmNoUGFyYW1zID0gJz8nICsgbmV3IFVSTFNlYXJjaFBhcmFtcyh0aGlzLl9vcHRpb25zLnNlYXJjaFBhcmFtcykudG9TdHJpbmcoKTtcblx0XHRcdGNvbnN0IHVybCA9IHRoaXMucmVxdWVzdC51cmwucmVwbGFjZSgvKD86XFw/Lio/KT8oPz0jfCQpLywgc2VhcmNoUGFyYW1zKTtcblxuXHRcdFx0Ly8gVG8gcHJvdmlkZSBjb3JyZWN0IGZvcm0gYm91bmRhcnksIENvbnRlbnQtVHlwZSBoZWFkZXIgc2hvdWxkIGJlIGRlbGV0ZWQgZWFjaCB0aW1lIHdoZW4gbmV3IFJlcXVlc3QgaW5zdGFudGlhdGVkIGZyb20gYW5vdGhlciBvbmVcblx0XHRcdGlmICgoKHN1cHBvcnRzRm9ybURhdGEgJiYgdGhpcy5fb3B0aW9ucy5ib2R5IGluc3RhbmNlb2YgZ2xvYmFscy5Gb3JtRGF0YSkgfHwgdGhpcy5fb3B0aW9ucy5ib2R5IGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zKSAmJiAhKHRoaXMuX29wdGlvbnMuaGVhZGVycyAmJiB0aGlzLl9vcHRpb25zLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddKSkge1xuXHRcdFx0XHR0aGlzLnJlcXVlc3QuaGVhZGVycy5kZWxldGUoJ2NvbnRlbnQtdHlwZScpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnJlcXVlc3QgPSBuZXcgZ2xvYmFscy5SZXF1ZXN0KG5ldyBnbG9iYWxzLlJlcXVlc3QodXJsLCB0aGlzLnJlcXVlc3QpLCB0aGlzLl9vcHRpb25zKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5fb3B0aW9ucy5qc29uICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXMuX29wdGlvbnMuYm9keSA9IEpTT04uc3RyaW5naWZ5KHRoaXMuX29wdGlvbnMuanNvbik7XG5cdFx0XHR0aGlzLnJlcXVlc3QuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsICdhcHBsaWNhdGlvbi9qc29uJyk7XG5cdFx0XHR0aGlzLnJlcXVlc3QgPSBuZXcgZ2xvYmFscy5SZXF1ZXN0KHRoaXMucmVxdWVzdCwge2JvZHk6IHRoaXMuX29wdGlvbnMuYm9keX0pO1xuXHRcdH1cblxuXHRcdGNvbnN0IGZuID0gYXN5bmMgKCkgPT4ge1xuXHRcdFx0aWYgKHRoaXMuX29wdGlvbnMudGltZW91dCA+IG1heFNhZmVUaW1lb3V0KSB7XG5cdFx0XHRcdHRocm93IG5ldyBSYW5nZUVycm9yKGBUaGUgXFxgdGltZW91dFxcYCBvcHRpb24gY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiAke21heFNhZmVUaW1lb3V0fWApO1xuXHRcdFx0fVxuXG5cdFx0XHRhd2FpdCBkZWxheSgxKTtcblx0XHRcdGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMuX2ZldGNoKCk7XG5cblx0XHRcdGZvciAoY29uc3QgaG9vayBvZiB0aGlzLl9vcHRpb25zLmhvb2tzLmFmdGVyUmVzcG9uc2UpIHtcblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWF3YWl0LWluLWxvb3Bcblx0XHRcdFx0Y29uc3QgbW9kaWZpZWRSZXNwb25zZSA9IGF3YWl0IGhvb2soXG5cdFx0XHRcdFx0dGhpcy5yZXF1ZXN0LFxuXHRcdFx0XHRcdHRoaXMuX29wdGlvbnMsXG5cdFx0XHRcdFx0dGhpcy5fZGVjb3JhdGVSZXNwb25zZShyZXNwb25zZS5jbG9uZSgpKVxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdGlmIChtb2RpZmllZFJlc3BvbnNlIGluc3RhbmNlb2YgZ2xvYmFscy5SZXNwb25zZSkge1xuXHRcdFx0XHRcdHJlc3BvbnNlID0gbW9kaWZpZWRSZXNwb25zZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLl9kZWNvcmF0ZVJlc3BvbnNlKHJlc3BvbnNlKTtcblxuXHRcdFx0aWYgKCFyZXNwb25zZS5vayAmJiB0aGlzLl9vcHRpb25zLnRocm93SHR0cEVycm9ycykge1xuXHRcdFx0XHR0aHJvdyBuZXcgSFRUUEVycm9yKHJlc3BvbnNlKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgYG9uRG93bmxvYWRQcm9ncmVzc2AgaXMgcGFzc2VkLCBpdCB1c2VzIHRoZSBzdHJlYW0gQVBJIGludGVybmFsbHlcblx0XHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cdFx0XHRpZiAodGhpcy5fb3B0aW9ucy5vbkRvd25sb2FkUHJvZ3Jlc3MpIHtcblx0XHRcdFx0aWYgKHR5cGVvZiB0aGlzLl9vcHRpb25zLm9uRG93bmxvYWRQcm9ncmVzcyAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBgb25Eb3dubG9hZFByb2dyZXNzYCBvcHRpb24gbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIXN1cHBvcnRzU3RyZWFtcykge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcignU3RyZWFtcyBhcmUgbm90IHN1cHBvcnRlZCBpbiB5b3VyIGVudmlyb25tZW50LiBgUmVhZGFibGVTdHJlYW1gIGlzIG1pc3NpbmcuJyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdGhpcy5fc3RyZWFtKHJlc3BvbnNlLmNsb25lKCksIHRoaXMuX29wdGlvbnMub25Eb3dubG9hZFByb2dyZXNzKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHJlc3BvbnNlO1xuXHRcdH07XG5cblx0XHRjb25zdCBpc1JldHJpYWJsZU1ldGhvZCA9IHRoaXMuX29wdGlvbnMucmV0cnkubWV0aG9kcy5pbmNsdWRlcyh0aGlzLnJlcXVlc3QubWV0aG9kLnRvTG93ZXJDYXNlKCkpO1xuXHRcdGNvbnN0IHJlc3VsdCA9IGlzUmV0cmlhYmxlTWV0aG9kID8gdGhpcy5fcmV0cnkoZm4pIDogZm4oKTtcblxuXHRcdGZvciAoY29uc3QgW3R5cGUsIG1pbWVUeXBlXSBvZiBPYmplY3QuZW50cmllcyhyZXNwb25zZVR5cGVzKSkge1xuXHRcdFx0cmVzdWx0W3R5cGVdID0gYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHR0aGlzLnJlcXVlc3QuaGVhZGVycy5zZXQoJ2FjY2VwdCcsIHRoaXMucmVxdWVzdC5oZWFkZXJzLmdldCgnYWNjZXB0JykgfHwgbWltZVR5cGUpO1xuXG5cdFx0XHRcdGNvbnN0IHJlc3BvbnNlID0gKGF3YWl0IHJlc3VsdCkuY2xvbmUoKTtcblxuXHRcdFx0XHRpZiAodHlwZSA9PT0gJ2pzb24nKSB7XG5cdFx0XHRcdFx0aWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjA0KSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gJyc7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKG9wdGlvbnMucGFyc2VKc29uKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gb3B0aW9ucy5wYXJzZUpzb24oYXdhaXQgcmVzcG9uc2UudGV4dCgpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gcmVzcG9uc2VbdHlwZV0oKTtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdF9jYWxjdWxhdGVSZXRyeURlbGF5KGVycm9yKSB7XG5cdFx0dGhpcy5fcmV0cnlDb3VudCsrO1xuXG5cdFx0aWYgKHRoaXMuX3JldHJ5Q291bnQgPCB0aGlzLl9vcHRpb25zLnJldHJ5LmxpbWl0ICYmICEoZXJyb3IgaW5zdGFuY2VvZiBUaW1lb3V0RXJyb3IpKSB7XG5cdFx0XHRpZiAoZXJyb3IgaW5zdGFuY2VvZiBIVFRQRXJyb3IpIHtcblx0XHRcdFx0aWYgKCF0aGlzLl9vcHRpb25zLnJldHJ5LnN0YXR1c0NvZGVzLmluY2x1ZGVzKGVycm9yLnJlc3BvbnNlLnN0YXR1cykpIHtcblx0XHRcdFx0XHRyZXR1cm4gMDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IHJldHJ5QWZ0ZXIgPSBlcnJvci5yZXNwb25zZS5oZWFkZXJzLmdldCgnUmV0cnktQWZ0ZXInKTtcblx0XHRcdFx0aWYgKHJldHJ5QWZ0ZXIgJiYgdGhpcy5fb3B0aW9ucy5yZXRyeS5hZnRlclN0YXR1c0NvZGVzLmluY2x1ZGVzKGVycm9yLnJlc3BvbnNlLnN0YXR1cykpIHtcblx0XHRcdFx0XHRsZXQgYWZ0ZXIgPSBOdW1iZXIocmV0cnlBZnRlcik7XG5cdFx0XHRcdFx0aWYgKE51bWJlci5pc05hTihhZnRlcikpIHtcblx0XHRcdFx0XHRcdGFmdGVyID0gRGF0ZS5wYXJzZShyZXRyeUFmdGVyKSAtIERhdGUubm93KCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGFmdGVyICo9IDEwMDA7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKHR5cGVvZiB0aGlzLl9vcHRpb25zLnJldHJ5Lm1heFJldHJ5QWZ0ZXIgIT09ICd1bmRlZmluZWQnICYmIGFmdGVyID4gdGhpcy5fb3B0aW9ucy5yZXRyeS5tYXhSZXRyeUFmdGVyKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gMDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4gYWZ0ZXI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoZXJyb3IucmVzcG9uc2Uuc3RhdHVzID09PSA0MTMpIHtcblx0XHRcdFx0XHRyZXR1cm4gMDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBCQUNLT0ZGX0ZBQ1RPUiA9IDAuMztcblx0XHRcdHJldHVybiBCQUNLT0ZGX0ZBQ1RPUiAqICgyICoqICh0aGlzLl9yZXRyeUNvdW50IC0gMSkpICogMTAwMDtcblx0XHR9XG5cblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdF9kZWNvcmF0ZVJlc3BvbnNlKHJlc3BvbnNlKSB7XG5cdFx0aWYgKHRoaXMuX29wdGlvbnMucGFyc2VKc29uKSB7XG5cdFx0XHRyZXNwb25zZS5qc29uID0gYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5fb3B0aW9ucy5wYXJzZUpzb24oYXdhaXQgcmVzcG9uc2UudGV4dCgpKTtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3BvbnNlO1xuXHR9XG5cblx0YXN5bmMgX3JldHJ5KGZuKSB7XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBhd2FpdCBmbigpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRjb25zdCBtcyA9IE1hdGgubWluKHRoaXMuX2NhbGN1bGF0ZVJldHJ5RGVsYXkoZXJyb3IpLCBtYXhTYWZlVGltZW91dCk7XG5cdFx0XHRpZiAobXMgIT09IDAgJiYgdGhpcy5fcmV0cnlDb3VudCA+IDApIHtcblx0XHRcdFx0YXdhaXQgZGVsYXkobXMpO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgaG9vayBvZiB0aGlzLl9vcHRpb25zLmhvb2tzLmJlZm9yZVJldHJ5KSB7XG5cdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWF3YWl0LWluLWxvb3Bcblx0XHRcdFx0XHRjb25zdCBob29rUmVzdWx0ID0gYXdhaXQgaG9vayh7XG5cdFx0XHRcdFx0XHRyZXF1ZXN0OiB0aGlzLnJlcXVlc3QsXG5cdFx0XHRcdFx0XHRvcHRpb25zOiB0aGlzLl9vcHRpb25zLFxuXHRcdFx0XHRcdFx0ZXJyb3IsXG5cdFx0XHRcdFx0XHRyZXRyeUNvdW50OiB0aGlzLl9yZXRyeUNvdW50XG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHQvLyBJZiBgc3RvcGAgaXMgcmV0dXJuZWQgZnJvbSB0aGUgaG9vaywgdGhlIHJldHJ5IHByb2Nlc3MgaXMgc3RvcHBlZFxuXHRcdFx0XHRcdGlmIChob29rUmVzdWx0ID09PSBzdG9wKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRoaXMuX3JldHJ5KGZuKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMuX29wdGlvbnMudGhyb3dIdHRwRXJyb3JzKSB7XG5cdFx0XHRcdHRocm93IGVycm9yO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGFzeW5jIF9mZXRjaCgpIHtcblx0XHRmb3IgKGNvbnN0IGhvb2sgb2YgdGhpcy5fb3B0aW9ucy5ob29rcy5iZWZvcmVSZXF1ZXN0KSB7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYXdhaXQtaW4tbG9vcFxuXHRcdFx0Y29uc3QgcmVzdWx0ID0gYXdhaXQgaG9vayh0aGlzLnJlcXVlc3QsIHRoaXMuX29wdGlvbnMpO1xuXG5cdFx0XHRpZiAocmVzdWx0IGluc3RhbmNlb2YgUmVxdWVzdCkge1xuXHRcdFx0XHR0aGlzLnJlcXVlc3QgPSByZXN1bHQ7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAocmVzdWx0IGluc3RhbmNlb2YgUmVzcG9uc2UpIHtcblx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAodGhpcy5fb3B0aW9ucy50aW1lb3V0ID09PSBmYWxzZSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuX29wdGlvbnMuZmV0Y2godGhpcy5yZXF1ZXN0LmNsb25lKCkpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aW1lb3V0KHRoaXMucmVxdWVzdC5jbG9uZSgpLCB0aGlzLmFib3J0Q29udHJvbGxlciwgdGhpcy5fb3B0aW9ucyk7XG5cdH1cblxuXHQvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXHRfc3RyZWFtKHJlc3BvbnNlLCBvbkRvd25sb2FkUHJvZ3Jlc3MpIHtcblx0XHRjb25zdCB0b3RhbEJ5dGVzID0gTnVtYmVyKHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdjb250ZW50LWxlbmd0aCcpKSB8fCAwO1xuXHRcdGxldCB0cmFuc2ZlcnJlZEJ5dGVzID0gMDtcblxuXHRcdHJldHVybiBuZXcgZ2xvYmFscy5SZXNwb25zZShcblx0XHRcdG5ldyBnbG9iYWxzLlJlYWRhYmxlU3RyZWFtKHtcblx0XHRcdFx0c3RhcnQoY29udHJvbGxlcikge1xuXHRcdFx0XHRcdGNvbnN0IHJlYWRlciA9IHJlc3BvbnNlLmJvZHkuZ2V0UmVhZGVyKCk7XG5cblx0XHRcdFx0XHRpZiAob25Eb3dubG9hZFByb2dyZXNzKSB7XG5cdFx0XHRcdFx0XHRvbkRvd25sb2FkUHJvZ3Jlc3Moe3BlcmNlbnQ6IDAsIHRyYW5zZmVycmVkQnl0ZXM6IDAsIHRvdGFsQnl0ZXN9LCBuZXcgVWludDhBcnJheSgpKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRhc3luYyBmdW5jdGlvbiByZWFkKCkge1xuXHRcdFx0XHRcdFx0Y29uc3Qge2RvbmUsIHZhbHVlfSA9IGF3YWl0IHJlYWRlci5yZWFkKCk7XG5cdFx0XHRcdFx0XHRpZiAoZG9uZSkge1xuXHRcdFx0XHRcdFx0XHRjb250cm9sbGVyLmNsb3NlKCk7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKG9uRG93bmxvYWRQcm9ncmVzcykge1xuXHRcdFx0XHRcdFx0XHR0cmFuc2ZlcnJlZEJ5dGVzICs9IHZhbHVlLmJ5dGVMZW5ndGg7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHBlcmNlbnQgPSB0b3RhbEJ5dGVzID09PSAwID8gMCA6IHRyYW5zZmVycmVkQnl0ZXMgLyB0b3RhbEJ5dGVzO1xuXHRcdFx0XHRcdFx0XHRvbkRvd25sb2FkUHJvZ3Jlc3Moe3BlcmNlbnQsIHRyYW5zZmVycmVkQnl0ZXMsIHRvdGFsQnl0ZXN9LCB2YWx1ZSk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGNvbnRyb2xsZXIuZW5xdWV1ZSh2YWx1ZSk7XG5cdFx0XHRcdFx0XHRyZWFkKCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmVhZCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdCk7XG5cdH1cbn1cblxuY29uc3QgdmFsaWRhdGVBbmRNZXJnZSA9ICguLi5zb3VyY2VzKSA9PiB7XG5cdGZvciAoY29uc3Qgc291cmNlIG9mIHNvdXJjZXMpIHtcblx0XHRpZiAoKCFpc09iamVjdChzb3VyY2UpIHx8IEFycmF5LmlzQXJyYXkoc291cmNlKSkgJiYgdHlwZW9mIHNvdXJjZSAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBgb3B0aW9uc2AgYXJndW1lbnQgbXVzdCBiZSBhbiBvYmplY3QnKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZGVlcE1lcmdlKHt9LCAuLi5zb3VyY2VzKTtcbn07XG5cbmNvbnN0IGNyZWF0ZUluc3RhbmNlID0gZGVmYXVsdHMgPT4ge1xuXHRjb25zdCBreSA9IChpbnB1dCwgb3B0aW9ucykgPT4gbmV3IEt5KGlucHV0LCB2YWxpZGF0ZUFuZE1lcmdlKGRlZmF1bHRzLCBvcHRpb25zKSk7XG5cblx0Zm9yIChjb25zdCBtZXRob2Qgb2YgcmVxdWVzdE1ldGhvZHMpIHtcblx0XHRreVttZXRob2RdID0gKGlucHV0LCBvcHRpb25zKSA9PiBuZXcgS3koaW5wdXQsIHZhbGlkYXRlQW5kTWVyZ2UoZGVmYXVsdHMsIG9wdGlvbnMsIHttZXRob2R9KSk7XG5cdH1cblxuXHRreS5IVFRQRXJyb3IgPSBIVFRQRXJyb3I7XG5cdGt5LlRpbWVvdXRFcnJvciA9IFRpbWVvdXRFcnJvcjtcblx0a3kuY3JlYXRlID0gbmV3RGVmYXVsdHMgPT4gY3JlYXRlSW5zdGFuY2UodmFsaWRhdGVBbmRNZXJnZShuZXdEZWZhdWx0cykpO1xuXHRreS5leHRlbmQgPSBuZXdEZWZhdWx0cyA9PiBjcmVhdGVJbnN0YW5jZSh2YWxpZGF0ZUFuZE1lcmdlKGRlZmF1bHRzLCBuZXdEZWZhdWx0cykpO1xuXHRreS5zdG9wID0gc3RvcDtcblxuXHRyZXR1cm4ga3k7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVJbnN0YW5jZSgpO1xuIiwiKGZ1bmN0aW9uIChuYW1lLCBjb250ZXh0LCBkZWZpbml0aW9uKSB7XG4gIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykgbW9kdWxlLmV4cG9ydHMgPSBkZWZpbml0aW9uKCk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkgZGVmaW5lKGRlZmluaXRpb24pO1xuICBlbHNlIGNvbnRleHRbbmFtZV0gPSBkZWZpbml0aW9uKCk7XG59KSgndXJsam9pbicsIHRoaXMsIGZ1bmN0aW9uICgpIHtcblxuICBmdW5jdGlvbiBub3JtYWxpemUgKHN0ckFycmF5KSB7XG4gICAgdmFyIHJlc3VsdEFycmF5ID0gW107XG4gICAgaWYgKHN0ckFycmF5Lmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJyc7IH1cblxuICAgIGlmICh0eXBlb2Ygc3RyQXJyYXlbMF0gIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVcmwgbXVzdCBiZSBhIHN0cmluZy4gUmVjZWl2ZWQgJyArIHN0ckFycmF5WzBdKTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgZmlyc3QgcGFydCBpcyBhIHBsYWluIHByb3RvY29sLCB3ZSBjb21iaW5lIGl0IHdpdGggdGhlIG5leHQgcGFydC5cbiAgICBpZiAoc3RyQXJyYXlbMF0ubWF0Y2goL15bXi86XSs6XFwvKiQvKSAmJiBzdHJBcnJheS5sZW5ndGggPiAxKSB7XG4gICAgICB2YXIgZmlyc3QgPSBzdHJBcnJheS5zaGlmdCgpO1xuICAgICAgc3RyQXJyYXlbMF0gPSBmaXJzdCArIHN0ckFycmF5WzBdO1xuICAgIH1cblxuICAgIC8vIFRoZXJlIG11c3QgYmUgdHdvIG9yIHRocmVlIHNsYXNoZXMgaW4gdGhlIGZpbGUgcHJvdG9jb2wsIHR3byBzbGFzaGVzIGluIGFueXRoaW5nIGVsc2UuXG4gICAgaWYgKHN0ckFycmF5WzBdLm1hdGNoKC9eZmlsZTpcXC9cXC9cXC8vKSkge1xuICAgICAgc3RyQXJyYXlbMF0gPSBzdHJBcnJheVswXS5yZXBsYWNlKC9eKFteLzpdKyk6XFwvKi8sICckMTovLy8nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyQXJyYXlbMF0gPSBzdHJBcnJheVswXS5yZXBsYWNlKC9eKFteLzpdKyk6XFwvKi8sICckMTovLycpO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjb21wb25lbnQgPSBzdHJBcnJheVtpXTtcblxuICAgICAgaWYgKHR5cGVvZiBjb21wb25lbnQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VybCBtdXN0IGJlIGEgc3RyaW5nLiBSZWNlaXZlZCAnICsgY29tcG9uZW50KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbXBvbmVudCA9PT0gJycpIHsgY29udGludWU7IH1cblxuICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgIC8vIFJlbW92aW5nIHRoZSBzdGFydGluZyBzbGFzaGVzIGZvciBlYWNoIGNvbXBvbmVudCBidXQgdGhlIGZpcnN0LlxuICAgICAgICBjb21wb25lbnQgPSBjb21wb25lbnQucmVwbGFjZSgvXltcXC9dKy8sICcnKTtcbiAgICAgIH1cbiAgICAgIGlmIChpIDwgc3RyQXJyYXkubGVuZ3RoIC0gMSkge1xuICAgICAgICAvLyBSZW1vdmluZyB0aGUgZW5kaW5nIHNsYXNoZXMgZm9yIGVhY2ggY29tcG9uZW50IGJ1dCB0aGUgbGFzdC5cbiAgICAgICAgY29tcG9uZW50ID0gY29tcG9uZW50LnJlcGxhY2UoL1tcXC9dKyQvLCAnJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGb3IgdGhlIGxhc3QgY29tcG9uZW50IHdlIHdpbGwgY29tYmluZSBtdWx0aXBsZSBzbGFzaGVzIHRvIGEgc2luZ2xlIG9uZS5cbiAgICAgICAgY29tcG9uZW50ID0gY29tcG9uZW50LnJlcGxhY2UoL1tcXC9dKyQvLCAnLycpO1xuICAgICAgfVxuXG4gICAgICByZXN1bHRBcnJheS5wdXNoKGNvbXBvbmVudCk7XG5cbiAgICB9XG5cbiAgICB2YXIgc3RyID0gcmVzdWx0QXJyYXkuam9pbignLycpO1xuICAgIC8vIEVhY2ggaW5wdXQgY29tcG9uZW50IGlzIG5vdyBzZXBhcmF0ZWQgYnkgYSBzaW5nbGUgc2xhc2ggZXhjZXB0IHRoZSBwb3NzaWJsZSBmaXJzdCBwbGFpbiBwcm90b2NvbCBwYXJ0LlxuXG4gICAgLy8gcmVtb3ZlIHRyYWlsaW5nIHNsYXNoIGJlZm9yZSBwYXJhbWV0ZXJzIG9yIGhhc2hcbiAgICBzdHIgPSBzdHIucmVwbGFjZSgvXFwvKFxcP3wmfCNbXiFdKS9nLCAnJDEnKTtcblxuICAgIC8vIHJlcGxhY2UgPyBpbiBwYXJhbWV0ZXJzIHdpdGggJlxuICAgIHZhciBwYXJ0cyA9IHN0ci5zcGxpdCgnPycpO1xuICAgIHN0ciA9IHBhcnRzLnNoaWZ0KCkgKyAocGFydHMubGVuZ3RoID4gMCA/ICc/JzogJycpICsgcGFydHMuam9pbignJicpO1xuXG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGlucHV0O1xuXG4gICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbMF0gPT09ICdvYmplY3QnKSB7XG4gICAgICBpbnB1dCA9IGFyZ3VtZW50c1swXTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5wdXQgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vcm1hbGl6ZShpbnB1dCk7XG4gIH07XG5cbn0pO1xuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHRpZDogbW9kdWxlSWQsXG5cdFx0bG9hZGVkOiBmYWxzZSxcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG5cdG1vZHVsZS5sb2FkZWQgPSB0cnVlO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5nID0gKGZ1bmN0aW9uKCkge1xuXHRpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09ICdvYmplY3QnKSByZXR1cm4gZ2xvYmFsVGhpcztcblx0dHJ5IHtcblx0XHRyZXR1cm4gdGhpcyB8fCBuZXcgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JykgcmV0dXJuIHdpbmRvdztcblx0fVxufSkoKTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5ubWQgPSAobW9kdWxlKSA9PiB7XG5cdG1vZHVsZS5wYXRocyA9IFtdO1xuXHRpZiAoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XG5cdHJldHVybiBtb2R1bGU7XG59OyIsIi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLy8gVGhpcyBlbnRyeSBtb2R1bGUgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBtb2R1bGVzIHNvIGl0IGNhbid0IGJlIGlubGluZWRcbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNzUpO1xuIl0sIm5hbWVzIjpbIm9wdGlvbnMiLCJmb3JtRGF0YSIsImNvbmZpZyIsIl9fYXNzaWduIiwidXJsIiwidXNlcm5hbWUiLCJFcnJvciIsImtleSIsInRoaXMiLCJyZXF1ZXN0IiwicmVxdWVzdF8xIiwibWFpbExpc3RzTWVtYmVycyIsIm1haWxMaXN0TWVtYmVyc18xIiwiZG9tYWluQ3JlZGVudGlhbHNDbGllbnQiLCJkb21haW5zQ3JlZGVudGlhbHNfMSIsImRvbWFpblRlbXBsYXRlc0NsaWVudCIsImRvbWFpbnNUZW1wbGF0ZXNfMSIsImRvbWFpblRhZ3NDbGllbnQiLCJkb21haW5zVGFnc18xIiwibXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50IiwibXVsdGlwbGVWYWxpZGF0aW9uXzEiLCJkb21haW5zIiwiZG9tYWluc18xIiwid2ViaG9va3MiLCJ3ZWJob29rc18xIiwiZXZlbnRzIiwiZXZlbnRzXzEiLCJzdGF0cyIsInN0YXRzXzEiLCJzdXBwcmVzc2lvbnMiLCJzdXBwcmVzc2lvbnNfMSIsIm1lc3NhZ2VzIiwibWVzc2FnZXNfMSIsInJvdXRlcyIsInJvdXRlc18xIiwiaXBzIiwiaXBzXzEiLCJpcF9wb29scyIsImlwX3Bvb2xzXzEiLCJsaXN0cyIsImxpc3RzXzEiLCJ2YWxpZGF0ZSIsInZhbGlkYXRlXzEiLCJkYXRhIiwicmVjZWl2aW5nIiwic2VuZGluZyIsIm5hbWUiLCJyZXF1aXJlX3RscyIsInNraXBfdmVyaWZpY2F0aW9uIiwic3RhdGUiLCJ3aWxkY2FyZCIsInNwYW1fYWN0aW9uIiwiY3JlYXRlZF9hdCIsInNtdHBfcGFzc3dvcmQiLCJzbXRwX2xvZ2luIiwidHlwZSIsInJlY2VpdmluZ19kbnNfcmVjb3JkcyIsInNlbmRpbmdfZG5zX3JlY29yZHMiLCJleHBvcnRzIiwiZG9tYWluQ3JlZGVudGlhbHMiLCJkb21haW5UZW1wbGF0ZXMiLCJkb21haW5UYWdzIiwiRG9tYWluQ2xpZW50IiwicmVzcG9uc2UiLCJib2R5IiwiaXRlbXMiLCJtYXAiLCJpdGVtIiwiRG9tYWluIiwiZG9tYWluIiwidHJhY2tpbmciLCJxdWVyeSIsImdldCIsInRoZW4iLCJyZXMiLCJfcGFyc2VEb21haW5MaXN0IiwiX3BhcnNlRG9tYWluIiwicG9zdE9iaiIsImZvcmNlX2RraW1fYXV0aG9yaXR5IiwidG9TdHJpbmciLCJwb3N0V2l0aEZEIiwicHV0IiwiZGVsZXRlIiwiX3BhcnNlTWVzc2FnZSIsImNvbm5lY3Rpb24iLCJfcGFyc2VUcmFja2luZ1NldHRpbmdzIiwiYWN0aXZlIiwiZXJyb3JfMSIsInN0YXR1cyIsInN0YXR1c1RleHQiLCJtZXNzYWdlIiwicHV0V2l0aEZEIiwiX3BhcnNlVHJhY2tpbmdVcGRhdGUiLCJfYSIsImlwIiwicG9vbF9pZCIsInJlcGxhY2VtZW50Iiwic2VhcmNoUGFyYW1zIiwic2VsZiIsImRraW1TZWxlY3RvciIsIndlYlByZWZpeCIsImJhc2VSb3V0ZSIsIkRvbWFpbkNyZWRlbnRpYWxzQ2xpZW50IiwidG90YWxDb3VudCIsInRvdGFsX2NvdW50Iiwic3BlYyIsIl9wYXJzZURvbWFpbkNyZWRlbnRpYWxzTGlzdCIsImNvbmNhdCIsIl9wYXJzZU1lc3NhZ2VSZXNwb25zZSIsImNyZWRlbnRpYWxzTG9naW4iLCJfcGFyc2VEZWxldGVkUmVzcG9uc2UiLCJ0YWdJbmZvIiwidGFnIiwiZGVzY3JpcHRpb24iLCJEYXRlIiwidGFnU3RhdGlzdGljSW5mbyIsInN0YXJ0IiwiZW5kIiwicmVzb2x1dGlvbiIsInN0YXQiLCJ0aW1lIiwiRG9tYWluVGFnc0NsaWVudCIsIk9iamVjdCIsImVudHJpZXMiLCJwYWdpbmciLCJyZWR1Y2UiLCJhY2MiLCJlbnRyaWUiLCJpZCIsIkRvbWFpblRhZyIsInBhZ2VzIiwiX3BhcnNlUGFnZUxpbmtzIiwiRG9tYWluVGFnU3RhdGlzdGljIiwiX3BhcnNlRG9tYWluVGFnc0xpc3QiLCJfcGFyc2VUYWdTdGF0aXN0aWMiLCJkb21haW5UZW1wbGF0ZUZyb21BUEkiLCJjcmVhdGVkQXQiLCJjcmVhdGVkQnkiLCJ2ZXJzaW9uIiwidmVyc2lvbnMiLCJsZW5ndGgiLCJyZXN1bHQiLCJEb21haW5UZW1wbGF0ZXNDbGllbnQiLCJEb21haW5UZW1wbGF0ZUl0ZW0iLCJ0ZW1wbGF0ZSIsInRlbXBsYXRlTmFtZSIsInRlbXBsYXRlVmVyc2lvbiIsImQiLCJwYXJzZUxpc3QiLCJwYXJzZUNyZWF0aW9uUmVzcG9uc2UiLCJwYXJzZU11dGF0aW9uUmVzcG9uc2UiLCJwYXJzZU5vdGlmaWNhdGlvblJlc3BvbnNlIiwicGFyc2VDcmVhdGlvblZlcnNpb25SZXNwb25zZSIsInBhcnNlTXV0YXRlVGVtcGxhdGVWZXJzaW9uUmVzcG9uc2UiLCJwYXJzZUxpc3RUZW1wbGF0ZVZlcnNpb25zIiwiX2IiLCJib2R5TWVzc2FnZSIsImVycm9yIiwiX3N1cGVyIiwic3RhY2siLCJfdGhpcyIsImRldGFpbHMiLCJfX2V4dGVuZHMiLCJFdmVudENsaWVudCIsInNwbGl0IiwicG9wIiwibnVtYmVyIiwiX3BhcnNlUGFnZU51bWJlciIsInBhaXIiLCJfcGFyc2VQYWdlIiwicXVlcnlDb3B5IiwicGFnZSIsIl9wYXJzZUV2ZW50TGlzdCIsIkZvcm1EYXRhIiwiTWFpbGd1biIsImNsaWVudF8xIiwiU3VwcHJlc3Npb25Nb2RlbHMiLCJJcFBvb2xzQ2xpZW50IiwicGFyc2VJcFBvb2xzUmVzcG9uc2UiLCJwb29sSWQiLCJwYXRjaFdpdGhGRCIsIklwc0NsaWVudCIsInBhcnNlSXBzUmVzcG9uc2UiLCJtZW1iZXJzIiwiTGlzdHNDbGllbnQiLCJ2YWxpZGF0aW9uUmVzdWx0IiwibWFpbExpc3RBZGRyZXNzIiwibGlzdCIsInBvc3QiLCJwYXJzZVZhbGlkYXRpb25SZXN1bHQiLCJNYWlsTGlzdHNNZW1iZXJzIiwibmV3RGF0YSIsInZhcnMiLCJKU09OIiwic3RyaW5naWZ5Iiwic3Vic2NyaWJlZCIsIm1haWxMaXN0TWVtYmVyQWRkcmVzcyIsIm1lbWJlciIsInJlcURhdGEiLCJjaGVja0FuZFVwZGF0ZURhdGEiLCJBcnJheSIsImlzQXJyYXkiLCJ1cHNlcnQiLCJNZXNzYWdlc0NsaWVudCIsIl9wYXJzZVJlc3BvbnNlIiwiTXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50IiwibGlzdElkIiwiZmlsZSIsImlzU3RyZWFtIiwicGlwZSIsImlzTm9kZUZvcm1EYXRhIiwiZm9ybURhdGFJbnN0YW5jZSIsInVuZGVmaW5lZCIsImdldEhlYWRlcnMiLCJ0aW1lb3V0IiwiaGVhZGVycyIsIkZvcm1EYXRhQ29uc3RydWN0b3IiLCJSZXF1ZXN0IiwibWV0aG9kIiwiaW5wdXRPcHRpb25zIiwiYmFzaWMiLCJiYXNlNjQiLCJlbmNvZGUiLCJBdXRob3JpemF0aW9uIiwicGFyYW1zIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsInRvTG9jYWxlVXBwZXJDYXNlIiwidGhyb3dIdHRwRXJyb3JzIiwib2siLCJzdHJlYW0iLCJjaHVua3MiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsIm9uIiwiY2h1bmsiLCJwdXNoIiwiQnVmZmVyIiwianNvbiIsImdldFJlc3BvbnNlQm9keSIsInJlc3BvbnNlU3RyaW5nIiwidGV4dCIsImpzb25Cb2R5IiwicGFyc2UiLCJjb21tYW5kIiwiY3JlYXRlRm9ybURhdGEiLCJrZXlzIiwiZmlsdGVyIiwiZm9ybURhdGFBY2MiLCJpbmNsdWRlcyIsImFkZEZpbGVzVG9GRCIsImFkZE1pbWVEYXRhVG9GRCIsImFkZENvbW1vblByb3BlcnR5VG9GRCIsImlzQnVmZmVyIiwiYXBwZW5kIiwiZmlsZW5hbWUiLCJwcm9wZXJ0eU5hbWUiLCJ2YWx1ZSIsImFwcGVuZEZpbGVUb0ZEIiwib2JqIiwib2JqRGF0YSIsImNvbnRlbnRUeXBlIiwia25vd25MZW5ndGgiLCJnZXRBdHRhY2htZW50T3B0aW9ucyIsImZvckVhY2giLCJSb3V0ZXNDbGllbnQiLCJyb3V0ZSIsIlN0YXRzQ2xpZW50IiwiYXJyYXlXaXRoUGFpcnMiLCJjdXJyZW50UGFpciIsInJlcGVhdGVkUHJvcGVydHkiLCJTdGF0cyIsInByZXBhcmVTZWFyY2hQYXJhbXMiLCJfcGFyc2VTdGF0cyIsImNyZWF0ZU9wdGlvbnMiLCJTdXByZXNzaW9uc18xIiwiQk9VTkNFUyIsImFkZHJlc3MiLCJjb2RlIiwiU3VwcHJlc3Npb24iLCJDT01QTEFJTlRTIiwiVU5TVUJTQ1JJQkVTIiwidGFncyIsIldISVRFTElTVFMiLCJyZWFzb24iLCJtb2RlbHMiLCJNYXAiLCJzZXQiLCJCb3VuY2UiLCJDb21wbGFpbnQiLCJVbnN1YnNjcmliZSIsIldoaXRlTGlzdCIsIlN1cHByZXNzaW9uQ2xpZW50IiwicGFnZVVybCIsIlVSTCIsImhhcyIsIk1vZGVsIiwicHJlcGFyZVJlc3BvbnNlIiwiY2hlY2tUeXBlIiwibW9kZWwiLCJfcGFyc2VMaXN0IiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiX3BhcnNlSXRlbSIsInBvc3REYXRhIiwiY3JlYXRlV2hpdGVMaXN0IiwibW9kdWxlIiwibXVsdGlwbGVWYWxpZGF0aW9uIiwiVmFsaWRhdGVDbGllbnQiLCJXZWJob29rQ2xpZW50Iiwid2ViaG9va1Jlc3BvbnNlIiwid2ViaG9vayIsInVybHMiLCJXZWJob29rIiwiX3BhcnNlV2ViaG9va0xpc3QiLCJfcGFyc2VXZWJob29rV2l0aElEIiwidGVzdCIsIl9wYXJzZVdlYmhvb2tUZXN0Iiwicm9vdCIsImZyZWVFeHBvcnRzIiwiZnJlZUdsb2JhbCIsImciLCJnbG9iYWwiLCJ3aW5kb3ciLCJJbnZhbGlkQ2hhcmFjdGVyRXJyb3IiLCJwcm90b3R5cGUiLCJUQUJMRSIsIlJFR0VYX1NQQUNFX0NIQVJBQ1RFUlMiLCJpbnB1dCIsIlN0cmluZyIsImEiLCJiIiwiYyIsImJ1ZmZlciIsInBhZGRpbmciLCJvdXRwdXQiLCJwb3NpdGlvbiIsImNoYXJDb2RlQXQiLCJjaGFyQXQiLCJyZXBsYWNlIiwiYml0U3RvcmFnZSIsImJpdENvdW50ZXIiLCJpbmRleE9mIiwiZnJvbUNoYXJDb2RlIiwiZ2xvYmFscyIsImdldEdsb2JhbCIsInByb3BlcnR5IiwiZ2xvYmFsVGhpcyIsImdsb2JhbFByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsImdsb2JhbE9iamVjdCIsImJpbmQiLCJpc09iamVjdCIsInN1cHBvcnRzQWJvcnRDb250cm9sbGVyIiwiQWJvcnRDb250cm9sbGVyIiwic3VwcG9ydHNTdHJlYW1zIiwiUmVhZGFibGVTdHJlYW0iLCJzdXBwb3J0c0Zvcm1EYXRhIiwibWVyZ2VIZWFkZXJzIiwic291cmNlMSIsInNvdXJjZTIiLCJIZWFkZXJzIiwiaXNIZWFkZXJzSW5zdGFuY2UiLCJzb3VyY2UiLCJkZWVwTWVyZ2UiLCJzb3VyY2VzIiwicmV0dXJuVmFsdWUiLCJyZXF1ZXN0TWV0aG9kcyIsInJlc3BvbnNlVHlwZXMiLCJhcnJheUJ1ZmZlciIsImJsb2IiLCJyZXRyeUFmdGVyU3RhdHVzQ29kZXMiLCJzdG9wIiwiU3ltYm9sIiwiSFRUUEVycm9yIiwiY29uc3RydWN0b3IiLCJzdXBlciIsIlRpbWVvdXRFcnJvciIsImRlbGF5IiwibXMiLCJzZXRUaW1lb3V0Iiwibm9ybWFsaXplUmVxdWVzdE1ldGhvZCIsInRvVXBwZXJDYXNlIiwiZGVmYXVsdFJldHJ5T3B0aW9ucyIsImxpbWl0IiwibWV0aG9kcyIsInN0YXR1c0NvZGVzIiwiYWZ0ZXJTdGF0dXNDb2RlcyIsIm5vcm1hbGl6ZVJldHJ5T3B0aW9ucyIsInJldHJ5IiwibWF4U2FmZVRpbWVvdXQiLCJLeSIsIl9yZXRyeUNvdW50IiwiX2lucHV0IiwiX29wdGlvbnMiLCJjcmVkZW50aWFscyIsImhvb2tzIiwiYmVmb3JlUmVxdWVzdCIsImJlZm9yZVJldHJ5IiwiYWZ0ZXJSZXNwb25zZSIsInByZWZpeFVybCIsImZldGNoIiwiVHlwZUVycm9yIiwic3RhcnRzV2l0aCIsImVuZHNXaXRoIiwiYWJvcnRDb250cm9sbGVyIiwic2lnbmFsIiwiYWRkRXZlbnRMaXN0ZW5lciIsImFib3J0IiwiVVJMU2VhcmNoUGFyYW1zIiwiZm4iLCJhc3luYyIsIlJhbmdlRXJyb3IiLCJfZmV0Y2giLCJob29rIiwibW9kaWZpZWRSZXNwb25zZSIsIl9kZWNvcmF0ZVJlc3BvbnNlIiwiY2xvbmUiLCJSZXNwb25zZSIsIm9uRG93bmxvYWRQcm9ncmVzcyIsIl9zdHJlYW0iLCJ0b0xvd2VyQ2FzZSIsIl9yZXRyeSIsIm1pbWVUeXBlIiwicGFyc2VKc29uIiwiX2NhbGN1bGF0ZVJldHJ5RGVsYXkiLCJyZXRyeUFmdGVyIiwiYWZ0ZXIiLCJOdW1iZXIiLCJpc05hTiIsIm5vdyIsIm1heFJldHJ5QWZ0ZXIiLCJNYXRoIiwibWluIiwicmV0cnlDb3VudCIsInRpbWVvdXRJRCIsImNhdGNoIiwiY2xlYXJUaW1lb3V0IiwidG90YWxCeXRlcyIsInRyYW5zZmVycmVkQnl0ZXMiLCJjb250cm9sbGVyIiwicmVhZGVyIiwiZ2V0UmVhZGVyIiwicGVyY2VudCIsIlVpbnQ4QXJyYXkiLCJyZWFkIiwiZG9uZSIsImNsb3NlIiwiYnl0ZUxlbmd0aCIsImVucXVldWUiLCJ2YWxpZGF0ZUFuZE1lcmdlIiwiY3JlYXRlSW5zdGFuY2UiLCJkZWZhdWx0cyIsImt5IiwiY3JlYXRlIiwibmV3RGVmYXVsdHMiLCJleHRlbmQiLCJub3JtYWxpemUiLCJzdHJBcnJheSIsInJlc3VsdEFycmF5IiwibWF0Y2giLCJmaXJzdCIsInNoaWZ0IiwiaSIsImNvbXBvbmVudCIsInN0ciIsImpvaW4iLCJwYXJ0cyIsImFyZ3VtZW50cyIsInNsaWNlIiwiY2FsbCIsImRlZmluaXRpb24iLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJsb2FkZWQiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwibyIsImVudW1lcmFibGUiLCJGdW5jdGlvbiIsImUiLCJwcm9wIiwiaGFzT3duUHJvcGVydHkiLCJyIiwidG9TdHJpbmdUYWciLCJubWQiLCJwYXRocyIsImNoaWxkcmVuIl0sInNvdXJjZVJvb3QiOiIifQ==
2
+ define((()=>(()=>{var t={475: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 s=o(r(438)),i=o(r(373)),a=o(r(22)),u=o(r(747)),c=o(r(778)),p=o(r(750)),h=o(r(197)),f=o(r(277)),l=o(r(721)),d=o(r(345)),y=o(r(602)),b=o(r(126)),v=o(r(135)),m=o(r(60)),g=o(r(587)),_=o(r(955)),w=o(r(75)),q=function(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 s.default(r,e);var o=new v.default(this.request),q=new m.default(this.request),D=new _.default(this.request),R=new w.default(this.request),O=new g.default(this.request);this.domains=new i.default(this.request,q,D,R),this.webhooks=new p.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 h.default(this.request),this.routes=new f.default(this.request),this.ips=new d.default(this.request),this.ip_pools=new y.default(this.request),this.lists=new b.default(this.request,o),this.validate=new l.default(this.request,O)};e.default=q},373: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}),e.Domain=void 0;var s=o(r(78)),i=o(r(142)),a=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};e.Domain=a;var u=function(){function t(t,e,r,n){this.request=t,this.domainCredentials=e,this.domainTemplates=r,this.domainTags=n}return t.prototype._parseMessage=function(t){return t.body},t.prototype._parseDomainList=function(t){return t.body.items.map((function(t){return new a(t)}))},t.prototype._parseDomain=function(t){return new a(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=n({},t);return"force_dkim_authority"in r&&"boolean"==typeof r.force_dkim_authority&&(r.force_dkim_authority="true"===r.toString()?"true":"false"),this.request.postWithFD("/v3/domains",r).then((function(t){return e._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,s.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 new i.default({status:400,statusText:"Received boolean value for active property",body:{message:'Property "active" must contain string value.'}});return this.request.putWithFD((0,s.default)("/v3/domains",t,"tracking",e),r).then((function(t){return n._parseTrackingUpdate(t)}))},t.prototype.getIps=function(t){return this.request.get((0,s.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,s.default)("/v3/domains",t,"ips"),{ip:e})},t.prototype.deleteIp=function(t,e){return this.request.delete((0,s.default)("/v3/domains",t,"ips",e))},t.prototype.linkIpPool=function(t,e){return this.request.postWithFD((0,s.default)("/v3/domains",t,"ips"),{pool_id:e})},t.prototype.unlinkIpPoll=function(t,e){var r="";if(e.pool_id&&e.ip)throw new i.default({status:400,statusText:"Too much data for replacement",body:{message:"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,s.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},60: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(78)),s=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=s},75: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}),e.DomainTagStatistic=e.DomainTag=void 0;var s=o(r(78)),i=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=i;var a=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 n(n({},t),{time:new Date(t.time)})}))};e.DomainTagStatistic=a;var u=function(){function t(t){this.request=t,this.baseRoute="/v3/"}return t.prototype._parsePageLinks=function(t){return Object.entries(t.body.paging).reduce((function(t,e){var r=e[0],n=e[1];return t[r]={id:r,url:n},t}),{})},t.prototype._parseDomainTagsList=function(t){return{items:t.body.items.map((function(t){return new i(t)})),pages:this._parsePageLinks(t)}},t.prototype._parseTagStatistic=function(t){return new a(t)},t.prototype.list=function(t,e){var r=this;return this.request.get((0,s.default)(this.baseRoute,t,"/tags"),e).then((function(t){return r._parseDomainTagsList(t)}))},t.prototype.get=function(t,e){return this.request.get((0,s.default)(this.baseRoute,t,"/tags",e)).then((function(t){return new i(t.body)}))},t.prototype.update=function(t,e,r){return this.request.put((0,s.default)(this.baseRoute,t,"/tags",e),r).then((function(t){return t.body}))},t.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}}))},t.prototype.statistic=function(t,e,r){var n=this;return this.request.get((0,s.default)(this.baseRoute,t,"/tags",e,"stats"),r).then((function(t){return n._parseTagStatistic(t)}))},t.prototype.countries=function(t,e){return this.request.get((0,s.default)(this.baseRoute,t,"/tags",e,"stats/aggregates/countries")).then((function(t){return t.body}))},t.prototype.providers=function(t,e){return this.request.get((0,s.default)(this.baseRoute,t,"/tags",e,"stats/aggregates/providers")).then((function(t){return t.body}))},t.prototype.devices=function(t,e){return this.request.get((0,s.default)(this.baseRoute,t,"/tags",e,"stats/aggregates/devices")).then((function(t){return t.body}))},t}();e.default=u},955: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}),e.DomainTemplateItem=void 0;var s=o(r(78)),i=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=n({},t);return e.createdAt=new Date(t.createdAt),e})))};e.DomainTemplateItem=i;var a=function(){function t(t){this.request=t,this.baseRoute="/v3/"}return t.prototype.parseCreationResponse=function(t){return new i(t.body.template)},t.prototype.parseCreationVersionResponse=function(t){var e={};return e.status=t.status,e.message=t.body.message,t.body&&t.body.template&&(e.template=new i(t.body.template)),e},t.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},t.prototype.parseNotificationResponse=function(t){var e={};return e.status=t.status,e.message=t.body.message,e},t.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},t.prototype.parseList=function(t){var e={};return e.items=t.body.items.map((function(t){return new i(t)})),e.pages=t.body.paging,e},t.prototype.parseListTemplateVersions=function(t){var e={};return e.template=new i(t.body.template),e.pages=t.body.paging,e},t.prototype.list=function(t,e){var r=this;return this.request.get((0,s.default)(this.baseRoute,t,"/templates"),e).then((function(t){return r.parseList(t)}))},t.prototype.get=function(t,e,r){return this.request.get((0,s.default)(this.baseRoute,t,"/templates/",e),r).then((function(t){return new i(t.body.template)}))},t.prototype.create=function(t,e){var r=this;return this.request.postWithFD((0,s.default)(this.baseRoute,t,"/templates"),e).then((function(t){return r.parseCreationResponse(t)}))},t.prototype.update=function(t,e,r){var n=this;return this.request.putWithFD((0,s.default)(this.baseRoute,t,"/templates/",e),r).then((function(t){return n.parseMutationResponse(t)}))},t.prototype.destroy=function(t,e){var r=this;return this.request.delete((0,s.default)(this.baseRoute,t,"/templates/",e)).then((function(t){return r.parseMutationResponse(t)}))},t.prototype.destroyAll=function(t){var e=this;return this.request.delete((0,s.default)(this.baseRoute,t,"/templates")).then((function(t){return e.parseNotificationResponse(t)}))},t.prototype.createVersion=function(t,e,r){var n=this;return this.request.postWithFD((0,s.default)(this.baseRoute,t,"/templates/",e,"/versions"),r).then((function(t){return n.parseCreationVersionResponse(t)}))},t.prototype.getVersion=function(t,e,r){return this.request.get((0,s.default)(this.baseRoute,t,"/templates/",e,"/versions/",r)).then((function(t){return new i(t.body.template)}))},t.prototype.updateVersion=function(t,e,r,n){var o=this;return this.request.putWithFD((0,s.default)(this.baseRoute,t,"/templates/",e,"/versions/",r),n).then((function(t){return o.parseMutateTemplateVersionResponse(t)}))},t.prototype.destroyVersion=function(t,e,r){var n=this;return this.request.delete((0,s.default)(this.baseRoute,t,"/templates/",e,"/versions/",r)).then((function(t){return n.parseMutateTemplateVersionResponse(t)}))},t.prototype.listVersions=function(t,e,r){var n=this;return this.request.get((0,s.default)(this.baseRoute,t,"/templates",e,"/versions"),r).then((function(t){return n.parseListTemplateVersions(t)}))},t}();e.default=a},142: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,s=e.body,i=void 0===s?{}:s,a=this,u=i.message,c=i.error;return(a=t.call(this)||this).stack="",a.status=r,a.message=o||c||n,a.details=u,a}return n(e,t),e}(Error);e.default=o},22: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 s=o(r(78)),i=function(){function t(t){this.request=t}return t.prototype._parsePageNumber=function(t){return t.split("/").pop()||""},t.prototype._parsePage=function(t,e){return{id:t,number:this._parsePageNumber(e),url:e}},t.prototype._parsePageLinks=function(t){var e=this;return Object.entries(t.body.paging).reduce((function(t,r){var n=r[0],o=r[1];return t[n]=e._parsePage(n,o),t}),{})},t.prototype._parseEventList=function(t){return{items:t.body.items,pages:this._parsePageLinks(t)}},t.prototype.get=function(t,e){var r,o=this,i=n({},e);return i&&i.page?(r=(0,s.default)("/v3",t,"events",i.page),delete i.page):r=(0,s.default)("/v3",t,"events"),this.request.get(r,i).then((function(t){return o._parseEventList(t)}))},t}();e.default=i},150: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(){function t(t){this.FormDataConstructor=t}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){return["attachment","inline","file"].includes(n)?(e.addFilesToFD(n,t[n],r),r):"message"===n?(e.addMimeDataToFD(n,t[n],r),r):(e.addCommonPropertyToFD(n,t[n],r),r)}),new this.FormDataConstructor)},t.prototype.isNodeFormData=function(t){return void 0!==t.getHeaders},t.prototype.getAttachmentOptions=function(t){if("object"!=typeof t||this.isStream(t))return{};var e=t.filename,n=t.contentType,o=t.knownLength;return r(r(r({},e?{filename:e}:{filename:"file"}),n&&{contentType:n}),o&&{knownLength:o})},t.prototype.addMimeDataToFD=function(t,e,r){this.isNodeFormData(r)?Buffer.isBuffer(e)&&r.append(t,e,{filename:"MimeMessage"}):r.append(t,e,"MimeMessage")},t.prototype.addFilesToFD=function(t,e,r){var n=this,o=function(t,e,r){var o=n.isStream(e)?e:e.data,s=n.getAttachmentOptions(e);n.isNodeFormData(r)?r.append(t,o,s):r.append(t,o,s.filename)};Array.isArray(e)?e.forEach((function(e){o(t,e,r)})):o(t,e,r)},t.prototype.isStream=function(t){return"object"==typeof t&&"function"==typeof t.pipe},t.prototype.addCommonPropertyToFD=function(t,e,r){Array.isArray(e)?e.forEach((function(e){r.append(t,e)})):null!=e&&r.append(t,e)},t}();e.default=n},175: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(475)),s=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 o.default(t,this.formData)},t}();e.default=s},990:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SuppressionModels=void 0,function(t){t.BOUNCES="bounces",t.COMPLAINTS="complaints",t.UNSUBSCRIBES="unsubscribes",t.WHITELISTS="whitelists"}(e.SuppressionModels||(e.SuppressionModels={}))},602: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,s){function i(t){try{u(n.next(t))}catch(t){s(t)}}function a(t){try{u(n.throw(t))}catch(t){s(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(i,a)}u((n=n.apply(t,e||[])).next())}))},o=this&&this.__generator||function(t,e){var r,n,o,s,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return s={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function a(s){return function(a){return function(s){if(r)throw new TypeError("Generator is already executing.");for(;i;)try{if(r=1,n&&(o=2&s[0]?n.return:s[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,s[1])).done)return o;switch(n=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,n=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){i.label=s[1];break}if(6===s[0]&&i.label<o[1]){i.label=o[1],o=s;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(s);break}o[2]&&i.ops.pop(),i.trys.pop();continue}s=e.call(t,i)}catch(t){s=[6,t],n=0}finally{r=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,a])}}};Object.defineProperty(e,"__esModule",{value:!0});var s=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=s},345:function(t,e){"use strict";var r=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,s){function i(t){try{u(n.next(t))}catch(t){s(t)}}function a(t){try{u(n.throw(t))}catch(t){s(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(i,a)}u((n=n.apply(t,e||[])).next())}))},n=this&&this.__generator||function(t,e){var r,n,o,s,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return s={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function a(s){return function(a){return function(s){if(r)throw new TypeError("Generator is already executing.");for(;i;)try{if(r=1,n&&(o=2&s[0]?n.return:s[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,s[1])).done)return o;switch(n=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,n=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){i.label=s[1];break}if(6===s[0]&&i.label<o[1]){i.label=o[1],o=s;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(s);break}o[2]&&i.ops.pop(),i.trys.pop();continue}s=e.call(t,i)}catch(t){s=[6,t],n=0}finally{r=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,a])}}};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},126: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(){function t(t,e){this.request=t,this.baseRoute="/v3/lists",this.members=e}return t.prototype.parseValidationResult=function(t,e){return{status:t,validationResult:r(r({},e),{created_at:new Date(1e3*e.created_at)})}},t.prototype.list=function(t){return this.request.get("".concat(this.baseRoute,"/pages"),t).then((function(t){return t.body.items}))},t.prototype.get=function(t){return this.request.get("".concat(this.baseRoute,"/").concat(t)).then((function(t){return t.body.list}))},t.prototype.create=function(t){return this.request.postWithFD(this.baseRoute,t).then((function(t){return t.body.list}))},t.prototype.update=function(t,e){return this.request.putWithFD("".concat(this.baseRoute,"/").concat(t),e).then((function(t){return t.body.list}))},t.prototype.destroy=function(t){return this.request.delete("".concat(this.baseRoute,"/").concat(t)).then((function(t){return t.body}))},t.prototype.validate=function(t){return this.request.post("".concat(this.baseRoute,"/").concat(t,"/validate"),{}).then((function(t){return r({status:t.status},t.body)}))},t.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)}))},t.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}}))},t}();e.default=n},135: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(){function t(t){this.request=t,this.baseRoute="/v3/lists"}return t.prototype.checkAndUpdateData=function(t){var e=r({},t);return"object"==typeof t.vars&&(e.vars=JSON.stringify(e.vars)),"boolean"==typeof t.subscribed&&(e.subscribed=t.subscribed?"yes":"no"),e},t.prototype.listMembers=function(t,e){return this.request.get("".concat(this.baseRoute,"/").concat(t,"/members/pages"),e).then((function(t){return t.body.items}))},t.prototype.getMember=function(t,e){return this.request.get("".concat(this.baseRoute,"/").concat(t,"/members/").concat(e)).then((function(t){return t.body.member}))},t.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}))},t.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}))},t.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}))},t.prototype.destroyMember=function(t,e){return this.request.delete("".concat(this.baseRoute,"/").concat(t,"/members/").concat(e)).then((function(t){return t.body}))},t}();e.default=n},197: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(){function t(t){this.request=t}return t.prototype._parseResponse=function(t){return r({status:t.status},t.body)},t.prototype.create=function(t,e){return e.message?this.request.postWithFD("/v3/".concat(t,"/messages.mime"),e).then(this._parseResponse):this.request.postWithFD("/v3/".concat(t,"/messages"),e).then(this._parseResponse)},t}();e.default=n},587:(t,e)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(t){this.request=t}return t.prototype.list=function(){return this.request.get("/v4/address/validate/bulk").then((function(t){return t.body}))},t.prototype.get=function(t){return this.request.get("/v4/address/validate/bulk/".concat(t)).then((function(t){return t.body}))},t.prototype.create=function(t,e){return this.request.postWithFD("/v4/address/validate/bulk/".concat(t),e).then((function(t){return t.body}))},t.prototype.destroy=function(t){return this.request.delete("/v4/address/validate/bulk/".concat(t)).then((function(t){return t}))},t}();e.default=r},438: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]}),s=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)&&o(e,t,r);return s(e,t),e},a=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,s){function i(t){try{u(n.next(t))}catch(t){s(t)}}function a(t){try{u(n.throw(t))}catch(t){s(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(i,a)}u((n=n.apply(t,e||[])).next())}))},u=this&&this.__generator||function(t,e){var r,n,o,s,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return s={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function a(s){return function(a){return function(s){if(r)throw new TypeError("Generator is already executing.");for(;i;)try{if(r=1,n&&(o=2&s[0]?n.return:s[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,s[1])).done)return o;switch(n=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,n=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){i.label=s[1];break}if(6===s[0]&&i.label<o[1]){i.label=o[1],o=s;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(s);break}o[2]&&i.ops.pop(),i.trys.pop();continue}s=e.call(t,i)}catch(t){s=[6,t],n=0}finally{r=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,a])}}},c=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var p=i(r(501)),h=c(r(78)),f=c(r(899)),l=c(r(142)),d=c(r(150)),y=function(){function t(t,e){this.username=t.username,this.key=t.key,this.url=t.url,this.timeout=t.timeout,this.headers=t.headers||{},this.formDataBuilder=new d.default(e)}return t.prototype.request=function(t,e,r){return a(this,void 0,void 0,(function(){var o,s,i,a,c,d,y;return u(this,(function(u){switch(u.label){case 0:return o=n({},r),s=p.encode("".concat(this.username,":").concat(this.key)),i=o.headers?o.headers:{},a=n(n({Authorization:"Basic ".concat(s)},this.headers),i),null==o||delete o.headers,c=n({},o),(null==o?void 0:o.query)&&Object.getOwnPropertyNames(null==o?void 0:o.query).length>0&&(c.searchParams=o.query,delete c.query),[4,(0,f.default)((0,h.default)(this.url,e),n({method:t.toLocaleUpperCase(),headers:a,throwHttpErrors:!1,timeout:this.timeout},c))];case 1:return(null==(d=u.sent())?void 0:d.ok)?[3,3]:[4,this.getResponseBody(d)];case 2:throw y=u.sent(),new l.default({status:null==d?void 0:d.status,statusText:null==d?void 0:d.statusText,body:y.body});case 3:return[4,this.getResponseBody(d)];case 4:return[2,u.sent()]}}))}))},t.prototype.getResponseBody=function(t){return a(this,void 0,void 0,(function(){var e,r,n;return u(this,(function(o){switch(o.label){case 0:e={body:{},status:null==t?void 0:t.status},r="",o.label=1;case 1:return o.trys.push([1,3,,4]),[4,t.text()];case 2:return r=o.sent(),n=JSON.parse(r),e.body=n,[2,e];case 3:return o.sent(),e.status=400,e.body={message:r},[2,e];case 4:return[2]}}))}))},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,s){void 0===s&&(s=!0);var i={};s&&(i={"Content-Type":"application/x-www-form-urlencoded"});var a=n(n(n({},i),{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,{},!1)},t.prototype.putWithFD=function(t,e){var r=this.formDataBuilder.createFormData(e);return this.command("put",t,r,{},!1)},t.prototype.patchWithFD=function(t,e){var r=this.formDataBuilder.createFormData(e);return this.command("patch",t,r,{},!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=y},277:(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},747: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.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,s=e.length;o<s;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))},s=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var i=s(r(78)),a=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=n({},t);return e.time=new Date(t.time),e}))},u=function(){function t(t){this.request=t}return t.prototype.prepareSearchParams=function(t){var e=[];return"object"==typeof t&&Object.keys(t).length&&(e=Object.entries(t).reduce((function(t,e){var r=e[0],n=e[1];if(Array.isArray(n)&&n.length){var s=n.map((function(t){return[r,t]}));return o(o([],t,!0),s,!0)}return t.push([r,n]),t}),[])),e},t.prototype._parseStats=function(t){return new a(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=u},778: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)}),s=this&&this.__spreadArray||function(t,e,r){if(r||2===arguments.length)for(var n,o=0,s=e.length;o<s;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))},i=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0}),e.WhiteList=e.Unsubscribe=e.Complaint=e.Bounce=e.Suppression=void 0;var a=i(r(78)),u=r(990),c=i(r(142)),p={headers:{"Content-Type":"application/json"}},h=function(t){this.type=t};e.Suppression=h;var f=function(t){function e(e){var r=t.call(this,u.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}(h);e.Bounce=f;var l=function(t){function e(e){var r=t.call(this,u.SuppressionModels.COMPLAINTS)||this;return r.address=e.address,r.created_at=new Date(e.created_at),r}return o(e,t),e}(h);e.Complaint=l;var d=function(t){function e(e){var r=t.call(this,u.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}(h);e.Unsubscribe=d;var y=function(t){function e(e){var r=t.call(this,u.SuppressionModels.WHITELISTS)||this;return r.value=e.value,r.reason=e.reason,r.createdAt=new Date(e.createdAt),r}return o(e,t),e}(h);e.WhiteList=y;var b=function(){function t(t){this.request=t,this.models=new Map,this.models.set("bounces",f),this.models.set("complaints",l),this.models.set("unsubscribes",d),this.models.set("whitelists",y)}return t.prototype._parsePage=function(t,e){var r=new URL(e).searchParams;return{id:t,page:r.has("page")?r.get("page"):void 0,address:r.has("address")?r.get("address"):void 0,url:e}},t.prototype._parsePageLinks=function(t){var e=this;return Object.entries(t.body.paging).reduce((function(t,r){var n=r[0],o=r[1];return t[n]=e._parsePage(n,o),t}),{})},t.prototype._parseList=function(t,e){var r={};return r.items=t.body.items.map((function(t){return new e(t)})),r.pages=this._parsePageLinks(t),r},t.prototype._parseItem=function(t,e){return new e(t)},t.prototype.createWhiteList=function(t,e){if(Array.isArray(e))throw new c.default({status:400,statusText:"Data property should be an object",body:{message:"Whitelist's creation process does not support multiple creations. Data property should be an object"}});return this.request.postWithFD((0,a.default)("v3",t,"whitelists"),e).then(this.prepareResponse)},t.prototype.checkType=function(t){if(!this.models.has(t))throw new c.default({status:400,statusText:"Unknown type value",body:{message:"Type may be only one of [bounces, complaints, unsubscribes, whitelists]"}})},t.prototype.prepareResponse=function(t){return{message:t.body.message,type:t.body.type||"",value:t.body.value||"",status:t.status}},t.prototype.list=function(t,e,r){var n=this;this.checkType(e);var o=this.models.get(e);return this.request.get((0,a.default)("v3",t,e),r).then((function(t){return n._parseList(t,o)}))},t.prototype.get=function(t,e,r){var n=this;this.checkType(e);var o=this.models.get(e);return this.request.get((0,a.default)("v3",t,e,encodeURIComponent(r))).then((function(t){return n._parseItem(t.body,o)}))},t.prototype.create=function(t,e,r){var n;return this.checkType(e),"whitelists"===e?this.createWhiteList(t,r):(n=Array.isArray(r)?s([],r,!0):[r],this.request.post((0,a.default)("v3",t,e),JSON.stringify(n),p).then(this.prepareResponse))},t.prototype.destroy=function(t,e,r){return this.checkType(e),this.request.delete((0,a.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}}))},t}();e.default=b,t.exports=b},721:function(t,e){"use strict";var r=this&&this.__awaiter||function(t,e,r,n){return new(r||(r=Promise))((function(o,s){function i(t){try{u(n.next(t))}catch(t){s(t)}}function a(t){try{u(n.throw(t))}catch(t){s(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(i,a)}u((n=n.apply(t,e||[])).next())}))},n=this&&this.__generator||function(t,e){var r,n,o,s,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return s={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(s[Symbol.iterator]=function(){return this}),s;function a(s){return function(a){return function(s){if(r)throw new TypeError("Generator is already executing.");for(;i;)try{if(r=1,n&&(o=2&s[0]?n.return:s[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,s[1])).done)return o;switch(n=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,n=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==s[0]&&2!==s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){i.label=s[1];break}if(6===s[0]&&i.label<o[1]){i.label=o[1],o=s;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(s);break}o[2]&&i.ops.pop(),i.trys.pop();continue}s=e.call(t,i)}catch(t){s=[6,t],n=0}finally{r=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,a])}}};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},750: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(78)),s=function(t,e){this.id=t,this.url=e},i=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;return o||(o=(null==n?void 0:n.urls)&&n.urls.length?n.urls[0]:void 0),new s(t,o)}},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=i},501:function(t,e,r){var n;t=r.nmd(t),function(o){var s=e,i=(t&&t.exports,"object"==typeof r.g&&r.g);i.global!==i&&i.window;var a=function(t){this.message=t};(a.prototype=new Error).name="InvalidCharacterError";var u=function(t){throw new a(t)},c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",p=/[\t\n\f\r ]/g,h={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,s=t.length%3,i="",a=-1,p=t.length-s;++a<p;)e=t.charCodeAt(a)<<16,r=t.charCodeAt(++a)<<8,n=t.charCodeAt(++a),i+=c.charAt((o=e+r+n)>>18&63)+c.charAt(o>>12&63)+c.charAt(o>>6&63)+c.charAt(63&o);return 2==s?(e=t.charCodeAt(a)<<8,r=t.charCodeAt(++a),i+=c.charAt((o=e+r)>>10)+c.charAt(o>>4&63)+c.charAt(o<<2&63)+"="):1==s&&(o=t.charCodeAt(a),i+=c.charAt(o>>2)+c.charAt(o<<4&63)+"=="),i},decode:function(t){var e=(t=String(t).replace(p,"")).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,s="",i=-1;++i<e;)n=c.indexOf(t.charAt(i)),r=o%4?64*r+n:n,o++%4&&(s+=String.fromCharCode(255&r>>(-2*o&6)));return s},version:"1.0.0"};void 0===(n=function(){return h}.call(e,r,e,t))||(t.exports=n)}()},899:(t,e,r)=>{"use strict";r.r(e),r.d(e,{default:()=>D});const n={},o=t=>"undefined"!=typeof self&&self&&t in self?self:"undefined"!=typeof window&&window&&t in window?window:void 0!==r.g&&r.g&&t in r.g?r.g:"undefined"!=typeof globalThis&&globalThis?globalThis:void 0,s=["Headers","Request","Response","ReadableStream","fetch","AbortController","FormData"];for(const t of s)Object.defineProperty(n,t,{get(){const e=o(t),r=e&&e[t];return"function"==typeof r?r.bind(e):r}});const i=t=>null!==t&&"object"==typeof t,a="function"==typeof n.AbortController,u="function"==typeof n.ReadableStream,c="function"==typeof n.FormData,p=(t,e)=>{const r=new n.Headers(t||{}),o=e instanceof n.Headers,s=new n.Headers(e||{});for(const[t,e]of s)o&&"undefined"===e||void 0===e?r.delete(t):r.set(t,e);return r},h=(...t)=>{let e={},r={};for(const n of t){if(Array.isArray(n))Array.isArray(e)||(e=[]),e=[...e,...n];else if(i(n)){for(let[t,r]of Object.entries(n))i(r)&&t in e&&(r=h(e[t],r)),e={...e,[t]:r};i(n.headers)&&(r=p(r,n.headers))}e.headers=r}return e},f=["get","post","put","patch","head","delete"],l={json:"application/json",text:"text/*",formData:"multipart/form-data",arrayBuffer:"*/*",blob:"*/*"},d=[413,429,503],y=Symbol("stop");class HTTPError extends Error{constructor(t){super(t.statusText||String(0===t.status||t.status?t.status:"Unknown response error")),this.name="HTTPError",this.response=t}}class TimeoutError extends Error{constructor(t){super("Request timed out"),this.name="TimeoutError",this.request=t}}const b=t=>new Promise((e=>setTimeout(e,t))),v=t=>f.includes(t)?t.toUpperCase():t,m={limit:2,methods:["get","put","head","delete","options","trace"],statusCodes:[408,413,429,500,502,503,504],afterStatusCodes:d},g=(t={})=>{if("number"==typeof t)return{...m,limit:t};if(t.methods&&!Array.isArray(t.methods))throw new Error("retry.methods must be an array");if(t.statusCodes&&!Array.isArray(t.statusCodes))throw new Error("retry.statusCodes must be an array");return{...m,...t,afterStatusCodes:d}},_=2147483647;class Ky{constructor(t,e={}){if(this._retryCount=0,this._input=t,this._options={credentials:this._input.credentials||"same-origin",...e,headers:p(this._input.headers,e.headers),hooks:h({beforeRequest:[],beforeRetry:[],afterResponse:[]},e.hooks),method:v(e.method||this._input.method),prefixUrl:String(e.prefixUrl||""),retry:g(e.retry),throwHttpErrors:!1!==e.throwHttpErrors,timeout:void 0===e.timeout?1e4:e.timeout,fetch:e.fetch||n.fetch},"string"!=typeof this._input&&!(this._input instanceof URL||this._input instanceof n.Request))throw new TypeError("`input` must be a string, URL, or Request");if(this._options.prefixUrl&&"string"==typeof this._input){if(this._input.startsWith("/"))throw new Error("`input` must not begin with a slash when using `prefixUrl`");this._options.prefixUrl.endsWith("/")||(this._options.prefixUrl+="/"),this._input=this._options.prefixUrl+this._input}if(a&&(this.abortController=new n.AbortController,this._options.signal&&this._options.signal.addEventListener("abort",(()=>{this.abortController.abort()})),this._options.signal=this.abortController.signal),this.request=new n.Request(this._input,this._options),this._options.searchParams){const t="?"+new URLSearchParams(this._options.searchParams).toString(),e=this.request.url.replace(/(?:\?.*?)?(?=#|$)/,t);!(c&&this._options.body instanceof n.FormData||this._options.body instanceof URLSearchParams)||this._options.headers&&this._options.headers["content-type"]||this.request.headers.delete("content-type"),this.request=new n.Request(new n.Request(e,this.request),this._options)}void 0!==this._options.json&&(this._options.body=JSON.stringify(this._options.json),this.request.headers.set("content-type","application/json"),this.request=new n.Request(this.request,{body:this._options.body}));const r=async()=>{if(this._options.timeout>_)throw new RangeError("The `timeout` option cannot be greater than 2147483647");await b(1);let t=await this._fetch();for(const e of this._options.hooks.afterResponse){const r=await e(this.request,this._options,this._decorateResponse(t.clone()));r instanceof n.Response&&(t=r)}if(this._decorateResponse(t),!t.ok&&this._options.throwHttpErrors)throw new HTTPError(t);if(this._options.onDownloadProgress){if("function"!=typeof this._options.onDownloadProgress)throw new TypeError("The `onDownloadProgress` option must be a function");if(!u)throw new Error("Streams are not supported in your environment. `ReadableStream` is missing.");return this._stream(t.clone(),this._options.onDownloadProgress)}return t},o=this._options.retry.methods.includes(this.request.method.toLowerCase())?this._retry(r):r();for(const[t,r]of Object.entries(l))o[t]=async()=>{this.request.headers.set("accept",this.request.headers.get("accept")||r);const n=(await o).clone();if("json"===t){if(204===n.status)return"";if(e.parseJson)return e.parseJson(await n.text())}return n[t]()};return o}_calculateRetryDelay(t){if(this._retryCount++,this._retryCount<this._options.retry.limit&&!(t instanceof TimeoutError)){if(t instanceof HTTPError){if(!this._options.retry.statusCodes.includes(t.response.status))return 0;const e=t.response.headers.get("Retry-After");if(e&&this._options.retry.afterStatusCodes.includes(t.response.status)){let t=Number(e);return Number.isNaN(t)?t=Date.parse(e)-Date.now():t*=1e3,void 0!==this._options.retry.maxRetryAfter&&t>this._options.retry.maxRetryAfter?0:t}if(413===t.response.status)return 0}return.3*2**(this._retryCount-1)*1e3}return 0}_decorateResponse(t){return this._options.parseJson&&(t.json=async()=>this._options.parseJson(await t.text())),t}async _retry(t){try{return await t()}catch(e){const r=Math.min(this._calculateRetryDelay(e),_);if(0!==r&&this._retryCount>0){await b(r);for(const t of this._options.hooks.beforeRetry){if(await t({request:this.request,options:this._options,error:e,retryCount:this._retryCount})===y)return}return this._retry(t)}if(this._options.throwHttpErrors)throw e}}async _fetch(){for(const t of this._options.hooks.beforeRequest){const e=await t(this.request,this._options);if(e instanceof Request){this.request=e;break}if(e instanceof Response)return e}return!1===this._options.timeout?this._options.fetch(this.request.clone()):(t=this.request.clone(),e=this.abortController,r=this._options,new Promise(((n,o)=>{const s=setTimeout((()=>{e&&e.abort(),o(new TimeoutError(t))}),r.timeout);r.fetch(t).then(n).catch(o).then((()=>{clearTimeout(s)}))})));var t,e,r}_stream(t,e){const r=Number(t.headers.get("content-length"))||0;let o=0;return new n.Response(new n.ReadableStream({start(n){const s=t.body.getReader();e&&e({percent:0,transferredBytes:0,totalBytes:r},new Uint8Array),async function t(){const{done:i,value:a}=await s.read();if(i)n.close();else{if(e){o+=a.byteLength;e({percent:0===r?0:o/r,transferredBytes:o,totalBytes:r},a)}n.enqueue(a),t()}}()}}))}}const w=(...t)=>{for(const e of t)if((!i(e)||Array.isArray(e))&&void 0!==e)throw new TypeError("The `options` argument must be an object");return h({},...t)},q=t=>{const e=(e,r)=>new Ky(e,w(t,r));for(const r of f)e[r]=(e,n)=>new Ky(e,w(t,n,{method:r}));return e.HTTPError=HTTPError,e.TimeoutError=TimeoutError,e.create=t=>q(w(t)),e.extend=e=>q(w(t,e)),e.stop=y,e},D=q()},78:function(t,e,r){var n,o,s;s=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 s=e.join("/"),i=(s=s.replace(/\/(\?|&|#[^!])/g,"$1")).split("?");return s=i.shift()+(i.length>0?"?":"")+i.join("&")}return function(){return t("object"==typeof arguments[0]?arguments[0]:[].slice.call(arguments))}},t.exports?t.exports=s():void 0===(o="function"==typeof(n=s)?n.call(e,r,e,t):n)||(t.exports=o)}},e={};function r(n){var o=e[n];if(void 0!==o)return o.exports;var s=e[n]={id:n,loaded:!1,exports:{}};return t[n].call(s.exports,s,s.exports,r),s.loaded=!0,s.exports}return r.d=(t,e)=>{for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},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.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.nmd=t=>(t.paths=[],t.children||(t.children=[]),t),r(175)})()));
3
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,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RUFBb0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL2NsaWVudC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL2RvbWFpbnMudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9kb21haW5zQ3JlZGVudGlhbHMudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9kb21haW5zVGFncy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL2RvbWFpbnNUZW1wbGF0ZXMudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9lcnJvci50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL2V2ZW50cy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL2Zvcm1EYXRhQnVpbGRlci50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvaW50ZXJmYWNlcy9TdXByZXNzaW9ucy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL2lwLXBvb2xzLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvaXBzLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvbGlzdHMudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9tYWlsTGlzdE1lbWJlcnMudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9tZXNzYWdlcy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL211bHRpcGxlVmFsaWRhdGlvbi50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL3JlcXVlc3QudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9yb3V0ZXMudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL2xpYi9zdGF0cy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL3N1cHByZXNzaW9ucy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbGliL3ZhbGlkYXRlLnRzIiwid2VicGFjazovL21haWxndW4uanMvLi9saWIvd2ViaG9va3MudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy8uL25vZGVfbW9kdWxlcy9iYXNlLTY0L2Jhc2U2NC5qcyIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzLy4vbm9kZV9tb2R1bGVzL2t5L2luZGV4LmpzIiwid2VicGFjazovL21haWxndW4uanMvLi9ub2RlX21vZHVsZXMvdXJsLWpvaW4vbGliL3VybC1qb2luLmpzIiwid2VicGFjazovL21haWxndW4uanMvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy93ZWJwYWNrL3J1bnRpbWUvZ2xvYmFsIiwid2VicGFjazovL21haWxndW4uanMvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9tYWlsZ3VuLmpzL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vbWFpbGd1bi5qcy93ZWJwYWNrL3J1bnRpbWUvbm9kZSBtb2R1bGUgZGVjb3JhdG9yIiwid2VicGFjazovL21haWxndW4uanMvd2VicGFjay9zdGFydHVwIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGNhbWVsY2FzZSAqL1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0JztcbmltcG9ydCBPcHRpb25zIGZyb20gJy4vaW50ZXJmYWNlcy9PcHRpb25zJztcbmltcG9ydCB7IFJlcXVlc3RPcHRpb25zIH0gZnJvbSAnLi9pbnRlcmZhY2VzL1JlcXVlc3RPcHRpb25zJztcblxuaW1wb3J0IERvbWFpbkNsaWVudCBmcm9tICcuL2RvbWFpbnMnO1xuaW1wb3J0IEV2ZW50Q2xpZW50IGZyb20gJy4vZXZlbnRzJztcbmltcG9ydCBTdGF0c0NsaWVudCBmcm9tICcuL3N0YXRzJztcbmltcG9ydCBTdXBwcmVzc2lvbkNsaWVudCBmcm9tICcuL3N1cHByZXNzaW9ucyc7XG5pbXBvcnQgV2ViaG9va0NsaWVudCBmcm9tICcuL3dlYmhvb2tzJztcbmltcG9ydCBNZXNzYWdlc0NsaWVudCBmcm9tICcuL21lc3NhZ2VzJztcbmltcG9ydCBSb3V0ZXNDbGllbnQgZnJvbSAnLi9yb3V0ZXMnO1xuaW1wb3J0IFZhbGlkYXRlQ2xpZW50IGZyb20gJy4vdmFsaWRhdGUnO1xuaW1wb3J0IElwc0NsaWVudCBmcm9tICcuL2lwcyc7XG5pbXBvcnQgSXBQb29sc0NsaWVudCBmcm9tICcuL2lwLXBvb2xzJztcbmltcG9ydCBMaXN0c0NsaWVudCBmcm9tICcuL2xpc3RzJztcbmltcG9ydCBNYWlsTGlzdHNNZW1iZXJzIGZyb20gJy4vbWFpbExpc3RNZW1iZXJzJztcbmltcG9ydCB7IElucHV0Rm9ybURhdGEgfSBmcm9tICcuL2ludGVyZmFjZXMvSUZvcm1EYXRhJztcbmltcG9ydCBEb21haW5DcmVkZW50aWFsc0NsaWVudCBmcm9tICcuL2RvbWFpbnNDcmVkZW50aWFscyc7XG5pbXBvcnQgTXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50IGZyb20gJy4vbXVsdGlwbGVWYWxpZGF0aW9uJztcbmltcG9ydCBEb21haW5UZW1wbGF0ZXNDbGllbnQgZnJvbSAnLi9kb21haW5zVGVtcGxhdGVzJztcbmltcG9ydCBEb21haW5UYWdzQ2xpZW50IGZyb20gJy4vZG9tYWluc1RhZ3MnO1xuaW1wb3J0IHsgSU1haWxndW5DbGllbnQgfSBmcm9tICcuL2ludGVyZmFjZXMvSU1haWxndW5DbGllbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDbGllbnQgaW1wbGVtZW50cyBJTWFpbGd1bkNsaWVudCB7XG4gIHByaXZhdGUgcmVxdWVzdDtcblxuICBwdWJsaWMgZG9tYWlucztcbiAgcHVibGljIHdlYmhvb2tzO1xuICBwdWJsaWMgZXZlbnRzO1xuICBwdWJsaWMgc3RhdHM7XG4gIHB1YmxpYyBzdXBwcmVzc2lvbnM7XG4gIHB1YmxpYyBtZXNzYWdlcztcbiAgcHVibGljIHJvdXRlcztcbiAgcHVibGljIHZhbGlkYXRlO1xuICBwdWJsaWMgaXBzO1xuICBwdWJsaWMgaXBfcG9vbHM7XG4gIHB1YmxpYyBsaXN0cztcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBPcHRpb25zLCBmb3JtRGF0YTogSW5wdXRGb3JtRGF0YSkge1xuICAgIGNvbnN0IGNvbmZpZzogUmVxdWVzdE9wdGlvbnMgPSB7IC4uLm9wdGlvbnMgfSBhcyBSZXF1ZXN0T3B0aW9ucztcblxuICAgIGlmICghY29uZmlnLnVybCkge1xuICAgICAgY29uZmlnLnVybCA9ICdodHRwczovL2FwaS5tYWlsZ3VuLm5ldCc7XG4gICAgfVxuXG4gICAgaWYgKCFjb25maWcudXNlcm5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGFyYW1ldGVyIFwidXNlcm5hbWVcIiBpcyByZXF1aXJlZCcpO1xuICAgIH1cblxuICAgIGlmICghY29uZmlnLmtleSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJhbWV0ZXIgXCJrZXlcIiBpcyByZXF1aXJlZCcpO1xuICAgIH1cblxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICB0aGlzLnJlcXVlc3QgPSBuZXcgUmVxdWVzdChjb25maWcsIGZvcm1EYXRhKTtcbiAgICBjb25zdCBtYWlsTGlzdHNNZW1iZXJzID0gbmV3IE1haWxMaXN0c01lbWJlcnModGhpcy5yZXF1ZXN0KTtcbiAgICBjb25zdCBkb21haW5DcmVkZW50aWFsc0NsaWVudCA9IG5ldyBEb21haW5DcmVkZW50aWFsc0NsaWVudCh0aGlzLnJlcXVlc3QpO1xuICAgIGNvbnN0IGRvbWFpblRlbXBsYXRlc0NsaWVudCA9IG5ldyBEb21haW5UZW1wbGF0ZXNDbGllbnQodGhpcy5yZXF1ZXN0KTtcbiAgICBjb25zdCBkb21haW5UYWdzQ2xpZW50ID0gbmV3IERvbWFpblRhZ3NDbGllbnQodGhpcy5yZXF1ZXN0KTtcbiAgICBjb25zdCBtdWx0aXBsZVZhbGlkYXRpb25DbGllbnQgPSBuZXcgTXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50KHRoaXMucmVxdWVzdCk7XG5cbiAgICB0aGlzLmRvbWFpbnMgPSBuZXcgRG9tYWluQ2xpZW50KFxuICAgICAgdGhpcy5yZXF1ZXN0LFxuICAgICAgZG9tYWluQ3JlZGVudGlhbHNDbGllbnQsXG4gICAgICBkb21haW5UZW1wbGF0ZXNDbGllbnQsXG4gICAgICBkb21haW5UYWdzQ2xpZW50XG4gICAgKTtcbiAgICB0aGlzLndlYmhvb2tzID0gbmV3IFdlYmhvb2tDbGllbnQodGhpcy5yZXF1ZXN0KTtcbiAgICB0aGlzLmV2ZW50cyA9IG5ldyBFdmVudENsaWVudCh0aGlzLnJlcXVlc3QpO1xuICAgIHRoaXMuc3RhdHMgPSBuZXcgU3RhdHNDbGllbnQodGhpcy5yZXF1ZXN0KTtcbiAgICB0aGlzLnN1cHByZXNzaW9ucyA9IG5ldyBTdXBwcmVzc2lvbkNsaWVudCh0aGlzLnJlcXVlc3QpO1xuICAgIHRoaXMubWVzc2FnZXMgPSBuZXcgTWVzc2FnZXNDbGllbnQodGhpcy5yZXF1ZXN0KTtcbiAgICB0aGlzLnJvdXRlcyA9IG5ldyBSb3V0ZXNDbGllbnQodGhpcy5yZXF1ZXN0KTtcbiAgICB0aGlzLmlwcyA9IG5ldyBJcHNDbGllbnQodGhpcy5yZXF1ZXN0KTtcbiAgICB0aGlzLmlwX3Bvb2xzID0gbmV3IElwUG9vbHNDbGllbnQodGhpcy5yZXF1ZXN0KTtcbiAgICB0aGlzLmxpc3RzID0gbmV3IExpc3RzQ2xpZW50KHRoaXMucmVxdWVzdCwgbWFpbExpc3RzTWVtYmVycyk7XG4gICAgdGhpcy52YWxpZGF0ZSA9IG5ldyBWYWxpZGF0ZUNsaWVudCh0aGlzLnJlcXVlc3QsIG11bHRpcGxlVmFsaWRhdGlvbkNsaWVudCk7XG4gIH1cbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlIGNhbWVsY2FzZSAqL1xuaW1wb3J0IHVybGpvaW4gZnJvbSAndXJsLWpvaW4nO1xuaW1wb3J0IHtcbiAgRG9tYWluUmVzcG9uc2VEYXRhLFxuICBEZXN0cm95ZWREb21haW5SZXNwb25zZSxcbiAgRG9tYWluc1F1ZXJ5LFxuICBEb21haW5JbmZvLFxuICBEb21haW5MaXN0UmVzcG9uc2VEYXRhLFxuICBEb21haW5TaG9ydERhdGEsXG4gIEROU1JlY29yZCxcbiAgQ29ubmVjdGlvblNldHRpbmdzUmVzcG9uc2UsXG4gIENvbm5lY3Rpb25TZXR0aW5ncyxcbiAgVXBkYXRlZENvbm5lY3Rpb25TZXR0aW5ncyxcbiAgVXBkYXRlZENvbm5lY3Rpb25TZXR0aW5nc1JlcyxcbiAgREtJTUF1dGhvcml0eUluZm8sXG4gIFVwZGF0ZWRES0lNQXV0aG9yaXR5LFxuICBVcGRhdGVkREtJTUF1dGhvcml0eVJlc3BvbnNlLFxuICBES0lNU2VsZWN0b3JJbmZvLFxuICBVcGRhdGVkREtJTVNlbGVjdG9yUmVzcG9uc2UsXG4gIFdlYlByZWZpeEluZm8sXG4gIFVwZGF0ZWRXZWJQcmVmaXhSZXNwb25zZSxcbiAgUmVwbGFjZW1lbnRGb3JQb29sLFxuICBNZXNzYWdlUmVzcG9uc2UsXG59IGZyb20gJy4vaW50ZXJmYWNlcy9Eb21haW5zJztcblxuaW1wb3J0IEFQSVJlc3BvbnNlIGZyb20gJy4vaW50ZXJmYWNlcy9BcGlSZXNwb25zZSc7XG5pbXBvcnQgQVBJRXJyb3IgZnJvbSAnLi9lcnJvcic7XG5pbXBvcnQgQVBJRXJyb3JPcHRpb25zIGZyb20gJy4vaW50ZXJmYWNlcy9BUElFcnJvck9wdGlvbnMnO1xuXG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuL3JlcXVlc3QnO1xuaW1wb3J0IHtcbiAgRG9tYWluVHJhY2tpbmdSZXNwb25zZSxcbiAgRG9tYWluVHJhY2tpbmdEYXRhLFxuICBPcGVuVHJhY2tpbmdJbmZvLFxuICBDbGlja1RyYWNraW5nSW5mbyxcbiAgVW5zdWJzY3JpYmVUcmFja2luZ0luZm8sXG4gIFVwZGF0ZURvbWFpblRyYWNraW5nUmVzcG9uc2UsXG4gIFVwZGF0ZWRPcGVuVHJhY2tpbmdcbn0gZnJvbSAnLi9pbnRlcmZhY2VzL0RvbWFpblRyYWNraW5nJztcbmltcG9ydCB7IElEb21haW5DcmVkZW50aWFscyB9IGZyb20gJy4vaW50ZXJmYWNlcy9Eb21haW5DcmVkZW50aWFscyc7XG5pbXBvcnQgeyBJRG9tYWluVGVtcGxhdGVzQ2xpZW50IH0gZnJvbSAnLi9pbnRlcmZhY2VzL0RvbWFpblRlbXBsYXRlcyc7XG5pbXBvcnQgRG9tYWluQ3JlZGVudGlhbHNDbGllbnQgZnJvbSAnLi9kb21haW5zQ3JlZGVudGlhbHMnO1xuaW1wb3J0IERvbWFpblRlbXBsYXRlc0NsaWVudCBmcm9tICcuL2RvbWFpbnNUZW1wbGF0ZXMnO1xuaW1wb3J0IHsgSURvbWFpblRhZ3NDbGllbnQgfSBmcm9tICcuL2ludGVyZmFjZXMvRG9tYWluVGFncyc7XG5pbXBvcnQgRG9tYWluVGFnc0NsaWVudCBmcm9tICcuL2RvbWFpbnNUYWdzJztcblxuZXhwb3J0IGNsYXNzIERvbWFpbiB7XG4gIG5hbWU6IHN0cmluZztcbiAgcmVxdWlyZV90bHM6IGJvb2xlYW47XG4gIHNraXBfdmVyaWZpY2F0aW9uOiBib29sZWFuO1xuICBzdGF0ZTogc3RyaW5nO1xuICB3aWxkY2FyZDogYm9vbGVhbjtcbiAgc3BhbV9hY3Rpb246IHN0cmluZztcbiAgY3JlYXRlZF9hdDogc3RyaW5nO1xuICBzbXRwX3Bhc3N3b3JkOiBzdHJpbmc7XG4gIHNtdHBfbG9naW46IHN0cmluZztcbiAgdHlwZTogc3RyaW5nO1xuICByZWNlaXZpbmdfZG5zX3JlY29yZHM6IEROU1JlY29yZFtdIHwgbnVsbDtcbiAgc2VuZGluZ19kbnNfcmVjb3JkczogRE5TUmVjb3JkW10gfCBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKGRhdGE6IERvbWFpblNob3J0RGF0YSwgcmVjZWl2aW5nPzogRE5TUmVjb3JkW10gfCBudWxsLCBzZW5kaW5nPzogRE5TUmVjb3JkW10gfCBudWxsKSB7XG4gICAgdGhpcy5uYW1lID0gZGF0YS5uYW1lO1xuICAgIHRoaXMucmVxdWlyZV90bHMgPSBkYXRhLnJlcXVpcmVfdGxzO1xuICAgIHRoaXMuc2tpcF92ZXJpZmljYXRpb24gPSBkYXRhLnNraXBfdmVyaWZpY2F0aW9uO1xuICAgIHRoaXMuc3RhdGUgPSBkYXRhLnN0YXRlO1xuICAgIHRoaXMud2lsZGNhcmQgPSBkYXRhLndpbGRjYXJkO1xuICAgIHRoaXMuc3BhbV9hY3Rpb24gPSBkYXRhLnNwYW1fYWN0aW9uO1xuICAgIHRoaXMuY3JlYXRlZF9hdCA9IGRhdGEuY3JlYXRlZF9hdDtcbiAgICB0aGlzLnNtdHBfcGFzc3dvcmQgPSBkYXRhLnNtdHBfcGFzc3dvcmQ7XG4gICAgdGhpcy5zbXRwX2xvZ2luID0gZGF0YS5zbXRwX2xvZ2luO1xuICAgIHRoaXMudHlwZSA9IGRhdGEudHlwZTtcblxuICAgIHRoaXMucmVjZWl2aW5nX2Ruc19yZWNvcmRzID0gcmVjZWl2aW5nIHx8IG51bGw7XG4gICAgdGhpcy5zZW5kaW5nX2Ruc19yZWNvcmRzID0gc2VuZGluZyB8fCBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvbWFpbkNsaWVudCB7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG4gIHB1YmxpYyBkb21haW5DcmVkZW50aWFsczogSURvbWFpbkNyZWRlbnRpYWxzO1xuICBwdWJsaWMgZG9tYWluVGVtcGxhdGVzOiBJRG9tYWluVGVtcGxhdGVzQ2xpZW50O1xuICBwdWJsaWMgZG9tYWluVGFnczogSURvbWFpblRhZ3NDbGllbnQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcmVxdWVzdDogUmVxdWVzdCxcbiAgICBkb21haW5DcmVkZW50aWFsc0NsaWVudDogRG9tYWluQ3JlZGVudGlhbHNDbGllbnQsXG4gICAgZG9tYWluVGVtcGxhdGVzQ2xpZW50OiBEb21haW5UZW1wbGF0ZXNDbGllbnQsXG4gICAgZG9tYWluVGFnc0NsaWVudDogRG9tYWluVGFnc0NsaWVudFxuICApIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMuZG9tYWluQ3JlZGVudGlhbHMgPSBkb21haW5DcmVkZW50aWFsc0NsaWVudDtcbiAgICB0aGlzLmRvbWFpblRlbXBsYXRlcyA9IGRvbWFpblRlbXBsYXRlc0NsaWVudDtcbiAgICB0aGlzLmRvbWFpblRhZ3MgPSBkb21haW5UYWdzQ2xpZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFyc2VNZXNzYWdlKHJlc3BvbnNlOiBEZXN0cm95ZWREb21haW5SZXNwb25zZSkgOiBNZXNzYWdlUmVzcG9uc2Uge1xuICAgIHJldHVybiByZXNwb25zZS5ib2R5O1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFyc2VEb21haW5MaXN0KHJlc3BvbnNlOiBEb21haW5MaXN0UmVzcG9uc2VEYXRhKTogRG9tYWluW10ge1xuICAgIHJldHVybiByZXNwb25zZS5ib2R5Lml0ZW1zLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuIG5ldyBEb21haW4oaXRlbSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9wYXJzZURvbWFpbihyZXNwb25zZTogRG9tYWluUmVzcG9uc2VEYXRhKTogRG9tYWluIHtcbiAgICByZXR1cm4gbmV3IERvbWFpbihcbiAgICAgIHJlc3BvbnNlLmJvZHkuZG9tYWluLFxuICAgICAgcmVzcG9uc2UuYm9keS5yZWNlaXZpbmdfZG5zX3JlY29yZHMsXG4gICAgICByZXNwb25zZS5ib2R5LnNlbmRpbmdfZG5zX3JlY29yZHNcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFyc2VUcmFja2luZ1NldHRpbmdzKHJlc3BvbnNlOiBEb21haW5UcmFja2luZ1Jlc3BvbnNlKSA6IERvbWFpblRyYWNraW5nRGF0YSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmJvZHkudHJhY2tpbmc7XG4gIH1cblxuICBwcml2YXRlIF9wYXJzZVRyYWNraW5nVXBkYXRlKHJlc3BvbnNlOiBVcGRhdGVEb21haW5UcmFja2luZ1Jlc3BvbnNlKSA6VXBkYXRlZE9wZW5UcmFja2luZyB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmJvZHk7XG4gIH1cblxuICBsaXN0KHF1ZXJ5PzogRG9tYWluc1F1ZXJ5KTogUHJvbWlzZTxEb21haW5bXT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KCcvdjMvZG9tYWlucycsIHF1ZXJ5KVxuICAgICAgLnRoZW4oKHJlcyA6IEFQSVJlc3BvbnNlKSA9PiB0aGlzLl9wYXJzZURvbWFpbkxpc3QocmVzIGFzIERvbWFpbkxpc3RSZXNwb25zZURhdGEpKTtcbiAgfVxuXG4gIGdldChkb21haW46IHN0cmluZykgOiBQcm9taXNlPERvbWFpbj4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KGAvdjMvZG9tYWlucy8ke2RvbWFpbn1gKVxuICAgICAgLnRoZW4oKHJlcyA6IEFQSVJlc3BvbnNlKSA9PiB0aGlzLl9wYXJzZURvbWFpbihyZXMgYXMgRG9tYWluUmVzcG9uc2VEYXRhKSk7XG4gIH1cblxuICBjcmVhdGUoZGF0YTogRG9tYWluSW5mbykgOiBQcm9taXNlPERvbWFpbj4ge1xuICAgIGNvbnN0IHBvc3RPYmogPSB7IC4uLmRhdGEgfTtcbiAgICBpZiAoJ2ZvcmNlX2RraW1fYXV0aG9yaXR5JyBpbiBwb3N0T2JqICYmIHR5cGVvZiBwb3N0T2JqLmZvcmNlX2RraW1fYXV0aG9yaXR5ID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHBvc3RPYmouZm9yY2VfZGtpbV9hdXRob3JpdHkgPSBwb3N0T2JqLnRvU3RyaW5nKCkgPT09ICd0cnVlJyA/ICd0cnVlJyA6ICdmYWxzZSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKCcvdjMvZG9tYWlucycsIHBvc3RPYmopXG4gICAgICAudGhlbigocmVzIDogQVBJUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlRG9tYWluKHJlcyBhcyBEb21haW5SZXNwb25zZURhdGEpKTtcbiAgfVxuXG4gIHZlcmlmeShkb21haW46IHN0cmluZyk6IFByb21pc2U8RG9tYWluPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXQoYC92My9kb21haW5zLyR7ZG9tYWlufS92ZXJpZnlgKVxuICAgICAgLnRoZW4oKHJlcyA6IEFQSVJlc3BvbnNlKSA9PiB0aGlzLl9wYXJzZURvbWFpbihyZXMgYXMgRG9tYWluUmVzcG9uc2VEYXRhKSk7XG4gIH1cblxuICBkZXN0cm95KGRvbWFpbjogc3RyaW5nKTogUHJvbWlzZTxNZXNzYWdlUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZShgL3YzL2RvbWFpbnMvJHtkb21haW59YClcbiAgICAgIC50aGVuKChyZXMgOiBBUElSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VNZXNzYWdlKHJlcyBhcyBEZXN0cm95ZWREb21haW5SZXNwb25zZSkpO1xuICB9XG5cbiAgZ2V0Q29ubmVjdGlvbihkb21haW46IHN0cmluZyk6IFByb21pc2U8Q29ubmVjdGlvblNldHRpbmdzPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQoYC92My9kb21haW5zLyR7ZG9tYWlufS9jb25uZWN0aW9uYClcbiAgICAgIC50aGVuKChyZXMgOiBBUElSZXNwb25zZSkgPT4gcmVzIGFzIENvbm5lY3Rpb25TZXR0aW5nc1Jlc3BvbnNlKVxuICAgICAgLnRoZW4oKHJlczpDb25uZWN0aW9uU2V0dGluZ3NSZXNwb25zZSkgPT4gcmVzLmJvZHkuY29ubmVjdGlvbiBhcyBDb25uZWN0aW9uU2V0dGluZ3MpO1xuICB9XG5cbiAgdXBkYXRlQ29ubmVjdGlvbihkb21haW46IHN0cmluZywgZGF0YTogQ29ubmVjdGlvblNldHRpbmdzKTogUHJvbWlzZTxVcGRhdGVkQ29ubmVjdGlvblNldHRpbmdzPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXQoYC92My9kb21haW5zLyR7ZG9tYWlufS9jb25uZWN0aW9uYCwgZGF0YSlcbiAgICAgIC50aGVuKChyZXMgOiBBUElSZXNwb25zZSkgPT4gcmVzIGFzIFVwZGF0ZWRDb25uZWN0aW9uU2V0dGluZ3NSZXMpXG4gICAgICAudGhlbigocmVzOlVwZGF0ZWRDb25uZWN0aW9uU2V0dGluZ3NSZXMpID0+IHJlcy5ib2R5IGFzIFVwZGF0ZWRDb25uZWN0aW9uU2V0dGluZ3MpO1xuICB9XG5cbiAgLy8gVHJhY2tpbmdcblxuICBnZXRUcmFja2luZyhkb21haW46IHN0cmluZykgOiBQcm9taXNlPERvbWFpblRyYWNraW5nRGF0YT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4oJy92My9kb21haW5zJywgZG9tYWluLCAndHJhY2tpbmcnKSlcbiAgICAgIC50aGVuKHRoaXMuX3BhcnNlVHJhY2tpbmdTZXR0aW5ncyk7XG4gIH1cblxuICB1cGRhdGVUcmFja2luZyhcbiAgICBkb21haW46IHN0cmluZyxcbiAgICB0eXBlOiBzdHJpbmcsXG4gICAgZGF0YTogT3BlblRyYWNraW5nSW5mbyB8IENsaWNrVHJhY2tpbmdJbmZvIHwgVW5zdWJzY3JpYmVUcmFja2luZ0luZm9cbiAgKTogUHJvbWlzZTxVcGRhdGVkT3BlblRyYWNraW5nPiB7XG4gICAgaWYgKHR5cGVvZiBkYXRhPy5hY3RpdmUgPT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgbmV3IEFQSUVycm9yKHsgc3RhdHVzOiA0MDAsIHN0YXR1c1RleHQ6ICdSZWNlaXZlZCBib29sZWFuIHZhbHVlIGZvciBhY3RpdmUgcHJvcGVydHknLCBib2R5OiB7IG1lc3NhZ2U6ICdQcm9wZXJ0eSBcImFjdGl2ZVwiIG11c3QgY29udGFpbiBzdHJpbmcgdmFsdWUuJyB9IH0gYXMgQVBJRXJyb3JPcHRpb25zKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXRXaXRoRkQodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICd0cmFja2luZycsIHR5cGUpLCBkYXRhKVxuICAgICAgLnRoZW4oKHJlcyA6IEFQSVJlc3BvbnNlKSA9PiB0aGlzLl9wYXJzZVRyYWNraW5nVXBkYXRlKHJlcyBhcyBVcGRhdGVEb21haW5UcmFja2luZ1Jlc3BvbnNlKSk7XG4gIH1cblxuICAvLyBJUHNcblxuICBnZXRJcHMoZG9tYWluOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICdpcHMnKSlcbiAgICAgIC50aGVuKChyZXNwb25zZTogQVBJUmVzcG9uc2UpID0+IHJlc3BvbnNlPy5ib2R5Py5pdGVtcyk7XG4gIH1cblxuICBhc3NpZ25JcChkb21haW46IHN0cmluZywgaXA6IHN0cmluZyk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICdpcHMnKSwgeyBpcCB9KTtcbiAgfVxuXG4gIGRlbGV0ZUlwKGRvbWFpbjogc3RyaW5nLCBpcDogc3RyaW5nKTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKHVybGpvaW4oJy92My9kb21haW5zJywgZG9tYWluLCAnaXBzJywgaXApKTtcbiAgfVxuXG4gIGxpbmtJcFBvb2woZG9tYWluOiBzdHJpbmcsIHBvb2xfaWQ6IHN0cmluZyk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICdpcHMnKSwgeyBwb29sX2lkIH0pO1xuICB9XG5cbiAgdW5saW5rSXBQb2xsKGRvbWFpbjogc3RyaW5nLCByZXBsYWNlbWVudDogUmVwbGFjZW1lbnRGb3JQb29sKTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIGxldCBzZWFyY2hQYXJhbXMgPSAnJztcbiAgICBpZiAocmVwbGFjZW1lbnQucG9vbF9pZCAmJiByZXBsYWNlbWVudC5pcCkge1xuICAgICAgdGhyb3cgbmV3IEFQSUVycm9yKFxuICAgICAgICB7XG4gICAgICAgICAgc3RhdHVzOiA0MDAsXG4gICAgICAgICAgc3RhdHVzVGV4dDogJ1RvbyBtdWNoIGRhdGEgZm9yIHJlcGxhY2VtZW50JyxcbiAgICAgICAgICBib2R5OiB7IG1lc3NhZ2U6ICdQbGVhc2Ugc3BlY2lmeSBlaXRoZXIgcG9vbF9pZCBvciBpcCAobm90IGJvdGgpJyB9XG4gICAgICAgIH0gYXMgQVBJRXJyb3JPcHRpb25zXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAocmVwbGFjZW1lbnQucG9vbF9pZCkge1xuICAgICAgc2VhcmNoUGFyYW1zID0gYD9wb29sX2lkPSR7cmVwbGFjZW1lbnQucG9vbF9pZH1gO1xuICAgIH0gZWxzZSBpZiAocmVwbGFjZW1lbnQuaXApIHtcbiAgICAgIHNlYXJjaFBhcmFtcyA9IGA/aXA9JHtyZXBsYWNlbWVudC5pcH1gO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZSh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ2lwcycsICdpcF9wb29sJywgc2VhcmNoUGFyYW1zKSk7XG4gIH1cblxuICB1cGRhdGVES0lNQXV0aG9yaXR5KGRvbWFpbjogc3RyaW5nLCBkYXRhOiBES0lNQXV0aG9yaXR5SW5mbyk6IFByb21pc2U8VXBkYXRlZERLSU1BdXRob3JpdHk+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnB1dChgL3YzL2RvbWFpbnMvJHtkb21haW59L2RraW1fYXV0aG9yaXR5YCwge30sIHsgcXVlcnk6IGBzZWxmPSR7ZGF0YS5zZWxmfWAgfSlcbiAgICAgIC50aGVuKChyZXMgOiBBUElSZXNwb25zZSkgPT4gcmVzIGFzIFVwZGF0ZWRES0lNQXV0aG9yaXR5UmVzcG9uc2UpXG4gICAgICAudGhlbigocmVzIDogVXBkYXRlZERLSU1BdXRob3JpdHlSZXNwb25zZSkgPT4gcmVzLmJvZHkgYXMgVXBkYXRlZERLSU1BdXRob3JpdHkpO1xuICB9XG5cbiAgdXBkYXRlREtJTVNlbGVjdG9yKGRvbWFpbjogc3RyaW5nLCBkYXRhOiBES0lNU2VsZWN0b3JJbmZvKTogUHJvbWlzZTxVcGRhdGVkREtJTVNlbGVjdG9yUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnB1dChgL3YzL2RvbWFpbnMvJHtkb21haW59L2RraW1fc2VsZWN0b3JgLCB7fSwgeyBxdWVyeTogYGRraW1fc2VsZWN0b3I9JHtkYXRhLmRraW1TZWxlY3Rvcn1gIH0pXG4gICAgICAudGhlbigocmVzIDogQVBJUmVzcG9uc2UpID0+IHJlcyBhcyBVcGRhdGVkREtJTVNlbGVjdG9yUmVzcG9uc2UpO1xuICB9XG5cbiAgdXBkYXRlV2ViUHJlZml4KGRvbWFpbjogc3RyaW5nLCBkYXRhOiBXZWJQcmVmaXhJbmZvKTogUHJvbWlzZTxVcGRhdGVkV2ViUHJlZml4UmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnB1dChgL3YzL2RvbWFpbnMvJHtkb21haW59L3dlYl9wcmVmaXhgLCB7fSwgeyBxdWVyeTogYHdlYl9wcmVmaXg9JHtkYXRhLndlYlByZWZpeH1gIH0pXG4gICAgICAudGhlbigocmVzIDogQVBJUmVzcG9uc2UpID0+IHJlcyBhcyBVcGRhdGVkV2ViUHJlZml4UmVzcG9uc2UpO1xuICB9XG59XG4iLCJpbXBvcnQgdXJsam9pbiBmcm9tICd1cmwtam9pbic7XG5pbXBvcnQgQVBJUmVzcG9uc2UgZnJvbSAnLi9pbnRlcmZhY2VzL0FwaVJlc3BvbnNlJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vcmVxdWVzdCc7XG5cbmltcG9ydCB7XG4gIENyZWF0ZWRVcGRhdGVkRG9tYWluQ3JlZGVudGlhbHNSZXNwb25zZSxcbiAgRGVsZXRlZERvbWFpbkNyZWRlbnRpYWxzUmVzcG9uc2UsXG4gIERvbWFpbkNyZWRlbnRpYWxzLFxuICBEb21haW5DcmVkZW50aWFsc0xpc3QsXG4gIERvbWFpbkNyZWRlbnRpYWxzUXVlcnksXG4gIERvbWFpbkNyZWRlbnRpYWxzUmVzcG9uc2VEYXRhLFxuICBEb21haW5DcmVkZW50aWFsc1Jlc3VsdCxcbiAgSURvbWFpbkNyZWRlbnRpYWxzLFxuICBVcGRhdGVEb21haW5DcmVkZW50aWFsc0RhdGFcbn0gZnJvbSAnLi9pbnRlcmZhY2VzL0RvbWFpbkNyZWRlbnRpYWxzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRG9tYWluQ3JlZGVudGlhbHNDbGllbnQgaW1wbGVtZW50cyBJRG9tYWluQ3JlZGVudGlhbHMge1xuICBiYXNlUm91dGU6IHN0cmluZztcbiAgcmVxdWVzdDogUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0KSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICB0aGlzLmJhc2VSb3V0ZSA9ICcvdjMvZG9tYWlucy8nO1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFyc2VEb21haW5DcmVkZW50aWFsc0xpc3QoXG4gICAgcmVzcG9uc2U6IERvbWFpbkNyZWRlbnRpYWxzUmVzcG9uc2VEYXRhXG4gICk6IERvbWFpbkNyZWRlbnRpYWxzTGlzdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGl0ZW1zOiByZXNwb25zZS5ib2R5Lml0ZW1zLFxuICAgICAgdG90YWxDb3VudDogcmVzcG9uc2UuYm9keS50b3RhbF9jb3VudFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIF9wYXJzZU1lc3NhZ2VSZXNwb25zZShcbiAgICByZXNwb25zZTogQ3JlYXRlZFVwZGF0ZWREb21haW5DcmVkZW50aWFsc1Jlc3BvbnNlXG4gICk6IERvbWFpbkNyZWRlbnRpYWxzUmVzdWx0IHtcbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIG1lc3NhZ2U6IHJlc3BvbnNlLmJvZHkubWVzc2FnZVxuICAgIH0gYXMgRG9tYWluQ3JlZGVudGlhbHNSZXN1bHQ7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgX3BhcnNlRGVsZXRlZFJlc3BvbnNlKFxuICAgIHJlc3BvbnNlOkRlbGV0ZWREb21haW5DcmVkZW50aWFsc1Jlc3BvbnNlXG4gICk6IERvbWFpbkNyZWRlbnRpYWxzUmVzdWx0IHtcbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIG1lc3NhZ2U6IHJlc3BvbnNlLmJvZHkubWVzc2FnZSxcbiAgICAgIHNwZWM6IHJlc3BvbnNlLmJvZHkuc3BlY1xuICAgIH0gYXMgRG9tYWluQ3JlZGVudGlhbHNSZXN1bHQ7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgbGlzdChkb21haW46IHN0cmluZywgcXVlcnk/OiBEb21haW5DcmVkZW50aWFsc1F1ZXJ5KTogUHJvbWlzZTxEb21haW5DcmVkZW50aWFsc0xpc3Q+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvY3JlZGVudGlhbHMnKSwgcXVlcnkpXG4gICAgICAudGhlbihcbiAgICAgICAgKHJlczogQVBJUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlRG9tYWluQ3JlZGVudGlhbHNMaXN0KHJlcyBhcyBEb21haW5DcmVkZW50aWFsc1Jlc3BvbnNlRGF0YSlcbiAgICAgICk7XG4gIH1cblxuICBjcmVhdGUoXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgZGF0YTogRG9tYWluQ3JlZGVudGlhbHNcbiAgKTogUHJvbWlzZTxEb21haW5DcmVkZW50aWFsc1Jlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRChgJHt0aGlzLmJhc2VSb3V0ZX0ke2RvbWFpbn0vY3JlZGVudGlhbHNgLCBkYXRhKVxuICAgICAgLnRoZW4oKHJlczogQVBJUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlTWVzc2FnZVJlc3BvbnNlKHJlcykpO1xuICB9XG5cbiAgdXBkYXRlKFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIGNyZWRlbnRpYWxzTG9naW46IHN0cmluZyxcbiAgICBkYXRhOiBVcGRhdGVEb21haW5DcmVkZW50aWFsc0RhdGFcbiAgKTogUHJvbWlzZTxEb21haW5DcmVkZW50aWFsc1Jlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0V2l0aEZEKGAke3RoaXMuYmFzZVJvdXRlfSR7ZG9tYWlufS9jcmVkZW50aWFscy8ke2NyZWRlbnRpYWxzTG9naW59YCwgZGF0YSlcbiAgICAgIC50aGVuKChyZXM6IEFQSVJlc3BvbnNlKSA9PiB0aGlzLl9wYXJzZU1lc3NhZ2VSZXNwb25zZShyZXMpKTtcbiAgfVxuXG4gIGRlc3Ryb3koXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgY3JlZGVudGlhbHNMb2dpbjogc3RyaW5nXG4gICk6IFByb21pc2U8RG9tYWluQ3JlZGVudGlhbHNSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZShgJHt0aGlzLmJhc2VSb3V0ZX0ke2RvbWFpbn0vY3JlZGVudGlhbHMvJHtjcmVkZW50aWFsc0xvZ2lufWApXG4gICAgICAudGhlbigocmVzOiBBUElSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VEZWxldGVkUmVzcG9uc2UocmVzKSk7XG4gIH1cbn1cbiIsImltcG9ydCB1cmxqb2luIGZyb20gJ3VybC1qb2luJztcbmltcG9ydCBBUElSZXNwb25zZSBmcm9tICcuL2ludGVyZmFjZXMvQXBpUmVzcG9uc2UnO1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0JztcblxuaW1wb3J0IHtcbiAgRG9tYWluVGFnQVBJUmVzcG9uc2VTdGF0c0l0ZW0sXG4gIERvbWFpblRhZ0NvdW50cmllc0FnZ3JlZ2F0aW9uLFxuICBEb21haW5UYWdDb3VudHJpZXNBUElSZXNwb25zZSxcbiAgRG9tYWluVGFnRGV2aWNlc0FnZ3JlZ2F0aW9uLFxuICBEb21haW5UYWdEZXZpY2VzQVBJUmVzcG9uc2UsXG4gIERvbWFpblRhZ1Byb3ZpZGVyc0FnZ3JlZ2F0aW9uLFxuICBEb21haW5UYWdQcm92aWRlcnNBUElSZXNwb25zZSxcbiAgRG9tYWluVGFnc0l0ZW0sXG4gIERvbWFpblRhZ3NJdGVtSW5mbyxcbiAgRG9tYWluVGFnc0xpc3QsXG4gIERvbWFpblRhZ3NNZXNzYWdlUmVzLFxuICBEb21haW5UYWdzUXVlcnksXG4gIERvbWFpblRhZ3NSZXNwb25zZURhdGEsXG4gIERvbWFpblRhZ3NTdGF0aXN0aWNRdWVyeSxcbiAgRG9tYWluVGFnU3RhdEFQSVJlc3BvbnNlLFxuICBEb21haW5UYWdTdGF0aXN0aWNJdGVtLFxuICBEb21haW5UYWdTdGF0aXN0aWNSZXN1bHQsXG4gIElEb21haW5UYWdzQ2xpZW50LFxuICBQYWdlc0xpc3QsXG4gIFBhZ2VzTGlzdEFjY3VtdWxhdG9yLFxuICBQYXJzZWRQYWdlc0xpc3QsXG4gIFJlc29sdXRpb25cbn0gZnJvbSAnLi9pbnRlcmZhY2VzL0RvbWFpblRhZ3MnO1xuXG5leHBvcnQgY2xhc3MgRG9tYWluVGFnIGltcGxlbWVudHMgRG9tYWluVGFnc0l0ZW0ge1xuICB0YWc6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgJ2ZpcnN0LXNlZW4nOiBEYXRlO1xuICAnbGFzdC1zZWVuJzogRGF0ZTtcblxuICBjb25zdHJ1Y3Rvcih0YWdJbmZvOiBEb21haW5UYWdzSXRlbUluZm8pIHtcbiAgICB0aGlzLnRhZyA9IHRhZ0luZm8udGFnO1xuICAgIHRoaXMuZGVzY3JpcHRpb24gPSB0YWdJbmZvLmRlc2NyaXB0aW9uO1xuICAgIHRoaXNbJ2ZpcnN0LXNlZW4nXSA9IG5ldyBEYXRlKHRhZ0luZm9bJ2ZpcnN0LXNlZW4nXSk7XG4gICAgdGhpc1snbGFzdC1zZWVuJ10gPSBuZXcgRGF0ZSh0YWdJbmZvWydsYXN0LXNlZW4nXSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIERvbWFpblRhZ1N0YXRpc3RpYyBpbXBsZW1lbnRzIERvbWFpblRhZ1N0YXRpc3RpY1Jlc3VsdCB7XG4gIHRhZzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBzdGFydDogRGF0ZTtcbiAgZW5kOiBEYXRlO1xuICByZXNvbHV0aW9uOiBSZXNvbHV0aW9uO1xuICBzdGF0czogRG9tYWluVGFnU3RhdGlzdGljSXRlbVtdO1xuXG4gIGNvbnN0cnVjdG9yKHRhZ1N0YXRpc3RpY0luZm86IERvbWFpblRhZ1N0YXRBUElSZXNwb25zZSkge1xuICAgIHRoaXMudGFnID0gdGFnU3RhdGlzdGljSW5mby5ib2R5LnRhZztcbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gdGFnU3RhdGlzdGljSW5mby5ib2R5LmRlc2NyaXB0aW9uO1xuICAgIHRoaXMuc3RhcnQgPSBuZXcgRGF0ZSh0YWdTdGF0aXN0aWNJbmZvLmJvZHkuc3RhcnQpO1xuICAgIHRoaXMuZW5kID0gbmV3IERhdGUodGFnU3RhdGlzdGljSW5mby5ib2R5LmVuZCk7XG4gICAgdGhpcy5yZXNvbHV0aW9uID0gdGFnU3RhdGlzdGljSW5mby5ib2R5LnJlc29sdXRpb247XG4gICAgdGhpcy5zdGF0cyA9IHRhZ1N0YXRpc3RpY0luZm8uYm9keS5zdGF0cy5tYXAoZnVuY3Rpb24gKHN0YXQ6IERvbWFpblRhZ0FQSVJlc3BvbnNlU3RhdHNJdGVtKSB7XG4gICAgICBjb25zdCByZXMgPSB7IC4uLnN0YXQsIHRpbWU6IG5ldyBEYXRlKHN0YXQudGltZSkgfTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRG9tYWluVGFnc0NsaWVudCBpbXBsZW1lbnRzIElEb21haW5UYWdzQ2xpZW50IHtcbiAgYmFzZVJvdXRlOiBzdHJpbmc7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCkge1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgdGhpcy5iYXNlUm91dGUgPSAnL3YzLyc7XG4gIH1cblxuICBwcml2YXRlIF9wYXJzZVBhZ2VMaW5rcyhyZXNwb25zZTogRG9tYWluVGFnc1Jlc3BvbnNlRGF0YSk6IFBhcnNlZFBhZ2VzTGlzdCB7XG4gICAgY29uc3QgcGFnZXMgPSBPYmplY3QuZW50cmllcyhyZXNwb25zZS5ib2R5LnBhZ2luZyBhcyBQYWdlc0xpc3QpO1xuICAgIHJldHVybiBwYWdlcy5yZWR1Y2UoXG4gICAgICAoYWNjOiBQYWdlc0xpc3RBY2N1bXVsYXRvciwgZW50cmllOiBbdXJsOiBzdHJpbmcsIGlkOiBzdHJpbmddKSA9PiB7XG4gICAgICAgIGNvbnN0IGlkID0gZW50cmllWzBdO1xuICAgICAgICBjb25zdCB1cmwgPSBlbnRyaWVbMV07XG4gICAgICAgIGFjY1tpZF0gPSB7XG4gICAgICAgICAgaWQsXG4gICAgICAgICAgdXJsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LCB7fVxuICAgICkgYXMgdW5rbm93biBhcyBQYXJzZWRQYWdlc0xpc3Q7XG4gIH1cblxuICBwcml2YXRlIF9wYXJzZURvbWFpblRhZ3NMaXN0KFxuICAgIHJlc3BvbnNlOiBEb21haW5UYWdzUmVzcG9uc2VEYXRhXG4gICk6IERvbWFpblRhZ3NMaXN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgaXRlbXM6IHJlc3BvbnNlLmJvZHkuaXRlbXMubWFwKCh0YWdJbmZvKSA9PiBuZXcgRG9tYWluVGFnKHRhZ0luZm8pKSxcbiAgICAgIHBhZ2VzOiB0aGlzLl9wYXJzZVBhZ2VMaW5rcyhyZXNwb25zZSlcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFyc2VUYWdTdGF0aXN0aWMoXG4gICAgcmVzcG9uc2U6IERvbWFpblRhZ1N0YXRBUElSZXNwb25zZVxuICApOiBEb21haW5UYWdTdGF0aXN0aWMge1xuICAgIHJldHVybiBuZXcgRG9tYWluVGFnU3RhdGlzdGljKHJlc3BvbnNlKTtcbiAgfVxuXG4gIGxpc3QoZG9tYWluOiBzdHJpbmcsIHF1ZXJ5PzogRG9tYWluVGFnc1F1ZXJ5KTogUHJvbWlzZTxEb21haW5UYWdzTGlzdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90YWdzJyksIHF1ZXJ5KVxuICAgICAgLnRoZW4oXG4gICAgICAgIChyZXM6IEFQSVJlc3BvbnNlKSA9PiB0aGlzLl9wYXJzZURvbWFpblRhZ3NMaXN0KHJlcyBhcyBEb21haW5UYWdzUmVzcG9uc2VEYXRhKVxuICAgICAgKTtcbiAgfVxuXG4gIGdldChkb21haW46IHN0cmluZywgdGFnOiBzdHJpbmcpOiBQcm9taXNlPERvbWFpblRhZ3NJdGVtPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RhZ3MnLCB0YWcpKVxuICAgICAgLnRoZW4oXG4gICAgICAgIChyZXM6IEFQSVJlc3BvbnNlKSA9PiBuZXcgRG9tYWluVGFnKHJlcy5ib2R5KVxuICAgICAgKTtcbiAgfVxuXG4gIHVwZGF0ZShkb21haW46IHN0cmluZywgdGFnOiBzdHJpbmcsIGRlc2NyaXB0aW9uOiBzdHJpbmcpOiBQcm9taXNlPERvbWFpblRhZ3NNZXNzYWdlUmVzPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RhZ3MnLCB0YWcpLCBkZXNjcmlwdGlvbilcbiAgICAgIC50aGVuKFxuICAgICAgICAocmVzOiBBUElSZXNwb25zZSkgPT4gcmVzLmJvZHkgYXMgRG9tYWluVGFnc01lc3NhZ2VSZXNcbiAgICAgICk7XG4gIH1cblxuICBkZXN0cm95KFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIHRhZzogc3RyaW5nXG4gICk6IFByb21pc2U8RG9tYWluVGFnc01lc3NhZ2VSZXM+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZShgJHt0aGlzLmJhc2VSb3V0ZX0ke2RvbWFpbn0vdGFncy8ke3RhZ31gKVxuICAgICAgLnRoZW4oKHJlczogQVBJUmVzcG9uc2UpID0+IChcbiAgICAgICAge1xuICAgICAgICAgIG1lc3NhZ2U6IHJlcy5ib2R5Lm1lc3NhZ2UsXG4gICAgICAgICAgc3RhdHVzOiByZXMuc3RhdHVzXG4gICAgICAgIH0gYXMgRG9tYWluVGFnc01lc3NhZ2VSZXMpKTtcbiAgfVxuXG4gIHN0YXRpc3RpYyhkb21haW46IHN0cmluZywgdGFnOiBzdHJpbmcsIHF1ZXJ5OiBEb21haW5UYWdzU3RhdGlzdGljUXVlcnkpXG4gICAgOiBQcm9taXNlPERvbWFpblRhZ1N0YXRpc3RpYz4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90YWdzJywgdGFnLCAnc3RhdHMnKSwgcXVlcnkpXG4gICAgICAudGhlbihcbiAgICAgICAgKHJlczogQVBJUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlVGFnU3RhdGlzdGljKHJlcylcbiAgICAgICk7XG4gIH1cblxuICBjb3VudHJpZXMoZG9tYWluOiBzdHJpbmcsIHRhZzogc3RyaW5nKTogUHJvbWlzZTxEb21haW5UYWdDb3VudHJpZXNBZ2dyZWdhdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90YWdzJywgdGFnLCAnc3RhdHMvYWdncmVnYXRlcy9jb3VudHJpZXMnKSlcbiAgICAgIC50aGVuKFxuICAgICAgICAocmVzOiBEb21haW5UYWdDb3VudHJpZXNBUElSZXNwb25zZSkgPT4gcmVzLmJvZHkgYXMgRG9tYWluVGFnQ291bnRyaWVzQWdncmVnYXRpb25cbiAgICAgICk7XG4gIH1cblxuICBwcm92aWRlcnMoZG9tYWluOiBzdHJpbmcsIHRhZzogc3RyaW5nKTogUHJvbWlzZTxEb21haW5UYWdQcm92aWRlcnNBZ2dyZWdhdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90YWdzJywgdGFnLCAnc3RhdHMvYWdncmVnYXRlcy9wcm92aWRlcnMnKSlcbiAgICAgIC50aGVuKFxuICAgICAgICAocmVzOiBEb21haW5UYWdQcm92aWRlcnNBUElSZXNwb25zZSkgPT4gcmVzLmJvZHkgYXMgRG9tYWluVGFnUHJvdmlkZXJzQWdncmVnYXRpb25cbiAgICAgICk7XG4gIH1cblxuICBkZXZpY2VzKGRvbWFpbjogc3RyaW5nLCB0YWc6IHN0cmluZyk6IFByb21pc2U8RG9tYWluVGFnRGV2aWNlc0FnZ3JlZ2F0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RhZ3MnLCB0YWcsICdzdGF0cy9hZ2dyZWdhdGVzL2RldmljZXMnKSlcbiAgICAgIC50aGVuKFxuICAgICAgICAocmVzOiBEb21haW5UYWdEZXZpY2VzQVBJUmVzcG9uc2UpID0+IHJlcy5ib2R5IGFzIERvbWFpblRhZ0RldmljZXNBZ2dyZWdhdGlvblxuICAgICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0IHVybGpvaW4gZnJvbSAndXJsLWpvaW4nO1xuaW1wb3J0IEFQSVJlc3BvbnNlIGZyb20gJy4vaW50ZXJmYWNlcy9BcGlSZXNwb25zZSc7XG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuL3JlcXVlc3QnO1xuXG5pbXBvcnQge1xuICBDcmVhdGVEb21haW5UZW1wbGF0ZUFQSVJlc3BvbnNlLFxuICBDcmVhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25BUElSZXNwb25zZSxcbiAgQ3JlYXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uUmVzdWx0LFxuICBEb21haW5UZW1wbGF0ZSwgRG9tYWluVGVtcGxhdGVEYXRhLFxuICBEb21haW5UZW1wbGF0ZXNRdWVyeSxcbiAgRG9tYWluVGVtcGxhdGVVcGRhdGVEYXRhLFxuICBEb21haW5UZW1wbGF0ZVVwZGF0ZVZlcnNpb25EYXRhLFxuICBEb21haW5UZW1wbGF0ZVZlcnNpb25EYXRhLFxuICBHZXREb21haW5UZW1wbGF0ZUFQSVJlc3BvbnNlLFxuICBJRG9tYWluVGVtcGxhdGVzQ2xpZW50LFxuICBMaXN0RG9tYWluVGVtcGxhdGVzQVBJUmVzcG9uc2UsXG4gIExpc3REb21haW5UZW1wbGF0ZXNSZXN1bHQsXG4gIExpc3REb21haW5UZW1wbGF0ZVZlcnNpb25zQVBJUmVzcG9uc2UsXG4gIExpc3REb21haW5UZW1wbGF0ZVZlcnNpb25zUmVzdWx0LFxuICBNdXRhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25BUElSZXNwb25zZSxcbiAgTXV0YXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uUmVzdWx0LFxuICBOb3RpZmljYXRpb25BUElSZXNwb25zZSxcbiAgTm90aWZpY2F0aW9uUmVzdWx0LFxuICBTaG9ydFRlbXBsYXRlVmVyc2lvbixcbiAgVGVtcGxhdGVRdWVyeSxcbiAgVGVtcGxhdGVWZXJzaW9uLFxuICBVcGRhdGVPckRlbGV0ZURvbWFpblRlbXBsYXRlQVBJUmVzcG9uc2UsXG4gIFVwZGF0ZU9yRGVsZXRlRG9tYWluVGVtcGxhdGVSZXN1bHRcbn0gZnJvbSAnLi9pbnRlcmZhY2VzL0RvbWFpblRlbXBsYXRlcyc7XG5cbmV4cG9ydCBjbGFzcyBEb21haW5UZW1wbGF0ZUl0ZW0gaW1wbGVtZW50cyBEb21haW5UZW1wbGF0ZSB7XG4gIG5hbWUgOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uIDogc3RyaW5nO1xuICBjcmVhdGVkQXQgOiBEYXRlIHwgJyc7XG4gIGNyZWF0ZWRCeSA6IHN0cmluZztcbiAgaWQgOiBzdHJpbmc7XG4gIHZlcnNpb24/OiBUZW1wbGF0ZVZlcnNpb247XG4gIHZlcnNpb25zPzogU2hvcnRUZW1wbGF0ZVZlcnNpb25bXTtcblxuICBjb25zdHJ1Y3Rvcihkb21haW5UZW1wbGF0ZUZyb21BUEk6IERvbWFpblRlbXBsYXRlKSB7XG4gICAgdGhpcy5uYW1lID0gZG9tYWluVGVtcGxhdGVGcm9tQVBJLm5hbWU7XG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRvbWFpblRlbXBsYXRlRnJvbUFQSS5kZXNjcmlwdGlvbjtcbiAgICB0aGlzLmNyZWF0ZWRBdCA9IGRvbWFpblRlbXBsYXRlRnJvbUFQSS5jcmVhdGVkQXQgPyBuZXcgRGF0ZShkb21haW5UZW1wbGF0ZUZyb21BUEkuY3JlYXRlZEF0KSA6ICcnO1xuICAgIHRoaXMuY3JlYXRlZEJ5ID0gZG9tYWluVGVtcGxhdGVGcm9tQVBJLmNyZWF0ZWRCeTtcbiAgICB0aGlzLmlkID0gZG9tYWluVGVtcGxhdGVGcm9tQVBJLmlkO1xuXG4gICAgaWYgKGRvbWFpblRlbXBsYXRlRnJvbUFQSS52ZXJzaW9uKSB7XG4gICAgICB0aGlzLnZlcnNpb24gPSBkb21haW5UZW1wbGF0ZUZyb21BUEkudmVyc2lvbjtcbiAgICAgIGlmIChkb21haW5UZW1wbGF0ZUZyb21BUEkudmVyc2lvbi5jcmVhdGVkQXQpIHtcbiAgICAgICAgdGhpcy52ZXJzaW9uLmNyZWF0ZWRBdCA9IG5ldyBEYXRlKGRvbWFpblRlbXBsYXRlRnJvbUFQSS52ZXJzaW9uLmNyZWF0ZWRBdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRvbWFpblRlbXBsYXRlRnJvbUFQSS52ZXJzaW9ucyAmJiBkb21haW5UZW1wbGF0ZUZyb21BUEkudmVyc2lvbnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnZlcnNpb25zID0gZG9tYWluVGVtcGxhdGVGcm9tQVBJLnZlcnNpb25zLm1hcCgodmVyc2lvbikgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB7IC4uLnZlcnNpb24gfTtcbiAgICAgICAgcmVzdWx0LmNyZWF0ZWRBdCA9IG5ldyBEYXRlKHZlcnNpb24uY3JlYXRlZEF0KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb21haW5UZW1wbGF0ZXNDbGllbnQgaW1wbGVtZW50cyBJRG9tYWluVGVtcGxhdGVzQ2xpZW50IHtcbiAgYmFzZVJvdXRlOiBzdHJpbmc7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCkge1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgdGhpcy5iYXNlUm91dGUgPSAnL3YzLyc7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlQ3JlYXRpb25SZXNwb25zZShkYXRhOiBDcmVhdGVEb21haW5UZW1wbGF0ZUFQSVJlc3BvbnNlKTogRG9tYWluVGVtcGxhdGVJdGVtIHtcbiAgICByZXR1cm4gbmV3IERvbWFpblRlbXBsYXRlSXRlbShkYXRhLmJvZHkudGVtcGxhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUNyZWF0aW9uVmVyc2lvblJlc3BvbnNlKFxuICAgIGRhdGE6IENyZWF0ZURvbWFpblRlbXBsYXRlVmVyc2lvbkFQSVJlc3BvbnNlXG4gICk6IENyZWF0ZURvbWFpblRlbXBsYXRlVmVyc2lvblJlc3VsdCB7XG4gICAgY29uc3QgcmVzdWx0OiBDcmVhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25SZXN1bHQgPSB7fSBhcyBDcmVhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25SZXN1bHQ7XG4gICAgcmVzdWx0LnN0YXR1cyA9IGRhdGEuc3RhdHVzO1xuICAgIHJlc3VsdC5tZXNzYWdlID0gZGF0YS5ib2R5Lm1lc3NhZ2U7XG4gICAgaWYgKGRhdGEuYm9keSAmJiBkYXRhLmJvZHkudGVtcGxhdGUpIHtcbiAgICAgIHJlc3VsdC50ZW1wbGF0ZSA9IG5ldyBEb21haW5UZW1wbGF0ZUl0ZW0oZGF0YS5ib2R5LnRlbXBsYXRlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VNdXRhdGlvblJlc3BvbnNlKFxuICAgIGRhdGE6IFVwZGF0ZU9yRGVsZXRlRG9tYWluVGVtcGxhdGVBUElSZXNwb25zZVxuICApOiBVcGRhdGVPckRlbGV0ZURvbWFpblRlbXBsYXRlUmVzdWx0IHtcbiAgICBjb25zdCByZXN1bHQ6IFVwZGF0ZU9yRGVsZXRlRG9tYWluVGVtcGxhdGVSZXN1bHQgPSB7fSBhcyBVcGRhdGVPckRlbGV0ZURvbWFpblRlbXBsYXRlUmVzdWx0O1xuICAgIHJlc3VsdC5zdGF0dXMgPSBkYXRhLnN0YXR1cztcbiAgICByZXN1bHQubWVzc2FnZSA9IGRhdGEuYm9keS5tZXNzYWdlO1xuICAgIGlmIChkYXRhLmJvZHkgJiYgZGF0YS5ib2R5LnRlbXBsYXRlKSB7XG4gICAgICByZXN1bHQudGVtcGxhdGVOYW1lID0gZGF0YS5ib2R5LnRlbXBsYXRlLm5hbWU7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlTm90aWZpY2F0aW9uUmVzcG9uc2UoZGF0YTogTm90aWZpY2F0aW9uQVBJUmVzcG9uc2UpOiBOb3RpZmljYXRpb25SZXN1bHQge1xuICAgIGNvbnN0IHJlc3VsdDogTm90aWZpY2F0aW9uUmVzdWx0ID0ge30gYXMgTm90aWZpY2F0aW9uUmVzdWx0O1xuICAgIHJlc3VsdC5zdGF0dXMgPSBkYXRhLnN0YXR1cztcbiAgICByZXN1bHQubWVzc2FnZSA9IGRhdGEuYm9keS5tZXNzYWdlO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlTXV0YXRlVGVtcGxhdGVWZXJzaW9uUmVzcG9uc2UoXG4gICAgZGF0YTogTXV0YXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uQVBJUmVzcG9uc2VcbiAgKTogTXV0YXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uUmVzdWx0IHtcbiAgICBjb25zdCByZXN1bHQ6IE11dGF0ZURvbWFpblRlbXBsYXRlVmVyc2lvblJlc3VsdCA9IHt9IGFzIE11dGF0ZURvbWFpblRlbXBsYXRlVmVyc2lvblJlc3VsdDtcbiAgICByZXN1bHQuc3RhdHVzID0gZGF0YS5zdGF0dXM7XG4gICAgcmVzdWx0Lm1lc3NhZ2UgPSBkYXRhLmJvZHkubWVzc2FnZTtcbiAgICBpZiAoZGF0YS5ib2R5LnRlbXBsYXRlKSB7XG4gICAgICByZXN1bHQudGVtcGxhdGVOYW1lID0gZGF0YS5ib2R5LnRlbXBsYXRlLm5hbWU7XG4gICAgICByZXN1bHQudGVtcGxhdGVWZXJzaW9uID0geyB0YWc6IGRhdGEuYm9keS50ZW1wbGF0ZS52ZXJzaW9uLnRhZyB9O1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUxpc3QocmVzcG9uc2U6IExpc3REb21haW5UZW1wbGF0ZXNBUElSZXNwb25zZSk6IExpc3REb21haW5UZW1wbGF0ZXNSZXN1bHQge1xuICAgIGNvbnN0IGRhdGEgPSB7fSBhcyBMaXN0RG9tYWluVGVtcGxhdGVzUmVzdWx0O1xuXG4gICAgZGF0YS5pdGVtcyA9IHJlc3BvbnNlLmJvZHkuaXRlbXMubWFwKChkOiBEb21haW5UZW1wbGF0ZSkgPT4gbmV3IERvbWFpblRlbXBsYXRlSXRlbShkKSk7XG5cbiAgICBkYXRhLnBhZ2VzID0gcmVzcG9uc2UuYm9keS5wYWdpbmc7XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VMaXN0VGVtcGxhdGVWZXJzaW9ucyhcbiAgICByZXNwb25zZTogTGlzdERvbWFpblRlbXBsYXRlVmVyc2lvbnNBUElSZXNwb25zZVxuICApOiBMaXN0RG9tYWluVGVtcGxhdGVWZXJzaW9uc1Jlc3VsdCB7XG4gICAgY29uc3QgZGF0YSA9IHt9IGFzIExpc3REb21haW5UZW1wbGF0ZVZlcnNpb25zUmVzdWx0O1xuXG4gICAgZGF0YS50ZW1wbGF0ZSA9IG5ldyBEb21haW5UZW1wbGF0ZUl0ZW0ocmVzcG9uc2UuYm9keS50ZW1wbGF0ZSk7XG5cbiAgICBkYXRhLnBhZ2VzID0gcmVzcG9uc2UuYm9keS5wYWdpbmc7XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGxpc3QoZG9tYWluOiBzdHJpbmcsIHF1ZXJ5PzogRG9tYWluVGVtcGxhdGVzUXVlcnkpOiBQcm9taXNlPExpc3REb21haW5UZW1wbGF0ZXNSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGVtcGxhdGVzJyksIHF1ZXJ5KVxuICAgICAgLnRoZW4oXG4gICAgICAgIChyZXM6IEFQSVJlc3BvbnNlKSA9PiB0aGlzLnBhcnNlTGlzdChyZXMpXG4gICAgICApO1xuICB9XG5cbiAgZ2V0KGRvbWFpbjogc3RyaW5nLCB0ZW1wbGF0ZU5hbWU6IHN0cmluZywgcXVlcnk/OiBUZW1wbGF0ZVF1ZXJ5KTogUHJvbWlzZTxEb21haW5UZW1wbGF0ZUl0ZW0+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGVtcGxhdGVzLycsIHRlbXBsYXRlTmFtZSksIHF1ZXJ5KVxuICAgICAgLnRoZW4oXG4gICAgICAgIChyZXM6IEdldERvbWFpblRlbXBsYXRlQVBJUmVzcG9uc2UpID0+IG5ldyBEb21haW5UZW1wbGF0ZUl0ZW0ocmVzLmJvZHkudGVtcGxhdGUpXG4gICAgICApO1xuICB9XG5cbiAgY3JlYXRlKFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIGRhdGE6IERvbWFpblRlbXBsYXRlRGF0YVxuICApOiBQcm9taXNlPERvbWFpblRlbXBsYXRlSXRlbT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGVtcGxhdGVzJyksIGRhdGEpXG4gICAgICAudGhlbigocmVzOiBDcmVhdGVEb21haW5UZW1wbGF0ZUFQSVJlc3BvbnNlKSA9PiB0aGlzLnBhcnNlQ3JlYXRpb25SZXNwb25zZShyZXMpKTtcbiAgfVxuXG4gIHVwZGF0ZShcbiAgICBkb21haW46IHN0cmluZyxcbiAgICB0ZW1wbGF0ZU5hbWU6IHN0cmluZyxcbiAgICBkYXRhOiBEb21haW5UZW1wbGF0ZVVwZGF0ZURhdGFcbiAgKTogUHJvbWlzZTxVcGRhdGVPckRlbGV0ZURvbWFpblRlbXBsYXRlUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXRXaXRoRkQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RlbXBsYXRlcy8nLCB0ZW1wbGF0ZU5hbWUpLCBkYXRhKVxuICAgICAgLnRoZW4oKHJlczogVXBkYXRlT3JEZWxldGVEb21haW5UZW1wbGF0ZUFQSVJlc3BvbnNlKSA9PiB0aGlzLnBhcnNlTXV0YXRpb25SZXNwb25zZShyZXMpKTtcbiAgfVxuXG4gIGRlc3Ryb3koZG9tYWluOiBzdHJpbmcsIHRlbXBsYXRlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxVcGRhdGVPckRlbGV0ZURvbWFpblRlbXBsYXRlUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5kZWxldGUodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RlbXBsYXRlcy8nLCB0ZW1wbGF0ZU5hbWUpKVxuICAgICAgLnRoZW4oKHJlczogVXBkYXRlT3JEZWxldGVEb21haW5UZW1wbGF0ZUFQSVJlc3BvbnNlKSA9PiB0aGlzLnBhcnNlTXV0YXRpb25SZXNwb25zZShyZXMpKTtcbiAgfVxuXG4gIGRlc3Ryb3lBbGwoZG9tYWluOiBzdHJpbmcpOiBQcm9taXNlPE5vdGlmaWNhdGlvblJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90ZW1wbGF0ZXMnKSlcbiAgICAgIC50aGVuKChyZXM6IE5vdGlmaWNhdGlvbkFQSVJlc3BvbnNlKSA9PiB0aGlzLnBhcnNlTm90aWZpY2F0aW9uUmVzcG9uc2UocmVzKSk7XG4gIH1cblxuICBjcmVhdGVWZXJzaW9uKFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIHRlbXBsYXRlTmFtZTogc3RyaW5nLFxuICAgIGRhdGE6IERvbWFpblRlbXBsYXRlVmVyc2lvbkRhdGFcbiAgKTogUHJvbWlzZTxDcmVhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25SZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RlbXBsYXRlcy8nLCB0ZW1wbGF0ZU5hbWUsICcvdmVyc2lvbnMnKSwgZGF0YSlcbiAgICAgIC50aGVuKFxuICAgICAgICAocmVzOiBDcmVhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25BUElSZXNwb25zZSkgPT4gdGhpcy5wYXJzZUNyZWF0aW9uVmVyc2lvblJlc3BvbnNlKHJlcylcbiAgICAgICk7XG4gIH1cblxuICBnZXRWZXJzaW9uKGRvbWFpbjogc3RyaW5nLCB0ZW1wbGF0ZU5hbWU6IHN0cmluZywgdGFnOiBzdHJpbmcpOiBQcm9taXNlPERvbWFpblRlbXBsYXRlSXRlbT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90ZW1wbGF0ZXMvJywgdGVtcGxhdGVOYW1lLCAnL3ZlcnNpb25zLycsIHRhZykpXG4gICAgICAudGhlbihcbiAgICAgICAgKHJlczogR2V0RG9tYWluVGVtcGxhdGVBUElSZXNwb25zZSkgPT4gbmV3IERvbWFpblRlbXBsYXRlSXRlbShyZXMuYm9keS50ZW1wbGF0ZSlcbiAgICAgICk7XG4gIH1cblxuICB1cGRhdGVWZXJzaW9uKFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIHRlbXBsYXRlTmFtZTogc3RyaW5nLFxuICAgIHRhZzogc3RyaW5nLFxuICAgIGRhdGE6IERvbWFpblRlbXBsYXRlVXBkYXRlVmVyc2lvbkRhdGFcbiAgKTogUHJvbWlzZTxNdXRhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25SZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnB1dFdpdGhGRCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGVtcGxhdGVzLycsIHRlbXBsYXRlTmFtZSwgJy92ZXJzaW9ucy8nLCB0YWcpLCBkYXRhKVxuICAgICAgLnRoZW4oXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgICAgIChyZXM6IE11dGF0ZURvbWFpblRlbXBsYXRlVmVyc2lvbkFQSVJlc3BvbnNlKSA9PiB0aGlzLnBhcnNlTXV0YXRlVGVtcGxhdGVWZXJzaW9uUmVzcG9uc2UocmVzKVxuICAgICAgKTtcbiAgfVxuXG4gIGRlc3Ryb3lWZXJzaW9uKFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIHRlbXBsYXRlTmFtZTogc3RyaW5nLFxuICAgIHRhZzogc3RyaW5nXG4gICk6IFByb21pc2U8TXV0YXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5kZWxldGUodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RlbXBsYXRlcy8nLCB0ZW1wbGF0ZU5hbWUsICcvdmVyc2lvbnMvJywgdGFnKSlcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgICAudGhlbigocmVzOiBNdXRhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25BUElSZXNwb25zZSkgPT4gdGhpcy5wYXJzZU11dGF0ZVRlbXBsYXRlVmVyc2lvblJlc3BvbnNlKHJlcykpO1xuICB9XG5cbiAgbGlzdFZlcnNpb25zKFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIHRlbXBsYXRlTmFtZTogc3RyaW5nLFxuICAgIHF1ZXJ5PzogRG9tYWluVGVtcGxhdGVzUXVlcnlcbiAgKTogUHJvbWlzZTxMaXN0RG9tYWluVGVtcGxhdGVWZXJzaW9uc1Jlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90ZW1wbGF0ZXMnLCB0ZW1wbGF0ZU5hbWUsICcvdmVyc2lvbnMnKSwgcXVlcnkpXG4gICAgICAudGhlbihcbiAgICAgICAgKHJlczogTGlzdERvbWFpblRlbXBsYXRlVmVyc2lvbnNBUElSZXNwb25zZSkgPT4gdGhpcy5wYXJzZUxpc3RUZW1wbGF0ZVZlcnNpb25zKHJlcylcbiAgICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCBBUElFcnJvck9wdGlvbnMgZnJvbSAnLi9pbnRlcmZhY2VzL0FQSUVycm9yT3B0aW9ucyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFQSUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBzdGF0dXM6IG51bWJlciB8IHN0cmluZztcbiAgc3RhY2s6IHN0cmluZztcbiAgZGV0YWlsczogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHtcbiAgICBzdGF0dXMsXG4gICAgc3RhdHVzVGV4dCxcbiAgICBtZXNzYWdlLFxuICAgIGJvZHkgPSB7fVxuICB9OiBBUElFcnJvck9wdGlvbnMpIHtcbiAgICBjb25zdCB7IG1lc3NhZ2U6IGJvZHlNZXNzYWdlLCBlcnJvciB9ID0gYm9keTtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5zdGFjayA9ICcnO1xuICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzO1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgZXJyb3IgfHwgc3RhdHVzVGV4dDtcbiAgICB0aGlzLmRldGFpbHMgPSBib2R5TWVzc2FnZTtcbiAgfVxufVxuIiwiaW1wb3J0IHVybGpvaW4gZnJvbSAndXJsLWpvaW4nO1xuaW1wb3J0IHtcbiAgRXZlbnRzTGlzdCxcbiAgRXZlbnRzUGFnZSxcbiAgRXZlbnRzUXVlcnksXG4gIEV2ZW50c1Jlc3BvbnNlLFxuICBQYWdlc0xpc3QsXG4gIFBhZ2VzTGlzdEFjY3VtdWxhdG9yLFxuICBQYXJzZWRQYWdlc0xpc3Rcbn0gZnJvbSAnLi9pbnRlcmZhY2VzL0V2ZW50cyc7XG5cbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vcmVxdWVzdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV2ZW50Q2xpZW50IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0KSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgfVxuXG4gIF9wYXJzZVBhZ2VOdW1iZXIodXJsOiBzdHJpbmcpIDogc3RyaW5nIHtcbiAgICByZXR1cm4gdXJsLnNwbGl0KCcvJykucG9wKCkgfHwgJyc7XG4gIH1cblxuICBfcGFyc2VQYWdlKGlkOiBzdHJpbmcsIHVybDogc3RyaW5nKSA6IEV2ZW50c1BhZ2Uge1xuICAgIHJldHVybiB7IGlkLCBudW1iZXI6IHRoaXMuX3BhcnNlUGFnZU51bWJlcih1cmwpLCB1cmwgfTtcbiAgfVxuXG4gIF9wYXJzZVBhZ2VMaW5rcyhyZXNwb25zZTogRXZlbnRzUmVzcG9uc2UpIDogUGFyc2VkUGFnZXNMaXN0IHtcbiAgICBjb25zdCBwYWdlcyA9IE9iamVjdC5lbnRyaWVzKHJlc3BvbnNlLmJvZHkucGFnaW5nIGFzIFBhZ2VzTGlzdCk7XG4gICAgcmV0dXJuIHBhZ2VzLnJlZHVjZShcbiAgICAgIChhY2M6IFBhZ2VzTGlzdEFjY3VtdWxhdG9yLCBwYWlyOiBbdXJsOiBzdHJpbmcsIGlkOiBzdHJpbmddKSA9PiB7XG4gICAgICAgIGNvbnN0IGlkID0gcGFpclswXTtcbiAgICAgICAgY29uc3QgdXJsID0gcGFpclsxXTtcbiAgICAgICAgYWNjW2lkXSA9IHRoaXMuX3BhcnNlUGFnZShpZCwgdXJsKTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIHt9XG4gICAgKSBhcyB1bmtub3duIGFzIFBhcnNlZFBhZ2VzTGlzdDtcbiAgfVxuXG4gIF9wYXJzZUV2ZW50TGlzdChyZXNwb25zZTogRXZlbnRzUmVzcG9uc2UpIDogRXZlbnRzTGlzdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGl0ZW1zOiByZXNwb25zZS5ib2R5Lml0ZW1zLFxuICAgICAgcGFnZXM6IHRoaXMuX3BhcnNlUGFnZUxpbmtzKHJlc3BvbnNlKVxuICAgIH07XG4gIH1cblxuICBnZXQoZG9tYWluOiBzdHJpbmcsIHF1ZXJ5PzogRXZlbnRzUXVlcnkpIDogUHJvbWlzZTxFdmVudHNMaXN0PiB7XG4gICAgbGV0IHVybDtcbiAgICBjb25zdCBxdWVyeUNvcHkgPSB7IC4uLnF1ZXJ5IH07XG4gICAgaWYgKHF1ZXJ5Q29weSAmJiBxdWVyeUNvcHkucGFnZSkge1xuICAgICAgdXJsID0gdXJsam9pbignL3YzJywgZG9tYWluLCAnZXZlbnRzJywgcXVlcnlDb3B5LnBhZ2UpO1xuICAgICAgZGVsZXRlIHF1ZXJ5Q29weS5wYWdlO1xuICAgIH0gZWxzZSB7XG4gICAgICB1cmwgPSB1cmxqb2luKCcvdjMnLCBkb21haW4sICdldmVudHMnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsLCBxdWVyeUNvcHkpXG4gICAgICAudGhlbigocmVzcG9uc2U6IEV2ZW50c1Jlc3BvbnNlKSA9PiB0aGlzLl9wYXJzZUV2ZW50TGlzdChyZXNwb25zZSkpO1xuICB9XG59XG4iLCJpbXBvcnQgKiBhcyBOb2RlRm9ybURhdGEgZnJvbSAnZm9ybS1kYXRhJztcbmltcG9ydCB7IElucHV0Rm9ybURhdGEgfSBmcm9tICcuL2ludGVyZmFjZXMvSUZvcm1EYXRhJztcblxuY2xhc3MgRm9ybURhdGFCdWlsZGVyIHtcbiAgcHJpdmF0ZSBGb3JtRGF0YUNvbnN0cnVjdG9yOiBJbnB1dEZvcm1EYXRhO1xuICBjb25zdHJ1Y3RvcihGb3JtRGF0YUNvbnN0cnVjdG9yOiBJbnB1dEZvcm1EYXRhKSB7XG4gICAgdGhpcy5Gb3JtRGF0YUNvbnN0cnVjdG9yID0gRm9ybURhdGFDb25zdHJ1Y3RvcjtcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVGb3JtRGF0YShkYXRhOiBhbnkpOiBOb2RlRm9ybURhdGEgfCBGb3JtRGF0YSB7XG4gICAgaWYgKCFkYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BsZWFzZSBwcm92aWRlIGRhdGEgb2JqZWN0Jyk7XG4gICAgfVxuICAgIGNvbnN0IGZvcm1EYXRhOiBOb2RlRm9ybURhdGEgfCBGb3JtRGF0YSA9IE9iamVjdC5rZXlzKGRhdGEpXG4gICAgICAuZmlsdGVyKGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGRhdGFba2V5XTsgfSlcbiAgICAgIC5yZWR1Y2UoKGZvcm1EYXRhQWNjOiBOb2RlRm9ybURhdGEgfCBGb3JtRGF0YSwga2V5KSA9PiB7XG4gICAgICAgIGNvbnN0IGZpbGVLZXlzID0gWydhdHRhY2htZW50JywgJ2lubGluZScsICdmaWxlJ107XG4gICAgICAgIGlmIChmaWxlS2V5cy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgdGhpcy5hZGRGaWxlc1RvRkQoa2V5LCBkYXRhW2tleV0sIGZvcm1EYXRhQWNjKTtcbiAgICAgICAgICByZXR1cm4gZm9ybURhdGFBY2M7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoa2V5ID09PSAnbWVzc2FnZScpIHsgLy8gbWltZSBtZXNzYWdlXG4gICAgICAgICAgdGhpcy5hZGRNaW1lRGF0YVRvRkQoa2V5LCBkYXRhW2tleV0sIGZvcm1EYXRhQWNjKTtcbiAgICAgICAgICByZXR1cm4gZm9ybURhdGFBY2M7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFkZENvbW1vblByb3BlcnR5VG9GRChrZXksIGRhdGFba2V5XSwgZm9ybURhdGFBY2MpO1xuICAgICAgICByZXR1cm4gZm9ybURhdGFBY2M7XG4gICAgICB9LCBuZXcgdGhpcy5Gb3JtRGF0YUNvbnN0cnVjdG9yKCkpO1xuICAgIHJldHVybiBmb3JtRGF0YTtcbiAgfVxuXG4gIHByaXZhdGUgaXNOb2RlRm9ybURhdGEoZm9ybURhdGFJbnN0YW5jZTogTm9kZUZvcm1EYXRhIHwgRm9ybURhdGEpXG4gIDogZm9ybURhdGFJbnN0YW5jZSBpcyBOb2RlRm9ybURhdGEge1xuICAgIHJldHVybiAoPE5vZGVGb3JtRGF0YT5mb3JtRGF0YUluc3RhbmNlKS5nZXRIZWFkZXJzICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGdldEF0dGFjaG1lbnRPcHRpb25zKGl0ZW06IHtcbiAgICBmaWxlbmFtZT86IHN0cmluZztcbiAgICBjb250ZW50VHlwZT8gOiBzdHJpbmc7XG4gICAga25vd25MZW5ndGg/OiBudW1iZXI7XG4gIH0pOiB7XG4gICAgZmlsZW5hbWU/OiBzdHJpbmcsXG4gICAgY29udGVudFR5cGU/OiBzdHJpbmcsXG4gICAga25vd25MZW5ndGg/OiBudW1iZXJcbiAgfSB7XG4gICAgaWYgKHR5cGVvZiBpdGVtICE9PSAnb2JqZWN0JyB8fCB0aGlzLmlzU3RyZWFtKGl0ZW0pKSByZXR1cm4ge307XG4gICAgY29uc3Qge1xuICAgICAgZmlsZW5hbWUsXG4gICAgICBjb250ZW50VHlwZSxcbiAgICAgIGtub3duTGVuZ3RoXG4gICAgfSA9IGl0ZW07XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLihmaWxlbmFtZSA/IHsgZmlsZW5hbWUgfSA6IHsgZmlsZW5hbWU6ICdmaWxlJyB9KSxcbiAgICAgIC4uLihjb250ZW50VHlwZSAmJiB7IGNvbnRlbnRUeXBlIH0pLFxuICAgICAgLi4uKGtub3duTGVuZ3RoICYmIHsga25vd25MZW5ndGggfSlcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRNaW1lRGF0YVRvRkQoXG4gICAga2V5OiBzdHJpbmcsXG4gICAgZGF0YTogQnVmZmVyIHwgQmxvYixcbiAgICBmb3JtRGF0YUluc3RhbmNlOiBOb2RlRm9ybURhdGEgfCBGb3JtRGF0YVxuICApOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc05vZGVGb3JtRGF0YShmb3JtRGF0YUluc3RhbmNlKSkge1xuICAgICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihkYXRhKSkge1xuICAgICAgICBmb3JtRGF0YUluc3RhbmNlLmFwcGVuZChrZXksIGRhdGEsIHsgZmlsZW5hbWU6ICdNaW1lTWVzc2FnZScgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvcm1EYXRhSW5zdGFuY2UuYXBwZW5kKGtleSwgZGF0YSBhcyBCbG9iLCAnTWltZU1lc3NhZ2UnKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkZEZpbGVzVG9GRChcbiAgICBwcm9wZXJ0eU5hbWU6IHN0cmluZyxcbiAgICB2YWx1ZTogYW55LFxuICAgIGZvcm1EYXRhSW5zdGFuY2U6IE5vZGVGb3JtRGF0YSB8IEZvcm1EYXRhXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGFwcGVuZEZpbGVUb0ZEID0gKFxuICAgICAga2V5OiBzdHJpbmcsXG4gICAgICBvYmo6IGFueSxcbiAgICAgIGZvcm1EYXRhOiBOb2RlRm9ybURhdGEgfCBGb3JtRGF0YVxuICAgICk6IHZvaWQgPT4ge1xuICAgICAgY29uc3QgaXNTdHJlYW1EYXRhID0gdGhpcy5pc1N0cmVhbShvYmopO1xuICAgICAgY29uc3Qgb2JqRGF0YSA9IGlzU3RyZWFtRGF0YSA/IG9iaiA6IG9iai5kYXRhO1xuICAgICAgLy8gZ2V0QXR0YWNobWVudE9wdGlvbnMgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIG9iaiBwYXJhbWV0ZXIgdG8gcHJldmVudCBsb29zaW5nIGZpbGVuYW1lXG4gICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5nZXRBdHRhY2htZW50T3B0aW9ucyhvYmopO1xuICAgICAgaWYgKHRoaXMuaXNOb2RlRm9ybURhdGEoZm9ybURhdGEpKSB7XG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZChrZXksIG9iakRhdGEsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBmb3JtRGF0YS5hcHBlbmQoa2V5LCBvYmpEYXRhLCBvcHRpb25zLmZpbGVuYW1lKTtcbiAgICB9O1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIGFwcGVuZEZpbGVUb0ZEKHByb3BlcnR5TmFtZSwgaXRlbSwgZm9ybURhdGFJbnN0YW5jZSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBwZW5kRmlsZVRvRkQocHJvcGVydHlOYW1lLCB2YWx1ZSwgZm9ybURhdGFJbnN0YW5jZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpc1N0cmVhbShkYXRhOiBhbnkpIHtcbiAgICByZXR1cm4gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmIHR5cGVvZiBkYXRhLnBpcGUgPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICBwcml2YXRlIGFkZENvbW1vblByb3BlcnR5VG9GRChcbiAgICBrZXk6IHN0cmluZyxcbiAgICB2YWx1ZTogYW55LFxuICAgIGZvcm1EYXRhQWNjOiBOb2RlRm9ybURhdGEgfCBGb3JtRGF0YVxuICApOiB2b2lkIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24gKGl0ZW06IGFueSkge1xuICAgICAgICBmb3JtRGF0YUFjYy5hcHBlbmQoa2V5LCBpdGVtKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgZm9ybURhdGFBY2MuYXBwZW5kKGtleSwgdmFsdWUpO1xuICAgIH1cbiAgfVxufVxuZXhwb3J0IGRlZmF1bHQgRm9ybURhdGFCdWlsZGVyO1xuIiwiaW1wb3J0IENsaWVudCBmcm9tICcuL2NsaWVudCc7XG5pbXBvcnQgeyBJbnB1dEZvcm1EYXRhIH0gZnJvbSAnLi9pbnRlcmZhY2VzL0lGb3JtRGF0YSc7XG5pbXBvcnQgT3B0aW9ucyBmcm9tICcuL2ludGVyZmFjZXMvT3B0aW9ucyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1haWxndW4ge1xuICBzdGF0aWMgZ2V0IGRlZmF1bHQoKTogdHlwZW9mIE1haWxndW4geyByZXR1cm4gdGhpczsgfVxuICBwcml2YXRlIGZvcm1EYXRhOiBJbnB1dEZvcm1EYXRhXG5cbiAgY29uc3RydWN0b3IoRm9ybURhdGE6IElucHV0Rm9ybURhdGEpIHtcbiAgICB0aGlzLmZvcm1EYXRhID0gRm9ybURhdGE7XG4gIH1cblxuICBjbGllbnQob3B0aW9uczogT3B0aW9ucykgOiBDbGllbnQge1xuICAgIHJldHVybiBuZXcgQ2xpZW50KG9wdGlvbnMsIHRoaXMuZm9ybURhdGEpO1xuICB9XG59XG4iLCJpbXBvcnQge1xuICBCb3VuY2UsIENvbXBsYWludCwgVW5zdWJzY3JpYmUsIFdoaXRlTGlzdFxufSBmcm9tICcuLi9zdXBwcmVzc2lvbnMnO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cbmV4cG9ydCBpbnRlcmZhY2UgQm91bmNlRGF0YSB7XG4gIGFkZHJlc3M6IHN0cmluZztcbiAgY29kZTogbnVtYmVyO1xuICBlcnJvcjogc3RyaW5nO1xuICBjcmVhdGVkX2F0OiBzdHJpbmcgfCBEYXRlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBsYWludERhdGEge1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIGNyZWF0ZWRfYXQ6IHN0cmluZyB8IERhdGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVW5zdWJzY3JpYmVEYXRhIHtcbiAgYWRkcmVzczogc3RyaW5nO1xuICB0YWdzOiBhbnk7XG4gIGNyZWF0ZWRfYXQ6IHN0cmluZyB8IERhdGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2hpdGVMaXN0RGF0YSB7XG4gIHR5cGU6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbiAgcmVhc29uOiBzdHJpbmc7XG4gIGNyZWF0ZWRBdDogc3RyaW5nIHwgRGF0ZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRQYWdlIHtcbiAgaWQ6IHN0cmluZztcbiAgcGFnZTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgYWRkcmVzczogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgdXJsOiBzdHJpbmdcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkUGFnZXNMaXN0IHtcbiAgcHJldmlvdXM6IFBhcnNlZFBhZ2U7XG4gIGZpcnN0OiBQYXJzZWRQYWdlO1xuICBsYXN0OiBQYXJzZWRQYWdlO1xuICBuZXh0OiBQYXJzZWRQYWdlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN1cHByZXNzaW9uTGlzdCB7XG4gIGl0ZW1zOiAoQm91bmNlIHwgQ29tcGxhaW50IHwgVW5zdWJzY3JpYmUgfCBXaGl0ZUxpc3QpW107XG4gIHBhZ2VzOiBQYXJzZWRQYWdlc0xpc3Q7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFnZXNMaXN0IHtcbiAgcHJldmlvdXM6IHN0cmluZztcbiAgZmlyc3Q6IHN0cmluZztcbiAgbGFzdDogc3RyaW5nO1xuICBuZXh0OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBlbnVtIFN1cHByZXNzaW9uTW9kZWxzIHtcbiAgQk9VTkNFUyA9ICdib3VuY2VzJyxcbiAgQ09NUExBSU5UUyA9ICdjb21wbGFpbnRzJyxcbiAgVU5TVUJTQ1JJQkVTID0gJ3Vuc3Vic2NyaWJlcycsXG4gIFdISVRFTElTVFMgPSAnd2hpdGVsaXN0cydcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYWdlc0xpc3RBY2N1bXVsYXRvciB7XG4gIFtpbmRleDogc3RyaW5nXTogUGFyc2VkUGFnZTtcbn1cblxuZXhwb3J0IHR5cGUgU3VwcHJlc3Npb25MaXN0UXVlcnkgPSB7XG4gIGxpbWl0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN1cHByZXNzaW9uTGlzdFJlc3BvbnNlIHtcbiAgYm9keToge1xuICAgIGl0ZW1zOiBCb3VuY2VEYXRhW10gfCBDb21wbGFpbnREYXRhW10gfCBVbnN1YnNjcmliZURhdGFbXSB8IFdoaXRlTGlzdERhdGFbXTtcbiAgICBwYWdpbmc6IFBhZ2VzTGlzdDtcbiAgfVxuICBzdGF0dXM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdXBwcmVzc2lvblJlc3BvbnNlIHtcbiAgYm9keTogQm91bmNlRGF0YSB8IENvbXBsYWludERhdGEgfCBVbnN1YnNjcmliZURhdGEgfCBXaGl0ZUxpc3REYXRhO1xuICBzdGF0dXM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdXBwcmVzc2lvbkRlc3Ryb3lSZXNwb25zZSB7XG4gIGJvZHk6IHtcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG4gICAgdmFsdWU/OiBzdHJpbmc7XG4gICAgYWRkcmVzcz86IHN0cmluZztcbiAgfVxuICBzdGF0dXM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdXBwcmVzc2lvbkRlc3Ryb3lSZXN1bHQge1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIGFkZHJlc3M6IHN0cmluZztcbiAgc3RhdHVzOiBudW1iZXI7XG59XG5cbmV4cG9ydCB0eXBlIFN1cHByZXNzaW9uQ3JlYXRpb25EYXRhID0ge1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIGNvZGU/OiBudW1iZXI7XG4gIGVycm9yPzogc3RyaW5nO1xuICBkb21haW4/OiBzdHJpbmc7XG4gIHRhZz86IHN0cmluZztcbiAgY3JlYXRlZF9hdD86IHN0cmluZyA7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3VwcHJlc3Npb25DcmVhdGlvblJlc3BvbnNlIHtcbiAgYm9keTp7XG4gICAgbWVzc2FnZTpzdHJpbmc7XG4gICAgdHlwZT86IHN0cmluZztcbiAgICB2YWx1ZT86IHN0cmluZztcbiAgfVxuICBzdGF0dXM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdXBwcmVzc2lvbkNyZWF0aW9uUmVzdWx0IHtcbiAgbWVzc2FnZTpzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbiAgc3RhdHVzOiBudW1iZXI7XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vcmVxdWVzdCc7XG5cbmltcG9ydCB7XG4gIElwUG9vbENyZWF0ZURhdGEsXG4gIElwUG9vbENyZWF0ZVJlc3BvbnNlLFxuICBJcFBvb2xDcmVhdGVSZXN1bHQsXG4gIElwUG9vbERlbGV0ZURhdGEsXG4gIElwUG9vbExpc3RSZXNwb25zZSxcbiAgSXBQb29sTGlzdFJlc3VsdCxcbiAgSXBQb29sTWVzc2FnZVJlc3BvbnNlLFxuICBJcFBvb2xNZXNzYWdlUmVzdWx0LFxuICBJcFBvb2xVcGRhdGVEYXRhLFxufSBmcm9tICcuL2ludGVyZmFjZXMvSXBQb29scyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIElwUG9vbHNDbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICB9XG5cbiAgbGlzdCgpOiBQcm9taXNlPElwUG9vbExpc3RSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCgnL3YxL2lwX3Bvb2xzJylcbiAgICAgIC50aGVuKChyZXNwb25zZTogSXBQb29sTGlzdFJlc3BvbnNlKSA9PiB0aGlzLnBhcnNlSXBQb29sc1Jlc3BvbnNlKHJlc3BvbnNlKSk7XG4gIH1cblxuICBhc3luYyBjcmVhdGUoZGF0YTogSXBQb29sQ3JlYXRlRGF0YSk6IFByb21pc2U8SXBQb29sQ3JlYXRlUmVzdWx0PiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IElwUG9vbENyZWF0ZVJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQoJy92MS9pcF9wb29scycsIGRhdGEpO1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIC4uLnJlc3BvbnNlLmJvZHlcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlKHBvb2xJZDogc3RyaW5nLCBkYXRhOiBJcFBvb2xVcGRhdGVEYXRhKTogUHJvbWlzZTxJcFBvb2xNZXNzYWdlUmVzdWx0PiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IElwUG9vbE1lc3NhZ2VSZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5wYXRjaFdpdGhGRChgL3YxL2lwX3Bvb2xzLyR7cG9vbElkfWAsIGRhdGEpO1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIC4uLnJlc3BvbnNlLmJvZHlcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlKHBvb2xJZDogc3RyaW5nLCBkYXRhOiBJcFBvb2xEZWxldGVEYXRhKTogUHJvbWlzZTxJcFBvb2xNZXNzYWdlUmVzdWx0PiB7XG4gICAgY29uc3QgcmVzcG9uc2U6SXBQb29sTWVzc2FnZVJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LmRlbGV0ZShgL3YxL2lwX3Bvb2xzLyR7cG9vbElkfWAsIGRhdGEpO1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIC4uLnJlc3BvbnNlLmJvZHlcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUlwUG9vbHNSZXNwb25zZShyZXNwb25zZTogSXBQb29sTGlzdFJlc3BvbnNlKTogSXBQb29sTGlzdFJlc3VsdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgLi4ucmVzcG9uc2UuYm9keVxuICAgIH07XG4gIH1cbn1cbiIsImltcG9ydCBNZ1JlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0JztcbmltcG9ydCB7IElwRGF0YSwgSXBzTGlzdFJlc3BvbnNlQm9keSB9IGZyb20gJy4vaW50ZXJmYWNlcy9JcHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJcHNDbGllbnQge1xuICByZXF1ZXN0OiBNZ1JlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogTWdSZXF1ZXN0KSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgfVxuXG4gIGFzeW5jIGxpc3QocXVlcnk6IGFueSk6IFByb21pc2U8SXBzTGlzdFJlc3BvbnNlQm9keT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LmdldCgnL3YzL2lwcycsIHF1ZXJ5KTtcbiAgICByZXR1cm4gdGhpcy5wYXJzZUlwc1Jlc3BvbnNlPElwc0xpc3RSZXNwb25zZUJvZHk+KHJlc3BvbnNlKTtcbiAgfVxuXG4gIGFzeW5jIGdldChpcDogc3RyaW5nKTogUHJvbWlzZTxJcERhdGE+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5nZXQoYC92My9pcHMvJHtpcH1gKTtcbiAgICByZXR1cm4gdGhpcy5wYXJzZUlwc1Jlc3BvbnNlPElwRGF0YT4ocmVzcG9uc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUlwc1Jlc3BvbnNlPFQ+KHJlc3BvbnNlOiB7IGJvZHk6IFQgfSk6IFQge1xuICAgIHJldHVybiByZXNwb25zZS5ib2R5O1xuICB9XG59XG4iLCJpbXBvcnQgUmVxdWVzdCBmcm9tICcuL3JlcXVlc3QnO1xuaW1wb3J0IHtcbiAgTGlzdHNRdWVyeSxcbiAgQ3JlYXRlVXBkYXRlTGlzdCxcbiAgRGVzdHJveWVkTGlzdCxcbiAgTWFpbGluZ0xpc3QsXG4gIFZhbGlkYXRpb25BcGlSZXNwb25zZSxcbiAgU3RhcnRWYWxpZGF0aW9uUmVzdWx0LFxuICBWYWxpZGF0aW9uUmVzdWx0LFxuICBDYW5jZWxWYWxpZGF0aW9uUmVzdWx0XG59IGZyb20gJy4vaW50ZXJmYWNlcy9saXN0cyc7XG5pbXBvcnQgeyBJTWFpbExpc3RzTWVtYmVycyB9IGZyb20gJy4vaW50ZXJmYWNlcy9tYWlsTGlzdE1lbWJlcnMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMaXN0c0NsaWVudCB7XG4gIGJhc2VSb3V0ZTogc3RyaW5nO1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuICBtZW1iZXJzOiBJTWFpbExpc3RzTWVtYmVycztcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0LCBtZW1iZXJzOklNYWlsTGlzdHNNZW1iZXJzKSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICB0aGlzLmJhc2VSb3V0ZSA9ICcvdjMvbGlzdHMnO1xuICAgIHRoaXMubWVtYmVycyA9IG1lbWJlcnM7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlVmFsaWRhdGlvblJlc3VsdChzdGF0dXM6IG51bWJlciwgZGF0YTogVmFsaWRhdGlvbkFwaVJlc3BvbnNlKTogVmFsaWRhdGlvblJlc3VsdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1cyxcbiAgICAgIHZhbGlkYXRpb25SZXN1bHQ6IHtcbiAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgY3JlYXRlZF9hdDogbmV3IERhdGUoZGF0YS5jcmVhdGVkX2F0ICogMTAwMCkgLy8gYWRkIG1pbGxpc2Vjb25kIHRvIFVuaXggdGltZXN0YW1wXG4gICAgICB9XG4gICAgfSBhcyBWYWxpZGF0aW9uUmVzdWx0O1xuICB9XG5cbiAgbGlzdChxdWVyeT86IExpc3RzUXVlcnkpOiBQcm9taXNlPE1haWxpbmdMaXN0W10+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldChgJHt0aGlzLmJhc2VSb3V0ZX0vcGFnZXNgLCBxdWVyeSlcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keS5pdGVtcyBhcyBNYWlsaW5nTGlzdFtdKTtcbiAgfVxuXG4gIGdldChtYWlsTGlzdEFkZHJlc3M6IHN0cmluZyk6IFByb21pc2U8TWFpbGluZ0xpc3Q+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldChgJHt0aGlzLmJhc2VSb3V0ZX0vJHttYWlsTGlzdEFkZHJlc3N9YClcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keS5saXN0IGFzIE1haWxpbmdMaXN0KTtcbiAgfVxuXG4gIGNyZWF0ZShkYXRhOiBDcmVhdGVVcGRhdGVMaXN0KTogUHJvbWlzZTxNYWlsaW5nTGlzdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRCh0aGlzLmJhc2VSb3V0ZSwgZGF0YSlcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keS5saXN0IGFzIE1haWxpbmdMaXN0KTtcbiAgfVxuXG4gIHVwZGF0ZShtYWlsTGlzdEFkZHJlc3M6IHN0cmluZywgZGF0YTogQ3JlYXRlVXBkYXRlTGlzdCk6IFByb21pc2U8TWFpbGluZ0xpc3Q+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnB1dFdpdGhGRChgJHt0aGlzLmJhc2VSb3V0ZX0vJHttYWlsTGlzdEFkZHJlc3N9YCwgZGF0YSlcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keS5saXN0IGFzIE1haWxpbmdMaXN0KTtcbiAgfVxuXG4gIGRlc3Ryb3kobWFpbExpc3RBZGRyZXNzOiBzdHJpbmcpOiBQcm9taXNlPERlc3Ryb3llZExpc3Q+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZShgJHt0aGlzLmJhc2VSb3V0ZX0vJHttYWlsTGlzdEFkZHJlc3N9YClcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keSBhcyBEZXN0cm95ZWRMaXN0KTtcbiAgfVxuXG4gIHZhbGlkYXRlKG1haWxMaXN0QWRkcmVzczogc3RyaW5nKTogUHJvbWlzZTxTdGFydFZhbGlkYXRpb25SZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnBvc3QoYCR7dGhpcy5iYXNlUm91dGV9LyR7bWFpbExpc3RBZGRyZXNzfS92YWxpZGF0ZWAsIHt9KVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiAoe1xuICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgLi4ucmVzcG9uc2UuYm9keVxuICAgICAgfSkgYXMgU3RhcnRWYWxpZGF0aW9uUmVzdWx0KTtcbiAgfVxuXG4gIHZhbGlkYXRpb25SZXN1bHQobWFpbExpc3RBZGRyZXNzOiBzdHJpbmcpOiBQcm9taXNlPFZhbGlkYXRpb25SZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldChgJHt0aGlzLmJhc2VSb3V0ZX0vJHttYWlsTGlzdEFkZHJlc3N9L3ZhbGlkYXRlYClcbiAgICAgIC50aGVuKFxuICAgICAgICAocmVzcG9uc2UpID0+IHRoaXMucGFyc2VWYWxpZGF0aW9uUmVzdWx0KFxuICAgICAgICAgIHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgICAgcmVzcG9uc2UuYm9keSBhcyBWYWxpZGF0aW9uQXBpUmVzcG9uc2VcbiAgICAgICAgKVxuICAgICAgKTtcbiAgfVxuXG4gIGNhbmNlbFZhbGlkYXRpb24obWFpbExpc3RBZGRyZXNzOiBzdHJpbmcpOiBQcm9taXNlPENhbmNlbFZhbGlkYXRpb25SZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZShgJHt0aGlzLmJhc2VSb3V0ZX0vJHttYWlsTGlzdEFkZHJlc3N9L3ZhbGlkYXRlYClcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gKHtcbiAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgIG1lc3NhZ2U6IHJlc3BvbnNlLmJvZHkubWVzc2FnZVxuICAgICAgfSBhcyBDYW5jZWxWYWxpZGF0aW9uUmVzdWx0KSk7XG4gIH1cbn1cbiIsImltcG9ydCBSZXF1ZXN0IGZyb20gJy4vcmVxdWVzdCc7XG5pbXBvcnQge1xuICBNYWlsTGlzdE1lbWJlcnNRdWVyeSxcbiAgSU1haWxMaXN0c01lbWJlcnMsXG4gIENyZWF0ZVVwZGF0ZU1haWxMaXN0TWVtYmVycyxcbiAgTWFpbExpc3RNZW1iZXIsXG4gIE11bHRpcGxlTWVtYmVyc0RhdGEsXG4gIE11bHRpcGxlTWVtYmVyc1JlcURhdGEsXG4gIERlbGV0ZWRNZW1iZXIsXG4gIENyZWF0ZVVwZGF0ZU1haWxMaXN0TWVtYmVyc1JlcSxcbiAgTmV3TXVsdGlwbGVNZW1iZXJzUmVzcG9uc2Vcbn0gZnJvbSAnLi9pbnRlcmZhY2VzL21haWxMaXN0TWVtYmVycyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1haWxMaXN0c01lbWJlcnMgaW1wbGVtZW50cyBJTWFpbExpc3RzTWVtYmVycyB7XG4gIGJhc2VSb3V0ZTogc3RyaW5nO1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMuYmFzZVJvdXRlID0gJy92My9saXN0cyc7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrQW5kVXBkYXRlRGF0YShkYXRhOiBDcmVhdGVVcGRhdGVNYWlsTGlzdE1lbWJlcnMpIHtcbiAgICBjb25zdCBuZXdEYXRhID0geyAuLi5kYXRhIH07XG5cbiAgICBpZiAodHlwZW9mIGRhdGEudmFycyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIG5ld0RhdGEudmFycyA9IEpTT04uc3RyaW5naWZ5KG5ld0RhdGEudmFycyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBkYXRhLnN1YnNjcmliZWQgPT09ICdib29sZWFuJykge1xuICAgICAgbmV3RGF0YS5zdWJzY3JpYmVkID0gZGF0YS5zdWJzY3JpYmVkID8gJ3llcycgOiAnbm8nO1xuICAgIH1cblxuICAgIHJldHVybiBuZXdEYXRhIGFzIENyZWF0ZVVwZGF0ZU1haWxMaXN0TWVtYmVyc1JlcTtcbiAgfVxuXG4gIGxpc3RNZW1iZXJzKG1haWxMaXN0QWRkcmVzczogc3RyaW5nLCBxdWVyeT86IE1haWxMaXN0TWVtYmVyc1F1ZXJ5KTogUHJvbWlzZTxNYWlsTGlzdE1lbWJlcltdPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQoYCR7dGhpcy5iYXNlUm91dGV9LyR7bWFpbExpc3RBZGRyZXNzfS9tZW1iZXJzL3BhZ2VzYCwgcXVlcnkpXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkuaXRlbXMgYXMgTWFpbExpc3RNZW1iZXJbXSk7XG4gIH1cblxuICBnZXRNZW1iZXIobWFpbExpc3RBZGRyZXNzOiBzdHJpbmcsIG1haWxMaXN0TWVtYmVyQWRkcmVzczogc3RyaW5nKTogUHJvbWlzZTxNYWlsTGlzdE1lbWJlcj4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc30vbWVtYmVycy8ke21haWxMaXN0TWVtYmVyQWRkcmVzc31gKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5Lm1lbWJlciBhcyBNYWlsTGlzdE1lbWJlcik7XG4gIH1cblxuICBjcmVhdGVNZW1iZXIoXG4gICAgbWFpbExpc3RBZGRyZXNzOiBzdHJpbmcsXG4gICAgZGF0YTogQ3JlYXRlVXBkYXRlTWFpbExpc3RNZW1iZXJzXG4gICk6IFByb21pc2U8TWFpbExpc3RNZW1iZXI+IHtcbiAgICBjb25zdCByZXFEYXRhID0gdGhpcy5jaGVja0FuZFVwZGF0ZURhdGEoZGF0YSk7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc30vbWVtYmVyc2AsIHJlcURhdGEpXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkubWVtYmVyIGFzIE1haWxMaXN0TWVtYmVyKTtcbiAgfVxuXG4gIGNyZWF0ZU1lbWJlcnMoXG4gICAgbWFpbExpc3RBZGRyZXNzOiBzdHJpbmcsXG4gICAgZGF0YTogTXVsdGlwbGVNZW1iZXJzRGF0YVxuICApOiBQcm9taXNlPE5ld011bHRpcGxlTWVtYmVyc1Jlc3BvbnNlPiB7XG4gICAgY29uc3QgbmV3RGF0YTogTXVsdGlwbGVNZW1iZXJzUmVxRGF0YSA9IHtcbiAgICAgIG1lbWJlcnM6IEFycmF5LmlzQXJyYXkoZGF0YS5tZW1iZXJzKSA/IEpTT04uc3RyaW5naWZ5KGRhdGEubWVtYmVycykgOiBkYXRhLm1lbWJlcnMsXG4gICAgICB1cHNlcnQ6IGRhdGEudXBzZXJ0XG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRChgJHt0aGlzLmJhc2VSb3V0ZX0vJHttYWlsTGlzdEFkZHJlc3N9L21lbWJlcnMuanNvbmAsIG5ld0RhdGEpXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkgYXMgTmV3TXVsdGlwbGVNZW1iZXJzUmVzcG9uc2UpO1xuICB9XG5cbiAgdXBkYXRlTWVtYmVyKFxuICAgIG1haWxMaXN0QWRkcmVzczogc3RyaW5nLFxuICAgIG1haWxMaXN0TWVtYmVyQWRkcmVzczogc3RyaW5nLFxuICAgIGRhdGE6IENyZWF0ZVVwZGF0ZU1haWxMaXN0TWVtYmVyc1xuICApOiBQcm9taXNlPE1haWxMaXN0TWVtYmVyPiB7XG4gICAgY29uc3QgcmVxRGF0YSA9IHRoaXMuY2hlY2tBbmRVcGRhdGVEYXRhKGRhdGEpO1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0V2l0aEZEKGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc30vbWVtYmVycy8ke21haWxMaXN0TWVtYmVyQWRkcmVzc31gLCByZXFEYXRhKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5Lm1lbWJlciBhcyBNYWlsTGlzdE1lbWJlcik7XG4gIH1cblxuICBkZXN0cm95TWVtYmVyKG1haWxMaXN0QWRkcmVzczogc3RyaW5nLCBtYWlsTGlzdE1lbWJlckFkZHJlc3M6IHN0cmluZykgOiBQcm9taXNlPERlbGV0ZWRNZW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZShgJHt0aGlzLmJhc2VSb3V0ZX0vJHttYWlsTGlzdEFkZHJlc3N9L21lbWJlcnMvJHttYWlsTGlzdE1lbWJlckFkZHJlc3N9YClcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keSBhcyBEZWxldGVkTWVtYmVyKTtcbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgTWFpbGd1bk1lc3NhZ2VEYXRhLFxuICBNZXNzYWdlc1NlbmRBUElSZXNwb25zZSxcbiAgTWVzc2FnZXNTZW5kUmVzdWx0XG59IGZyb20gJy4vaW50ZXJmYWNlcy9NZXNzYWdlcyc7XG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuL3JlcXVlc3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXNzYWdlc0NsaWVudCB7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCkge1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gIH1cblxuICBfcGFyc2VSZXNwb25zZShyZXNwb25zZTogTWVzc2FnZXNTZW5kQVBJUmVzcG9uc2UpOiBNZXNzYWdlc1NlbmRSZXN1bHQge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIC4uLnJlc3BvbnNlLmJvZHlcbiAgICB9O1xuICB9XG5cbiAgY3JlYXRlKGRvbWFpbjogc3RyaW5nLCBkYXRhOiBNYWlsZ3VuTWVzc2FnZURhdGEpOiBQcm9taXNlPE1lc3NhZ2VzU2VuZFJlc3VsdD4ge1xuICAgIGlmIChkYXRhLm1lc3NhZ2UpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRChgL3YzLyR7ZG9tYWlufS9tZXNzYWdlcy5taW1lYCwgZGF0YSlcbiAgICAgICAgLnRoZW4odGhpcy5fcGFyc2VSZXNwb25zZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKGAvdjMvJHtkb21haW59L21lc3NhZ2VzYCwgZGF0YSlcbiAgICAgIC50aGVuKHRoaXMuX3BhcnNlUmVzcG9uc2UpO1xuICB9XG59XG4iLCJpbXBvcnQge1xuICBDYW5jZWxlZE11bHRpcGxlVmFsaWRhdGlvbkpvYixcbiAgQ3JlYXRlZE11bHRpcGxlVmFsaWRhdGlvbkpvYixcbiAgSU11bHRpcGxlVmFsaWRhdGlvbkNsaWVudCxcbiAgTXVsdGlwbGVWYWxpZGF0aW9uSm9iLFxuICBNdWx0aXBsZVZhbGlkYXRpb25Kb2JzTGlzdFJlc3VsdFxufVxuICBmcm9tICcuL2ludGVyZmFjZXMvTXVsdGlwbGVWYWxpZGF0aW9uJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vcmVxdWVzdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE11bHRpcGxlVmFsaWRhdGlvbkNsaWVudCBpbXBsZW1lbnRzIElNdWx0aXBsZVZhbGlkYXRpb25DbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICB9XG5cbiAgbGlzdCgpOiBQcm9taXNlPE11bHRpcGxlVmFsaWRhdGlvbkpvYnNMaXN0UmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQoJy92NC9hZGRyZXNzL3ZhbGlkYXRlL2J1bGsnKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5IGFzIE11bHRpcGxlVmFsaWRhdGlvbkpvYnNMaXN0UmVzdWx0KTtcbiAgfVxuXG4gIGdldChsaXN0SWQ6IHN0cmluZyk6IFByb21pc2U8TXVsdGlwbGVWYWxpZGF0aW9uSm9iPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQoYC92NC9hZGRyZXNzL3ZhbGlkYXRlL2J1bGsvJHtsaXN0SWR9YClcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keSk7XG4gIH1cblxuICBjcmVhdGUobGlzdElkOiBzdHJpbmcsIGZpbGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUHJvbWlzZTxDcmVhdGVkTXVsdGlwbGVWYWxpZGF0aW9uSm9iPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKGAvdjQvYWRkcmVzcy92YWxpZGF0ZS9idWxrLyR7bGlzdElkfWAsIGZpbGUpXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkpO1xuICB9XG5cbiAgZGVzdHJveShsaXN0SWQ6IHN0cmluZyk6IFByb21pc2U8Q2FuY2VsZWRNdWx0aXBsZVZhbGlkYXRpb25Kb2I+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZShgL3Y0L2FkZHJlc3MvdmFsaWRhdGUvYnVsay8ke2xpc3RJZH1gKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZSk7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIGJhc2U2NCBmcm9tICdiYXNlLTY0JztcbmltcG9ydCB1cmxqb2luIGZyb20gJ3VybC1qb2luJztcbmltcG9ydCBreSBmcm9tICdreS11bml2ZXJzYWwnO1xuaW1wb3J0ICogYXMgTm9kZUZvcm1EYXRhIGZyb20gJ2Zvcm0tZGF0YSc7XG5pbXBvcnQgQVBJRXJyb3IgZnJvbSAnLi9lcnJvcic7XG5pbXBvcnQgeyBPbkNhbGxFbXB0eUhlYWRlcnMsIE9uQ2FsbFJlcXVlc3RPcHRpb25zLCBSZXF1ZXN0T3B0aW9ucyB9IGZyb20gJy4vaW50ZXJmYWNlcy9SZXF1ZXN0T3B0aW9ucyc7XG5pbXBvcnQgQVBJRXJyb3JPcHRpb25zIGZyb20gJy4vaW50ZXJmYWNlcy9BUElFcnJvck9wdGlvbnMnO1xuaW1wb3J0IHsgSW5wdXRGb3JtRGF0YSB9IGZyb20gJy4vaW50ZXJmYWNlcy9JRm9ybURhdGEnO1xuaW1wb3J0IEFQSVJlc3BvbnNlIGZyb20gJy4vaW50ZXJmYWNlcy9BcGlSZXNwb25zZSc7XG5pbXBvcnQgRm9ybURhdGFCdWlsZGVyIGZyb20gJy4vZm9ybURhdGFCdWlsZGVyJztcbmltcG9ydCB7IElwUG9vbERlbGV0ZURhdGEgfSBmcm9tICcuL2ludGVyZmFjZXMvSXBQb29scyc7XG5cbmNsYXNzIFJlcXVlc3Qge1xuICBwcml2YXRlIHVzZXJuYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUga2V5OiBzdHJpbmc7XG4gIHByaXZhdGUgdXJsOiBzdHJpbmc7XG4gIHByaXZhdGUgdGltZW91dDogbnVtYmVyO1xuICBwcml2YXRlIGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBwcml2YXRlIGZvcm1EYXRhQnVpbGRlcjogRm9ybURhdGFCdWlsZGVyO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IFJlcXVlc3RPcHRpb25zLCBmb3JtRGF0YTogSW5wdXRGb3JtRGF0YSkge1xuICAgIHRoaXMudXNlcm5hbWUgPSBvcHRpb25zLnVzZXJuYW1lO1xuICAgIHRoaXMua2V5ID0gb3B0aW9ucy5rZXk7XG4gICAgdGhpcy51cmwgPSBvcHRpb25zLnVybCBhcyBzdHJpbmc7XG4gICAgdGhpcy50aW1lb3V0ID0gb3B0aW9ucy50aW1lb3V0O1xuICAgIHRoaXMuaGVhZGVycyA9IG9wdGlvbnMuaGVhZGVycyB8fCB7fTtcbiAgICB0aGlzLmZvcm1EYXRhQnVpbGRlciA9IG5ldyBGb3JtRGF0YUJ1aWxkZXIoZm9ybURhdGEpO1xuICB9XG5cbiAgYXN5bmMgcmVxdWVzdChcbiAgICBtZXRob2Q6IHN0cmluZyxcbiAgICB1cmw6IHN0cmluZyxcbiAgICBvbkNhbGxPcHRpb25zPzogUmVjb3JkPHN0cmluZywgdW5rbm93biB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID5cbiAgKTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIGNvbnN0IG9wdGlvbnM6IE9uQ2FsbFJlcXVlc3RPcHRpb25zID0geyAuLi5vbkNhbGxPcHRpb25zIH07XG4gICAgY29uc3QgYmFzaWMgPSBiYXNlNjQuZW5jb2RlKGAke3RoaXMudXNlcm5hbWV9OiR7dGhpcy5rZXl9YCk7XG4gICAgY29uc3Qgb25DYWxsSGVhZGVycyA9IG9wdGlvbnMuaGVhZGVycyA/IG9wdGlvbnMuaGVhZGVycyA6IHt9O1xuICAgIGNvbnN0IGhlYWRlcnM6IEhlYWRlcnNJbml0fCBPbkNhbGxFbXB0eUhlYWRlcnMgPSB7XG4gICAgICBBdXRob3JpemF0aW9uOiBgQmFzaWMgJHtiYXNpY31gLFxuICAgICAgLi4udGhpcy5oZWFkZXJzLFxuICAgICAgLi4ub25DYWxsSGVhZGVyc1xuICAgIH07XG5cbiAgICBkZWxldGUgb3B0aW9ucz8uaGVhZGVycztcblxuICAgIGNvbnN0IHBhcmFtcyA9IHsgLi4ub3B0aW9ucyB9O1xuXG4gICAgaWYgKG9wdGlvbnM/LnF1ZXJ5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9wdGlvbnM/LnF1ZXJ5KS5sZW5ndGggPiAwKSB7XG4gICAgICBwYXJhbXMuc2VhcmNoUGFyYW1zID0gb3B0aW9ucy5xdWVyeTtcbiAgICAgIGRlbGV0ZSBwYXJhbXMucXVlcnk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2U6IFJlc3BvbnNlID0gYXdhaXQga3koXG4gICAgICB1cmxqb2luKHRoaXMudXJsLCB1cmwpLFxuICAgICAge1xuICAgICAgICBtZXRob2Q6IG1ldGhvZC50b0xvY2FsZVVwcGVyQ2FzZSgpLFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgICB0aHJvd0h0dHBFcnJvcnM6IGZhbHNlLFxuICAgICAgICB0aW1lb3V0OiB0aGlzLnRpbWVvdXQsXG4gICAgICAgIC4uLnBhcmFtc1xuICAgICAgfVxuICAgICk7XG5cbiAgICBpZiAoIXJlc3BvbnNlPy5vaykge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5nZXRSZXNwb25zZUJvZHkocmVzcG9uc2UpO1xuXG4gICAgICB0aHJvdyBuZXcgQVBJRXJyb3Ioe1xuICAgICAgICBzdGF0dXM6IHJlc3BvbnNlPy5zdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IHJlc3BvbnNlPy5zdGF0dXNUZXh0LFxuICAgICAgICBib2R5OiByZXMuYm9keVxuICAgICAgfSBhcyBBUElFcnJvck9wdGlvbnMpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZ2V0UmVzcG9uc2VCb2R5KHJlc3BvbnNlKTtcbiAgICByZXR1cm4gcmVzIGFzIEFQSVJlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRSZXNwb25zZUJvZHkocmVzcG9uc2U6IFJlc3BvbnNlKTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIGNvbnN0IHJlcyA9IHtcbiAgICAgIGJvZHk6IHt9LFxuICAgICAgc3RhdHVzOiByZXNwb25zZT8uc3RhdHVzXG4gICAgfSBhcyBBUElSZXNwb25zZTtcbiAgICBsZXQgcmVzcG9uc2VTdHJpbmcgPSAnJztcbiAgICB0cnkge1xuICAgICAgcmVzcG9uc2VTdHJpbmcgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgICBjb25zdCBqc29uQm9keSA9IEpTT04ucGFyc2UocmVzcG9uc2VTdHJpbmcpO1xuICAgICAgcmVzLmJvZHkgPSBqc29uQm9keTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgIHJlcy5zdGF0dXMgPSA0MDA7XG4gICAgICByZXMuYm9keSA9IHtcbiAgICAgICAgbWVzc2FnZTogcmVzcG9uc2VTdHJpbmcsXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gIH1cblxuICBxdWVyeShcbiAgICBtZXRob2Q6IHN0cmluZyxcbiAgICB1cmw6IHN0cmluZyxcbiAgICBxdWVyeT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgQXJyYXk8QXJyYXk8c3RyaW5nPj4sXG4gICAgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1ldGhvZCwgdXJsLCB7IHF1ZXJ5LCAuLi5vcHRpb25zIH0pO1xuICB9XG5cbiAgY29tbWFuZChcbiAgICBtZXRob2Q6IHN0cmluZyxcbiAgICB1cmw6IHN0cmluZyxcbiAgICBkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBzdHJpbmcgfCBOb2RlRm9ybURhdGEgfCBGb3JtRGF0YSxcbiAgICBvcHRpb25zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgYWRkRGVmYXVsdEhlYWRlcnMgPSB0cnVlXG4gICk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICBsZXQgaGVhZGVycyA9IHt9O1xuICAgIGlmIChhZGREZWZhdWx0SGVhZGVycykge1xuICAgICAgaGVhZGVycyA9IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnIH07XG4gICAgfVxuICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0ge1xuICAgICAgLi4uaGVhZGVycyxcbiAgICAgIGJvZHk6IGRhdGEsXG4gICAgICAuLi5vcHRpb25zXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgcmVxdWVzdE9wdGlvbnNcbiAgICApO1xuICB9XG5cbiAgZ2V0KFxuICAgIHVybDogc3RyaW5nLFxuICAgIHF1ZXJ5PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBBcnJheTxBcnJheTxzdHJpbmc+PixcbiAgICBvcHRpb25zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgKTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5KCdnZXQnLCB1cmwsIHF1ZXJ5LCBvcHRpb25zKTtcbiAgfVxuXG4gIHBvc3QoXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICApOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuY29tbWFuZCgncG9zdCcsIHVybCwgZGF0YSwgb3B0aW9ucyk7XG4gIH1cblxuICBwb3N0V2l0aEZEKFxuICAgIHVybDogc3RyaW5nLFxuICAgIGRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXVxuICApOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgY29uc3QgZm9ybURhdGEgPSB0aGlzLmZvcm1EYXRhQnVpbGRlci5jcmVhdGVGb3JtRGF0YShkYXRhKTtcbiAgICByZXR1cm4gdGhpcy5jb21tYW5kKCdwb3N0JywgdXJsLCBmb3JtRGF0YSwge30sIGZhbHNlKTtcbiAgfVxuXG4gIHB1dFdpdGhGRCh1cmw6IHN0cmluZywgZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgY29uc3QgZm9ybURhdGEgPSB0aGlzLmZvcm1EYXRhQnVpbGRlci5jcmVhdGVGb3JtRGF0YShkYXRhKTtcbiAgICByZXR1cm4gdGhpcy5jb21tYW5kKCdwdXQnLCB1cmwsIGZvcm1EYXRhLCB7fSwgZmFsc2UpO1xuICB9XG5cbiAgcGF0Y2hXaXRoRkQodXJsOiBzdHJpbmcsIGRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIGNvbnN0IGZvcm1EYXRhID0gdGhpcy5mb3JtRGF0YUJ1aWxkZXIuY3JlYXRlRm9ybURhdGEoZGF0YSk7XG4gICAgcmV0dXJuIHRoaXMuY29tbWFuZCgncGF0Y2gnLCB1cmwsIGZvcm1EYXRhLCB7fSwgZmFsc2UpO1xuICB9XG5cbiAgcHV0KHVybDogc3RyaW5nLCBkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBzdHJpbmcsIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilcbiAgOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuY29tbWFuZCgncHV0JywgdXJsLCBkYXRhLCBvcHRpb25zKTtcbiAgfVxuXG4gIGRlbGV0ZSh1cmw6IHN0cmluZywgZGF0YT86IElwUG9vbERlbGV0ZURhdGEpOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuY29tbWFuZCgnZGVsZXRlJywgdXJsLCBkYXRhKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBSZXF1ZXN0O1xuIiwiaW1wb3J0IHtcbiAgQ3JlYXRlVXBkYXRlUm91dGVEYXRhLCBEZXN0cm95Um91dGVSZXNwb25zZSwgUm91dGUsIFJvdXRlc0xpc3RRdWVyeSwgVXBkYXRlUm91dGVSZXNwb25zZVxufSBmcm9tICcuL2ludGVyZmFjZXMvcm91dGVzJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vcmVxdWVzdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJvdXRlc0NsaWVudCB7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCkge1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gIH1cblxuICBsaXN0KHF1ZXJ5OiBSb3V0ZXNMaXN0UXVlcnkpOiBQcm9taXNlPFJvdXRlW10+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCgnL3YzL3JvdXRlcycsIHF1ZXJ5KVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5Lml0ZW1zKTtcbiAgfVxuXG4gIGdldChpZDogc3RyaW5nKTogUHJvbWlzZTxSb3V0ZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KGAvdjMvcm91dGVzLyR7aWR9YClcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keS5yb3V0ZSk7XG4gIH1cblxuICBjcmVhdGUoZGF0YTogQ3JlYXRlVXBkYXRlUm91dGVEYXRhKTogUHJvbWlzZTxSb3V0ZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRCgnL3YzL3JvdXRlcycsIGRhdGEpXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkucm91dGUpO1xuICB9XG5cbiAgdXBkYXRlKGlkOiBzdHJpbmcsIGRhdGE6IENyZWF0ZVVwZGF0ZVJvdXRlRGF0YSk6IFByb21pc2U8VXBkYXRlUm91dGVSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0V2l0aEZEKGAvdjMvcm91dGVzLyR7aWR9YCwgZGF0YSlcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keSk7XG4gIH1cblxuICBkZXN0cm95KGlkOiBzdHJpbmcpOiBQcm9taXNlPERlc3Ryb3lSb3V0ZVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5kZWxldGUoYC92My9yb3V0ZXMvJHtpZH1gKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5KTtcbiAgfVxufVxuIiwiaW1wb3J0IHVybGpvaW4gZnJvbSAndXJsLWpvaW4nO1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0JztcbmltcG9ydCB7IFN0YXRzUXVlcnksIFN0YXRzT3B0aW9ucywgU3RhdCB9IGZyb20gJy4vaW50ZXJmYWNlcy9TdGF0c09wdGlvbnMnO1xuXG5jbGFzcyBTdGF0cyB7XG4gIHN0YXJ0OiBEYXRlO1xuICBlbmQ6IERhdGU7XG4gIHJlc29sdXRpb246IHN0cmluZztcbiAgc3RhdHM6IFN0YXRbXTtcblxuICBjb25zdHJ1Y3RvcihkYXRhOiBTdGF0c09wdGlvbnMpIHtcbiAgICB0aGlzLnN0YXJ0ID0gbmV3IERhdGUoZGF0YS5zdGFydCk7XG4gICAgdGhpcy5lbmQgPSBuZXcgRGF0ZShkYXRhLmVuZCk7XG4gICAgdGhpcy5yZXNvbHV0aW9uID0gZGF0YS5yZXNvbHV0aW9uO1xuICAgIHRoaXMuc3RhdHMgPSBkYXRhLnN0YXRzLm1hcChmdW5jdGlvbiAoc3RhdDogU3RhdCkge1xuICAgICAgY29uc3QgcmVzID0geyAuLi5zdGF0IH07XG4gICAgICByZXMudGltZSA9IG5ldyBEYXRlKHN0YXQudGltZSk7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0YXRzQ2xpZW50IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0KSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgfVxuXG4gIHByaXZhdGUgcHJlcGFyZVNlYXJjaFBhcmFtcyhxdWVyeTogU3RhdHNRdWVyeSB8IHVuZGVmaW5lZCk6IEFycmF5PEFycmF5PHN0cmluZz4+IHtcbiAgICBsZXQgc2VhcmNoUGFyYW1zID0gW10gYXMgQXJyYXk8QXJyYXk8c3RyaW5nPj47XG4gICAgaWYgKHR5cGVvZiBxdWVyeSA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMocXVlcnkpLmxlbmd0aCkge1xuICAgICAgc2VhcmNoUGFyYW1zID0gT2JqZWN0LmVudHJpZXMocXVlcnkpLnJlZHVjZSgoYXJyYXlXaXRoUGFpcnMsIGN1cnJlbnRQYWlyKSA9PiB7XG4gICAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IGN1cnJlbnRQYWlyO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc3QgcmVwZWF0ZWRQcm9wZXJ0eSA9IHZhbHVlLm1hcCgoaXRlbSkgPT4gW2tleSwgaXRlbV0pO1xuICAgICAgICAgIHJldHVybiBbLi4uYXJyYXlXaXRoUGFpcnMsIC4uLnJlcGVhdGVkUHJvcGVydHldO1xuICAgICAgICB9XG4gICAgICAgIGFycmF5V2l0aFBhaXJzLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgICAgICAgcmV0dXJuIGFycmF5V2l0aFBhaXJzO1xuICAgICAgfSwgW10gYXMgQXJyYXk8QXJyYXk8c3RyaW5nPj4pO1xuICAgIH1cblxuICAgIHJldHVybiBzZWFyY2hQYXJhbXM7XG4gIH1cblxuICBfcGFyc2VTdGF0cyhyZXNwb25zZTogeyBib2R5OiBTdGF0c09wdGlvbnMgfSk6IFN0YXRzIHtcbiAgICByZXR1cm4gbmV3IFN0YXRzKHJlc3BvbnNlLmJvZHkpO1xuICB9XG5cbiAgZ2V0RG9tYWluKGRvbWFpbjogc3RyaW5nLCBxdWVyeT86IFN0YXRzUXVlcnkpOiBQcm9taXNlPFN0YXRzPiB7XG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gdGhpcy5wcmVwYXJlU2VhcmNoUGFyYW1zKHF1ZXJ5KTtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKCcvdjMnLCBkb21haW4sICdzdGF0cy90b3RhbCcpLCBzZWFyY2hQYXJhbXMpXG4gICAgICAudGhlbih0aGlzLl9wYXJzZVN0YXRzKTtcbiAgfVxuXG4gIGdldEFjY291bnQocXVlcnk/OiBTdGF0c1F1ZXJ5KTogUHJvbWlzZTxTdGF0cz4ge1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IHRoaXMucHJlcGFyZVNlYXJjaFBhcmFtcyhxdWVyeSk7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQoJy92My9zdGF0cy90b3RhbCcsIHNlYXJjaFBhcmFtcylcbiAgICAgIC50aGVuKHRoaXMuX3BhcnNlU3RhdHMpO1xuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cbmltcG9ydCB1cmxqb2luIGZyb20gJ3VybC1qb2luJztcblxuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0JztcbmltcG9ydCB7XG4gIEJvdW5jZURhdGEsXG4gIENvbXBsYWludERhdGEsXG4gIFBhZ2VzTGlzdCxcbiAgUGFnZXNMaXN0QWNjdW11bGF0b3IsXG4gIFBhcnNlZFBhZ2UsXG4gIFBhcnNlZFBhZ2VzTGlzdCxcbiAgU3VwcHJlc3Npb25DcmVhdGlvbkRhdGEsXG4gIFN1cHByZXNzaW9uQ3JlYXRpb25SZXNwb25zZSxcbiAgU3VwcHJlc3Npb25DcmVhdGlvblJlc3VsdCxcbiAgU3VwcHJlc3Npb25EZXN0cm95UmVzcG9uc2UsXG4gIFN1cHByZXNzaW9uRGVzdHJveVJlc3VsdCxcbiAgU3VwcHJlc3Npb25MaXN0LFxuICBTdXBwcmVzc2lvbkxpc3RRdWVyeSxcbiAgU3VwcHJlc3Npb25MaXN0UmVzcG9uc2UsXG4gIFN1cHByZXNzaW9uTW9kZWxzLFxuICBTdXBwcmVzc2lvblJlc3BvbnNlLFxuICBVbnN1YnNjcmliZURhdGEsXG4gIFdoaXRlTGlzdERhdGEsXG59IGZyb20gJy4vaW50ZXJmYWNlcy9TdXByZXNzaW9ucyc7XG5pbXBvcnQgQVBJRXJyb3IgZnJvbSAnLi9lcnJvcic7XG5pbXBvcnQgQVBJRXJyb3JPcHRpb25zIGZyb20gJy4vaW50ZXJmYWNlcy9BUElFcnJvck9wdGlvbnMnO1xuXG5jb25zdCBjcmVhdGVPcHRpb25zID0ge1xuICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfVxufTtcbmV4cG9ydCBjbGFzcyBTdXBwcmVzc2lvbiB7XG4gIHR5cGU6IHN0cmluZztcbiAgY29uc3RydWN0b3IodHlwZTogU3VwcHJlc3Npb25Nb2RlbHMpIHtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICB9XG59XG5leHBvcnQgY2xhc3MgQm91bmNlIGV4dGVuZHMgU3VwcHJlc3Npb24ge1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIGNvZGU6IG51bWJlcjtcbiAgZXJyb3I6IHN0cmluZztcbiAgY3JlYXRlZF9hdDogRGF0ZTtcblxuICBjb25zdHJ1Y3RvcihkYXRhOiBCb3VuY2VEYXRhKSB7XG4gICAgc3VwZXIoU3VwcHJlc3Npb25Nb2RlbHMuQk9VTkNFUyk7XG4gICAgdGhpcy5hZGRyZXNzID0gZGF0YS5hZGRyZXNzO1xuICAgIHRoaXMuY29kZSA9ICtkYXRhLmNvZGU7XG4gICAgdGhpcy5lcnJvciA9IGRhdGEuZXJyb3I7XG4gICAgdGhpcy5jcmVhdGVkX2F0ID0gbmV3IERhdGUoZGF0YS5jcmVhdGVkX2F0KTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29tcGxhaW50IGV4dGVuZHMgU3VwcHJlc3Npb24ge1xuICBhZGRyZXNzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGNyZWF0ZWRfYXQ6IERhdGU7XG5cbiAgY29uc3RydWN0b3IoZGF0YTogQ29tcGxhaW50RGF0YSkge1xuICAgIHN1cGVyKFN1cHByZXNzaW9uTW9kZWxzLkNPTVBMQUlOVFMpO1xuICAgIHRoaXMuYWRkcmVzcyA9IGRhdGEuYWRkcmVzcztcbiAgICB0aGlzLmNyZWF0ZWRfYXQgPSBuZXcgRGF0ZShkYXRhLmNyZWF0ZWRfYXQpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVbnN1YnNjcmliZSBleHRlbmRzIFN1cHByZXNzaW9uIHtcbiAgYWRkcmVzczogc3RyaW5nO1xuICB0YWdzOiBzdHJpbmdbXTtcbiAgY3JlYXRlZF9hdDogRGF0ZTtcblxuICBjb25zdHJ1Y3RvcihkYXRhOiBVbnN1YnNjcmliZURhdGEpIHtcbiAgICBzdXBlcihTdXBwcmVzc2lvbk1vZGVscy5VTlNVQlNDUklCRVMpO1xuICAgIHRoaXMuYWRkcmVzcyA9IGRhdGEuYWRkcmVzcztcbiAgICB0aGlzLnRhZ3MgPSBkYXRhLnRhZ3M7XG4gICAgdGhpcy5jcmVhdGVkX2F0ID0gbmV3IERhdGUoZGF0YS5jcmVhdGVkX2F0KTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgV2hpdGVMaXN0IGV4dGVuZHMgU3VwcHJlc3Npb24ge1xuICB2YWx1ZTogc3RyaW5nO1xuICByZWFzb246IHN0cmluZztcbiAgY3JlYXRlZEF0OiBEYXRlO1xuXG4gIGNvbnN0cnVjdG9yKGRhdGE6IFdoaXRlTGlzdERhdGEpIHtcbiAgICBzdXBlcihTdXBwcmVzc2lvbk1vZGVscy5XSElURUxJU1RTKTtcbiAgICB0aGlzLnZhbHVlID0gZGF0YS52YWx1ZTtcbiAgICB0aGlzLnJlYXNvbiA9IGRhdGEucmVhc29uO1xuICAgIHRoaXMuY3JlYXRlZEF0ID0gbmV3IERhdGUoZGF0YS5jcmVhdGVkQXQpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN1cHByZXNzaW9uQ2xpZW50IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcbiAgbW9kZWxzOiBNYXA8c3RyaW5nLCBhbnk+O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMubW9kZWxzID0gbmV3IE1hcCgpO1xuICAgIHRoaXMubW9kZWxzLnNldCgnYm91bmNlcycsIEJvdW5jZSk7XG4gICAgdGhpcy5tb2RlbHMuc2V0KCdjb21wbGFpbnRzJywgQ29tcGxhaW50KTtcbiAgICB0aGlzLm1vZGVscy5zZXQoJ3Vuc3Vic2NyaWJlcycsIFVuc3Vic2NyaWJlKTtcbiAgICB0aGlzLm1vZGVscy5zZXQoJ3doaXRlbGlzdHMnLCBXaGl0ZUxpc3QpO1xuICB9XG5cbiAgX3BhcnNlUGFnZShpZDogc3RyaW5nLCBwYWdlVXJsOiBzdHJpbmcpIDogUGFyc2VkUGFnZSB7XG4gICAgY29uc3QgcGFyc2VkVXJsID0gbmV3IFVSTChwYWdlVXJsKTtcbiAgICBjb25zdCB7IHNlYXJjaFBhcmFtcyB9ID0gcGFyc2VkVXJsO1xuICAgIHJldHVybiB7XG4gICAgICBpZCxcbiAgICAgIHBhZ2U6IHNlYXJjaFBhcmFtcy5oYXMoJ3BhZ2UnKSA/IHNlYXJjaFBhcmFtcy5nZXQoJ3BhZ2UnKSA6IHVuZGVmaW5lZCxcbiAgICAgIGFkZHJlc3M6IHNlYXJjaFBhcmFtcy5oYXMoJ2FkZHJlc3MnKSA/IHNlYXJjaFBhcmFtcy5nZXQoJ2FkZHJlc3MnKSA6IHVuZGVmaW5lZCxcbiAgICAgIHVybDogcGFnZVVybFxuICAgIH07XG4gIH1cblxuICBfcGFyc2VQYWdlTGlua3MocmVzcG9uc2U6IFN1cHByZXNzaW9uTGlzdFJlc3BvbnNlKTogUGFyc2VkUGFnZXNMaXN0IHtcbiAgICBjb25zdCBwYWdlcyA9IE9iamVjdC5lbnRyaWVzKHJlc3BvbnNlLmJvZHkucGFnaW5nIGFzIFBhZ2VzTGlzdCk7XG4gICAgcmV0dXJuIHBhZ2VzLnJlZHVjZShcbiAgICAgIChhY2M6IFBhZ2VzTGlzdEFjY3VtdWxhdG9yLCBwYWlyOiBbcGFnZVVybDogc3RyaW5nLCBpZDogc3RyaW5nXSkgPT4ge1xuICAgICAgICBjb25zdCBpZCA9IHBhaXJbMF07XG4gICAgICAgIGNvbnN0IHBhZ2VVcmwgPSBwYWlyWzFdO1xuICAgICAgICBhY2NbaWRdID0gdGhpcy5fcGFyc2VQYWdlKGlkLCBwYWdlVXJsKTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIHt9XG4gICAgKSBhcyB1bmtub3duIGFzIFBhcnNlZFBhZ2VzTGlzdDtcbiAgfVxuXG4gIF9wYXJzZUxpc3QoXG4gICAgcmVzcG9uc2U6IFN1cHByZXNzaW9uTGlzdFJlc3BvbnNlLFxuICAgIE1vZGVsOiB7XG4gICAgICBuZXcoZGF0YTogQm91bmNlRGF0YSB8IENvbXBsYWludERhdGEgfCBVbnN1YnNjcmliZURhdGEgfCBXaGl0ZUxpc3REYXRhKTpcbiAgICAgIEJvdW5jZSB8IENvbXBsYWludCB8IFVuc3Vic2NyaWJlIHwgV2hpdGVMaXN0XG4gICAgfVxuICApOiBTdXBwcmVzc2lvbkxpc3Qge1xuICAgIGNvbnN0IGRhdGEgPSB7fSBhcyBTdXBwcmVzc2lvbkxpc3Q7XG4gICAgZGF0YS5pdGVtcyA9IHJlc3BvbnNlLmJvZHkuaXRlbXMubWFwKChpdGVtKSA9PiBuZXcgTW9kZWwoaXRlbSkpO1xuXG4gICAgZGF0YS5wYWdlcyA9IHRoaXMuX3BhcnNlUGFnZUxpbmtzKHJlc3BvbnNlKTtcblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgX3BhcnNlSXRlbTxUIGV4dGVuZHMgU3VwcHJlc3Npb24+KFxuICAgIGRhdGEgOiBCb3VuY2VEYXRhIHwgQ29tcGxhaW50RGF0YSB8IFVuc3Vic2NyaWJlRGF0YSB8IFdoaXRlTGlzdERhdGEsXG4gICAgTW9kZWw6IHtcbiAgICAgIG5ldyhkYXRhOiBCb3VuY2VEYXRhIHwgQ29tcGxhaW50RGF0YSB8IFVuc3Vic2NyaWJlRGF0YSB8IFdoaXRlTGlzdERhdGEpOlxuICAgICAgVFxuICAgIH1cbiAgKTogVCB7XG4gICAgcmV0dXJuIG5ldyBNb2RlbChkYXRhKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlV2hpdGVMaXN0KFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIGRhdGE6IFN1cHByZXNzaW9uQ3JlYXRpb25EYXRhIHwgU3VwcHJlc3Npb25DcmVhdGlvbkRhdGFbXVxuICApOiBQcm9taXNlPFN1cHByZXNzaW9uQ3JlYXRpb25SZXN1bHQ+IHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgdGhyb3cgbmV3IEFQSUVycm9yKHtcbiAgICAgICAgc3RhdHVzOiA0MDAsXG4gICAgICAgIHN0YXR1c1RleHQ6ICdEYXRhIHByb3BlcnR5IHNob3VsZCBiZSBhbiBvYmplY3QnLFxuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgbWVzc2FnZTogJ1doaXRlbGlzdFxcJ3MgY3JlYXRpb24gcHJvY2VzcyBkb2VzIG5vdCBzdXBwb3J0IG11bHRpcGxlIGNyZWF0aW9ucy4gRGF0YSBwcm9wZXJ0eSBzaG91bGQgYmUgYW4gb2JqZWN0J1xuICAgICAgICB9XG4gICAgICB9IGFzIEFQSUVycm9yT3B0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnJlcXVlc3RcbiAgICAgIC5wb3N0V2l0aEZEKHVybGpvaW4oJ3YzJywgZG9tYWluLCAnd2hpdGVsaXN0cycpLCBkYXRhKVxuICAgICAgLnRoZW4odGhpcy5wcmVwYXJlUmVzcG9uc2UpO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja1R5cGUodHlwZTogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLm1vZGVscy5oYXModHlwZSkpIHtcbiAgICAgIHRocm93IG5ldyBBUElFcnJvcih7XG4gICAgICAgIHN0YXR1czogNDAwLFxuICAgICAgICBzdGF0dXNUZXh0OiAnVW5rbm93biB0eXBlIHZhbHVlJyxcbiAgICAgICAgYm9keTogeyBtZXNzYWdlOiAnVHlwZSBtYXkgYmUgb25seSBvbmUgb2YgW2JvdW5jZXMsIGNvbXBsYWludHMsIHVuc3Vic2NyaWJlcywgd2hpdGVsaXN0c10nIH1cbiAgICAgIH0gYXMgQVBJRXJyb3JPcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHByZXBhcmVSZXNwb25zZShyZXNwb25zZTogU3VwcHJlc3Npb25DcmVhdGlvblJlc3BvbnNlKTogU3VwcHJlc3Npb25DcmVhdGlvblJlc3VsdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1lc3NhZ2U6IHJlc3BvbnNlLmJvZHkubWVzc2FnZSxcbiAgICAgIHR5cGU6IHJlc3BvbnNlLmJvZHkudHlwZSB8fCAnJyxcbiAgICAgIHZhbHVlOiByZXNwb25zZS5ib2R5LnZhbHVlIHx8ICcnLFxuICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXNcbiAgICB9O1xuICB9XG5cbiAgbGlzdChcbiAgICBkb21haW46IHN0cmluZyxcbiAgICB0eXBlOiBzdHJpbmcsXG4gICAgcXVlcnk/OiBTdXBwcmVzc2lvbkxpc3RRdWVyeVxuICApOiBQcm9taXNlPFN1cHByZXNzaW9uTGlzdD4ge1xuICAgIHRoaXMuY2hlY2tUeXBlKHR5cGUpO1xuXG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLm1vZGVscy5nZXQodHlwZSk7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdFxuICAgICAgLmdldCh1cmxqb2luKCd2MycsIGRvbWFpbiwgdHlwZSksIHF1ZXJ5KVxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiBTdXBwcmVzc2lvbkxpc3RSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VMaXN0KHJlc3BvbnNlLCBtb2RlbCkpO1xuICB9XG5cbiAgZ2V0KFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIHR5cGU6IHN0cmluZyxcbiAgICBhZGRyZXNzOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxCb3VuY2UgfCBDb21wbGFpbnQgfCBVbnN1YnNjcmliZSB8IFdoaXRlTGlzdD4ge1xuICAgIHRoaXMuY2hlY2tUeXBlKHR5cGUpO1xuXG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLm1vZGVscy5nZXQodHlwZSk7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdFxuICAgICAgLmdldCh1cmxqb2luKCd2MycsIGRvbWFpbiwgdHlwZSwgZW5jb2RlVVJJQ29tcG9uZW50KGFkZHJlc3MpKSlcbiAgICAgIC50aGVuKChyZXNwb25zZTogU3VwcHJlc3Npb25SZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VJdGVtPHR5cGVvZiBtb2RlbD4ocmVzcG9uc2UuYm9keSwgbW9kZWwpKTtcbiAgfVxuXG4gIGNyZWF0ZShcbiAgICBkb21haW46IHN0cmluZyxcbiAgICB0eXBlOiBzdHJpbmcsXG4gICAgZGF0YTogU3VwcHJlc3Npb25DcmVhdGlvbkRhdGEgfCBTdXBwcmVzc2lvbkNyZWF0aW9uRGF0YVtdXG4gICk6IFByb21pc2U8U3VwcHJlc3Npb25DcmVhdGlvblJlc3VsdD4ge1xuICAgIHRoaXMuY2hlY2tUeXBlKHR5cGUpO1xuICAgIC8vIHN1cHBvcnRzIGFkZGluZyBtdWx0aXBsZSBzdXBwcmVzc2lvbnMgYnkgZGVmYXVsdFxuICAgIGxldCBwb3N0RGF0YTtcbiAgICBpZiAodHlwZSA9PT0gJ3doaXRlbGlzdHMnKSB7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVXaGl0ZUxpc3QoZG9tYWluLCBkYXRhKTtcbiAgICB9XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgIHBvc3REYXRhID0gW2RhdGFdO1xuICAgIH0gZWxzZSB7XG4gICAgICBwb3N0RGF0YSA9IFsuLi5kYXRhXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0XG4gICAgICAucG9zdCh1cmxqb2luKCd2MycsIGRvbWFpbiwgdHlwZSksIEpTT04uc3RyaW5naWZ5KHBvc3REYXRhKSwgY3JlYXRlT3B0aW9ucylcbiAgICAgIC50aGVuKHRoaXMucHJlcGFyZVJlc3BvbnNlKTtcbiAgfVxuXG4gIGRlc3Ryb3koXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgdHlwZTogc3RyaW5nLFxuICAgIGFkZHJlc3M6IHN0cmluZ1xuICApOiBQcm9taXNlPFN1cHByZXNzaW9uRGVzdHJveVJlc3VsdD4ge1xuICAgIHRoaXMuY2hlY2tUeXBlKHR5cGUpO1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3RcbiAgICAgIC5kZWxldGUodXJsam9pbigndjMnLCBkb21haW4sIHR5cGUsIGVuY29kZVVSSUNvbXBvbmVudChhZGRyZXNzKSkpXG4gICAgICAudGhlbigocmVzcG9uc2U6IFN1cHByZXNzaW9uRGVzdHJveVJlc3BvbnNlKSA9PiAoe1xuICAgICAgICBtZXNzYWdlOiByZXNwb25zZS5ib2R5Lm1lc3NhZ2UsXG4gICAgICAgIHZhbHVlOiByZXNwb25zZS5ib2R5LnZhbHVlIHx8ICcnLFxuICAgICAgICBhZGRyZXNzOiByZXNwb25zZS5ib2R5LmFkZHJlc3MgfHwgJycsXG4gICAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzXG4gICAgICB9KSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTdXBwcmVzc2lvbkNsaWVudDtcbiIsImltcG9ydCB7IElNdWx0aXBsZVZhbGlkYXRpb25DbGllbnQgfSBmcm9tICcuL2ludGVyZmFjZXMvTXVsdGlwbGVWYWxpZGF0aW9uJztcbmltcG9ydCB7IFZhbGlkYXRpb25SZXN1bHQsIFZhbGlkYXRpb25SZXNwb25zZSwgVmFsaWRhdGlvblF1ZXJ5IH0gZnJvbSAnLi9pbnRlcmZhY2VzL1ZhbGlkYXRlJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vcmVxdWVzdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZhbGlkYXRlQ2xpZW50IHtcbiAgcHVibGljIG11bHRpcGxlVmFsaWRhdGlvbjtcbiAgcmVxdWVzdDogUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0LCBtdWx0aXBsZVZhbGlkYXRpb25DbGllbnQ6IElNdWx0aXBsZVZhbGlkYXRpb25DbGllbnQpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMubXVsdGlwbGVWYWxpZGF0aW9uID0gbXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50O1xuICB9XG5cbiAgYXN5bmMgZ2V0KGFkZHJlc3M6IHN0cmluZyk6IFByb21pc2U8VmFsaWRhdGlvblJlc3VsdD4ge1xuICAgIGNvbnN0IHF1ZXJ5OiBWYWxpZGF0aW9uUXVlcnkgPSB7IGFkZHJlc3MgfTtcbiAgICBjb25zdCByZXN1bHQ6IFZhbGlkYXRpb25SZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5nZXQoJy92NC9hZGRyZXNzL3ZhbGlkYXRlJywgcXVlcnkpO1xuICAgIHJldHVybiByZXN1bHQuYm9keSBhcyBWYWxpZGF0aW9uUmVzdWx0O1xuICB9XG59XG4iLCJpbXBvcnQgdXJsam9pbiBmcm9tICd1cmwtam9pbic7XG5cbmltcG9ydCB7XG4gIFZhbGlkYXRpb25SZXNwb25zZSxcbiAgV2ViaG9va0xpc3QsXG4gIFdlYmhvb2tSZXNwb25zZSxcbiAgV2ViaG9va3NJZHMsXG4gIFdlYmhvb2tzUXVlcnlcbn0gZnJvbSAnLi9pbnRlcmZhY2VzL1dlYmhvb2tzJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vcmVxdWVzdCc7XG5cbmNsYXNzIFdlYmhvb2sge1xuICBpZDogc3RyaW5nO1xuICB1cmw6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihpZDogc3RyaW5nLCB1cmw6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuaWQgPSBpZDtcbiAgICB0aGlzLnVybCA9IHVybDtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXZWJob29rQ2xpZW50IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0KSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgfVxuXG4gIF9wYXJzZVdlYmhvb2tMaXN0KHJlc3BvbnNlOiB7IGJvZHk6IHsgd2ViaG9va3M6IFdlYmhvb2tMaXN0IH0gfSk6IFdlYmhvb2tMaXN0IHtcbiAgICByZXR1cm4gcmVzcG9uc2UuYm9keS53ZWJob29rcztcbiAgfVxuXG4gIF9wYXJzZVdlYmhvb2tXaXRoSUQoaWQ6IHN0cmluZykge1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVzcG9uc2U6IFdlYmhvb2tSZXNwb25zZSk6IFdlYmhvb2sge1xuICAgICAgY29uc3Qgd2ViaG9va1Jlc3BvbnNlID0gcmVzcG9uc2U/LmJvZHk/LndlYmhvb2s7XG4gICAgICBsZXQgdXJsID0gd2ViaG9va1Jlc3BvbnNlPy51cmw7XG4gICAgICBpZiAoIXVybCkge1xuICAgICAgICB1cmwgPSB3ZWJob29rUmVzcG9uc2U/LnVybHMgJiYgd2ViaG9va1Jlc3BvbnNlLnVybHMubGVuZ3RoXG4gICAgICAgICAgPyB3ZWJob29rUmVzcG9uc2UudXJsc1swXVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBXZWJob29rKGlkLCB1cmwpO1xuICAgIH07XG4gIH1cblxuICBfcGFyc2VXZWJob29rVGVzdChyZXNwb25zZTogeyBib2R5OiB7IGNvZGU6IG51bWJlciwgbWVzc2FnZTogc3RyaW5nIH0gfSlcbiAgOiB7Y29kZTogbnVtYmVyLCBtZXNzYWdlOnN0cmluZ30ge1xuICAgIHJldHVybiB7IGNvZGU6IHJlc3BvbnNlLmJvZHkuY29kZSwgbWVzc2FnZTogcmVzcG9uc2UuYm9keS5tZXNzYWdlIH0gYXMgVmFsaWRhdGlvblJlc3BvbnNlO1xuICB9XG5cbiAgbGlzdChkb21haW46IHN0cmluZywgcXVlcnk6IFdlYmhvb2tzUXVlcnkpOiBQcm9taXNlPFdlYmhvb2tMaXN0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICd3ZWJob29rcycpLCBxdWVyeSlcbiAgICAgIC50aGVuKHRoaXMuX3BhcnNlV2ViaG9va0xpc3QpO1xuICB9XG5cbiAgZ2V0KGRvbWFpbjogc3RyaW5nLCBpZDogV2ViaG9va3NJZHMpOiBQcm9taXNlPFdlYmhvb2s+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ3dlYmhvb2tzJywgaWQpKVxuICAgICAgLnRoZW4odGhpcy5fcGFyc2VXZWJob29rV2l0aElEKGlkKSk7XG4gIH1cblxuICBjcmVhdGUoZG9tYWluOiBzdHJpbmcsXG4gICAgaWQ6IHN0cmluZyxcbiAgICB1cmw6IHN0cmluZyxcbiAgICB0ZXN0ID0gZmFsc2UpOiBQcm9taXNlPFdlYmhvb2sgfCBWYWxpZGF0aW9uUmVzcG9uc2U+IHtcbiAgICBpZiAodGVzdCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXRXaXRoRkQodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICd3ZWJob29rcycsIGlkLCAndGVzdCcpLCB7IHVybCB9KVxuICAgICAgICAudGhlbih0aGlzLl9wYXJzZVdlYmhvb2tUZXN0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICd3ZWJob29rcycpLCB7IGlkLCB1cmwgfSlcbiAgICAgIC50aGVuKHRoaXMuX3BhcnNlV2ViaG9va1dpdGhJRChpZCkpO1xuICB9XG5cbiAgdXBkYXRlKGRvbWFpbjogc3RyaW5nLCBpZDogc3RyaW5nLCB1cmw6IHN0cmluZyk6IFByb21pc2U8V2ViaG9vaz4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0V2l0aEZEKHVybGpvaW4oJy92My9kb21haW5zJywgZG9tYWluLCAnd2ViaG9va3MnLCBpZCksIHsgdXJsIH0pXG4gICAgICAudGhlbih0aGlzLl9wYXJzZVdlYmhvb2tXaXRoSUQoaWQpKTtcbiAgfVxuXG4gIGRlc3Ryb3koZG9tYWluOiBzdHJpbmcsIGlkOiBzdHJpbmcpIDogUHJvbWlzZTxXZWJob29rPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5kZWxldGUodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICd3ZWJob29rcycsIGlkKSlcbiAgICAgIC50aGVuKHRoaXMuX3BhcnNlV2ViaG9va1dpdGhJRChpZCkpO1xuICB9XG59XG4iLCIvKiEgaHR0cHM6Ly9tdGhzLmJlL2Jhc2U2NCB2MS4wLjAgYnkgQG1hdGhpYXMgfCBNSVQgbGljZW5zZSAqL1xuOyhmdW5jdGlvbihyb290KSB7XG5cblx0Ly8gRGV0ZWN0IGZyZWUgdmFyaWFibGVzIGBleHBvcnRzYC5cblx0dmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cztcblxuXHQvLyBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC5cblx0dmFyIGZyZWVNb2R1bGUgPSB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJlxuXHRcdG1vZHVsZS5leHBvcnRzID09IGZyZWVFeHBvcnRzICYmIG1vZHVsZTtcblxuXHQvLyBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCwgZnJvbSBOb2RlLmpzIG9yIEJyb3dzZXJpZmllZCBjb2RlLCBhbmQgdXNlXG5cdC8vIGl0IGFzIGByb290YC5cblx0dmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbDtcblx0aWYgKGZyZWVHbG9iYWwuZ2xvYmFsID09PSBmcmVlR2xvYmFsIHx8IGZyZWVHbG9iYWwud2luZG93ID09PSBmcmVlR2xvYmFsKSB7XG5cdFx0cm9vdCA9IGZyZWVHbG9iYWw7XG5cdH1cblxuXHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuXHR2YXIgSW52YWxpZENoYXJhY3RlckVycm9yID0gZnVuY3Rpb24obWVzc2FnZSkge1xuXHRcdHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG5cdH07XG5cdEludmFsaWRDaGFyYWN0ZXJFcnJvci5wcm90b3R5cGUgPSBuZXcgRXJyb3I7XG5cdEludmFsaWRDaGFyYWN0ZXJFcnJvci5wcm90b3R5cGUubmFtZSA9ICdJbnZhbGlkQ2hhcmFjdGVyRXJyb3InO1xuXG5cdHZhciBlcnJvciA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHtcblx0XHQvLyBOb3RlOiB0aGUgZXJyb3IgbWVzc2FnZXMgdXNlZCB0aHJvdWdob3V0IHRoaXMgZmlsZSBtYXRjaCB0aG9zZSB1c2VkIGJ5XG5cdFx0Ly8gdGhlIG5hdGl2ZSBgYXRvYmAvYGJ0b2FgIGltcGxlbWVudGF0aW9uIGluIENocm9taXVtLlxuXHRcdHRocm93IG5ldyBJbnZhbGlkQ2hhcmFjdGVyRXJyb3IobWVzc2FnZSk7XG5cdH07XG5cblx0dmFyIFRBQkxFID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nO1xuXHQvLyBodHRwOi8vd2hhdHdnLm9yZy9odG1sL2NvbW1vbi1taWNyb3N5bnRheGVzLmh0bWwjc3BhY2UtY2hhcmFjdGVyXG5cdHZhciBSRUdFWF9TUEFDRV9DSEFSQUNURVJTID0gL1tcXHRcXG5cXGZcXHIgXS9nO1xuXG5cdC8vIGBkZWNvZGVgIGlzIGRlc2lnbmVkIHRvIGJlIGZ1bGx5IGNvbXBhdGlibGUgd2l0aCBgYXRvYmAgYXMgZGVzY3JpYmVkIGluIHRoZVxuXHQvLyBIVE1MIFN0YW5kYXJkLiBodHRwOi8vd2hhdHdnLm9yZy9odG1sL3dlYmFwcGFwaXMuaHRtbCNkb20td2luZG93YmFzZTY0LWF0b2Jcblx0Ly8gVGhlIG9wdGltaXplZCBiYXNlNjQtZGVjb2RpbmcgYWxnb3JpdGhtIHVzZWQgaXMgYmFzZWQgb24gQGF0a+KAmXMgZXhjZWxsZW50XG5cdC8vIGltcGxlbWVudGF0aW9uLiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9hdGsvMTAyMDM5NlxuXHR2YXIgZGVjb2RlID0gZnVuY3Rpb24oaW5wdXQpIHtcblx0XHRpbnB1dCA9IFN0cmluZyhpbnB1dClcblx0XHRcdC5yZXBsYWNlKFJFR0VYX1NQQUNFX0NIQVJBQ1RFUlMsICcnKTtcblx0XHR2YXIgbGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuXHRcdGlmIChsZW5ndGggJSA0ID09IDApIHtcblx0XHRcdGlucHV0ID0gaW5wdXQucmVwbGFjZSgvPT0/JC8sICcnKTtcblx0XHRcdGxlbmd0aCA9IGlucHV0Lmxlbmd0aDtcblx0XHR9XG5cdFx0aWYgKFxuXHRcdFx0bGVuZ3RoICUgNCA9PSAxIHx8XG5cdFx0XHQvLyBodHRwOi8vd2hhdHdnLm9yZy9DI2FscGhhbnVtZXJpYy1hc2NpaS1jaGFyYWN0ZXJzXG5cdFx0XHQvW14rYS16QS1aMC05L10vLnRlc3QoaW5wdXQpXG5cdFx0KSB7XG5cdFx0XHRlcnJvcihcblx0XHRcdFx0J0ludmFsaWQgY2hhcmFjdGVyOiB0aGUgc3RyaW5nIHRvIGJlIGRlY29kZWQgaXMgbm90IGNvcnJlY3RseSBlbmNvZGVkLidcblx0XHRcdCk7XG5cdFx0fVxuXHRcdHZhciBiaXRDb3VudGVyID0gMDtcblx0XHR2YXIgYml0U3RvcmFnZTtcblx0XHR2YXIgYnVmZmVyO1xuXHRcdHZhciBvdXRwdXQgPSAnJztcblx0XHR2YXIgcG9zaXRpb24gPSAtMTtcblx0XHR3aGlsZSAoKytwb3NpdGlvbiA8IGxlbmd0aCkge1xuXHRcdFx0YnVmZmVyID0gVEFCTEUuaW5kZXhPZihpbnB1dC5jaGFyQXQocG9zaXRpb24pKTtcblx0XHRcdGJpdFN0b3JhZ2UgPSBiaXRDb3VudGVyICUgNCA/IGJpdFN0b3JhZ2UgKiA2NCArIGJ1ZmZlciA6IGJ1ZmZlcjtcblx0XHRcdC8vIFVubGVzcyB0aGlzIGlzIHRoZSBmaXJzdCBvZiBhIGdyb3VwIG9mIDQgY2hhcmFjdGVyc+KAplxuXHRcdFx0aWYgKGJpdENvdW50ZXIrKyAlIDQpIHtcblx0XHRcdFx0Ly8g4oCmY29udmVydCB0aGUgZmlyc3QgOCBiaXRzIHRvIGEgc2luZ2xlIEFTQ0lJIGNoYXJhY3Rlci5cblx0XHRcdFx0b3V0cHV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoXG5cdFx0XHRcdFx0MHhGRiAmIGJpdFN0b3JhZ2UgPj4gKC0yICogYml0Q291bnRlciAmIDYpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvdXRwdXQ7XG5cdH07XG5cblx0Ly8gYGVuY29kZWAgaXMgZGVzaWduZWQgdG8gYmUgZnVsbHkgY29tcGF0aWJsZSB3aXRoIGBidG9hYCBhcyBkZXNjcmliZWQgaW4gdGhlXG5cdC8vIEhUTUwgU3RhbmRhcmQ6IGh0dHA6Ly93aGF0d2cub3JnL2h0bWwvd2ViYXBwYXBpcy5odG1sI2RvbS13aW5kb3diYXNlNjQtYnRvYVxuXHR2YXIgZW5jb2RlID0gZnVuY3Rpb24oaW5wdXQpIHtcblx0XHRpbnB1dCA9IFN0cmluZyhpbnB1dCk7XG5cdFx0aWYgKC9bXlxcMC1cXHhGRl0vLnRlc3QoaW5wdXQpKSB7XG5cdFx0XHQvLyBOb3RlOiBubyBuZWVkIHRvIHNwZWNpYWwtY2FzZSBhc3RyYWwgc3ltYm9scyBoZXJlLCBhcyBzdXJyb2dhdGVzIGFyZVxuXHRcdFx0Ly8gbWF0Y2hlZCwgYW5kIHRoZSBpbnB1dCBpcyBzdXBwb3NlZCB0byBvbmx5IGNvbnRhaW4gQVNDSUkgYW55d2F5LlxuXHRcdFx0ZXJyb3IoXG5cdFx0XHRcdCdUaGUgc3RyaW5nIHRvIGJlIGVuY29kZWQgY29udGFpbnMgY2hhcmFjdGVycyBvdXRzaWRlIG9mIHRoZSAnICtcblx0XHRcdFx0J0xhdGluMSByYW5nZS4nXG5cdFx0XHQpO1xuXHRcdH1cblx0XHR2YXIgcGFkZGluZyA9IGlucHV0Lmxlbmd0aCAlIDM7XG5cdFx0dmFyIG91dHB1dCA9ICcnO1xuXHRcdHZhciBwb3NpdGlvbiA9IC0xO1xuXHRcdHZhciBhO1xuXHRcdHZhciBiO1xuXHRcdHZhciBjO1xuXHRcdHZhciBidWZmZXI7XG5cdFx0Ly8gTWFrZSBzdXJlIGFueSBwYWRkaW5nIGlzIGhhbmRsZWQgb3V0c2lkZSBvZiB0aGUgbG9vcC5cblx0XHR2YXIgbGVuZ3RoID0gaW5wdXQubGVuZ3RoIC0gcGFkZGluZztcblxuXHRcdHdoaWxlICgrK3Bvc2l0aW9uIDwgbGVuZ3RoKSB7XG5cdFx0XHQvLyBSZWFkIHRocmVlIGJ5dGVzLCBpLmUuIDI0IGJpdHMuXG5cdFx0XHRhID0gaW5wdXQuY2hhckNvZGVBdChwb3NpdGlvbikgPDwgMTY7XG5cdFx0XHRiID0gaW5wdXQuY2hhckNvZGVBdCgrK3Bvc2l0aW9uKSA8PCA4O1xuXHRcdFx0YyA9IGlucHV0LmNoYXJDb2RlQXQoKytwb3NpdGlvbik7XG5cdFx0XHRidWZmZXIgPSBhICsgYiArIGM7XG5cdFx0XHQvLyBUdXJuIHRoZSAyNCBiaXRzIGludG8gZm91ciBjaHVua3Mgb2YgNiBiaXRzIGVhY2gsIGFuZCBhcHBlbmQgdGhlXG5cdFx0XHQvLyBtYXRjaGluZyBjaGFyYWN0ZXIgZm9yIGVhY2ggb2YgdGhlbSB0byB0aGUgb3V0cHV0LlxuXHRcdFx0b3V0cHV0ICs9IChcblx0XHRcdFx0VEFCTEUuY2hhckF0KGJ1ZmZlciA+PiAxOCAmIDB4M0YpICtcblx0XHRcdFx0VEFCTEUuY2hhckF0KGJ1ZmZlciA+PiAxMiAmIDB4M0YpICtcblx0XHRcdFx0VEFCTEUuY2hhckF0KGJ1ZmZlciA+PiA2ICYgMHgzRikgK1xuXHRcdFx0XHRUQUJMRS5jaGFyQXQoYnVmZmVyICYgMHgzRilcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0aWYgKHBhZGRpbmcgPT0gMikge1xuXHRcdFx0YSA9IGlucHV0LmNoYXJDb2RlQXQocG9zaXRpb24pIDw8IDg7XG5cdFx0XHRiID0gaW5wdXQuY2hhckNvZGVBdCgrK3Bvc2l0aW9uKTtcblx0XHRcdGJ1ZmZlciA9IGEgKyBiO1xuXHRcdFx0b3V0cHV0ICs9IChcblx0XHRcdFx0VEFCTEUuY2hhckF0KGJ1ZmZlciA+PiAxMCkgK1xuXHRcdFx0XHRUQUJMRS5jaGFyQXQoKGJ1ZmZlciA+PiA0KSAmIDB4M0YpICtcblx0XHRcdFx0VEFCTEUuY2hhckF0KChidWZmZXIgPDwgMikgJiAweDNGKSArXG5cdFx0XHRcdCc9J1xuXHRcdFx0KTtcblx0XHR9IGVsc2UgaWYgKHBhZGRpbmcgPT0gMSkge1xuXHRcdFx0YnVmZmVyID0gaW5wdXQuY2hhckNvZGVBdChwb3NpdGlvbik7XG5cdFx0XHRvdXRwdXQgKz0gKFxuXHRcdFx0XHRUQUJMRS5jaGFyQXQoYnVmZmVyID4+IDIpICtcblx0XHRcdFx0VEFCTEUuY2hhckF0KChidWZmZXIgPDwgNCkgJiAweDNGKSArXG5cdFx0XHRcdCc9PSdcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG91dHB1dDtcblx0fTtcblxuXHR2YXIgYmFzZTY0ID0ge1xuXHRcdCdlbmNvZGUnOiBlbmNvZGUsXG5cdFx0J2RlY29kZSc6IGRlY29kZSxcblx0XHQndmVyc2lvbic6ICcxLjAuMCdcblx0fTtcblxuXHQvLyBTb21lIEFNRCBidWlsZCBvcHRpbWl6ZXJzLCBsaWtlIHIuanMsIGNoZWNrIGZvciBzcGVjaWZpYyBjb25kaXRpb24gcGF0dGVybnNcblx0Ly8gbGlrZSB0aGUgZm9sbG93aW5nOlxuXHRpZiAoXG5cdFx0dHlwZW9mIGRlZmluZSA9PSAnZnVuY3Rpb24nICYmXG5cdFx0dHlwZW9mIGRlZmluZS5hbWQgPT0gJ29iamVjdCcgJiZcblx0XHRkZWZpbmUuYW1kXG5cdCkge1xuXHRcdGRlZmluZShmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBiYXNlNjQ7XG5cdFx0fSk7XG5cdH1cdGVsc2UgaWYgKGZyZWVFeHBvcnRzICYmICFmcmVlRXhwb3J0cy5ub2RlVHlwZSkge1xuXHRcdGlmIChmcmVlTW9kdWxlKSB7IC8vIGluIE5vZGUuanMgb3IgUmluZ29KUyB2MC44LjArXG5cdFx0XHRmcmVlTW9kdWxlLmV4cG9ydHMgPSBiYXNlNjQ7XG5cdFx0fSBlbHNlIHsgLy8gaW4gTmFyd2hhbCBvciBSaW5nb0pTIHYwLjcuMC1cblx0XHRcdGZvciAodmFyIGtleSBpbiBiYXNlNjQpIHtcblx0XHRcdFx0YmFzZTY0Lmhhc093blByb3BlcnR5KGtleSkgJiYgKGZyZWVFeHBvcnRzW2tleV0gPSBiYXNlNjRba2V5XSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2UgeyAvLyBpbiBSaGlubyBvciBhIHdlYiBicm93c2VyXG5cdFx0cm9vdC5iYXNlNjQgPSBiYXNlNjQ7XG5cdH1cblxufSh0aGlzKSk7XG4iLCIvKiEgTUlUIExpY2Vuc2UgwqkgU2luZHJlIFNvcmh1cyAqL1xuXG5jb25zdCBnbG9iYWxzID0ge307XG5cbmNvbnN0IGdldEdsb2JhbCA9IHByb3BlcnR5ID0+IHtcblx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0aWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyAmJiBzZWxmICYmIHByb3BlcnR5IGluIHNlbGYpIHtcblx0XHRyZXR1cm4gc2VsZjtcblx0fVxuXG5cdC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cdGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cgJiYgcHJvcGVydHkgaW4gd2luZG93KSB7XG5cdFx0cmV0dXJuIHdpbmRvdztcblx0fVxuXG5cdGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWwgJiYgcHJvcGVydHkgaW4gZ2xvYmFsKSB7XG5cdFx0cmV0dXJuIGdsb2JhbDtcblx0fVxuXG5cdC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2xvYmFsVGhpcykge1xuXHRcdHJldHVybiBnbG9iYWxUaGlzO1xuXHR9XG59O1xuXG5jb25zdCBnbG9iYWxQcm9wZXJ0aWVzID0gW1xuXHQnSGVhZGVycycsXG5cdCdSZXF1ZXN0Jyxcblx0J1Jlc3BvbnNlJyxcblx0J1JlYWRhYmxlU3RyZWFtJyxcblx0J2ZldGNoJyxcblx0J0Fib3J0Q29udHJvbGxlcicsXG5cdCdGb3JtRGF0YSdcbl07XG5cbmZvciAoY29uc3QgcHJvcGVydHkgb2YgZ2xvYmFsUHJvcGVydGllcykge1xuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2xvYmFscywgcHJvcGVydHksIHtcblx0XHRnZXQoKSB7XG5cdFx0XHRjb25zdCBnbG9iYWxPYmplY3QgPSBnZXRHbG9iYWwocHJvcGVydHkpO1xuXHRcdFx0Y29uc3QgdmFsdWUgPSBnbG9iYWxPYmplY3QgJiYgZ2xvYmFsT2JqZWN0W3Byb3BlcnR5XTtcblx0XHRcdHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicgPyB2YWx1ZS5iaW5kKGdsb2JhbE9iamVjdCkgOiB2YWx1ZTtcblx0XHR9XG5cdH0pO1xufVxuXG5jb25zdCBpc09iamVjdCA9IHZhbHVlID0+IHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCc7XG5jb25zdCBzdXBwb3J0c0Fib3J0Q29udHJvbGxlciA9IHR5cGVvZiBnbG9iYWxzLkFib3J0Q29udHJvbGxlciA9PT0gJ2Z1bmN0aW9uJztcbmNvbnN0IHN1cHBvcnRzU3RyZWFtcyA9IHR5cGVvZiBnbG9iYWxzLlJlYWRhYmxlU3RyZWFtID09PSAnZnVuY3Rpb24nO1xuY29uc3Qgc3VwcG9ydHNGb3JtRGF0YSA9IHR5cGVvZiBnbG9iYWxzLkZvcm1EYXRhID09PSAnZnVuY3Rpb24nO1xuXG5jb25zdCBtZXJnZUhlYWRlcnMgPSAoc291cmNlMSwgc291cmNlMikgPT4ge1xuXHRjb25zdCByZXN1bHQgPSBuZXcgZ2xvYmFscy5IZWFkZXJzKHNvdXJjZTEgfHwge30pO1xuXHRjb25zdCBpc0hlYWRlcnNJbnN0YW5jZSA9IHNvdXJjZTIgaW5zdGFuY2VvZiBnbG9iYWxzLkhlYWRlcnM7XG5cdGNvbnN0IHNvdXJjZSA9IG5ldyBnbG9iYWxzLkhlYWRlcnMoc291cmNlMiB8fCB7fSk7XG5cblx0Zm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2Ygc291cmNlKSB7XG5cdFx0aWYgKChpc0hlYWRlcnNJbnN0YW5jZSAmJiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJlc3VsdC5kZWxldGUoa2V5KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVzdWx0LnNldChrZXksIHZhbHVlKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmVzdWx0O1xufTtcblxuY29uc3QgZGVlcE1lcmdlID0gKC4uLnNvdXJjZXMpID0+IHtcblx0bGV0IHJldHVyblZhbHVlID0ge307XG5cdGxldCBoZWFkZXJzID0ge307XG5cblx0Zm9yIChjb25zdCBzb3VyY2Ugb2Ygc291cmNlcykge1xuXHRcdGlmIChBcnJheS5pc0FycmF5KHNvdXJjZSkpIHtcblx0XHRcdGlmICghKEFycmF5LmlzQXJyYXkocmV0dXJuVmFsdWUpKSkge1xuXHRcdFx0XHRyZXR1cm5WYWx1ZSA9IFtdO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm5WYWx1ZSA9IFsuLi5yZXR1cm5WYWx1ZSwgLi4uc291cmNlXTtcblx0XHR9IGVsc2UgaWYgKGlzT2JqZWN0KHNvdXJjZSkpIHtcblx0XHRcdGZvciAobGV0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhzb3VyY2UpKSB7XG5cdFx0XHRcdGlmIChpc09iamVjdCh2YWx1ZSkgJiYgKGtleSBpbiByZXR1cm5WYWx1ZSkpIHtcblx0XHRcdFx0XHR2YWx1ZSA9IGRlZXBNZXJnZShyZXR1cm5WYWx1ZVtrZXldLCB2YWx1ZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm5WYWx1ZSA9IHsuLi5yZXR1cm5WYWx1ZSwgW2tleV06IHZhbHVlfTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGlzT2JqZWN0KHNvdXJjZS5oZWFkZXJzKSkge1xuXHRcdFx0XHRoZWFkZXJzID0gbWVyZ2VIZWFkZXJzKGhlYWRlcnMsIHNvdXJjZS5oZWFkZXJzKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm5WYWx1ZS5oZWFkZXJzID0gaGVhZGVycztcblx0fVxuXG5cdHJldHVybiByZXR1cm5WYWx1ZTtcbn07XG5cbmNvbnN0IHJlcXVlc3RNZXRob2RzID0gW1xuXHQnZ2V0Jyxcblx0J3Bvc3QnLFxuXHQncHV0Jyxcblx0J3BhdGNoJyxcblx0J2hlYWQnLFxuXHQnZGVsZXRlJ1xuXTtcblxuY29uc3QgcmVzcG9uc2VUeXBlcyA9IHtcblx0anNvbjogJ2FwcGxpY2F0aW9uL2pzb24nLFxuXHR0ZXh0OiAndGV4dC8qJyxcblx0Zm9ybURhdGE6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJyxcblx0YXJyYXlCdWZmZXI6ICcqLyonLFxuXHRibG9iOiAnKi8qJ1xufTtcblxuY29uc3QgcmV0cnlNZXRob2RzID0gW1xuXHQnZ2V0Jyxcblx0J3B1dCcsXG5cdCdoZWFkJyxcblx0J2RlbGV0ZScsXG5cdCdvcHRpb25zJyxcblx0J3RyYWNlJ1xuXTtcblxuY29uc3QgcmV0cnlTdGF0dXNDb2RlcyA9IFtcblx0NDA4LFxuXHQ0MTMsXG5cdDQyOSxcblx0NTAwLFxuXHQ1MDIsXG5cdDUwMyxcblx0NTA0XG5dO1xuXG5jb25zdCByZXRyeUFmdGVyU3RhdHVzQ29kZXMgPSBbXG5cdDQxMyxcblx0NDI5LFxuXHQ1MDNcbl07XG5cbmNvbnN0IHN0b3AgPSBTeW1ib2woJ3N0b3AnKTtcblxuY2xhc3MgSFRUUEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuXHRjb25zdHJ1Y3RvcihyZXNwb25zZSkge1xuXHRcdC8vIFNldCB0aGUgbWVzc2FnZSB0byB0aGUgc3RhdHVzIHRleHQsIHN1Y2ggYXMgVW5hdXRob3JpemVkLFxuXHRcdC8vIHdpdGggc29tZSBmYWxsYmFja3MuIFRoaXMgbWVzc2FnZSBzaG91bGQgbmV2ZXIgYmUgdW5kZWZpbmVkLlxuXHRcdHN1cGVyKFxuXHRcdFx0cmVzcG9uc2Uuc3RhdHVzVGV4dCB8fFxuXHRcdFx0U3RyaW5nKFxuXHRcdFx0XHQocmVzcG9uc2Uuc3RhdHVzID09PSAwIHx8IHJlc3BvbnNlLnN0YXR1cykgP1xuXHRcdFx0XHRcdHJlc3BvbnNlLnN0YXR1cyA6ICdVbmtub3duIHJlc3BvbnNlIGVycm9yJ1xuXHRcdFx0KVxuXHRcdCk7XG5cdFx0dGhpcy5uYW1lID0gJ0hUVFBFcnJvcic7XG5cdFx0dGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlO1xuXHR9XG59XG5cbmNsYXNzIFRpbWVvdXRFcnJvciBleHRlbmRzIEVycm9yIHtcblx0Y29uc3RydWN0b3IocmVxdWVzdCkge1xuXHRcdHN1cGVyKCdSZXF1ZXN0IHRpbWVkIG91dCcpO1xuXHRcdHRoaXMubmFtZSA9ICdUaW1lb3V0RXJyb3InO1xuXHRcdHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG5cdH1cbn1cblxuY29uc3QgZGVsYXkgPSBtcyA9PiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcblxuLy8gYFByb21pc2UucmFjZSgpYCB3b3JrYXJvdW5kICgjOTEpXG5jb25zdCB0aW1lb3V0ID0gKHJlcXVlc3QsIGFib3J0Q29udHJvbGxlciwgb3B0aW9ucykgPT5cblx0bmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdGNvbnN0IHRpbWVvdXRJRCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0aWYgKGFib3J0Q29udHJvbGxlcikge1xuXHRcdFx0XHRhYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcblx0XHRcdH1cblxuXHRcdFx0cmVqZWN0KG5ldyBUaW1lb3V0RXJyb3IocmVxdWVzdCkpO1xuXHRcdH0sIG9wdGlvbnMudGltZW91dCk7XG5cblx0XHQvKiBlc2xpbnQtZGlzYWJsZSBwcm9taXNlL3ByZWZlci1hd2FpdC10by10aGVuICovXG5cdFx0b3B0aW9ucy5mZXRjaChyZXF1ZXN0KVxuXHRcdFx0LnRoZW4ocmVzb2x2ZSlcblx0XHRcdC5jYXRjaChyZWplY3QpXG5cdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdGNsZWFyVGltZW91dCh0aW1lb3V0SUQpO1xuXHRcdFx0fSk7XG5cdFx0LyogZXNsaW50LWVuYWJsZSBwcm9taXNlL3ByZWZlci1hd2FpdC10by10aGVuICovXG5cdH0pO1xuXG5jb25zdCBub3JtYWxpemVSZXF1ZXN0TWV0aG9kID0gaW5wdXQgPT4gcmVxdWVzdE1ldGhvZHMuaW5jbHVkZXMoaW5wdXQpID8gaW5wdXQudG9VcHBlckNhc2UoKSA6IGlucHV0O1xuXG5jb25zdCBkZWZhdWx0UmV0cnlPcHRpb25zID0ge1xuXHRsaW1pdDogMixcblx0bWV0aG9kczogcmV0cnlNZXRob2RzLFxuXHRzdGF0dXNDb2RlczogcmV0cnlTdGF0dXNDb2Rlcyxcblx0YWZ0ZXJTdGF0dXNDb2RlczogcmV0cnlBZnRlclN0YXR1c0NvZGVzXG59O1xuXG5jb25zdCBub3JtYWxpemVSZXRyeU9wdGlvbnMgPSAocmV0cnkgPSB7fSkgPT4ge1xuXHRpZiAodHlwZW9mIHJldHJ5ID09PSAnbnVtYmVyJykge1xuXHRcdHJldHVybiB7XG5cdFx0XHQuLi5kZWZhdWx0UmV0cnlPcHRpb25zLFxuXHRcdFx0bGltaXQ6IHJldHJ5XG5cdFx0fTtcblx0fVxuXG5cdGlmIChyZXRyeS5tZXRob2RzICYmICFBcnJheS5pc0FycmF5KHJldHJ5Lm1ldGhvZHMpKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdyZXRyeS5tZXRob2RzIG11c3QgYmUgYW4gYXJyYXknKTtcblx0fVxuXG5cdGlmIChyZXRyeS5zdGF0dXNDb2RlcyAmJiAhQXJyYXkuaXNBcnJheShyZXRyeS5zdGF0dXNDb2RlcykpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ3JldHJ5LnN0YXR1c0NvZGVzIG11c3QgYmUgYW4gYXJyYXknKTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0Li4uZGVmYXVsdFJldHJ5T3B0aW9ucyxcblx0XHQuLi5yZXRyeSxcblx0XHRhZnRlclN0YXR1c0NvZGVzOiByZXRyeUFmdGVyU3RhdHVzQ29kZXNcblx0fTtcbn07XG5cbi8vIFRoZSBtYXhpbXVtIHZhbHVlIG9mIGEgMzJiaXQgaW50IChzZWUgaXNzdWUgIzExNylcbmNvbnN0IG1heFNhZmVUaW1lb3V0ID0gMjE0NzQ4MzY0NztcblxuY2xhc3MgS3kge1xuXHRjb25zdHJ1Y3RvcihpbnB1dCwgb3B0aW9ucyA9IHt9KSB7XG5cdFx0dGhpcy5fcmV0cnlDb3VudCA9IDA7XG5cdFx0dGhpcy5faW5wdXQgPSBpbnB1dDtcblx0XHR0aGlzLl9vcHRpb25zID0ge1xuXHRcdFx0Ly8gVE9ETzogY3JlZGVudGlhbHMgY2FuIGJlIHJlbW92ZWQgd2hlbiB0aGUgc3BlYyBjaGFuZ2UgaXMgaW1wbGVtZW50ZWQgaW4gYWxsIGJyb3dzZXJzLiBDb250ZXh0OiBodHRwczovL3d3dy5jaHJvbWVzdGF0dXMuY29tL2ZlYXR1cmUvNDUzOTQ3MzMxMjM1MDIwOFxuXHRcdFx0Y3JlZGVudGlhbHM6IHRoaXMuX2lucHV0LmNyZWRlbnRpYWxzIHx8ICdzYW1lLW9yaWdpbicsXG5cdFx0XHQuLi5vcHRpb25zLFxuXHRcdFx0aGVhZGVyczogbWVyZ2VIZWFkZXJzKHRoaXMuX2lucHV0LmhlYWRlcnMsIG9wdGlvbnMuaGVhZGVycyksXG5cdFx0XHRob29rczogZGVlcE1lcmdlKHtcblx0XHRcdFx0YmVmb3JlUmVxdWVzdDogW10sXG5cdFx0XHRcdGJlZm9yZVJldHJ5OiBbXSxcblx0XHRcdFx0YWZ0ZXJSZXNwb25zZTogW11cblx0XHRcdH0sIG9wdGlvbnMuaG9va3MpLFxuXHRcdFx0bWV0aG9kOiBub3JtYWxpemVSZXF1ZXN0TWV0aG9kKG9wdGlvbnMubWV0aG9kIHx8IHRoaXMuX2lucHV0Lm1ldGhvZCksXG5cdFx0XHRwcmVmaXhVcmw6IFN0cmluZyhvcHRpb25zLnByZWZpeFVybCB8fCAnJyksXG5cdFx0XHRyZXRyeTogbm9ybWFsaXplUmV0cnlPcHRpb25zKG9wdGlvbnMucmV0cnkpLFxuXHRcdFx0dGhyb3dIdHRwRXJyb3JzOiBvcHRpb25zLnRocm93SHR0cEVycm9ycyAhPT0gZmFsc2UsXG5cdFx0XHR0aW1lb3V0OiB0eXBlb2Ygb3B0aW9ucy50aW1lb3V0ID09PSAndW5kZWZpbmVkJyA/IDEwMDAwIDogb3B0aW9ucy50aW1lb3V0LFxuXHRcdFx0ZmV0Y2g6IG9wdGlvbnMuZmV0Y2ggfHwgZ2xvYmFscy5mZXRjaFxuXHRcdH07XG5cblx0XHRpZiAodHlwZW9mIHRoaXMuX2lucHV0ICE9PSAnc3RyaW5nJyAmJiAhKHRoaXMuX2lucHV0IGluc3RhbmNlb2YgVVJMIHx8IHRoaXMuX2lucHV0IGluc3RhbmNlb2YgZ2xvYmFscy5SZXF1ZXN0KSkge1xuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignYGlucHV0YCBtdXN0IGJlIGEgc3RyaW5nLCBVUkwsIG9yIFJlcXVlc3QnKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5fb3B0aW9ucy5wcmVmaXhVcmwgJiYgdHlwZW9mIHRoaXMuX2lucHV0ID09PSAnc3RyaW5nJykge1xuXHRcdFx0aWYgKHRoaXMuX2lucHV0LnN0YXJ0c1dpdGgoJy8nKSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ2BpbnB1dGAgbXVzdCBub3QgYmVnaW4gd2l0aCBhIHNsYXNoIHdoZW4gdXNpbmcgYHByZWZpeFVybGAnKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCF0aGlzLl9vcHRpb25zLnByZWZpeFVybC5lbmRzV2l0aCgnLycpKSB7XG5cdFx0XHRcdHRoaXMuX29wdGlvbnMucHJlZml4VXJsICs9ICcvJztcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5faW5wdXQgPSB0aGlzLl9vcHRpb25zLnByZWZpeFVybCArIHRoaXMuX2lucHV0O1xuXHRcdH1cblxuXHRcdGlmIChzdXBwb3J0c0Fib3J0Q29udHJvbGxlcikge1xuXHRcdFx0dGhpcy5hYm9ydENvbnRyb2xsZXIgPSBuZXcgZ2xvYmFscy5BYm9ydENvbnRyb2xsZXIoKTtcblx0XHRcdGlmICh0aGlzLl9vcHRpb25zLnNpZ25hbCkge1xuXHRcdFx0XHR0aGlzLl9vcHRpb25zLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsICgpID0+IHtcblx0XHRcdFx0XHR0aGlzLmFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5fb3B0aW9ucy5zaWduYWwgPSB0aGlzLmFib3J0Q29udHJvbGxlci5zaWduYWw7XG5cdFx0fVxuXG5cdFx0dGhpcy5yZXF1ZXN0ID0gbmV3IGdsb2JhbHMuUmVxdWVzdCh0aGlzLl9pbnB1dCwgdGhpcy5fb3B0aW9ucyk7XG5cblx0XHRpZiAodGhpcy5fb3B0aW9ucy5zZWFyY2hQYXJhbXMpIHtcblx0XHRcdGNvbnN0IHNlYXJjaFBhcmFtcyA9ICc/JyArIG5ldyBVUkxTZWFyY2hQYXJhbXModGhpcy5fb3B0aW9ucy5zZWFyY2hQYXJhbXMpLnRvU3RyaW5nKCk7XG5cdFx0XHRjb25zdCB1cmwgPSB0aGlzLnJlcXVlc3QudXJsLnJlcGxhY2UoLyg/OlxcPy4qPyk/KD89I3wkKS8sIHNlYXJjaFBhcmFtcyk7XG5cblx0XHRcdC8vIFRvIHByb3ZpZGUgY29ycmVjdCBmb3JtIGJvdW5kYXJ5LCBDb250ZW50LVR5cGUgaGVhZGVyIHNob3VsZCBiZSBkZWxldGVkIGVhY2ggdGltZSB3aGVuIG5ldyBSZXF1ZXN0IGluc3RhbnRpYXRlZCBmcm9tIGFub3RoZXIgb25lXG5cdFx0XHRpZiAoKChzdXBwb3J0c0Zvcm1EYXRhICYmIHRoaXMuX29wdGlvbnMuYm9keSBpbnN0YW5jZW9mIGdsb2JhbHMuRm9ybURhdGEpIHx8IHRoaXMuX29wdGlvbnMuYm9keSBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtcykgJiYgISh0aGlzLl9vcHRpb25zLmhlYWRlcnMgJiYgdGhpcy5fb3B0aW9ucy5oZWFkZXJzWydjb250ZW50LXR5cGUnXSkpIHtcblx0XHRcdFx0dGhpcy5yZXF1ZXN0LmhlYWRlcnMuZGVsZXRlKCdjb250ZW50LXR5cGUnKTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5yZXF1ZXN0ID0gbmV3IGdsb2JhbHMuUmVxdWVzdChuZXcgZ2xvYmFscy5SZXF1ZXN0KHVybCwgdGhpcy5yZXF1ZXN0KSwgdGhpcy5fb3B0aW9ucyk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuX29wdGlvbnMuanNvbiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLl9vcHRpb25zLmJvZHkgPSBKU09OLnN0cmluZ2lmeSh0aGlzLl9vcHRpb25zLmpzb24pO1xuXHRcdFx0dGhpcy5yZXF1ZXN0LmhlYWRlcnMuc2V0KCdjb250ZW50LXR5cGUnLCAnYXBwbGljYXRpb24vanNvbicpO1xuXHRcdFx0dGhpcy5yZXF1ZXN0ID0gbmV3IGdsb2JhbHMuUmVxdWVzdCh0aGlzLnJlcXVlc3QsIHtib2R5OiB0aGlzLl9vcHRpb25zLmJvZHl9KTtcblx0XHR9XG5cblx0XHRjb25zdCBmbiA9IGFzeW5jICgpID0+IHtcblx0XHRcdGlmICh0aGlzLl9vcHRpb25zLnRpbWVvdXQgPiBtYXhTYWZlVGltZW91dCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgUmFuZ2VFcnJvcihgVGhlIFxcYHRpbWVvdXRcXGAgb3B0aW9uIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gJHttYXhTYWZlVGltZW91dH1gKTtcblx0XHRcdH1cblxuXHRcdFx0YXdhaXQgZGVsYXkoMSk7XG5cdFx0XHRsZXQgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLl9mZXRjaCgpO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGhvb2sgb2YgdGhpcy5fb3B0aW9ucy5ob29rcy5hZnRlclJlc3BvbnNlKSB7XG5cdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1hd2FpdC1pbi1sb29wXG5cdFx0XHRcdGNvbnN0IG1vZGlmaWVkUmVzcG9uc2UgPSBhd2FpdCBob29rKFxuXHRcdFx0XHRcdHRoaXMucmVxdWVzdCxcblx0XHRcdFx0XHR0aGlzLl9vcHRpb25zLFxuXHRcdFx0XHRcdHRoaXMuX2RlY29yYXRlUmVzcG9uc2UocmVzcG9uc2UuY2xvbmUoKSlcblx0XHRcdFx0KTtcblxuXHRcdFx0XHRpZiAobW9kaWZpZWRSZXNwb25zZSBpbnN0YW5jZW9mIGdsb2JhbHMuUmVzcG9uc2UpIHtcblx0XHRcdFx0XHRyZXNwb25zZSA9IG1vZGlmaWVkUmVzcG9uc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0dGhpcy5fZGVjb3JhdGVSZXNwb25zZShyZXNwb25zZSk7XG5cblx0XHRcdGlmICghcmVzcG9uc2Uub2sgJiYgdGhpcy5fb3B0aW9ucy50aHJvd0h0dHBFcnJvcnMpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEhUVFBFcnJvcihyZXNwb25zZSk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIGBvbkRvd25sb2FkUHJvZ3Jlc3NgIGlzIHBhc3NlZCwgaXQgdXNlcyB0aGUgc3RyZWFtIEFQSSBpbnRlcm5hbGx5XG5cdFx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXHRcdFx0aWYgKHRoaXMuX29wdGlvbnMub25Eb3dubG9hZFByb2dyZXNzKSB7XG5cdFx0XHRcdGlmICh0eXBlb2YgdGhpcy5fb3B0aW9ucy5vbkRvd25sb2FkUHJvZ3Jlc3MgIT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgYG9uRG93bmxvYWRQcm9ncmVzc2Agb3B0aW9uIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCFzdXBwb3J0c1N0cmVhbXMpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ1N0cmVhbXMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4geW91ciBlbnZpcm9ubWVudC4gYFJlYWRhYmxlU3RyZWFtYCBpcyBtaXNzaW5nLicpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRoaXMuX3N0cmVhbShyZXNwb25zZS5jbG9uZSgpLCB0aGlzLl9vcHRpb25zLm9uRG93bmxvYWRQcm9ncmVzcyk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiByZXNwb25zZTtcblx0XHR9O1xuXG5cdFx0Y29uc3QgaXNSZXRyaWFibGVNZXRob2QgPSB0aGlzLl9vcHRpb25zLnJldHJ5Lm1ldGhvZHMuaW5jbHVkZXModGhpcy5yZXF1ZXN0Lm1ldGhvZC50b0xvd2VyQ2FzZSgpKTtcblx0XHRjb25zdCByZXN1bHQgPSBpc1JldHJpYWJsZU1ldGhvZCA/IHRoaXMuX3JldHJ5KGZuKSA6IGZuKCk7XG5cblx0XHRmb3IgKGNvbnN0IFt0eXBlLCBtaW1lVHlwZV0gb2YgT2JqZWN0LmVudHJpZXMocmVzcG9uc2VUeXBlcykpIHtcblx0XHRcdHJlc3VsdFt0eXBlXSA9IGFzeW5jICgpID0+IHtcblx0XHRcdFx0dGhpcy5yZXF1ZXN0LmhlYWRlcnMuc2V0KCdhY2NlcHQnLCB0aGlzLnJlcXVlc3QuaGVhZGVycy5nZXQoJ2FjY2VwdCcpIHx8IG1pbWVUeXBlKTtcblxuXHRcdFx0XHRjb25zdCByZXNwb25zZSA9IChhd2FpdCByZXN1bHQpLmNsb25lKCk7XG5cblx0XHRcdFx0aWYgKHR5cGUgPT09ICdqc29uJykge1xuXHRcdFx0XHRcdGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwNCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuICcnO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChvcHRpb25zLnBhcnNlSnNvbikge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG9wdGlvbnMucGFyc2VKc29uKGF3YWl0IHJlc3BvbnNlLnRleHQoKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHJlc3BvbnNlW3R5cGVdKCk7XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRfY2FsY3VsYXRlUmV0cnlEZWxheShlcnJvcikge1xuXHRcdHRoaXMuX3JldHJ5Q291bnQrKztcblxuXHRcdGlmICh0aGlzLl9yZXRyeUNvdW50IDwgdGhpcy5fb3B0aW9ucy5yZXRyeS5saW1pdCAmJiAhKGVycm9yIGluc3RhbmNlb2YgVGltZW91dEVycm9yKSkge1xuXHRcdFx0aWYgKGVycm9yIGluc3RhbmNlb2YgSFRUUEVycm9yKSB7XG5cdFx0XHRcdGlmICghdGhpcy5fb3B0aW9ucy5yZXRyeS5zdGF0dXNDb2Rlcy5pbmNsdWRlcyhlcnJvci5yZXNwb25zZS5zdGF0dXMpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIDA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCByZXRyeUFmdGVyID0gZXJyb3IucmVzcG9uc2UuaGVhZGVycy5nZXQoJ1JldHJ5LUFmdGVyJyk7XG5cdFx0XHRcdGlmIChyZXRyeUFmdGVyICYmIHRoaXMuX29wdGlvbnMucmV0cnkuYWZ0ZXJTdGF0dXNDb2Rlcy5pbmNsdWRlcyhlcnJvci5yZXNwb25zZS5zdGF0dXMpKSB7XG5cdFx0XHRcdFx0bGV0IGFmdGVyID0gTnVtYmVyKHJldHJ5QWZ0ZXIpO1xuXHRcdFx0XHRcdGlmIChOdW1iZXIuaXNOYU4oYWZ0ZXIpKSB7XG5cdFx0XHRcdFx0XHRhZnRlciA9IERhdGUucGFyc2UocmV0cnlBZnRlcikgLSBEYXRlLm5vdygpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRhZnRlciAqPSAxMDAwO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICh0eXBlb2YgdGhpcy5fb3B0aW9ucy5yZXRyeS5tYXhSZXRyeUFmdGVyICE9PSAndW5kZWZpbmVkJyAmJiBhZnRlciA+IHRoaXMuX29wdGlvbnMucmV0cnkubWF4UmV0cnlBZnRlcikge1xuXHRcdFx0XHRcdFx0cmV0dXJuIDA7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIGFmdGVyO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGVycm9yLnJlc3BvbnNlLnN0YXR1cyA9PT0gNDEzKSB7XG5cdFx0XHRcdFx0cmV0dXJuIDA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgQkFDS09GRl9GQUNUT1IgPSAwLjM7XG5cdFx0XHRyZXR1cm4gQkFDS09GRl9GQUNUT1IgKiAoMiAqKiAodGhpcy5fcmV0cnlDb3VudCAtIDEpKSAqIDEwMDA7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRfZGVjb3JhdGVSZXNwb25zZShyZXNwb25zZSkge1xuXHRcdGlmICh0aGlzLl9vcHRpb25zLnBhcnNlSnNvbikge1xuXHRcdFx0cmVzcG9uc2UuanNvbiA9IGFzeW5jICgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuX29wdGlvbnMucGFyc2VKc29uKGF3YWl0IHJlc3BvbnNlLnRleHQoKSk7XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdHJldHVybiByZXNwb25zZTtcblx0fVxuXG5cdGFzeW5jIF9yZXRyeShmbikge1xuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gYXdhaXQgZm4oKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0Y29uc3QgbXMgPSBNYXRoLm1pbih0aGlzLl9jYWxjdWxhdGVSZXRyeURlbGF5KGVycm9yKSwgbWF4U2FmZVRpbWVvdXQpO1xuXHRcdFx0aWYgKG1zICE9PSAwICYmIHRoaXMuX3JldHJ5Q291bnQgPiAwKSB7XG5cdFx0XHRcdGF3YWl0IGRlbGF5KG1zKTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IGhvb2sgb2YgdGhpcy5fb3B0aW9ucy5ob29rcy5iZWZvcmVSZXRyeSkge1xuXHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1hd2FpdC1pbi1sb29wXG5cdFx0XHRcdFx0Y29uc3QgaG9va1Jlc3VsdCA9IGF3YWl0IGhvb2soe1xuXHRcdFx0XHRcdFx0cmVxdWVzdDogdGhpcy5yZXF1ZXN0LFxuXHRcdFx0XHRcdFx0b3B0aW9uczogdGhpcy5fb3B0aW9ucyxcblx0XHRcdFx0XHRcdGVycm9yLFxuXHRcdFx0XHRcdFx0cmV0cnlDb3VudDogdGhpcy5fcmV0cnlDb3VudFxuXHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0Ly8gSWYgYHN0b3BgIGlzIHJldHVybmVkIGZyb20gdGhlIGhvb2ssIHRoZSByZXRyeSBwcm9jZXNzIGlzIHN0b3BwZWRcblx0XHRcdFx0XHRpZiAoaG9va1Jlc3VsdCA9PT0gc3RvcCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB0aGlzLl9yZXRyeShmbik7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLl9vcHRpb25zLnRocm93SHR0cEVycm9ycykge1xuXHRcdFx0XHR0aHJvdyBlcnJvcjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRhc3luYyBfZmV0Y2goKSB7XG5cdFx0Zm9yIChjb25zdCBob29rIG9mIHRoaXMuX29wdGlvbnMuaG9va3MuYmVmb3JlUmVxdWVzdCkge1xuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWF3YWl0LWluLWxvb3Bcblx0XHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhvb2sodGhpcy5yZXF1ZXN0LCB0aGlzLl9vcHRpb25zKTtcblxuXHRcdFx0aWYgKHJlc3VsdCBpbnN0YW5jZW9mIFJlcXVlc3QpIHtcblx0XHRcdFx0dGhpcy5yZXF1ZXN0ID0gcmVzdWx0O1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblxuXHRcdFx0aWYgKHJlc3VsdCBpbnN0YW5jZW9mIFJlc3BvbnNlKSB7XG5cdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuX29wdGlvbnMudGltZW91dCA9PT0gZmFsc2UpIHtcblx0XHRcdHJldHVybiB0aGlzLl9vcHRpb25zLmZldGNoKHRoaXMucmVxdWVzdC5jbG9uZSgpKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGltZW91dCh0aGlzLnJlcXVlc3QuY2xvbmUoKSwgdGhpcy5hYm9ydENvbnRyb2xsZXIsIHRoaXMuX29wdGlvbnMpO1xuXHR9XG5cblx0LyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblx0X3N0cmVhbShyZXNwb25zZSwgb25Eb3dubG9hZFByb2dyZXNzKSB7XG5cdFx0Y29uc3QgdG90YWxCeXRlcyA9IE51bWJlcihyZXNwb25zZS5oZWFkZXJzLmdldCgnY29udGVudC1sZW5ndGgnKSkgfHwgMDtcblx0XHRsZXQgdHJhbnNmZXJyZWRCeXRlcyA9IDA7XG5cblx0XHRyZXR1cm4gbmV3IGdsb2JhbHMuUmVzcG9uc2UoXG5cdFx0XHRuZXcgZ2xvYmFscy5SZWFkYWJsZVN0cmVhbSh7XG5cdFx0XHRcdHN0YXJ0KGNvbnRyb2xsZXIpIHtcblx0XHRcdFx0XHRjb25zdCByZWFkZXIgPSByZXNwb25zZS5ib2R5LmdldFJlYWRlcigpO1xuXG5cdFx0XHRcdFx0aWYgKG9uRG93bmxvYWRQcm9ncmVzcykge1xuXHRcdFx0XHRcdFx0b25Eb3dubG9hZFByb2dyZXNzKHtwZXJjZW50OiAwLCB0cmFuc2ZlcnJlZEJ5dGVzOiAwLCB0b3RhbEJ5dGVzfSwgbmV3IFVpbnQ4QXJyYXkoKSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0YXN5bmMgZnVuY3Rpb24gcmVhZCgpIHtcblx0XHRcdFx0XHRcdGNvbnN0IHtkb25lLCB2YWx1ZX0gPSBhd2FpdCByZWFkZXIucmVhZCgpO1xuXHRcdFx0XHRcdFx0aWYgKGRvbmUpIHtcblx0XHRcdFx0XHRcdFx0Y29udHJvbGxlci5jbG9zZSgpO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmIChvbkRvd25sb2FkUHJvZ3Jlc3MpIHtcblx0XHRcdFx0XHRcdFx0dHJhbnNmZXJyZWRCeXRlcyArPSB2YWx1ZS5ieXRlTGVuZ3RoO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBwZXJjZW50ID0gdG90YWxCeXRlcyA9PT0gMCA/IDAgOiB0cmFuc2ZlcnJlZEJ5dGVzIC8gdG90YWxCeXRlcztcblx0XHRcdFx0XHRcdFx0b25Eb3dubG9hZFByb2dyZXNzKHtwZXJjZW50LCB0cmFuc2ZlcnJlZEJ5dGVzLCB0b3RhbEJ5dGVzfSwgdmFsdWUpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRjb250cm9sbGVyLmVucXVldWUodmFsdWUpO1xuXHRcdFx0XHRcdFx0cmVhZCgpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJlYWQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSlcblx0XHQpO1xuXHR9XG59XG5cbmNvbnN0IHZhbGlkYXRlQW5kTWVyZ2UgPSAoLi4uc291cmNlcykgPT4ge1xuXHRmb3IgKGNvbnN0IHNvdXJjZSBvZiBzb3VyY2VzKSB7XG5cdFx0aWYgKCghaXNPYmplY3Qoc291cmNlKSB8fCBBcnJheS5pc0FycmF5KHNvdXJjZSkpICYmIHR5cGVvZiBzb3VyY2UgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgYG9wdGlvbnNgIGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0Jyk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGRlZXBNZXJnZSh7fSwgLi4uc291cmNlcyk7XG59O1xuXG5jb25zdCBjcmVhdGVJbnN0YW5jZSA9IGRlZmF1bHRzID0+IHtcblx0Y29uc3Qga3kgPSAoaW5wdXQsIG9wdGlvbnMpID0+IG5ldyBLeShpbnB1dCwgdmFsaWRhdGVBbmRNZXJnZShkZWZhdWx0cywgb3B0aW9ucykpO1xuXG5cdGZvciAoY29uc3QgbWV0aG9kIG9mIHJlcXVlc3RNZXRob2RzKSB7XG5cdFx0a3lbbWV0aG9kXSA9IChpbnB1dCwgb3B0aW9ucykgPT4gbmV3IEt5KGlucHV0LCB2YWxpZGF0ZUFuZE1lcmdlKGRlZmF1bHRzLCBvcHRpb25zLCB7bWV0aG9kfSkpO1xuXHR9XG5cblx0a3kuSFRUUEVycm9yID0gSFRUUEVycm9yO1xuXHRreS5UaW1lb3V0RXJyb3IgPSBUaW1lb3V0RXJyb3I7XG5cdGt5LmNyZWF0ZSA9IG5ld0RlZmF1bHRzID0+IGNyZWF0ZUluc3RhbmNlKHZhbGlkYXRlQW5kTWVyZ2UobmV3RGVmYXVsdHMpKTtcblx0a3kuZXh0ZW5kID0gbmV3RGVmYXVsdHMgPT4gY3JlYXRlSW5zdGFuY2UodmFsaWRhdGVBbmRNZXJnZShkZWZhdWx0cywgbmV3RGVmYXVsdHMpKTtcblx0a3kuc3RvcCA9IHN0b3A7XG5cblx0cmV0dXJuIGt5O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlSW5zdGFuY2UoKTtcbiIsIihmdW5jdGlvbiAobmFtZSwgY29udGV4dCwgZGVmaW5pdGlvbikge1xuICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIG1vZHVsZS5leHBvcnRzID0gZGVmaW5pdGlvbigpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIGRlZmluZShkZWZpbml0aW9uKTtcbiAgZWxzZSBjb250ZXh0W25hbWVdID0gZGVmaW5pdGlvbigpO1xufSkoJ3VybGpvaW4nLCB0aGlzLCBmdW5jdGlvbiAoKSB7XG5cbiAgZnVuY3Rpb24gbm9ybWFsaXplIChzdHJBcnJheSkge1xuICAgIHZhciByZXN1bHRBcnJheSA9IFtdO1xuICAgIGlmIChzdHJBcnJheS5sZW5ndGggPT09IDApIHsgcmV0dXJuICcnOyB9XG5cbiAgICBpZiAodHlwZW9mIHN0ckFycmF5WzBdICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVXJsIG11c3QgYmUgYSBzdHJpbmcuIFJlY2VpdmVkICcgKyBzdHJBcnJheVswXSk7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGZpcnN0IHBhcnQgaXMgYSBwbGFpbiBwcm90b2NvbCwgd2UgY29tYmluZSBpdCB3aXRoIHRoZSBuZXh0IHBhcnQuXG4gICAgaWYgKHN0ckFycmF5WzBdLm1hdGNoKC9eW14vOl0rOlxcLyokLykgJiYgc3RyQXJyYXkubGVuZ3RoID4gMSkge1xuICAgICAgdmFyIGZpcnN0ID0gc3RyQXJyYXkuc2hpZnQoKTtcbiAgICAgIHN0ckFycmF5WzBdID0gZmlyc3QgKyBzdHJBcnJheVswXTtcbiAgICB9XG5cbiAgICAvLyBUaGVyZSBtdXN0IGJlIHR3byBvciB0aHJlZSBzbGFzaGVzIGluIHRoZSBmaWxlIHByb3RvY29sLCB0d28gc2xhc2hlcyBpbiBhbnl0aGluZyBlbHNlLlxuICAgIGlmIChzdHJBcnJheVswXS5tYXRjaCgvXmZpbGU6XFwvXFwvXFwvLykpIHtcbiAgICAgIHN0ckFycmF5WzBdID0gc3RyQXJyYXlbMF0ucmVwbGFjZSgvXihbXi86XSspOlxcLyovLCAnJDE6Ly8vJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0ckFycmF5WzBdID0gc3RyQXJyYXlbMF0ucmVwbGFjZSgvXihbXi86XSspOlxcLyovLCAnJDE6Ly8nKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ckFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY29tcG9uZW50ID0gc3RyQXJyYXlbaV07XG5cbiAgICAgIGlmICh0eXBlb2YgY29tcG9uZW50ICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVcmwgbXVzdCBiZSBhIHN0cmluZy4gUmVjZWl2ZWQgJyArIGNvbXBvbmVudCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb21wb25lbnQgPT09ICcnKSB7IGNvbnRpbnVlOyB9XG5cbiAgICAgIGlmIChpID4gMCkge1xuICAgICAgICAvLyBSZW1vdmluZyB0aGUgc3RhcnRpbmcgc2xhc2hlcyBmb3IgZWFjaCBjb21wb25lbnQgYnV0IHRoZSBmaXJzdC5cbiAgICAgICAgY29tcG9uZW50ID0gY29tcG9uZW50LnJlcGxhY2UoL15bXFwvXSsvLCAnJyk7XG4gICAgICB9XG4gICAgICBpZiAoaSA8IHN0ckFycmF5Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgLy8gUmVtb3ZpbmcgdGhlIGVuZGluZyBzbGFzaGVzIGZvciBlYWNoIGNvbXBvbmVudCBidXQgdGhlIGxhc3QuXG4gICAgICAgIGNvbXBvbmVudCA9IGNvbXBvbmVudC5yZXBsYWNlKC9bXFwvXSskLywgJycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRm9yIHRoZSBsYXN0IGNvbXBvbmVudCB3ZSB3aWxsIGNvbWJpbmUgbXVsdGlwbGUgc2xhc2hlcyB0byBhIHNpbmdsZSBvbmUuXG4gICAgICAgIGNvbXBvbmVudCA9IGNvbXBvbmVudC5yZXBsYWNlKC9bXFwvXSskLywgJy8nKTtcbiAgICAgIH1cblxuICAgICAgcmVzdWx0QXJyYXkucHVzaChjb21wb25lbnQpO1xuXG4gICAgfVxuXG4gICAgdmFyIHN0ciA9IHJlc3VsdEFycmF5LmpvaW4oJy8nKTtcbiAgICAvLyBFYWNoIGlucHV0IGNvbXBvbmVudCBpcyBub3cgc2VwYXJhdGVkIGJ5IGEgc2luZ2xlIHNsYXNoIGV4Y2VwdCB0aGUgcG9zc2libGUgZmlyc3QgcGxhaW4gcHJvdG9jb2wgcGFydC5cblxuICAgIC8vIHJlbW92ZSB0cmFpbGluZyBzbGFzaCBiZWZvcmUgcGFyYW1ldGVycyBvciBoYXNoXG4gICAgc3RyID0gc3RyLnJlcGxhY2UoL1xcLyhcXD98JnwjW14hXSkvZywgJyQxJyk7XG5cbiAgICAvLyByZXBsYWNlID8gaW4gcGFyYW1ldGVycyB3aXRoICZcbiAgICB2YXIgcGFydHMgPSBzdHIuc3BsaXQoJz8nKTtcbiAgICBzdHIgPSBwYXJ0cy5zaGlmdCgpICsgKHBhcnRzLmxlbmd0aCA+IDAgPyAnPyc6ICcnKSArIHBhcnRzLmpvaW4oJyYnKTtcblxuICAgIHJldHVybiBzdHI7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBpbnB1dDtcblxuICAgIGlmICh0eXBlb2YgYXJndW1lbnRzWzBdID09PSAnb2JqZWN0Jykge1xuICAgICAgaW5wdXQgPSBhcmd1bWVudHNbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGlucHV0ID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIHJldHVybiBub3JtYWxpemUoaW5wdXQpO1xuICB9O1xuXG59KTtcbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0aWQ6IG1vZHVsZUlkLFxuXHRcdGxvYWRlZDogZmFsc2UsXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuXHRtb2R1bGUubG9hZGVkID0gdHJ1ZTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18uZyA9IChmdW5jdGlvbigpIHtcblx0aWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSAnb2JqZWN0JykgcmV0dXJuIGdsb2JhbFRoaXM7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIHRoaXMgfHwgbmV3IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcpIHJldHVybiB3aW5kb3c7XG5cdH1cbn0pKCk7IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubm1kID0gKG1vZHVsZSkgPT4ge1xuXHRtb2R1bGUucGF0aHMgPSBbXTtcblx0aWYgKCFtb2R1bGUuY2hpbGRyZW4pIG1vZHVsZS5jaGlsZHJlbiA9IFtdO1xuXHRyZXR1cm4gbW9kdWxlO1xufTsiLCIvLyBzdGFydHVwXG4vLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8vIFRoaXMgZW50cnkgbW9kdWxlIGlzIHJlZmVyZW5jZWQgYnkgb3RoZXIgbW9kdWxlcyBzbyBpdCBjYW4ndCBiZSBpbmxpbmVkXG52YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMTc1KTtcbiJdLCJuYW1lcyI6WyJvcHRpb25zIiwiZm9ybURhdGEiLCJjb25maWciLCJfX2Fzc2lnbiIsInVybCIsInVzZXJuYW1lIiwiRXJyb3IiLCJrZXkiLCJ0aGlzIiwicmVxdWVzdCIsInJlcXVlc3RfMSIsIm1haWxMaXN0c01lbWJlcnMiLCJtYWlsTGlzdE1lbWJlcnNfMSIsImRvbWFpbkNyZWRlbnRpYWxzQ2xpZW50IiwiZG9tYWluc0NyZWRlbnRpYWxzXzEiLCJkb21haW5UZW1wbGF0ZXNDbGllbnQiLCJkb21haW5zVGVtcGxhdGVzXzEiLCJkb21haW5UYWdzQ2xpZW50IiwiZG9tYWluc1RhZ3NfMSIsIm11bHRpcGxlVmFsaWRhdGlvbkNsaWVudCIsIm11bHRpcGxlVmFsaWRhdGlvbl8xIiwiZG9tYWlucyIsImRvbWFpbnNfMSIsIndlYmhvb2tzIiwid2ViaG9va3NfMSIsImV2ZW50cyIsImV2ZW50c18xIiwic3RhdHMiLCJzdGF0c18xIiwic3VwcHJlc3Npb25zIiwic3VwcHJlc3Npb25zXzEiLCJtZXNzYWdlcyIsIm1lc3NhZ2VzXzEiLCJyb3V0ZXMiLCJyb3V0ZXNfMSIsImlwcyIsImlwc18xIiwiaXBfcG9vbHMiLCJpcF9wb29sc18xIiwibGlzdHMiLCJsaXN0c18xIiwidmFsaWRhdGUiLCJ2YWxpZGF0ZV8xIiwiZGF0YSIsInJlY2VpdmluZyIsInNlbmRpbmciLCJuYW1lIiwicmVxdWlyZV90bHMiLCJza2lwX3ZlcmlmaWNhdGlvbiIsInN0YXRlIiwid2lsZGNhcmQiLCJzcGFtX2FjdGlvbiIsImNyZWF0ZWRfYXQiLCJzbXRwX3Bhc3N3b3JkIiwic210cF9sb2dpbiIsInR5cGUiLCJyZWNlaXZpbmdfZG5zX3JlY29yZHMiLCJzZW5kaW5nX2Ruc19yZWNvcmRzIiwiZXhwb3J0cyIsImRvbWFpbkNyZWRlbnRpYWxzIiwiZG9tYWluVGVtcGxhdGVzIiwiZG9tYWluVGFncyIsIkRvbWFpbkNsaWVudCIsInJlc3BvbnNlIiwiYm9keSIsIml0ZW1zIiwibWFwIiwiaXRlbSIsIkRvbWFpbiIsImRvbWFpbiIsInRyYWNraW5nIiwicXVlcnkiLCJnZXQiLCJ0aGVuIiwicmVzIiwiX3BhcnNlRG9tYWluTGlzdCIsIl9wYXJzZURvbWFpbiIsInBvc3RPYmoiLCJmb3JjZV9ka2ltX2F1dGhvcml0eSIsInRvU3RyaW5nIiwicG9zdFdpdGhGRCIsInB1dCIsImRlbGV0ZSIsIl9wYXJzZU1lc3NhZ2UiLCJjb25uZWN0aW9uIiwiX3BhcnNlVHJhY2tpbmdTZXR0aW5ncyIsImFjdGl2ZSIsImVycm9yXzEiLCJzdGF0dXMiLCJzdGF0dXNUZXh0IiwibWVzc2FnZSIsInB1dFdpdGhGRCIsIl9wYXJzZVRyYWNraW5nVXBkYXRlIiwiX2EiLCJpcCIsInBvb2xfaWQiLCJyZXBsYWNlbWVudCIsInNlYXJjaFBhcmFtcyIsInNlbGYiLCJka2ltU2VsZWN0b3IiLCJ3ZWJQcmVmaXgiLCJiYXNlUm91dGUiLCJEb21haW5DcmVkZW50aWFsc0NsaWVudCIsInRvdGFsQ291bnQiLCJ0b3RhbF9jb3VudCIsInNwZWMiLCJfcGFyc2VEb21haW5DcmVkZW50aWFsc0xpc3QiLCJjb25jYXQiLCJfcGFyc2VNZXNzYWdlUmVzcG9uc2UiLCJjcmVkZW50aWFsc0xvZ2luIiwiX3BhcnNlRGVsZXRlZFJlc3BvbnNlIiwidGFnSW5mbyIsInRhZyIsImRlc2NyaXB0aW9uIiwiRGF0ZSIsInRhZ1N0YXRpc3RpY0luZm8iLCJzdGFydCIsImVuZCIsInJlc29sdXRpb24iLCJzdGF0IiwidGltZSIsIkRvbWFpblRhZ3NDbGllbnQiLCJPYmplY3QiLCJlbnRyaWVzIiwicGFnaW5nIiwicmVkdWNlIiwiYWNjIiwiZW50cmllIiwiaWQiLCJEb21haW5UYWciLCJwYWdlcyIsIl9wYXJzZVBhZ2VMaW5rcyIsIkRvbWFpblRhZ1N0YXRpc3RpYyIsIl9wYXJzZURvbWFpblRhZ3NMaXN0IiwiX3BhcnNlVGFnU3RhdGlzdGljIiwiZG9tYWluVGVtcGxhdGVGcm9tQVBJIiwiY3JlYXRlZEF0IiwiY3JlYXRlZEJ5IiwidmVyc2lvbiIsInZlcnNpb25zIiwibGVuZ3RoIiwicmVzdWx0IiwiRG9tYWluVGVtcGxhdGVzQ2xpZW50IiwiRG9tYWluVGVtcGxhdGVJdGVtIiwidGVtcGxhdGUiLCJ0ZW1wbGF0ZU5hbWUiLCJ0ZW1wbGF0ZVZlcnNpb24iLCJkIiwicGFyc2VMaXN0IiwicGFyc2VDcmVhdGlvblJlc3BvbnNlIiwicGFyc2VNdXRhdGlvblJlc3BvbnNlIiwicGFyc2VOb3RpZmljYXRpb25SZXNwb25zZSIsInBhcnNlQ3JlYXRpb25WZXJzaW9uUmVzcG9uc2UiLCJwYXJzZU11dGF0ZVRlbXBsYXRlVmVyc2lvblJlc3BvbnNlIiwicGFyc2VMaXN0VGVtcGxhdGVWZXJzaW9ucyIsIl9iIiwiYm9keU1lc3NhZ2UiLCJlcnJvciIsIl9zdXBlciIsInN0YWNrIiwiX3RoaXMiLCJkZXRhaWxzIiwiX19leHRlbmRzIiwiRXZlbnRDbGllbnQiLCJzcGxpdCIsInBvcCIsIm51bWJlciIsIl9wYXJzZVBhZ2VOdW1iZXIiLCJwYWlyIiwiX3BhcnNlUGFnZSIsInF1ZXJ5Q29weSIsInBhZ2UiLCJfcGFyc2VFdmVudExpc3QiLCJGb3JtRGF0YUNvbnN0cnVjdG9yIiwiRm9ybURhdGFCdWlsZGVyIiwia2V5cyIsImZpbHRlciIsImZvcm1EYXRhQWNjIiwiaW5jbHVkZXMiLCJhZGRGaWxlc1RvRkQiLCJhZGRNaW1lRGF0YVRvRkQiLCJhZGRDb21tb25Qcm9wZXJ0eVRvRkQiLCJmb3JtRGF0YUluc3RhbmNlIiwidW5kZWZpbmVkIiwiZ2V0SGVhZGVycyIsImlzU3RyZWFtIiwiZmlsZW5hbWUiLCJjb250ZW50VHlwZSIsImtub3duTGVuZ3RoIiwiaXNOb2RlRm9ybURhdGEiLCJCdWZmZXIiLCJpc0J1ZmZlciIsImFwcGVuZCIsInByb3BlcnR5TmFtZSIsInZhbHVlIiwiYXBwZW5kRmlsZVRvRkQiLCJvYmoiLCJvYmpEYXRhIiwiZ2V0QXR0YWNobWVudE9wdGlvbnMiLCJBcnJheSIsImlzQXJyYXkiLCJmb3JFYWNoIiwicGlwZSIsIkZvcm1EYXRhIiwiTWFpbGd1biIsImNsaWVudF8xIiwiU3VwcHJlc3Npb25Nb2RlbHMiLCJJcFBvb2xzQ2xpZW50IiwicGFyc2VJcFBvb2xzUmVzcG9uc2UiLCJwb29sSWQiLCJwYXRjaFdpdGhGRCIsIklwc0NsaWVudCIsInBhcnNlSXBzUmVzcG9uc2UiLCJtZW1iZXJzIiwiTGlzdHNDbGllbnQiLCJ2YWxpZGF0aW9uUmVzdWx0IiwibWFpbExpc3RBZGRyZXNzIiwibGlzdCIsInBvc3QiLCJwYXJzZVZhbGlkYXRpb25SZXN1bHQiLCJNYWlsTGlzdHNNZW1iZXJzIiwibmV3RGF0YSIsInZhcnMiLCJKU09OIiwic3RyaW5naWZ5Iiwic3Vic2NyaWJlZCIsIm1haWxMaXN0TWVtYmVyQWRkcmVzcyIsIm1lbWJlciIsInJlcURhdGEiLCJjaGVja0FuZFVwZGF0ZURhdGEiLCJ1cHNlcnQiLCJNZXNzYWdlc0NsaWVudCIsIl9wYXJzZVJlc3BvbnNlIiwiTXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50IiwibGlzdElkIiwiZmlsZSIsInRpbWVvdXQiLCJoZWFkZXJzIiwiZm9ybURhdGFCdWlsZGVyIiwiZm9ybURhdGFCdWlsZGVyXzEiLCJSZXF1ZXN0IiwibWV0aG9kIiwib25DYWxsT3B0aW9ucyIsImJhc2ljIiwiYmFzZTY0IiwiZW5jb2RlIiwib25DYWxsSGVhZGVycyIsIkF1dGhvcml6YXRpb24iLCJwYXJhbXMiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwidG9Mb2NhbGVVcHBlckNhc2UiLCJ0aHJvd0h0dHBFcnJvcnMiLCJvayIsImdldFJlc3BvbnNlQm9keSIsInJlc18xIiwicmVzcG9uc2VTdHJpbmciLCJ0ZXh0IiwianNvbkJvZHkiLCJwYXJzZSIsImFkZERlZmF1bHRIZWFkZXJzIiwicmVxdWVzdE9wdGlvbnMiLCJjb21tYW5kIiwiY3JlYXRlRm9ybURhdGEiLCJSb3V0ZXNDbGllbnQiLCJyb3V0ZSIsIlN0YXRzQ2xpZW50IiwiYXJyYXlXaXRoUGFpcnMiLCJjdXJyZW50UGFpciIsInJlcGVhdGVkUHJvcGVydHkiLCJwdXNoIiwiU3RhdHMiLCJwcmVwYXJlU2VhcmNoUGFyYW1zIiwiX3BhcnNlU3RhdHMiLCJjcmVhdGVPcHRpb25zIiwiU3VwcmVzc2lvbnNfMSIsIkJPVU5DRVMiLCJhZGRyZXNzIiwiY29kZSIsIlN1cHByZXNzaW9uIiwiQ09NUExBSU5UUyIsIlVOU1VCU0NSSUJFUyIsInRhZ3MiLCJXSElURUxJU1RTIiwicmVhc29uIiwibW9kZWxzIiwiTWFwIiwic2V0IiwiQm91bmNlIiwiQ29tcGxhaW50IiwiVW5zdWJzY3JpYmUiLCJXaGl0ZUxpc3QiLCJTdXBwcmVzc2lvbkNsaWVudCIsInBhZ2VVcmwiLCJVUkwiLCJoYXMiLCJNb2RlbCIsInByZXBhcmVSZXNwb25zZSIsImNoZWNrVHlwZSIsIm1vZGVsIiwiX3BhcnNlTGlzdCIsImVuY29kZVVSSUNvbXBvbmVudCIsIl9wYXJzZUl0ZW0iLCJwb3N0RGF0YSIsImNyZWF0ZVdoaXRlTGlzdCIsIm1vZHVsZSIsIm11bHRpcGxlVmFsaWRhdGlvbiIsIlZhbGlkYXRlQ2xpZW50IiwiV2ViaG9va0NsaWVudCIsIndlYmhvb2tSZXNwb25zZSIsIndlYmhvb2siLCJ1cmxzIiwiV2ViaG9vayIsIl9wYXJzZVdlYmhvb2tMaXN0IiwiX3BhcnNlV2ViaG9va1dpdGhJRCIsInRlc3QiLCJfcGFyc2VXZWJob29rVGVzdCIsInJvb3QiLCJmcmVlRXhwb3J0cyIsImZyZWVHbG9iYWwiLCJnIiwiZ2xvYmFsIiwid2luZG93IiwiSW52YWxpZENoYXJhY3RlckVycm9yIiwicHJvdG90eXBlIiwiVEFCTEUiLCJSRUdFWF9TUEFDRV9DSEFSQUNURVJTIiwiaW5wdXQiLCJTdHJpbmciLCJhIiwiYiIsImMiLCJidWZmZXIiLCJwYWRkaW5nIiwib3V0cHV0IiwicG9zaXRpb24iLCJjaGFyQ29kZUF0IiwiY2hhckF0IiwicmVwbGFjZSIsImJpdFN0b3JhZ2UiLCJiaXRDb3VudGVyIiwiaW5kZXhPZiIsImZyb21DaGFyQ29kZSIsImdsb2JhbHMiLCJnZXRHbG9iYWwiLCJwcm9wZXJ0eSIsImdsb2JhbFRoaXMiLCJnbG9iYWxQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJnbG9iYWxPYmplY3QiLCJiaW5kIiwiaXNPYmplY3QiLCJzdXBwb3J0c0Fib3J0Q29udHJvbGxlciIsIkFib3J0Q29udHJvbGxlciIsInN1cHBvcnRzU3RyZWFtcyIsIlJlYWRhYmxlU3RyZWFtIiwic3VwcG9ydHNGb3JtRGF0YSIsIm1lcmdlSGVhZGVycyIsInNvdXJjZTEiLCJzb3VyY2UyIiwiSGVhZGVycyIsImlzSGVhZGVyc0luc3RhbmNlIiwic291cmNlIiwiZGVlcE1lcmdlIiwic291cmNlcyIsInJldHVyblZhbHVlIiwicmVxdWVzdE1ldGhvZHMiLCJyZXNwb25zZVR5cGVzIiwianNvbiIsImFycmF5QnVmZmVyIiwiYmxvYiIsInJldHJ5QWZ0ZXJTdGF0dXNDb2RlcyIsInN0b3AiLCJTeW1ib2wiLCJIVFRQRXJyb3IiLCJjb25zdHJ1Y3RvciIsInN1cGVyIiwiVGltZW91dEVycm9yIiwiZGVsYXkiLCJtcyIsIlByb21pc2UiLCJyZXNvbHZlIiwic2V0VGltZW91dCIsIm5vcm1hbGl6ZVJlcXVlc3RNZXRob2QiLCJ0b1VwcGVyQ2FzZSIsImRlZmF1bHRSZXRyeU9wdGlvbnMiLCJsaW1pdCIsIm1ldGhvZHMiLCJzdGF0dXNDb2RlcyIsImFmdGVyU3RhdHVzQ29kZXMiLCJub3JtYWxpemVSZXRyeU9wdGlvbnMiLCJyZXRyeSIsIm1heFNhZmVUaW1lb3V0IiwiS3kiLCJfcmV0cnlDb3VudCIsIl9pbnB1dCIsIl9vcHRpb25zIiwiY3JlZGVudGlhbHMiLCJob29rcyIsImJlZm9yZVJlcXVlc3QiLCJiZWZvcmVSZXRyeSIsImFmdGVyUmVzcG9uc2UiLCJwcmVmaXhVcmwiLCJmZXRjaCIsIlR5cGVFcnJvciIsInN0YXJ0c1dpdGgiLCJlbmRzV2l0aCIsImFib3J0Q29udHJvbGxlciIsInNpZ25hbCIsImFkZEV2ZW50TGlzdGVuZXIiLCJhYm9ydCIsIlVSTFNlYXJjaFBhcmFtcyIsImZuIiwiYXN5bmMiLCJSYW5nZUVycm9yIiwiX2ZldGNoIiwiaG9vayIsIm1vZGlmaWVkUmVzcG9uc2UiLCJfZGVjb3JhdGVSZXNwb25zZSIsImNsb25lIiwiUmVzcG9uc2UiLCJvbkRvd25sb2FkUHJvZ3Jlc3MiLCJfc3RyZWFtIiwidG9Mb3dlckNhc2UiLCJfcmV0cnkiLCJtaW1lVHlwZSIsInBhcnNlSnNvbiIsIl9jYWxjdWxhdGVSZXRyeURlbGF5IiwicmV0cnlBZnRlciIsImFmdGVyIiwiTnVtYmVyIiwiaXNOYU4iLCJub3ciLCJtYXhSZXRyeUFmdGVyIiwiTWF0aCIsIm1pbiIsInJldHJ5Q291bnQiLCJyZWplY3QiLCJ0aW1lb3V0SUQiLCJjYXRjaCIsImNsZWFyVGltZW91dCIsInRvdGFsQnl0ZXMiLCJ0cmFuc2ZlcnJlZEJ5dGVzIiwiY29udHJvbGxlciIsInJlYWRlciIsImdldFJlYWRlciIsInBlcmNlbnQiLCJVaW50OEFycmF5IiwicmVhZCIsImRvbmUiLCJjbG9zZSIsImJ5dGVMZW5ndGgiLCJlbnF1ZXVlIiwidmFsaWRhdGVBbmRNZXJnZSIsImNyZWF0ZUluc3RhbmNlIiwiZGVmYXVsdHMiLCJreSIsImNyZWF0ZSIsIm5ld0RlZmF1bHRzIiwiZXh0ZW5kIiwibm9ybWFsaXplIiwic3RyQXJyYXkiLCJyZXN1bHRBcnJheSIsIm1hdGNoIiwiZmlyc3QiLCJzaGlmdCIsImkiLCJjb21wb25lbnQiLCJzdHIiLCJqb2luIiwicGFydHMiLCJhcmd1bWVudHMiLCJzbGljZSIsImNhbGwiLCJkZWZpbml0aW9uIiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwibG9hZGVkIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsIm8iLCJlbnVtZXJhYmxlIiwiRnVuY3Rpb24iLCJlIiwicHJvcCIsImhhc093blByb3BlcnR5IiwiciIsInRvU3RyaW5nVGFnIiwibm1kIiwicGF0aHMiLCJjaGlsZHJlbiJdLCJzb3VyY2VSb290IjoiIn0=