mailgun.js 11.0.0 → 12.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/AMD/definitions.amd.js +48 -0
- package/AMD/mailgun.amd.js +2 -0
- package/CHANGELOG.md +39 -0
- package/CJS/definitions.cjs +46 -0
- package/CJS/mailgun.node.cjs +2 -0
- package/ESM/definitions.browser.js +44 -0
- package/ESM/definitions.node.js +44 -0
- package/ESM/mailgun.browser.js +2 -0
- package/ESM/mailgun.node.js +2 -0
- package/README.md +296 -148
- package/{Classes → Types/Classes}/Domains/domain.d.ts +1 -1
- package/{Classes → Types/Classes}/Domains/domainsClient.d.ts +15 -12
- package/{Classes → Types/Classes}/Domains/domainsCredentials.d.ts +3 -3
- package/{Classes → Types/Classes}/Domains/domainsTags.d.ts +5 -5
- package/{Classes → Types/Classes}/Domains/domainsTemplates.d.ts +4 -4
- package/Types/Classes/Domains/domainsTracking.d.ts +15 -0
- package/{Classes → Types/Classes}/Events.d.ts +4 -4
- package/{Classes → Types/Classes}/IPPools.d.ts +3 -3
- package/{Classes → Types/Classes}/IPs.d.ts +3 -3
- package/{Classes → Types/Classes}/InboxPlacements/AttributesClient.d.ts +3 -3
- package/{Classes → Types/Classes}/InboxPlacements/FiltersClient.d.ts +3 -3
- package/{Classes → Types/Classes}/InboxPlacements/Results/InboxPlacementsResultsClient.d.ts +4 -4
- package/{Classes → Types/Classes}/InboxPlacements/Results/InboxPlacementsResultsSharingClient.d.ts +3 -3
- package/{Classes → Types/Classes}/InboxPlacements/SeedsLists/SeedsListsClient.d.ts +4 -4
- package/{Classes → Types/Classes}/InboxPlacements/inboxPlacements.d.ts +3 -5
- package/{Classes → Types/Classes}/InboxPlacements/providers/InboxPlacementsProviders.d.ts +3 -3
- package/{Classes → Types/Classes}/MailgunClient.d.ts +4 -4
- package/{Classes → Types/Classes}/MailingLists/mailListMembers.d.ts +4 -4
- package/{Classes → Types/Classes}/MailingLists/mailingLists.d.ts +5 -5
- package/{Classes → Types/Classes}/Messages.d.ts +3 -3
- package/{Classes → Types/Classes}/Metrics/MetricsClient.d.ts +3 -4
- package/{Classes → Types/Classes}/Routes.d.ts +3 -3
- package/{Classes → Types/Classes}/Stats/StatsClient.d.ts +3 -4
- package/{Classes → Types/Classes}/Stats/StatsContainer.d.ts +2 -2
- package/{Classes → Types/Classes}/Subaccounts.d.ts +3 -3
- package/{Classes → Types/Classes}/Suppressions/Bounce.d.ts +3 -3
- package/Types/Classes/Suppressions/Complaint.d.ts +8 -0
- package/{Classes → Types/Classes}/Suppressions/Suppression.d.ts +1 -1
- package/{Classes → Types/Classes}/Suppressions/SuppressionsClient.d.ts +5 -5
- package/{Classes → Types/Classes}/Suppressions/Unsubscribe.d.ts +3 -3
- package/Types/Classes/Suppressions/WhiteList.d.ts +9 -0
- package/{Classes → Types/Classes}/Validations/multipleValidation.d.ts +4 -4
- package/{Classes → Types/Classes}/Validations/validate.d.ts +3 -3
- package/{Classes → Types/Classes}/Webhooks.d.ts +4 -4
- package/{Classes → Types/Classes}/common/AttachmentsHandler.d.ts +2 -2
- package/{Classes → Types/Classes}/common/Error.d.ts +1 -1
- package/{Classes → Types/Classes}/common/FormDataBuilder.d.ts +2 -2
- package/{Classes → Types/Classes}/common/NavigationThruPages.d.ts +4 -4
- package/{Classes → Types/Classes}/common/Request.d.ts +1 -1
- package/Types/Interfaces/Common/index.d.ts +1 -0
- package/{Interfaces → Types/Interfaces}/Domains/DomainCredentials.d.ts +1 -1
- package/{Interfaces → Types/Interfaces}/Domains/DomainTags.d.ts +2 -2
- package/{Interfaces → Types/Interfaces}/Domains/DomainTemplates.d.ts +1 -1
- package/Types/Interfaces/Domains/DomainTracking.d.ts +8 -0
- package/{Interfaces → Types/Interfaces}/Domains/DomainsClient.d.ts +7 -5
- package/Types/Interfaces/Domains/index.d.ts +5 -0
- package/{Interfaces → Types/Interfaces}/EventClient/IEventClient.d.ts +1 -1
- package/Types/Interfaces/EventClient/index.d.ts +1 -0
- package/{Interfaces → Types/Interfaces}/IPPools/IIPPoolsClient.d.ts +1 -1
- package/Types/Interfaces/IPPools/index.d.ts +1 -0
- package/{Interfaces → Types/Interfaces}/IPs/IIPsClient.d.ts +1 -1
- package/Types/Interfaces/IPs/index.d.ts +1 -0
- package/{Interfaces → Types/Interfaces}/InboxPlacements/AttributesClient.d.ts +1 -1
- package/{Interfaces → Types/Interfaces}/InboxPlacements/FiltersClient.d.ts +1 -1
- package/{Interfaces → Types/Interfaces}/InboxPlacements/InboxPlacementsClient.d.ts +4 -4
- package/{Interfaces → Types/Interfaces}/InboxPlacements/Results/InboxPlacementsResults.d.ts +4 -4
- package/{Interfaces → Types/Interfaces}/InboxPlacements/Results/InboxPlacementsResultsSharing.d.ts +1 -1
- package/{Interfaces → Types/Interfaces}/InboxPlacements/SeedsLists/SeedsListsClient.d.ts +3 -3
- package/Types/Interfaces/InboxPlacements/index.d.ts +7 -0
- package/{Interfaces → Types/Interfaces}/InboxPlacements/providers/InboxPlacementsProviders.d.ts +1 -1
- package/Types/Interfaces/MailgunClient/IMailgunClient.d.ts +34 -0
- package/Types/Interfaces/MailgunClient/index.d.ts +1 -0
- package/{Interfaces → Types/Interfaces}/MailingLists/MailingListMembers.d.ts +1 -1
- package/{Interfaces → Types/Interfaces}/MailingLists/MailingListsClient.d.ts +2 -2
- package/Types/Interfaces/MailingLists/index.d.ts +2 -0
- package/{Interfaces → Types/Interfaces}/Messages/IMessagesClient.d.ts +1 -1
- package/Types/Interfaces/Messages/index.d.ts +1 -0
- package/{Interfaces → Types/Interfaces}/Metrics/MetricsClient.d.ts +1 -1
- package/{Interfaces → Types/Interfaces}/Routes/IRoutesClient.d.ts +1 -1
- package/Types/Interfaces/Routes/index.d.ts +1 -0
- package/{Interfaces → Types/Interfaces}/Stats/StatsClient.d.ts +2 -2
- package/{Interfaces → Types/Interfaces}/Stats/StatsContainer.d.ts +1 -1
- package/Types/Interfaces/Stats/index.d.ts +2 -0
- package/{Interfaces → Types/Interfaces}/Subaccounts/ISubaccountsClient.d.ts +1 -1
- package/Types/Interfaces/Subaccounts/index.d.ts +1 -0
- package/{Interfaces → Types/Interfaces}/Suppressions/ISuppressionsClient.d.ts +5 -5
- package/Types/Interfaces/Suppressions/index.d.ts +5 -0
- package/{Interfaces → Types/Interfaces}/Validations/MultipleValidation.d.ts +1 -1
- package/{Interfaces → Types/Interfaces}/Validations/Validation.d.ts +2 -2
- package/Types/Interfaces/Validations/index.d.ts +2 -0
- package/{Interfaces → Types/Interfaces}/Webhooks/IWebHooksClient.d.ts +2 -2
- package/Types/Interfaces/Webhooks/index.d.ts +1 -0
- package/Types/Interfaces/index.d.ts +16 -0
- package/Types/{Common → Types/Common}/FormData.d.ts +1 -1
- package/Types/{Common → Types/Common}/RequestOptions.d.ts +1 -1
- package/Types/Types/Common/index.d.ts +6 -0
- package/Types/{Domains → Types/Domains}/DomainTags.d.ts +2 -2
- package/Types/{Domains → Types/Domains}/DomainTemplates.d.ts +3 -3
- package/Types/{Domains → Types/Domains}/DomainTracking.d.ts +16 -0
- package/Types/Types/Domains/index.d.ts +5 -0
- package/Types/{Events → Types/Events}/Events.d.ts +1 -1
- package/Types/Types/Events/index.d.ts +1 -0
- package/Types/Types/IPPools/index.d.ts +1 -0
- package/Types/Types/IPs/index.d.ts +1 -0
- package/Types/{InboxPlacements → Types/InboxPlacements}/Results/InboxPlacementsResults.d.ts +1 -1
- package/Types/{InboxPlacements → Types/InboxPlacements}/SeedsLists/SeedsLists.d.ts +1 -1
- package/Types/Types/InboxPlacements/index.d.ts +7 -0
- package/Types/Types/MailgunClient/index.d.ts +1 -0
- package/Types/{MailingLists → Types/MailingLists}/MailingListMembers.d.ts +2 -2
- package/Types/{MailingLists → Types/MailingLists}/MailingLists.d.ts +1 -1
- package/Types/Types/MailingLists/index.d.ts +2 -0
- package/Types/Types/Messages/index.d.ts +1 -0
- package/Types/{Metrics → Types/Metrics}/Metrics.d.ts +1 -1
- package/Types/{Metrics → Types/Metrics}/MetricsAPI.d.ts +1 -1
- package/Types/Types/Metrics/index.d.ts +2 -0
- package/Types/Types/Routes/index.d.ts +1 -0
- package/Types/Types/Stats/index.d.ts +1 -0
- package/Types/Types/Subaccounts/index.d.ts +1 -0
- package/Types/{Suppressions → Types/Suppressions}/Suppressions.d.ts +3 -3
- package/Types/Types/Suppressions/index.d.ts +5 -0
- package/Types/{Validations → Types/Validations}/MultipleValidation.d.ts +2 -2
- package/Types/Types/Validations/index.d.ts +2 -0
- package/Types/Types/Webhooks/index.d.ts +1 -0
- package/Types/Types/index.d.ts +15 -0
- package/Types/definitions.d.ts +3 -0
- package/Types/index.d.ts +8 -14
- package/Types/index.js +6578 -0
- package/package.json +38 -6
- package/version.md +1 -1
- package/Classes/Domains/domains.d.ts +0 -51
- package/Classes/InboxPlacements/Results/InboxPlacementsResultsClient.ts +0 -18
- package/Classes/InboxPlacements/Results/InboxPlacementsResultsSharing.ts +0 -10
- package/Classes/InboxPlacements/SeedsLists/AttributesClient.d.ts +0 -10
- package/Classes/InboxPlacements/SeedsLists/FiltersClient.d.ts +0 -8
- package/Classes/Suppressions/Complaint.d.ts +0 -8
- package/Classes/Suppressions/WhiteList.d.ts +0 -9
- package/Interfaces/Common/index.d.ts +0 -1
- package/Interfaces/Domains/index.d.ts +0 -4
- package/Interfaces/EventClient/index.d.ts +0 -1
- package/Interfaces/IPPools/index.d.ts +0 -1
- package/Interfaces/IPs/index.d.ts +0 -1
- package/Interfaces/InboxPlacements/Results/InboxPlacementsResultsClient.d.ts +0 -8
- package/Interfaces/InboxPlacements/SeedsLists/AttributesClient.d.ts +0 -5
- package/Interfaces/InboxPlacements/SeedsLists/FiltersClient.d.ts +0 -4
- package/Interfaces/InboxPlacements/index.d.ts +0 -6
- package/Interfaces/MailgunClient/IMailgunClient.d.ts +0 -32
- package/Interfaces/MailgunClient/index.d.ts +0 -1
- package/Interfaces/MailingLists/index.d.ts +0 -2
- package/Interfaces/Messages/index.d.ts +0 -1
- package/Interfaces/Routes/index.d.ts +0 -1
- package/Interfaces/Stats/index.d.ts +0 -2
- package/Interfaces/Subaccounts/index.d.ts +0 -1
- package/Interfaces/Suppressions/index.d.ts +0 -5
- package/Interfaces/Validations/index.d.ts +0 -2
- package/Interfaces/Webhooks/index.d.ts +0 -1
- package/Interfaces/index.d.ts +0 -15
- package/Types/Common/index.d.ts +0 -5
- package/Types/Domains/index.d.ts +0 -5
- package/Types/Events/index.d.ts +0 -1
- package/Types/IPPools/index.d.ts +0 -1
- package/Types/IPs/index.d.ts +0 -1
- package/Types/InboxPlacements/InboxPlacementsClient.d.ts +0 -0
- package/Types/InboxPlacements/index.d.ts +0 -7
- package/Types/MailgunClient/index.d.ts +0 -1
- package/Types/MailingLists/index.d.ts +0 -2
- package/Types/Messages/index.d.ts +0 -1
- package/Types/Metrics/index.d.ts +0 -2
- package/Types/Routes/index.d.ts +0 -1
- package/Types/Stats/index.d.ts +0 -1
- package/Types/Subaccounts/index.d.ts +0 -1
- package/Types/Suppressions/index.d.ts +0 -5
- package/Types/Validations/index.d.ts +0 -2
- package/Types/Webhooks/index.d.ts +0 -1
- package/index.d.ts +0 -11
- package/mailgun.node.js +0 -3
- package/mailgun.node.js.LICENSE.txt +0 -17
- package/mailgun.web.js +0 -3
- package/mailgun.web.js.LICENSE.txt +0 -3
- /package/{Enums → Types/Enums}/index.d.ts +0 -0
- /package/{Interfaces → Types/Interfaces}/Common/Logger.d.ts +0 -0
- /package/{Interfaces → Types/Interfaces}/Suppressions/Bounce.d.ts +0 -0
- /package/{Interfaces → Types/Interfaces}/Suppressions/Complaint.d.ts +0 -0
- /package/{Interfaces → Types/Interfaces}/Suppressions/Unsubscribe.d.ts +0 -0
- /package/{Interfaces → Types/Interfaces}/Suppressions/WhiteList.d.ts +0 -0
- /package/Types/{Common → Types/Common}/ApiResponse.d.ts +0 -0
- /package/Types/{Common → Types/Common}/Attachments.d.ts +0 -0
- /package/Types/{Common → Types/Common}/Error.d.ts +0 -0
- /package/Types/{Common → Types/Common}/NavigationThruPages.d.ts +0 -0
- /package/Types/{Domains → Types/Domains}/DomainCredentials.d.ts +0 -0
- /package/Types/{Domains → Types/Domains}/Domains.d.ts +0 -0
- /package/Types/{IPPools → Types/IPPools}/IpPools.d.ts +0 -0
- /package/Types/{IPs → Types/IPs}/IPs.d.ts +0 -0
- /package/Types/{InboxPlacements → Types/InboxPlacements}/Attributes.d.ts +0 -0
- /package/Types/{InboxPlacements → Types/InboxPlacements}/Filters.d.ts +0 -0
- /package/Types/{InboxPlacements → Types/InboxPlacements}/InboxPlacements.d.ts +0 -0
- /package/Types/{InboxPlacements → Types/InboxPlacements}/Results/InboxPlacementsResultsSharing.d.ts +0 -0
- /package/Types/{InboxPlacements → Types/InboxPlacements}/providers/InboxPlacementsProviders.d.ts +0 -0
- /package/Types/{MailgunClient → Types/MailgunClient}/MailgunClientOptions.d.ts +0 -0
- /package/Types/{Messages → Types/Messages}/Messages.d.ts +0 -0
- /package/Types/{Routes → Types/Routes}/Routes.d.ts +0 -0
- /package/Types/{Stats → Types/Stats}/Stats.d.ts +0 -0
- /package/Types/{Subaccounts → Types/Subaccounts}/Subaccounts.d.ts +0 -0
- /package/Types/{Suppressions → Types/Suppressions}/Bounce.d.ts +0 -0
- /package/Types/{Suppressions → Types/Suppressions}/Complaint.d.ts +0 -0
- /package/Types/{Suppressions → Types/Suppressions}/Unsubscribe.d.ts +0 -0
- /package/Types/{Suppressions → Types/Suppressions}/WhiteList.d.ts +0 -0
- /package/Types/{Validations → Types/Validations}/Validation.d.ts +0 -0
- /package/Types/{Webhooks → Types/Webhooks}/Webhooks.d.ts +0 -0
package/mailgun.node.js
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
/*! For license information please see mailgun.node.js.LICENSE.txt */
|
|
2
|
-
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.mailgun=t():e.mailgun=t()}(this,(()=>(()=>{var e={1873:(e,t,n)=>{e.exports={parallel:n(8798),serial:n(2081),serialOrdered:n(28)}},4555:e=>{function t(e){"function"==typeof this.jobs[e]&&this.jobs[e]()}e.exports=function(e){Object.keys(e.jobs).forEach(t.bind(e)),e.jobs={}}},2313:(e,t,n)=>{var a=n(405);e.exports=function(e){var t=!1;return a((function(){t=!0})),function(n,i){t?e(n,i):a((function(){e(n,i)}))}}},405:e=>{e.exports=function(e){var t="function"==typeof setImmediate?setImmediate:"object"==typeof process&&"function"==typeof process.nextTick?process.nextTick:null;t?t(e):setTimeout(e,0)}},8051:(e,t,n)=>{var a=n(2313),i=n(4555);e.exports=function(e,t,n,o){var s=n.keyedList?n.keyedList[n.index]:n.index;n.jobs[s]=function(e,t,n,i){var o;o=2==e.length?e(n,a(i)):e(n,t,a(i));return o}(t,s,e[s],(function(e,t){s in n.jobs&&(delete n.jobs[s],e?i(n):n.results[s]=t,o(e,n.results))}))}},9500:e=>{e.exports=function(e,t){var n=!Array.isArray(e),a={index:0,keyedList:n||t?Object.keys(e):null,jobs:{},results:n?{}:[],size:n?Object.keys(e).length:e.length};t&&a.keyedList.sort(n?t:function(n,a){return t(e[n],e[a])});return a}},6276:(e,t,n)=>{var a=n(4555),i=n(2313);e.exports=function(e){if(!Object.keys(this.jobs).length)return;this.index=this.size,a(this),i(e)(null,this.results)}},8798:(e,t,n)=>{var a=n(8051),i=n(9500),o=n(6276);e.exports=function(e,t,n){var s=i(e);for(;s.index<(s.keyedList||e).length;)a(e,t,s,(function(e,t){e?n(e,t):0!==Object.keys(s.jobs).length||n(null,s.results)})),s.index++;return o.bind(s,n)}},2081:(e,t,n)=>{var a=n(28);e.exports=function(e,t,n){return a(e,t,null,n)}},28:(e,t,n)=>{var a=n(8051),i=n(9500),o=n(6276);function s(e,t){return e<t?-1:e>t?1:0}e.exports=function(e,t,n,s){var r=i(e,n);return a(e,t,r,(function n(i,o){i?s(i,o):(r.index++,r.index<(r.keyedList||e).length?a(e,t,r,n):s(null,r.results))})),o.bind(r,s)},e.exports.ascending=s,e.exports.descending=function(e,t){return-1*s(e,t)}},5293:(e,t,n)=>{var a=n(801),i=n(9023),o=n(6928),s=n(8611),r=n(5692),c=n(7016).parse,p=n(9896),u=n(2203).Stream,l=n(6049),d=n(1873),m=n(6750);function f(e){if(!(this instanceof f))return new f(e);for(var t in this._overheadLength=0,this._valueLength=0,this._valuesToMeasure=[],a.call(this),e=e||{})this[t]=e[t]}e.exports=f,i.inherits(f,a),f.LINE_BREAK="\r\n",f.DEFAULT_CONTENT_TYPE="application/octet-stream",f.prototype.append=function(e,t,n){"string"==typeof(n=n||{})&&(n={filename:n});var o=a.prototype.append.bind(this);if("number"==typeof t&&(t=""+t),i.isArray(t))this._error(new Error("Arrays are not supported."));else{var s=this._multiPartHeader(e,t,n),r=this._multiPartFooter();o(s),o(t),o(r),this._trackLength(s,t,n)}},f.prototype._trackLength=function(e,t,n){var a=0;null!=n.knownLength?a+=+n.knownLength:Buffer.isBuffer(t)?a=t.length:"string"==typeof t&&(a=Buffer.byteLength(t)),this._valueLength+=a,this._overheadLength+=Buffer.byteLength(e)+f.LINE_BREAK.length,t&&(t.path||t.readable&&t.hasOwnProperty("httpVersion")||t instanceof u)&&(n.knownLength||this._valuesToMeasure.push(t))},f.prototype._lengthRetriever=function(e,t){e.hasOwnProperty("fd")?null!=e.end&&e.end!=1/0&&null!=e.start?t(null,e.end+1-(e.start?e.start:0)):p.stat(e.path,(function(n,a){var i;n?t(n):(i=a.size-(e.start?e.start:0),t(null,i))})):e.hasOwnProperty("httpVersion")?t(null,+e.headers["content-length"]):e.hasOwnProperty("httpModule")?(e.on("response",(function(n){e.pause(),t(null,+n.headers["content-length"])})),e.resume()):t("Unknown stream")},f.prototype._multiPartHeader=function(e,t,n){if("string"==typeof n.header)return n.header;var a,i=this._getContentDisposition(t,n),o=this._getContentType(t,n),s="",r={"Content-Disposition":["form-data",'name="'+e+'"'].concat(i||[]),"Content-Type":[].concat(o||[])};for(var c in"object"==typeof n.header&&m(r,n.header),r)r.hasOwnProperty(c)&&null!=(a=r[c])&&(Array.isArray(a)||(a=[a]),a.length&&(s+=c+": "+a.join("; ")+f.LINE_BREAK));return"--"+this.getBoundary()+f.LINE_BREAK+s+f.LINE_BREAK},f.prototype._getContentDisposition=function(e,t){var n,a;return"string"==typeof t.filepath?n=o.normalize(t.filepath).replace(/\\/g,"/"):t.filename||e.name||e.path?n=o.basename(t.filename||e.name||e.path):e.readable&&e.hasOwnProperty("httpVersion")&&(n=o.basename(e.client._httpMessage.path||"")),n&&(a='filename="'+n+'"'),a},f.prototype._getContentType=function(e,t){var n=t.contentType;return!n&&e.name&&(n=l.lookup(e.name)),!n&&e.path&&(n=l.lookup(e.path)),!n&&e.readable&&e.hasOwnProperty("httpVersion")&&(n=e.headers["content-type"]),n||!t.filepath&&!t.filename||(n=l.lookup(t.filepath||t.filename)),n||"object"!=typeof e||(n=f.DEFAULT_CONTENT_TYPE),n},f.prototype._multiPartFooter=function(){return function(e){var t=f.LINE_BREAK;0===this._streams.length&&(t+=this._lastBoundary()),e(t)}.bind(this)},f.prototype._lastBoundary=function(){return"--"+this.getBoundary()+"--"+f.LINE_BREAK},f.prototype.getHeaders=function(e){var t,n={"content-type":"multipart/form-data; boundary="+this.getBoundary()};for(t in e)e.hasOwnProperty(t)&&(n[t.toLowerCase()]=e[t]);return n},f.prototype.setBoundary=function(e){this._boundary=e},f.prototype.getBoundary=function(){return this._boundary||this._generateBoundary(),this._boundary},f.prototype.getBuffer=function(){for(var e=new Buffer.alloc(0),t=this.getBoundary(),n=0,a=this._streams.length;n<a;n++)"function"!=typeof this._streams[n]&&(e=Buffer.isBuffer(this._streams[n])?Buffer.concat([e,this._streams[n]]):Buffer.concat([e,Buffer.from(this._streams[n])]),"string"==typeof this._streams[n]&&this._streams[n].substring(2,t.length+2)===t||(e=Buffer.concat([e,Buffer.from(f.LINE_BREAK)])));return Buffer.concat([e,Buffer.from(this._lastBoundary())])},f.prototype._generateBoundary=function(){for(var e="--------------------------",t=0;t<24;t++)e+=Math.floor(10*Math.random()).toString(16);this._boundary=e},f.prototype.getLengthSync=function(){var e=this._overheadLength+this._valueLength;return this._streams.length&&(e+=this._lastBoundary().length),this.hasKnownLength()||this._error(new Error("Cannot calculate proper length in synchronous way.")),e},f.prototype.hasKnownLength=function(){var e=!0;return this._valuesToMeasure.length&&(e=!1),e},f.prototype.getLength=function(e){var t=this._overheadLength+this._valueLength;this._streams.length&&(t+=this._lastBoundary().length),this._valuesToMeasure.length?d.parallel(this._valuesToMeasure,this._lengthRetriever,(function(n,a){n?e(n):(a.forEach((function(e){t+=e})),e(null,t))})):process.nextTick(e.bind(this,null,t))},f.prototype.submit=function(e,t){var n,a,i={method:"post"};return"string"==typeof e?(e=c(e),a=m({port:e.port,path:e.pathname,host:e.hostname,protocol:e.protocol},i)):(a=m(e,i)).port||(a.port="https:"==a.protocol?443:80),a.headers=this.getHeaders(e.headers),n="https:"==a.protocol?r.request(a):s.request(a),this.getLength(function(e,a){if(e&&"Unknown stream"!==e)this._error(e);else if(a&&n.setHeader("Content-Length",a),this.pipe(n),t){var i,o=function(e,a){return n.removeListener("error",o),n.removeListener("response",i),t.call(this,e,a)};i=o.bind(this,null),n.on("error",o),n.on("response",i)}}.bind(this)),n},f.prototype._error=function(e){this.error||(this.error=e,this.pause(),this.emit("error",e))},f.prototype.toString=function(){return"[object FormData]"}},6750:e=>{e.exports=function(e,t){return Object.keys(t).forEach((function(n){e[n]=e[n]||t[n]})),e}},8296:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(e,t,n){this.name=e.name,this.require_tls=e.require_tls,this.skip_verification=e.skip_verification,this.state=e.state,this.wildcard=e.wildcard,this.spam_action=e.spam_action,this.created_at=new Date(e.created_at),this.smtp_password=e.smtp_password,this.smtp_login=e.smtp_login,this.type=e.type,this.receiving_dns_records=t||null,this.sending_dns_records=n||null,this.id=e.id,this.is_disabled=e.is_disabled,this.web_prefix=e.web_prefix,this.web_scheme=e.web_scheme,this.use_automatic_sender_security=e.use_automatic_sender_security;var a=["dkim_host","mailfrom_host"].reduce((function(t,n){return e[n]&&(t[n]=e[n]),t}),{});Object.assign(this,a)};t.default=n},5612:function(e,t,n){"use strict";var a=this&&this.__assign||function(){return a=Object.assign||function(e){for(var t,n=1,a=arguments.length;n<a;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},a.apply(this,arguments)},i=this&&this.__awaiter||function(e,t,n,a){return new(n||(n=Promise))((function(i,o){function s(e){try{c(a.next(e))}catch(e){o(e)}}function r(e){try{c(a.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,r)}c((a=a.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,a,i,o,s={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:r(0),throw:r(1),return:r(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function r(r){return function(c){return function(r){if(n)throw new TypeError("Generator is already executing.");for(;o&&(o=0,r[0]&&(s=0)),s;)try{if(n=1,a&&(i=2&r[0]?a.return:r[0]?a.throw||((i=a.return)&&i.call(a),0):a.next)&&!(i=i.call(a,r[1])).done)return i;switch(a=0,i&&(r=[2&r[0],i.value]),r[0]){case 0:case 1:i=r;break;case 4:return s.label++,{value:r[1],done:!1};case 5:s.label++,a=r[1],r=[0];continue;case 7:r=s.ops.pop(),s.trys.pop();continue;default:if(!(i=s.trys,(i=i.length>0&&i[i.length-1])||6!==r[0]&&2!==r[0])){s=0;continue}if(3===r[0]&&(!i||r[1]>i[0]&&r[1]<i[3])){s.label=r[1];break}if(6===r[0]&&s.label<i[1]){s.label=i[1],i=r;break}if(i&&s.label<i[2]){s.label=i[2],s.ops.push(r);break}i[2]&&s.ops.pop(),s.trys.pop();continue}r=t.call(e,s)}catch(e){r=[6,e],a=0}finally{n=i=0}if(5&r[0])throw r[1];return{value:r[0]?r[1]:void 0,done:!0}}([r,c])}}},s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var r=s(n(5469)),c=s(n(9538)),p=s(n(8296)),u=function(){function e(e,t,n,a,i){void 0===i&&(i=console),this.request=e,this.domainCredentials=t,this.domainTemplates=n,this.domainTags=a,this.logger=i}return e.prototype._handleBoolValues=function(e){var t=e,n=Object.keys(t).reduce((function(e,n){var a=n;if("boolean"==typeof t[a]){var i=t[a];e[a]="true"===i.toString()?"true":"false"}return e}),{});return a(a({},e),n)},e.prototype._parseMessage=function(e){return e.body},e.prototype.parseDomainList=function(e){return e.body&&e.body.items?e.body.items.map((function(e){return new p.default(e)})):[]},e.prototype._parseDomain=function(e){return new p.default(e.body.domain,e.body.receiving_dns_records,e.body.sending_dns_records)},e.prototype._parseTrackingSettings=function(e){return e.body.tracking},e.prototype._parseTrackingUpdate=function(e){return e.body},e.prototype._isOpenTrackingInfoWitPlace=function(e){return"object"==typeof e&&"place_at_the_top"in e},e.prototype.list=function(e){var t=this;return this.request.get("/v4/domains",e).then((function(e){return t.parseDomainList(e)}))},e.prototype.get=function(e,t){var n,a,i=this,o=t?{"h:extended":null!==(n=null==t?void 0:t.extended)&&void 0!==n&&n,"h:with_dns":null===(a=null==t?void 0:t.with_dns)||void 0===a||a}:{};return this.request.get("/v4/domains/".concat(e),o).then((function(e){return i._parseDomain(e)}))},e.prototype.create=function(e){var t=this,n=this._handleBoolValues(e);return this.request.postWithFD("/v4/domains",n).then((function(e){return t._parseDomain(e)}))},e.prototype.update=function(e,t){var n=this,a=this._handleBoolValues(t);return this.request.putWithFD("/v4/domains/".concat(e),a).then((function(e){return n._parseDomain(e)}))},e.prototype.verify=function(e){var t=this;return this.request.put("/v4/domains/".concat(e,"/verify")).then((function(e){return t._parseDomain(e)}))},e.prototype.destroy=function(e){var t=this;return this.request.delete("/v3/domains/".concat(e)).then((function(e){return t._parseMessage(e)}))},e.prototype.getConnection=function(e){return this.request.get("/v3/domains/".concat(e,"/connection")).then((function(e){return e})).then((function(e){return e.body}))},e.prototype.updateConnection=function(e,t){return this.request.put("/v3/domains/".concat(e,"/connection"),t).then((function(e){return e})).then((function(e){return e.body}))},e.prototype.getTracking=function(e){return this.request.get((0,r.default)("/v3/domains",e,"tracking")).then(this._parseTrackingSettings)},e.prototype.updateTracking=function(e,t,n){var i=this,o=a({},n);return"boolean"==typeof(null==n?void 0:n.active)&&(o.active=(null==n?void 0:n.active)?"yes":"no"),this._isOpenTrackingInfoWitPlace(n)&&"boolean"==typeof(null==n?void 0:n.place_at_the_top)&&(o.place_at_the_top=(null==n?void 0:n.place_at_the_top)?"yes":"no"),this.request.putWithFD((0,r.default)("/v3/domains",e,"tracking",t),o).then((function(e){return i._parseTrackingUpdate(e)}))},e.prototype.getIps=function(e){return this.logger.warn('"domains.getIps" method is deprecated and will be removed in the future releases.'),this.request.get((0,r.default)("/v3/domains",e,"ips")).then((function(e){var t;return null===(t=null==e?void 0:e.body)||void 0===t?void 0:t.items}))},e.prototype.assignIp=function(e,t){return this.logger.warn('"domains.assignIp" method is deprecated and will be removed in the future releases.'),this.request.postWithFD((0,r.default)("/v3/domains",e,"ips"),{ip:t})},e.prototype.deleteIp=function(e,t){return this.logger.warn('"domains.deleteIp" method is deprecated and will be moved into the IpsClient in the future releases.'),this.request.delete((0,r.default)("/v3/domains",e,"ips",t))},e.prototype.linkIpPool=function(e,t){return this.logger.warn('"domains.linkIpPool" method is deprecated, and will be removed in the future releases.'),this.request.postWithFD((0,r.default)("/v3/domains",e,"ips"),{pool_id:t})},e.prototype.unlinkIpPoll=function(e,t){this.logger.warn('"domains.unlinkIpPoll" method is deprecated, and will be moved into the IpsClient in the future releases.');var n="";if(t.pool_id&&t.ip)throw c.default.getUserDataError("Too much data for replacement","Please specify either pool_id or ip (not both)");return t.pool_id?n="?pool_id=".concat(t.pool_id):t.ip&&(n="?ip=".concat(t.ip)),this.request.delete((0,r.default)("/v3/domains",e,"ips","ip_pool",n))},e.prototype.updateDKIMAuthority=function(e,t){return this.request.put("/v3/domains/".concat(e,"/dkim_authority"),{},{query:"self=".concat(t.self)}).then((function(e){return e})).then((function(e){return e.body}))},e.prototype.updateDKIMSelector=function(e,t){var n;return i(this,void 0,void 0,(function(){var a;return o(this,(function(i){switch(i.label){case 0:return[4,this.request.put("/v3/domains/".concat(e,"/dkim_selector"),{},{query:"dkim_selector=".concat(t.dkimSelector)})];case 1:return[2,{status:(a=i.sent()).status,message:null===(n=null==a?void 0:a.body)||void 0===n?void 0:n.message}]}}))}))},e.prototype.updateWebPrefix=function(e,t){return this.logger.warn('"domains.updateWebPrefix" method is deprecated, please use domains.update to set new "web_prefix". Current method will be removed in the future releases.'),this.request.put("/v3/domains/".concat(e,"/web_prefix"),{},{query:"web_prefix=".concat(t.webPrefix)}).then((function(e){return e}))},e}();t.default=u},7585:function(e,t,n){"use strict";var a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=a(n(5469)),o=function(){function e(e){this.request=e,this.baseRoute="/v3/domains/"}return e.prototype._parseDomainCredentialsList=function(e){return{items:e.body.items,totalCount:e.body.total_count}},e.prototype._parseMessageResponse=function(e){return{status:e.status,message:e.body.message}},e.prototype._parseDeletedResponse=function(e){return{status:e.status,message:e.body.message,spec:e.body.spec}},e.prototype.list=function(e,t){var n=this;return this.request.get((0,i.default)(this.baseRoute,e,"/credentials"),t).then((function(e){return n._parseDomainCredentialsList(e)}))},e.prototype.create=function(e,t){var n=this;return this.request.postWithFD("".concat(this.baseRoute).concat(e,"/credentials"),t).then((function(e){return n._parseMessageResponse(e)}))},e.prototype.update=function(e,t,n){var a=this;return this.request.putWithFD("".concat(this.baseRoute).concat(e,"/credentials/").concat(t),n).then((function(e){return a._parseMessageResponse(e)}))},e.prototype.destroy=function(e,t){var n=this;return this.request.delete("".concat(this.baseRoute).concat(e,"/credentials/").concat(t)).then((function(e){return n._parseDeletedResponse(e)}))},e}();t.default=o},1654:function(e,t,n){"use strict";var a,i=this&&this.__extends||(a=function(e,t){return a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},a(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}a(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),o=this&&this.__assign||function(){return o=Object.assign||function(e){for(var t,n=1,a=arguments.length;n<a;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},o.apply(this,arguments)},s=this&&this.__awaiter||function(e,t,n,a){return new(n||(n=Promise))((function(i,o){function s(e){try{c(a.next(e))}catch(e){o(e)}}function r(e){try{c(a.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,r)}c((a=a.apply(e,t||[])).next())}))},r=this&&this.__generator||function(e,t){var n,a,i,o,s={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:r(0),throw:r(1),return:r(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function r(r){return function(c){return function(r){if(n)throw new TypeError("Generator is already executing.");for(;o&&(o=0,r[0]&&(s=0)),s;)try{if(n=1,a&&(i=2&r[0]?a.return:r[0]?a.throw||((i=a.return)&&i.call(a),0):a.next)&&!(i=i.call(a,r[1])).done)return i;switch(a=0,i&&(r=[2&r[0],i.value]),r[0]){case 0:case 1:i=r;break;case 4:return s.label++,{value:r[1],done:!1};case 5:s.label++,a=r[1],r=[0];continue;case 7:r=s.ops.pop(),s.trys.pop();continue;default:if(!(i=s.trys,(i=i.length>0&&i[i.length-1])||6!==r[0]&&2!==r[0])){s=0;continue}if(3===r[0]&&(!i||r[1]>i[0]&&r[1]<i[3])){s.label=r[1];break}if(6===r[0]&&s.label<i[1]){s.label=i[1],i=r;break}if(i&&s.label<i[2]){s.label=i[2],s.ops.push(r);break}i[2]&&s.ops.pop(),s.trys.pop();continue}r=t.call(e,s)}catch(e){r=[6,e],a=0}finally{n=i=0}if(5&r[0])throw r[1];return{value:r[0]?r[1]:void 0,done:!0}}([r,c])}}},c=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.DomainTagStatistic=t.DomainTag=void 0;var p=c(n(5469)),u=c(n(4117)),l=function(e){this.tag=e.tag,this.description=e.description,this["first-seen"]=new Date(e["first-seen"]),this["last-seen"]=new Date(e["last-seen"])};t.DomainTag=l;var d=function(e){this.tag=e.body.tag,this.description=e.body.description,this.start=new Date(e.body.start),this.end=new Date(e.body.end),this.resolution=e.body.resolution,this.stats=e.body.stats.map((function(e){return o(o({},e),{time:new Date(e.time)})}))};t.DomainTagStatistic=d;var m=function(e){function t(t){var n=e.call(this,t)||this;return n.request=t,n.baseRoute="/v3/",n}return i(t,e),t.prototype.parseList=function(e){var t={};return t.items=e.body.items.map((function(e){return new l(e)})),t.pages=this.parsePageLinks(e,"?","tag"),t.status=e.status,t},t.prototype._parseTagStatistic=function(e){return new d(e)},t.prototype.list=function(e,t){return s(this,void 0,void 0,(function(){return r(this,(function(n){return[2,this.requestListWithPages((0,p.default)(this.baseRoute,e,"/tags"),t)]}))}))},t.prototype.get=function(e,t){return this.request.get((0,p.default)(this.baseRoute,e,"/tags",t)).then((function(e){return new l(e.body)}))},t.prototype.update=function(e,t,n){return this.request.put((0,p.default)(this.baseRoute,e,"/tags",t),n).then((function(e){return e.body}))},t.prototype.destroy=function(e,t){return this.request.delete("".concat(this.baseRoute).concat(e,"/tags/").concat(t)).then((function(e){return{message:e.body.message,status:e.status}}))},t.prototype.statistic=function(e,t,n){var a=this;return this.request.get((0,p.default)(this.baseRoute,e,"/tags",t,"stats"),n).then((function(e){return a._parseTagStatistic(e)}))},t.prototype.countries=function(e,t){return this.request.get((0,p.default)(this.baseRoute,e,"/tags",t,"stats/aggregates/countries")).then((function(e){return e.body}))},t.prototype.providers=function(e,t){return this.request.get((0,p.default)(this.baseRoute,e,"/tags",t,"stats/aggregates/providers")).then((function(e){return e.body}))},t.prototype.devices=function(e,t){return this.request.get((0,p.default)(this.baseRoute,e,"/tags",t,"stats/aggregates/devices")).then((function(e){return e.body}))},t}(u.default);t.default=m},536:function(e,t,n){"use strict";var a,i=this&&this.__extends||(a=function(e,t){return a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},a(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}a(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),o=this&&this.__assign||function(){return o=Object.assign||function(e){for(var t,n=1,a=arguments.length;n<a;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},o.apply(this,arguments)},s=this&&this.__awaiter||function(e,t,n,a){return new(n||(n=Promise))((function(i,o){function s(e){try{c(a.next(e))}catch(e){o(e)}}function r(e){try{c(a.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,r)}c((a=a.apply(e,t||[])).next())}))},r=this&&this.__generator||function(e,t){var n,a,i,o,s={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:r(0),throw:r(1),return:r(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function r(r){return function(c){return function(r){if(n)throw new TypeError("Generator is already executing.");for(;o&&(o=0,r[0]&&(s=0)),s;)try{if(n=1,a&&(i=2&r[0]?a.return:r[0]?a.throw||((i=a.return)&&i.call(a),0):a.next)&&!(i=i.call(a,r[1])).done)return i;switch(a=0,i&&(r=[2&r[0],i.value]),r[0]){case 0:case 1:i=r;break;case 4:return s.label++,{value:r[1],done:!1};case 5:s.label++,a=r[1],r=[0];continue;case 7:r=s.ops.pop(),s.trys.pop();continue;default:if(!(i=s.trys,(i=i.length>0&&i[i.length-1])||6!==r[0]&&2!==r[0])){s=0;continue}if(3===r[0]&&(!i||r[1]>i[0]&&r[1]<i[3])){s.label=r[1];break}if(6===r[0]&&s.label<i[1]){s.label=i[1],i=r;break}if(i&&s.label<i[2]){s.label=i[2],s.ops.push(r);break}i[2]&&s.ops.pop(),s.trys.pop();continue}r=t.call(e,s)}catch(e){r=[6,e],a=0}finally{n=i=0}if(5&r[0])throw r[1];return{value:r[0]?r[1]:void 0,done:!0}}([r,c])}}},c=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.DomainTemplateItem=void 0;var p=c(n(5469)),u=c(n(4117)),l=function(e){this.name=e.name,this.description=e.description,this.createdAt=e.createdAt?new Date(e.createdAt):"",this.createdBy=e.createdBy,this.id=e.id,e.version&&(this.version=e.version,e.version.createdAt&&(this.version.createdAt=new Date(e.version.createdAt))),e.versions&&e.versions.length&&(this.versions=e.versions.map((function(e){var t=o({},e);return t.createdAt=new Date(e.createdAt),t})))};t.DomainTemplateItem=l;var d=function(e){function t(t){var n=e.call(this,t)||this;return n.request=t,n.baseRoute="/v3/",n}return i(t,e),t.prototype.parseCreationResponse=function(e){return new l(e.body.template)},t.prototype.parseCreationVersionResponse=function(e){var t={};return t.status=e.status,t.message=e.body.message,e.body&&e.body.template&&(t.template=new l(e.body.template)),t},t.prototype.parseMutationResponse=function(e){var t={};return t.status=e.status,t.message=e.body.message,e.body&&e.body.template&&(t.templateName=e.body.template.name),t},t.prototype.parseNotificationResponse=function(e){var t={};return t.status=e.status,t.message=e.body.message,t},t.prototype.parseMutateTemplateVersionResponse=function(e){var t={};return t.status=e.status,t.message=e.body.message,e.body.template&&(t.templateName=e.body.template.name,t.templateVersion={tag:e.body.template.version.tag}),t},t.prototype.parseList=function(e){var t={};return t.items=e.body.items.map((function(e){return new l(e)})),t.pages=this.parsePageLinks(e,"?","p"),t.status=e.status,t},t.prototype.parseListTemplateVersions=function(e){var t={};return t.template=new l(e.body.template),t.pages=this.parsePageLinks(e,"?","p"),t},t.prototype.list=function(e,t){return s(this,void 0,void 0,(function(){return r(this,(function(n){return[2,this.requestListWithPages((0,p.default)(this.baseRoute,e,"/templates"),t)]}))}))},t.prototype.get=function(e,t,n){return this.request.get((0,p.default)(this.baseRoute,e,"/templates/",t),n).then((function(e){return new l(e.body.template)}))},t.prototype.create=function(e,t){var n=this;return this.request.postWithFD((0,p.default)(this.baseRoute,e,"/templates"),t).then((function(e){return n.parseCreationResponse(e)}))},t.prototype.update=function(e,t,n){var a=this;return this.request.putWithFD((0,p.default)(this.baseRoute,e,"/templates/",t),n).then((function(e){return a.parseMutationResponse(e)}))},t.prototype.destroy=function(e,t){var n=this;return this.request.delete((0,p.default)(this.baseRoute,e,"/templates/",t)).then((function(e){return n.parseMutationResponse(e)}))},t.prototype.destroyAll=function(e){var t=this;return this.request.delete((0,p.default)(this.baseRoute,e,"/templates")).then((function(e){return t.parseNotificationResponse(e)}))},t.prototype.listVersions=function(e,t,n){var a=this;return this.request.get((0,p.default)(this.baseRoute,e,"/templates",t,"/versions"),n).then((function(e){return a.parseListTemplateVersions(e)}))},t.prototype.getVersion=function(e,t,n){return this.request.get((0,p.default)(this.baseRoute,e,"/templates/",t,"/versions/",n)).then((function(e){return new l(e.body.template)}))},t.prototype.createVersion=function(e,t,n){var a=this;return this.request.postWithFD((0,p.default)(this.baseRoute,e,"/templates/",t,"/versions"),n).then((function(e){return a.parseCreationVersionResponse(e)}))},t.prototype.updateVersion=function(e,t,n,a){var i=this;return this.request.putWithFD((0,p.default)(this.baseRoute,e,"/templates/",t,"/versions/",n),a).then((function(e){return i.parseMutateTemplateVersionResponse(e)}))},t.prototype.destroyVersion=function(e,t,n){var a=this;return this.request.delete((0,p.default)(this.baseRoute,e,"/templates/",t,"/versions/",n)).then((function(e){return a.parseMutateTemplateVersionResponse(e)}))},t}(u.default);t.default=d},4235:function(e,t,n){"use strict";var a,i=this&&this.__extends||(a=function(e,t){return a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},a(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}a(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),o=this&&this.__awaiter||function(e,t,n,a){return new(n||(n=Promise))((function(i,o){function s(e){try{c(a.next(e))}catch(e){o(e)}}function r(e){try{c(a.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,r)}c((a=a.apply(e,t||[])).next())}))},s=this&&this.__generator||function(e,t){var n,a,i,o,s={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:r(0),throw:r(1),return:r(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function r(r){return function(c){return function(r){if(n)throw new TypeError("Generator is already executing.");for(;o&&(o=0,r[0]&&(s=0)),s;)try{if(n=1,a&&(i=2&r[0]?a.return:r[0]?a.throw||((i=a.return)&&i.call(a),0):a.next)&&!(i=i.call(a,r[1])).done)return i;switch(a=0,i&&(r=[2&r[0],i.value]),r[0]){case 0:case 1:i=r;break;case 4:return s.label++,{value:r[1],done:!1};case 5:s.label++,a=r[1],r=[0];continue;case 7:r=s.ops.pop(),s.trys.pop();continue;default:if(!(i=s.trys,(i=i.length>0&&i[i.length-1])||6!==r[0]&&2!==r[0])){s=0;continue}if(3===r[0]&&(!i||r[1]>i[0]&&r[1]<i[3])){s.label=r[1];break}if(6===r[0]&&s.label<i[1]){s.label=i[1],i=r;break}if(i&&s.label<i[2]){s.label=i[2],s.ops.push(r);break}i[2]&&s.ops.pop(),s.trys.pop();continue}r=t.call(e,s)}catch(e){r=[6,e],a=0}finally{n=i=0}if(5&r[0])throw r[1];return{value:r[0]?r[1]:void 0,done:!0}}([r,c])}}},r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var c=r(n(5469)),p=function(e){function t(t){var n=e.call(this,t)||this;return n.request=t,n}return i(t,e),t.prototype.parseList=function(e){var t={};return t.items=e.body.items,t.pages=this.parsePageLinks(e,"/"),t.status=e.status,t},t.prototype.get=function(e,t){return o(this,void 0,void 0,(function(){return s(this,(function(n){return[2,this.requestListWithPages((0,c.default)("/v3",e,"events"),t)]}))}))},t}(r(n(4117)).default);t.default=p},9884:function(e,t){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(e){for(var t,n=1,a=arguments.length;n<a;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},n.apply(this,arguments)},a=this&&this.__awaiter||function(e,t,n,a){return new(n||(n=Promise))((function(i,o){function s(e){try{c(a.next(e))}catch(e){o(e)}}function r(e){try{c(a.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,r)}c((a=a.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,a,i,o,s={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:r(0),throw:r(1),return:r(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function r(r){return function(c){return function(r){if(n)throw new TypeError("Generator is already executing.");for(;o&&(o=0,r[0]&&(s=0)),s;)try{if(n=1,a&&(i=2&r[0]?a.return:r[0]?a.throw||((i=a.return)&&i.call(a),0):a.next)&&!(i=i.call(a,r[1])).done)return i;switch(a=0,i&&(r=[2&r[0],i.value]),r[0]){case 0:case 1:i=r;break;case 4:return s.label++,{value:r[1],done:!1};case 5:s.label++,a=r[1],r=[0];continue;case 7:r=s.ops.pop(),s.trys.pop();continue;default:if(!(i=s.trys,(i=i.length>0&&i[i.length-1])||6!==r[0]&&2!==r[0])){s=0;continue}if(3===r[0]&&(!i||r[1]>i[0]&&r[1]<i[3])){s.label=r[1];break}if(6===r[0]&&s.label<i[1]){s.label=i[1],i=r;break}if(i&&s.label<i[2]){s.label=i[2],s.ops.push(r);break}i[2]&&s.ops.pop(),s.trys.pop();continue}r=t.call(e,s)}catch(e){r=[6,e],a=0}finally{n=i=0}if(5&r[0])throw r[1];return{value:r[0]?r[1]:void 0,done:!0}}([r,c])}}};Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e){this.request=e}return e.prototype.list=function(){var e=this;return this.request.get("/v1/ip_pools").then((function(t){return e.parseIpPoolsResponse(t)}))},e.prototype.create=function(e){return a(this,void 0,void 0,(function(){var t;return i(this,(function(a){switch(a.label){case 0:return[4,this.request.postWithFD("/v1/ip_pools",e)];case 1:return t=a.sent(),[2,n({status:t.status},t.body)]}}))}))},e.prototype.update=function(e,t){return a(this,void 0,void 0,(function(){var a;return i(this,(function(i){switch(i.label){case 0:return[4,this.request.patchWithFD("/v1/ip_pools/".concat(e),t)];case 1:return a=i.sent(),[2,n({status:a.status},a.body)]}}))}))},e.prototype.delete=function(e,t){return a(this,void 0,void 0,(function(){var a;return i(this,(function(i){switch(i.label){case 0:return[4,this.request.delete("/v1/ip_pools/".concat(e),t)];case 1:return a=i.sent(),[2,n({status:a.status},a.body)]}}))}))},e.prototype.parseIpPoolsResponse=function(e){return n({status:e.status},e.body)},e}();t.default=o},2542:function(e,t){"use strict";var n=this&&this.__awaiter||function(e,t,n,a){return new(n||(n=Promise))((function(i,o){function s(e){try{c(a.next(e))}catch(e){o(e)}}function r(e){try{c(a.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,r)}c((a=a.apply(e,t||[])).next())}))},a=this&&this.__generator||function(e,t){var n,a,i,o,s={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:r(0),throw:r(1),return:r(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function r(r){return function(c){return function(r){if(n)throw new TypeError("Generator is already executing.");for(;o&&(o=0,r[0]&&(s=0)),s;)try{if(n=1,a&&(i=2&r[0]?a.return:r[0]?a.throw||((i=a.return)&&i.call(a),0):a.next)&&!(i=i.call(a,r[1])).done)return i;switch(a=0,i&&(r=[2&r[0],i.value]),r[0]){case 0:case 1:i=r;break;case 4:return s.label++,{value:r[1],done:!1};case 5:s.label++,a=r[1],r=[0];continue;case 7:r=s.ops.pop(),s.trys.pop();continue;default:if(!(i=s.trys,(i=i.length>0&&i[i.length-1])||6!==r[0]&&2!==r[0])){s=0;continue}if(3===r[0]&&(!i||r[1]>i[0]&&r[1]<i[3])){s.label=r[1];break}if(6===r[0]&&s.label<i[1]){s.label=i[1],i=r;break}if(i&&s.label<i[2]){s.label=i[2],s.ops.push(r);break}i[2]&&s.ops.pop(),s.trys.pop();continue}r=t.call(e,s)}catch(e){r=[6,e],a=0}finally{n=i=0}if(5&r[0])throw r[1];return{value:r[0]?r[1]:void 0,done:!0}}([r,c])}}};Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e){this.request=e}return e.prototype.list=function(e){return n(this,void 0,void 0,(function(){var t;return a(this,(function(n){switch(n.label){case 0:return[4,this.request.get("/v3/ips",e)];case 1:return t=n.sent(),[2,this.parseIpsResponse(t)]}}))}))},e.prototype.get=function(e){return n(this,void 0,void 0,(function(){var t;return a(this,(function(n){switch(n.label){case 0:return[4,this.request.get("/v3/ips/".concat(e))];case 1:return t=n.sent(),[2,this.parseIpsResponse(t)]}}))}))},e.prototype.parseIpsResponse=function(e){return e.body},e}();t.default=i},7145:function(e,t){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(e){for(var t,n=1,a=arguments.length;n<a;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},n.apply(this,arguments)},a=this&&this.__awaiter||function(e,t,n,a){return new(n||(n=Promise))((function(i,o){function s(e){try{c(a.next(e))}catch(e){o(e)}}function r(e){try{c(a.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,r)}c((a=a.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,a,i,o,s={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:r(0),throw:r(1),return:r(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function r(r){return function(c){return function(r){if(n)throw new TypeError("Generator is already executing.");for(;o&&(o=0,r[0]&&(s=0)),s;)try{if(n=1,a&&(i=2&r[0]?a.return:r[0]?a.throw||((i=a.return)&&i.call(a),0):a.next)&&!(i=i.call(a,r[1])).done)return i;switch(a=0,i&&(r=[2&r[0],i.value]),r[0]){case 0:case 1:i=r;break;case 4:return s.label++,{value:r[1],done:!1};case 5:s.label++,a=r[1],r=[0];continue;case 7:r=s.ops.pop(),s.trys.pop();continue;default:if(!(i=s.trys,(i=i.length>0&&i[i.length-1])||6!==r[0]&&2!==r[0])){s=0;continue}if(3===r[0]&&(!i||r[1]>i[0]&&r[1]<i[3])){s.label=r[1];break}if(6===r[0]&&s.label<i[1]){s.label=i[1],i=r;break}if(i&&s.label<i[2]){s.label=i[2],s.ops.push(r);break}i[2]&&s.ops.pop(),s.trys.pop();continue}r=t.call(e,s)}catch(e){r=[6,e],a=0}finally{n=i=0}if(5&r[0])throw r[1];return{value:r[0]?r[1]:void 0,done:!0}}([r,c])}}};Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){this.path=t,this.request=e}return e.prototype.list=function(){return a(this,void 0,void 0,(function(){var e;return i(this,(function(t){switch(t.label){case 0:return[4,this.request.get(this.path)];case 1:return[2,{items:(e=t.sent()).body.items,status:e.status}]}}))}))},e.prototype.get=function(e){return a(this,void 0,void 0,(function(){var t;return i(this,(function(a){switch(a.label){case 0:return[4,this.request.get("".concat(this.path,"/").concat(e))];case 1:return t=a.sent(),[2,n(n({},t.body),{status:t.status})]}}))}))},e}();t.default=o},7439:function(e,t){"use strict";var n=this&&this.__awaiter||function(e,t,n,a){return new(n||(n=Promise))((function(i,o){function s(e){try{c(a.next(e))}catch(e){o(e)}}function r(e){try{c(a.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,r)}c((a=a.apply(e,t||[])).next())}))},a=this&&this.__generator||function(e,t){var n,a,i,o,s={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:r(0),throw:r(1),return:r(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function r(r){return function(c){return function(r){if(n)throw new TypeError("Generator is already executing.");for(;o&&(o=0,r[0]&&(s=0)),s;)try{if(n=1,a&&(i=2&r[0]?a.return:r[0]?a.throw||((i=a.return)&&i.call(a),0):a.next)&&!(i=i.call(a,r[1])).done)return i;switch(a=0,i&&(r=[2&r[0],i.value]),r[0]){case 0:case 1:i=r;break;case 4:return s.label++,{value:r[1],done:!1};case 5:s.label++,a=r[1],r=[0];continue;case 7:r=s.ops.pop(),s.trys.pop();continue;default:if(!(i=s.trys,(i=i.length>0&&i[i.length-1])||6!==r[0]&&2!==r[0])){s=0;continue}if(3===r[0]&&(!i||r[1]>i[0]&&r[1]<i[3])){s.label=r[1];break}if(6===r[0]&&s.label<i[1]){s.label=i[1],i=r;break}if(i&&s.label<i[2]){s.label=i[2],s.ops.push(r);break}i[2]&&s.ops.pop(),s.trys.pop();continue}r=t.call(e,s)}catch(e){r=[6,e],a=0}finally{n=i=0}if(5&r[0])throw r[1];return{value:r[0]?r[1]:void 0,done:!0}}([r,c])}}};Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){this.request=e,this.path=t}return e.prototype.list=function(){return n(this,void 0,void 0,(function(){var e;return a(this,(function(t){switch(t.label){case 0:return[4,this.request.get(this.path)];case 1:return[2,{status:(e=t.sent()).status,supported_filters:e.body.supported_filters}]}}))}))},e}();t.default=i},7773:function(e,t,n){"use strict";var a,i=this&&this.__extends||(a=function(e,t){return a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},a(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}a(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),o=this&&this.__assign||function(){return o=Object.assign||function(e){for(var t,n=1,a=arguments.length;n<a;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},o.apply(this,arguments)},s=this&&this.__awaiter||function(e,t,n,a){return new(n||(n=Promise))((function(i,o){function s(e){try{c(a.next(e))}catch(e){o(e)}}function r(e){try{c(a.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,r)}c((a=a.apply(e,t||[])).next())}))},r=this&&this.__generator||function(e,t){var n,a,i,o,s={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:r(0),throw:r(1),return:r(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function r(r){return function(c){return function(r){if(n)throw new TypeError("Generator is already executing.");for(;o&&(o=0,r[0]&&(s=0)),s;)try{if(n=1,a&&(i=2&r[0]?a.return:r[0]?a.throw||((i=a.return)&&i.call(a),0):a.next)&&!(i=i.call(a,r[1])).done)return i;switch(a=0,i&&(r=[2&r[0],i.value]),r[0]){case 0:case 1:i=r;break;case 4:return s.label++,{value:r[1],done:!1};case 5:s.label++,a=r[1],r=[0];continue;case 7:r=s.ops.pop(),s.trys.pop();continue;default:if(!(i=s.trys,(i=i.length>0&&i[i.length-1])||6!==r[0]&&2!==r[0])){s=0;continue}if(3===r[0]&&(!i||r[1]>i[0]&&r[1]<i[3])){s.label=r[1];break}if(6===r[0]&&s.label<i[1]){s.label=i[1],i=r;break}if(i&&s.label<i[2]){s.label=i[2],s.ops.push(r);break}i[2]&&s.ops.pop(),s.trys.pop();continue}r=t.call(e,s)}catch(e){r=[6,e],a=0}finally{n=i=0}if(5&r[0])throw r[1];return{value:r[0]?r[1]:void 0,done:!0}}([r,c])}}},c=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var p=function(e){function t(t,n,a,i,o){void 0===o&&(o=console);var s=e.call(this,t)||this;return s.request=t,s.attributes=n,s.filters=a,s.sharing=i,s.logger=o,s}return i(t,e),t.prototype.convertDateToUTC=function(e,t){return this.logger.warn('Date: "'.concat(t,'" was auto-converted to UTC time zone.\nValue "').concat(t.toISOString(),'" will be used for request.\nConsider using string type for property "').concat(e,'" to avoid auto-converting')),t.toISOString()},t.prototype.prepareQueryData=function(e){var t=this,n=e,a=Object.keys(n).reduce((function(a,i){var o=i;if(n[o]&&"object"==typeof n[o]){var s=e[o];a[o]=t.convertDateToUTC(o,s)}return a}),{});return o(o({},e),a)},t.prototype.prepareInboxPlacementsResult=function(e){var t={},n={created_at:new Date(e.created_at),updated_at:new Date(e.updated_at),sharing_expires_at:new Date(e.sharing_expires_at)};e.Box&&delete(t=o(o({},e.Box),{created_at:new Date(e.Box.created_at),updated_at:new Date(e.Box.updated_at),last_result_at:new Date(e.Box.last_result_at)})).ID;var a=o(o(o(o({},e),{Box:t}),n),{id:e.Id});return delete a.ID,a},t.prototype.parseList=function(e){var t=this,n={};return n.items=e.body.items.map((function(e){return t.prepareInboxPlacementsResult(e)})),n.pages=this.parsePageLinks(e,"?","address"),n.status=e.status,n},t.prototype.list=function(e){return s(this,void 0,void 0,(function(){var t,n;return r(this,(function(a){switch(a.label){case 0:return t=this.prepareQueryData(e),[4,this.request.get("/v4/inbox/results",t)];case 1:return n=a.sent(),[2,this.parseList(n)]}}))}))},t.prototype.get=function(e){return s(this,void 0,void 0,(function(){var t,n;return r(this,(function(a){switch(a.label){case 0:return[4,this.request.get("/v4/inbox/results/".concat(e))];case 1:return t=a.sent(),n=this.prepareInboxPlacementsResult(t.body.result),[2,{status:t.status,inboxPlacementResult:n}]}}))}))},t.prototype.destroy=function(e){return s(this,void 0,void 0,(function(){var t;return r(this,(function(n){switch(n.label){case 0:return[4,this.request.delete("/v4/inbox/results/".concat(e))];case 1:return t=n.sent(),[2,o({status:t.status},t.body)]}}))}))},t.prototype.getResultByShareId=function(e){return s(this,void 0,void 0,(function(){var t,n;return r(this,(function(a){switch(a.label){case 0:return[4,this.request.get("/v4/inbox/sharing/public/".concat(e))];case 1:return t=a.sent(),n=this.prepareInboxPlacementsResult(t.body.result),[2,{status:t.status,inboxPlacementResult:n}]}}))}))},t}(c(n(4117)).default);t.default=p},4615:function(e,t){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(e){for(var t,n=1,a=arguments.length;n<a;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},n.apply(this,arguments)},a=this&&this.__awaiter||function(e,t,n,a){return new(n||(n=Promise))((function(i,o){function s(e){try{c(a.next(e))}catch(e){o(e)}}function r(e){try{c(a.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,r)}c((a=a.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,a,i,o,s={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:r(0),throw:r(1),return:r(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function r(r){return function(c){return function(r){if(n)throw new TypeError("Generator is already executing.");for(;o&&(o=0,r[0]&&(s=0)),s;)try{if(n=1,a&&(i=2&r[0]?a.return:r[0]?a.throw||((i=a.return)&&i.call(a),0):a.next)&&!(i=i.call(a,r[1])).done)return i;switch(a=0,i&&(r=[2&r[0],i.value]),r[0]){case 0:case 1:i=r;break;case 4:return s.label++,{value:r[1],done:!1};case 5:s.label++,a=r[1],r=[0];continue;case 7:r=s.ops.pop(),s.trys.pop();continue;default:if(!(i=s.trys,(i=i.length>0&&i[i.length-1])||6!==r[0]&&2!==r[0])){s=0;continue}if(3===r[0]&&(!i||r[1]>i[0]&&r[1]<i[3])){s.label=r[1];break}if(6===r[0]&&s.label<i[1]){s.label=i[1],i=r;break}if(i&&s.label<i[2]){s.label=i[2],s.ops.push(r);break}i[2]&&s.ops.pop(),s.trys.pop();continue}r=t.call(e,s)}catch(e){r=[6,e],a=0}finally{n=i=0}if(5&r[0])throw r[1];return{value:r[0]?r[1]:void 0,done:!0}}([r,c])}}};Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e){this.request=e}return e.prototype.prepareInboxPlacementsResultSharing=function(e){var t={expires_at:new Date(e.expires_at)};return n(n({},e),t)},e.prototype.get=function(e){return a(this,void 0,void 0,(function(){var t,a;return i(this,(function(i){switch(i.label){case 0:return[4,this.request.get("/v4/inbox/sharing/".concat(e))];case 1:return t=i.sent(),a=this.prepareInboxPlacementsResultSharing(t.body.sharing),[2,n({status:t.status},a)]}}))}))},e.prototype.update=function(e,t){return a(this,void 0,void 0,(function(){var a,o;return i(this,(function(i){switch(i.label){case 0:return[4,this.request.put("/v4/inbox/sharing/".concat(e),{},{query:"enabled=".concat(t.enabled)})];case 1:return a=i.sent(),o=this.prepareInboxPlacementsResultSharing(a.body.sharing),[2,n(n({},o),{status:a.status})]}}))}))},e}();t.default=o},9915:function(e,t,n){"use strict";var a,i=this&&this.__extends||(a=function(e,t){return a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},a(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}a(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),o=this&&this.__assign||function(){return o=Object.assign||function(e){for(var t,n=1,a=arguments.length;n<a;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},o.apply(this,arguments)},s=this&&this.__awaiter||function(e,t,n,a){return new(n||(n=Promise))((function(i,o){function s(e){try{c(a.next(e))}catch(e){o(e)}}function r(e){try{c(a.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,r)}c((a=a.apply(e,t||[])).next())}))},r=this&&this.__generator||function(e,t){var n,a,i,o,s={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:r(0),throw:r(1),return:r(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function r(r){return function(c){return function(r){if(n)throw new TypeError("Generator is already executing.");for(;o&&(o=0,r[0]&&(s=0)),s;)try{if(n=1,a&&(i=2&r[0]?a.return:r[0]?a.throw||((i=a.return)&&i.call(a),0):a.next)&&!(i=i.call(a,r[1])).done)return i;switch(a=0,i&&(r=[2&r[0],i.value]),r[0]){case 0:case 1:i=r;break;case 4:return s.label++,{value:r[1],done:!1};case 5:s.label++,a=r[1],r=[0];continue;case 7:r=s.ops.pop(),s.trys.pop();continue;default:if(!(i=s.trys,(i=i.length>0&&i[i.length-1])||6!==r[0]&&2!==r[0])){s=0;continue}if(3===r[0]&&(!i||r[1]>i[0]&&r[1]<i[3])){s.label=r[1];break}if(6===r[0]&&s.label<i[1]){s.label=i[1],i=r;break}if(i&&s.label<i[2]){s.label=i[2],s.ops.push(r);break}i[2]&&s.ops.pop(),s.trys.pop();continue}r=t.call(e,s)}catch(e){r=[6,e],a=0}finally{n=i=0}if(5&r[0])throw r[1];return{value:r[0]?r[1]:void 0,done:!0}}([r,c])}}},c=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var p=function(e){function t(t,n,a,i){void 0===i&&(i=console);var o=e.call(this,t)||this;return o.request=t,o.attributes=n,o.filters=a,o.logger=i,o}return i(t,e),t.prototype.convertDateToUTC=function(e,t){return this.logger.warn('Date: "'.concat(t,'" was auto-converted to UTC time zone.\nValue "').concat(t.toISOString(),'" will be used for request.\nConsider using string type for property "').concat(e,'" to avoid auto-converting')),t.toISOString()},t.prototype.prepareQueryData=function(e){var t=this,n=e,a=Object.keys(n).reduce((function(a,i){var o=i;if(n[o]&&"object"==typeof n[o]){var s=e[o];a[o]=t.convertDateToUTC(o,s)}return a}),{});return o(o({},e),a)},t.prototype.prepareResult=function(e){var t=this.prepareSeedList(e.body);return o(o({},t),{status:e.status})},t.prototype.prepareSeedList=function(e){var t,n={created_at:new Date(e.created_at),updated_at:new Date(e.updated_at),last_result_at:new Date(e.last_result_at)};t=e.Seeds?e.Seeds.map((function(e){var t={created_at:new Date(e.created_at),updated_at:new Date(e.updated_at),max_email_count_hit_at:new Date(e.max_email_count_hit_at),last_sent_to_at:new Date(e.last_sent_to_at),last_delivered_at:new Date(e.last_delivered_at)};return o(o({},e),t)})):null;var a=o(o(o({},e),{Seeds:t}),n);return delete a.Id,a},t.prototype.parseList=function(e){var t,n=this,a={items:[]};return a.items=null===(t=e.body.items)||void 0===t?void 0:t.map((function(e){return n.prepareSeedList(e)})),a.pages=this.parsePageLinks(e,"?","address"),a.status=e.status,a},t.prototype.list=function(e){return s(this,void 0,void 0,(function(){var t,n;return r(this,(function(a){switch(a.label){case 0:return t=this.prepareQueryData(e),[4,this.request.get("/v4/inbox/seedlists",t)];case 1:return n=a.sent(),[2,o(o({},this.parseList(n)),{status:200})]}}))}))},t.prototype.get=function(e){return s(this,void 0,void 0,(function(){var t,n;return r(this,(function(a){switch(a.label){case 0:return[4,this.request.get("/v4/inbox/seedlists/".concat(e))];case 1:return t=a.sent(),n=this.prepareSeedList(t.body.seedlist),[2,o(o({},n),{status:t.status})]}}))}))},t.prototype.create=function(e){return s(this,void 0,void 0,(function(){var t;return r(this,(function(n){switch(n.label){case 0:return[4,this.request.postWithFD("/v4/inbox/seedlists",e)];case 1:return t=n.sent(),[2,this.prepareResult(t)]}}))}))},t.prototype.update=function(e,t){return s(this,void 0,void 0,(function(){var n;return r(this,(function(a){switch(a.label){case 0:return[4,this.request.put("/v4/inbox/seedlists/".concat(e),t)];case 1:return n=a.sent(),[2,this.prepareResult(n)]}}))}))},t.prototype.destroy=function(e){return s(this,void 0,void 0,(function(){return r(this,(function(t){return[2,this.request.delete("/v4/inbox/seedlists/".concat(e))]}))}))},t}(c(n(4117)).default);t.default=p},419:function(e,t){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(e){for(var t,n=1,a=arguments.length;n<a;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},n.apply(this,arguments)},a=this&&this.__awaiter||function(e,t,n,a){return new(n||(n=Promise))((function(i,o){function s(e){try{c(a.next(e))}catch(e){o(e)}}function r(e){try{c(a.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,r)}c((a=a.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,a,i,o,s={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:r(0),throw:r(1),return:r(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function r(r){return function(c){return function(r){if(n)throw new TypeError("Generator is already executing.");for(;o&&(o=0,r[0]&&(s=0)),s;)try{if(n=1,a&&(i=2&r[0]?a.return:r[0]?a.throw||((i=a.return)&&i.call(a),0):a.next)&&!(i=i.call(a,r[1])).done)return i;switch(a=0,i&&(r=[2&r[0],i.value]),r[0]){case 0:case 1:i=r;break;case 4:return s.label++,{value:r[1],done:!1};case 5:s.label++,a=r[1],r=[0];continue;case 7:r=s.ops.pop(),s.trys.pop();continue;default:if(!(i=s.trys,(i=i.length>0&&i[i.length-1])||6!==r[0]&&2!==r[0])){s=0;continue}if(3===r[0]&&(!i||r[1]>i[0]&&r[1]<i[3])){s.label=r[1];break}if(6===r[0]&&s.label<i[1]){s.label=i[1],i=r;break}if(i&&s.label<i[2]){s.label=i[2],s.ops.push(r);break}i[2]&&s.ops.pop(),s.trys.pop();continue}r=t.call(e,s)}catch(e){r=[6,e],a=0}finally{n=i=0}if(5&r[0])throw r[1];return{value:r[0]?r[1]:void 0,done:!0}}([r,c])}}};Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t,n,a){this.request=e,this.seedsLists=t,this.seedsLists=t,this.results=n,this.providers=a}return e.prototype.runTest=function(e){return a(this,void 0,void 0,(function(){var t;return i(this,(function(a){switch(a.label){case 0:return[4,this.request.post("/v4/inbox/tests",e)];case 1:return t=a.sent(),[2,n(n({},t.body),{status:t.status})]}}))}))},e}();t.default=o},4022:function(e,t){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(e){for(var t,n=1,a=arguments.length;n<a;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},n.apply(this,arguments)},a=this&&this.__awaiter||function(e,t,n,a){return new(n||(n=Promise))((function(i,o){function s(e){try{c(a.next(e))}catch(e){o(e)}}function r(e){try{c(a.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,r)}c((a=a.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,a,i,o,s={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:r(0),throw:r(1),return:r(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function r(r){return function(c){return function(r){if(n)throw new TypeError("Generator is already executing.");for(;o&&(o=0,r[0]&&(s=0)),s;)try{if(n=1,a&&(i=2&r[0]?a.return:r[0]?a.throw||((i=a.return)&&i.call(a),0):a.next)&&!(i=i.call(a,r[1])).done)return i;switch(a=0,i&&(r=[2&r[0],i.value]),r[0]){case 0:case 1:i=r;break;case 4:return s.label++,{value:r[1],done:!1};case 5:s.label++,a=r[1],r=[0];continue;case 7:r=s.ops.pop(),s.trys.pop();continue;default:if(!(i=s.trys,(i=i.length>0&&i[i.length-1])||6!==r[0]&&2!==r[0])){s=0;continue}if(3===r[0]&&(!i||r[1]>i[0]&&r[1]<i[3])){s.label=r[1];break}if(6===r[0]&&s.label<i[1]){s.label=i[1],i=r;break}if(i&&s.label<i[2]){s.label=i[2],s.ops.push(r);break}i[2]&&s.ops.pop(),s.trys.pop();continue}r=t.call(e,s)}catch(e){r=[6,e],a=0}finally{n=i=0}if(5&r[0])throw r[1];return{value:r[0]?r[1]:void 0,done:!0}}([r,c])}}};Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e){this.path="/v4/inbox/providers",this.request=e}return e.prototype.parseList=function(e){var t={};return t.items=e.body.items.map((function(e){var t={created_at:new Date(e.created_at),updated_at:new Date(e.updated_at)};return n(n({},e),t)})),t.status=e.status,t},e.prototype.list=function(){return a(this,void 0,void 0,(function(){var e;return i(this,(function(t){switch(t.label){case 0:return[4,this.request.get(this.path)];case 1:return e=t.sent(),[2,this.parseList(e)]}}))}))},e}();t.default=o},5488:function(e,t,n){"use strict";var a=this&&this.__assign||function(){return a=Object.assign||function(e){for(var t,n=1,a=arguments.length;n<a;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},a.apply(this,arguments)},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=i(n(6685)),s=i(n(5612)),r=i(n(4235)),c=i(n(2344)),p=i(n(3218)),u=i(n(6368)),l=i(n(5510)),d=i(n(2052)),m=i(n(1045)),f=i(n(2542)),h=i(n(9884)),v=i(n(4285)),b=i(n(2185)),x=i(n(7585)),y=i(n(1948)),g=i(n(536)),_=i(n(1654)),w=i(n(5902)),j=i(n(9915)),O=i(n(419)),k=i(n(7773)),P=i(n(7145)),S=i(n(7439)),R=i(n(4615)),E=i(n(4022)),T=i(n(4428)),C=function(){function e(e,t){var n=a({},e);if(n.url||(n.url="https://api.mailgun.net"),!n.username)throw new Error('Parameter "username" is required');if(!n.key)throw new Error('Parameter "key" is required');this.request=new o.default(n,t);var i=new b.default(this.request),C=new x.default(this.request),q=new g.default(this.request),D=new _.default(this.request),M=new y.default(this.request),A=new R.default(this.request),F=new P.default(this.request,"/v4/inbox/seedlists/a"),B=new P.default(this.request,"/v4/inbox/results/a"),L=new S.default(this.request,"/v4/inbox/seedlists/_filters"),z=new S.default(this.request,"/v4/inbox/results/_filters"),U=new j.default(this.request,F,L),N=new k.default(this.request,B,z,A),I=new E.default(this.request);this.domains=new s.default(this.request,C,q,D),this.webhooks=new u.default(this.request),this.events=new r.default(this.request),this.stats=new c.default(this.request),this.metrics=new T.default(this.request),this.suppressions=new p.default(this.request),this.messages=new l.default(this.request),this.routes=new d.default(this.request),this.ips=new f.default(this.request),this.ip_pools=new h.default(this.request),this.lists=new v.default(this.request,i),this.validate=new m.default(this.request,M),this.subaccounts=new w.default(this.request),this.inboxPlacements=new O.default(this.request,U,N,I)}return e.prototype.setSubaccount=function(e){var t;null===(t=this.request)||void 0===t||t.setSubaccountHeader(e)},e.prototype.resetSubaccount=function(){var e;null===(e=this.request)||void 0===e||e.resetSubaccountHeader()},e}();t.default=C},2185:function(e,t,n){"use strict";var a,i=this&&this.__extends||(a=function(e,t){return a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},a(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}a(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),o=this&&this.__assign||function(){return o=Object.assign||function(e){for(var t,n=1,a=arguments.length;n<a;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},o.apply(this,arguments)},s=this&&this.__awaiter||function(e,t,n,a){return new(n||(n=Promise))((function(i,o){function s(e){try{c(a.next(e))}catch(e){o(e)}}function r(e){try{c(a.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,r)}c((a=a.apply(e,t||[])).next())}))},r=this&&this.__generator||function(e,t){var n,a,i,o,s={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:r(0),throw:r(1),return:r(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function r(r){return function(c){return function(r){if(n)throw new TypeError("Generator is already executing.");for(;o&&(o=0,r[0]&&(s=0)),s;)try{if(n=1,a&&(i=2&r[0]?a.return:r[0]?a.throw||((i=a.return)&&i.call(a),0):a.next)&&!(i=i.call(a,r[1])).done)return i;switch(a=0,i&&(r=[2&r[0],i.value]),r[0]){case 0:case 1:i=r;break;case 4:return s.label++,{value:r[1],done:!1};case 5:s.label++,a=r[1],r=[0];continue;case 7:r=s.ops.pop(),s.trys.pop();continue;default:if(!(i=s.trys,(i=i.length>0&&i[i.length-1])||6!==r[0]&&2!==r[0])){s=0;continue}if(3===r[0]&&(!i||r[1]>i[0]&&r[1]<i[3])){s.label=r[1];break}if(6===r[0]&&s.label<i[1]){s.label=i[1],i=r;break}if(i&&s.label<i[2]){s.label=i[2],s.ops.push(r);break}i[2]&&s.ops.pop(),s.trys.pop();continue}r=t.call(e,s)}catch(e){r=[6,e],a=0}finally{n=i=0}if(5&r[0])throw r[1];return{value:r[0]?r[1]:void 0,done:!0}}([r,c])}}},c=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var p=function(e){function t(t){var n=e.call(this,t)||this;return n.request=t,n.baseRoute="/v3/lists",n}return i(t,e),t.prototype.checkAndUpdateData=function(e){var t=o({},e);return"object"==typeof e.vars&&(t.vars=JSON.stringify(t.vars)),"boolean"==typeof e.subscribed&&(t.subscribed=e.subscribed?"yes":"no"),t},t.prototype.parseList=function(e){var t={};return t.items=e.body.items,t.pages=this.parsePageLinks(e,"?","address"),t},t.prototype.listMembers=function(e,t){return s(this,void 0,void 0,(function(){return r(this,(function(n){return[2,this.requestListWithPages("".concat(this.baseRoute,"/").concat(e,"/members/pages"),t)]}))}))},t.prototype.getMember=function(e,t){return this.request.get("".concat(this.baseRoute,"/").concat(e,"/members/").concat(t)).then((function(e){return e.body.member}))},t.prototype.createMember=function(e,t){var n=this.checkAndUpdateData(t);return this.request.postWithFD("".concat(this.baseRoute,"/").concat(e,"/members"),n).then((function(e){return e.body.member}))},t.prototype.createMembers=function(e,t){var n={members:Array.isArray(t.members)?JSON.stringify(t.members):t.members,upsert:t.upsert};return this.request.postWithFD("".concat(this.baseRoute,"/").concat(e,"/members.json"),n).then((function(e){return e.body}))},t.prototype.updateMember=function(e,t,n){var a=this.checkAndUpdateData(n);return this.request.putWithFD("".concat(this.baseRoute,"/").concat(e,"/members/").concat(t),a).then((function(e){return e.body.member}))},t.prototype.destroyMember=function(e,t){return this.request.delete("".concat(this.baseRoute,"/").concat(e,"/members/").concat(t)).then((function(e){return e.body}))},t}(c(n(4117)).default);t.default=p},4285:function(e,t,n){"use strict";var a,i=this&&this.__extends||(a=function(e,t){return a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},a(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}a(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),o=this&&this.__assign||function(){return o=Object.assign||function(e){for(var t,n=1,a=arguments.length;n<a;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},o.apply(this,arguments)},s=this&&this.__awaiter||function(e,t,n,a){return new(n||(n=Promise))((function(i,o){function s(e){try{c(a.next(e))}catch(e){o(e)}}function r(e){try{c(a.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,r)}c((a=a.apply(e,t||[])).next())}))},r=this&&this.__generator||function(e,t){var n,a,i,o,s={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:r(0),throw:r(1),return:r(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function r(r){return function(c){return function(r){if(n)throw new TypeError("Generator is already executing.");for(;o&&(o=0,r[0]&&(s=0)),s;)try{if(n=1,a&&(i=2&r[0]?a.return:r[0]?a.throw||((i=a.return)&&i.call(a),0):a.next)&&!(i=i.call(a,r[1])).done)return i;switch(a=0,i&&(r=[2&r[0],i.value]),r[0]){case 0:case 1:i=r;break;case 4:return s.label++,{value:r[1],done:!1};case 5:s.label++,a=r[1],r=[0];continue;case 7:r=s.ops.pop(),s.trys.pop();continue;default:if(!(i=s.trys,(i=i.length>0&&i[i.length-1])||6!==r[0]&&2!==r[0])){s=0;continue}if(3===r[0]&&(!i||r[1]>i[0]&&r[1]<i[3])){s.label=r[1];break}if(6===r[0]&&s.label<i[1]){s.label=i[1],i=r;break}if(i&&s.label<i[2]){s.label=i[2],s.ops.push(r);break}i[2]&&s.ops.pop(),s.trys.pop();continue}r=t.call(e,s)}catch(e){r=[6,e],a=0}finally{n=i=0}if(5&r[0])throw r[1];return{value:r[0]?r[1]:void 0,done:!0}}([r,c])}}},c=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var p=function(e){function t(t,n){var a=e.call(this,t)||this;return a.request=t,a.baseRoute="/v3/lists",a.members=n,a}return i(t,e),t.prototype.parseValidationResult=function(e,t){return{status:e,validationResult:o(o({},t),{created_at:new Date(1e3*t.created_at)})}},t.prototype.parseList=function(e){var t={};return t.items=e.body.items,t.pages=this.parsePageLinks(e,"?","address"),t.status=e.status,t},t.prototype.list=function(e){return s(this,void 0,void 0,(function(){return r(this,(function(t){return[2,this.requestListWithPages("".concat(this.baseRoute,"/pages"),e)]}))}))},t.prototype.get=function(e){return this.request.get("".concat(this.baseRoute,"/").concat(e)).then((function(e){return e.body.list}))},t.prototype.create=function(e){return this.request.postWithFD(this.baseRoute,e).then((function(e){return e.body.list}))},t.prototype.update=function(e,t){return this.request.putWithFD("".concat(this.baseRoute,"/").concat(e),t).then((function(e){return e.body.list}))},t.prototype.destroy=function(e){return this.request.delete("".concat(this.baseRoute,"/").concat(e)).then((function(e){return e.body}))},t.prototype.validate=function(e){return this.request.post("".concat(this.baseRoute,"/").concat(e,"/validate"),{}).then((function(e){return o({status:e.status},e.body)}))},t.prototype.validationResult=function(e){var t=this;return this.request.get("".concat(this.baseRoute,"/").concat(e,"/validate")).then((function(e){return t.parseValidationResult(e.status,e.body)}))},t.prototype.cancelValidation=function(e){return this.request.delete("".concat(this.baseRoute,"/").concat(e,"/validate")).then((function(e){return{status:e.status,message:e.body.message}}))},t}(c(n(4117)).default);t.default=p},5510:function(e,t,n){"use strict";var a=this&&this.__assign||function(){return a=Object.assign||function(e){for(var t,n=1,a=arguments.length;n<a;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},a.apply(this,arguments)},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=i(n(9538)),s=function(){function e(e){this.request=e}return e.prototype.prepareBooleanValues=function(e){var t=new Set(["o:testmode","t:text","o:dkim","o:tracking","o:tracking-clicks","o:tracking-opens","o:require-tls","o:skip-verification"]);if(!e||0===Object.keys(e).length)throw o.default.getUserDataError("Message data object can not be empty","Message data object can not be empty");return Object.keys(e).reduce((function(n,a){return t.has(a)&&"boolean"==typeof e[a]?n[a]=e[a]?"yes":"no":n[a]=e[a],n}),{})},e.prototype._parseResponse=function(e){return a({status:e.status},e.body)},e.prototype.create=function(e,t){if(t.message)return this.request.postWithFD("/v3/".concat(e,"/messages.mime"),t).then(this._parseResponse);var n=this.prepareBooleanValues(t);return this.request.postWithFD("/v3/".concat(e,"/messages"),n).then(this._parseResponse)},e}();t.default=s},4428:function(e,t){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(e){for(var t,n=1,a=arguments.length;n<a;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},n.apply(this,arguments)},a=this&&this.__awaiter||function(e,t,n,a){return new(n||(n=Promise))((function(i,o){function s(e){try{c(a.next(e))}catch(e){o(e)}}function r(e){try{c(a.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,r)}c((a=a.apply(e,t||[])).next())}))},i=this&&this.__generator||function(e,t){var n,a,i,o,s={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:r(0),throw:r(1),return:r(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function r(r){return function(c){return function(r){if(n)throw new TypeError("Generator is already executing.");for(;o&&(o=0,r[0]&&(s=0)),s;)try{if(n=1,a&&(i=2&r[0]?a.return:r[0]?a.throw||((i=a.return)&&i.call(a),0):a.next)&&!(i=i.call(a,r[1])).done)return i;switch(a=0,i&&(r=[2&r[0],i.value]),r[0]){case 0:case 1:i=r;break;case 4:return s.label++,{value:r[1],done:!1};case 5:s.label++,a=r[1],r=[0];continue;case 7:r=s.ops.pop(),s.trys.pop();continue;default:if(!(i=s.trys,(i=i.length>0&&i[i.length-1])||6!==r[0]&&2!==r[0])){s=0;continue}if(3===r[0]&&(!i||r[1]>i[0]&&r[1]<i[3])){s.label=r[1];break}if(6===r[0]&&s.label<i[1]){s.label=i[1],i=r;break}if(i&&s.label<i[2]){s.label=i[2],s.ops.push(r);break}i[2]&&s.ops.pop(),s.trys.pop();continue}r=t.call(e,s)}catch(e){r=[6,e],a=0}finally{n=i=0}if(5&r[0])throw r[1];return{value:r[0]?r[1]:void 0,done:!0}}([r,c])}}};Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){void 0===t&&(t=console),this.request=e,this.logger=t}return e.prototype.convertDateToUTC=function(e,t){return this.logger.warn('Date:"'.concat(t,'" was auto-converted to UTC time zone.\nValue "').concat(t.toUTCString(),'" will be used for request.\nConsider using string type for property "').concat(e,'" to avoid auto-converting')),t.toUTCString()},e.prototype.prepareQuery=function(e){var t,a;if(e){var i=null==e?void 0:e.start,o=null==e?void 0:e.end;t=i instanceof Date?this.convertDateToUTC("start",i):null!=i?i:"",a=o&&o instanceof Date?this.convertDateToUTC("end",o):null!=o?o:""}return n(n({},e),{start:t,end:a})},e.prototype.handleResponse=function(e){var t=e.body,a=Date.parse(t.start)?new Date(t.start):null,i=Date.parse(t.end)?new Date(t.end):null;return n(n({},t),{status:e.status,start:a,end:i})},e.prototype.getAccount=function(e){return a(this,void 0,void 0,(function(){var t,n;return i(this,(function(a){switch(a.label){case 0:return t=this.prepareQuery(e),[4,this.request.post("/v1/analytics/metrics",t)];case 1:return n=a.sent(),[2,this.handleResponse(n)]}}))}))},e.prototype.getAccountUsage=function(e){return a(this,void 0,void 0,(function(){var t,n;return i(this,(function(a){switch(a.label){case 0:return t=this.prepareQuery(e),[4,this.request.post("/v1/analytics/usage/metrics",t)];case 1:return n=a.sent(),[2,this.handleResponse(n)]}}))}))},e}();t.default=o},2052:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e){this.request=e}return e.prototype.list=function(e){return this.request.get("/v3/routes",e).then((function(e){return e.body.items}))},e.prototype.get=function(e){return this.request.get("/v3/routes/".concat(e)).then((function(e){return e.body.route}))},e.prototype.create=function(e){return this.request.postWithFD("/v3/routes",e).then((function(e){return e.body.route}))},e.prototype.update=function(e,t){return this.request.putWithFD("/v3/routes/".concat(e),t).then((function(e){return e.body}))},e.prototype.destroy=function(e){return this.request.delete("/v3/routes/".concat(e)).then((function(e){return e.body}))},e}();t.default=n},2344:function(e,t,n){"use strict";var a=this&&this.__spreadArray||function(e,t,n){if(n||2===arguments.length)for(var a,i=0,o=t.length;i<o;i++)!a&&i in t||(a||(a=Array.prototype.slice.call(t,0,i)),a[i]=t[i]);return e.concat(a||Array.prototype.slice.call(t))},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=i(n(5469)),s=i(n(4552)),r=function(){function e(e,t){void 0===t&&(t=console),this.request=e,this.logger=t}return e.prototype.convertDateToUTC=function(e,t){return this.logger.warn('Date:"'.concat(t,'" was auto-converted to UTC time zone.\nValue "').concat(t.toUTCString(),'" will be used for request.\nConsider using string type for property "').concat(e,'" to avoid auto-converting')),[e,t.toUTCString()]},e.prototype.prepareSearchParams=function(e){var t=this,n=[];return"object"==typeof e&&Object.keys(e).length&&(n=Object.entries(e).reduce((function(e,n){var i=n[0],o=n[1];if(Array.isArray(o)&&o.length){var s=o.map((function(e){return[i,e]}));return a(a([],e,!0),s,!0)}return o instanceof Date?(e.push(t.convertDateToUTC(i,o)),e):("string"==typeof o&&e.push([i,o]),e)}),[])),n},e.prototype.parseStats=function(e){return new s.default(e.body)},e.prototype.getDomain=function(e,t){var n=this.prepareSearchParams(t);return this.request.get((0,o.default)("/v3",e,"stats/total"),n).then(this.parseStats)},e.prototype.getAccount=function(e){var t=this.prepareSearchParams(e);return this.request.get("/v3/stats/total",t).then(this.parseStats)},e}();t.default=r},4552:function(e,t){"use strict";var n=this&&this.__assign||function(){return n=Object.assign||function(e){for(var t,n=1,a=arguments.length;n<a;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},n.apply(this,arguments)};Object.defineProperty(t,"__esModule",{value:!0});var a=function(e){this.start=new Date(e.start),this.end=new Date(e.end),this.resolution=e.resolution,this.stats=e.stats.map((function(e){var t=n({},e);return t.time=new Date(e.time),t}))};t.default=a},5902:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e){this.request=e}return e.prototype.list=function(e){return this.request.get("/v5/accounts/subaccounts",e).then((function(e){return e.body}))},e.prototype.get=function(e){return this.request.get("/v5/accounts/subaccounts/".concat(e)).then((function(e){return e.body}))},e.prototype.create=function(e){return this.request.postWithFD("/v5/accounts/subaccounts",{name:e}).then((function(e){return e.body}))},e.prototype.enable=function(e){return this.request.post("/v5/accounts/subaccounts/".concat(e,"/enable")).then((function(e){return e.body}))},e.prototype.disable=function(e){return this.request.post("/v5/accounts/subaccounts/".concat(e,"/disable")).then((function(e){return e.body}))},e.SUBACCOUNT_HEADER="X-Mailgun-On-Behalf-Of",e}();t.default=n},7897:function(e,t,n){"use strict";var a,i=this&&this.__extends||(a=function(e,t){return a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},a(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}a(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var s=n(9146),r=function(e){function t(t){var n=e.call(this,s.SuppressionModels.BOUNCES)||this;return n.address=t.address,n.code=+t.code,n.error=t.error,n.created_at=new Date(t.created_at),n}return i(t,e),t}(o(n(2398)).default);t.default=r},952:function(e,t,n){"use strict";var a,i=this&&this.__extends||(a=function(e,t){return a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},a(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}a(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var s=n(9146),r=function(e){function t(t){var n=e.call(this,s.SuppressionModels.COMPLAINTS)||this;return n.address=t.address,n.created_at=new Date(t.created_at),n}return i(t,e),t}(o(n(2398)).default);t.default=r},2398:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(e){this.type=e};t.default=n},3218:function(e,t,n){"use strict";var a,i=this&&this.__extends||(a=function(e,t){return a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},a(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}a(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),o=this&&this.__awaiter||function(e,t,n,a){return new(n||(n=Promise))((function(i,o){function s(e){try{c(a.next(e))}catch(e){o(e)}}function r(e){try{c(a.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,r)}c((a=a.apply(e,t||[])).next())}))},s=this&&this.__generator||function(e,t){var n,a,i,o,s={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:r(0),throw:r(1),return:r(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function r(r){return function(c){return function(r){if(n)throw new TypeError("Generator is already executing.");for(;o&&(o=0,r[0]&&(s=0)),s;)try{if(n=1,a&&(i=2&r[0]?a.return:r[0]?a.throw||((i=a.return)&&i.call(a),0):a.next)&&!(i=i.call(a,r[1])).done)return i;switch(a=0,i&&(r=[2&r[0],i.value]),r[0]){case 0:case 1:i=r;break;case 4:return s.label++,{value:r[1],done:!1};case 5:s.label++,a=r[1],r=[0];continue;case 7:r=s.ops.pop(),s.trys.pop();continue;default:if(!(i=s.trys,(i=i.length>0&&i[i.length-1])||6!==r[0]&&2!==r[0])){s=0;continue}if(3===r[0]&&(!i||r[1]>i[0]&&r[1]<i[3])){s.label=r[1];break}if(6===r[0]&&s.label<i[1]){s.label=i[1],i=r;break}if(i&&s.label<i[2]){s.label=i[2],s.ops.push(r);break}i[2]&&s.ops.pop(),s.trys.pop();continue}r=t.call(e,s)}catch(e){r=[6,e],a=0}finally{n=i=0}if(5&r[0])throw r[1];return{value:r[0]?r[1]:void 0,done:!0}}([r,c])}}},r=this&&this.__spreadArray||function(e,t,n){if(n||2===arguments.length)for(var a,i=0,o=t.length;i<o;i++)!a&&i in t||(a||(a=Array.prototype.slice.call(t,0,i)),a[i]=t[i]);return e.concat(a||Array.prototype.slice.call(t))},c=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var p=c(n(5469)),u=c(n(9538)),l=c(n(4117)),d=c(n(7897)),m=c(n(952)),f=c(n(740)),h=c(n(9520)),v={headers:{"Content-Type":"application/json"}},b=function(e){function t(t){var n=e.call(this,t)||this;return n.request=t,n.models={bounces:d.default,complaints:m.default,unsubscribes:f.default,whitelists:h.default},n}return i(t,e),t.prototype.parseList=function(e,t){var n,a={};return a.items=(null===(n=e.body.items)||void 0===n?void 0:n.map((function(e){return new t(e)})))||[],a.pages=this.parsePageLinks(e,"?","address"),a.status=e.status,a},t.prototype._parseItem=function(e,t){return new t(e)},t.prototype.createWhiteList=function(e,t,n){if(n)throw u.default.getUserDataError("Data property should be an object","Whitelist's creation process does not support multiple creations. Data property should be an object");return this.request.postWithFD((0,p.default)("v3",e,"whitelists"),t).then(this.prepareResponse)},t.prototype.createUnsubscribe=function(e,t){if(Array.isArray(t)){if(t.some((function(e){return e.tag})))throw u.default.getUserDataError("Tag property should not be used for creating multiple unsubscribes.","Tag property can be used only if one unsubscribe provided as second argument of create method. Please use tags instead.");return this.request.post((0,p.default)("v3",e,"unsubscribes"),JSON.stringify(t),v).then(this.prepareResponse)}if(null==t?void 0:t.tags)throw u.default.getUserDataError("Tags property should not be used for creating one unsubscribe.","Tags property can be used if you provides an array of unsubscribes as second argument of create method. Please use tag instead");if(Array.isArray(t.tag))throw u.default.getUserDataError("Tag property can not be an array","Please use array of unsubscribes as second argument of create method to be able to provide few tags");return this.request.postWithFD((0,p.default)("v3",e,"unsubscribes"),t).then(this.prepareResponse)},t.prototype.getModel=function(e){if(e in this.models)return this.models[e];throw u.default.getUserDataError("Unknown type value","Type may be only one of [bounces, complaints, unsubscribes, whitelists]")},t.prototype.prepareResponse=function(e){return{message:e.body.message,type:e.body.type||"",value:e.body.value||"",status:e.status}},t.prototype.list=function(e,t,n){return o(this,void 0,void 0,(function(){var a;return s(this,(function(i){return a=this.getModel(t),[2,this.requestListWithPages((0,p.default)("v3",e,t),n,a)]}))}))},t.prototype.get=function(e,t,n){var a=this,i=this.getModel(t);return this.request.get((0,p.default)("v3",e,t,encodeURIComponent(n))).then((function(e){return a._parseItem(e.body,i)}))},t.prototype.create=function(e,t,n){var a;this.getModel(t);var i=Array.isArray(n);return"whitelists"===t?this.createWhiteList(e,n,i):"unsubscribes"===t?this.createUnsubscribe(e,n):(a=i?r([],n,!0):[n],this.request.post((0,p.default)("v3",e,t),JSON.stringify(a),v).then(this.prepareResponse))},t.prototype.destroy=function(e,t,n){return this.getModel(t),this.request.delete((0,p.default)("v3",e,t,encodeURIComponent(n))).then((function(e){return{message:e.body.message,value:e.body.value||"",address:e.body.address||"",status:e.status}}))},t}(l.default);t.default=b,e.exports=b},740:function(e,t,n){"use strict";var a,i=this&&this.__extends||(a=function(e,t){return a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},a(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}a(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var s=n(9146),r=function(e){function t(t){var n=e.call(this,s.SuppressionModels.UNSUBSCRIBES)||this;return n.address=t.address,n.tags=t.tags,n.created_at=new Date(t.created_at),n}return i(t,e),t}(o(n(2398)).default);t.default=r},9520:function(e,t,n){"use strict";var a,i=this&&this.__extends||(a=function(e,t){return a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},a(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}a(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var s=n(9146),r=function(e){function t(t){var n=e.call(this,s.SuppressionModels.WHITELISTS)||this;return n.value=t.value,n.reason=t.reason,n.createdAt=new Date(t.createdAt),n}return i(t,e),t}(o(n(2398)).default);t.default=r},1948:function(e,t,n){"use strict";var a,i=this&&this.__extends||(a=function(e,t){return a=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},a(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}a(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),o=this&&this.__assign||function(){return o=Object.assign||function(e){for(var t,n=1,a=arguments.length;n<a;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},o.apply(this,arguments)},s=this&&this.__awaiter||function(e,t,n,a){return new(n||(n=Promise))((function(i,o){function s(e){try{c(a.next(e))}catch(e){o(e)}}function r(e){try{c(a.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,r)}c((a=a.apply(e,t||[])).next())}))},r=this&&this.__generator||function(e,t){var n,a,i,o,s={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:r(0),throw:r(1),return:r(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function r(r){return function(c){return function(r){if(n)throw new TypeError("Generator is already executing.");for(;o&&(o=0,r[0]&&(s=0)),s;)try{if(n=1,a&&(i=2&r[0]?a.return:r[0]?a.throw||((i=a.return)&&i.call(a),0):a.next)&&!(i=i.call(a,r[1])).done)return i;switch(a=0,i&&(r=[2&r[0],i.value]),r[0]){case 0:case 1:i=r;break;case 4:return s.label++,{value:r[1],done:!1};case 5:s.label++,a=r[1],r=[0];continue;case 7:r=s.ops.pop(),s.trys.pop();continue;default:if(!(i=s.trys,(i=i.length>0&&i[i.length-1])||6!==r[0]&&2!==r[0])){s=0;continue}if(3===r[0]&&(!i||r[1]>i[0]&&r[1]<i[3])){s.label=r[1];break}if(6===r[0]&&s.label<i[1]){s.label=i[1],i=r;break}if(i&&s.label<i[2]){s.label=i[2],s.ops.push(r);break}i[2]&&s.ops.pop(),s.trys.pop();continue}r=t.call(e,s)}catch(e){r=[6,e],a=0}finally{n=i=0}if(5&r[0])throw r[1];return{value:r[0]?r[1]:void 0,done:!0}}([r,c])}}},c=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.MultipleValidationJob=void 0;var p=c(n(4117)),u=c(n(8968)),l=c(n(9538)),d=function(e,t){var n,a;this.createdAt=new Date(e.created_at),this.id=e.id,this.quantity=e.quantity,this.recordsProcessed=e.records_processed,this.status=e.status,this.responseStatusCode=t,e.download_url&&(this.downloadUrl={csv:null===(n=e.download_url)||void 0===n?void 0:n.csv,json:null===(a=e.download_url)||void 0===a?void 0:a.json}),e.summary&&(this.summary={result:{catchAll:e.summary.result.catch_all,deliverable:e.summary.result.deliverable,doNotSend:e.summary.result.do_not_send,undeliverable:e.summary.result.undeliverable,unknown:e.summary.result.unknown},risk:{high:e.summary.risk.high,low:e.summary.risk.low,medium:e.summary.risk.medium,unknown:e.summary.risk.unknown}})};t.MultipleValidationJob=d;var m=function(e){function t(t){var n=e.call(this)||this;return n.request=t,n.attachmentsHandler=new u.default,n}return i(t,e),t.prototype.handleResponse=function(e){return o({status:e.status},null==e?void 0:e.body)},t.prototype.parseList=function(e){var t={};return t.jobs=e.body.jobs.map((function(t){return new d(t,e.status)})),t.pages=this.parsePageLinks(e,"?","pivot"),t.total=e.body.total,t.status=e.status,t},t.prototype.list=function(e){return s(this,void 0,void 0,(function(){return r(this,(function(t){return[2,this.requestListWithPages("/v4/address/validate/bulk",e)]}))}))},t.prototype.get=function(e){return s(this,void 0,void 0,(function(){var t;return r(this,(function(n){switch(n.label){case 0:return[4,this.request.get("/v4/address/validate/bulk/".concat(e))];case 1:return t=n.sent(),[2,new d(t.body,t.status)]}}))}))},t.prototype.convertToExpectedShape=function(e){return this.attachmentsHandler.isBuffer(e.file)?{multipleValidationFile:e.file}:"string"==typeof e.file?{multipleValidationFile:{data:e.file}}:(this.attachmentsHandler.isStream(e.file),{multipleValidationFile:e.file})},t.prototype.create=function(e,t){return s(this,void 0,void 0,(function(){var n,a;return r(this,(function(i){switch(i.label){case 0:if(!t||!t.file)throw l.default.getUserDataError('"file" property expected.','Make sure second argument has "file" property.');return n=this.convertToExpectedShape(t),[4,this.request.postWithFD("/v4/address/validate/bulk/".concat(e),n)];case 1:return a=i.sent(),[2,this.handleResponse(a)]}}))}))},t.prototype.destroy=function(e){return s(this,void 0,void 0,(function(){var t;return r(this,(function(n){switch(n.label){case 0:return[4,this.request.delete("/v4/address/validate/bulk/".concat(e))];case 1:return t=n.sent(),[2,this.handleResponse(t)]}}))}))},t}(p.default);t.default=m},1045:function(e,t){"use strict";var n=this&&this.__awaiter||function(e,t,n,a){return new(n||(n=Promise))((function(i,o){function s(e){try{c(a.next(e))}catch(e){o(e)}}function r(e){try{c(a.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,r)}c((a=a.apply(e,t||[])).next())}))},a=this&&this.__generator||function(e,t){var n,a,i,o,s={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:r(0),throw:r(1),return:r(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function r(r){return function(c){return function(r){if(n)throw new TypeError("Generator is already executing.");for(;o&&(o=0,r[0]&&(s=0)),s;)try{if(n=1,a&&(i=2&r[0]?a.return:r[0]?a.throw||((i=a.return)&&i.call(a),0):a.next)&&!(i=i.call(a,r[1])).done)return i;switch(a=0,i&&(r=[2&r[0],i.value]),r[0]){case 0:case 1:i=r;break;case 4:return s.label++,{value:r[1],done:!1};case 5:s.label++,a=r[1],r=[0];continue;case 7:r=s.ops.pop(),s.trys.pop();continue;default:if(!(i=s.trys,(i=i.length>0&&i[i.length-1])||6!==r[0]&&2!==r[0])){s=0;continue}if(3===r[0]&&(!i||r[1]>i[0]&&r[1]<i[3])){s.label=r[1];break}if(6===r[0]&&s.label<i[1]){s.label=i[1],i=r;break}if(i&&s.label<i[2]){s.label=i[2],s.ops.push(r);break}i[2]&&s.ops.pop(),s.trys.pop();continue}r=t.call(e,s)}catch(e){r=[6,e],a=0}finally{n=i=0}if(5&r[0])throw r[1];return{value:r[0]?r[1]:void 0,done:!0}}([r,c])}}};Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){this.request=e,this.multipleValidation=t}return e.prototype.get=function(e){return n(this,void 0,void 0,(function(){var t;return a(this,(function(n){switch(n.label){case 0:return t={address:e},[4,this.request.get("/v4/address/validate",t)];case 1:return[2,n.sent().body]}}))}))},e}();t.default=i},6368:function(e,t,n){"use strict";var a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Webhook=void 0;var i=a(n(5469)),o=function(e,t,n){this.id=e,this.url=t,this.urls=n};t.Webhook=o;var s=function(){function e(e){this.request=e}return e.prototype._parseWebhookList=function(e){return e.body.webhooks},e.prototype._parseWebhookWithID=function(e){return function(t){var n,a=null===(n=null==t?void 0:t.body)||void 0===n?void 0:n.webhook,i=null==a?void 0:a.url,s=null==a?void 0:a.urls;return i||(i=s&&s.length?s[0]:void 0),s&&0!==s.length||!i||(s=[i]),new o(e,i,s)}},e.prototype._parseWebhookTest=function(e){return{code:e.body.code,message:e.body.message}},e.prototype.list=function(e,t){return this.request.get((0,i.default)("/v3/domains",e,"webhooks"),t).then(this._parseWebhookList)},e.prototype.get=function(e,t){return this.request.get((0,i.default)("/v3/domains",e,"webhooks",t)).then(this._parseWebhookWithID(t))},e.prototype.create=function(e,t,n,a){return void 0===a&&(a=!1),a?this.request.putWithFD((0,i.default)("/v3/domains",e,"webhooks",t,"test"),{url:n}).then(this._parseWebhookTest):this.request.postWithFD((0,i.default)("/v3/domains",e,"webhooks"),{id:t,url:n}).then(this._parseWebhookWithID(t))},e.prototype.update=function(e,t,n){return this.request.putWithFD((0,i.default)("/v3/domains",e,"webhooks",t),{url:n}).then(this._parseWebhookWithID(t))},e.prototype.destroy=function(e,t){return this.request.delete((0,i.default)("/v3/domains",e,"webhooks",t)).then(this._parseWebhookWithID(t))},e}();t.default=s},8968:function(e,t,n){"use strict";var a=this&&this.__assign||function(){return a=Object.assign||function(e){for(var t,n=1,a=arguments.length;n<a;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},a.apply(this,arguments)},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=i(n(9538)),s=function(){function e(e,t){this._stream=e,this.size=t}return e.prototype.stream=function(){return this._stream},Object.defineProperty(e.prototype,Symbol.toStringTag,{get:function(){return"Blob"},enumerable:!1,configurable:!0}),e}(),r=function(){function e(){}return e.prototype.getAttachmentOptions=function(e){var t=e.filename,n=e.contentType,i=e.knownLength;return a(a(a({},t?{filename:t}:{filename:"file"}),n&&{contentType:n}),i&&{knownLength:i})},e.prototype.getFileInfo=function(e){var t=e.name,n=e.type,a=e.size;return this.getAttachmentOptions({filename:t,contentType:n,knownLength:a})},e.prototype.getCustomFileInfo=function(e){var t=e.filename,n=e.contentType,a=e.knownLength;return this.getAttachmentOptions({filename:t,contentType:n,knownLength:a})},e.prototype.getBufferInfo=function(e){var t=e.byteLength;return this.getAttachmentOptions({filename:"file",contentType:"",knownLength:t})},e.prototype.isStream=function(e){return"object"==typeof e&&"function"==typeof e.pipe},e.prototype.isCustomFile=function(e){return"object"==typeof e&&!!e.data},e.prototype.isBrowserFile=function(e){return"object"==typeof e&&(!!e.name||"undefined"!=typeof Blob&&e instanceof Blob)},e.prototype.isBuffer=function(e){return"undefined"!=typeof Buffer&&Buffer.isBuffer(e)},e.prototype.getAttachmentInfo=function(e){var t=this.isBrowserFile(e),n=this.isCustomFile(e);if(!("string"==typeof e)){if(t)return this.getFileInfo(e);if("undefined"!=typeof Buffer&&Buffer.isBuffer(e))return this.getBufferInfo(e);if(n)return this.getCustomFileInfo(e)}return{filename:"file",contentType:void 0,knownLength:void 0}},e.prototype.convertToFDexpectedShape=function(e){var t,n=this.isStream(e),a=this.isBrowserFile(e),i=this.isCustomFile(e);if(n||"string"==typeof e||a||this.isBuffer(e))t=e;else{if(!i)throw o.default.getUserDataError("Unknown attachment type ".concat(typeof e),'The "attachment" property expects either Buffer, Blob, or String.\n Also, It is possible to provide an object that has the property "data" with a value that is equal to one of the types counted before.\n Additionally, you may use an array to send more than one attachment.');t=e.data}return t},e.prototype.getBlobFromStream=function(e,t){return new s(e,t)},e}();t.default=r},9538:function(e,t){"use strict";var n,a=this&&this.__extends||(n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},n(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function a(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(a.prototype=t.prototype,new a)});Object.defineProperty(t,"__esModule",{value:!0});var i=function(e){function t(t){var n=t.status,a=t.statusText,i=t.message,o=t.body,s=void 0===o?{}:o,r=this,c="",p="";return"string"==typeof s?c=s:(c=(null==s?void 0:s.message)||"",p=(null==s?void 0:s.error)||""),(r=e.call(this)||this).stack="",r.status=n,r.message=i||p||a||"",r.details=c,r.type="MailgunAPIError",r}return a(t,e),t.getUserDataError=function(e,t){return new this({status:400,statusText:e,body:{message:t}})},t}(Error);t.default=i},917:function(e,t,n){"use strict";var a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=a(n(9538)),o=a(n(8968)),s=function(){function e(e){this.FormDataConstructor=e,this.fileKeys=["attachment","inline","multipleValidationFile"],this.attachmentsHandler=new o.default}return e.prototype.createFormData=function(e){var t=this;if(!e)throw new Error("Please provide data object");return Object.keys(e).filter((function(t){return e[t]})).reduce((function(n,a){if(t.fileKeys.includes(a)){var o=e[a];if(t.isMessageAttachment(o))return t.addFilesToFD(a,o,n),n;throw i.default.getUserDataError("Unknown value ".concat(e[a]," with type ").concat(typeof e[a],' for property "').concat(a,'"'),'The key "'.concat(a,'" should have type of Buffer, Stream, File, or String '))}if("message"===a){var s=e[a];if(!s||!t.isMIME(s))throw i.default.getUserDataError('Unknown data type for "'.concat(a,'" property'),"The mime data should have type of Buffer, String or Blob");return t.addMimeDataToFD(a,s,n),n}return t.addCommonPropertyToFD(a,e[a],n),n}),new this.FormDataConstructor)},e.prototype.addMimeDataToFD=function(e,t,n){if("string"!=typeof t){if(this.isFormDataPackage(n))n.append(e,t,{filename:"MimeMessage"});else if(void 0!==typeof Blob){var a=n;if(t instanceof Blob)return void a.append(e,t,"MimeMessage");if(this.attachmentsHandler.isBuffer(t)){var i=new Blob([t]);a.append(e,i,"MimeMessage")}}}else n.append(e,t)},e.prototype.isMIME=function(e){return"string"==typeof e||"undefined"!=typeof Blob&&e instanceof Blob||this.attachmentsHandler.isBuffer(e)||"undefined"!=typeof ReadableStream&&e instanceof ReadableStream},e.prototype.isFormDataPackage=function(e){return"object"==typeof e&&null!==e&&"function"==typeof e.getHeaders},e.prototype.isMessageAttachment=function(e){var t=this;return this.attachmentsHandler.isCustomFile(e)||"string"==typeof e||"undefined"!=typeof File&&e instanceof File||"undefined"!=typeof Blob&&e instanceof Blob||this.attachmentsHandler.isBuffer(e)||this.attachmentsHandler.isStream(e)||Array.isArray(e)&&e.every((function(n){return t.attachmentsHandler.isCustomFile(n)||"undefined"!=typeof File&&n instanceof File||"undefined"!=typeof Blob&&e instanceof Blob||t.attachmentsHandler.isBuffer(n)||t.attachmentsHandler.isStream(n)}))},e.prototype.addFilesToFD=function(e,t,n){var a=this,i=function(e,t,i){var o="multipleValidationFile"===e?"file":e,s=a.attachmentsHandler.convertToFDexpectedShape(t),r=a.attachmentsHandler.getAttachmentInfo(t);if(a.isFormDataPackage(i)){var c=i,p="string"==typeof s?Buffer.from(s):s;c.append(o,p,r)}else if(void 0!==typeof Blob){var u=n;if("string"==typeof s||a.attachmentsHandler.isBuffer(s)){var l=new Blob([s]);return void u.append(o,l,r.filename)}if(s instanceof Blob)return void u.append(o,s,r.filename);if(a.attachmentsHandler.isStream(s)){var d=a.attachmentsHandler.getBlobFromStream(s,r.knownLength);u.set(o,d,r.filename)}}};Array.isArray(t)?t.forEach((function(t){i(e,t,n)})):i(e,t,n)},e.prototype.addCommonPropertyToFD=function(e,t,n){var a=this,o=function(e,t){if(a.isFormDataPackage(n))return"object"==typeof t?(console.warn('The received value is an object. \n"JSON.Stringify" will be used to avoid TypeError \nTo remove this warning: \nConsider switching to built-in FormData or converting the value on your own.\n'),n.append(e,JSON.stringify(t))):n.append(e,t);if("string"==typeof t)return n.append(e,t);if(void 0!==typeof Blob&&t instanceof Blob)return n.append(e,t);throw i.default.getUserDataError("Unknown value type for Form Data. String or Blob expected","Browser compliant FormData allows only string or Blob values for properties that are not attachments.")};Array.isArray(t)?t.forEach((function(t){o(e,t)})):null!=t&&o(e,t)},e}();t.default=s},4117:function(e,t,n){"use strict";var a=this&&this.__assign||function(){return a=Object.assign||function(e){for(var t,n=1,a=arguments.length;n<a;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},a.apply(this,arguments)},i=this&&this.__awaiter||function(e,t,n,a){return new(n||(n=Promise))((function(i,o){function s(e){try{c(a.next(e))}catch(e){o(e)}}function r(e){try{c(a.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,r)}c((a=a.apply(e,t||[])).next())}))},o=this&&this.__generator||function(e,t){var n,a,i,o,s={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:r(0),throw:r(1),return:r(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function r(r){return function(c){return function(r){if(n)throw new TypeError("Generator is already executing.");for(;o&&(o=0,r[0]&&(s=0)),s;)try{if(n=1,a&&(i=2&r[0]?a.return:r[0]?a.throw||((i=a.return)&&i.call(a),0):a.next)&&!(i=i.call(a,r[1])).done)return i;switch(a=0,i&&(r=[2&r[0],i.value]),r[0]){case 0:case 1:i=r;break;case 4:return s.label++,{value:r[1],done:!1};case 5:s.label++,a=r[1],r=[0];continue;case 7:r=s.ops.pop(),s.trys.pop();continue;default:if(!(i=s.trys,(i=i.length>0&&i[i.length-1])||6!==r[0]&&2!==r[0])){s=0;continue}if(3===r[0]&&(!i||r[1]>i[0]&&r[1]<i[3])){s.label=r[1];break}if(6===r[0]&&s.label<i[1]){s.label=i[1],i=r;break}if(i&&s.label<i[2]){s.label=i[2],s.ops.push(r);break}i[2]&&s.ops.pop(),s.trys.pop();continue}r=t.call(e,s)}catch(e){r=[6,e],a=0}finally{n=i=0}if(5&r[0])throw r[1];return{value:r[0]?r[1]:void 0,done:!0}}([r,c])}}},s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var r=s(n(5469)),c=s(n(9538)),p=function(){function e(e){e&&(this.request=e)}return e.prototype.parsePage=function(e,t,n,a){var i=new URL(t).searchParams,o=t&&"string"==typeof t&&t.split(n).pop()||"",s=null;return a&&(s=i.has(a)?i.get(a):void 0),{id:e,page:"?"===n?"?".concat(o):o,iteratorPosition:s,url:t}},e.prototype.parsePageLinks=function(e,t,n){var a=this;return Object.entries(e.body.paging).reduce((function(e,i){var o=i[0],s=i[1];return e[o]=a.parsePage(o,s,t,n),e}),{})},e.prototype.updateUrlAndQuery=function(e,t){var n=e,i=a({},t);return i.page&&(n=(0,r.default)(e,i.page),delete i.page),{url:n,updatedQuery:i}},e.prototype.requestListWithPages=function(e,t,n){return i(this,void 0,void 0,(function(){var a,i,s,r;return o(this,(function(o){switch(o.label){case 0:return a=this.updateUrlAndQuery(e,t),i=a.url,s=a.updatedQuery,this.request?[4,this.request.get(i,s)]:[3,2];case 1:return r=o.sent(),[2,this.parseList(r,n)];case 2:throw new c.default({status:500,statusText:"Request property is empty",body:{message:""}})}}))}))},e}();t.default=p},6685:function(e,t,n){"use strict";var a=this&&this.__assign||function(){return a=Object.assign||function(e){for(var t,n=1,a=arguments.length;n<a;n++)for(var i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},a.apply(this,arguments)},i=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n);var i=Object.getOwnPropertyDescriptor(t,n);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,a,i)}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),s=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&i(t,e,n);return o(t,e),t},r=this&&this.__awaiter||function(e,t,n,a){return new(n||(n=Promise))((function(i,o){function s(e){try{c(a.next(e))}catch(e){o(e)}}function r(e){try{c(a.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,r)}c((a=a.apply(e,t||[])).next())}))},c=this&&this.__generator||function(e,t){var n,a,i,o,s={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:r(0),throw:r(1),return:r(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function r(r){return function(c){return function(r){if(n)throw new TypeError("Generator is already executing.");for(;o&&(o=0,r[0]&&(s=0)),s;)try{if(n=1,a&&(i=2&r[0]?a.return:r[0]?a.throw||((i=a.return)&&i.call(a),0):a.next)&&!(i=i.call(a,r[1])).done)return i;switch(a=0,i&&(r=[2&r[0],i.value]),r[0]){case 0:case 1:i=r;break;case 4:return s.label++,{value:r[1],done:!1};case 5:s.label++,a=r[1],r=[0];continue;case 7:r=s.ops.pop(),s.trys.pop();continue;default:if(!(i=s.trys,(i=i.length>0&&i[i.length-1])||6!==r[0]&&2!==r[0])){s=0;continue}if(3===r[0]&&(!i||r[1]>i[0]&&r[1]<i[3])){s.label=r[1];break}if(6===r[0]&&s.label<i[1]){s.label=i[1],i=r;break}if(i&&s.label<i[2]){s.label=i[2],s.ops.push(r);break}i[2]&&s.ops.pop(),s.trys.pop();continue}r=t.call(e,s)}catch(e){r=[6,e],a=0}finally{n=i=0}if(5&r[0])throw r[1];return{value:r[0]?r[1]:void 0,done:!0}}([r,c])}}},p=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var u=s(n(5914)),l=p(n(5469)),d=s(n(9329)),m=p(n(9538)),f=p(n(917)),h=p(n(5902)),v=function(){function e(e,t){this.username=e.username,this.key=e.key,this.url=e.url,this.timeout=e.timeout,this.headers=this.makeHeadersFromObject(e.headers),this.formDataBuilder=new f.default(t),this.maxBodyLength=52428800,this.proxy=null==e?void 0:e.proxy}return e.prototype.request=function(e,t,n){var i,o,s;return r(this,void 0,void 0,(function(){var r,p,u,f,h,v,b,x;return c(this,(function(c){switch(c.label){case 0:null==(r=a({},n))||delete r.headers,p=this.joinAndTransformHeaders(n),u=a({},r),(null==r?void 0:r.query)&&Object.getOwnPropertyNames(null==r?void 0:r.query).length>0&&(u.params=new URLSearchParams(r.query),delete u.query),(null==r?void 0:r.body)&&(f=null==r?void 0:r.body,u.data=f,delete u.body),v=(0,l.default)(this.url,t),c.label=1;case 1:return c.trys.push([1,3,,4]),[4,d.default.request(a(a({method:e.toLocaleUpperCase(),timeout:this.timeout,url:v,headers:p},u),{maxBodyLength:this.maxBodyLength,proxy:this.proxy}))];case 2:return h=c.sent(),[3,4];case 3:throw b=c.sent(),x=b,new m.default({status:(null===(i=null==x?void 0:x.response)||void 0===i?void 0:i.status)||400,statusText:(null===(o=null==x?void 0:x.response)||void 0===o?void 0:o.statusText)||x.code,body:(null===(s=null==x?void 0:x.response)||void 0===s?void 0:s.data)||x.message});case 4:return[4,this.getResponseBody(h)];case 5:return[2,c.sent()]}}))}))},e.prototype.getResponseBody=function(e){return r(this,void 0,void 0,(function(){var t;return c(this,(function(n){if(t={body:{},status:null==e?void 0:e.status},"string"==typeof e.data){if("Mailgun Magnificent API"===e.data)throw new m.default({status:400,statusText:"Incorrect url",body:e.data});t.body={message:e.data}}else t.body=e.data;return[2,t]}))}))},e.prototype.joinAndTransformHeaders=function(e){var t=new d.AxiosHeaders,n=u.encode("".concat(this.username,":").concat(this.key));t.setAuthorization("Basic ".concat(n)),t.set(this.headers);var a=e&&e.headers,i=this.makeHeadersFromObject(a);return t.set(i),t},e.prototype.makeHeadersFromObject=function(e){void 0===e&&(e={});var t=new d.AxiosHeaders;return t=Object.entries(e).reduce((function(e,t){var n=t[0],a=t[1];return e.set(n,a),e}),t)},e.prototype.setSubaccountHeader=function(e){var t,n=this.makeHeadersFromObject(a(a({},this.headers),((t={})[h.default.SUBACCOUNT_HEADER]=e,t)));this.headers.set(n)},e.prototype.resetSubaccountHeader=function(){this.headers.delete(h.default.SUBACCOUNT_HEADER)},e.prototype.query=function(e,t,n,i){return this.request(e,t,a({query:n},i))},e.prototype.command=function(e,t,n,i,o){void 0===o&&(o=!0);var s={};o&&(s={"Content-Type":"application/x-www-form-urlencoded"});var r=a(a(a({},s),{body:n}),i);return this.request(e,t,r)},e.prototype.get=function(e,t,n){return this.query("get",e,t,n)},e.prototype.post=function(e,t,n){return this.command("post",e,t,n)},e.prototype.postWithFD=function(e,t){var n=this.formDataBuilder.createFormData(t);return this.command("post",e,n,{headers:{"Content-Type":"multipart/form-data"}},!1)},e.prototype.putWithFD=function(e,t){var n=this.formDataBuilder.createFormData(t);return this.command("put",e,n,{headers:{"Content-Type":"multipart/form-data"}},!1)},e.prototype.patchWithFD=function(e,t){var n=this.formDataBuilder.createFormData(t);return this.command("patch",e,n,{headers:{"Content-Type":"multipart/form-data"}},!1)},e.prototype.put=function(e,t,n){return this.command("put",e,t,n)},e.prototype.delete=function(e,t){return this.command("delete",e,t)},e}();t.default=v},9146:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.YesNo=t.WebhooksIds=t.SuppressionModels=t.Resolution=void 0,function(e){e.HOUR="hour",e.DAY="day",e.MONTH="month"}(t.Resolution||(t.Resolution={})),function(e){e.BOUNCES="bounces",e.COMPLAINTS="complaints",e.UNSUBSCRIBES="unsubscribes",e.WHITELISTS="whitelists"}(t.SuppressionModels||(t.SuppressionModels={})),function(e){e.CLICKED="clicked",e.COMPLAINED="complained",e.DELIVERED="delivered",e.OPENED="opened",e.PERMANENT_FAIL="permanent_fail",e.TEMPORARY_FAIL="temporary_fail",e.UNSUBSCRIBED="unsubscribe"}(t.WebhooksIds||(t.WebhooksIds={})),function(e){e.YES="yes",e.NO="no"}(t.YesNo||(t.YesNo={}))},9278:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},7684:function(e,t,n){"use strict";var a=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n);var i=Object.getOwnPropertyDescriptor(t,n);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,a,i)}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),i=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||a(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),i(n(9278),t)},7992:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},5969:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},4425:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},424:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},3078:function(e,t,n){"use strict";var a=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n);var i=Object.getOwnPropertyDescriptor(t,n);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,a,i)}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),i=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||a(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),i(n(7992),t),i(n(5969),t),i(n(4425),t),i(n(424),t)},4404:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},1628:function(e,t,n){"use strict";var a=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n);var i=Object.getOwnPropertyDescriptor(t,n);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,a,i)}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),i=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||a(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),i(n(4404),t)},1593:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},9783:function(e,t,n){"use strict";var a=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n);var i=Object.getOwnPropertyDescriptor(t,n);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,a,i)}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),i=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||a(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),i(n(1593),t)},4737:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},473:function(e,t,n){"use strict";var a=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n);var i=Object.getOwnPropertyDescriptor(t,n);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,a,i)}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),i=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||a(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),i(n(4737),t)},8373:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},6907:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},8236:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},142:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},1824:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},4223:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},7475:function(e,t,n){"use strict";var a=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n);var i=Object.getOwnPropertyDescriptor(t,n);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,a,i)}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),i=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||a(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),i(n(8236),t),i(n(8373),t),i(n(6907),t),i(n(4223),t),i(n(142),t),i(n(1824),t)},4130:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},5883:function(e,t,n){"use strict";var a=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n);var i=Object.getOwnPropertyDescriptor(t,n);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,a,i)}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),i=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||a(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),i(n(4130),t)},4903:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},2078:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},1147:function(e,t,n){"use strict";var a=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n);var i=Object.getOwnPropertyDescriptor(t,n);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,a,i)}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),i=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||a(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),i(n(4903),t),i(n(2078),t)},777:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},7497:function(e,t,n){"use strict";var a=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n);var i=Object.getOwnPropertyDescriptor(t,n);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,a,i)}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),i=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||a(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),i(n(777),t)},1557:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},7951:function(e,t,n){"use strict";var a=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n);var i=Object.getOwnPropertyDescriptor(t,n);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,a,i)}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),i=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||a(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),i(n(1557),t)},148:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},4804:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},8864:function(e,t,n){"use strict";var a=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n);var i=Object.getOwnPropertyDescriptor(t,n);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,a,i)}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),i=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||a(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),i(n(148),t),i(n(4804),t)},4233:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},4913:function(e,t,n){"use strict";var a=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n);var i=Object.getOwnPropertyDescriptor(t,n);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,a,i)}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),i=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||a(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),i(n(4233),t)},1381:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},5428:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},7257:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},8920:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},2556:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},8297:function(e,t,n){"use strict";var a=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n);var i=Object.getOwnPropertyDescriptor(t,n);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,a,i)}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),i=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||a(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),i(n(1381),t),i(n(5428),t),i(n(8920),t),i(n(2556),t),i(n(7257),t)},1728:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},6708:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},1163:function(e,t,n){"use strict";var a=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n);var i=Object.getOwnPropertyDescriptor(t,n);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,a,i)}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),i=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||a(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),i(n(1728),t),i(n(6708),t)},5681:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},8987:function(e,t,n){"use strict";var a=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n);var i=Object.getOwnPropertyDescriptor(t,n);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,a,i)}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),i=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||a(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),i(n(5681),t)},8608:function(e,t,n){"use strict";var a=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n);var i=Object.getOwnPropertyDescriptor(t,n);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,a,i)}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),i=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||a(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),i(n(7684),t),i(n(3078),t),i(n(5883),t),i(n(1147),t),i(n(8864),t),i(n(8297),t),i(n(1163),t),i(n(1628),t),i(n(8987),t),i(n(7497),t),i(n(7951),t),i(n(473),t),i(n(9783),t),i(n(4913),t),i(n(7475),t)},5364:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},3545:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},9825:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},6858:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},1230:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},4267:function(e,t,n){"use strict";var a=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n);var i=Object.getOwnPropertyDescriptor(t,n);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,a,i)}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),i=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||a(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),i(n(3545),t),i(n(5364),t),i(n(9825),t),i(n(6858),t),i(n(1230),t)},8625:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},3286:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},1240:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},6930:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},7110:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},3919:function(e,t,n){"use strict";var a=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n);var i=Object.getOwnPropertyDescriptor(t,n);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,a,i)}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),i=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||a(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),i(n(8625),t),i(n(7110),t),i(n(3286),t),i(n(1240),t),i(n(6930),t)},7850:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},2691:function(e,t,n){"use strict";var a=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n);var i=Object.getOwnPropertyDescriptor(t,n);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,a,i)}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),i=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||a(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),i(n(7850),t)},8610:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},9402:function(e,t,n){"use strict";var a=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n);var i=Object.getOwnPropertyDescriptor(t,n);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,a,i)}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),i=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||a(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),i(n(8610),t)},2014:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},7364:function(e,t,n){"use strict";var a=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n);var i=Object.getOwnPropertyDescriptor(t,n);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,a,i)}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),i=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||a(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),i(n(2014),t)},4470:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},8066:function(e,t,n){"use strict";var a=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n);var i=Object.getOwnPropertyDescriptor(t,n);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,a,i)}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),i=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||a(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),i(n(4470),t)},1766:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},2284:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},7296:function(e,t,n){"use strict";var a=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n);var i=Object.getOwnPropertyDescriptor(t,n);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,a,i)}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),i=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||a(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),i(n(1766),t),i(n(2284),t)},8980:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},7290:function(e,t,n){"use strict";var a=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n);var i=Object.getOwnPropertyDescriptor(t,n);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,a,i)}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),i=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||a(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),i(n(8980),t)},2992:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},6608:function(e,t,n){"use strict";var a=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n);var i=Object.getOwnPropertyDescriptor(t,n);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,a,i)}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),i=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||a(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),i(n(2992),t)},906:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},5085:function(e,t,n){"use strict";var a=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n);var i=Object.getOwnPropertyDescriptor(t,n);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,a,i)}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),i=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||a(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),i(n(906),t)},1930:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},8832:function(e,t,n){"use strict";var a=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n);var i=Object.getOwnPropertyDescriptor(t,n);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,a,i)}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),i=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||a(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),i(n(1930),t)},7676:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},8715:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},4704:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},8855:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},1635:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},8458:function(e,t,n){"use strict";var a=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n);var i=Object.getOwnPropertyDescriptor(t,n);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,a,i)}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),i=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||a(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),i(n(7676),t),i(n(8715),t),i(n(4704),t),i(n(8855),t),i(n(1635),t)},4115:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},4887:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},9974:function(e,t,n){"use strict";var a=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n);var i=Object.getOwnPropertyDescriptor(t,n);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,a,i)}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),i=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||a(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),i(n(4115),t),i(n(4887),t)},584:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0})},8444:function(e,t,n){"use strict";var a=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n);var i=Object.getOwnPropertyDescriptor(t,n);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,a,i)}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),i=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||a(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),i(n(584),t)},9025:function(e,t,n){"use strict";var a=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n);var i=Object.getOwnPropertyDescriptor(t,n);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,a,i)}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),i=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||a(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),i(n(4267),t),i(n(3919),t),i(n(2691),t),i(n(9402),t),i(n(7364),t),i(n(8066),t),i(n(7296),t),i(n(7290),t),i(n(6608),t),i(n(5085),t),i(n(8832),t),i(n(8458),t),i(n(9974),t),i(n(8444),t)},9711:function(e,t,n){"use strict";var a=this&&this.__createBinding||(Object.create?function(e,t,n,a){void 0===a&&(a=n);var i=Object.getOwnPropertyDescriptor(t,n);i&&!("get"in i?!t.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,a,i)}:function(e,t,n,a){void 0===a&&(a=n),e[a]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),o=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&a(t,e,n);return i(t,e),t},s=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||a(t,e,n)},r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Interfaces=t.Enums=void 0;var c=r(n(5488));t.Enums=o(n(9146)),s(n(9025),t),t.Interfaces=o(n(8608));var p=function(){function e(e){this.formData=e}return Object.defineProperty(e,"default",{get:function(){return this},enumerable:!1,configurable:!0}),e.prototype.client=function(e){return new c.default(e,this.formData)},e}();t.default=p},5914:function(e,t,n){var a;e=n.nmd(e),function(){var i=t,o=(e&&e.exports,"object"==typeof global&&global);o.global!==o&&o.window;var s=function(e){this.message=e};(s.prototype=new Error).name="InvalidCharacterError";var r=function(e){throw new s(e)},c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",p=/[\t\n\f\r ]/g,u={encode:function(e){e=String(e),/[^\0-\xFF]/.test(e)&&r("The string to be encoded contains characters outside of the Latin1 range.");for(var t,n,a,i,o=e.length%3,s="",p=-1,u=e.length-o;++p<u;)t=e.charCodeAt(p)<<16,n=e.charCodeAt(++p)<<8,a=e.charCodeAt(++p),s+=c.charAt((i=t+n+a)>>18&63)+c.charAt(i>>12&63)+c.charAt(i>>6&63)+c.charAt(63&i);return 2==o?(t=e.charCodeAt(p)<<8,n=e.charCodeAt(++p),s+=c.charAt((i=t+n)>>10)+c.charAt(i>>4&63)+c.charAt(i<<2&63)+"="):1==o&&(i=e.charCodeAt(p),s+=c.charAt(i>>2)+c.charAt(i<<4&63)+"=="),s},decode:function(e){var t=(e=String(e).replace(p,"")).length;t%4==0&&(t=(e=e.replace(/==?$/,"")).length),(t%4==1||/[^+a-zA-Z0-9/]/.test(e))&&r("Invalid character: the string to be decoded is not correctly encoded.");for(var n,a,i=0,o="",s=-1;++s<t;)a=c.indexOf(e.charAt(s)),n=i%4?64*n+a:a,i++%4&&(o+=String.fromCharCode(255&n>>(-2*i&6)));return o},version:"1.0.0"};void 0===(a=function(){return u}.call(t,n,t,e))||(e.exports=a)}()},801:(e,t,n)=>{var a=n(9023),i=n(2203).Stream,o=n(8069);function s(){this.writable=!1,this.readable=!0,this.dataSize=0,this.maxDataSize=2097152,this.pauseStreams=!0,this._released=!1,this._streams=[],this._currentStream=null,this._insideLoop=!1,this._pendingNext=!1}e.exports=s,a.inherits(s,i),s.create=function(e){var t=new this;for(var n in e=e||{})t[n]=e[n];return t},s.isStreamLike=function(e){return"function"!=typeof e&&"string"!=typeof e&&"boolean"!=typeof e&&"number"!=typeof e&&!Buffer.isBuffer(e)},s.prototype.append=function(e){if(s.isStreamLike(e)){if(!(e instanceof o)){var t=o.create(e,{maxDataSize:1/0,pauseStream:this.pauseStreams});e.on("data",this._checkDataSize.bind(this)),e=t}this._handleErrors(e),this.pauseStreams&&e.pause()}return this._streams.push(e),this},s.prototype.pipe=function(e,t){return i.prototype.pipe.call(this,e,t),this.resume(),e},s.prototype._getNext=function(){if(this._currentStream=null,this._insideLoop)this._pendingNext=!0;else{this._insideLoop=!0;try{do{this._pendingNext=!1,this._realGetNext()}while(this._pendingNext)}finally{this._insideLoop=!1}}},s.prototype._realGetNext=function(){var e=this._streams.shift();void 0!==e?"function"==typeof e?e(function(e){s.isStreamLike(e)&&(e.on("data",this._checkDataSize.bind(this)),this._handleErrors(e)),this._pipeNext(e)}.bind(this)):this._pipeNext(e):this.end()},s.prototype._pipeNext=function(e){if(this._currentStream=e,s.isStreamLike(e))return e.on("end",this._getNext.bind(this)),void e.pipe(this,{end:!1});var t=e;this.write(t),this._getNext()},s.prototype._handleErrors=function(e){var t=this;e.on("error",(function(e){t._emitError(e)}))},s.prototype.write=function(e){this.emit("data",e)},s.prototype.pause=function(){this.pauseStreams&&(this.pauseStreams&&this._currentStream&&"function"==typeof this._currentStream.pause&&this._currentStream.pause(),this.emit("pause"))},s.prototype.resume=function(){this._released||(this._released=!0,this.writable=!0,this._getNext()),this.pauseStreams&&this._currentStream&&"function"==typeof this._currentStream.resume&&this._currentStream.resume(),this.emit("resume")},s.prototype.end=function(){this._reset(),this.emit("end")},s.prototype.destroy=function(){this._reset(),this.emit("close")},s.prototype._reset=function(){this.writable=!1,this._streams=[],this._currentStream=null},s.prototype._checkDataSize=function(){if(this._updateDataSize(),!(this.dataSize<=this.maxDataSize)){var e="DelayedStream#maxDataSize of "+this.maxDataSize+" bytes exceeded.";this._emitError(new Error(e))}},s.prototype._updateDataSize=function(){this.dataSize=0;var e=this;this._streams.forEach((function(t){t.dataSize&&(e.dataSize+=t.dataSize)})),this._currentStream&&this._currentStream.dataSize&&(this.dataSize+=this._currentStream.dataSize)},s.prototype._emitError=function(e){this._reset(),this.emit("error",e)}},7833:(e,t,n)=>{t.formatArgs=function(t){if(t[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+t[0]+(this.useColors?"%c ":" ")+"+"+e.exports.humanize(this.diff),!this.useColors)return;const n="color: "+this.color;t.splice(1,0,n,"color: inherit");let a=0,i=0;t[0].replace(/%[a-zA-Z%]/g,(e=>{"%%"!==e&&(a++,"%c"===e&&(i=a))})),t.splice(i,0,n)},t.save=function(e){try{e?t.storage.setItem("debug",e):t.storage.removeItem("debug")}catch(e){}},t.load=function(){let e;try{e=t.storage.getItem("debug")}catch(e){}!e&&"undefined"!=typeof process&&"env"in process&&(e=process.env.DEBUG);return e},t.useColors=function(){if("undefined"!=typeof window&&window.process&&("renderer"===window.process.type||window.process.__nwjs))return!0;if("undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/))return!1;return"undefined"!=typeof document&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||"undefined"!=typeof window&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||"undefined"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)},t.storage=function(){try{return localStorage}catch(e){}}(),t.destroy=(()=>{let e=!1;return()=>{e||(e=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})(),t.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"],t.log=console.debug||console.log||(()=>{}),e.exports=n(736)(t);const{formatters:a}=e.exports;a.j=function(e){try{return JSON.stringify(e)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}},736:(e,t,n)=>{e.exports=function(e){function t(e){let n,i,o,s=null;function r(...e){if(!r.enabled)return;const a=r,i=Number(new Date),o=i-(n||i);a.diff=o,a.prev=n,a.curr=i,n=i,e[0]=t.coerce(e[0]),"string"!=typeof e[0]&&e.unshift("%O");let s=0;e[0]=e[0].replace(/%([a-zA-Z%])/g,((n,i)=>{if("%%"===n)return"%";s++;const o=t.formatters[i];if("function"==typeof o){const t=e[s];n=o.call(a,t),e.splice(s,1),s--}return n})),t.formatArgs.call(a,e);(a.log||t.log).apply(a,e)}return r.namespace=e,r.useColors=t.useColors(),r.color=t.selectColor(e),r.extend=a,r.destroy=t.destroy,Object.defineProperty(r,"enabled",{enumerable:!0,configurable:!1,get:()=>null!==s?s:(i!==t.namespaces&&(i=t.namespaces,o=t.enabled(e)),o),set:e=>{s=e}}),"function"==typeof t.init&&t.init(r),r}function a(e,n){const a=t(this.namespace+(void 0===n?":":n)+e);return a.log=this.log,a}function i(e){return e.toString().substring(2,e.toString().length-2).replace(/\.\*\?$/,"*")}return t.debug=t,t.default=t,t.coerce=function(e){if(e instanceof Error)return e.stack||e.message;return e},t.disable=function(){const e=[...t.names.map(i),...t.skips.map(i).map((e=>"-"+e))].join(",");return t.enable(""),e},t.enable=function(e){let n;t.save(e),t.namespaces=e,t.names=[],t.skips=[];const a=("string"==typeof e?e:"").split(/[\s,]+/),i=a.length;for(n=0;n<i;n++)a[n]&&("-"===(e=a[n].replace(/\*/g,".*?"))[0]?t.skips.push(new RegExp("^"+e.slice(1)+"$")):t.names.push(new RegExp("^"+e+"$")))},t.enabled=function(e){if("*"===e[e.length-1])return!0;let n,a;for(n=0,a=t.skips.length;n<a;n++)if(t.skips[n].test(e))return!1;for(n=0,a=t.names.length;n<a;n++)if(t.names[n].test(e))return!0;return!1},t.humanize=n(6585),t.destroy=function(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")},Object.keys(e).forEach((n=>{t[n]=e[n]})),t.names=[],t.skips=[],t.formatters={},t.selectColor=function(e){let n=0;for(let t=0;t<e.length;t++)n=(n<<5)-n+e.charCodeAt(t),n|=0;return t.colors[Math.abs(n)%t.colors.length]},t.enable(t.load()),t}},5753:(e,t,n)=>{"undefined"==typeof process||"renderer"===process.type||!0===process.browser||process.__nwjs?e.exports=n(7833):e.exports=n(6033)},6033:(e,t,n)=>{const a=n(2018),i=n(9023);t.init=function(e){e.inspectOpts={};const n=Object.keys(t.inspectOpts);for(let a=0;a<n.length;a++)e.inspectOpts[n[a]]=t.inspectOpts[n[a]]},t.log=function(...e){return process.stderr.write(i.formatWithOptions(t.inspectOpts,...e)+"\n")},t.formatArgs=function(n){const{namespace:a,useColors:i}=this;if(i){const t=this.color,i="[3"+(t<8?t:"8;5;"+t),o=` ${i};1m${a} [0m`;n[0]=o+n[0].split("\n").join("\n"+o),n.push(i+"m+"+e.exports.humanize(this.diff)+"[0m")}else n[0]=function(){if(t.inspectOpts.hideDate)return"";return(new Date).toISOString()+" "}()+a+" "+n[0]},t.save=function(e){e?process.env.DEBUG=e:delete process.env.DEBUG},t.load=function(){return process.env.DEBUG},t.useColors=function(){return"colors"in t.inspectOpts?Boolean(t.inspectOpts.colors):a.isatty(process.stderr.fd)},t.destroy=i.deprecate((()=>{}),"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."),t.colors=[6,2,3,4,5,1];try{const e=n(7687);e&&(e.stderr||e).level>=2&&(t.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221])}catch(e){}t.inspectOpts=Object.keys(process.env).filter((e=>/^debug_/i.test(e))).reduce(((e,t)=>{const n=t.substring(6).toLowerCase().replace(/_([a-z])/g,((e,t)=>t.toUpperCase()));let a=process.env[t];return a=!!/^(yes|on|true|enabled)$/i.test(a)||!/^(no|off|false|disabled)$/i.test(a)&&("null"===a?null:Number(a)),e[n]=a,e}),{}),e.exports=n(736)(t);const{formatters:o}=e.exports;o.o=function(e){return this.inspectOpts.colors=this.useColors,i.inspect(e,this.inspectOpts).split("\n").map((e=>e.trim())).join(" ")},o.O=function(e){return this.inspectOpts.colors=this.useColors,i.inspect(e,this.inspectOpts)}},8069:(e,t,n)=>{var a=n(2203).Stream,i=n(9023);function o(){this.source=null,this.dataSize=0,this.maxDataSize=1048576,this.pauseStream=!0,this._maxDataSizeExceeded=!1,this._released=!1,this._bufferedEvents=[]}e.exports=o,i.inherits(o,a),o.create=function(e,t){var n=new this;for(var a in t=t||{})n[a]=t[a];n.source=e;var i=e.emit;return e.emit=function(){return n._handleEmit(arguments),i.apply(e,arguments)},e.on("error",(function(){})),n.pauseStream&&e.pause(),n},Object.defineProperty(o.prototype,"readable",{configurable:!0,enumerable:!0,get:function(){return this.source.readable}}),o.prototype.setEncoding=function(){return this.source.setEncoding.apply(this.source,arguments)},o.prototype.resume=function(){this._released||this.release(),this.source.resume()},o.prototype.pause=function(){this.source.pause()},o.prototype.release=function(){this._released=!0,this._bufferedEvents.forEach(function(e){this.emit.apply(this,e)}.bind(this)),this._bufferedEvents=[]},o.prototype.pipe=function(){var e=a.prototype.pipe.apply(this,arguments);return this.resume(),e},o.prototype._handleEmit=function(e){this._released?this.emit.apply(this,e):("data"===e[0]&&(this.dataSize+=e[1].length,this._checkIfMaxDataSizeExceeded()),this._bufferedEvents.push(e))},o.prototype._checkIfMaxDataSizeExceeded=function(){if(!(this._maxDataSizeExceeded||this.dataSize<=this.maxDataSize)){this._maxDataSizeExceeded=!0;var e="DelayedStream#maxDataSize of "+this.maxDataSize+" bytes exceeded.";this.emit("error",new Error(e))}}},7507:(e,t,n)=>{var a;e.exports=function(){if(!a){try{a=n(5753)("follow-redirects")}catch(e){}"function"!=typeof a&&(a=function(){})}a.apply(null,arguments)}},3164:(e,t,n)=>{var a=n(7016),i=a.URL,o=n(8611),s=n(5692),r=n(2203).Writable,c=n(2613),p=n(7507),u=!1;try{c(new i)}catch(e){u="ERR_INVALID_URL"===e.code}var l=["auth","host","hostname","href","path","pathname","port","protocol","query","search","hash"],d=["abort","aborted","connect","error","socket","timeout"],m=Object.create(null);d.forEach((function(e){m[e]=function(t,n,a){this._redirectable.emit(e,t,n,a)}}));var f=S("ERR_INVALID_URL","Invalid URL",TypeError),h=S("ERR_FR_REDIRECTION_FAILURE","Redirected request failed"),v=S("ERR_FR_TOO_MANY_REDIRECTS","Maximum number of redirects exceeded",h),b=S("ERR_FR_MAX_BODY_LENGTH_EXCEEDED","Request body larger than maxBodyLength limit"),x=S("ERR_STREAM_WRITE_AFTER_END","write after end"),y=r.prototype.destroy||w;function g(e,t){r.call(this),this._sanitizeOptions(e),this._options=e,this._ended=!1,this._ending=!1,this._redirectCount=0,this._redirects=[],this._requestBodyLength=0,this._requestBodyBuffers=[],t&&this.on("response",t);var n=this;this._onNativeResponse=function(e){try{n._processResponse(e)}catch(e){n.emit("error",e instanceof h?e:new h({cause:e}))}},this._performRequest()}function _(e){var t={maxRedirects:21,maxBodyLength:10485760},n={};return Object.keys(e).forEach((function(a){var o=a+":",s=n[o]=e[a],r=t[a]=Object.create(s);Object.defineProperties(r,{request:{value:function(e,a,s){var r;return r=e,i&&r instanceof i?e=k(e):E(e)?e=k(j(e)):(s=a,a=O(e),e={protocol:o}),T(a)&&(s=a,a=null),(a=Object.assign({maxRedirects:t.maxRedirects,maxBodyLength:t.maxBodyLength},e,a)).nativeProtocols=n,E(a.host)||E(a.hostname)||(a.hostname="::1"),c.equal(a.protocol,o,"protocol mismatch"),p("options",a),new g(a,s)},configurable:!0,enumerable:!0,writable:!0},get:{value:function(e,t,n){var a=r.request(e,t,n);return a.end(),a},configurable:!0,enumerable:!0,writable:!0}})})),t}function w(){}function j(e){var t;if(u)t=new i(e);else if(!E((t=O(a.parse(e))).protocol))throw new f({input:e});return t}function O(e){if(/^\[/.test(e.hostname)&&!/^\[[:0-9a-f]+\]$/i.test(e.hostname))throw new f({input:e.href||e});if(/^\[/.test(e.host)&&!/^\[[:0-9a-f]+\](:\d+)?$/i.test(e.host))throw new f({input:e.href||e});return e}function k(e,t){var n=t||{};for(var a of l)n[a]=e[a];return n.hostname.startsWith("[")&&(n.hostname=n.hostname.slice(1,-1)),""!==n.port&&(n.port=Number(n.port)),n.path=n.search?n.pathname+n.search:n.pathname,n}function P(e,t){var n;for(var a in t)e.test(a)&&(n=t[a],delete t[a]);return null==n?void 0:String(n).trim()}function S(e,t,n){function a(n){Error.captureStackTrace(this,this.constructor),Object.assign(this,n||{}),this.code=e,this.message=this.cause?t+": "+this.cause.message:t}return a.prototype=new(n||Error),Object.defineProperties(a.prototype,{constructor:{value:a,enumerable:!1},name:{value:"Error ["+e+"]",enumerable:!1}}),a}function R(e,t){for(var n of d)e.removeListener(n,m[n]);e.on("error",w),e.destroy(t)}function E(e){return"string"==typeof e||e instanceof String}function T(e){return"function"==typeof e}g.prototype=Object.create(r.prototype),g.prototype.abort=function(){R(this._currentRequest),this._currentRequest.abort(),this.emit("abort")},g.prototype.destroy=function(e){return R(this._currentRequest,e),y.call(this,e),this},g.prototype.write=function(e,t,n){if(this._ending)throw new x;if(!E(e)&&("object"!=typeof(a=e)||!("length"in a)))throw new TypeError("data should be a string, Buffer or Uint8Array");var a;T(t)&&(n=t,t=null),0!==e.length?this._requestBodyLength+e.length<=this._options.maxBodyLength?(this._requestBodyLength+=e.length,this._requestBodyBuffers.push({data:e,encoding:t}),this._currentRequest.write(e,t,n)):(this.emit("error",new b),this.abort()):n&&n()},g.prototype.end=function(e,t,n){if(T(e)?(n=e,e=t=null):T(t)&&(n=t,t=null),e){var a=this,i=this._currentRequest;this.write(e,t,(function(){a._ended=!0,i.end(null,null,n)})),this._ending=!0}else this._ended=this._ending=!0,this._currentRequest.end(null,null,n)},g.prototype.setHeader=function(e,t){this._options.headers[e]=t,this._currentRequest.setHeader(e,t)},g.prototype.removeHeader=function(e){delete this._options.headers[e],this._currentRequest.removeHeader(e)},g.prototype.setTimeout=function(e,t){var n=this;function a(t){t.setTimeout(e),t.removeListener("timeout",t.destroy),t.addListener("timeout",t.destroy)}function i(t){n._timeout&&clearTimeout(n._timeout),n._timeout=setTimeout((function(){n.emit("timeout"),o()}),e),a(t)}function o(){n._timeout&&(clearTimeout(n._timeout),n._timeout=null),n.removeListener("abort",o),n.removeListener("error",o),n.removeListener("response",o),n.removeListener("close",o),t&&n.removeListener("timeout",t),n.socket||n._currentRequest.removeListener("socket",i)}return t&&this.on("timeout",t),this.socket?i(this.socket):this._currentRequest.once("socket",i),this.on("socket",a),this.on("abort",o),this.on("error",o),this.on("response",o),this.on("close",o),this},["flushHeaders","getHeader","setNoDelay","setSocketKeepAlive"].forEach((function(e){g.prototype[e]=function(t,n){return this._currentRequest[e](t,n)}})),["aborted","connection","socket"].forEach((function(e){Object.defineProperty(g.prototype,e,{get:function(){return this._currentRequest[e]}})})),g.prototype._sanitizeOptions=function(e){if(e.headers||(e.headers={}),e.host&&(e.hostname||(e.hostname=e.host),delete e.host),!e.pathname&&e.path){var t=e.path.indexOf("?");t<0?e.pathname=e.path:(e.pathname=e.path.substring(0,t),e.search=e.path.substring(t))}},g.prototype._performRequest=function(){var e=this._options.protocol,t=this._options.nativeProtocols[e];if(!t)throw new TypeError("Unsupported protocol "+e);if(this._options.agents){var n=e.slice(0,-1);this._options.agent=this._options.agents[n]}var i=this._currentRequest=t.request(this._options,this._onNativeResponse);for(var o of(i._redirectable=this,d))i.on(o,m[o]);if(this._currentUrl=/^\//.test(this._options.path)?a.format(this._options):this._options.path,this._isRedirect){var s=0,r=this,c=this._requestBodyBuffers;!function e(t){if(i===r._currentRequest)if(t)r.emit("error",t);else if(s<c.length){var n=c[s++];i.finished||i.write(n.data,n.encoding,e)}else r._ended&&i.end()}()}},g.prototype._processResponse=function(e){var t=e.statusCode;this._options.trackRedirects&&this._redirects.push({url:this._currentUrl,headers:e.headers,statusCode:t});var n,o=e.headers.location;if(!o||!1===this._options.followRedirects||t<300||t>=400)return e.responseUrl=this._currentUrl,e.redirects=this._redirects,this.emit("response",e),void(this._requestBodyBuffers=[]);if(R(this._currentRequest),e.destroy(),++this._redirectCount>this._options.maxRedirects)throw new v;var s=this._options.beforeRedirect;s&&(n=Object.assign({Host:e.req.getHeader("host")},this._options.headers));var r=this._options.method;((301===t||302===t)&&"POST"===this._options.method||303===t&&!/^(?:GET|HEAD)$/.test(this._options.method))&&(this._options.method="GET",this._requestBodyBuffers=[],P(/^content-/i,this._options.headers));var l,d,m=P(/^host$/i,this._options.headers),f=j(this._currentUrl),h=m||f.host,b=/^\w+:/.test(o)?this._currentUrl:a.format(Object.assign(f,{host:h})),x=(l=o,d=b,u?new i(l,d):j(a.resolve(d,l)));if(p("redirecting to",x.href),this._isRedirect=!0,k(x,this._options),(x.protocol!==f.protocol&&"https:"!==x.protocol||x.host!==h&&!function(e,t){c(E(e)&&E(t));var n=e.length-t.length-1;return n>0&&"."===e[n]&&e.endsWith(t)}(x.host,h))&&P(/^(?:(?:proxy-)?authorization|cookie)$/i,this._options.headers),T(s)){var y={headers:e.headers,statusCode:t},g={url:b,method:r,headers:n};s(this._options,y,g),this._sanitizeOptions(this._options)}this._performRequest()},e.exports=_({http:o,https:s}),e.exports.wrap=_},5884:e=>{"use strict";e.exports=(e,t)=>{t=t||process.argv;const n=e.startsWith("-")?"":1===e.length?"-":"--",a=t.indexOf(n+e),i=t.indexOf("--");return-1!==a&&(-1===i||a<i)}},7598:(e,t,n)=>{e.exports=n(1813)},6049:(e,t,n)=>{"use strict";var a,i,o,s=n(7598),r=n(6928).extname,c=/^\s*([^;\s]*)(?:;|\s|$)/,p=/^text\//i;function u(e){if(!e||"string"!=typeof e)return!1;var t=c.exec(e),n=t&&s[t[1].toLowerCase()];return n&&n.charset?n.charset:!(!t||!p.test(t[1]))&&"UTF-8"}t.charset=u,t.charsets={lookup:u},t.contentType=function(e){if(!e||"string"!=typeof e)return!1;var n=-1===e.indexOf("/")?t.lookup(e):e;if(!n)return!1;if(-1===n.indexOf("charset")){var a=t.charset(n);a&&(n+="; charset="+a.toLowerCase())}return n},t.extension=function(e){if(!e||"string"!=typeof e)return!1;var n=c.exec(e),a=n&&t.extensions[n[1].toLowerCase()];if(!a||!a.length)return!1;return a[0]},t.extensions=Object.create(null),t.lookup=function(e){if(!e||"string"!=typeof e)return!1;var n=r("x."+e).toLowerCase().substr(1);if(!n)return!1;return t.types[n]||!1},t.types=Object.create(null),a=t.extensions,i=t.types,o=["nginx","apache",void 0,"iana"],Object.keys(s).forEach((function(e){var t=s[e],n=t.extensions;if(n&&n.length){a[e]=n;for(var r=0;r<n.length;r++){var c=n[r];if(i[c]){var p=o.indexOf(s[i[c]].source),u=o.indexOf(t.source);if("application/octet-stream"!==i[c]&&(p>u||p===u&&"application/"===i[c].substr(0,12)))continue}i[c]=e}}}))},6585:e=>{var t=1e3,n=60*t,a=60*n,i=24*a,o=7*i,s=365.25*i;function r(e,t,n,a){var i=t>=1.5*n;return Math.round(e/n)+" "+a+(i?"s":"")}e.exports=function(e,c){c=c||{};var p=typeof e;if("string"===p&&e.length>0)return function(e){if((e=String(e)).length>100)return;var r=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(e);if(!r)return;var c=parseFloat(r[1]);switch((r[2]||"ms").toLowerCase()){case"years":case"year":case"yrs":case"yr":case"y":return c*s;case"weeks":case"week":case"w":return c*o;case"days":case"day":case"d":return c*i;case"hours":case"hour":case"hrs":case"hr":case"h":return c*a;case"minutes":case"minute":case"mins":case"min":case"m":return c*n;case"seconds":case"second":case"secs":case"sec":case"s":return c*t;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return c;default:return}}(e);if("number"===p&&isFinite(e))return c.long?function(e){var o=Math.abs(e);if(o>=i)return r(e,o,i,"day");if(o>=a)return r(e,o,a,"hour");if(o>=n)return r(e,o,n,"minute");if(o>=t)return r(e,o,t,"second");return e+" ms"}(e):function(e){var o=Math.abs(e);if(o>=i)return Math.round(e/i)+"d";if(o>=a)return Math.round(e/a)+"h";if(o>=n)return Math.round(e/n)+"m";if(o>=t)return Math.round(e/t)+"s";return e+"ms"}(e);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(e))}},6504:(e,t,n)=>{"use strict";var a=n(7016).parse,i={ftp:21,gopher:70,http:80,https:443,ws:80,wss:443},o=String.prototype.endsWith||function(e){return e.length<=this.length&&-1!==this.indexOf(e,this.length-e.length)};function s(e){return process.env[e.toLowerCase()]||process.env[e.toUpperCase()]||""}t.getProxyForUrl=function(e){var t="string"==typeof e?a(e):e||{},n=t.protocol,r=t.host,c=t.port;if("string"!=typeof r||!r||"string"!=typeof n)return"";if(n=n.split(":",1)[0],!function(e,t){var n=(s("npm_config_no_proxy")||s("no_proxy")).toLowerCase();if(!n)return!0;if("*"===n)return!1;return n.split(/[,\s]/).every((function(n){if(!n)return!0;var a=n.match(/^(.+):(\d+)$/),i=a?a[1]:n,s=a?parseInt(a[2]):0;return!(!s||s===t)||(/^[.*]/.test(i)?("*"===i.charAt(0)&&(i=i.slice(1)),!o.call(e,i)):e!==i)}))}(r=r.replace(/:\d*$/,""),c=parseInt(c)||i[n]||0))return"";var p=s("npm_config_"+n+"_proxy")||s(n+"_proxy")||s("npm_config_proxy")||s("all_proxy");return p&&-1===p.indexOf("://")&&(p=n+"://"+p),p}},7687:(e,t,n)=>{"use strict";const a=n(857),i=n(5884),o=process.env;let s;function r(e){const t=function(e){if(!1===s)return 0;if(i("color=16m")||i("color=full")||i("color=truecolor"))return 3;if(i("color=256"))return 2;if(e&&!e.isTTY&&!0!==s)return 0;const t=s?1:0;if("win32"===process.platform){const e=a.release().split(".");return Number(process.versions.node.split(".")[0])>=8&&Number(e[0])>=10&&Number(e[2])>=10586?Number(e[2])>=14931?3:2:1}if("CI"in o)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI"].some((e=>e in o))||"codeship"===o.CI_NAME?1:t;if("TEAMCITY_VERSION"in o)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(o.TEAMCITY_VERSION)?1:0;if("truecolor"===o.COLORTERM)return 3;if("TERM_PROGRAM"in o){const e=parseInt((o.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(o.TERM_PROGRAM){case"iTerm.app":return e>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(o.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(o.TERM)||"COLORTERM"in o?1:(o.TERM,t)}(e);return function(e){return 0!==e&&{level:e,hasBasic:!0,has256:e>=2,has16m:e>=3}}(t)}i("no-color")||i("no-colors")||i("color=false")?s=!1:(i("color")||i("colors")||i("color=true")||i("color=always"))&&(s=!0),"FORCE_COLOR"in o&&(s=0===o.FORCE_COLOR.length||0!==parseInt(o.FORCE_COLOR,10)),e.exports={supportsColor:r,stdout:r(process.stdout),stderr:r(process.stderr)}},5469:function(e,t,n){var a,i,o;o=function(){return function(){return function(e){var t=[];if(0===e.length)return"";if("string"!=typeof e[0])throw new TypeError("Url must be a string. Received "+e[0]);if(e[0].match(/^[^/:]+:\/*$/)&&e.length>1){var n=e.shift();e[0]=n+e[0]}e[0].match(/^file:\/\/\//)?e[0]=e[0].replace(/^([^/:]+):\/*/,"$1:///"):e[0]=e[0].replace(/^([^/:]+):\/*/,"$1://");for(var a=0;a<e.length;a++){var i=e[a];if("string"!=typeof i)throw new TypeError("Url must be a string. Received "+i);""!==i&&(a>0&&(i=i.replace(/^[\/]+/,"")),i=a<e.length-1?i.replace(/[\/]+$/,""):i.replace(/[\/]+$/,"/"),t.push(i))}var o=t.join("/"),s=(o=o.replace(/\/(\?|&|#[^!])/g,"$1")).split("?");return s.shift()+(s.length>0?"?":"")+s.join("&")}("object"==typeof arguments[0]?arguments[0]:[].slice.call(arguments))}},e.exports?e.exports=o():void 0===(i="function"==typeof(a=o)?a.call(t,n,t,e):a)||(e.exports=i)},2613:e=>{"use strict";e.exports=require("assert")},4434:e=>{"use strict";e.exports=require("events")},9896:e=>{"use strict";e.exports=require("fs")},8611:e=>{"use strict";e.exports=require("http")},5692:e=>{"use strict";e.exports=require("https")},857:e=>{"use strict";e.exports=require("os")},6928:e=>{"use strict";e.exports=require("path")},2203:e=>{"use strict";e.exports=require("stream")},2018:e=>{"use strict";e.exports=require("tty")},7016:e=>{"use strict";e.exports=require("url")},9023:e=>{"use strict";e.exports=require("util")},3106:e=>{"use strict";e.exports=require("zlib")},9329:(e,t,n)=>{"use strict";const a=n(5293),i=n(7016),o=n(6504),s=n(8611),r=n(5692),c=n(9023),p=n(3164),u=n(3106),l=n(2203),d=n(4434);function m(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}const f=m(a),h=m(i),v=m(s),b=m(r),x=m(c),y=m(p),g=m(u),_=m(l);function w(e,t){return function(){return e.apply(t,arguments)}}const{toString:j}=Object.prototype,{getPrototypeOf:O}=Object,k=(P=Object.create(null),e=>{const t=j.call(e);return P[t]||(P[t]=t.slice(8,-1).toLowerCase())});var P;const S=e=>(e=e.toLowerCase(),t=>k(t)===e),R=e=>t=>typeof t===e,{isArray:E}=Array,T=R("undefined");const C=S("ArrayBuffer");const q=R("string"),D=R("function"),M=R("number"),A=e=>null!==e&&"object"==typeof e,F=e=>{if("object"!==k(e))return!1;const t=O(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||Symbol.toStringTag in e||Symbol.iterator in e)},B=S("Date"),L=S("File"),z=S("Blob"),U=S("FileList"),N=S("URLSearchParams"),[I,W,H,V]=["ReadableStream","Request","Response","Headers"].map(S);function $(e,t,{allOwnKeys:n=!1}={}){if(null==e)return;let a,i;if("object"!=typeof e&&(e=[e]),E(e))for(a=0,i=e.length;a<i;a++)t.call(null,e[a],a,e);else{const i=n?Object.getOwnPropertyNames(e):Object.keys(e),o=i.length;let s;for(a=0;a<o;a++)s=i[a],t.call(null,e[s],s,e)}}function G(e,t){t=t.toLowerCase();const n=Object.keys(e);let a,i=n.length;for(;i-- >0;)if(a=n[i],t===a.toLowerCase())return a;return null}const K="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,J=e=>!T(e)&&e!==K;const Q=(Y="undefined"!=typeof Uint8Array&&O(Uint8Array),e=>Y&&e instanceof Y);var Y;const X=S("HTMLFormElement"),Z=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),ee=S("RegExp"),te=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),a={};$(n,((n,i)=>{let o;!1!==(o=t(n,i,e))&&(a[i]=o||n)})),Object.defineProperties(e,a)},ne="abcdefghijklmnopqrstuvwxyz",ae="0123456789",ie={DIGIT:ae,ALPHA:ne,ALPHA_DIGIT:ne+ne.toUpperCase()+ae};const oe=S("AsyncFunction"),se=(re="function"==typeof setImmediate,ce=D(K.postMessage),re?setImmediate:ce?(pe=`axios@${Math.random()}`,ue=[],K.addEventListener("message",(({source:e,data:t})=>{e===K&&t===pe&&ue.length&&ue.shift()()}),!1),e=>{ue.push(e),K.postMessage(pe,"*")}):e=>setTimeout(e));var re,ce,pe,ue;const le="undefined"!=typeof queueMicrotask?queueMicrotask.bind(K):"undefined"!=typeof process&&process.nextTick||se,de={isArray:E,isArrayBuffer:C,isBuffer:function(e){return null!==e&&!T(e)&&null!==e.constructor&&!T(e.constructor)&&D(e.constructor.isBuffer)&&e.constructor.isBuffer(e)},isFormData:e=>{let t;return e&&("function"==typeof FormData&&e instanceof FormData||D(e.append)&&("formdata"===(t=k(e))||"object"===t&&D(e.toString)&&"[object FormData]"===e.toString()))},isArrayBufferView:function(e){let t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&C(e.buffer),t},isString:q,isNumber:M,isBoolean:e=>!0===e||!1===e,isObject:A,isPlainObject:F,isReadableStream:I,isRequest:W,isResponse:H,isHeaders:V,isUndefined:T,isDate:B,isFile:L,isBlob:z,isRegExp:ee,isFunction:D,isStream:e=>A(e)&&D(e.pipe),isURLSearchParams:N,isTypedArray:Q,isFileList:U,forEach:$,merge:function e(){const{caseless:t}=J(this)&&this||{},n={},a=(a,i)=>{const o=t&&G(n,i)||i;F(n[o])&&F(a)?n[o]=e(n[o],a):F(a)?n[o]=e({},a):E(a)?n[o]=a.slice():n[o]=a};for(let e=0,t=arguments.length;e<t;e++)arguments[e]&&$(arguments[e],a);return n},extend:(e,t,n,{allOwnKeys:a}={})=>($(t,((t,a)=>{n&&D(t)?e[a]=w(t,n):e[a]=t}),{allOwnKeys:a}),e),trim:e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),stripBOM:e=>(65279===e.charCodeAt(0)&&(e=e.slice(1)),e),inherits:(e,t,n,a)=>{e.prototype=Object.create(t.prototype,a),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},toFlatObject:(e,t,n,a)=>{let i,o,s;const r={};if(t=t||{},null==e)return t;do{for(i=Object.getOwnPropertyNames(e),o=i.length;o-- >0;)s=i[o],a&&!a(s,e,t)||r[s]||(t[s]=e[s],r[s]=!0);e=!1!==n&&O(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},kindOf:k,kindOfTest:S,endsWith:(e,t,n)=>{e=String(e),(void 0===n||n>e.length)&&(n=e.length),n-=t.length;const a=e.indexOf(t,n);return-1!==a&&a===n},toArray:e=>{if(!e)return null;if(E(e))return e;let t=e.length;if(!M(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},forEachEntry:(e,t)=>{const n=(e&&e[Symbol.iterator]).call(e);let a;for(;(a=n.next())&&!a.done;){const n=a.value;t.call(e,n[0],n[1])}},matchAll:(e,t)=>{let n;const a=[];for(;null!==(n=e.exec(t));)a.push(n);return a},isHTMLForm:X,hasOwnProperty:Z,hasOwnProp:Z,reduceDescriptors:te,freezeMethods:e=>{te(e,((t,n)=>{if(D(e)&&-1!==["arguments","caller","callee"].indexOf(n))return!1;const a=e[n];D(a)&&(t.enumerable=!1,"writable"in t?t.writable=!1:t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")}))}))},toObjectSet:(e,t)=>{const n={},a=e=>{e.forEach((e=>{n[e]=!0}))};return E(e)?a(e):a(String(e).split(t)),n},toCamelCase:e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,(function(e,t,n){return t.toUpperCase()+n})),noop:()=>{},toFiniteNumber:(e,t)=>null!=e&&Number.isFinite(e=+e)?e:t,findKey:G,global:K,isContextDefined:J,ALPHABET:ie,generateString:(e=16,t=ie.ALPHA_DIGIT)=>{let n="";const{length:a}=t;for(;e--;)n+=t[Math.random()*a|0];return n},isSpecCompliantForm:function(e){return!!(e&&D(e.append)&&"FormData"===e[Symbol.toStringTag]&&e[Symbol.iterator])},toJSONObject:e=>{const t=new Array(10),n=(e,a)=>{if(A(e)){if(t.indexOf(e)>=0)return;if(!("toJSON"in e)){t[a]=e;const i=E(e)?[]:{};return $(e,((e,t)=>{const o=n(e,a+1);!T(o)&&(i[t]=o)})),t[a]=void 0,i}}return e};return n(e,0)},isAsyncFn:oe,isThenable:e=>e&&(A(e)||D(e))&&D(e.then)&&D(e.catch),setImmediate:se,asap:le};function me(e,t,n,a,i){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack,this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),a&&(this.request=a),i&&(this.response=i)}de.inherits(me,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:de.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});const fe=me.prototype,he={};function ve(e){return de.isPlainObject(e)||de.isArray(e)}function be(e){return de.endsWith(e,"[]")?e.slice(0,-2):e}function xe(e,t,n){return e?e.concat(t).map((function(e,t){return e=be(e),!n&&t?"["+e+"]":e})).join(n?".":""):t}["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach((e=>{he[e]={value:e}})),Object.defineProperties(me,he),Object.defineProperty(fe,"isAxiosError",{value:!0}),me.from=(e,t,n,a,i,o)=>{const s=Object.create(fe);return de.toFlatObject(e,s,(function(e){return e!==Error.prototype}),(e=>"isAxiosError"!==e)),me.call(s,e.message,t,n,a,i),s.cause=e,s.name=e.name,o&&Object.assign(s,o),s};const ye=de.toFlatObject(de,{},null,(function(e){return/^is[A-Z]/.test(e)}));function ge(e,t,n){if(!de.isObject(e))throw new TypeError("target must be an object");t=t||new(f.default||FormData);const a=(n=de.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,(function(e,t){return!de.isUndefined(t[e])}))).metaTokens,i=n.visitor||p,o=n.dots,s=n.indexes,r=(n.Blob||"undefined"!=typeof Blob&&Blob)&&de.isSpecCompliantForm(t);if(!de.isFunction(i))throw new TypeError("visitor must be a function");function c(e){if(null===e)return"";if(de.isDate(e))return e.toISOString();if(!r&&de.isBlob(e))throw new me("Blob is not supported. Use a Buffer instead.");return de.isArrayBuffer(e)||de.isTypedArray(e)?r&&"function"==typeof Blob?new Blob([e]):Buffer.from(e):e}function p(e,n,i){let r=e;if(e&&!i&&"object"==typeof e)if(de.endsWith(n,"{}"))n=a?n:n.slice(0,-2),e=JSON.stringify(e);else if(de.isArray(e)&&function(e){return de.isArray(e)&&!e.some(ve)}(e)||(de.isFileList(e)||de.endsWith(n,"[]"))&&(r=de.toArray(e)))return n=be(n),r.forEach((function(e,a){!de.isUndefined(e)&&null!==e&&t.append(!0===s?xe([n],a,o):null===s?n:n+"[]",c(e))})),!1;return!!ve(e)||(t.append(xe(i,n,o),c(e)),!1)}const u=[],l=Object.assign(ye,{defaultVisitor:p,convertValue:c,isVisitable:ve});if(!de.isObject(e))throw new TypeError("data must be an object");return function e(n,a){if(!de.isUndefined(n)){if(-1!==u.indexOf(n))throw Error("Circular reference detected in "+a.join("."));u.push(n),de.forEach(n,(function(n,o){!0===(!(de.isUndefined(n)||null===n)&&i.call(t,n,de.isString(o)?o.trim():o,a,l))&&e(n,a?a.concat(o):[o])})),u.pop()}}(e),t}function _e(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,(function(e){return t[e]}))}function we(e,t){this._pairs=[],e&&ge(e,this,t)}const je=we.prototype;function Oe(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function ke(e,t,n){if(!t)return e;const a=n&&n.encode||Oe,i=n&&n.serialize;let o;if(o=i?i(t,n):de.isURLSearchParams(t)?t.toString():new we(t,n).toString(a),o){const t=e.indexOf("#");-1!==t&&(e=e.slice(0,t)),e+=(-1===e.indexOf("?")?"?":"&")+o}return e}je.append=function(e,t){this._pairs.push([e,t])},je.toString=function(e){const t=e?function(t){return e.call(this,t,_e)}:_e;return this._pairs.map((function(e){return t(e[0])+"="+t(e[1])}),"").join("&")};const Pe=class InterceptorManager{constructor(){this.handlers=[]}use(e,t,n){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){de.forEach(this.handlers,(function(t){null!==t&&e(t)}))}},Se={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},Re={isNode:!0,classes:{URLSearchParams:h.default.URLSearchParams,FormData:f.default,Blob:"undefined"!=typeof Blob&&Blob||null},protocols:["http","https","file","data"]},Ee="undefined"!=typeof window&&"undefined"!=typeof document,Te=(Ce="undefined"!=typeof navigator&&navigator.product,Ee&&["ReactNative","NativeScript","NS"].indexOf(Ce)<0);var Ce;const qe="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts,De=Ee&&window.location.href||"http://localhost",Me={...Object.freeze({__proto__:null,hasBrowserEnv:Ee,hasStandardBrowserWebWorkerEnv:qe,hasStandardBrowserEnv:Te,origin:De}),...Re};function Ae(e){function t(e,n,a,i){let o=e[i++];if("__proto__"===o)return!0;const s=Number.isFinite(+o),r=i>=e.length;if(o=!o&&de.isArray(a)?a.length:o,r)return de.hasOwnProp(a,o)?a[o]=[a[o],n]:a[o]=n,!s;a[o]&&de.isObject(a[o])||(a[o]=[]);return t(e,n,a[o],i)&&de.isArray(a[o])&&(a[o]=function(e){const t={},n=Object.keys(e);let a;const i=n.length;let o;for(a=0;a<i;a++)o=n[a],t[o]=e[o];return t}(a[o])),!s}if(de.isFormData(e)&&de.isFunction(e.entries)){const n={};return de.forEachEntry(e,((e,a)=>{t(function(e){return de.matchAll(/\w+|\[(\w*)]/g,e).map((e=>"[]"===e[0]?"":e[1]||e[0]))}(e),a,n,0)})),n}return null}const Fe={transitional:Se,adapter:["xhr","http","fetch"],transformRequest:[function(e,t){const n=t.getContentType()||"",a=n.indexOf("application/json")>-1,i=de.isObject(e);i&&de.isHTMLForm(e)&&(e=new FormData(e));if(de.isFormData(e))return a?JSON.stringify(Ae(e)):e;if(de.isArrayBuffer(e)||de.isBuffer(e)||de.isStream(e)||de.isFile(e)||de.isBlob(e)||de.isReadableStream(e))return e;if(de.isArrayBufferView(e))return e.buffer;if(de.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let o;if(i){if(n.indexOf("application/x-www-form-urlencoded")>-1)return function(e,t){return ge(e,new Me.classes.URLSearchParams,Object.assign({visitor:function(e,t,n,a){return Me.isNode&&de.isBuffer(e)?(this.append(t,e.toString("base64")),!1):a.defaultVisitor.apply(this,arguments)}},t))}(e,this.formSerializer).toString();if((o=de.isFileList(e))||n.indexOf("multipart/form-data")>-1){const t=this.env&&this.env.FormData;return ge(o?{"files[]":e}:e,t&&new t,this.formSerializer)}}return i||a?(t.setContentType("application/json",!1),function(e,t,n){if(de.isString(e))try{return(t||JSON.parse)(e),de.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(n||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){const t=this.transitional||Fe.transitional,n=t&&t.forcedJSONParsing,a="json"===this.responseType;if(de.isResponse(e)||de.isReadableStream(e))return e;if(e&&de.isString(e)&&(n&&!this.responseType||a)){const n=!(t&&t.silentJSONParsing)&&a;try{return JSON.parse(e)}catch(e){if(n){if("SyntaxError"===e.name)throw me.from(e,me.ERR_BAD_RESPONSE,this,null,this.response);throw e}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:Me.classes.FormData,Blob:Me.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};de.forEach(["delete","get","head","post","put","patch"],(e=>{Fe.headers[e]={}}));const Be=Fe,Le=de.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),ze=Symbol("internals");function Ue(e){return e&&String(e).trim().toLowerCase()}function Ne(e){return!1===e||null==e?e:de.isArray(e)?e.map(Ne):String(e)}function Ie(e,t,n,a,i){return de.isFunction(a)?a.call(this,t,n):(i&&(t=n),de.isString(t)?de.isString(a)?-1!==t.indexOf(a):de.isRegExp(a)?a.test(t):void 0:void 0)}class AxiosHeaders{constructor(e){e&&this.set(e)}set(e,t,n){const a=this;function i(e,t,n){const i=Ue(t);if(!i)throw new Error("header name must be a non-empty string");const o=de.findKey(a,i);(!o||void 0===a[o]||!0===n||void 0===n&&!1!==a[o])&&(a[o||t]=Ne(e))}const o=(e,t)=>de.forEach(e,((e,n)=>i(e,n,t)));if(de.isPlainObject(e)||e instanceof this.constructor)o(e,t);else if(de.isString(e)&&(e=e.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim()))o((e=>{const t={};let n,a,i;return e&&e.split("\n").forEach((function(e){i=e.indexOf(":"),n=e.substring(0,i).trim().toLowerCase(),a=e.substring(i+1).trim(),!n||t[n]&&Le[n]||("set-cookie"===n?t[n]?t[n].push(a):t[n]=[a]:t[n]=t[n]?t[n]+", "+a:a)})),t})(e),t);else if(de.isHeaders(e))for(const[t,a]of e.entries())i(a,t,n);else null!=e&&i(t,e,n);return this}get(e,t){if(e=Ue(e)){const n=de.findKey(this,e);if(n){const e=this[n];if(!t)return e;if(!0===t)return function(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let a;for(;a=n.exec(e);)t[a[1]]=a[2];return t}(e);if(de.isFunction(t))return t.call(this,e,n);if(de.isRegExp(t))return t.exec(e);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){if(e=Ue(e)){const n=de.findKey(this,e);return!(!n||void 0===this[n]||t&&!Ie(0,this[n],n,t))}return!1}delete(e,t){const n=this;let a=!1;function i(e){if(e=Ue(e)){const i=de.findKey(n,e);!i||t&&!Ie(0,n[i],i,t)||(delete n[i],a=!0)}}return de.isArray(e)?e.forEach(i):i(e),a}clear(e){const t=Object.keys(this);let n=t.length,a=!1;for(;n--;){const i=t[n];e&&!Ie(0,this[i],i,e,!0)||(delete this[i],a=!0)}return a}normalize(e){const t=this,n={};return de.forEach(this,((a,i)=>{const o=de.findKey(n,i);if(o)return t[o]=Ne(a),void delete t[i];const s=e?function(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,((e,t,n)=>t.toUpperCase()+n))}(i):String(i).trim();s!==i&&delete t[i],t[s]=Ne(a),n[s]=!0})),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const t=Object.create(null);return de.forEach(this,((n,a)=>{null!=n&&!1!==n&&(t[a]=e&&de.isArray(n)?n.join(", "):n)})),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map((([e,t])=>e+": "+t)).join("\n")}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){const n=new this(e);return t.forEach((e=>n.set(e))),n}static accessor(e){const t=(this[ze]=this[ze]={accessors:{}}).accessors,n=this.prototype;function a(e){const a=Ue(e);t[a]||(!function(e,t){const n=de.toCamelCase(" "+t);["get","set","has"].forEach((a=>{Object.defineProperty(e,a+n,{value:function(e,n,i){return this[a].call(this,t,e,n,i)},configurable:!0})}))}(n,e),t[a]=!0)}return de.isArray(e)?e.forEach(a):a(e),this}}AxiosHeaders.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),de.reduceDescriptors(AxiosHeaders.prototype,(({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(e){this[n]=e}}})),de.freezeMethods(AxiosHeaders);const We=AxiosHeaders;function He(e,t){const n=this||Be,a=t||n,i=We.from(a.headers);let o=a.data;return de.forEach(e,(function(e){o=e.call(n,o,i.normalize(),t?t.status:void 0)})),i.normalize(),o}function Ve(e){return!(!e||!e.__CANCEL__)}function $e(e,t,n){me.call(this,null==e?"canceled":e,me.ERR_CANCELED,t,n),this.name="CanceledError"}function Ge(e,t,n){const a=n.config.validateStatus;n.status&&a&&!a(n.status)?t(new me("Request failed with status code "+n.status,[me.ERR_BAD_REQUEST,me.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n)):e(n)}function Ke(e,t){return e&&!function(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}(t)?function(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}(e,t):t}de.inherits($e,me,{__CANCEL__:!0});const Je="1.7.4";function Qe(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}const Ye=/^(?:([^;]+);)?(?:[^;]+;)?(base64|),([\s\S]*)$/;const Xe=Symbol("internals");class AxiosTransformStream extends _.default.Transform{constructor(e){super({readableHighWaterMark:(e=de.toFlatObject(e,{maxRate:0,chunkSize:65536,minChunkSize:100,timeWindow:500,ticksRate:2,samplesCount:15},null,((e,t)=>!de.isUndefined(t[e])))).chunkSize});const t=this[Xe]={timeWindow:e.timeWindow,chunkSize:e.chunkSize,maxRate:e.maxRate,minChunkSize:e.minChunkSize,bytesSeen:0,isCaptured:!1,notifiedBytesLoaded:0,ts:Date.now(),bytes:0,onReadCallback:null};this.on("newListener",(e=>{"progress"===e&&(t.isCaptured||(t.isCaptured=!0))}))}_read(e){const t=this[Xe];return t.onReadCallback&&t.onReadCallback(),super._read(e)}_transform(e,t,n){const a=this[Xe],i=a.maxRate,o=this.readableHighWaterMark,s=a.timeWindow,r=i/(1e3/s),c=!1!==a.minChunkSize?Math.max(a.minChunkSize,.01*r):0,p=(e,t)=>{const n=Buffer.byteLength(e);a.bytesSeen+=n,a.bytes+=n,a.isCaptured&&this.emit("progress",a.bytesSeen),this.push(e)?process.nextTick(t):a.onReadCallback=()=>{a.onReadCallback=null,process.nextTick(t)}},u=(e,t)=>{const n=Buffer.byteLength(e);let u,l=null,d=o,m=0;if(i){const e=Date.now();(!a.ts||(m=e-a.ts)>=s)&&(a.ts=e,u=r-a.bytes,a.bytes=u<0?-u:0,m=0),u=r-a.bytes}if(i){if(u<=0)return setTimeout((()=>{t(null,e)}),s-m);u<d&&(d=u)}d&&n>d&&n-d>c&&(l=e.subarray(d),e=e.subarray(0,d)),p(e,l?()=>{process.nextTick(t,null,l)}:t)};u(e,(function e(t,a){if(t)return n(t);a?u(a,e):n(null)}))}}const Ze=AxiosTransformStream,{asyncIterator:et}=Symbol,tt=async function*(e){e.stream?yield*e.stream():e.arrayBuffer?yield await e.arrayBuffer():e[et]?yield*e[et]():yield e},nt=de.ALPHABET.ALPHA_DIGIT+"-_",at=new c.TextEncoder,it="\r\n",ot=at.encode(it);class FormDataPart{constructor(e,t){const{escapeName:n}=this.constructor,a=de.isString(t);let i=`Content-Disposition: form-data; name="${n(e)}"${!a&&t.name?`; filename="${n(t.name)}"`:""}${it}`;a?t=at.encode(String(t).replace(/\r?\n|\r\n?/g,it)):i+=`Content-Type: ${t.type||"application/octet-stream"}${it}`,this.headers=at.encode(i+it),this.contentLength=a?t.byteLength:t.size,this.size=this.headers.byteLength+this.contentLength+2,this.name=e,this.value=t}async*encode(){yield this.headers;const{value:e}=this;de.isTypedArray(e)?yield e:yield*tt(e),yield ot}static escapeName(e){return String(e).replace(/[\r\n"]/g,(e=>({"\r":"%0D","\n":"%0A",'"':"%22"}[e])))}}const st=(e,t,n)=>{const{tag:a="form-data-boundary",size:i=25,boundary:o=a+"-"+de.generateString(i,nt)}=n||{};if(!de.isFormData(e))throw TypeError("FormData instance required");if(o.length<1||o.length>70)throw Error("boundary must be 10-70 characters long");const s=at.encode("--"+o+it),r=at.encode("--"+o+"--"+it+it);let c=r.byteLength;const p=Array.from(e.entries()).map((([e,t])=>{const n=new FormDataPart(e,t);return c+=n.size,n}));c+=s.byteLength*p.length,c=de.toFiniteNumber(c);const u={"Content-Type":`multipart/form-data; boundary=${o}`};return Number.isFinite(c)&&(u["Content-Length"]=c),t&&t(u),l.Readable.from(async function*(){for(const e of p)yield s,yield*e.encode();yield r}())};class ZlibHeaderTransformStream extends _.default.Transform{__transform(e,t,n){this.push(e),n()}_transform(e,t,n){if(0!==e.length&&(this._transform=this.__transform,120!==e[0])){const e=Buffer.alloc(2);e[0]=120,e[1]=156,this.push(e,t)}this.__transform(e,t,n)}}const rt=ZlibHeaderTransformStream,ct=(e,t)=>de.isAsyncFn(e)?function(...n){const a=n.pop();e.apply(this,n).then((e=>{try{t?a(null,...t(e)):a(null,e)}catch(e){a(e)}}),a)}:e;const pt=(e,t,n=3)=>{let a=0;const i=function(e,t){e=e||10;const n=new Array(e),a=new Array(e);let i,o=0,s=0;return t=void 0!==t?t:1e3,function(r){const c=Date.now(),p=a[s];i||(i=c),n[o]=r,a[o]=c;let u=s,l=0;for(;u!==o;)l+=n[u++],u%=e;if(o=(o+1)%e,o===s&&(s=(s+1)%e),c-i<t)return;const d=p&&c-p;return d?Math.round(1e3*l/d):void 0}}(50,250);return function(e,t){let n,a,i=0,o=1e3/t;const s=(t,o=Date.now())=>{i=o,n=null,a&&(clearTimeout(a),a=null),e.apply(null,t)};return[(...e)=>{const t=Date.now(),r=t-i;r>=o?s(e,t):(n=e,a||(a=setTimeout((()=>{a=null,s(n)}),o-r)))},()=>n&&s(n)]}((n=>{const o=n.loaded,s=n.lengthComputable?n.total:void 0,r=o-a,c=i(r);a=o;e({loaded:o,total:s,progress:s?o/s:void 0,bytes:r,rate:c||void 0,estimated:c&&s&&o<=s?(s-o)/c:void 0,event:n,lengthComputable:null!=s,[t?"download":"upload"]:!0})}),n)},ut=(e,t)=>{const n=null!=e;return[a=>t[0]({lengthComputable:n,total:e,loaded:a}),t[1]]},lt=e=>(...t)=>de.asap((()=>e(...t))),dt={flush:g.default.constants.Z_SYNC_FLUSH,finishFlush:g.default.constants.Z_SYNC_FLUSH},mt={flush:g.default.constants.BROTLI_OPERATION_FLUSH,finishFlush:g.default.constants.BROTLI_OPERATION_FLUSH},ft=de.isFunction(g.default.createBrotliDecompress),{http:ht,https:vt}=y.default,bt=/https:?/,xt=Me.protocols.map((e=>e+":")),yt=(e,[t,n])=>(e.on("end",n).on("error",n),t);function gt(e,t){e.beforeRedirects.proxy&&e.beforeRedirects.proxy(e),e.beforeRedirects.config&&e.beforeRedirects.config(e,t)}function _t(e,t,n){let a=t;if(!a&&!1!==a){const e=o.getProxyForUrl(n);e&&(a=new URL(e))}if(a){if(a.username&&(a.auth=(a.username||"")+":"+(a.password||"")),a.auth){(a.auth.username||a.auth.password)&&(a.auth=(a.auth.username||"")+":"+(a.auth.password||""));const t=Buffer.from(a.auth,"utf8").toString("base64");e.headers["Proxy-Authorization"]="Basic "+t}e.headers.host=e.hostname+(e.port?":"+e.port:"");const t=a.hostname||a.host;e.hostname=t,e.host=t,e.port=a.port,e.path=n,a.protocol&&(e.protocol=a.protocol.includes(":")?a.protocol:`${a.protocol}:`)}e.beforeRedirects.proxy=function(e){_t(e,t,e.href)}}const wt="undefined"!=typeof process&&"process"===de.kindOf(process),jt=(e,t)=>(({address:e,family:t})=>{if(!de.isString(e))throw TypeError("address must be a string");return{address:e,family:t||(e.indexOf(".")<0?6:4)}})(de.isObject(e)?e:{address:e,family:t}),Ot=wt&&function(e){return t=async function(t,n,a){let{data:i,lookup:o,family:s}=e;const{responseType:r,responseEncoding:c}=e,p=e.method.toUpperCase();let u,l,m=!1;if(o){const e=ct(o,(e=>de.isArray(e)?e:[e]));o=(t,n,a)=>{e(t,n,((e,t,i)=>{if(e)return a(e);const o=de.isArray(t)?t.map((e=>jt(e))):[jt(t,i)];n.all?a(e,o):a(e,o[0].address,o[0].family)}))}}const f=new d.EventEmitter,h=()=>{e.cancelToken&&e.cancelToken.unsubscribe(y),e.signal&&e.signal.removeEventListener("abort",y),f.removeAllListeners()};function y(t){f.emit("abort",!t||t.type?new $e(null,e,l):t)}a(((e,t)=>{u=!0,t&&(m=!0,h())})),f.once("abort",n),(e.cancelToken||e.signal)&&(e.cancelToken&&e.cancelToken.subscribe(y),e.signal&&(e.signal.aborted?y():e.signal.addEventListener("abort",y)));const w=Ke(e.baseURL,e.url),j=new URL(w,de.hasBrowserEnv?Me.origin:void 0),O=j.protocol||xt[0];if("data:"===O){let a;if("GET"!==p)return Ge(t,n,{status:405,statusText:"method not allowed",headers:{},config:e});try{a=function(e,t,n){const a=n&&n.Blob||Me.classes.Blob,i=Qe(e);if(void 0===t&&a&&(t=!0),"data"===i){e=i.length?e.slice(i.length+1):e;const n=Ye.exec(e);if(!n)throw new me("Invalid URL",me.ERR_INVALID_URL);const o=n[1],s=n[2],r=n[3],c=Buffer.from(decodeURIComponent(r),s?"base64":"utf8");if(t){if(!a)throw new me("Blob is not supported",me.ERR_NOT_SUPPORT);return new a([c],{type:o})}return c}throw new me("Unsupported protocol "+i,me.ERR_NOT_SUPPORT)}(e.url,"blob"===r,{Blob:e.env&&e.env.Blob})}catch(t){throw me.from(t,me.ERR_BAD_REQUEST,e)}return"text"===r?(a=a.toString(c),c&&"utf8"!==c||(a=de.stripBOM(a))):"stream"===r&&(a=_.default.Readable.from(a)),Ge(t,n,{data:a,status:200,statusText:"OK",headers:new We,config:e})}if(-1===xt.indexOf(O))return n(new me("Unsupported protocol "+O,me.ERR_BAD_REQUEST,e));const k=We.from(e.headers).normalize();k.set("User-Agent","axios/"+Je,!1);const{onUploadProgress:P,onDownloadProgress:S}=e,R=e.maxRate;let E,T;if(de.isSpecCompliantForm(i)){const e=k.getContentType(/boundary=([-_\w\d]{10,70})/i);i=st(i,(e=>{k.set(e)}),{tag:`axios-${Je}-boundary`,boundary:e&&e[1]||void 0})}else if(de.isFormData(i)&&de.isFunction(i.getHeaders)){if(k.set(i.getHeaders()),!k.hasContentLength())try{const e=await x.default.promisify(i.getLength).call(i);Number.isFinite(e)&&e>=0&&k.setContentLength(e)}catch(e){}}else if(de.isBlob(i))i.size&&k.setContentType(i.type||"application/octet-stream"),k.setContentLength(i.size||0),i=_.default.Readable.from(tt(i));else if(i&&!de.isStream(i)){if(Buffer.isBuffer(i));else if(de.isArrayBuffer(i))i=Buffer.from(new Uint8Array(i));else{if(!de.isString(i))return n(new me("Data after transformation must be a string, an ArrayBuffer, a Buffer, or a Stream",me.ERR_BAD_REQUEST,e));i=Buffer.from(i,"utf-8")}if(k.setContentLength(i.length,!1),e.maxBodyLength>-1&&i.length>e.maxBodyLength)return n(new me("Request body larger than maxBodyLength limit",me.ERR_BAD_REQUEST,e))}const C=de.toFiniteNumber(k.getContentLength());let q,D;de.isArray(R)?(E=R[0],T=R[1]):E=T=R,i&&(P||E)&&(de.isStream(i)||(i=_.default.Readable.from(i,{objectMode:!1})),i=_.default.pipeline([i,new Ze({maxRate:de.toFiniteNumber(E)})],de.noop),P&&i.on("progress",yt(i,ut(C,pt(lt(P),!1,3))))),e.auth&&(q=(e.auth.username||"")+":"+(e.auth.password||"")),!q&&j.username&&(q=j.username+":"+j.password),q&&k.delete("authorization");try{D=ke(j.pathname+j.search,e.params,e.paramsSerializer).replace(/^\?/,"")}catch(t){const a=new Error(t.message);return a.config=e,a.url=e.url,a.exists=!0,n(a)}k.set("Accept-Encoding","gzip, compress, deflate"+(ft?", br":""),!1);const M={path:D,method:p,headers:k.toJSON(),agents:{http:e.httpAgent,https:e.httpsAgent},auth:q,protocol:O,family:s,beforeRedirect:gt,beforeRedirects:{}};let A;!de.isUndefined(o)&&(M.lookup=o),e.socketPath?M.socketPath=e.socketPath:(M.hostname=j.hostname,M.port=j.port,_t(M,e.proxy,O+"//"+j.hostname+(j.port?":"+j.port:"")+M.path));const F=bt.test(M.protocol);if(M.agent=F?e.httpsAgent:e.httpAgent,e.transport?A=e.transport:0===e.maxRedirects?A=F?b.default:v.default:(e.maxRedirects&&(M.maxRedirects=e.maxRedirects),e.beforeRedirect&&(M.beforeRedirects.config=e.beforeRedirect),A=F?vt:ht),e.maxBodyLength>-1?M.maxBodyLength=e.maxBodyLength:M.maxBodyLength=1/0,e.insecureHTTPParser&&(M.insecureHTTPParser=e.insecureHTTPParser),l=A.request(M,(function(a){if(l.destroyed)return;const i=[a],o=+a.headers["content-length"];if(S||T){const e=new Ze({maxRate:de.toFiniteNumber(T)});S&&e.on("progress",yt(e,ut(o,pt(lt(S),!0,3)))),i.push(e)}let s=a;const u=a.req||l;if(!1!==e.decompress&&a.headers["content-encoding"])switch("HEAD"!==p&&204!==a.statusCode||delete a.headers["content-encoding"],(a.headers["content-encoding"]||"").toLowerCase()){case"gzip":case"x-gzip":case"compress":case"x-compress":i.push(g.default.createUnzip(dt)),delete a.headers["content-encoding"];break;case"deflate":i.push(new rt),i.push(g.default.createUnzip(dt)),delete a.headers["content-encoding"];break;case"br":ft&&(i.push(g.default.createBrotliDecompress(mt)),delete a.headers["content-encoding"])}s=i.length>1?_.default.pipeline(i,de.noop):i[0];const d=_.default.finished(s,(()=>{d(),h()})),v={status:a.statusCode,statusText:a.statusMessage,headers:new We(a.headers),config:e,request:u};if("stream"===r)v.data=s,Ge(t,n,v);else{const a=[];let i=0;s.on("data",(function(t){a.push(t),i+=t.length,e.maxContentLength>-1&&i>e.maxContentLength&&(m=!0,s.destroy(),n(new me("maxContentLength size of "+e.maxContentLength+" exceeded",me.ERR_BAD_RESPONSE,e,u)))})),s.on("aborted",(function(){if(m)return;const t=new me("maxContentLength size of "+e.maxContentLength+" exceeded",me.ERR_BAD_RESPONSE,e,u);s.destroy(t),n(t)})),s.on("error",(function(t){l.destroyed||n(me.from(t,null,e,u))})),s.on("end",(function(){try{let e=1===a.length?a[0]:Buffer.concat(a);"arraybuffer"!==r&&(e=e.toString(c),c&&"utf8"!==c||(e=de.stripBOM(e))),v.data=e}catch(t){return n(me.from(t,null,e,v.request,v))}Ge(t,n,v)}))}f.once("abort",(e=>{s.destroyed||(s.emit("error",e),s.destroy())}))})),f.once("abort",(e=>{n(e),l.destroy(e)})),l.on("error",(function(t){n(me.from(t,null,e,l))})),l.on("socket",(function(e){e.setKeepAlive(!0,6e4)})),e.timeout){const t=parseInt(e.timeout,10);if(Number.isNaN(t))return void n(new me("error trying to parse `config.timeout` to int",me.ERR_BAD_OPTION_VALUE,e,l));l.setTimeout(t,(function(){if(u)return;let t=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded";const a=e.transitional||Se;e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),n(new me(t,a.clarifyTimeoutError?me.ETIMEDOUT:me.ECONNABORTED,e,l)),y()}))}if(de.isStream(i)){let t=!1,n=!1;i.on("end",(()=>{t=!0})),i.once("error",(e=>{n=!0,l.destroy(e)})),i.on("close",(()=>{t||n||y(new $e("Request stream has been aborted",e,l))})),i.pipe(l)}else l.end(i)},new Promise(((e,n)=>{let a,i;const o=(e,t)=>{i||(i=!0,a&&a(e,t))},s=e=>{o(e,!0),n(e)};t((t=>{o(t),e(t)}),s,(e=>a=e)).catch(s)}));var t},kt=Me.hasStandardBrowserEnv?function(){const e=/(msie|trident)/i.test(navigator.userAgent),t=document.createElement("a");let n;function a(n){let a=n;return e&&(t.setAttribute("href",a),a=t.href),t.setAttribute("href",a),{href:t.href,protocol:t.protocol?t.protocol.replace(/:$/,""):"",host:t.host,search:t.search?t.search.replace(/^\?/,""):"",hash:t.hash?t.hash.replace(/^#/,""):"",hostname:t.hostname,port:t.port,pathname:"/"===t.pathname.charAt(0)?t.pathname:"/"+t.pathname}}return n=a(window.location.href),function(e){const t=de.isString(e)?a(e):e;return t.protocol===n.protocol&&t.host===n.host}}():function(){return!0},Pt=Me.hasStandardBrowserEnv?{write(e,t,n,a,i,o){const s=[e+"="+encodeURIComponent(t)];de.isNumber(n)&&s.push("expires="+new Date(n).toGMTString()),de.isString(a)&&s.push("path="+a),de.isString(i)&&s.push("domain="+i),!0===o&&s.push("secure"),document.cookie=s.join("; ")},read(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read:()=>null,remove(){}},St=e=>e instanceof We?{...e}:e;function Rt(e,t){t=t||{};const n={};function a(e,t,n){return de.isPlainObject(e)&&de.isPlainObject(t)?de.merge.call({caseless:n},e,t):de.isPlainObject(t)?de.merge({},t):de.isArray(t)?t.slice():t}function i(e,t,n){return de.isUndefined(t)?de.isUndefined(e)?void 0:a(void 0,e,n):a(e,t,n)}function o(e,t){if(!de.isUndefined(t))return a(void 0,t)}function s(e,t){return de.isUndefined(t)?de.isUndefined(e)?void 0:a(void 0,e):a(void 0,t)}function r(n,i,o){return o in t?a(n,i):o in e?a(void 0,n):void 0}const c={url:o,method:o,data:o,baseURL:s,transformRequest:s,transformResponse:s,paramsSerializer:s,timeout:s,timeoutMessage:s,withCredentials:s,withXSRFToken:s,adapter:s,responseType:s,xsrfCookieName:s,xsrfHeaderName:s,onUploadProgress:s,onDownloadProgress:s,decompress:s,maxContentLength:s,maxBodyLength:s,beforeRedirect:s,transport:s,httpAgent:s,httpsAgent:s,cancelToken:s,socketPath:s,responseEncoding:s,validateStatus:r,headers:(e,t)=>i(St(e),St(t),!0)};return de.forEach(Object.keys(Object.assign({},e,t)),(function(a){const o=c[a]||i,s=o(e[a],t[a],a);de.isUndefined(s)&&o!==r||(n[a]=s)})),n}const Et=e=>{const t=Rt({},e);let n,{data:a,withXSRFToken:i,xsrfHeaderName:o,xsrfCookieName:s,headers:r,auth:c}=t;if(t.headers=r=We.from(r),t.url=ke(Ke(t.baseURL,t.url),e.params,e.paramsSerializer),c&&r.set("Authorization","Basic "+btoa((c.username||"")+":"+(c.password?unescape(encodeURIComponent(c.password)):""))),de.isFormData(a))if(Me.hasStandardBrowserEnv||Me.hasStandardBrowserWebWorkerEnv)r.setContentType(void 0);else if(!1!==(n=r.getContentType())){const[e,...t]=n?n.split(";").map((e=>e.trim())).filter(Boolean):[];r.setContentType([e||"multipart/form-data",...t].join("; "))}if(Me.hasStandardBrowserEnv&&(i&&de.isFunction(i)&&(i=i(t)),i||!1!==i&&kt(t.url))){const e=o&&s&&Pt.read(s);e&&r.set(o,e)}return t},Tt="undefined"!=typeof XMLHttpRequest&&function(e){return new Promise((function(t,n){const a=Et(e);let i=a.data;const o=We.from(a.headers).normalize();let s,r,c,p,u,{responseType:l,onUploadProgress:d,onDownloadProgress:m}=a;function f(){p&&p(),u&&u(),a.cancelToken&&a.cancelToken.unsubscribe(s),a.signal&&a.signal.removeEventListener("abort",s)}let h=new XMLHttpRequest;function v(){if(!h)return;const a=We.from("getAllResponseHeaders"in h&&h.getAllResponseHeaders());Ge((function(e){t(e),f()}),(function(e){n(e),f()}),{data:l&&"text"!==l&&"json"!==l?h.response:h.responseText,status:h.status,statusText:h.statusText,headers:a,config:e,request:h}),h=null}h.open(a.method.toUpperCase(),a.url,!0),h.timeout=a.timeout,"onloadend"in h?h.onloadend=v:h.onreadystatechange=function(){h&&4===h.readyState&&(0!==h.status||h.responseURL&&0===h.responseURL.indexOf("file:"))&&setTimeout(v)},h.onabort=function(){h&&(n(new me("Request aborted",me.ECONNABORTED,e,h)),h=null)},h.onerror=function(){n(new me("Network Error",me.ERR_NETWORK,e,h)),h=null},h.ontimeout=function(){let t=a.timeout?"timeout of "+a.timeout+"ms exceeded":"timeout exceeded";const i=a.transitional||Se;a.timeoutErrorMessage&&(t=a.timeoutErrorMessage),n(new me(t,i.clarifyTimeoutError?me.ETIMEDOUT:me.ECONNABORTED,e,h)),h=null},void 0===i&&o.setContentType(null),"setRequestHeader"in h&&de.forEach(o.toJSON(),(function(e,t){h.setRequestHeader(t,e)})),de.isUndefined(a.withCredentials)||(h.withCredentials=!!a.withCredentials),l&&"json"!==l&&(h.responseType=a.responseType),m&&([c,u]=pt(m,!0),h.addEventListener("progress",c)),d&&h.upload&&([r,p]=pt(d),h.upload.addEventListener("progress",r),h.upload.addEventListener("loadend",p)),(a.cancelToken||a.signal)&&(s=t=>{h&&(n(!t||t.type?new $e(null,e,h):t),h.abort(),h=null)},a.cancelToken&&a.cancelToken.subscribe(s),a.signal&&(a.signal.aborted?s():a.signal.addEventListener("abort",s)));const b=Qe(a.url);b&&-1===Me.protocols.indexOf(b)?n(new me("Unsupported protocol "+b+":",me.ERR_BAD_REQUEST,e)):h.send(i||null)}))},Ct=(e,t)=>{let n,a=new AbortController;const i=function(e){if(!n){n=!0,s();const t=e instanceof Error?e:this.reason;a.abort(t instanceof me?t:new $e(t instanceof Error?t.message:t))}};let o=t&&setTimeout((()=>{i(new me(`timeout ${t} of ms exceeded`,me.ETIMEDOUT))}),t);const s=()=>{e&&(o&&clearTimeout(o),o=null,e.forEach((e=>{e&&(e.removeEventListener?e.removeEventListener("abort",i):e.unsubscribe(i))})),e=null)};e.forEach((e=>e&&e.addEventListener&&e.addEventListener("abort",i)));const{signal:r}=a;return r.unsubscribe=s,[r,()=>{o&&clearTimeout(o),o=null}]},qt=function*(e,t){let n=e.byteLength;if(!t||n<t)return void(yield e);let a,i=0;for(;i<n;)a=i+t,yield e.slice(i,a),i=a},Dt=(e,t,n,a,i)=>{const o=async function*(e,t,n){for await(const a of e)yield*qt(ArrayBuffer.isView(a)?a:await n(String(a)),t)}(e,t,i);let s,r=0,c=e=>{s||(s=!0,a&&a(e))};return new ReadableStream({async pull(e){try{const{done:t,value:a}=await o.next();if(t)return c(),void e.close();let i=a.byteLength;if(n){let e=r+=i;n(e)}e.enqueue(new Uint8Array(a))}catch(e){throw c(e),e}},cancel:e=>(c(e),o.return())},{highWaterMark:2})},Mt="function"==typeof fetch&&"function"==typeof Request&&"function"==typeof Response,At=Mt&&"function"==typeof ReadableStream,Ft=Mt&&("function"==typeof TextEncoder?(Bt=new TextEncoder,e=>Bt.encode(e)):async e=>new Uint8Array(await new Response(e).arrayBuffer()));var Bt;const Lt=(e,...t)=>{try{return!!e(...t)}catch(e){return!1}},zt=At&&Lt((()=>{let e=!1;const t=new Request(Me.origin,{body:new ReadableStream,method:"POST",get duplex(){return e=!0,"half"}}).headers.has("Content-Type");return e&&!t})),Ut=At&&Lt((()=>de.isReadableStream(new Response("").body))),Nt={stream:Ut&&(e=>e.body)};var It;Mt&&(It=new Response,["text","arrayBuffer","blob","formData","stream"].forEach((e=>{!Nt[e]&&(Nt[e]=de.isFunction(It[e])?t=>t[e]():(t,n)=>{throw new me(`Response type '${e}' is not supported`,me.ERR_NOT_SUPPORT,n)})})));const Wt=async(e,t)=>{const n=de.toFiniteNumber(e.getContentLength());return null==n?(async e=>null==e?0:de.isBlob(e)?e.size:de.isSpecCompliantForm(e)?(await new Request(e).arrayBuffer()).byteLength:de.isArrayBufferView(e)||de.isArrayBuffer(e)?e.byteLength:(de.isURLSearchParams(e)&&(e+=""),de.isString(e)?(await Ft(e)).byteLength:void 0))(t):n},Ht=Mt&&(async e=>{let{url:t,method:n,data:a,signal:i,cancelToken:o,timeout:s,onDownloadProgress:r,onUploadProgress:c,responseType:p,headers:u,withCredentials:l="same-origin",fetchOptions:d}=Et(e);p=p?(p+"").toLowerCase():"text";let m,f,[h,v]=i||o||s?Ct([i,o],s):[];const b=()=>{!m&&setTimeout((()=>{h&&h.unsubscribe()})),m=!0};let x;try{if(c&&zt&&"get"!==n&&"head"!==n&&0!==(x=await Wt(u,a))){let e,n=new Request(t,{method:"POST",body:a,duplex:"half"});if(de.isFormData(a)&&(e=n.headers.get("content-type"))&&u.setContentType(e),n.body){const[e,t]=ut(x,pt(lt(c)));a=Dt(n.body,65536,e,t,Ft)}}de.isString(l)||(l=l?"include":"omit"),f=new Request(t,{...d,signal:h,method:n.toUpperCase(),headers:u.normalize().toJSON(),body:a,duplex:"half",credentials:l});let i=await fetch(f);const o=Ut&&("stream"===p||"response"===p);if(Ut&&(r||o)){const e={};["status","statusText","headers"].forEach((t=>{e[t]=i[t]}));const t=de.toFiniteNumber(i.headers.get("content-length")),[n,a]=r&&ut(t,pt(lt(r),!0))||[];i=new Response(Dt(i.body,65536,n,(()=>{a&&a(),o&&b()}),Ft),e)}p=p||"text";let s=await Nt[de.findKey(Nt,p)||"text"](i,e);return!o&&b(),v&&v(),await new Promise(((t,n)=>{Ge(t,n,{data:s,headers:We.from(i.headers),status:i.status,statusText:i.statusText,config:e,request:f})}))}catch(t){if(b(),t&&"TypeError"===t.name&&/fetch/i.test(t.message))throw Object.assign(new me("Network Error",me.ERR_NETWORK,e,f),{cause:t.cause||t});throw me.from(t,t&&t.code,e,f)}}),Vt={http:Ot,xhr:Tt,fetch:Ht};de.forEach(Vt,((e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch(e){}Object.defineProperty(e,"adapterName",{value:t})}}));const $t=e=>`- ${e}`,Gt=e=>de.isFunction(e)||null===e||!1===e,Kt=e=>{e=de.isArray(e)?e:[e];const{length:t}=e;let n,a;const i={};for(let o=0;o<t;o++){let t;if(n=e[o],a=n,!Gt(n)&&(a=Vt[(t=String(n)).toLowerCase()],void 0===a))throw new me(`Unknown adapter '${t}'`);if(a)break;i[t||"#"+o]=a}if(!a){const e=Object.entries(i).map((([e,t])=>`adapter ${e} `+(!1===t?"is not supported by the environment":"is not available in the build")));throw new me("There is no suitable adapter to dispatch the request "+(t?e.length>1?"since :\n"+e.map($t).join("\n"):" "+$t(e[0]):"as no adapter specified"),"ERR_NOT_SUPPORT")}return a};function Jt(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new $e(null,e)}function Qt(e){Jt(e),e.headers=We.from(e.headers),e.data=He.call(e,e.transformRequest),-1!==["post","put","patch"].indexOf(e.method)&&e.headers.setContentType("application/x-www-form-urlencoded",!1);return Kt(e.adapter||Be.adapter)(e).then((function(t){return Jt(e),t.data=He.call(e,e.transformResponse,t),t.headers=We.from(t.headers),t}),(function(t){return Ve(t)||(Jt(e),t&&t.response&&(t.response.data=He.call(e,e.transformResponse,t.response),t.response.headers=We.from(t.response.headers))),Promise.reject(t)}))}const Yt={};["object","boolean","number","function","string","symbol"].forEach(((e,t)=>{Yt[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}}));const Xt={};Yt.transitional=function(e,t,n){function a(e,t){return"[Axios v1.7.4] Transitional option '"+e+"'"+t+(n?". "+n:"")}return(n,i,o)=>{if(!1===e)throw new me(a(i," has been removed"+(t?" in "+t:"")),me.ERR_DEPRECATED);return t&&!Xt[i]&&(Xt[i]=!0,console.warn(a(i," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(n,i,o)}};const Zt={assertOptions:function(e,t,n){if("object"!=typeof e)throw new me("options must be an object",me.ERR_BAD_OPTION_VALUE);const a=Object.keys(e);let i=a.length;for(;i-- >0;){const o=a[i],s=t[o];if(s){const t=e[o],n=void 0===t||s(t,o,e);if(!0!==n)throw new me("option "+o+" must be "+n,me.ERR_BAD_OPTION_VALUE)}else if(!0!==n)throw new me("Unknown option "+o,me.ERR_BAD_OPTION)}},validators:Yt},en=Zt.validators;class Axios{constructor(e){this.defaults=e,this.interceptors={request:new Pe,response:new Pe}}async request(e,t){try{return await this._request(e,t)}catch(e){if(e instanceof Error){let t;Error.captureStackTrace?Error.captureStackTrace(t={}):t=new Error;const n=t.stack?t.stack.replace(/^.+\n/,""):"";try{e.stack?n&&!String(e.stack).endsWith(n.replace(/^.+\n.+\n/,""))&&(e.stack+="\n"+n):e.stack=n}catch(e){}}throw e}}_request(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},t=Rt(this.defaults,t);const{transitional:n,paramsSerializer:a,headers:i}=t;void 0!==n&&Zt.assertOptions(n,{silentJSONParsing:en.transitional(en.boolean),forcedJSONParsing:en.transitional(en.boolean),clarifyTimeoutError:en.transitional(en.boolean)},!1),null!=a&&(de.isFunction(a)?t.paramsSerializer={serialize:a}:Zt.assertOptions(a,{encode:en.function,serialize:en.function},!0)),t.method=(t.method||this.defaults.method||"get").toLowerCase();let o=i&&de.merge(i.common,i[t.method]);i&&de.forEach(["delete","get","head","post","put","patch","common"],(e=>{delete i[e]})),t.headers=We.concat(o,i);const s=[];let r=!0;this.interceptors.request.forEach((function(e){"function"==typeof e.runWhen&&!1===e.runWhen(t)||(r=r&&e.synchronous,s.unshift(e.fulfilled,e.rejected))}));const c=[];let p;this.interceptors.response.forEach((function(e){c.push(e.fulfilled,e.rejected)}));let u,l=0;if(!r){const e=[Qt.bind(this),void 0];for(e.unshift.apply(e,s),e.push.apply(e,c),u=e.length,p=Promise.resolve(t);l<u;)p=p.then(e[l++],e[l++]);return p}u=s.length;let d=t;for(l=0;l<u;){const e=s[l++],t=s[l++];try{d=e(d)}catch(e){t.call(this,e);break}}try{p=Qt.call(this,d)}catch(e){return Promise.reject(e)}for(l=0,u=c.length;l<u;)p=p.then(c[l++],c[l++]);return p}getUri(e){return ke(Ke((e=Rt(this.defaults,e)).baseURL,e.url),e.params,e.paramsSerializer)}}de.forEach(["delete","get","head","options"],(function(e){Axios.prototype[e]=function(t,n){return this.request(Rt(n||{},{method:e,url:t,data:(n||{}).data}))}})),de.forEach(["post","put","patch"],(function(e){function t(t){return function(n,a,i){return this.request(Rt(i||{},{method:e,headers:t?{"Content-Type":"multipart/form-data"}:{},url:n,data:a}))}}Axios.prototype[e]=t(),Axios.prototype[e+"Form"]=t(!0)}));const tn=Axios;class CancelToken{constructor(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");let t;this.promise=new Promise((function(e){t=e}));const n=this;this.promise.then((e=>{if(!n._listeners)return;let t=n._listeners.length;for(;t-- >0;)n._listeners[t](e);n._listeners=null})),this.promise.then=e=>{let t;const a=new Promise((e=>{n.subscribe(e),t=e})).then(e);return a.cancel=function(){n.unsubscribe(t)},a},e((function(e,a,i){n.reason||(n.reason=new $e(e,a,i),t(n.reason))}))}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}static source(){let e;return{token:new CancelToken((function(t){e=t})),cancel:e}}}const nn=CancelToken;const an={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(an).forEach((([e,t])=>{an[t]=e}));const on=an;const sn=function e(t){const n=new tn(t),a=w(tn.prototype.request,n);return de.extend(a,tn.prototype,n,{allOwnKeys:!0}),de.extend(a,n,null,{allOwnKeys:!0}),a.create=function(n){return e(Rt(t,n))},a}(Be);sn.Axios=tn,sn.CanceledError=$e,sn.CancelToken=nn,sn.isCancel=Ve,sn.VERSION=Je,sn.toFormData=ge,sn.AxiosError=me,sn.Cancel=sn.CanceledError,sn.all=function(e){return Promise.all(e)},sn.spread=function(e){return function(t){return e.apply(null,t)}},sn.isAxiosError=function(e){return de.isObject(e)&&!0===e.isAxiosError},sn.mergeConfig=Rt,sn.AxiosHeaders=We,sn.formToJSON=e=>Ae(de.isHTMLForm(e)?new FormData(e):e),sn.getAdapter=Kt,sn.HttpStatusCode=on,sn.default=sn,e.exports=sn},1813:e=>{"use strict";e.exports=JSON.parse('{"application/1d-interleaved-parityfec":{"source":"iana"},"application/3gpdash-qoe-report+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/3gpp-ims+xml":{"source":"iana","compressible":true},"application/3gpphal+json":{"source":"iana","compressible":true},"application/3gpphalforms+json":{"source":"iana","compressible":true},"application/a2l":{"source":"iana"},"application/ace+cbor":{"source":"iana"},"application/activemessage":{"source":"iana"},"application/activity+json":{"source":"iana","compressible":true},"application/alto-costmap+json":{"source":"iana","compressible":true},"application/alto-costmapfilter+json":{"source":"iana","compressible":true},"application/alto-directory+json":{"source":"iana","compressible":true},"application/alto-endpointcost+json":{"source":"iana","compressible":true},"application/alto-endpointcostparams+json":{"source":"iana","compressible":true},"application/alto-endpointprop+json":{"source":"iana","compressible":true},"application/alto-endpointpropparams+json":{"source":"iana","compressible":true},"application/alto-error+json":{"source":"iana","compressible":true},"application/alto-networkmap+json":{"source":"iana","compressible":true},"application/alto-networkmapfilter+json":{"source":"iana","compressible":true},"application/alto-updatestreamcontrol+json":{"source":"iana","compressible":true},"application/alto-updatestreamparams+json":{"source":"iana","compressible":true},"application/aml":{"source":"iana"},"application/andrew-inset":{"source":"iana","extensions":["ez"]},"application/applefile":{"source":"iana"},"application/applixware":{"source":"apache","extensions":["aw"]},"application/at+jwt":{"source":"iana"},"application/atf":{"source":"iana"},"application/atfx":{"source":"iana"},"application/atom+xml":{"source":"iana","compressible":true,"extensions":["atom"]},"application/atomcat+xml":{"source":"iana","compressible":true,"extensions":["atomcat"]},"application/atomdeleted+xml":{"source":"iana","compressible":true,"extensions":["atomdeleted"]},"application/atomicmail":{"source":"iana"},"application/atomsvc+xml":{"source":"iana","compressible":true,"extensions":["atomsvc"]},"application/atsc-dwd+xml":{"source":"iana","compressible":true,"extensions":["dwd"]},"application/atsc-dynamic-event-message":{"source":"iana"},"application/atsc-held+xml":{"source":"iana","compressible":true,"extensions":["held"]},"application/atsc-rdt+json":{"source":"iana","compressible":true},"application/atsc-rsat+xml":{"source":"iana","compressible":true,"extensions":["rsat"]},"application/atxml":{"source":"iana"},"application/auth-policy+xml":{"source":"iana","compressible":true},"application/bacnet-xdd+zip":{"source":"iana","compressible":false},"application/batch-smtp":{"source":"iana"},"application/bdoc":{"compressible":false,"extensions":["bdoc"]},"application/beep+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/calendar+json":{"source":"iana","compressible":true},"application/calendar+xml":{"source":"iana","compressible":true,"extensions":["xcs"]},"application/call-completion":{"source":"iana"},"application/cals-1840":{"source":"iana"},"application/captive+json":{"source":"iana","compressible":true},"application/cbor":{"source":"iana"},"application/cbor-seq":{"source":"iana"},"application/cccex":{"source":"iana"},"application/ccmp+xml":{"source":"iana","compressible":true},"application/ccxml+xml":{"source":"iana","compressible":true,"extensions":["ccxml"]},"application/cdfx+xml":{"source":"iana","compressible":true,"extensions":["cdfx"]},"application/cdmi-capability":{"source":"iana","extensions":["cdmia"]},"application/cdmi-container":{"source":"iana","extensions":["cdmic"]},"application/cdmi-domain":{"source":"iana","extensions":["cdmid"]},"application/cdmi-object":{"source":"iana","extensions":["cdmio"]},"application/cdmi-queue":{"source":"iana","extensions":["cdmiq"]},"application/cdni":{"source":"iana"},"application/cea":{"source":"iana"},"application/cea-2018+xml":{"source":"iana","compressible":true},"application/cellml+xml":{"source":"iana","compressible":true},"application/cfw":{"source":"iana"},"application/city+json":{"source":"iana","compressible":true},"application/clr":{"source":"iana"},"application/clue+xml":{"source":"iana","compressible":true},"application/clue_info+xml":{"source":"iana","compressible":true},"application/cms":{"source":"iana"},"application/cnrp+xml":{"source":"iana","compressible":true},"application/coap-group+json":{"source":"iana","compressible":true},"application/coap-payload":{"source":"iana"},"application/commonground":{"source":"iana"},"application/conference-info+xml":{"source":"iana","compressible":true},"application/cose":{"source":"iana"},"application/cose-key":{"source":"iana"},"application/cose-key-set":{"source":"iana"},"application/cpl+xml":{"source":"iana","compressible":true,"extensions":["cpl"]},"application/csrattrs":{"source":"iana"},"application/csta+xml":{"source":"iana","compressible":true},"application/cstadata+xml":{"source":"iana","compressible":true},"application/csvm+json":{"source":"iana","compressible":true},"application/cu-seeme":{"source":"apache","extensions":["cu"]},"application/cwt":{"source":"iana"},"application/cybercash":{"source":"iana"},"application/dart":{"compressible":true},"application/dash+xml":{"source":"iana","compressible":true,"extensions":["mpd"]},"application/dash-patch+xml":{"source":"iana","compressible":true,"extensions":["mpp"]},"application/dashdelta":{"source":"iana"},"application/davmount+xml":{"source":"iana","compressible":true,"extensions":["davmount"]},"application/dca-rft":{"source":"iana"},"application/dcd":{"source":"iana"},"application/dec-dx":{"source":"iana"},"application/dialog-info+xml":{"source":"iana","compressible":true},"application/dicom":{"source":"iana"},"application/dicom+json":{"source":"iana","compressible":true},"application/dicom+xml":{"source":"iana","compressible":true},"application/dii":{"source":"iana"},"application/dit":{"source":"iana"},"application/dns":{"source":"iana"},"application/dns+json":{"source":"iana","compressible":true},"application/dns-message":{"source":"iana"},"application/docbook+xml":{"source":"apache","compressible":true,"extensions":["dbk"]},"application/dots+cbor":{"source":"iana"},"application/dskpp+xml":{"source":"iana","compressible":true},"application/dssc+der":{"source":"iana","extensions":["dssc"]},"application/dssc+xml":{"source":"iana","compressible":true,"extensions":["xdssc"]},"application/dvcs":{"source":"iana"},"application/ecmascript":{"source":"iana","compressible":true,"extensions":["es","ecma"]},"application/edi-consent":{"source":"iana"},"application/edi-x12":{"source":"iana","compressible":false},"application/edifact":{"source":"iana","compressible":false},"application/efi":{"source":"iana"},"application/elm+json":{"source":"iana","charset":"UTF-8","compressible":true},"application/elm+xml":{"source":"iana","compressible":true},"application/emergencycalldata.cap+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/emergencycalldata.comment+xml":{"source":"iana","compressible":true},"application/emergencycalldata.control+xml":{"source":"iana","compressible":true},"application/emergencycalldata.deviceinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.ecall.msd":{"source":"iana"},"application/emergencycalldata.providerinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.serviceinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.subscriberinfo+xml":{"source":"iana","compressible":true},"application/emergencycalldata.veds+xml":{"source":"iana","compressible":true},"application/emma+xml":{"source":"iana","compressible":true,"extensions":["emma"]},"application/emotionml+xml":{"source":"iana","compressible":true,"extensions":["emotionml"]},"application/encaprtp":{"source":"iana"},"application/epp+xml":{"source":"iana","compressible":true},"application/epub+zip":{"source":"iana","compressible":false,"extensions":["epub"]},"application/eshop":{"source":"iana"},"application/exi":{"source":"iana","extensions":["exi"]},"application/expect-ct-report+json":{"source":"iana","compressible":true},"application/express":{"source":"iana","extensions":["exp"]},"application/fastinfoset":{"source":"iana"},"application/fastsoap":{"source":"iana"},"application/fdt+xml":{"source":"iana","compressible":true,"extensions":["fdt"]},"application/fhir+json":{"source":"iana","charset":"UTF-8","compressible":true},"application/fhir+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/fido.trusted-apps+json":{"compressible":true},"application/fits":{"source":"iana"},"application/flexfec":{"source":"iana"},"application/font-sfnt":{"source":"iana"},"application/font-tdpfr":{"source":"iana","extensions":["pfr"]},"application/font-woff":{"source":"iana","compressible":false},"application/framework-attributes+xml":{"source":"iana","compressible":true},"application/geo+json":{"source":"iana","compressible":true,"extensions":["geojson"]},"application/geo+json-seq":{"source":"iana"},"application/geopackage+sqlite3":{"source":"iana"},"application/geoxacml+xml":{"source":"iana","compressible":true},"application/gltf-buffer":{"source":"iana"},"application/gml+xml":{"source":"iana","compressible":true,"extensions":["gml"]},"application/gpx+xml":{"source":"apache","compressible":true,"extensions":["gpx"]},"application/gxf":{"source":"apache","extensions":["gxf"]},"application/gzip":{"source":"iana","compressible":false,"extensions":["gz"]},"application/h224":{"source":"iana"},"application/held+xml":{"source":"iana","compressible":true},"application/hjson":{"extensions":["hjson"]},"application/http":{"source":"iana"},"application/hyperstudio":{"source":"iana","extensions":["stk"]},"application/ibe-key-request+xml":{"source":"iana","compressible":true},"application/ibe-pkg-reply+xml":{"source":"iana","compressible":true},"application/ibe-pp-data":{"source":"iana"},"application/iges":{"source":"iana"},"application/im-iscomposing+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/index":{"source":"iana"},"application/index.cmd":{"source":"iana"},"application/index.obj":{"source":"iana"},"application/index.response":{"source":"iana"},"application/index.vnd":{"source":"iana"},"application/inkml+xml":{"source":"iana","compressible":true,"extensions":["ink","inkml"]},"application/iotp":{"source":"iana"},"application/ipfix":{"source":"iana","extensions":["ipfix"]},"application/ipp":{"source":"iana"},"application/isup":{"source":"iana"},"application/its+xml":{"source":"iana","compressible":true,"extensions":["its"]},"application/java-archive":{"source":"apache","compressible":false,"extensions":["jar","war","ear"]},"application/java-serialized-object":{"source":"apache","compressible":false,"extensions":["ser"]},"application/java-vm":{"source":"apache","compressible":false,"extensions":["class"]},"application/javascript":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["js","mjs"]},"application/jf2feed+json":{"source":"iana","compressible":true},"application/jose":{"source":"iana"},"application/jose+json":{"source":"iana","compressible":true},"application/jrd+json":{"source":"iana","compressible":true},"application/jscalendar+json":{"source":"iana","compressible":true},"application/json":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["json","map"]},"application/json-patch+json":{"source":"iana","compressible":true},"application/json-seq":{"source":"iana"},"application/json5":{"extensions":["json5"]},"application/jsonml+json":{"source":"apache","compressible":true,"extensions":["jsonml"]},"application/jwk+json":{"source":"iana","compressible":true},"application/jwk-set+json":{"source":"iana","compressible":true},"application/jwt":{"source":"iana"},"application/kpml-request+xml":{"source":"iana","compressible":true},"application/kpml-response+xml":{"source":"iana","compressible":true},"application/ld+json":{"source":"iana","compressible":true,"extensions":["jsonld"]},"application/lgr+xml":{"source":"iana","compressible":true,"extensions":["lgr"]},"application/link-format":{"source":"iana"},"application/load-control+xml":{"source":"iana","compressible":true},"application/lost+xml":{"source":"iana","compressible":true,"extensions":["lostxml"]},"application/lostsync+xml":{"source":"iana","compressible":true},"application/lpf+zip":{"source":"iana","compressible":false},"application/lxf":{"source":"iana"},"application/mac-binhex40":{"source":"iana","extensions":["hqx"]},"application/mac-compactpro":{"source":"apache","extensions":["cpt"]},"application/macwriteii":{"source":"iana"},"application/mads+xml":{"source":"iana","compressible":true,"extensions":["mads"]},"application/manifest+json":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["webmanifest"]},"application/marc":{"source":"iana","extensions":["mrc"]},"application/marcxml+xml":{"source":"iana","compressible":true,"extensions":["mrcx"]},"application/mathematica":{"source":"iana","extensions":["ma","nb","mb"]},"application/mathml+xml":{"source":"iana","compressible":true,"extensions":["mathml"]},"application/mathml-content+xml":{"source":"iana","compressible":true},"application/mathml-presentation+xml":{"source":"iana","compressible":true},"application/mbms-associated-procedure-description+xml":{"source":"iana","compressible":true},"application/mbms-deregister+xml":{"source":"iana","compressible":true},"application/mbms-envelope+xml":{"source":"iana","compressible":true},"application/mbms-msk+xml":{"source":"iana","compressible":true},"application/mbms-msk-response+xml":{"source":"iana","compressible":true},"application/mbms-protection-description+xml":{"source":"iana","compressible":true},"application/mbms-reception-report+xml":{"source":"iana","compressible":true},"application/mbms-register+xml":{"source":"iana","compressible":true},"application/mbms-register-response+xml":{"source":"iana","compressible":true},"application/mbms-schedule+xml":{"source":"iana","compressible":true},"application/mbms-user-service-description+xml":{"source":"iana","compressible":true},"application/mbox":{"source":"iana","extensions":["mbox"]},"application/media-policy-dataset+xml":{"source":"iana","compressible":true,"extensions":["mpf"]},"application/media_control+xml":{"source":"iana","compressible":true},"application/mediaservercontrol+xml":{"source":"iana","compressible":true,"extensions":["mscml"]},"application/merge-patch+json":{"source":"iana","compressible":true},"application/metalink+xml":{"source":"apache","compressible":true,"extensions":["metalink"]},"application/metalink4+xml":{"source":"iana","compressible":true,"extensions":["meta4"]},"application/mets+xml":{"source":"iana","compressible":true,"extensions":["mets"]},"application/mf4":{"source":"iana"},"application/mikey":{"source":"iana"},"application/mipc":{"source":"iana"},"application/missing-blocks+cbor-seq":{"source":"iana"},"application/mmt-aei+xml":{"source":"iana","compressible":true,"extensions":["maei"]},"application/mmt-usd+xml":{"source":"iana","compressible":true,"extensions":["musd"]},"application/mods+xml":{"source":"iana","compressible":true,"extensions":["mods"]},"application/moss-keys":{"source":"iana"},"application/moss-signature":{"source":"iana"},"application/mosskey-data":{"source":"iana"},"application/mosskey-request":{"source":"iana"},"application/mp21":{"source":"iana","extensions":["m21","mp21"]},"application/mp4":{"source":"iana","extensions":["mp4s","m4p"]},"application/mpeg4-generic":{"source":"iana"},"application/mpeg4-iod":{"source":"iana"},"application/mpeg4-iod-xmt":{"source":"iana"},"application/mrb-consumer+xml":{"source":"iana","compressible":true},"application/mrb-publish+xml":{"source":"iana","compressible":true},"application/msc-ivr+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/msc-mixer+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/msword":{"source":"iana","compressible":false,"extensions":["doc","dot"]},"application/mud+json":{"source":"iana","compressible":true},"application/multipart-core":{"source":"iana"},"application/mxf":{"source":"iana","extensions":["mxf"]},"application/n-quads":{"source":"iana","extensions":["nq"]},"application/n-triples":{"source":"iana","extensions":["nt"]},"application/nasdata":{"source":"iana"},"application/news-checkgroups":{"source":"iana","charset":"US-ASCII"},"application/news-groupinfo":{"source":"iana","charset":"US-ASCII"},"application/news-transmission":{"source":"iana"},"application/nlsml+xml":{"source":"iana","compressible":true},"application/node":{"source":"iana","extensions":["cjs"]},"application/nss":{"source":"iana"},"application/oauth-authz-req+jwt":{"source":"iana"},"application/oblivious-dns-message":{"source":"iana"},"application/ocsp-request":{"source":"iana"},"application/ocsp-response":{"source":"iana"},"application/octet-stream":{"source":"iana","compressible":false,"extensions":["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"]},"application/oda":{"source":"iana","extensions":["oda"]},"application/odm+xml":{"source":"iana","compressible":true},"application/odx":{"source":"iana"},"application/oebps-package+xml":{"source":"iana","compressible":true,"extensions":["opf"]},"application/ogg":{"source":"iana","compressible":false,"extensions":["ogx"]},"application/omdoc+xml":{"source":"apache","compressible":true,"extensions":["omdoc"]},"application/onenote":{"source":"apache","extensions":["onetoc","onetoc2","onetmp","onepkg"]},"application/opc-nodeset+xml":{"source":"iana","compressible":true},"application/oscore":{"source":"iana"},"application/oxps":{"source":"iana","extensions":["oxps"]},"application/p21":{"source":"iana"},"application/p21+zip":{"source":"iana","compressible":false},"application/p2p-overlay+xml":{"source":"iana","compressible":true,"extensions":["relo"]},"application/parityfec":{"source":"iana"},"application/passport":{"source":"iana"},"application/patch-ops-error+xml":{"source":"iana","compressible":true,"extensions":["xer"]},"application/pdf":{"source":"iana","compressible":false,"extensions":["pdf"]},"application/pdx":{"source":"iana"},"application/pem-certificate-chain":{"source":"iana"},"application/pgp-encrypted":{"source":"iana","compressible":false,"extensions":["pgp"]},"application/pgp-keys":{"source":"iana","extensions":["asc"]},"application/pgp-signature":{"source":"iana","extensions":["asc","sig"]},"application/pics-rules":{"source":"apache","extensions":["prf"]},"application/pidf+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/pidf-diff+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/pkcs10":{"source":"iana","extensions":["p10"]},"application/pkcs12":{"source":"iana"},"application/pkcs7-mime":{"source":"iana","extensions":["p7m","p7c"]},"application/pkcs7-signature":{"source":"iana","extensions":["p7s"]},"application/pkcs8":{"source":"iana","extensions":["p8"]},"application/pkcs8-encrypted":{"source":"iana"},"application/pkix-attr-cert":{"source":"iana","extensions":["ac"]},"application/pkix-cert":{"source":"iana","extensions":["cer"]},"application/pkix-crl":{"source":"iana","extensions":["crl"]},"application/pkix-pkipath":{"source":"iana","extensions":["pkipath"]},"application/pkixcmp":{"source":"iana","extensions":["pki"]},"application/pls+xml":{"source":"iana","compressible":true,"extensions":["pls"]},"application/poc-settings+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/postscript":{"source":"iana","compressible":true,"extensions":["ai","eps","ps"]},"application/ppsp-tracker+json":{"source":"iana","compressible":true},"application/problem+json":{"source":"iana","compressible":true},"application/problem+xml":{"source":"iana","compressible":true},"application/provenance+xml":{"source":"iana","compressible":true,"extensions":["provx"]},"application/prs.alvestrand.titrax-sheet":{"source":"iana"},"application/prs.cww":{"source":"iana","extensions":["cww"]},"application/prs.cyn":{"source":"iana","charset":"7-BIT"},"application/prs.hpub+zip":{"source":"iana","compressible":false},"application/prs.nprend":{"source":"iana"},"application/prs.plucker":{"source":"iana"},"application/prs.rdf-xml-crypt":{"source":"iana"},"application/prs.xsf+xml":{"source":"iana","compressible":true},"application/pskc+xml":{"source":"iana","compressible":true,"extensions":["pskcxml"]},"application/pvd+json":{"source":"iana","compressible":true},"application/qsig":{"source":"iana"},"application/raml+yaml":{"compressible":true,"extensions":["raml"]},"application/raptorfec":{"source":"iana"},"application/rdap+json":{"source":"iana","compressible":true},"application/rdf+xml":{"source":"iana","compressible":true,"extensions":["rdf","owl"]},"application/reginfo+xml":{"source":"iana","compressible":true,"extensions":["rif"]},"application/relax-ng-compact-syntax":{"source":"iana","extensions":["rnc"]},"application/remote-printing":{"source":"iana"},"application/reputon+json":{"source":"iana","compressible":true},"application/resource-lists+xml":{"source":"iana","compressible":true,"extensions":["rl"]},"application/resource-lists-diff+xml":{"source":"iana","compressible":true,"extensions":["rld"]},"application/rfc+xml":{"source":"iana","compressible":true},"application/riscos":{"source":"iana"},"application/rlmi+xml":{"source":"iana","compressible":true},"application/rls-services+xml":{"source":"iana","compressible":true,"extensions":["rs"]},"application/route-apd+xml":{"source":"iana","compressible":true,"extensions":["rapd"]},"application/route-s-tsid+xml":{"source":"iana","compressible":true,"extensions":["sls"]},"application/route-usd+xml":{"source":"iana","compressible":true,"extensions":["rusd"]},"application/rpki-ghostbusters":{"source":"iana","extensions":["gbr"]},"application/rpki-manifest":{"source":"iana","extensions":["mft"]},"application/rpki-publication":{"source":"iana"},"application/rpki-roa":{"source":"iana","extensions":["roa"]},"application/rpki-updown":{"source":"iana"},"application/rsd+xml":{"source":"apache","compressible":true,"extensions":["rsd"]},"application/rss+xml":{"source":"apache","compressible":true,"extensions":["rss"]},"application/rtf":{"source":"iana","compressible":true,"extensions":["rtf"]},"application/rtploopback":{"source":"iana"},"application/rtx":{"source":"iana"},"application/samlassertion+xml":{"source":"iana","compressible":true},"application/samlmetadata+xml":{"source":"iana","compressible":true},"application/sarif+json":{"source":"iana","compressible":true},"application/sarif-external-properties+json":{"source":"iana","compressible":true},"application/sbe":{"source":"iana"},"application/sbml+xml":{"source":"iana","compressible":true,"extensions":["sbml"]},"application/scaip+xml":{"source":"iana","compressible":true},"application/scim+json":{"source":"iana","compressible":true},"application/scvp-cv-request":{"source":"iana","extensions":["scq"]},"application/scvp-cv-response":{"source":"iana","extensions":["scs"]},"application/scvp-vp-request":{"source":"iana","extensions":["spq"]},"application/scvp-vp-response":{"source":"iana","extensions":["spp"]},"application/sdp":{"source":"iana","extensions":["sdp"]},"application/secevent+jwt":{"source":"iana"},"application/senml+cbor":{"source":"iana"},"application/senml+json":{"source":"iana","compressible":true},"application/senml+xml":{"source":"iana","compressible":true,"extensions":["senmlx"]},"application/senml-etch+cbor":{"source":"iana"},"application/senml-etch+json":{"source":"iana","compressible":true},"application/senml-exi":{"source":"iana"},"application/sensml+cbor":{"source":"iana"},"application/sensml+json":{"source":"iana","compressible":true},"application/sensml+xml":{"source":"iana","compressible":true,"extensions":["sensmlx"]},"application/sensml-exi":{"source":"iana"},"application/sep+xml":{"source":"iana","compressible":true},"application/sep-exi":{"source":"iana"},"application/session-info":{"source":"iana"},"application/set-payment":{"source":"iana"},"application/set-payment-initiation":{"source":"iana","extensions":["setpay"]},"application/set-registration":{"source":"iana"},"application/set-registration-initiation":{"source":"iana","extensions":["setreg"]},"application/sgml":{"source":"iana"},"application/sgml-open-catalog":{"source":"iana"},"application/shf+xml":{"source":"iana","compressible":true,"extensions":["shf"]},"application/sieve":{"source":"iana","extensions":["siv","sieve"]},"application/simple-filter+xml":{"source":"iana","compressible":true},"application/simple-message-summary":{"source":"iana"},"application/simplesymbolcontainer":{"source":"iana"},"application/sipc":{"source":"iana"},"application/slate":{"source":"iana"},"application/smil":{"source":"iana"},"application/smil+xml":{"source":"iana","compressible":true,"extensions":["smi","smil"]},"application/smpte336m":{"source":"iana"},"application/soap+fastinfoset":{"source":"iana"},"application/soap+xml":{"source":"iana","compressible":true},"application/sparql-query":{"source":"iana","extensions":["rq"]},"application/sparql-results+xml":{"source":"iana","compressible":true,"extensions":["srx"]},"application/spdx+json":{"source":"iana","compressible":true},"application/spirits-event+xml":{"source":"iana","compressible":true},"application/sql":{"source":"iana"},"application/srgs":{"source":"iana","extensions":["gram"]},"application/srgs+xml":{"source":"iana","compressible":true,"extensions":["grxml"]},"application/sru+xml":{"source":"iana","compressible":true,"extensions":["sru"]},"application/ssdl+xml":{"source":"apache","compressible":true,"extensions":["ssdl"]},"application/ssml+xml":{"source":"iana","compressible":true,"extensions":["ssml"]},"application/stix+json":{"source":"iana","compressible":true},"application/swid+xml":{"source":"iana","compressible":true,"extensions":["swidtag"]},"application/tamp-apex-update":{"source":"iana"},"application/tamp-apex-update-confirm":{"source":"iana"},"application/tamp-community-update":{"source":"iana"},"application/tamp-community-update-confirm":{"source":"iana"},"application/tamp-error":{"source":"iana"},"application/tamp-sequence-adjust":{"source":"iana"},"application/tamp-sequence-adjust-confirm":{"source":"iana"},"application/tamp-status-query":{"source":"iana"},"application/tamp-status-response":{"source":"iana"},"application/tamp-update":{"source":"iana"},"application/tamp-update-confirm":{"source":"iana"},"application/tar":{"compressible":true},"application/taxii+json":{"source":"iana","compressible":true},"application/td+json":{"source":"iana","compressible":true},"application/tei+xml":{"source":"iana","compressible":true,"extensions":["tei","teicorpus"]},"application/tetra_isi":{"source":"iana"},"application/thraud+xml":{"source":"iana","compressible":true,"extensions":["tfi"]},"application/timestamp-query":{"source":"iana"},"application/timestamp-reply":{"source":"iana"},"application/timestamped-data":{"source":"iana","extensions":["tsd"]},"application/tlsrpt+gzip":{"source":"iana"},"application/tlsrpt+json":{"source":"iana","compressible":true},"application/tnauthlist":{"source":"iana"},"application/token-introspection+jwt":{"source":"iana"},"application/toml":{"compressible":true,"extensions":["toml"]},"application/trickle-ice-sdpfrag":{"source":"iana"},"application/trig":{"source":"iana","extensions":["trig"]},"application/ttml+xml":{"source":"iana","compressible":true,"extensions":["ttml"]},"application/tve-trigger":{"source":"iana"},"application/tzif":{"source":"iana"},"application/tzif-leap":{"source":"iana"},"application/ubjson":{"compressible":false,"extensions":["ubj"]},"application/ulpfec":{"source":"iana"},"application/urc-grpsheet+xml":{"source":"iana","compressible":true},"application/urc-ressheet+xml":{"source":"iana","compressible":true,"extensions":["rsheet"]},"application/urc-targetdesc+xml":{"source":"iana","compressible":true,"extensions":["td"]},"application/urc-uisocketdesc+xml":{"source":"iana","compressible":true},"application/vcard+json":{"source":"iana","compressible":true},"application/vcard+xml":{"source":"iana","compressible":true},"application/vemmi":{"source":"iana"},"application/vividence.scriptfile":{"source":"apache"},"application/vnd.1000minds.decision-model+xml":{"source":"iana","compressible":true,"extensions":["1km"]},"application/vnd.3gpp-prose+xml":{"source":"iana","compressible":true},"application/vnd.3gpp-prose-pc3ch+xml":{"source":"iana","compressible":true},"application/vnd.3gpp-v2x-local-service-information":{"source":"iana"},"application/vnd.3gpp.5gnas":{"source":"iana"},"application/vnd.3gpp.access-transfer-events+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.bsf+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.gmop+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.gtpc":{"source":"iana"},"application/vnd.3gpp.interworking-data":{"source":"iana"},"application/vnd.3gpp.lpp":{"source":"iana"},"application/vnd.3gpp.mc-signalling-ear":{"source":"iana"},"application/vnd.3gpp.mcdata-affiliation-command+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-payload":{"source":"iana"},"application/vnd.3gpp.mcdata-service-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-signalling":{"source":"iana"},"application/vnd.3gpp.mcdata-ue-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcdata-user-profile+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-affiliation-command+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-floor-request+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-location-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-mbms-usage-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-service-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-signed+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-ue-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-ue-init-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcptt-user-profile+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-affiliation-command+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-affiliation-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-location-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-mbms-usage-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-service-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-transmission-request+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-ue-config+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mcvideo-user-profile+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.mid-call+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.ngap":{"source":"iana"},"application/vnd.3gpp.pfcp":{"source":"iana"},"application/vnd.3gpp.pic-bw-large":{"source":"iana","extensions":["plb"]},"application/vnd.3gpp.pic-bw-small":{"source":"iana","extensions":["psb"]},"application/vnd.3gpp.pic-bw-var":{"source":"iana","extensions":["pvb"]},"application/vnd.3gpp.s1ap":{"source":"iana"},"application/vnd.3gpp.sms":{"source":"iana"},"application/vnd.3gpp.sms+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.srvcc-ext+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.srvcc-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.state-and-event-info+xml":{"source":"iana","compressible":true},"application/vnd.3gpp.ussd+xml":{"source":"iana","compressible":true},"application/vnd.3gpp2.bcmcsinfo+xml":{"source":"iana","compressible":true},"application/vnd.3gpp2.sms":{"source":"iana"},"application/vnd.3gpp2.tcap":{"source":"iana","extensions":["tcap"]},"application/vnd.3lightssoftware.imagescal":{"source":"iana"},"application/vnd.3m.post-it-notes":{"source":"iana","extensions":["pwn"]},"application/vnd.accpac.simply.aso":{"source":"iana","extensions":["aso"]},"application/vnd.accpac.simply.imp":{"source":"iana","extensions":["imp"]},"application/vnd.acucobol":{"source":"iana","extensions":["acu"]},"application/vnd.acucorp":{"source":"iana","extensions":["atc","acutc"]},"application/vnd.adobe.air-application-installer-package+zip":{"source":"apache","compressible":false,"extensions":["air"]},"application/vnd.adobe.flash.movie":{"source":"iana"},"application/vnd.adobe.formscentral.fcdt":{"source":"iana","extensions":["fcdt"]},"application/vnd.adobe.fxp":{"source":"iana","extensions":["fxp","fxpl"]},"application/vnd.adobe.partial-upload":{"source":"iana"},"application/vnd.adobe.xdp+xml":{"source":"iana","compressible":true,"extensions":["xdp"]},"application/vnd.adobe.xfdf":{"source":"iana","extensions":["xfdf"]},"application/vnd.aether.imp":{"source":"iana"},"application/vnd.afpc.afplinedata":{"source":"iana"},"application/vnd.afpc.afplinedata-pagedef":{"source":"iana"},"application/vnd.afpc.cmoca-cmresource":{"source":"iana"},"application/vnd.afpc.foca-charset":{"source":"iana"},"application/vnd.afpc.foca-codedfont":{"source":"iana"},"application/vnd.afpc.foca-codepage":{"source":"iana"},"application/vnd.afpc.modca":{"source":"iana"},"application/vnd.afpc.modca-cmtable":{"source":"iana"},"application/vnd.afpc.modca-formdef":{"source":"iana"},"application/vnd.afpc.modca-mediummap":{"source":"iana"},"application/vnd.afpc.modca-objectcontainer":{"source":"iana"},"application/vnd.afpc.modca-overlay":{"source":"iana"},"application/vnd.afpc.modca-pagesegment":{"source":"iana"},"application/vnd.age":{"source":"iana","extensions":["age"]},"application/vnd.ah-barcode":{"source":"iana"},"application/vnd.ahead.space":{"source":"iana","extensions":["ahead"]},"application/vnd.airzip.filesecure.azf":{"source":"iana","extensions":["azf"]},"application/vnd.airzip.filesecure.azs":{"source":"iana","extensions":["azs"]},"application/vnd.amadeus+json":{"source":"iana","compressible":true},"application/vnd.amazon.ebook":{"source":"apache","extensions":["azw"]},"application/vnd.amazon.mobi8-ebook":{"source":"iana"},"application/vnd.americandynamics.acc":{"source":"iana","extensions":["acc"]},"application/vnd.amiga.ami":{"source":"iana","extensions":["ami"]},"application/vnd.amundsen.maze+xml":{"source":"iana","compressible":true},"application/vnd.android.ota":{"source":"iana"},"application/vnd.android.package-archive":{"source":"apache","compressible":false,"extensions":["apk"]},"application/vnd.anki":{"source":"iana"},"application/vnd.anser-web-certificate-issue-initiation":{"source":"iana","extensions":["cii"]},"application/vnd.anser-web-funds-transfer-initiation":{"source":"apache","extensions":["fti"]},"application/vnd.antix.game-component":{"source":"iana","extensions":["atx"]},"application/vnd.apache.arrow.file":{"source":"iana"},"application/vnd.apache.arrow.stream":{"source":"iana"},"application/vnd.apache.thrift.binary":{"source":"iana"},"application/vnd.apache.thrift.compact":{"source":"iana"},"application/vnd.apache.thrift.json":{"source":"iana"},"application/vnd.api+json":{"source":"iana","compressible":true},"application/vnd.aplextor.warrp+json":{"source":"iana","compressible":true},"application/vnd.apothekende.reservation+json":{"source":"iana","compressible":true},"application/vnd.apple.installer+xml":{"source":"iana","compressible":true,"extensions":["mpkg"]},"application/vnd.apple.keynote":{"source":"iana","extensions":["key"]},"application/vnd.apple.mpegurl":{"source":"iana","extensions":["m3u8"]},"application/vnd.apple.numbers":{"source":"iana","extensions":["numbers"]},"application/vnd.apple.pages":{"source":"iana","extensions":["pages"]},"application/vnd.apple.pkpass":{"compressible":false,"extensions":["pkpass"]},"application/vnd.arastra.swi":{"source":"iana"},"application/vnd.aristanetworks.swi":{"source":"iana","extensions":["swi"]},"application/vnd.artisan+json":{"source":"iana","compressible":true},"application/vnd.artsquare":{"source":"iana"},"application/vnd.astraea-software.iota":{"source":"iana","extensions":["iota"]},"application/vnd.audiograph":{"source":"iana","extensions":["aep"]},"application/vnd.autopackage":{"source":"iana"},"application/vnd.avalon+json":{"source":"iana","compressible":true},"application/vnd.avistar+xml":{"source":"iana","compressible":true},"application/vnd.balsamiq.bmml+xml":{"source":"iana","compressible":true,"extensions":["bmml"]},"application/vnd.balsamiq.bmpr":{"source":"iana"},"application/vnd.banana-accounting":{"source":"iana"},"application/vnd.bbf.usp.error":{"source":"iana"},"application/vnd.bbf.usp.msg":{"source":"iana"},"application/vnd.bbf.usp.msg+json":{"source":"iana","compressible":true},"application/vnd.bekitzur-stech+json":{"source":"iana","compressible":true},"application/vnd.bint.med-content":{"source":"iana"},"application/vnd.biopax.rdf+xml":{"source":"iana","compressible":true},"application/vnd.blink-idb-value-wrapper":{"source":"iana"},"application/vnd.blueice.multipass":{"source":"iana","extensions":["mpm"]},"application/vnd.bluetooth.ep.oob":{"source":"iana"},"application/vnd.bluetooth.le.oob":{"source":"iana"},"application/vnd.bmi":{"source":"iana","extensions":["bmi"]},"application/vnd.bpf":{"source":"iana"},"application/vnd.bpf3":{"source":"iana"},"application/vnd.businessobjects":{"source":"iana","extensions":["rep"]},"application/vnd.byu.uapi+json":{"source":"iana","compressible":true},"application/vnd.cab-jscript":{"source":"iana"},"application/vnd.canon-cpdl":{"source":"iana"},"application/vnd.canon-lips":{"source":"iana"},"application/vnd.capasystems-pg+json":{"source":"iana","compressible":true},"application/vnd.cendio.thinlinc.clientconf":{"source":"iana"},"application/vnd.century-systems.tcp_stream":{"source":"iana"},"application/vnd.chemdraw+xml":{"source":"iana","compressible":true,"extensions":["cdxml"]},"application/vnd.chess-pgn":{"source":"iana"},"application/vnd.chipnuts.karaoke-mmd":{"source":"iana","extensions":["mmd"]},"application/vnd.ciedi":{"source":"iana"},"application/vnd.cinderella":{"source":"iana","extensions":["cdy"]},"application/vnd.cirpack.isdn-ext":{"source":"iana"},"application/vnd.citationstyles.style+xml":{"source":"iana","compressible":true,"extensions":["csl"]},"application/vnd.claymore":{"source":"iana","extensions":["cla"]},"application/vnd.cloanto.rp9":{"source":"iana","extensions":["rp9"]},"application/vnd.clonk.c4group":{"source":"iana","extensions":["c4g","c4d","c4f","c4p","c4u"]},"application/vnd.cluetrust.cartomobile-config":{"source":"iana","extensions":["c11amc"]},"application/vnd.cluetrust.cartomobile-config-pkg":{"source":"iana","extensions":["c11amz"]},"application/vnd.coffeescript":{"source":"iana"},"application/vnd.collabio.xodocuments.document":{"source":"iana"},"application/vnd.collabio.xodocuments.document-template":{"source":"iana"},"application/vnd.collabio.xodocuments.presentation":{"source":"iana"},"application/vnd.collabio.xodocuments.presentation-template":{"source":"iana"},"application/vnd.collabio.xodocuments.spreadsheet":{"source":"iana"},"application/vnd.collabio.xodocuments.spreadsheet-template":{"source":"iana"},"application/vnd.collection+json":{"source":"iana","compressible":true},"application/vnd.collection.doc+json":{"source":"iana","compressible":true},"application/vnd.collection.next+json":{"source":"iana","compressible":true},"application/vnd.comicbook+zip":{"source":"iana","compressible":false},"application/vnd.comicbook-rar":{"source":"iana"},"application/vnd.commerce-battelle":{"source":"iana"},"application/vnd.commonspace":{"source":"iana","extensions":["csp"]},"application/vnd.contact.cmsg":{"source":"iana","extensions":["cdbcmsg"]},"application/vnd.coreos.ignition+json":{"source":"iana","compressible":true},"application/vnd.cosmocaller":{"source":"iana","extensions":["cmc"]},"application/vnd.crick.clicker":{"source":"iana","extensions":["clkx"]},"application/vnd.crick.clicker.keyboard":{"source":"iana","extensions":["clkk"]},"application/vnd.crick.clicker.palette":{"source":"iana","extensions":["clkp"]},"application/vnd.crick.clicker.template":{"source":"iana","extensions":["clkt"]},"application/vnd.crick.clicker.wordbank":{"source":"iana","extensions":["clkw"]},"application/vnd.criticaltools.wbs+xml":{"source":"iana","compressible":true,"extensions":["wbs"]},"application/vnd.cryptii.pipe+json":{"source":"iana","compressible":true},"application/vnd.crypto-shade-file":{"source":"iana"},"application/vnd.cryptomator.encrypted":{"source":"iana"},"application/vnd.cryptomator.vault":{"source":"iana"},"application/vnd.ctc-posml":{"source":"iana","extensions":["pml"]},"application/vnd.ctct.ws+xml":{"source":"iana","compressible":true},"application/vnd.cups-pdf":{"source":"iana"},"application/vnd.cups-postscript":{"source":"iana"},"application/vnd.cups-ppd":{"source":"iana","extensions":["ppd"]},"application/vnd.cups-raster":{"source":"iana"},"application/vnd.cups-raw":{"source":"iana"},"application/vnd.curl":{"source":"iana"},"application/vnd.curl.car":{"source":"apache","extensions":["car"]},"application/vnd.curl.pcurl":{"source":"apache","extensions":["pcurl"]},"application/vnd.cyan.dean.root+xml":{"source":"iana","compressible":true},"application/vnd.cybank":{"source":"iana"},"application/vnd.cyclonedx+json":{"source":"iana","compressible":true},"application/vnd.cyclonedx+xml":{"source":"iana","compressible":true},"application/vnd.d2l.coursepackage1p0+zip":{"source":"iana","compressible":false},"application/vnd.d3m-dataset":{"source":"iana"},"application/vnd.d3m-problem":{"source":"iana"},"application/vnd.dart":{"source":"iana","compressible":true,"extensions":["dart"]},"application/vnd.data-vision.rdz":{"source":"iana","extensions":["rdz"]},"application/vnd.datapackage+json":{"source":"iana","compressible":true},"application/vnd.dataresource+json":{"source":"iana","compressible":true},"application/vnd.dbf":{"source":"iana","extensions":["dbf"]},"application/vnd.debian.binary-package":{"source":"iana"},"application/vnd.dece.data":{"source":"iana","extensions":["uvf","uvvf","uvd","uvvd"]},"application/vnd.dece.ttml+xml":{"source":"iana","compressible":true,"extensions":["uvt","uvvt"]},"application/vnd.dece.unspecified":{"source":"iana","extensions":["uvx","uvvx"]},"application/vnd.dece.zip":{"source":"iana","extensions":["uvz","uvvz"]},"application/vnd.denovo.fcselayout-link":{"source":"iana","extensions":["fe_launch"]},"application/vnd.desmume.movie":{"source":"iana"},"application/vnd.dir-bi.plate-dl-nosuffix":{"source":"iana"},"application/vnd.dm.delegation+xml":{"source":"iana","compressible":true},"application/vnd.dna":{"source":"iana","extensions":["dna"]},"application/vnd.document+json":{"source":"iana","compressible":true},"application/vnd.dolby.mlp":{"source":"apache","extensions":["mlp"]},"application/vnd.dolby.mobile.1":{"source":"iana"},"application/vnd.dolby.mobile.2":{"source":"iana"},"application/vnd.doremir.scorecloud-binary-document":{"source":"iana"},"application/vnd.dpgraph":{"source":"iana","extensions":["dpg"]},"application/vnd.dreamfactory":{"source":"iana","extensions":["dfac"]},"application/vnd.drive+json":{"source":"iana","compressible":true},"application/vnd.ds-keypoint":{"source":"apache","extensions":["kpxx"]},"application/vnd.dtg.local":{"source":"iana"},"application/vnd.dtg.local.flash":{"source":"iana"},"application/vnd.dtg.local.html":{"source":"iana"},"application/vnd.dvb.ait":{"source":"iana","extensions":["ait"]},"application/vnd.dvb.dvbisl+xml":{"source":"iana","compressible":true},"application/vnd.dvb.dvbj":{"source":"iana"},"application/vnd.dvb.esgcontainer":{"source":"iana"},"application/vnd.dvb.ipdcdftnotifaccess":{"source":"iana"},"application/vnd.dvb.ipdcesgaccess":{"source":"iana"},"application/vnd.dvb.ipdcesgaccess2":{"source":"iana"},"application/vnd.dvb.ipdcesgpdd":{"source":"iana"},"application/vnd.dvb.ipdcroaming":{"source":"iana"},"application/vnd.dvb.iptv.alfec-base":{"source":"iana"},"application/vnd.dvb.iptv.alfec-enhancement":{"source":"iana"},"application/vnd.dvb.notif-aggregate-root+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-container+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-generic+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-ia-msglist+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-ia-registration-request+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-ia-registration-response+xml":{"source":"iana","compressible":true},"application/vnd.dvb.notif-init+xml":{"source":"iana","compressible":true},"application/vnd.dvb.pfr":{"source":"iana"},"application/vnd.dvb.service":{"source":"iana","extensions":["svc"]},"application/vnd.dxr":{"source":"iana"},"application/vnd.dynageo":{"source":"iana","extensions":["geo"]},"application/vnd.dzr":{"source":"iana"},"application/vnd.easykaraoke.cdgdownload":{"source":"iana"},"application/vnd.ecdis-update":{"source":"iana"},"application/vnd.ecip.rlp":{"source":"iana"},"application/vnd.eclipse.ditto+json":{"source":"iana","compressible":true},"application/vnd.ecowin.chart":{"source":"iana","extensions":["mag"]},"application/vnd.ecowin.filerequest":{"source":"iana"},"application/vnd.ecowin.fileupdate":{"source":"iana"},"application/vnd.ecowin.series":{"source":"iana"},"application/vnd.ecowin.seriesrequest":{"source":"iana"},"application/vnd.ecowin.seriesupdate":{"source":"iana"},"application/vnd.efi.img":{"source":"iana"},"application/vnd.efi.iso":{"source":"iana"},"application/vnd.emclient.accessrequest+xml":{"source":"iana","compressible":true},"application/vnd.enliven":{"source":"iana","extensions":["nml"]},"application/vnd.enphase.envoy":{"source":"iana"},"application/vnd.eprints.data+xml":{"source":"iana","compressible":true},"application/vnd.epson.esf":{"source":"iana","extensions":["esf"]},"application/vnd.epson.msf":{"source":"iana","extensions":["msf"]},"application/vnd.epson.quickanime":{"source":"iana","extensions":["qam"]},"application/vnd.epson.salt":{"source":"iana","extensions":["slt"]},"application/vnd.epson.ssf":{"source":"iana","extensions":["ssf"]},"application/vnd.ericsson.quickcall":{"source":"iana"},"application/vnd.espass-espass+zip":{"source":"iana","compressible":false},"application/vnd.eszigno3+xml":{"source":"iana","compressible":true,"extensions":["es3","et3"]},"application/vnd.etsi.aoc+xml":{"source":"iana","compressible":true},"application/vnd.etsi.asic-e+zip":{"source":"iana","compressible":false},"application/vnd.etsi.asic-s+zip":{"source":"iana","compressible":false},"application/vnd.etsi.cug+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvcommand+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvdiscovery+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvprofile+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsad-bc+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsad-cod+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsad-npvr+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvservice+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvsync+xml":{"source":"iana","compressible":true},"application/vnd.etsi.iptvueprofile+xml":{"source":"iana","compressible":true},"application/vnd.etsi.mcid+xml":{"source":"iana","compressible":true},"application/vnd.etsi.mheg5":{"source":"iana"},"application/vnd.etsi.overload-control-policy-dataset+xml":{"source":"iana","compressible":true},"application/vnd.etsi.pstn+xml":{"source":"iana","compressible":true},"application/vnd.etsi.sci+xml":{"source":"iana","compressible":true},"application/vnd.etsi.simservs+xml":{"source":"iana","compressible":true},"application/vnd.etsi.timestamp-token":{"source":"iana"},"application/vnd.etsi.tsl+xml":{"source":"iana","compressible":true},"application/vnd.etsi.tsl.der":{"source":"iana"},"application/vnd.eu.kasparian.car+json":{"source":"iana","compressible":true},"application/vnd.eudora.data":{"source":"iana"},"application/vnd.evolv.ecig.profile":{"source":"iana"},"application/vnd.evolv.ecig.settings":{"source":"iana"},"application/vnd.evolv.ecig.theme":{"source":"iana"},"application/vnd.exstream-empower+zip":{"source":"iana","compressible":false},"application/vnd.exstream-package":{"source":"iana"},"application/vnd.ezpix-album":{"source":"iana","extensions":["ez2"]},"application/vnd.ezpix-package":{"source":"iana","extensions":["ez3"]},"application/vnd.f-secure.mobile":{"source":"iana"},"application/vnd.familysearch.gedcom+zip":{"source":"iana","compressible":false},"application/vnd.fastcopy-disk-image":{"source":"iana"},"application/vnd.fdf":{"source":"iana","extensions":["fdf"]},"application/vnd.fdsn.mseed":{"source":"iana","extensions":["mseed"]},"application/vnd.fdsn.seed":{"source":"iana","extensions":["seed","dataless"]},"application/vnd.ffsns":{"source":"iana"},"application/vnd.ficlab.flb+zip":{"source":"iana","compressible":false},"application/vnd.filmit.zfc":{"source":"iana"},"application/vnd.fints":{"source":"iana"},"application/vnd.firemonkeys.cloudcell":{"source":"iana"},"application/vnd.flographit":{"source":"iana","extensions":["gph"]},"application/vnd.fluxtime.clip":{"source":"iana","extensions":["ftc"]},"application/vnd.font-fontforge-sfd":{"source":"iana"},"application/vnd.framemaker":{"source":"iana","extensions":["fm","frame","maker","book"]},"application/vnd.frogans.fnc":{"source":"iana","extensions":["fnc"]},"application/vnd.frogans.ltf":{"source":"iana","extensions":["ltf"]},"application/vnd.fsc.weblaunch":{"source":"iana","extensions":["fsc"]},"application/vnd.fujifilm.fb.docuworks":{"source":"iana"},"application/vnd.fujifilm.fb.docuworks.binder":{"source":"iana"},"application/vnd.fujifilm.fb.docuworks.container":{"source":"iana"},"application/vnd.fujifilm.fb.jfi+xml":{"source":"iana","compressible":true},"application/vnd.fujitsu.oasys":{"source":"iana","extensions":["oas"]},"application/vnd.fujitsu.oasys2":{"source":"iana","extensions":["oa2"]},"application/vnd.fujitsu.oasys3":{"source":"iana","extensions":["oa3"]},"application/vnd.fujitsu.oasysgp":{"source":"iana","extensions":["fg5"]},"application/vnd.fujitsu.oasysprs":{"source":"iana","extensions":["bh2"]},"application/vnd.fujixerox.art-ex":{"source":"iana"},"application/vnd.fujixerox.art4":{"source":"iana"},"application/vnd.fujixerox.ddd":{"source":"iana","extensions":["ddd"]},"application/vnd.fujixerox.docuworks":{"source":"iana","extensions":["xdw"]},"application/vnd.fujixerox.docuworks.binder":{"source":"iana","extensions":["xbd"]},"application/vnd.fujixerox.docuworks.container":{"source":"iana"},"application/vnd.fujixerox.hbpl":{"source":"iana"},"application/vnd.fut-misnet":{"source":"iana"},"application/vnd.futoin+cbor":{"source":"iana"},"application/vnd.futoin+json":{"source":"iana","compressible":true},"application/vnd.fuzzysheet":{"source":"iana","extensions":["fzs"]},"application/vnd.genomatix.tuxedo":{"source":"iana","extensions":["txd"]},"application/vnd.gentics.grd+json":{"source":"iana","compressible":true},"application/vnd.geo+json":{"source":"iana","compressible":true},"application/vnd.geocube+xml":{"source":"iana","compressible":true},"application/vnd.geogebra.file":{"source":"iana","extensions":["ggb"]},"application/vnd.geogebra.slides":{"source":"iana"},"application/vnd.geogebra.tool":{"source":"iana","extensions":["ggt"]},"application/vnd.geometry-explorer":{"source":"iana","extensions":["gex","gre"]},"application/vnd.geonext":{"source":"iana","extensions":["gxt"]},"application/vnd.geoplan":{"source":"iana","extensions":["g2w"]},"application/vnd.geospace":{"source":"iana","extensions":["g3w"]},"application/vnd.gerber":{"source":"iana"},"application/vnd.globalplatform.card-content-mgt":{"source":"iana"},"application/vnd.globalplatform.card-content-mgt-response":{"source":"iana"},"application/vnd.gmx":{"source":"iana","extensions":["gmx"]},"application/vnd.google-apps.document":{"compressible":false,"extensions":["gdoc"]},"application/vnd.google-apps.presentation":{"compressible":false,"extensions":["gslides"]},"application/vnd.google-apps.spreadsheet":{"compressible":false,"extensions":["gsheet"]},"application/vnd.google-earth.kml+xml":{"source":"iana","compressible":true,"extensions":["kml"]},"application/vnd.google-earth.kmz":{"source":"iana","compressible":false,"extensions":["kmz"]},"application/vnd.gov.sk.e-form+xml":{"source":"iana","compressible":true},"application/vnd.gov.sk.e-form+zip":{"source":"iana","compressible":false},"application/vnd.gov.sk.xmldatacontainer+xml":{"source":"iana","compressible":true},"application/vnd.grafeq":{"source":"iana","extensions":["gqf","gqs"]},"application/vnd.gridmp":{"source":"iana"},"application/vnd.groove-account":{"source":"iana","extensions":["gac"]},"application/vnd.groove-help":{"source":"iana","extensions":["ghf"]},"application/vnd.groove-identity-message":{"source":"iana","extensions":["gim"]},"application/vnd.groove-injector":{"source":"iana","extensions":["grv"]},"application/vnd.groove-tool-message":{"source":"iana","extensions":["gtm"]},"application/vnd.groove-tool-template":{"source":"iana","extensions":["tpl"]},"application/vnd.groove-vcard":{"source":"iana","extensions":["vcg"]},"application/vnd.hal+json":{"source":"iana","compressible":true},"application/vnd.hal+xml":{"source":"iana","compressible":true,"extensions":["hal"]},"application/vnd.handheld-entertainment+xml":{"source":"iana","compressible":true,"extensions":["zmm"]},"application/vnd.hbci":{"source":"iana","extensions":["hbci"]},"application/vnd.hc+json":{"source":"iana","compressible":true},"application/vnd.hcl-bireports":{"source":"iana"},"application/vnd.hdt":{"source":"iana"},"application/vnd.heroku+json":{"source":"iana","compressible":true},"application/vnd.hhe.lesson-player":{"source":"iana","extensions":["les"]},"application/vnd.hl7cda+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.hl7v2+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.hp-hpgl":{"source":"iana","extensions":["hpgl"]},"application/vnd.hp-hpid":{"source":"iana","extensions":["hpid"]},"application/vnd.hp-hps":{"source":"iana","extensions":["hps"]},"application/vnd.hp-jlyt":{"source":"iana","extensions":["jlt"]},"application/vnd.hp-pcl":{"source":"iana","extensions":["pcl"]},"application/vnd.hp-pclxl":{"source":"iana","extensions":["pclxl"]},"application/vnd.httphone":{"source":"iana"},"application/vnd.hydrostatix.sof-data":{"source":"iana","extensions":["sfd-hdstx"]},"application/vnd.hyper+json":{"source":"iana","compressible":true},"application/vnd.hyper-item+json":{"source":"iana","compressible":true},"application/vnd.hyperdrive+json":{"source":"iana","compressible":true},"application/vnd.hzn-3d-crossword":{"source":"iana"},"application/vnd.ibm.afplinedata":{"source":"iana"},"application/vnd.ibm.electronic-media":{"source":"iana"},"application/vnd.ibm.minipay":{"source":"iana","extensions":["mpy"]},"application/vnd.ibm.modcap":{"source":"iana","extensions":["afp","listafp","list3820"]},"application/vnd.ibm.rights-management":{"source":"iana","extensions":["irm"]},"application/vnd.ibm.secure-container":{"source":"iana","extensions":["sc"]},"application/vnd.iccprofile":{"source":"iana","extensions":["icc","icm"]},"application/vnd.ieee.1905":{"source":"iana"},"application/vnd.igloader":{"source":"iana","extensions":["igl"]},"application/vnd.imagemeter.folder+zip":{"source":"iana","compressible":false},"application/vnd.imagemeter.image+zip":{"source":"iana","compressible":false},"application/vnd.immervision-ivp":{"source":"iana","extensions":["ivp"]},"application/vnd.immervision-ivu":{"source":"iana","extensions":["ivu"]},"application/vnd.ims.imsccv1p1":{"source":"iana"},"application/vnd.ims.imsccv1p2":{"source":"iana"},"application/vnd.ims.imsccv1p3":{"source":"iana"},"application/vnd.ims.lis.v2.result+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolconsumerprofile+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolproxy+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolproxy.id+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolsettings+json":{"source":"iana","compressible":true},"application/vnd.ims.lti.v2.toolsettings.simple+json":{"source":"iana","compressible":true},"application/vnd.informedcontrol.rms+xml":{"source":"iana","compressible":true},"application/vnd.informix-visionary":{"source":"iana"},"application/vnd.infotech.project":{"source":"iana"},"application/vnd.infotech.project+xml":{"source":"iana","compressible":true},"application/vnd.innopath.wamp.notification":{"source":"iana"},"application/vnd.insors.igm":{"source":"iana","extensions":["igm"]},"application/vnd.intercon.formnet":{"source":"iana","extensions":["xpw","xpx"]},"application/vnd.intergeo":{"source":"iana","extensions":["i2g"]},"application/vnd.intertrust.digibox":{"source":"iana"},"application/vnd.intertrust.nncp":{"source":"iana"},"application/vnd.intu.qbo":{"source":"iana","extensions":["qbo"]},"application/vnd.intu.qfx":{"source":"iana","extensions":["qfx"]},"application/vnd.iptc.g2.catalogitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.conceptitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.knowledgeitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.newsitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.newsmessage+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.packageitem+xml":{"source":"iana","compressible":true},"application/vnd.iptc.g2.planningitem+xml":{"source":"iana","compressible":true},"application/vnd.ipunplugged.rcprofile":{"source":"iana","extensions":["rcprofile"]},"application/vnd.irepository.package+xml":{"source":"iana","compressible":true,"extensions":["irp"]},"application/vnd.is-xpr":{"source":"iana","extensions":["xpr"]},"application/vnd.isac.fcs":{"source":"iana","extensions":["fcs"]},"application/vnd.iso11783-10+zip":{"source":"iana","compressible":false},"application/vnd.jam":{"source":"iana","extensions":["jam"]},"application/vnd.japannet-directory-service":{"source":"iana"},"application/vnd.japannet-jpnstore-wakeup":{"source":"iana"},"application/vnd.japannet-payment-wakeup":{"source":"iana"},"application/vnd.japannet-registration":{"source":"iana"},"application/vnd.japannet-registration-wakeup":{"source":"iana"},"application/vnd.japannet-setstore-wakeup":{"source":"iana"},"application/vnd.japannet-verification":{"source":"iana"},"application/vnd.japannet-verification-wakeup":{"source":"iana"},"application/vnd.jcp.javame.midlet-rms":{"source":"iana","extensions":["rms"]},"application/vnd.jisp":{"source":"iana","extensions":["jisp"]},"application/vnd.joost.joda-archive":{"source":"iana","extensions":["joda"]},"application/vnd.jsk.isdn-ngn":{"source":"iana"},"application/vnd.kahootz":{"source":"iana","extensions":["ktz","ktr"]},"application/vnd.kde.karbon":{"source":"iana","extensions":["karbon"]},"application/vnd.kde.kchart":{"source":"iana","extensions":["chrt"]},"application/vnd.kde.kformula":{"source":"iana","extensions":["kfo"]},"application/vnd.kde.kivio":{"source":"iana","extensions":["flw"]},"application/vnd.kde.kontour":{"source":"iana","extensions":["kon"]},"application/vnd.kde.kpresenter":{"source":"iana","extensions":["kpr","kpt"]},"application/vnd.kde.kspread":{"source":"iana","extensions":["ksp"]},"application/vnd.kde.kword":{"source":"iana","extensions":["kwd","kwt"]},"application/vnd.kenameaapp":{"source":"iana","extensions":["htke"]},"application/vnd.kidspiration":{"source":"iana","extensions":["kia"]},"application/vnd.kinar":{"source":"iana","extensions":["kne","knp"]},"application/vnd.koan":{"source":"iana","extensions":["skp","skd","skt","skm"]},"application/vnd.kodak-descriptor":{"source":"iana","extensions":["sse"]},"application/vnd.las":{"source":"iana"},"application/vnd.las.las+json":{"source":"iana","compressible":true},"application/vnd.las.las+xml":{"source":"iana","compressible":true,"extensions":["lasxml"]},"application/vnd.laszip":{"source":"iana"},"application/vnd.leap+json":{"source":"iana","compressible":true},"application/vnd.liberty-request+xml":{"source":"iana","compressible":true},"application/vnd.llamagraphics.life-balance.desktop":{"source":"iana","extensions":["lbd"]},"application/vnd.llamagraphics.life-balance.exchange+xml":{"source":"iana","compressible":true,"extensions":["lbe"]},"application/vnd.logipipe.circuit+zip":{"source":"iana","compressible":false},"application/vnd.loom":{"source":"iana"},"application/vnd.lotus-1-2-3":{"source":"iana","extensions":["123"]},"application/vnd.lotus-approach":{"source":"iana","extensions":["apr"]},"application/vnd.lotus-freelance":{"source":"iana","extensions":["pre"]},"application/vnd.lotus-notes":{"source":"iana","extensions":["nsf"]},"application/vnd.lotus-organizer":{"source":"iana","extensions":["org"]},"application/vnd.lotus-screencam":{"source":"iana","extensions":["scm"]},"application/vnd.lotus-wordpro":{"source":"iana","extensions":["lwp"]},"application/vnd.macports.portpkg":{"source":"iana","extensions":["portpkg"]},"application/vnd.mapbox-vector-tile":{"source":"iana","extensions":["mvt"]},"application/vnd.marlin.drm.actiontoken+xml":{"source":"iana","compressible":true},"application/vnd.marlin.drm.conftoken+xml":{"source":"iana","compressible":true},"application/vnd.marlin.drm.license+xml":{"source":"iana","compressible":true},"application/vnd.marlin.drm.mdcf":{"source":"iana"},"application/vnd.mason+json":{"source":"iana","compressible":true},"application/vnd.maxar.archive.3tz+zip":{"source":"iana","compressible":false},"application/vnd.maxmind.maxmind-db":{"source":"iana"},"application/vnd.mcd":{"source":"iana","extensions":["mcd"]},"application/vnd.medcalcdata":{"source":"iana","extensions":["mc1"]},"application/vnd.mediastation.cdkey":{"source":"iana","extensions":["cdkey"]},"application/vnd.meridian-slingshot":{"source":"iana"},"application/vnd.mfer":{"source":"iana","extensions":["mwf"]},"application/vnd.mfmp":{"source":"iana","extensions":["mfm"]},"application/vnd.micro+json":{"source":"iana","compressible":true},"application/vnd.micrografx.flo":{"source":"iana","extensions":["flo"]},"application/vnd.micrografx.igx":{"source":"iana","extensions":["igx"]},"application/vnd.microsoft.portable-executable":{"source":"iana"},"application/vnd.microsoft.windows.thumbnail-cache":{"source":"iana"},"application/vnd.miele+json":{"source":"iana","compressible":true},"application/vnd.mif":{"source":"iana","extensions":["mif"]},"application/vnd.minisoft-hp3000-save":{"source":"iana"},"application/vnd.mitsubishi.misty-guard.trustweb":{"source":"iana"},"application/vnd.mobius.daf":{"source":"iana","extensions":["daf"]},"application/vnd.mobius.dis":{"source":"iana","extensions":["dis"]},"application/vnd.mobius.mbk":{"source":"iana","extensions":["mbk"]},"application/vnd.mobius.mqy":{"source":"iana","extensions":["mqy"]},"application/vnd.mobius.msl":{"source":"iana","extensions":["msl"]},"application/vnd.mobius.plc":{"source":"iana","extensions":["plc"]},"application/vnd.mobius.txf":{"source":"iana","extensions":["txf"]},"application/vnd.mophun.application":{"source":"iana","extensions":["mpn"]},"application/vnd.mophun.certificate":{"source":"iana","extensions":["mpc"]},"application/vnd.motorola.flexsuite":{"source":"iana"},"application/vnd.motorola.flexsuite.adsi":{"source":"iana"},"application/vnd.motorola.flexsuite.fis":{"source":"iana"},"application/vnd.motorola.flexsuite.gotap":{"source":"iana"},"application/vnd.motorola.flexsuite.kmr":{"source":"iana"},"application/vnd.motorola.flexsuite.ttc":{"source":"iana"},"application/vnd.motorola.flexsuite.wem":{"source":"iana"},"application/vnd.motorola.iprm":{"source":"iana"},"application/vnd.mozilla.xul+xml":{"source":"iana","compressible":true,"extensions":["xul"]},"application/vnd.ms-3mfdocument":{"source":"iana"},"application/vnd.ms-artgalry":{"source":"iana","extensions":["cil"]},"application/vnd.ms-asf":{"source":"iana"},"application/vnd.ms-cab-compressed":{"source":"iana","extensions":["cab"]},"application/vnd.ms-color.iccprofile":{"source":"apache"},"application/vnd.ms-excel":{"source":"iana","compressible":false,"extensions":["xls","xlm","xla","xlc","xlt","xlw"]},"application/vnd.ms-excel.addin.macroenabled.12":{"source":"iana","extensions":["xlam"]},"application/vnd.ms-excel.sheet.binary.macroenabled.12":{"source":"iana","extensions":["xlsb"]},"application/vnd.ms-excel.sheet.macroenabled.12":{"source":"iana","extensions":["xlsm"]},"application/vnd.ms-excel.template.macroenabled.12":{"source":"iana","extensions":["xltm"]},"application/vnd.ms-fontobject":{"source":"iana","compressible":true,"extensions":["eot"]},"application/vnd.ms-htmlhelp":{"source":"iana","extensions":["chm"]},"application/vnd.ms-ims":{"source":"iana","extensions":["ims"]},"application/vnd.ms-lrm":{"source":"iana","extensions":["lrm"]},"application/vnd.ms-office.activex+xml":{"source":"iana","compressible":true},"application/vnd.ms-officetheme":{"source":"iana","extensions":["thmx"]},"application/vnd.ms-opentype":{"source":"apache","compressible":true},"application/vnd.ms-outlook":{"compressible":false,"extensions":["msg"]},"application/vnd.ms-package.obfuscated-opentype":{"source":"apache"},"application/vnd.ms-pki.seccat":{"source":"apache","extensions":["cat"]},"application/vnd.ms-pki.stl":{"source":"apache","extensions":["stl"]},"application/vnd.ms-playready.initiator+xml":{"source":"iana","compressible":true},"application/vnd.ms-powerpoint":{"source":"iana","compressible":false,"extensions":["ppt","pps","pot"]},"application/vnd.ms-powerpoint.addin.macroenabled.12":{"source":"iana","extensions":["ppam"]},"application/vnd.ms-powerpoint.presentation.macroenabled.12":{"source":"iana","extensions":["pptm"]},"application/vnd.ms-powerpoint.slide.macroenabled.12":{"source":"iana","extensions":["sldm"]},"application/vnd.ms-powerpoint.slideshow.macroenabled.12":{"source":"iana","extensions":["ppsm"]},"application/vnd.ms-powerpoint.template.macroenabled.12":{"source":"iana","extensions":["potm"]},"application/vnd.ms-printdevicecapabilities+xml":{"source":"iana","compressible":true},"application/vnd.ms-printing.printticket+xml":{"source":"apache","compressible":true},"application/vnd.ms-printschematicket+xml":{"source":"iana","compressible":true},"application/vnd.ms-project":{"source":"iana","extensions":["mpp","mpt"]},"application/vnd.ms-tnef":{"source":"iana"},"application/vnd.ms-windows.devicepairing":{"source":"iana"},"application/vnd.ms-windows.nwprinting.oob":{"source":"iana"},"application/vnd.ms-windows.printerpairing":{"source":"iana"},"application/vnd.ms-windows.wsd.oob":{"source":"iana"},"application/vnd.ms-wmdrm.lic-chlg-req":{"source":"iana"},"application/vnd.ms-wmdrm.lic-resp":{"source":"iana"},"application/vnd.ms-wmdrm.meter-chlg-req":{"source":"iana"},"application/vnd.ms-wmdrm.meter-resp":{"source":"iana"},"application/vnd.ms-word.document.macroenabled.12":{"source":"iana","extensions":["docm"]},"application/vnd.ms-word.template.macroenabled.12":{"source":"iana","extensions":["dotm"]},"application/vnd.ms-works":{"source":"iana","extensions":["wps","wks","wcm","wdb"]},"application/vnd.ms-wpl":{"source":"iana","extensions":["wpl"]},"application/vnd.ms-xpsdocument":{"source":"iana","compressible":false,"extensions":["xps"]},"application/vnd.msa-disk-image":{"source":"iana"},"application/vnd.mseq":{"source":"iana","extensions":["mseq"]},"application/vnd.msign":{"source":"iana"},"application/vnd.multiad.creator":{"source":"iana"},"application/vnd.multiad.creator.cif":{"source":"iana"},"application/vnd.music-niff":{"source":"iana"},"application/vnd.musician":{"source":"iana","extensions":["mus"]},"application/vnd.muvee.style":{"source":"iana","extensions":["msty"]},"application/vnd.mynfc":{"source":"iana","extensions":["taglet"]},"application/vnd.nacamar.ybrid+json":{"source":"iana","compressible":true},"application/vnd.ncd.control":{"source":"iana"},"application/vnd.ncd.reference":{"source":"iana"},"application/vnd.nearst.inv+json":{"source":"iana","compressible":true},"application/vnd.nebumind.line":{"source":"iana"},"application/vnd.nervana":{"source":"iana"},"application/vnd.netfpx":{"source":"iana"},"application/vnd.neurolanguage.nlu":{"source":"iana","extensions":["nlu"]},"application/vnd.nimn":{"source":"iana"},"application/vnd.nintendo.nitro.rom":{"source":"iana"},"application/vnd.nintendo.snes.rom":{"source":"iana"},"application/vnd.nitf":{"source":"iana","extensions":["ntf","nitf"]},"application/vnd.noblenet-directory":{"source":"iana","extensions":["nnd"]},"application/vnd.noblenet-sealer":{"source":"iana","extensions":["nns"]},"application/vnd.noblenet-web":{"source":"iana","extensions":["nnw"]},"application/vnd.nokia.catalogs":{"source":"iana"},"application/vnd.nokia.conml+wbxml":{"source":"iana"},"application/vnd.nokia.conml+xml":{"source":"iana","compressible":true},"application/vnd.nokia.iptv.config+xml":{"source":"iana","compressible":true},"application/vnd.nokia.isds-radio-presets":{"source":"iana"},"application/vnd.nokia.landmark+wbxml":{"source":"iana"},"application/vnd.nokia.landmark+xml":{"source":"iana","compressible":true},"application/vnd.nokia.landmarkcollection+xml":{"source":"iana","compressible":true},"application/vnd.nokia.n-gage.ac+xml":{"source":"iana","compressible":true,"extensions":["ac"]},"application/vnd.nokia.n-gage.data":{"source":"iana","extensions":["ngdat"]},"application/vnd.nokia.n-gage.symbian.install":{"source":"iana","extensions":["n-gage"]},"application/vnd.nokia.ncd":{"source":"iana"},"application/vnd.nokia.pcd+wbxml":{"source":"iana"},"application/vnd.nokia.pcd+xml":{"source":"iana","compressible":true},"application/vnd.nokia.radio-preset":{"source":"iana","extensions":["rpst"]},"application/vnd.nokia.radio-presets":{"source":"iana","extensions":["rpss"]},"application/vnd.novadigm.edm":{"source":"iana","extensions":["edm"]},"application/vnd.novadigm.edx":{"source":"iana","extensions":["edx"]},"application/vnd.novadigm.ext":{"source":"iana","extensions":["ext"]},"application/vnd.ntt-local.content-share":{"source":"iana"},"application/vnd.ntt-local.file-transfer":{"source":"iana"},"application/vnd.ntt-local.ogw_remote-access":{"source":"iana"},"application/vnd.ntt-local.sip-ta_remote":{"source":"iana"},"application/vnd.ntt-local.sip-ta_tcp_stream":{"source":"iana"},"application/vnd.oasis.opendocument.chart":{"source":"iana","extensions":["odc"]},"application/vnd.oasis.opendocument.chart-template":{"source":"iana","extensions":["otc"]},"application/vnd.oasis.opendocument.database":{"source":"iana","extensions":["odb"]},"application/vnd.oasis.opendocument.formula":{"source":"iana","extensions":["odf"]},"application/vnd.oasis.opendocument.formula-template":{"source":"iana","extensions":["odft"]},"application/vnd.oasis.opendocument.graphics":{"source":"iana","compressible":false,"extensions":["odg"]},"application/vnd.oasis.opendocument.graphics-template":{"source":"iana","extensions":["otg"]},"application/vnd.oasis.opendocument.image":{"source":"iana","extensions":["odi"]},"application/vnd.oasis.opendocument.image-template":{"source":"iana","extensions":["oti"]},"application/vnd.oasis.opendocument.presentation":{"source":"iana","compressible":false,"extensions":["odp"]},"application/vnd.oasis.opendocument.presentation-template":{"source":"iana","extensions":["otp"]},"application/vnd.oasis.opendocument.spreadsheet":{"source":"iana","compressible":false,"extensions":["ods"]},"application/vnd.oasis.opendocument.spreadsheet-template":{"source":"iana","extensions":["ots"]},"application/vnd.oasis.opendocument.text":{"source":"iana","compressible":false,"extensions":["odt"]},"application/vnd.oasis.opendocument.text-master":{"source":"iana","extensions":["odm"]},"application/vnd.oasis.opendocument.text-template":{"source":"iana","extensions":["ott"]},"application/vnd.oasis.opendocument.text-web":{"source":"iana","extensions":["oth"]},"application/vnd.obn":{"source":"iana"},"application/vnd.ocf+cbor":{"source":"iana"},"application/vnd.oci.image.manifest.v1+json":{"source":"iana","compressible":true},"application/vnd.oftn.l10n+json":{"source":"iana","compressible":true},"application/vnd.oipf.contentaccessdownload+xml":{"source":"iana","compressible":true},"application/vnd.oipf.contentaccessstreaming+xml":{"source":"iana","compressible":true},"application/vnd.oipf.cspg-hexbinary":{"source":"iana"},"application/vnd.oipf.dae.svg+xml":{"source":"iana","compressible":true},"application/vnd.oipf.dae.xhtml+xml":{"source":"iana","compressible":true},"application/vnd.oipf.mippvcontrolmessage+xml":{"source":"iana","compressible":true},"application/vnd.oipf.pae.gem":{"source":"iana"},"application/vnd.oipf.spdiscovery+xml":{"source":"iana","compressible":true},"application/vnd.oipf.spdlist+xml":{"source":"iana","compressible":true},"application/vnd.oipf.ueprofile+xml":{"source":"iana","compressible":true},"application/vnd.oipf.userprofile+xml":{"source":"iana","compressible":true},"application/vnd.olpc-sugar":{"source":"iana","extensions":["xo"]},"application/vnd.oma-scws-config":{"source":"iana"},"application/vnd.oma-scws-http-request":{"source":"iana"},"application/vnd.oma-scws-http-response":{"source":"iana"},"application/vnd.oma.bcast.associated-procedure-parameter+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.drm-trigger+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.imd+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.ltkm":{"source":"iana"},"application/vnd.oma.bcast.notification+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.provisioningtrigger":{"source":"iana"},"application/vnd.oma.bcast.sgboot":{"source":"iana"},"application/vnd.oma.bcast.sgdd+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.sgdu":{"source":"iana"},"application/vnd.oma.bcast.simple-symbol-container":{"source":"iana"},"application/vnd.oma.bcast.smartcard-trigger+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.sprov+xml":{"source":"iana","compressible":true},"application/vnd.oma.bcast.stkm":{"source":"iana"},"application/vnd.oma.cab-address-book+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-feature-handler+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-pcc+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-subs-invite+xml":{"source":"iana","compressible":true},"application/vnd.oma.cab-user-prefs+xml":{"source":"iana","compressible":true},"application/vnd.oma.dcd":{"source":"iana"},"application/vnd.oma.dcdc":{"source":"iana"},"application/vnd.oma.dd2+xml":{"source":"iana","compressible":true,"extensions":["dd2"]},"application/vnd.oma.drm.risd+xml":{"source":"iana","compressible":true},"application/vnd.oma.group-usage-list+xml":{"source":"iana","compressible":true},"application/vnd.oma.lwm2m+cbor":{"source":"iana"},"application/vnd.oma.lwm2m+json":{"source":"iana","compressible":true},"application/vnd.oma.lwm2m+tlv":{"source":"iana"},"application/vnd.oma.pal+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.detailed-progress-report+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.final-report+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.groups+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.invocation-descriptor+xml":{"source":"iana","compressible":true},"application/vnd.oma.poc.optimized-progress-report+xml":{"source":"iana","compressible":true},"application/vnd.oma.push":{"source":"iana"},"application/vnd.oma.scidm.messages+xml":{"source":"iana","compressible":true},"application/vnd.oma.xcap-directory+xml":{"source":"iana","compressible":true},"application/vnd.omads-email+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.omads-file+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.omads-folder+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.omaloc-supl-init":{"source":"iana"},"application/vnd.onepager":{"source":"iana"},"application/vnd.onepagertamp":{"source":"iana"},"application/vnd.onepagertamx":{"source":"iana"},"application/vnd.onepagertat":{"source":"iana"},"application/vnd.onepagertatp":{"source":"iana"},"application/vnd.onepagertatx":{"source":"iana"},"application/vnd.openblox.game+xml":{"source":"iana","compressible":true,"extensions":["obgx"]},"application/vnd.openblox.game-binary":{"source":"iana"},"application/vnd.openeye.oeb":{"source":"iana"},"application/vnd.openofficeorg.extension":{"source":"apache","extensions":["oxt"]},"application/vnd.openstreetmap.data+xml":{"source":"iana","compressible":true,"extensions":["osm"]},"application/vnd.opentimestamps.ots":{"source":"iana"},"application/vnd.openxmlformats-officedocument.custom-properties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.customxmlproperties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawing+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.chart+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.extended-properties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.comments+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.presentation":{"source":"iana","compressible":false,"extensions":["pptx"]},"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slide":{"source":"iana","extensions":["sldx"]},"application/vnd.openxmlformats-officedocument.presentationml.slide+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slideshow":{"source":"iana","extensions":["ppsx"]},"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.tags+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.template":{"source":"iana","extensions":["potx"]},"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{"source":"iana","compressible":false,"extensions":["xlsx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.template":{"source":"iana","extensions":["xltx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.theme+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.themeoverride+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.vmldrawing":{"source":"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.document":{"source":"iana","compressible":false,"extensions":["docx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.template":{"source":"iana","extensions":["dotx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-package.core-properties+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml":{"source":"iana","compressible":true},"application/vnd.openxmlformats-package.relationships+xml":{"source":"iana","compressible":true},"application/vnd.oracle.resource+json":{"source":"iana","compressible":true},"application/vnd.orange.indata":{"source":"iana"},"application/vnd.osa.netdeploy":{"source":"iana"},"application/vnd.osgeo.mapguide.package":{"source":"iana","extensions":["mgp"]},"application/vnd.osgi.bundle":{"source":"iana"},"application/vnd.osgi.dp":{"source":"iana","extensions":["dp"]},"application/vnd.osgi.subsystem":{"source":"iana","extensions":["esa"]},"application/vnd.otps.ct-kip+xml":{"source":"iana","compressible":true},"application/vnd.oxli.countgraph":{"source":"iana"},"application/vnd.pagerduty+json":{"source":"iana","compressible":true},"application/vnd.palm":{"source":"iana","extensions":["pdb","pqa","oprc"]},"application/vnd.panoply":{"source":"iana"},"application/vnd.paos.xml":{"source":"iana"},"application/vnd.patentdive":{"source":"iana"},"application/vnd.patientecommsdoc":{"source":"iana"},"application/vnd.pawaafile":{"source":"iana","extensions":["paw"]},"application/vnd.pcos":{"source":"iana"},"application/vnd.pg.format":{"source":"iana","extensions":["str"]},"application/vnd.pg.osasli":{"source":"iana","extensions":["ei6"]},"application/vnd.piaccess.application-licence":{"source":"iana"},"application/vnd.picsel":{"source":"iana","extensions":["efif"]},"application/vnd.pmi.widget":{"source":"iana","extensions":["wg"]},"application/vnd.poc.group-advertisement+xml":{"source":"iana","compressible":true},"application/vnd.pocketlearn":{"source":"iana","extensions":["plf"]},"application/vnd.powerbuilder6":{"source":"iana","extensions":["pbd"]},"application/vnd.powerbuilder6-s":{"source":"iana"},"application/vnd.powerbuilder7":{"source":"iana"},"application/vnd.powerbuilder7-s":{"source":"iana"},"application/vnd.powerbuilder75":{"source":"iana"},"application/vnd.powerbuilder75-s":{"source":"iana"},"application/vnd.preminet":{"source":"iana"},"application/vnd.previewsystems.box":{"source":"iana","extensions":["box"]},"application/vnd.proteus.magazine":{"source":"iana","extensions":["mgz"]},"application/vnd.psfs":{"source":"iana"},"application/vnd.publishare-delta-tree":{"source":"iana","extensions":["qps"]},"application/vnd.pvi.ptid1":{"source":"iana","extensions":["ptid"]},"application/vnd.pwg-multiplexed":{"source":"iana"},"application/vnd.pwg-xhtml-print+xml":{"source":"iana","compressible":true},"application/vnd.qualcomm.brew-app-res":{"source":"iana"},"application/vnd.quarantainenet":{"source":"iana"},"application/vnd.quark.quarkxpress":{"source":"iana","extensions":["qxd","qxt","qwd","qwt","qxl","qxb"]},"application/vnd.quobject-quoxdocument":{"source":"iana"},"application/vnd.radisys.moml+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-conf+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-conn+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-dialog+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-audit-stream+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-conf+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-base+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-fax-detect+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-fax-sendrecv+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-group+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-speech+xml":{"source":"iana","compressible":true},"application/vnd.radisys.msml-dialog-transform+xml":{"source":"iana","compressible":true},"application/vnd.rainstor.data":{"source":"iana"},"application/vnd.rapid":{"source":"iana"},"application/vnd.rar":{"source":"iana","extensions":["rar"]},"application/vnd.realvnc.bed":{"source":"iana","extensions":["bed"]},"application/vnd.recordare.musicxml":{"source":"iana","extensions":["mxl"]},"application/vnd.recordare.musicxml+xml":{"source":"iana","compressible":true,"extensions":["musicxml"]},"application/vnd.renlearn.rlprint":{"source":"iana"},"application/vnd.resilient.logic":{"source":"iana"},"application/vnd.restful+json":{"source":"iana","compressible":true},"application/vnd.rig.cryptonote":{"source":"iana","extensions":["cryptonote"]},"application/vnd.rim.cod":{"source":"apache","extensions":["cod"]},"application/vnd.rn-realmedia":{"source":"apache","extensions":["rm"]},"application/vnd.rn-realmedia-vbr":{"source":"apache","extensions":["rmvb"]},"application/vnd.route66.link66+xml":{"source":"iana","compressible":true,"extensions":["link66"]},"application/vnd.rs-274x":{"source":"iana"},"application/vnd.ruckus.download":{"source":"iana"},"application/vnd.s3sms":{"source":"iana"},"application/vnd.sailingtracker.track":{"source":"iana","extensions":["st"]},"application/vnd.sar":{"source":"iana"},"application/vnd.sbm.cid":{"source":"iana"},"application/vnd.sbm.mid2":{"source":"iana"},"application/vnd.scribus":{"source":"iana"},"application/vnd.sealed.3df":{"source":"iana"},"application/vnd.sealed.csf":{"source":"iana"},"application/vnd.sealed.doc":{"source":"iana"},"application/vnd.sealed.eml":{"source":"iana"},"application/vnd.sealed.mht":{"source":"iana"},"application/vnd.sealed.net":{"source":"iana"},"application/vnd.sealed.ppt":{"source":"iana"},"application/vnd.sealed.tiff":{"source":"iana"},"application/vnd.sealed.xls":{"source":"iana"},"application/vnd.sealedmedia.softseal.html":{"source":"iana"},"application/vnd.sealedmedia.softseal.pdf":{"source":"iana"},"application/vnd.seemail":{"source":"iana","extensions":["see"]},"application/vnd.seis+json":{"source":"iana","compressible":true},"application/vnd.sema":{"source":"iana","extensions":["sema"]},"application/vnd.semd":{"source":"iana","extensions":["semd"]},"application/vnd.semf":{"source":"iana","extensions":["semf"]},"application/vnd.shade-save-file":{"source":"iana"},"application/vnd.shana.informed.formdata":{"source":"iana","extensions":["ifm"]},"application/vnd.shana.informed.formtemplate":{"source":"iana","extensions":["itp"]},"application/vnd.shana.informed.interchange":{"source":"iana","extensions":["iif"]},"application/vnd.shana.informed.package":{"source":"iana","extensions":["ipk"]},"application/vnd.shootproof+json":{"source":"iana","compressible":true},"application/vnd.shopkick+json":{"source":"iana","compressible":true},"application/vnd.shp":{"source":"iana"},"application/vnd.shx":{"source":"iana"},"application/vnd.sigrok.session":{"source":"iana"},"application/vnd.simtech-mindmapper":{"source":"iana","extensions":["twd","twds"]},"application/vnd.siren+json":{"source":"iana","compressible":true},"application/vnd.smaf":{"source":"iana","extensions":["mmf"]},"application/vnd.smart.notebook":{"source":"iana"},"application/vnd.smart.teacher":{"source":"iana","extensions":["teacher"]},"application/vnd.snesdev-page-table":{"source":"iana"},"application/vnd.software602.filler.form+xml":{"source":"iana","compressible":true,"extensions":["fo"]},"application/vnd.software602.filler.form-xml-zip":{"source":"iana"},"application/vnd.solent.sdkm+xml":{"source":"iana","compressible":true,"extensions":["sdkm","sdkd"]},"application/vnd.spotfire.dxp":{"source":"iana","extensions":["dxp"]},"application/vnd.spotfire.sfs":{"source":"iana","extensions":["sfs"]},"application/vnd.sqlite3":{"source":"iana"},"application/vnd.sss-cod":{"source":"iana"},"application/vnd.sss-dtf":{"source":"iana"},"application/vnd.sss-ntf":{"source":"iana"},"application/vnd.stardivision.calc":{"source":"apache","extensions":["sdc"]},"application/vnd.stardivision.draw":{"source":"apache","extensions":["sda"]},"application/vnd.stardivision.impress":{"source":"apache","extensions":["sdd"]},"application/vnd.stardivision.math":{"source":"apache","extensions":["smf"]},"application/vnd.stardivision.writer":{"source":"apache","extensions":["sdw","vor"]},"application/vnd.stardivision.writer-global":{"source":"apache","extensions":["sgl"]},"application/vnd.stepmania.package":{"source":"iana","extensions":["smzip"]},"application/vnd.stepmania.stepchart":{"source":"iana","extensions":["sm"]},"application/vnd.street-stream":{"source":"iana"},"application/vnd.sun.wadl+xml":{"source":"iana","compressible":true,"extensions":["wadl"]},"application/vnd.sun.xml.calc":{"source":"apache","extensions":["sxc"]},"application/vnd.sun.xml.calc.template":{"source":"apache","extensions":["stc"]},"application/vnd.sun.xml.draw":{"source":"apache","extensions":["sxd"]},"application/vnd.sun.xml.draw.template":{"source":"apache","extensions":["std"]},"application/vnd.sun.xml.impress":{"source":"apache","extensions":["sxi"]},"application/vnd.sun.xml.impress.template":{"source":"apache","extensions":["sti"]},"application/vnd.sun.xml.math":{"source":"apache","extensions":["sxm"]},"application/vnd.sun.xml.writer":{"source":"apache","extensions":["sxw"]},"application/vnd.sun.xml.writer.global":{"source":"apache","extensions":["sxg"]},"application/vnd.sun.xml.writer.template":{"source":"apache","extensions":["stw"]},"application/vnd.sus-calendar":{"source":"iana","extensions":["sus","susp"]},"application/vnd.svd":{"source":"iana","extensions":["svd"]},"application/vnd.swiftview-ics":{"source":"iana"},"application/vnd.sycle+xml":{"source":"iana","compressible":true},"application/vnd.syft+json":{"source":"iana","compressible":true},"application/vnd.symbian.install":{"source":"apache","extensions":["sis","sisx"]},"application/vnd.syncml+xml":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["xsm"]},"application/vnd.syncml.dm+wbxml":{"source":"iana","charset":"UTF-8","extensions":["bdm"]},"application/vnd.syncml.dm+xml":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["xdm"]},"application/vnd.syncml.dm.notification":{"source":"iana"},"application/vnd.syncml.dmddf+wbxml":{"source":"iana"},"application/vnd.syncml.dmddf+xml":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["ddf"]},"application/vnd.syncml.dmtnds+wbxml":{"source":"iana"},"application/vnd.syncml.dmtnds+xml":{"source":"iana","charset":"UTF-8","compressible":true},"application/vnd.syncml.ds.notification":{"source":"iana"},"application/vnd.tableschema+json":{"source":"iana","compressible":true},"application/vnd.tao.intent-module-archive":{"source":"iana","extensions":["tao"]},"application/vnd.tcpdump.pcap":{"source":"iana","extensions":["pcap","cap","dmp"]},"application/vnd.think-cell.ppttc+json":{"source":"iana","compressible":true},"application/vnd.tmd.mediaflex.api+xml":{"source":"iana","compressible":true},"application/vnd.tml":{"source":"iana"},"application/vnd.tmobile-livetv":{"source":"iana","extensions":["tmo"]},"application/vnd.tri.onesource":{"source":"iana"},"application/vnd.trid.tpt":{"source":"iana","extensions":["tpt"]},"application/vnd.triscape.mxs":{"source":"iana","extensions":["mxs"]},"application/vnd.trueapp":{"source":"iana","extensions":["tra"]},"application/vnd.truedoc":{"source":"iana"},"application/vnd.ubisoft.webplayer":{"source":"iana"},"application/vnd.ufdl":{"source":"iana","extensions":["ufd","ufdl"]},"application/vnd.uiq.theme":{"source":"iana","extensions":["utz"]},"application/vnd.umajin":{"source":"iana","extensions":["umj"]},"application/vnd.unity":{"source":"iana","extensions":["unityweb"]},"application/vnd.uoml+xml":{"source":"iana","compressible":true,"extensions":["uoml"]},"application/vnd.uplanet.alert":{"source":"iana"},"application/vnd.uplanet.alert-wbxml":{"source":"iana"},"application/vnd.uplanet.bearer-choice":{"source":"iana"},"application/vnd.uplanet.bearer-choice-wbxml":{"source":"iana"},"application/vnd.uplanet.cacheop":{"source":"iana"},"application/vnd.uplanet.cacheop-wbxml":{"source":"iana"},"application/vnd.uplanet.channel":{"source":"iana"},"application/vnd.uplanet.channel-wbxml":{"source":"iana"},"application/vnd.uplanet.list":{"source":"iana"},"application/vnd.uplanet.list-wbxml":{"source":"iana"},"application/vnd.uplanet.listcmd":{"source":"iana"},"application/vnd.uplanet.listcmd-wbxml":{"source":"iana"},"application/vnd.uplanet.signal":{"source":"iana"},"application/vnd.uri-map":{"source":"iana"},"application/vnd.valve.source.material":{"source":"iana"},"application/vnd.vcx":{"source":"iana","extensions":["vcx"]},"application/vnd.vd-study":{"source":"iana"},"application/vnd.vectorworks":{"source":"iana"},"application/vnd.vel+json":{"source":"iana","compressible":true},"application/vnd.verimatrix.vcas":{"source":"iana"},"application/vnd.veritone.aion+json":{"source":"iana","compressible":true},"application/vnd.veryant.thin":{"source":"iana"},"application/vnd.ves.encrypted":{"source":"iana"},"application/vnd.vidsoft.vidconference":{"source":"iana"},"application/vnd.visio":{"source":"iana","extensions":["vsd","vst","vss","vsw"]},"application/vnd.visionary":{"source":"iana","extensions":["vis"]},"application/vnd.vividence.scriptfile":{"source":"iana"},"application/vnd.vsf":{"source":"iana","extensions":["vsf"]},"application/vnd.wap.sic":{"source":"iana"},"application/vnd.wap.slc":{"source":"iana"},"application/vnd.wap.wbxml":{"source":"iana","charset":"UTF-8","extensions":["wbxml"]},"application/vnd.wap.wmlc":{"source":"iana","extensions":["wmlc"]},"application/vnd.wap.wmlscriptc":{"source":"iana","extensions":["wmlsc"]},"application/vnd.webturbo":{"source":"iana","extensions":["wtb"]},"application/vnd.wfa.dpp":{"source":"iana"},"application/vnd.wfa.p2p":{"source":"iana"},"application/vnd.wfa.wsc":{"source":"iana"},"application/vnd.windows.devicepairing":{"source":"iana"},"application/vnd.wmc":{"source":"iana"},"application/vnd.wmf.bootstrap":{"source":"iana"},"application/vnd.wolfram.mathematica":{"source":"iana"},"application/vnd.wolfram.mathematica.package":{"source":"iana"},"application/vnd.wolfram.player":{"source":"iana","extensions":["nbp"]},"application/vnd.wordperfect":{"source":"iana","extensions":["wpd"]},"application/vnd.wqd":{"source":"iana","extensions":["wqd"]},"application/vnd.wrq-hp3000-labelled":{"source":"iana"},"application/vnd.wt.stf":{"source":"iana","extensions":["stf"]},"application/vnd.wv.csp+wbxml":{"source":"iana"},"application/vnd.wv.csp+xml":{"source":"iana","compressible":true},"application/vnd.wv.ssp+xml":{"source":"iana","compressible":true},"application/vnd.xacml+json":{"source":"iana","compressible":true},"application/vnd.xara":{"source":"iana","extensions":["xar"]},"application/vnd.xfdl":{"source":"iana","extensions":["xfdl"]},"application/vnd.xfdl.webform":{"source":"iana"},"application/vnd.xmi+xml":{"source":"iana","compressible":true},"application/vnd.xmpie.cpkg":{"source":"iana"},"application/vnd.xmpie.dpkg":{"source":"iana"},"application/vnd.xmpie.plan":{"source":"iana"},"application/vnd.xmpie.ppkg":{"source":"iana"},"application/vnd.xmpie.xlim":{"source":"iana"},"application/vnd.yamaha.hv-dic":{"source":"iana","extensions":["hvd"]},"application/vnd.yamaha.hv-script":{"source":"iana","extensions":["hvs"]},"application/vnd.yamaha.hv-voice":{"source":"iana","extensions":["hvp"]},"application/vnd.yamaha.openscoreformat":{"source":"iana","extensions":["osf"]},"application/vnd.yamaha.openscoreformat.osfpvg+xml":{"source":"iana","compressible":true,"extensions":["osfpvg"]},"application/vnd.yamaha.remote-setup":{"source":"iana"},"application/vnd.yamaha.smaf-audio":{"source":"iana","extensions":["saf"]},"application/vnd.yamaha.smaf-phrase":{"source":"iana","extensions":["spf"]},"application/vnd.yamaha.through-ngn":{"source":"iana"},"application/vnd.yamaha.tunnel-udpencap":{"source":"iana"},"application/vnd.yaoweme":{"source":"iana"},"application/vnd.yellowriver-custom-menu":{"source":"iana","extensions":["cmp"]},"application/vnd.youtube.yt":{"source":"iana"},"application/vnd.zul":{"source":"iana","extensions":["zir","zirz"]},"application/vnd.zzazz.deck+xml":{"source":"iana","compressible":true,"extensions":["zaz"]},"application/voicexml+xml":{"source":"iana","compressible":true,"extensions":["vxml"]},"application/voucher-cms+json":{"source":"iana","compressible":true},"application/vq-rtcpxr":{"source":"iana"},"application/wasm":{"source":"iana","compressible":true,"extensions":["wasm"]},"application/watcherinfo+xml":{"source":"iana","compressible":true,"extensions":["wif"]},"application/webpush-options+json":{"source":"iana","compressible":true},"application/whoispp-query":{"source":"iana"},"application/whoispp-response":{"source":"iana"},"application/widget":{"source":"iana","extensions":["wgt"]},"application/winhlp":{"source":"apache","extensions":["hlp"]},"application/wita":{"source":"iana"},"application/wordperfect5.1":{"source":"iana"},"application/wsdl+xml":{"source":"iana","compressible":true,"extensions":["wsdl"]},"application/wspolicy+xml":{"source":"iana","compressible":true,"extensions":["wspolicy"]},"application/x-7z-compressed":{"source":"apache","compressible":false,"extensions":["7z"]},"application/x-abiword":{"source":"apache","extensions":["abw"]},"application/x-ace-compressed":{"source":"apache","extensions":["ace"]},"application/x-amf":{"source":"apache"},"application/x-apple-diskimage":{"source":"apache","extensions":["dmg"]},"application/x-arj":{"compressible":false,"extensions":["arj"]},"application/x-authorware-bin":{"source":"apache","extensions":["aab","x32","u32","vox"]},"application/x-authorware-map":{"source":"apache","extensions":["aam"]},"application/x-authorware-seg":{"source":"apache","extensions":["aas"]},"application/x-bcpio":{"source":"apache","extensions":["bcpio"]},"application/x-bdoc":{"compressible":false,"extensions":["bdoc"]},"application/x-bittorrent":{"source":"apache","extensions":["torrent"]},"application/x-blorb":{"source":"apache","extensions":["blb","blorb"]},"application/x-bzip":{"source":"apache","compressible":false,"extensions":["bz"]},"application/x-bzip2":{"source":"apache","compressible":false,"extensions":["bz2","boz"]},"application/x-cbr":{"source":"apache","extensions":["cbr","cba","cbt","cbz","cb7"]},"application/x-cdlink":{"source":"apache","extensions":["vcd"]},"application/x-cfs-compressed":{"source":"apache","extensions":["cfs"]},"application/x-chat":{"source":"apache","extensions":["chat"]},"application/x-chess-pgn":{"source":"apache","extensions":["pgn"]},"application/x-chrome-extension":{"extensions":["crx"]},"application/x-cocoa":{"source":"nginx","extensions":["cco"]},"application/x-compress":{"source":"apache"},"application/x-conference":{"source":"apache","extensions":["nsc"]},"application/x-cpio":{"source":"apache","extensions":["cpio"]},"application/x-csh":{"source":"apache","extensions":["csh"]},"application/x-deb":{"compressible":false},"application/x-debian-package":{"source":"apache","extensions":["deb","udeb"]},"application/x-dgc-compressed":{"source":"apache","extensions":["dgc"]},"application/x-director":{"source":"apache","extensions":["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"]},"application/x-doom":{"source":"apache","extensions":["wad"]},"application/x-dtbncx+xml":{"source":"apache","compressible":true,"extensions":["ncx"]},"application/x-dtbook+xml":{"source":"apache","compressible":true,"extensions":["dtb"]},"application/x-dtbresource+xml":{"source":"apache","compressible":true,"extensions":["res"]},"application/x-dvi":{"source":"apache","compressible":false,"extensions":["dvi"]},"application/x-envoy":{"source":"apache","extensions":["evy"]},"application/x-eva":{"source":"apache","extensions":["eva"]},"application/x-font-bdf":{"source":"apache","extensions":["bdf"]},"application/x-font-dos":{"source":"apache"},"application/x-font-framemaker":{"source":"apache"},"application/x-font-ghostscript":{"source":"apache","extensions":["gsf"]},"application/x-font-libgrx":{"source":"apache"},"application/x-font-linux-psf":{"source":"apache","extensions":["psf"]},"application/x-font-pcf":{"source":"apache","extensions":["pcf"]},"application/x-font-snf":{"source":"apache","extensions":["snf"]},"application/x-font-speedo":{"source":"apache"},"application/x-font-sunos-news":{"source":"apache"},"application/x-font-type1":{"source":"apache","extensions":["pfa","pfb","pfm","afm"]},"application/x-font-vfont":{"source":"apache"},"application/x-freearc":{"source":"apache","extensions":["arc"]},"application/x-futuresplash":{"source":"apache","extensions":["spl"]},"application/x-gca-compressed":{"source":"apache","extensions":["gca"]},"application/x-glulx":{"source":"apache","extensions":["ulx"]},"application/x-gnumeric":{"source":"apache","extensions":["gnumeric"]},"application/x-gramps-xml":{"source":"apache","extensions":["gramps"]},"application/x-gtar":{"source":"apache","extensions":["gtar"]},"application/x-gzip":{"source":"apache"},"application/x-hdf":{"source":"apache","extensions":["hdf"]},"application/x-httpd-php":{"compressible":true,"extensions":["php"]},"application/x-install-instructions":{"source":"apache","extensions":["install"]},"application/x-iso9660-image":{"source":"apache","extensions":["iso"]},"application/x-iwork-keynote-sffkey":{"extensions":["key"]},"application/x-iwork-numbers-sffnumbers":{"extensions":["numbers"]},"application/x-iwork-pages-sffpages":{"extensions":["pages"]},"application/x-java-archive-diff":{"source":"nginx","extensions":["jardiff"]},"application/x-java-jnlp-file":{"source":"apache","compressible":false,"extensions":["jnlp"]},"application/x-javascript":{"compressible":true},"application/x-keepass2":{"extensions":["kdbx"]},"application/x-latex":{"source":"apache","compressible":false,"extensions":["latex"]},"application/x-lua-bytecode":{"extensions":["luac"]},"application/x-lzh-compressed":{"source":"apache","extensions":["lzh","lha"]},"application/x-makeself":{"source":"nginx","extensions":["run"]},"application/x-mie":{"source":"apache","extensions":["mie"]},"application/x-mobipocket-ebook":{"source":"apache","extensions":["prc","mobi"]},"application/x-mpegurl":{"compressible":false},"application/x-ms-application":{"source":"apache","extensions":["application"]},"application/x-ms-shortcut":{"source":"apache","extensions":["lnk"]},"application/x-ms-wmd":{"source":"apache","extensions":["wmd"]},"application/x-ms-wmz":{"source":"apache","extensions":["wmz"]},"application/x-ms-xbap":{"source":"apache","extensions":["xbap"]},"application/x-msaccess":{"source":"apache","extensions":["mdb"]},"application/x-msbinder":{"source":"apache","extensions":["obd"]},"application/x-mscardfile":{"source":"apache","extensions":["crd"]},"application/x-msclip":{"source":"apache","extensions":["clp"]},"application/x-msdos-program":{"extensions":["exe"]},"application/x-msdownload":{"source":"apache","extensions":["exe","dll","com","bat","msi"]},"application/x-msmediaview":{"source":"apache","extensions":["mvb","m13","m14"]},"application/x-msmetafile":{"source":"apache","extensions":["wmf","wmz","emf","emz"]},"application/x-msmoney":{"source":"apache","extensions":["mny"]},"application/x-mspublisher":{"source":"apache","extensions":["pub"]},"application/x-msschedule":{"source":"apache","extensions":["scd"]},"application/x-msterminal":{"source":"apache","extensions":["trm"]},"application/x-mswrite":{"source":"apache","extensions":["wri"]},"application/x-netcdf":{"source":"apache","extensions":["nc","cdf"]},"application/x-ns-proxy-autoconfig":{"compressible":true,"extensions":["pac"]},"application/x-nzb":{"source":"apache","extensions":["nzb"]},"application/x-perl":{"source":"nginx","extensions":["pl","pm"]},"application/x-pilot":{"source":"nginx","extensions":["prc","pdb"]},"application/x-pkcs12":{"source":"apache","compressible":false,"extensions":["p12","pfx"]},"application/x-pkcs7-certificates":{"source":"apache","extensions":["p7b","spc"]},"application/x-pkcs7-certreqresp":{"source":"apache","extensions":["p7r"]},"application/x-pki-message":{"source":"iana"},"application/x-rar-compressed":{"source":"apache","compressible":false,"extensions":["rar"]},"application/x-redhat-package-manager":{"source":"nginx","extensions":["rpm"]},"application/x-research-info-systems":{"source":"apache","extensions":["ris"]},"application/x-sea":{"source":"nginx","extensions":["sea"]},"application/x-sh":{"source":"apache","compressible":true,"extensions":["sh"]},"application/x-shar":{"source":"apache","extensions":["shar"]},"application/x-shockwave-flash":{"source":"apache","compressible":false,"extensions":["swf"]},"application/x-silverlight-app":{"source":"apache","extensions":["xap"]},"application/x-sql":{"source":"apache","extensions":["sql"]},"application/x-stuffit":{"source":"apache","compressible":false,"extensions":["sit"]},"application/x-stuffitx":{"source":"apache","extensions":["sitx"]},"application/x-subrip":{"source":"apache","extensions":["srt"]},"application/x-sv4cpio":{"source":"apache","extensions":["sv4cpio"]},"application/x-sv4crc":{"source":"apache","extensions":["sv4crc"]},"application/x-t3vm-image":{"source":"apache","extensions":["t3"]},"application/x-tads":{"source":"apache","extensions":["gam"]},"application/x-tar":{"source":"apache","compressible":true,"extensions":["tar"]},"application/x-tcl":{"source":"apache","extensions":["tcl","tk"]},"application/x-tex":{"source":"apache","extensions":["tex"]},"application/x-tex-tfm":{"source":"apache","extensions":["tfm"]},"application/x-texinfo":{"source":"apache","extensions":["texinfo","texi"]},"application/x-tgif":{"source":"apache","extensions":["obj"]},"application/x-ustar":{"source":"apache","extensions":["ustar"]},"application/x-virtualbox-hdd":{"compressible":true,"extensions":["hdd"]},"application/x-virtualbox-ova":{"compressible":true,"extensions":["ova"]},"application/x-virtualbox-ovf":{"compressible":true,"extensions":["ovf"]},"application/x-virtualbox-vbox":{"compressible":true,"extensions":["vbox"]},"application/x-virtualbox-vbox-extpack":{"compressible":false,"extensions":["vbox-extpack"]},"application/x-virtualbox-vdi":{"compressible":true,"extensions":["vdi"]},"application/x-virtualbox-vhd":{"compressible":true,"extensions":["vhd"]},"application/x-virtualbox-vmdk":{"compressible":true,"extensions":["vmdk"]},"application/x-wais-source":{"source":"apache","extensions":["src"]},"application/x-web-app-manifest+json":{"compressible":true,"extensions":["webapp"]},"application/x-www-form-urlencoded":{"source":"iana","compressible":true},"application/x-x509-ca-cert":{"source":"iana","extensions":["der","crt","pem"]},"application/x-x509-ca-ra-cert":{"source":"iana"},"application/x-x509-next-ca-cert":{"source":"iana"},"application/x-xfig":{"source":"apache","extensions":["fig"]},"application/x-xliff+xml":{"source":"apache","compressible":true,"extensions":["xlf"]},"application/x-xpinstall":{"source":"apache","compressible":false,"extensions":["xpi"]},"application/x-xz":{"source":"apache","extensions":["xz"]},"application/x-zmachine":{"source":"apache","extensions":["z1","z2","z3","z4","z5","z6","z7","z8"]},"application/x400-bp":{"source":"iana"},"application/xacml+xml":{"source":"iana","compressible":true},"application/xaml+xml":{"source":"apache","compressible":true,"extensions":["xaml"]},"application/xcap-att+xml":{"source":"iana","compressible":true,"extensions":["xav"]},"application/xcap-caps+xml":{"source":"iana","compressible":true,"extensions":["xca"]},"application/xcap-diff+xml":{"source":"iana","compressible":true,"extensions":["xdf"]},"application/xcap-el+xml":{"source":"iana","compressible":true,"extensions":["xel"]},"application/xcap-error+xml":{"source":"iana","compressible":true},"application/xcap-ns+xml":{"source":"iana","compressible":true,"extensions":["xns"]},"application/xcon-conference-info+xml":{"source":"iana","compressible":true},"application/xcon-conference-info-diff+xml":{"source":"iana","compressible":true},"application/xenc+xml":{"source":"iana","compressible":true,"extensions":["xenc"]},"application/xhtml+xml":{"source":"iana","compressible":true,"extensions":["xhtml","xht"]},"application/xhtml-voice+xml":{"source":"apache","compressible":true},"application/xliff+xml":{"source":"iana","compressible":true,"extensions":["xlf"]},"application/xml":{"source":"iana","compressible":true,"extensions":["xml","xsl","xsd","rng"]},"application/xml-dtd":{"source":"iana","compressible":true,"extensions":["dtd"]},"application/xml-external-parsed-entity":{"source":"iana"},"application/xml-patch+xml":{"source":"iana","compressible":true},"application/xmpp+xml":{"source":"iana","compressible":true},"application/xop+xml":{"source":"iana","compressible":true,"extensions":["xop"]},"application/xproc+xml":{"source":"apache","compressible":true,"extensions":["xpl"]},"application/xslt+xml":{"source":"iana","compressible":true,"extensions":["xsl","xslt"]},"application/xspf+xml":{"source":"apache","compressible":true,"extensions":["xspf"]},"application/xv+xml":{"source":"iana","compressible":true,"extensions":["mxml","xhvml","xvml","xvm"]},"application/yang":{"source":"iana","extensions":["yang"]},"application/yang-data+json":{"source":"iana","compressible":true},"application/yang-data+xml":{"source":"iana","compressible":true},"application/yang-patch+json":{"source":"iana","compressible":true},"application/yang-patch+xml":{"source":"iana","compressible":true},"application/yin+xml":{"source":"iana","compressible":true,"extensions":["yin"]},"application/zip":{"source":"iana","compressible":false,"extensions":["zip"]},"application/zlib":{"source":"iana"},"application/zstd":{"source":"iana"},"audio/1d-interleaved-parityfec":{"source":"iana"},"audio/32kadpcm":{"source":"iana"},"audio/3gpp":{"source":"iana","compressible":false,"extensions":["3gpp"]},"audio/3gpp2":{"source":"iana"},"audio/aac":{"source":"iana"},"audio/ac3":{"source":"iana"},"audio/adpcm":{"source":"apache","extensions":["adp"]},"audio/amr":{"source":"iana","extensions":["amr"]},"audio/amr-wb":{"source":"iana"},"audio/amr-wb+":{"source":"iana"},"audio/aptx":{"source":"iana"},"audio/asc":{"source":"iana"},"audio/atrac-advanced-lossless":{"source":"iana"},"audio/atrac-x":{"source":"iana"},"audio/atrac3":{"source":"iana"},"audio/basic":{"source":"iana","compressible":false,"extensions":["au","snd"]},"audio/bv16":{"source":"iana"},"audio/bv32":{"source":"iana"},"audio/clearmode":{"source":"iana"},"audio/cn":{"source":"iana"},"audio/dat12":{"source":"iana"},"audio/dls":{"source":"iana"},"audio/dsr-es201108":{"source":"iana"},"audio/dsr-es202050":{"source":"iana"},"audio/dsr-es202211":{"source":"iana"},"audio/dsr-es202212":{"source":"iana"},"audio/dv":{"source":"iana"},"audio/dvi4":{"source":"iana"},"audio/eac3":{"source":"iana"},"audio/encaprtp":{"source":"iana"},"audio/evrc":{"source":"iana"},"audio/evrc-qcp":{"source":"iana"},"audio/evrc0":{"source":"iana"},"audio/evrc1":{"source":"iana"},"audio/evrcb":{"source":"iana"},"audio/evrcb0":{"source":"iana"},"audio/evrcb1":{"source":"iana"},"audio/evrcnw":{"source":"iana"},"audio/evrcnw0":{"source":"iana"},"audio/evrcnw1":{"source":"iana"},"audio/evrcwb":{"source":"iana"},"audio/evrcwb0":{"source":"iana"},"audio/evrcwb1":{"source":"iana"},"audio/evs":{"source":"iana"},"audio/flexfec":{"source":"iana"},"audio/fwdred":{"source":"iana"},"audio/g711-0":{"source":"iana"},"audio/g719":{"source":"iana"},"audio/g722":{"source":"iana"},"audio/g7221":{"source":"iana"},"audio/g723":{"source":"iana"},"audio/g726-16":{"source":"iana"},"audio/g726-24":{"source":"iana"},"audio/g726-32":{"source":"iana"},"audio/g726-40":{"source":"iana"},"audio/g728":{"source":"iana"},"audio/g729":{"source":"iana"},"audio/g7291":{"source":"iana"},"audio/g729d":{"source":"iana"},"audio/g729e":{"source":"iana"},"audio/gsm":{"source":"iana"},"audio/gsm-efr":{"source":"iana"},"audio/gsm-hr-08":{"source":"iana"},"audio/ilbc":{"source":"iana"},"audio/ip-mr_v2.5":{"source":"iana"},"audio/isac":{"source":"apache"},"audio/l16":{"source":"iana"},"audio/l20":{"source":"iana"},"audio/l24":{"source":"iana","compressible":false},"audio/l8":{"source":"iana"},"audio/lpc":{"source":"iana"},"audio/melp":{"source":"iana"},"audio/melp1200":{"source":"iana"},"audio/melp2400":{"source":"iana"},"audio/melp600":{"source":"iana"},"audio/mhas":{"source":"iana"},"audio/midi":{"source":"apache","extensions":["mid","midi","kar","rmi"]},"audio/mobile-xmf":{"source":"iana","extensions":["mxmf"]},"audio/mp3":{"compressible":false,"extensions":["mp3"]},"audio/mp4":{"source":"iana","compressible":false,"extensions":["m4a","mp4a"]},"audio/mp4a-latm":{"source":"iana"},"audio/mpa":{"source":"iana"},"audio/mpa-robust":{"source":"iana"},"audio/mpeg":{"source":"iana","compressible":false,"extensions":["mpga","mp2","mp2a","mp3","m2a","m3a"]},"audio/mpeg4-generic":{"source":"iana"},"audio/musepack":{"source":"apache"},"audio/ogg":{"source":"iana","compressible":false,"extensions":["oga","ogg","spx","opus"]},"audio/opus":{"source":"iana"},"audio/parityfec":{"source":"iana"},"audio/pcma":{"source":"iana"},"audio/pcma-wb":{"source":"iana"},"audio/pcmu":{"source":"iana"},"audio/pcmu-wb":{"source":"iana"},"audio/prs.sid":{"source":"iana"},"audio/qcelp":{"source":"iana"},"audio/raptorfec":{"source":"iana"},"audio/red":{"source":"iana"},"audio/rtp-enc-aescm128":{"source":"iana"},"audio/rtp-midi":{"source":"iana"},"audio/rtploopback":{"source":"iana"},"audio/rtx":{"source":"iana"},"audio/s3m":{"source":"apache","extensions":["s3m"]},"audio/scip":{"source":"iana"},"audio/silk":{"source":"apache","extensions":["sil"]},"audio/smv":{"source":"iana"},"audio/smv-qcp":{"source":"iana"},"audio/smv0":{"source":"iana"},"audio/sofa":{"source":"iana"},"audio/sp-midi":{"source":"iana"},"audio/speex":{"source":"iana"},"audio/t140c":{"source":"iana"},"audio/t38":{"source":"iana"},"audio/telephone-event":{"source":"iana"},"audio/tetra_acelp":{"source":"iana"},"audio/tetra_acelp_bb":{"source":"iana"},"audio/tone":{"source":"iana"},"audio/tsvcis":{"source":"iana"},"audio/uemclip":{"source":"iana"},"audio/ulpfec":{"source":"iana"},"audio/usac":{"source":"iana"},"audio/vdvi":{"source":"iana"},"audio/vmr-wb":{"source":"iana"},"audio/vnd.3gpp.iufp":{"source":"iana"},"audio/vnd.4sb":{"source":"iana"},"audio/vnd.audiokoz":{"source":"iana"},"audio/vnd.celp":{"source":"iana"},"audio/vnd.cisco.nse":{"source":"iana"},"audio/vnd.cmles.radio-events":{"source":"iana"},"audio/vnd.cns.anp1":{"source":"iana"},"audio/vnd.cns.inf1":{"source":"iana"},"audio/vnd.dece.audio":{"source":"iana","extensions":["uva","uvva"]},"audio/vnd.digital-winds":{"source":"iana","extensions":["eol"]},"audio/vnd.dlna.adts":{"source":"iana"},"audio/vnd.dolby.heaac.1":{"source":"iana"},"audio/vnd.dolby.heaac.2":{"source":"iana"},"audio/vnd.dolby.mlp":{"source":"iana"},"audio/vnd.dolby.mps":{"source":"iana"},"audio/vnd.dolby.pl2":{"source":"iana"},"audio/vnd.dolby.pl2x":{"source":"iana"},"audio/vnd.dolby.pl2z":{"source":"iana"},"audio/vnd.dolby.pulse.1":{"source":"iana"},"audio/vnd.dra":{"source":"iana","extensions":["dra"]},"audio/vnd.dts":{"source":"iana","extensions":["dts"]},"audio/vnd.dts.hd":{"source":"iana","extensions":["dtshd"]},"audio/vnd.dts.uhd":{"source":"iana"},"audio/vnd.dvb.file":{"source":"iana"},"audio/vnd.everad.plj":{"source":"iana"},"audio/vnd.hns.audio":{"source":"iana"},"audio/vnd.lucent.voice":{"source":"iana","extensions":["lvp"]},"audio/vnd.ms-playready.media.pya":{"source":"iana","extensions":["pya"]},"audio/vnd.nokia.mobile-xmf":{"source":"iana"},"audio/vnd.nortel.vbk":{"source":"iana"},"audio/vnd.nuera.ecelp4800":{"source":"iana","extensions":["ecelp4800"]},"audio/vnd.nuera.ecelp7470":{"source":"iana","extensions":["ecelp7470"]},"audio/vnd.nuera.ecelp9600":{"source":"iana","extensions":["ecelp9600"]},"audio/vnd.octel.sbc":{"source":"iana"},"audio/vnd.presonus.multitrack":{"source":"iana"},"audio/vnd.qcelp":{"source":"iana"},"audio/vnd.rhetorex.32kadpcm":{"source":"iana"},"audio/vnd.rip":{"source":"iana","extensions":["rip"]},"audio/vnd.rn-realaudio":{"compressible":false},"audio/vnd.sealedmedia.softseal.mpeg":{"source":"iana"},"audio/vnd.vmx.cvsd":{"source":"iana"},"audio/vnd.wave":{"compressible":false},"audio/vorbis":{"source":"iana","compressible":false},"audio/vorbis-config":{"source":"iana"},"audio/wav":{"compressible":false,"extensions":["wav"]},"audio/wave":{"compressible":false,"extensions":["wav"]},"audio/webm":{"source":"apache","compressible":false,"extensions":["weba"]},"audio/x-aac":{"source":"apache","compressible":false,"extensions":["aac"]},"audio/x-aiff":{"source":"apache","extensions":["aif","aiff","aifc"]},"audio/x-caf":{"source":"apache","compressible":false,"extensions":["caf"]},"audio/x-flac":{"source":"apache","extensions":["flac"]},"audio/x-m4a":{"source":"nginx","extensions":["m4a"]},"audio/x-matroska":{"source":"apache","extensions":["mka"]},"audio/x-mpegurl":{"source":"apache","extensions":["m3u"]},"audio/x-ms-wax":{"source":"apache","extensions":["wax"]},"audio/x-ms-wma":{"source":"apache","extensions":["wma"]},"audio/x-pn-realaudio":{"source":"apache","extensions":["ram","ra"]},"audio/x-pn-realaudio-plugin":{"source":"apache","extensions":["rmp"]},"audio/x-realaudio":{"source":"nginx","extensions":["ra"]},"audio/x-tta":{"source":"apache"},"audio/x-wav":{"source":"apache","extensions":["wav"]},"audio/xm":{"source":"apache","extensions":["xm"]},"chemical/x-cdx":{"source":"apache","extensions":["cdx"]},"chemical/x-cif":{"source":"apache","extensions":["cif"]},"chemical/x-cmdf":{"source":"apache","extensions":["cmdf"]},"chemical/x-cml":{"source":"apache","extensions":["cml"]},"chemical/x-csml":{"source":"apache","extensions":["csml"]},"chemical/x-pdb":{"source":"apache"},"chemical/x-xyz":{"source":"apache","extensions":["xyz"]},"font/collection":{"source":"iana","extensions":["ttc"]},"font/otf":{"source":"iana","compressible":true,"extensions":["otf"]},"font/sfnt":{"source":"iana"},"font/ttf":{"source":"iana","compressible":true,"extensions":["ttf"]},"font/woff":{"source":"iana","extensions":["woff"]},"font/woff2":{"source":"iana","extensions":["woff2"]},"image/aces":{"source":"iana","extensions":["exr"]},"image/apng":{"compressible":false,"extensions":["apng"]},"image/avci":{"source":"iana","extensions":["avci"]},"image/avcs":{"source":"iana","extensions":["avcs"]},"image/avif":{"source":"iana","compressible":false,"extensions":["avif"]},"image/bmp":{"source":"iana","compressible":true,"extensions":["bmp"]},"image/cgm":{"source":"iana","extensions":["cgm"]},"image/dicom-rle":{"source":"iana","extensions":["drle"]},"image/emf":{"source":"iana","extensions":["emf"]},"image/fits":{"source":"iana","extensions":["fits"]},"image/g3fax":{"source":"iana","extensions":["g3"]},"image/gif":{"source":"iana","compressible":false,"extensions":["gif"]},"image/heic":{"source":"iana","extensions":["heic"]},"image/heic-sequence":{"source":"iana","extensions":["heics"]},"image/heif":{"source":"iana","extensions":["heif"]},"image/heif-sequence":{"source":"iana","extensions":["heifs"]},"image/hej2k":{"source":"iana","extensions":["hej2"]},"image/hsj2":{"source":"iana","extensions":["hsj2"]},"image/ief":{"source":"iana","extensions":["ief"]},"image/jls":{"source":"iana","extensions":["jls"]},"image/jp2":{"source":"iana","compressible":false,"extensions":["jp2","jpg2"]},"image/jpeg":{"source":"iana","compressible":false,"extensions":["jpeg","jpg","jpe"]},"image/jph":{"source":"iana","extensions":["jph"]},"image/jphc":{"source":"iana","extensions":["jhc"]},"image/jpm":{"source":"iana","compressible":false,"extensions":["jpm"]},"image/jpx":{"source":"iana","compressible":false,"extensions":["jpx","jpf"]},"image/jxr":{"source":"iana","extensions":["jxr"]},"image/jxra":{"source":"iana","extensions":["jxra"]},"image/jxrs":{"source":"iana","extensions":["jxrs"]},"image/jxs":{"source":"iana","extensions":["jxs"]},"image/jxsc":{"source":"iana","extensions":["jxsc"]},"image/jxsi":{"source":"iana","extensions":["jxsi"]},"image/jxss":{"source":"iana","extensions":["jxss"]},"image/ktx":{"source":"iana","extensions":["ktx"]},"image/ktx2":{"source":"iana","extensions":["ktx2"]},"image/naplps":{"source":"iana"},"image/pjpeg":{"compressible":false},"image/png":{"source":"iana","compressible":false,"extensions":["png"]},"image/prs.btif":{"source":"iana","extensions":["btif"]},"image/prs.pti":{"source":"iana","extensions":["pti"]},"image/pwg-raster":{"source":"iana"},"image/sgi":{"source":"apache","extensions":["sgi"]},"image/svg+xml":{"source":"iana","compressible":true,"extensions":["svg","svgz"]},"image/t38":{"source":"iana","extensions":["t38"]},"image/tiff":{"source":"iana","compressible":false,"extensions":["tif","tiff"]},"image/tiff-fx":{"source":"iana","extensions":["tfx"]},"image/vnd.adobe.photoshop":{"source":"iana","compressible":true,"extensions":["psd"]},"image/vnd.airzip.accelerator.azv":{"source":"iana","extensions":["azv"]},"image/vnd.cns.inf2":{"source":"iana"},"image/vnd.dece.graphic":{"source":"iana","extensions":["uvi","uvvi","uvg","uvvg"]},"image/vnd.djvu":{"source":"iana","extensions":["djvu","djv"]},"image/vnd.dvb.subtitle":{"source":"iana","extensions":["sub"]},"image/vnd.dwg":{"source":"iana","extensions":["dwg"]},"image/vnd.dxf":{"source":"iana","extensions":["dxf"]},"image/vnd.fastbidsheet":{"source":"iana","extensions":["fbs"]},"image/vnd.fpx":{"source":"iana","extensions":["fpx"]},"image/vnd.fst":{"source":"iana","extensions":["fst"]},"image/vnd.fujixerox.edmics-mmr":{"source":"iana","extensions":["mmr"]},"image/vnd.fujixerox.edmics-rlc":{"source":"iana","extensions":["rlc"]},"image/vnd.globalgraphics.pgb":{"source":"iana"},"image/vnd.microsoft.icon":{"source":"iana","compressible":true,"extensions":["ico"]},"image/vnd.mix":{"source":"iana"},"image/vnd.mozilla.apng":{"source":"iana"},"image/vnd.ms-dds":{"compressible":true,"extensions":["dds"]},"image/vnd.ms-modi":{"source":"iana","extensions":["mdi"]},"image/vnd.ms-photo":{"source":"apache","extensions":["wdp"]},"image/vnd.net-fpx":{"source":"iana","extensions":["npx"]},"image/vnd.pco.b16":{"source":"iana","extensions":["b16"]},"image/vnd.radiance":{"source":"iana"},"image/vnd.sealed.png":{"source":"iana"},"image/vnd.sealedmedia.softseal.gif":{"source":"iana"},"image/vnd.sealedmedia.softseal.jpg":{"source":"iana"},"image/vnd.svf":{"source":"iana"},"image/vnd.tencent.tap":{"source":"iana","extensions":["tap"]},"image/vnd.valve.source.texture":{"source":"iana","extensions":["vtf"]},"image/vnd.wap.wbmp":{"source":"iana","extensions":["wbmp"]},"image/vnd.xiff":{"source":"iana","extensions":["xif"]},"image/vnd.zbrush.pcx":{"source":"iana","extensions":["pcx"]},"image/webp":{"source":"apache","extensions":["webp"]},"image/wmf":{"source":"iana","extensions":["wmf"]},"image/x-3ds":{"source":"apache","extensions":["3ds"]},"image/x-cmu-raster":{"source":"apache","extensions":["ras"]},"image/x-cmx":{"source":"apache","extensions":["cmx"]},"image/x-freehand":{"source":"apache","extensions":["fh","fhc","fh4","fh5","fh7"]},"image/x-icon":{"source":"apache","compressible":true,"extensions":["ico"]},"image/x-jng":{"source":"nginx","extensions":["jng"]},"image/x-mrsid-image":{"source":"apache","extensions":["sid"]},"image/x-ms-bmp":{"source":"nginx","compressible":true,"extensions":["bmp"]},"image/x-pcx":{"source":"apache","extensions":["pcx"]},"image/x-pict":{"source":"apache","extensions":["pic","pct"]},"image/x-portable-anymap":{"source":"apache","extensions":["pnm"]},"image/x-portable-bitmap":{"source":"apache","extensions":["pbm"]},"image/x-portable-graymap":{"source":"apache","extensions":["pgm"]},"image/x-portable-pixmap":{"source":"apache","extensions":["ppm"]},"image/x-rgb":{"source":"apache","extensions":["rgb"]},"image/x-tga":{"source":"apache","extensions":["tga"]},"image/x-xbitmap":{"source":"apache","extensions":["xbm"]},"image/x-xcf":{"compressible":false},"image/x-xpixmap":{"source":"apache","extensions":["xpm"]},"image/x-xwindowdump":{"source":"apache","extensions":["xwd"]},"message/cpim":{"source":"iana"},"message/delivery-status":{"source":"iana"},"message/disposition-notification":{"source":"iana","extensions":["disposition-notification"]},"message/external-body":{"source":"iana"},"message/feedback-report":{"source":"iana"},"message/global":{"source":"iana","extensions":["u8msg"]},"message/global-delivery-status":{"source":"iana","extensions":["u8dsn"]},"message/global-disposition-notification":{"source":"iana","extensions":["u8mdn"]},"message/global-headers":{"source":"iana","extensions":["u8hdr"]},"message/http":{"source":"iana","compressible":false},"message/imdn+xml":{"source":"iana","compressible":true},"message/news":{"source":"iana"},"message/partial":{"source":"iana","compressible":false},"message/rfc822":{"source":"iana","compressible":true,"extensions":["eml","mime"]},"message/s-http":{"source":"iana"},"message/sip":{"source":"iana"},"message/sipfrag":{"source":"iana"},"message/tracking-status":{"source":"iana"},"message/vnd.si.simp":{"source":"iana"},"message/vnd.wfa.wsc":{"source":"iana","extensions":["wsc"]},"model/3mf":{"source":"iana","extensions":["3mf"]},"model/e57":{"source":"iana"},"model/gltf+json":{"source":"iana","compressible":true,"extensions":["gltf"]},"model/gltf-binary":{"source":"iana","compressible":true,"extensions":["glb"]},"model/iges":{"source":"iana","compressible":false,"extensions":["igs","iges"]},"model/mesh":{"source":"iana","compressible":false,"extensions":["msh","mesh","silo"]},"model/mtl":{"source":"iana","extensions":["mtl"]},"model/obj":{"source":"iana","extensions":["obj"]},"model/step":{"source":"iana"},"model/step+xml":{"source":"iana","compressible":true,"extensions":["stpx"]},"model/step+zip":{"source":"iana","compressible":false,"extensions":["stpz"]},"model/step-xml+zip":{"source":"iana","compressible":false,"extensions":["stpxz"]},"model/stl":{"source":"iana","extensions":["stl"]},"model/vnd.collada+xml":{"source":"iana","compressible":true,"extensions":["dae"]},"model/vnd.dwf":{"source":"iana","extensions":["dwf"]},"model/vnd.flatland.3dml":{"source":"iana"},"model/vnd.gdl":{"source":"iana","extensions":["gdl"]},"model/vnd.gs-gdl":{"source":"apache"},"model/vnd.gs.gdl":{"source":"iana"},"model/vnd.gtw":{"source":"iana","extensions":["gtw"]},"model/vnd.moml+xml":{"source":"iana","compressible":true},"model/vnd.mts":{"source":"iana","extensions":["mts"]},"model/vnd.opengex":{"source":"iana","extensions":["ogex"]},"model/vnd.parasolid.transmit.binary":{"source":"iana","extensions":["x_b"]},"model/vnd.parasolid.transmit.text":{"source":"iana","extensions":["x_t"]},"model/vnd.pytha.pyox":{"source":"iana"},"model/vnd.rosette.annotated-data-model":{"source":"iana"},"model/vnd.sap.vds":{"source":"iana","extensions":["vds"]},"model/vnd.usdz+zip":{"source":"iana","compressible":false,"extensions":["usdz"]},"model/vnd.valve.source.compiled-map":{"source":"iana","extensions":["bsp"]},"model/vnd.vtu":{"source":"iana","extensions":["vtu"]},"model/vrml":{"source":"iana","compressible":false,"extensions":["wrl","vrml"]},"model/x3d+binary":{"source":"apache","compressible":false,"extensions":["x3db","x3dbz"]},"model/x3d+fastinfoset":{"source":"iana","extensions":["x3db"]},"model/x3d+vrml":{"source":"apache","compressible":false,"extensions":["x3dv","x3dvz"]},"model/x3d+xml":{"source":"iana","compressible":true,"extensions":["x3d","x3dz"]},"model/x3d-vrml":{"source":"iana","extensions":["x3dv"]},"multipart/alternative":{"source":"iana","compressible":false},"multipart/appledouble":{"source":"iana"},"multipart/byteranges":{"source":"iana"},"multipart/digest":{"source":"iana"},"multipart/encrypted":{"source":"iana","compressible":false},"multipart/form-data":{"source":"iana","compressible":false},"multipart/header-set":{"source":"iana"},"multipart/mixed":{"source":"iana"},"multipart/multilingual":{"source":"iana"},"multipart/parallel":{"source":"iana"},"multipart/related":{"source":"iana","compressible":false},"multipart/report":{"source":"iana"},"multipart/signed":{"source":"iana","compressible":false},"multipart/vnd.bint.med-plus":{"source":"iana"},"multipart/voice-message":{"source":"iana"},"multipart/x-mixed-replace":{"source":"iana"},"text/1d-interleaved-parityfec":{"source":"iana"},"text/cache-manifest":{"source":"iana","compressible":true,"extensions":["appcache","manifest"]},"text/calendar":{"source":"iana","extensions":["ics","ifb"]},"text/calender":{"compressible":true},"text/cmd":{"compressible":true},"text/coffeescript":{"extensions":["coffee","litcoffee"]},"text/cql":{"source":"iana"},"text/cql-expression":{"source":"iana"},"text/cql-identifier":{"source":"iana"},"text/css":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["css"]},"text/csv":{"source":"iana","compressible":true,"extensions":["csv"]},"text/csv-schema":{"source":"iana"},"text/directory":{"source":"iana"},"text/dns":{"source":"iana"},"text/ecmascript":{"source":"iana"},"text/encaprtp":{"source":"iana"},"text/enriched":{"source":"iana"},"text/fhirpath":{"source":"iana"},"text/flexfec":{"source":"iana"},"text/fwdred":{"source":"iana"},"text/gff3":{"source":"iana"},"text/grammar-ref-list":{"source":"iana"},"text/html":{"source":"iana","compressible":true,"extensions":["html","htm","shtml"]},"text/jade":{"extensions":["jade"]},"text/javascript":{"source":"iana","compressible":true},"text/jcr-cnd":{"source":"iana"},"text/jsx":{"compressible":true,"extensions":["jsx"]},"text/less":{"compressible":true,"extensions":["less"]},"text/markdown":{"source":"iana","compressible":true,"extensions":["markdown","md"]},"text/mathml":{"source":"nginx","extensions":["mml"]},"text/mdx":{"compressible":true,"extensions":["mdx"]},"text/mizar":{"source":"iana"},"text/n3":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["n3"]},"text/parameters":{"source":"iana","charset":"UTF-8"},"text/parityfec":{"source":"iana"},"text/plain":{"source":"iana","compressible":true,"extensions":["txt","text","conf","def","list","log","in","ini"]},"text/provenance-notation":{"source":"iana","charset":"UTF-8"},"text/prs.fallenstein.rst":{"source":"iana"},"text/prs.lines.tag":{"source":"iana","extensions":["dsc"]},"text/prs.prop.logic":{"source":"iana"},"text/raptorfec":{"source":"iana"},"text/red":{"source":"iana"},"text/rfc822-headers":{"source":"iana"},"text/richtext":{"source":"iana","compressible":true,"extensions":["rtx"]},"text/rtf":{"source":"iana","compressible":true,"extensions":["rtf"]},"text/rtp-enc-aescm128":{"source":"iana"},"text/rtploopback":{"source":"iana"},"text/rtx":{"source":"iana"},"text/sgml":{"source":"iana","extensions":["sgml","sgm"]},"text/shaclc":{"source":"iana"},"text/shex":{"source":"iana","extensions":["shex"]},"text/slim":{"extensions":["slim","slm"]},"text/spdx":{"source":"iana","extensions":["spdx"]},"text/strings":{"source":"iana"},"text/stylus":{"extensions":["stylus","styl"]},"text/t140":{"source":"iana"},"text/tab-separated-values":{"source":"iana","compressible":true,"extensions":["tsv"]},"text/troff":{"source":"iana","extensions":["t","tr","roff","man","me","ms"]},"text/turtle":{"source":"iana","charset":"UTF-8","extensions":["ttl"]},"text/ulpfec":{"source":"iana"},"text/uri-list":{"source":"iana","compressible":true,"extensions":["uri","uris","urls"]},"text/vcard":{"source":"iana","compressible":true,"extensions":["vcard"]},"text/vnd.a":{"source":"iana"},"text/vnd.abc":{"source":"iana"},"text/vnd.ascii-art":{"source":"iana"},"text/vnd.curl":{"source":"iana","extensions":["curl"]},"text/vnd.curl.dcurl":{"source":"apache","extensions":["dcurl"]},"text/vnd.curl.mcurl":{"source":"apache","extensions":["mcurl"]},"text/vnd.curl.scurl":{"source":"apache","extensions":["scurl"]},"text/vnd.debian.copyright":{"source":"iana","charset":"UTF-8"},"text/vnd.dmclientscript":{"source":"iana"},"text/vnd.dvb.subtitle":{"source":"iana","extensions":["sub"]},"text/vnd.esmertec.theme-descriptor":{"source":"iana","charset":"UTF-8"},"text/vnd.familysearch.gedcom":{"source":"iana","extensions":["ged"]},"text/vnd.ficlab.flt":{"source":"iana"},"text/vnd.fly":{"source":"iana","extensions":["fly"]},"text/vnd.fmi.flexstor":{"source":"iana","extensions":["flx"]},"text/vnd.gml":{"source":"iana"},"text/vnd.graphviz":{"source":"iana","extensions":["gv"]},"text/vnd.hans":{"source":"iana"},"text/vnd.hgl":{"source":"iana"},"text/vnd.in3d.3dml":{"source":"iana","extensions":["3dml"]},"text/vnd.in3d.spot":{"source":"iana","extensions":["spot"]},"text/vnd.iptc.newsml":{"source":"iana"},"text/vnd.iptc.nitf":{"source":"iana"},"text/vnd.latex-z":{"source":"iana"},"text/vnd.motorola.reflex":{"source":"iana"},"text/vnd.ms-mediapackage":{"source":"iana"},"text/vnd.net2phone.commcenter.command":{"source":"iana"},"text/vnd.radisys.msml-basic-layout":{"source":"iana"},"text/vnd.senx.warpscript":{"source":"iana"},"text/vnd.si.uricatalogue":{"source":"iana"},"text/vnd.sosi":{"source":"iana"},"text/vnd.sun.j2me.app-descriptor":{"source":"iana","charset":"UTF-8","extensions":["jad"]},"text/vnd.trolltech.linguist":{"source":"iana","charset":"UTF-8"},"text/vnd.wap.si":{"source":"iana"},"text/vnd.wap.sl":{"source":"iana"},"text/vnd.wap.wml":{"source":"iana","extensions":["wml"]},"text/vnd.wap.wmlscript":{"source":"iana","extensions":["wmls"]},"text/vtt":{"source":"iana","charset":"UTF-8","compressible":true,"extensions":["vtt"]},"text/x-asm":{"source":"apache","extensions":["s","asm"]},"text/x-c":{"source":"apache","extensions":["c","cc","cxx","cpp","h","hh","dic"]},"text/x-component":{"source":"nginx","extensions":["htc"]},"text/x-fortran":{"source":"apache","extensions":["f","for","f77","f90"]},"text/x-gwt-rpc":{"compressible":true},"text/x-handlebars-template":{"extensions":["hbs"]},"text/x-java-source":{"source":"apache","extensions":["java"]},"text/x-jquery-tmpl":{"compressible":true},"text/x-lua":{"extensions":["lua"]},"text/x-markdown":{"compressible":true,"extensions":["mkd"]},"text/x-nfo":{"source":"apache","extensions":["nfo"]},"text/x-opml":{"source":"apache","extensions":["opml"]},"text/x-org":{"compressible":true,"extensions":["org"]},"text/x-pascal":{"source":"apache","extensions":["p","pas"]},"text/x-processing":{"compressible":true,"extensions":["pde"]},"text/x-sass":{"extensions":["sass"]},"text/x-scss":{"extensions":["scss"]},"text/x-setext":{"source":"apache","extensions":["etx"]},"text/x-sfv":{"source":"apache","extensions":["sfv"]},"text/x-suse-ymp":{"compressible":true,"extensions":["ymp"]},"text/x-uuencode":{"source":"apache","extensions":["uu"]},"text/x-vcalendar":{"source":"apache","extensions":["vcs"]},"text/x-vcard":{"source":"apache","extensions":["vcf"]},"text/xml":{"source":"iana","compressible":true,"extensions":["xml"]},"text/xml-external-parsed-entity":{"source":"iana"},"text/yaml":{"compressible":true,"extensions":["yaml","yml"]},"video/1d-interleaved-parityfec":{"source":"iana"},"video/3gpp":{"source":"iana","extensions":["3gp","3gpp"]},"video/3gpp-tt":{"source":"iana"},"video/3gpp2":{"source":"iana","extensions":["3g2"]},"video/av1":{"source":"iana"},"video/bmpeg":{"source":"iana"},"video/bt656":{"source":"iana"},"video/celb":{"source":"iana"},"video/dv":{"source":"iana"},"video/encaprtp":{"source":"iana"},"video/ffv1":{"source":"iana"},"video/flexfec":{"source":"iana"},"video/h261":{"source":"iana","extensions":["h261"]},"video/h263":{"source":"iana","extensions":["h263"]},"video/h263-1998":{"source":"iana"},"video/h263-2000":{"source":"iana"},"video/h264":{"source":"iana","extensions":["h264"]},"video/h264-rcdo":{"source":"iana"},"video/h264-svc":{"source":"iana"},"video/h265":{"source":"iana"},"video/iso.segment":{"source":"iana","extensions":["m4s"]},"video/jpeg":{"source":"iana","extensions":["jpgv"]},"video/jpeg2000":{"source":"iana"},"video/jpm":{"source":"apache","extensions":["jpm","jpgm"]},"video/jxsv":{"source":"iana"},"video/mj2":{"source":"iana","extensions":["mj2","mjp2"]},"video/mp1s":{"source":"iana"},"video/mp2p":{"source":"iana"},"video/mp2t":{"source":"iana","extensions":["ts"]},"video/mp4":{"source":"iana","compressible":false,"extensions":["mp4","mp4v","mpg4"]},"video/mp4v-es":{"source":"iana"},"video/mpeg":{"source":"iana","compressible":false,"extensions":["mpeg","mpg","mpe","m1v","m2v"]},"video/mpeg4-generic":{"source":"iana"},"video/mpv":{"source":"iana"},"video/nv":{"source":"iana"},"video/ogg":{"source":"iana","compressible":false,"extensions":["ogv"]},"video/parityfec":{"source":"iana"},"video/pointer":{"source":"iana"},"video/quicktime":{"source":"iana","compressible":false,"extensions":["qt","mov"]},"video/raptorfec":{"source":"iana"},"video/raw":{"source":"iana"},"video/rtp-enc-aescm128":{"source":"iana"},"video/rtploopback":{"source":"iana"},"video/rtx":{"source":"iana"},"video/scip":{"source":"iana"},"video/smpte291":{"source":"iana"},"video/smpte292m":{"source":"iana"},"video/ulpfec":{"source":"iana"},"video/vc1":{"source":"iana"},"video/vc2":{"source":"iana"},"video/vnd.cctv":{"source":"iana"},"video/vnd.dece.hd":{"source":"iana","extensions":["uvh","uvvh"]},"video/vnd.dece.mobile":{"source":"iana","extensions":["uvm","uvvm"]},"video/vnd.dece.mp4":{"source":"iana"},"video/vnd.dece.pd":{"source":"iana","extensions":["uvp","uvvp"]},"video/vnd.dece.sd":{"source":"iana","extensions":["uvs","uvvs"]},"video/vnd.dece.video":{"source":"iana","extensions":["uvv","uvvv"]},"video/vnd.directv.mpeg":{"source":"iana"},"video/vnd.directv.mpeg-tts":{"source":"iana"},"video/vnd.dlna.mpeg-tts":{"source":"iana"},"video/vnd.dvb.file":{"source":"iana","extensions":["dvb"]},"video/vnd.fvt":{"source":"iana","extensions":["fvt"]},"video/vnd.hns.video":{"source":"iana"},"video/vnd.iptvforum.1dparityfec-1010":{"source":"iana"},"video/vnd.iptvforum.1dparityfec-2005":{"source":"iana"},"video/vnd.iptvforum.2dparityfec-1010":{"source":"iana"},"video/vnd.iptvforum.2dparityfec-2005":{"source":"iana"},"video/vnd.iptvforum.ttsavc":{"source":"iana"},"video/vnd.iptvforum.ttsmpeg2":{"source":"iana"},"video/vnd.motorola.video":{"source":"iana"},"video/vnd.motorola.videop":{"source":"iana"},"video/vnd.mpegurl":{"source":"iana","extensions":["mxu","m4u"]},"video/vnd.ms-playready.media.pyv":{"source":"iana","extensions":["pyv"]},"video/vnd.nokia.interleaved-multimedia":{"source":"iana"},"video/vnd.nokia.mp4vr":{"source":"iana"},"video/vnd.nokia.videovoip":{"source":"iana"},"video/vnd.objectvideo":{"source":"iana"},"video/vnd.radgamettools.bink":{"source":"iana"},"video/vnd.radgamettools.smacker":{"source":"iana"},"video/vnd.sealed.mpeg1":{"source":"iana"},"video/vnd.sealed.mpeg4":{"source":"iana"},"video/vnd.sealed.swf":{"source":"iana"},"video/vnd.sealedmedia.softseal.mov":{"source":"iana"},"video/vnd.uvvu.mp4":{"source":"iana","extensions":["uvu","uvvu"]},"video/vnd.vivo":{"source":"iana","extensions":["viv"]},"video/vnd.youtube.yt":{"source":"iana"},"video/vp8":{"source":"iana"},"video/vp9":{"source":"iana"},"video/webm":{"source":"apache","compressible":false,"extensions":["webm"]},"video/x-f4v":{"source":"apache","extensions":["f4v"]},"video/x-fli":{"source":"apache","extensions":["fli"]},"video/x-flv":{"source":"apache","compressible":false,"extensions":["flv"]},"video/x-m4v":{"source":"apache","extensions":["m4v"]},"video/x-matroska":{"source":"apache","compressible":false,"extensions":["mkv","mk3d","mks"]},"video/x-mng":{"source":"apache","extensions":["mng"]},"video/x-ms-asf":{"source":"apache","extensions":["asf","asx"]},"video/x-ms-vob":{"source":"apache","extensions":["vob"]},"video/x-ms-wm":{"source":"apache","extensions":["wm"]},"video/x-ms-wmv":{"source":"apache","compressible":false,"extensions":["wmv"]},"video/x-ms-wmx":{"source":"apache","extensions":["wmx"]},"video/x-ms-wvx":{"source":"apache","extensions":["wvx"]},"video/x-msvideo":{"source":"apache","extensions":["avi"]},"video/x-sgi-movie":{"source":"apache","extensions":["movie"]},"video/x-smv":{"source":"apache","extensions":["smv"]},"x-conference/x-cooltalk":{"source":"apache","extensions":["ice"]},"x-shader/x-fragment":{"compressible":true},"x-shader/x-vertex":{"compressible":true}}')}},t={};function n(a){var i=t[a];if(void 0!==i)return i.exports;var o=t[a]={id:a,loaded:!1,exports:{}};return e[a].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}n.nmd=e=>(e.paths=[],e.children||(e.children=[]),e);var a=n(9711);return a=a.default})()));
|
|
3
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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cUJDSkFnckIsRUFBQTdlLEVBQUEsTUFBQW5NLEdBQ0FnckIsRUFBQTdlLEVBQUEsTUFBQW5NLHVsQkNEQWdyQixFQUFBN2UsRUFBQSxNQUFBbk0sMmdCQ0FBZ3JCLEVBQUE3ZSxFQUFBLE1BQUFuTSxHQUNBZ3JCLEVBQUE3ZSxFQUFBLE1BQUFuTSxHQUNBZ3JCLEVBQUE3ZSxFQUFBLE1BQUFuTSxHQUNBZ3JCLEVBQUE3ZSxFQUFBLE1BQUFuTSxHQUNBZ3JCLEVBQUE3ZSxFQUFBLE1BQUFuTSxHQUNBZ3JCLEVBQUE3ZSxFQUFBLE1BQUFuTSxHQUNBZ3JCLEVBQUE3ZSxFQUFBLE1BQUFuTSxHQUNBZ3JCLEVBQUE3ZSxFQUFBLE1BQUFuTSxHQUNBZ3JCLEVBQUE3ZSxFQUFBLE1BQUFuTSxHQUNBZ3JCLEVBQUE3ZSxFQUFBLE1BQUFuTSxHQUNBZ3JCLEVBQUE3ZSxFQUFBLE1BQUFuTSxHQUNBZ3JCLEVBQUE3ZSxFQUFBLEtBQUFuTSxHQUNBZ3JCLEVBQUE3ZSxFQUFBLE1BQUFuTSxHQUNBZ3JCLEVBQUE3ZSxFQUFBLE1BQUFuTSxHQUNBZ3JCLEVBQUE3ZSxFQUFBLE1BQUFuTSx1NEJDZEFnckIsRUFBQTdlLEVBQUEsTUFBQW5NLEdBQ0FnckIsRUFBQTdlLEVBQUEsTUFBQW5NLEdBQ0FnckIsRUFBQTdlLEVBQUEsTUFBQW5NLEdBQ0FnckIsRUFBQTdlLEVBQUEsTUFBQW5NLEdBQ0FnckIsRUFBQTdlLEVBQUEsTUFBQW5NLHU0QkNKQWdyQixFQUFBN2UsRUFBQSxNQUFBbk0sR0FDQWdyQixFQUFBN2UsRUFBQSxNQUFBbk0sR0FDQWdyQixFQUFBN2UsRUFBQSxNQUFBbk0sR0FDQWdyQixFQUFBN2UsRUFBQSxNQUFBbk0sR0FDQWdyQixFQUFBN2UsRUFBQSxNQUFBbk0sdWxCQ0pBZ3JCLEVBQUE3ZSxFQUFBLE1BQUFuTSx1bEJDQUFnckIsRUFBQTdlLEVBQUEsTUFBQW5NLHVsQkNBQWdyQixFQUFBN2UsRUFBQSxNQUFBbk0sdWxCQ0FBZ3JCLEVBQUE3ZSxFQUFBLE1BQUFuTSxtcUJDQUFnckIsRUFBQTdlLEVBQUEsTUFBQW5NLEdBQ0FnckIsRUFBQTdlLEVBQUEsTUFBQW5NLHVsQkNEQWdyQixFQUFBN2UsRUFBQSxNQUFBbk0sdWxCQ0FBZ3JCLEVBQUE3ZSxFQUFBLE1BQUFuTSxzbEJDQUFnckIsRUFBQTdlLEVBQUEsS0FBQW5NLHVsQkNBQWdyQixFQUFBN2UsRUFBQSxNQUFBbk0sdTRCQ0FBZ3JCLEVBQUE3ZSxFQUFBLE1BQUFuTSxHQUNBZ3JCLEVBQUE3ZSxFQUFBLE1BQUFuTSxHQUNBZ3JCLEVBQUE3ZSxFQUFBLE1BQUFuTSxHQUNBZ3JCLEVBQUE3ZSxFQUFBLE1BQUFuTSxHQUNBZ3JCLEVBQUE3ZSxFQUFBLE1BQUFuTSxtcUJDSkFnckIsRUFBQTdlLEVBQUEsTUFBQW5NLEdBQ0FnckIsRUFBQTdlLEVBQUEsTUFBQW5NLHNsQkNEQWdyQixFQUFBN2UsRUFBQSxLQUFBbk0sMmdCQ0FBZ3JCLEVBQUE3ZSxFQUFBLE1BQUFuTSxHQUNBZ3JCLEVBQUE3ZSxFQUFBLE1BQUFuTSxHQUNBZ3JCLEVBQUE3ZSxFQUFBLE1BQUFuTSxHQUNBZ3JCLEVBQUE3ZSxFQUFBLE1BQUFuTSxHQUNBZ3JCLEVBQUE3ZSxFQUFBLE1BQUFuTSxHQUNBZ3JCLEVBQUE3ZSxFQUFBLE1BQUFuTSxHQUNBZ3JCLEVBQUE3ZSxFQUFBLE1BQUFuTSxHQUNBZ3JCLEVBQUE3ZSxFQUFBLE1BQUFuTSxHQUNBZ3JCLEVBQUE3ZSxFQUFBLE1BQUFuTSxHQUNBZ3JCLEVBQUE3ZSxFQUFBLE1BQUFuTSxHQUNBZ3JCLEVBQUE3ZSxFQUFBLE1BQUFuTSxHQUNBZ3JCLEVBQUE3ZSxFQUFBLE1BQUFuTSxHQUNBZ3JCLEVBQUE3ZSxFQUFBLE1BQUFuTSxHQUNBZ3JCLEVBQUE3ZSxFQUFBLE1BQUFuTSx1OEJDYkEsSUFBQWlyQixFQUFBL2UsRUFBQUMsRUFBQSxPQUlBbk0sRUFBQUEsTUFBQTZvQixFQUFBMWMsRUFBQSxPQUNBNmUsRUFBQTdlLEVBQUEsTUFBQW5NLEdBQ0FBLEVBQUFBLFdBQUE2b0IsRUFBQTFjLEVBQUEsT0FFQSxJQUFBK2UsRUFBQSxXQUlFLFNBQUFBLEVBQVlsbkIsR0FDVjVELEtBQUtxWixTQUFXelYsQ0FDbEIsQ0FLRixPQVZFcEQsT0FBQTRqQixlQUFXMEcsRUFBQSxVQUFPLEtBQWxCLFdBQXVDLE9BQU85cUIsSUFBTSxrQ0FPcEQ4cUIsRUFBQXhtQixVQUFBOEMsT0FBQSxTQUFPdkQsR0FDTCxPQUFPLElBQUlnbkIsRUFBQXpkLFFBQWN2SixFQUFTN0QsS0FBS3FaLFNBQ3pDLEVBQ0Z5UixDQUFBLENBWEEscUNDUkEsaUJBQ0UsV0FHRCxJQUFJQyxFQUE0Q25yQixFQVE1Q29yQixHQUwwQ25yQixHQUM3Q0EsRUFBT0QsUUFJMEIsaUJBQVZxckIsUUFBc0JBLFFBQzFDRCxFQUFXQyxTQUFXRCxHQUFjQSxFQUFXRSxPQU1uRCxJQUFJQyxFQUF3QixTQUFTMWEsR0FDcEN6USxLQUFLeVEsUUFBVUEsQ0FDaEIsR0FDQTBhLEVBQXNCN21CLFVBQVksSUFBSU0sT0FDTnNDLEtBQU8sd0JBRXZDLElBQUluRixFQUFRLFNBQVMwTyxHQUdwQixNQUFNLElBQUkwYSxFQUFzQjFhLEVBQ2pDLEVBRUkyYSxFQUFRLG1FQUVSQyxFQUF5QixlQXNHekI3QyxFQUFTLENBQ1osT0EzRFksU0FBUzhDLEdBQ3JCQSxFQUFRQyxPQUFPRCxHQUNYLGFBQWF2SCxLQUFLdUgsSUFHckJ2cEIsRUFDQyw2RUFjRixJQVZBLElBR0lXLEVBQ0FDLEVBQ0E2b0IsRUFDQTVHLEVBTkE2RyxFQUFVSCxFQUFNenBCLE9BQVMsRUFDekJHLEVBQVMsR0FDVDBwQixHQUFZLEVBTVo3cEIsRUFBU3lwQixFQUFNenBCLE9BQVM0cEIsSUFFbkJDLEVBQVc3cEIsR0FFbkJhLEVBQUk0b0IsRUFBTUssV0FBV0QsSUFBYSxHQUNsQy9vQixFQUFJMm9CLEVBQU1LLGFBQWFELElBQWEsRUFDcENGLEVBQUlGLEVBQU1LLGFBQWFELEdBSXZCMXBCLEdBQ0NvcEIsRUFBTVEsUUFKUGhILEVBQVNsaUIsRUFBSUMsRUFBSTZvQixJQUlPLEdBQUssSUFDNUJKLEVBQU1RLE9BQU9oSCxHQUFVLEdBQUssSUFDNUJ3RyxFQUFNUSxPQUFPaEgsR0FBVSxFQUFJLElBQzNCd0csRUFBTVEsT0FBZ0IsR0FBVGhILEdBdUJmLE9BbkJlLEdBQVg2RyxHQUNIL29CLEVBQUk0b0IsRUFBTUssV0FBV0QsSUFBYSxFQUNsQy9vQixFQUFJMm9CLEVBQU1LLGFBQWFELEdBRXZCMXBCLEdBQ0NvcEIsRUFBTVEsUUFGUGhILEVBQVNsaUIsRUFBSUMsSUFFVyxJQUN2QnlvQixFQUFNUSxPQUFRaEgsR0FBVSxFQUFLLElBQzdCd0csRUFBTVEsT0FBUWhILEdBQVUsRUFBSyxJQUM3QixLQUVvQixHQUFYNkcsSUFDVjdHLEVBQVMwRyxFQUFNSyxXQUFXRCxHQUMxQjFwQixHQUNDb3BCLEVBQU1RLE9BQU9oSCxHQUFVLEdBQ3ZCd0csRUFBTVEsT0FBUWhILEdBQVUsRUFBSyxJQUM3QixNQUlLNWlCLENBQ1IsRUFJQyxPQWxHWSxTQUFTc3BCLEdBR3JCLElBQUl6cEIsR0FGSnlwQixFQUFRQyxPQUFPRCxHQUNicmtCLFFBQVFva0IsRUFBd0IsS0FDZnhwQixPQUNmQSxFQUFTLEdBQUssSUFFakJBLEdBREF5cEIsRUFBUUEsRUFBTXJrQixRQUFRLE9BQVEsS0FDZnBGLFNBR2ZBLEVBQVMsR0FBSyxHQUVkLGlCQUFpQmtpQixLQUFLdUgsS0FFdEJ2cEIsRUFDQyx5RUFRRixJQUxBLElBQ0k4cEIsRUFDQWpILEVBRkFrSCxFQUFhLEVBR2I5cEIsRUFBUyxHQUNUMHBCLEdBQVksSUFDUEEsRUFBVzdwQixHQUNuQitpQixFQUFTd0csRUFBTVcsUUFBUVQsRUFBTU0sT0FBT0YsSUFDcENHLEVBQWFDLEVBQWEsRUFBaUIsR0FBYkQsRUFBa0JqSCxFQUFTQSxFQUVyRGtILElBQWUsSUFFbEI5cEIsR0FBVXVwQixPQUFPUyxhQUNoQixJQUFPSCxLQUFnQixFQUFJQyxFQUFhLEtBSTNDLE9BQU85cEIsQ0FDUixFQWlFQyxRQUFXLGNBWVYsS0FGRCxhQUNDLE9BQU93bUIsQ0FDUCwrQkFhSCxDQWxLQyxrQkNERCxJQUFJdGxCLEVBQU8sRUFBUSxNQUNmTSxFQUFTLGVBQ1R5b0IsRUFBZ0IsRUFBUSxNQUc1QixTQUFTaHBCLElBQ1BqRCxLQUFLa3NCLFVBQVcsRUFDaEJsc0IsS0FBS3VGLFVBQVcsRUFDaEJ2RixLQUFLbXNCLFNBQVcsRUFDaEJuc0IsS0FBS29zQixZQUFjLFFBQ25CcHNCLEtBQUtxc0IsY0FBZSxFQUVwQnJzQixLQUFLc3NCLFdBQVksRUFDakJ0c0IsS0FBS3dILFNBQVcsR0FDaEJ4SCxLQUFLdXNCLGVBQWlCLEtBQ3RCdnNCLEtBQUt3c0IsYUFBYyxFQUNuQnhzQixLQUFLeXNCLGNBQWUsQ0FDdEIsQ0FiQTVzQixFQUFPRCxRQUFVcUQsRUFjakJDLEVBQUtpQixTQUFTbEIsRUFBZ0JPLEdBRTlCUCxFQUFlcUwsT0FBUyxTQUFTekssR0FDL0IsSUFBSTZvQixFQUFpQixJQUFJMXNCLEtBR3pCLElBQUssSUFBSThELEtBRFRELEVBQVVBLEdBQVcsQ0FBQyxFQUVwQjZvQixFQUFlNW9CLEdBQVVELEVBQVFDLEdBR25DLE9BQU80b0IsQ0FDVCxFQUVBenBCLEVBQWUwcEIsYUFBZSxTQUFTekksR0FDckMsTUFBMEIsbUJBQVhBLEdBQ1MsaUJBQVhBLEdBQ1csa0JBQVhBLEdBQ1csaUJBQVhBLElBQ045ZSxPQUFPQyxTQUFTNmUsRUFDekIsRUFFQWpoQixFQUFlcUIsVUFBVUMsT0FBUyxTQUFTMmYsR0FHekMsR0FGbUJqaEIsRUFBZTBwQixhQUFhekksR0FFN0IsQ0FDaEIsS0FBTUEsYUFBa0IrSCxHQUFnQixDQUN0QyxJQUFJVyxFQUFZWCxFQUFjM2QsT0FBTzRWLEVBQVEsQ0FDM0NrSSxZQUFhdm1CLElBQ2JnbkIsWUFBYTdzQixLQUFLcXNCLGVBRXBCbkksRUFBT2hlLEdBQUcsT0FBUWxHLEtBQUs4c0IsZUFBZW5zQixLQUFLWCxPQUMzQ2trQixFQUFTMEksQ0FDWCxDQUVBNXNCLEtBQUsrc0IsY0FBYzdJLEdBRWZsa0IsS0FBS3FzQixjQUNQbkksRUFBTzlkLE9BRVgsQ0FHQSxPQURBcEcsS0FBS3dILFNBQVMvQixLQUFLeWUsR0FDWmxrQixJQUNULEVBRUFpRCxFQUFlcUIsVUFBVXVGLEtBQU8sU0FBU21qQixFQUFNbnBCLEdBRzdDLE9BRkFMLEVBQU9jLFVBQVV1RixLQUFLM0YsS0FBS2xFLEtBQU1ndEIsRUFBTW5wQixHQUN2QzdELEtBQUtxRyxTQUNFMm1CLENBQ1QsRUFFQS9wQixFQUFlcUIsVUFBVTJvQixTQUFXLFdBR2xDLEdBRkFqdEIsS0FBS3VzQixlQUFpQixLQUVsQnZzQixLQUFLd3NCLFlBQ1B4c0IsS0FBS3lzQixjQUFlLE1BRHRCLENBS0F6c0IsS0FBS3dzQixhQUFjLEVBQ25CLElBQ0UsR0FDRXhzQixLQUFLeXNCLGNBQWUsRUFDcEJ6c0IsS0FBS2t0QixxQkFDRWx0QixLQUFLeXNCLGFBQ2hCLENBQUUsUUFDQXpzQixLQUFLd3NCLGFBQWMsQ0FDckIsQ0FWQSxDQVdGLEVBRUF2cEIsRUFBZXFCLFVBQVU0b0IsYUFBZSxXQUN0QyxJQUFJaEosRUFBU2xrQixLQUFLd0gsU0FBUzJsQixhQUdOLElBQVZqSixFQUtXLG1CQUFYQSxFQUtLQSxFQUNOLFNBQVNBLEdBQ0VqaEIsRUFBZTBwQixhQUFhekksS0FFN0NBLEVBQU9oZSxHQUFHLE9BQVFsRyxLQUFLOHNCLGVBQWVuc0IsS0FBS1gsT0FDM0NBLEtBQUsrc0IsY0FBYzdJLElBR3JCbGtCLEtBQUtvdEIsVUFBVWxKLEVBQ2pCLEVBQUV2akIsS0FBS1gsT0FiTEEsS0FBS290QixVQUFVbEosR0FMZmxrQixLQUFLNEYsS0FtQlQsRUFFQTNDLEVBQWVxQixVQUFVOG9CLFVBQVksU0FBU2xKLEdBSTVDLEdBSEFsa0IsS0FBS3VzQixlQUFpQnJJLEVBRUhqaEIsRUFBZTBwQixhQUFhekksR0FJN0MsT0FGQUEsRUFBT2hlLEdBQUcsTUFBT2xHLEtBQUtpdEIsU0FBU3RzQixLQUFLWCxZQUNwQ2trQixFQUFPcmEsS0FBSzdKLEtBQU0sQ0FBQzRGLEtBQUssSUFJMUIsSUFBSW5CLEVBQVF5ZixFQUNabGtCLEtBQUtxdEIsTUFBTTVvQixHQUNYekUsS0FBS2l0QixVQUNQLEVBRUFocUIsRUFBZXFCLFVBQVV5b0IsY0FBZ0IsU0FBUzdJLEdBQ2hELElBQUk5VCxFQUFPcFEsS0FDWGtrQixFQUFPaGUsR0FBRyxTQUFTLFNBQVNuRixHQUMxQnFQLEVBQUtrZCxXQUFXdnNCLEVBQ2xCLEdBQ0YsRUFFQWtDLEVBQWVxQixVQUFVK29CLE1BQVEsU0FBU2hqQixHQUN4Q3JLLEtBQUtpSyxLQUFLLE9BQVFJLEVBQ3BCLEVBRUFwSCxFQUFlcUIsVUFBVThCLE1BQVEsV0FDMUJwRyxLQUFLcXNCLGVBSVByc0IsS0FBS3FzQixjQUFnQnJzQixLQUFLdXNCLGdCQUF1RCxtQkFBOUJ2c0IsS0FBS3VzQixlQUFvQixPQUFpQnZzQixLQUFLdXNCLGVBQWVubUIsUUFDcEhwRyxLQUFLaUssS0FBSyxTQUNaLEVBRUFoSCxFQUFlcUIsVUFBVStCLE9BQVMsV0FDM0JyRyxLQUFLc3NCLFlBQ1J0c0IsS0FBS3NzQixXQUFZLEVBQ2pCdHNCLEtBQUtrc0IsVUFBVyxFQUNoQmxzQixLQUFLaXRCLFlBR0pqdEIsS0FBS3FzQixjQUFnQnJzQixLQUFLdXNCLGdCQUF3RCxtQkFBL0J2c0IsS0FBS3VzQixlQUFxQixRQUFpQnZzQixLQUFLdXNCLGVBQWVsbUIsU0FDckhyRyxLQUFLaUssS0FBSyxTQUNaLEVBRUFoSCxFQUFlcUIsVUFBVXNCLElBQU0sV0FDN0I1RixLQUFLdXRCLFNBQ0x2dEIsS0FBS2lLLEtBQUssTUFDWixFQUVBaEgsRUFBZXFCLFVBQVV3SyxRQUFVLFdBQ2pDOU8sS0FBS3V0QixTQUNMdnRCLEtBQUtpSyxLQUFLLFFBQ1osRUFFQWhILEVBQWVxQixVQUFVaXBCLE9BQVMsV0FDaEN2dEIsS0FBS2tzQixVQUFXLEVBQ2hCbHNCLEtBQUt3SCxTQUFXLEdBQ2hCeEgsS0FBS3VzQixlQUFpQixJQUN4QixFQUVBdHBCLEVBQWVxQixVQUFVd29CLGVBQWlCLFdBRXhDLEdBREE5c0IsS0FBS3d0QixvQkFDRHh0QixLQUFLbXNCLFVBQVluc0IsS0FBS29zQixhQUExQixDQUlBLElBQUkzYixFQUNGLGdDQUFrQ3pRLEtBQUtvc0IsWUFBYyxtQkFDdkRwc0IsS0FBS3N0QixXQUFXLElBQUkxb0IsTUFBTTZMLEdBSjFCLENBS0YsRUFFQXhOLEVBQWVxQixVQUFVa3BCLGdCQUFrQixXQUN6Q3h0QixLQUFLbXNCLFNBQVcsRUFFaEIsSUFBSS9iLEVBQU9wUSxLQUNYQSxLQUFLd0gsU0FBUzlHLFNBQVEsU0FBU3dqQixHQUN4QkEsRUFBT2lJLFdBSVovYixFQUFLK2IsVUFBWWpJLEVBQU9pSSxTQUMxQixJQUVJbnNCLEtBQUt1c0IsZ0JBQWtCdnNCLEtBQUt1c0IsZUFBZUosV0FDN0Nuc0IsS0FBS21zQixVQUFZbnNCLEtBQUt1c0IsZUFBZUosU0FFekMsRUFFQWxwQixFQUFlcUIsVUFBVWdwQixXQUFhLFNBQVN2c0IsR0FDN0NmLEtBQUt1dEIsU0FDTHZ0QixLQUFLaUssS0FBSyxRQUFTbEosRUFDckIsa0JDek1BbkIsRUFBUTZ0QixXQTJJUixTQUFvQkMsR0FRbkIsR0FQQUEsRUFBSyxJQUFNMXRCLEtBQUsydEIsVUFBWSxLQUFPLElBQ2xDM3RCLEtBQUs0dEIsV0FDSjV0QixLQUFLMnRCLFVBQVksTUFBUSxLQUMxQkQsRUFBSyxJQUNKMXRCLEtBQUsydEIsVUFBWSxNQUFRLEtBQzFCLElBQU05dEIsRUFBT0QsUUFBUWl1QixTQUFTN3RCLEtBQUs4dEIsT0FFL0I5dEIsS0FBSzJ0QixVQUNULE9BR0QsTUFBTW5DLEVBQUksVUFBWXhyQixLQUFLK3RCLE1BQzNCTCxFQUFLTSxPQUFPLEVBQUcsRUFBR3hDLEVBQUcsa0JBS3JCLElBQUk5cEIsRUFBUSxFQUNSdXNCLEVBQVEsRUFDWlAsRUFBSyxHQUFHem1CLFFBQVEsZUFBZWluQixJQUNoQixPQUFWQSxJQUdKeHNCLElBQ2MsT0FBVndzQixJQUdIRCxFQUFRdnNCLEdBQ1QsSUFHRGdzQixFQUFLTSxPQUFPQyxFQUFPLEVBQUd6QyxFQUN2QixFQTNLQTVyQixFQUFRdXVCLEtBNkxSLFNBQWNDLEdBQ2IsSUFDS0EsRUFDSHh1QixFQUFReXVCLFFBQVFDLFFBQVEsUUFBU0YsR0FFakN4dUIsRUFBUXl1QixRQUFRRSxXQUFXLFFBRTdCLENBQUUsTUFBT3hzQixHQUdULENBQ0QsRUF2TUFuQyxFQUFRNHVCLEtBK01SLFdBQ0MsSUFBSUMsRUFDSixJQUNDQSxFQUFJN3VCLEVBQVF5dUIsUUFBUUssUUFBUSxRQUM3QixDQUFFLE1BQU8zc0IsR0FHVCxFQUdLMHNCLEdBQXdCLG9CQUFacnRCLFNBQTJCLFFBQVNBLFVBQ3BEcXRCLEVBQUlydEIsUUFBUXV0QixJQUFJQyxPQUdqQixPQUFPSCxDQUNSLEVBN05BN3VCLEVBQVErdEIsVUF5R1IsV0FJQyxHQUFzQixvQkFBWHpDLFFBQTBCQSxPQUFPOXBCLFVBQW9DLGFBQXhCOHBCLE9BQU85cEIsUUFBUTRKLE1BQXVCa2dCLE9BQU85cEIsUUFBUXl0QixRQUM1RyxPQUFPLEVBSVIsR0FBeUIsb0JBQWRDLFdBQTZCQSxVQUFVQyxXQUFhRCxVQUFVQyxVQUFVbG5CLGNBQWNxbUIsTUFBTSx5QkFDdEcsT0FBTyxFQUtSLE1BQTRCLG9CQUFiYyxVQUE0QkEsU0FBU0MsaUJBQW1CRCxTQUFTQyxnQkFBZ0JDLE9BQVNGLFNBQVNDLGdCQUFnQkMsTUFBTUMsa0JBRXBILG9CQUFYakUsUUFBMEJBLE9BQU8zZSxVQUFZMmUsT0FBTzNlLFFBQVE2aUIsU0FBWWxFLE9BQU8zZSxRQUFROGlCLFdBQWFuRSxPQUFPM2UsUUFBUStpQixRQUdyRyxvQkFBZFIsV0FBNkJBLFVBQVVDLFdBQWFELFVBQVVDLFVBQVVsbkIsY0FBY3FtQixNQUFNLG1CQUFxQnFCLFNBQVNDLE9BQU9DLEdBQUksS0FBTyxJQUU5SCxvQkFBZFgsV0FBNkJBLFVBQVVDLFdBQWFELFVBQVVDLFVBQVVsbkIsY0FBY3FtQixNQUFNLHFCQUN0RyxFQS9IQXR1QixFQUFReXVCLFFBeU9SLFdBQ0MsSUFHQyxPQUFPcUIsWUFDUixDQUFFLE1BQU8zdEIsR0FHVCxDQUNELENBbFBrQjR0QixHQUNsQi92QixFQUFRa1AsUUFBVSxNQUNqQixJQUFJOGdCLEdBQVMsRUFFYixNQUFPLEtBQ0RBLElBQ0pBLEdBQVMsRUFDVHJqQixRQUFRaUQsS0FBSyx5SUFDZCxDQUVELEVBVGlCLEdBZWxCNVAsRUFBUWl3QixPQUFTLENBQ2hCLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFdBc0ZEandCLEVBQVFrd0IsSUFBTXZqQixRQUFRd2pCLE9BQVN4akIsUUFBUXVqQixLQUFPLE1BQVMsR0FrRXZEandCLEVBQU9ELFFBQVUsRUFBUSxJQUFSLENBQW9CQSxHQUVyQyxNQUFNLFdBQUNvd0IsR0FBY253QixFQUFPRCxRQU01Qm93QixFQUFXQyxFQUFJLFNBQVVDLEdBQ3hCLElBQ0MsT0FBTzFVLEtBQUtDLFVBQVV5VSxFQUN2QixDQUFFLE1BQU9udUIsR0FDUixNQUFPLCtCQUFpQ0EsRUFBTTBPLE9BQy9DLENBQ0QsaUJDS0E1USxFQUFPRCxRQTNRUCxTQUFlK3VCLEdBcURkLFNBQVN3QixFQUFZdkMsR0FDcEIsSUFBSXdDLEVBRUFDLEVBQ0FDLEVBRkFDLEVBQWlCLEtBSXJCLFNBQVNSLEtBQVNyQyxHQUVqQixJQUFLcUMsRUFBTTFaLFFBQ1YsT0FHRCxNQUFNakcsRUFBTzJmLEVBR1BTLEVBQU9DLE9BQU8sSUFBSTVsQixNQUNsQjZsQixFQUFLRixHQUFRSixHQUFZSSxHQUMvQnBnQixFQUFLMGQsS0FBTzRDLEVBQ1p0Z0IsRUFBS3VnQixLQUFPUCxFQUNaaGdCLEVBQUtvZ0IsS0FBT0EsRUFDWkosRUFBV0ksRUFFWDlDLEVBQUssR0FBS3lDLEVBQVlTLE9BQU9sRCxFQUFLLElBRVgsaUJBQVpBLEVBQUssSUFFZkEsRUFBS21ELFFBQVEsTUFJZCxJQUFJbnZCLEVBQVEsRUFDWmdzQixFQUFLLEdBQUtBLEVBQUssR0FBR3ptQixRQUFRLGlCQUFpQixDQUFDaW5CLEVBQU80QyxLQUVsRCxHQUFjLE9BQVY1QyxFQUNILE1BQU8sSUFFUnhzQixJQUNBLE1BQU1xdkIsRUFBWVosRUFBWUgsV0FBV2MsR0FDekMsR0FBeUIsbUJBQWRDLEVBQTBCLENBQ3BDLE1BQU1DLEVBQU10RCxFQUFLaHNCLEdBQ2pCd3NCLEVBQVE2QyxFQUFVN3NCLEtBQUtrTSxFQUFNNGdCLEdBRzdCdEQsRUFBS00sT0FBT3RzQixFQUFPLEdBQ25CQSxHQUNELENBQ0EsT0FBT3dzQixDQUFLLElBSWJpQyxFQUFZMUMsV0FBV3ZwQixLQUFLa00sRUFBTXNkLElBRXBCdGQsRUFBSzBmLEtBQU9LLEVBQVlMLEtBQ2hDbUIsTUFBTTdnQixFQUFNc2QsRUFDbkIsQ0FnQ0EsT0E5QkFxQyxFQUFNbkMsVUFBWUEsRUFDbEJtQyxFQUFNcEMsVUFBWXdDLEVBQVl4QyxZQUM5Qm9DLEVBQU1oQyxNQUFRb0MsRUFBWWUsWUFBWXRELEdBQ3RDbUMsRUFBTW9CLE9BQVNBLEVBQ2ZwQixFQUFNamhCLFFBQVVxaEIsRUFBWXJoQixRQUU1QnRPLE9BQU80akIsZUFBZTJMLEVBQU8sVUFBVyxDQUN2Q3FCLFlBQVksRUFDWkMsY0FBYyxFQUNkdmpCLElBQUssSUFDbUIsT0FBbkJ5aUIsRUFDSUEsR0FFSkYsSUFBb0JGLEVBQVkvQixhQUNuQ2lDLEVBQWtCRixFQUFZL0IsV0FDOUJrQyxFQUFlSCxFQUFZOVosUUFBUXVYLElBRzdCMEMsR0FFUmxKLElBQUs4SSxJQUNKSyxFQUFpQkwsQ0FBQyxJQUtZLG1CQUFyQkMsRUFBWW1CLE1BQ3RCbkIsRUFBWW1CLEtBQUt2QixHQUdYQSxDQUNSLENBRUEsU0FBU29CLEVBQU92RCxFQUFXMkQsR0FDMUIsTUFBTUMsRUFBV3JCLEVBQVlud0IsS0FBSzR0QixnQkFBa0MsSUFBZDJELEVBQTRCLElBQU1BLEdBQWEzRCxHQUVyRyxPQURBNEQsRUFBUzFCLElBQU05dkIsS0FBSzh2QixJQUNiMEIsQ0FDUixDQXdGQSxTQUFTQyxFQUFZQyxHQUNwQixPQUFPQSxFQUFPOW9CLFdBQ1pKLFVBQVUsRUFBR2twQixFQUFPOW9CLFdBQVcvRyxPQUFTLEdBQ3hDb0YsUUFBUSxVQUFXLElBQ3RCLENBMEJBLE9BdlFBa3BCLEVBQVlKLE1BQVFJLEVBQ3BCQSxFQUFZL2lCLFFBQVUraUIsRUFDdEJBLEVBQVlTLE9Bb1BaLFNBQWdCSSxHQUNmLEdBQUlBLGFBQWVwc0IsTUFDbEIsT0FBT29zQixFQUFJeEwsT0FBU3dMLEVBQUl2Z0IsUUFFekIsT0FBT3VnQixDQUNSLEVBeFBBYixFQUFZdFIsUUF3TFosV0FDQyxNQUFNdVAsRUFBYSxJQUNmK0IsRUFBWXdCLE1BQU14a0IsSUFBSXNrQixNQUN0QnRCLEVBQVl5QixNQUFNemtCLElBQUlza0IsR0FBYXRrQixLQUFJeWdCLEdBQWEsSUFBTUEsS0FDNUQvbUIsS0FBSyxLQUVQLE9BREFzcEIsRUFBWXZSLE9BQU8sSUFDWndQLENBQ1IsRUE5TEErQixFQUFZdlIsT0FzSlosU0FBZ0J3UCxHQU9mLElBQUkvbEIsRUFOSjhuQixFQUFZaEMsS0FBS0MsR0FDakIrQixFQUFZL0IsV0FBYUEsRUFFekIrQixFQUFZd0IsTUFBUSxHQUNwQnhCLEVBQVl5QixNQUFRLEdBR3BCLE1BQU03SixHQUErQixpQkFBZnFHLEVBQTBCQSxFQUFhLElBQUlyRyxNQUFNLFVBQ2pFemYsRUFBTXlmLEVBQU1sbUIsT0FFbEIsSUFBS3dHLEVBQUksRUFBR0EsRUFBSUMsRUFBS0QsSUFDZjBmLEVBQU0xZixLQU9XLE9BRnRCK2xCLEVBQWFyRyxFQUFNMWYsR0FBR3BCLFFBQVEsTUFBTyxRQUV0QixHQUNka3BCLEVBQVl5QixNQUFNbnNCLEtBQUssSUFBSStwQixPQUFPLElBQU1wQixFQUFXeUQsTUFBTSxHQUFLLE1BRTlEMUIsRUFBWXdCLE1BQU1sc0IsS0FBSyxJQUFJK3BCLE9BQU8sSUFBTXBCLEVBQWEsTUFHeEQsRUE5S0ErQixFQUFZOVosUUFzTVosU0FBaUJuUCxHQUNoQixHQUE4QixNQUExQkEsRUFBS0EsRUFBS3JGLE9BQVMsR0FDdEIsT0FBTyxFQUdSLElBQUl3RyxFQUNBQyxFQUVKLElBQUtELEVBQUksRUFBR0MsRUFBTTZuQixFQUFZeUIsTUFBTS92QixPQUFRd0csRUFBSUMsRUFBS0QsSUFDcEQsR0FBSThuQixFQUFZeUIsTUFBTXZwQixHQUFHMGIsS0FBSzdjLEdBQzdCLE9BQU8sRUFJVCxJQUFLbUIsRUFBSSxFQUFHQyxFQUFNNm5CLEVBQVl3QixNQUFNOXZCLE9BQVF3RyxFQUFJQyxFQUFLRCxJQUNwRCxHQUFJOG5CLEVBQVl3QixNQUFNdHBCLEdBQUcwYixLQUFLN2MsR0FDN0IsT0FBTyxFQUlULE9BQU8sQ0FDUixFQTFOQWlwQixFQUFZdEMsU0FBVyxFQUFRLE1BQy9Cc0MsRUFBWXJoQixRQTBQWixXQUNDdkMsUUFBUWlELEtBQUssd0lBQ2QsRUExUEFoUCxPQUFPQyxLQUFLa3VCLEdBQUtqdUIsU0FBUUwsSUFDeEI4dkIsRUFBWTl2QixHQUFPc3VCLEVBQUl0dUIsRUFBSSxJQU81Qjh2QixFQUFZd0IsTUFBUSxHQUNwQnhCLEVBQVl5QixNQUFRLEdBT3BCekIsRUFBWUgsV0FBYSxDQUFDLEVBa0IxQkcsRUFBWWUsWUFWWixTQUFxQnRELEdBQ3BCLElBQUlrRSxFQUFPLEVBRVgsSUFBSyxJQUFJenBCLEVBQUksRUFBR0EsRUFBSXVsQixFQUFVL3JCLE9BQVF3RyxJQUNyQ3lwQixHQUFTQSxHQUFRLEdBQUtBLEVBQVFsRSxFQUFVakMsV0FBV3RqQixHQUNuRHlwQixHQUFRLEVBR1QsT0FBTzNCLEVBQVlOLE9BQU9wbkIsS0FBS3NwQixJQUFJRCxHQUFRM0IsRUFBWU4sT0FBT2h1QixPQUMvRCxFQTJOQXN1QixFQUFZdlIsT0FBT3VSLEVBQVkzQixRQUV4QjJCLENBQ1Isa0JDMVF1QixvQkFBWi91QixTQUE0QyxhQUFqQkEsUUFBUTRKLE9BQTJDLElBQXBCNUosUUFBUTR3QixTQUFvQjV3QixRQUFReXRCLE9BQ3hHaHZCLEVBQU9ELFFBQVUsRUFBakIsTUFFQUMsRUFBT0QsUUFBVSxFQUFqQixzQkNKRCxNQUFNcXlCLEVBQU0sRUFBUSxNQUNkL3VCLEVBQU8sRUFBUSxNQU1yQnRELEVBQVEweEIsS0EyTlIsU0FBY3ZCLEdBQ2JBLEVBQU1tQyxZQUFjLENBQUMsRUFFckIsTUFBTXp4QixFQUFPRCxPQUFPQyxLQUFLYixFQUFRc3lCLGFBQ2pDLElBQUssSUFBSTdwQixFQUFJLEVBQUdBLEVBQUk1SCxFQUFLb0IsT0FBUXdHLElBQ2hDMG5CLEVBQU1tQyxZQUFZenhCLEVBQUs0SCxJQUFNekksRUFBUXN5QixZQUFZenhCLEVBQUs0SCxHQUV4RCxFQWpPQXpJLEVBQVFrd0IsSUFvTFIsWUFBZ0JwQyxHQUNmLE9BQU90c0IsUUFBUSt3QixPQUFPOUUsTUFBTW5xQixFQUFLa3ZCLGtCQUFrQnh5QixFQUFRc3lCLGVBQWdCeEUsR0FBUSxLQUNwRixFQXJMQTl0QixFQUFRNnRCLFdBeUpSLFNBQW9CQyxHQUNuQixNQUFPRSxVQUFXMW1CLEVBQUksVUFBRXltQixHQUFhM3RCLEtBRXJDLEdBQUkydEIsRUFBVyxDQUNkLE1BQU1uQyxFQUFJeHJCLEtBQUsrdEIsTUFDVHNFLEVBQVksT0FBYzdHLEVBQUksRUFBSUEsRUFBSSxPQUFTQSxHQUMvQzhHLEVBQVMsS0FBS0QsT0FBZW5yQixTQUVuQ3dtQixFQUFLLEdBQUs0RSxFQUFTNUUsRUFBSyxHQUFHM0YsTUFBTSxNQUFNbGhCLEtBQUssS0FBT3lyQixHQUNuRDVFLEVBQUtqb0IsS0FBSzRzQixFQUFZLEtBQU94eUIsRUFBT0QsUUFBUWl1QixTQUFTN3RCLEtBQUs4dEIsTUFBUSxPQUNuRSxNQUNDSixFQUFLLEdBSVAsV0FDQyxHQUFJOXRCLEVBQVFzeUIsWUFBWUssU0FDdkIsTUFBTyxHQUVSLE9BQU8sSUFBSTFuQixNQUFPcUssY0FBZ0IsR0FDbkMsQ0FUWXNkLEdBQVl0ckIsRUFBTyxJQUFNd21CLEVBQUssRUFFMUMsRUFyS0E5dEIsRUFBUXV1QixLQTRMUixTQUFjQyxHQUNUQSxFQUNIaHRCLFFBQVF1dEIsSUFBSUMsTUFBUVIsU0FJYmh0QixRQUFRdXRCLElBQUlDLEtBRXJCLEVBbk1BaHZCLEVBQVE0dUIsS0E0TVIsV0FDQyxPQUFPcHRCLFFBQVF1dEIsSUFBSUMsS0FDcEIsRUE3TUFodkIsRUFBUSt0QixVQTBJUixXQUNDLE1BQU8sV0FBWS90QixFQUFRc3lCLFlBQzFCTyxRQUFRN3lCLEVBQVFzeUIsWUFBWXJDLFFBQzVCb0MsRUFBSVMsT0FBT3R4QixRQUFRK3dCLE9BQU9qTCxHQUM1QixFQTdJQXRuQixFQUFRa1AsUUFBVTVMLEVBQUt5dkIsV0FDdEIsUUFDQSx5SUFPRC95QixFQUFRaXdCLE9BQVMsQ0FBQyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsR0FFakMsSUFHQyxNQUFNK0MsRUFBZ0IsRUFBUSxNQUUxQkEsSUFBa0JBLEVBQWNULFFBQVVTLEdBQWVDLE9BQVMsSUFDckVqekIsRUFBUWl3QixPQUFTLENBQ2hCLEdBQ0EsR0FDQSxHQUNBLEdBQ0EsR0FDQSxHQUNBLEdBQ0EsR0FDQSxHQUNBLEdBQ0EsR0FDQSxHQUNBLEdBQ0EsR0FDQSxHQUNBLEdBQ0EsR0FDQSxHQUNBLEdBQ0EsR0FDQSxHQUNBLEdBQ0EsR0FDQSxHQUNBLEdBQ0EsR0FDQSxHQUNBLEdBQ0EsR0FDQSxHQUNBLEdBQ0EsR0FDQSxJQUNBLElBQ0EsSUFDQSxJQUNBLElBQ0EsSUFDQSxJQUNBLElBQ0EsSUFDQSxJQUNBLElBQ0EsSUFDQSxJQUNBLElBQ0EsSUFDQSxJQUNBLElBQ0EsSUFDQSxJQUNBLElBQ0EsSUFDQSxJQUNBLElBQ0EsSUFDQSxJQUNBLElBQ0EsSUFDQSxJQUNBLElBQ0EsSUFDQSxJQUNBLElBQ0EsSUFDQSxJQUNBLElBQ0EsSUFDQSxJQUNBLElBQ0EsSUFDQSxJQUNBLElBQ0EsSUFDQSxJQUNBLEtBR0gsQ0FBRSxNQUFPOXRCLEdBRVQsQ0FRQW5DLEVBQVFzeUIsWUFBYzF4QixPQUFPQyxLQUFLVyxRQUFRdXRCLEtBQUs3SSxRQUFPemxCLEdBQzlDLFdBQVcwakIsS0FBSzFqQixLQUNyQm9MLFFBQU8sQ0FBQ2tDLEVBQUt0TixLQUVmLE1BQU11RyxFQUFPdkcsRUFDWG1JLFVBQVUsR0FDVlgsY0FDQVosUUFBUSxhQUFhLENBQUM2ckIsRUFBR0MsSUFDbEJBLEVBQUVDLGdCQUlYLElBQUloQyxFQUFNNXZCLFFBQVF1dEIsSUFBSXR1QixHQVl0QixPQVZDMndCLElBREcsMkJBQTJCak4sS0FBS2lOLEtBRXpCLDZCQUE2QmpOLEtBQUtpTixLQUUxQixTQUFSQSxFQUNKLEtBRUFQLE9BQU9PLElBR2RyakIsRUFBSS9HLEdBQVFvcUIsRUFDTHJqQixDQUFHLEdBQ1IsQ0FBQyxHQTJGSjlOLEVBQU9ELFFBQVUsRUFBUSxJQUFSLENBQW9CQSxHQUVyQyxNQUFNLFdBQUNvd0IsR0FBY253QixFQUFPRCxRQU01Qm93QixFQUFXaUQsRUFBSSxTQUFVL0MsR0FFeEIsT0FEQWx3QixLQUFLa3lCLFlBQVlyQyxPQUFTN3ZCLEtBQUsydEIsVUFDeEJ6cUIsRUFBS2d3QixRQUFRaEQsRUFBR2x3QixLQUFLa3lCLGFBQzFCbkssTUFBTSxNQUNONWEsS0FBSWdtQixHQUFPQSxFQUFJQyxTQUNmdnNCLEtBQUssSUFDUixFQU1BbXBCLEVBQVdxRCxFQUFJLFNBQVVuRCxHQUV4QixPQURBbHdCLEtBQUtreUIsWUFBWXJDLE9BQVM3dkIsS0FBSzJ0QixVQUN4QnpxQixFQUFLZ3dCLFFBQVFoRCxFQUFHbHdCLEtBQUtreUIsWUFDN0Isa0JDdFFBLElBQUkxdUIsRUFBUyxlQUNUTixFQUFPLEVBQVEsTUFHbkIsU0FBUytvQixJQUNQanNCLEtBQUtzekIsT0FBUyxLQUNkdHpCLEtBQUttc0IsU0FBVyxFQUNoQm5zQixLQUFLb3NCLFlBQWMsUUFDbkJwc0IsS0FBSzZzQixhQUFjLEVBRW5CN3NCLEtBQUt1ekIsc0JBQXVCLEVBQzVCdnpCLEtBQUtzc0IsV0FBWSxFQUNqQnRzQixLQUFLd3pCLGdCQUFrQixFQUN6QixDQVZBM3pCLEVBQU9ELFFBQVVxc0IsRUFXakIvb0IsRUFBS2lCLFNBQVM4bkIsRUFBZXpvQixHQUU3QnlvQixFQUFjM2QsT0FBUyxTQUFTZ2xCLEVBQVF6dkIsR0FDdEMsSUFBSTR2QixFQUFnQixJQUFJenpCLEtBR3hCLElBQUssSUFBSThELEtBRFRELEVBQVVBLEdBQVcsQ0FBQyxFQUVwQjR2QixFQUFjM3ZCLEdBQVVELEVBQVFDLEdBR2xDMnZCLEVBQWNILE9BQVNBLEVBRXZCLElBQUlJLEVBQVdKLEVBQU9ycEIsS0FXdEIsT0FWQXFwQixFQUFPcnBCLEtBQU8sV0FFWixPQURBd3BCLEVBQWNFLFlBQVlDLFdBQ25CRixFQUFTekMsTUFBTXFDLEVBQVFNLFVBQ2hDLEVBRUFOLEVBQU9wdEIsR0FBRyxTQUFTLFdBQVksSUFDM0J1dEIsRUFBYzVHLGFBQ2hCeUcsRUFBT2x0QixRQUdGcXRCLENBQ1QsRUFFQWp6QixPQUFPNGpCLGVBQWU2SCxFQUFjM25CLFVBQVcsV0FBWSxDQUN6RCtzQixjQUFjLEVBQ2RELFlBQVksRUFDWnRqQixJQUFLLFdBQ0gsT0FBTzlOLEtBQUtzekIsT0FBTy90QixRQUNyQixJQUdGMG1CLEVBQWMzbkIsVUFBVXV2QixZQUFjLFdBQ3BDLE9BQU83ekIsS0FBS3N6QixPQUFPTyxZQUFZNUMsTUFBTWp4QixLQUFLc3pCLE9BQVFNLFVBQ3BELEVBRUEzSCxFQUFjM25CLFVBQVUrQixPQUFTLFdBQzFCckcsS0FBS3NzQixXQUNSdHNCLEtBQUs4ekIsVUFHUDl6QixLQUFLc3pCLE9BQU9qdEIsUUFDZCxFQUVBNGxCLEVBQWMzbkIsVUFBVThCLE1BQVEsV0FDOUJwRyxLQUFLc3pCLE9BQU9sdEIsT0FDZCxFQUVBNmxCLEVBQWMzbkIsVUFBVXd2QixRQUFVLFdBQ2hDOXpCLEtBQUtzc0IsV0FBWSxFQUVqQnRzQixLQUFLd3pCLGdCQUFnQjl5QixRQUFRLFNBQVNndEIsR0FDcEMxdEIsS0FBS2lLLEtBQUtnbkIsTUFBTWp4QixLQUFNMHRCLEVBQ3hCLEVBQUUvc0IsS0FBS1gsT0FDUEEsS0FBS3d6QixnQkFBa0IsRUFDekIsRUFFQXZILEVBQWMzbkIsVUFBVXVGLEtBQU8sV0FDN0IsSUFBSTRrQixFQUFJanJCLEVBQU9jLFVBQVV1RixLQUFLb25CLE1BQU1qeEIsS0FBTTR6QixXQUUxQyxPQURBNXpCLEtBQUtxRyxTQUNFb29CLENBQ1QsRUFFQXhDLEVBQWMzbkIsVUFBVXF2QixZQUFjLFNBQVNqRyxHQUN6QzF0QixLQUFLc3NCLFVBQ1B0c0IsS0FBS2lLLEtBQUtnbkIsTUFBTWp4QixLQUFNMHRCLElBSVIsU0FBWkEsRUFBSyxLQUNQMXRCLEtBQUttc0IsVUFBWXVCLEVBQUssR0FBRzdyQixPQUN6QjdCLEtBQUsrekIsK0JBR1AvekIsS0FBS3d6QixnQkFBZ0IvdEIsS0FBS2lvQixHQUM1QixFQUVBekIsRUFBYzNuQixVQUFVeXZCLDRCQUE4QixXQUNwRCxLQUFJL3pCLEtBQUt1ekIsc0JBSUx2ekIsS0FBS21zQixVQUFZbnNCLEtBQUtvc0IsYUFBMUIsQ0FJQXBzQixLQUFLdXpCLHNCQUF1QixFQUM1QixJQUFJOWlCLEVBQ0YsZ0NBQWtDelEsS0FBS29zQixZQUFjLG1CQUN2RHBzQixLQUFLaUssS0FBSyxRQUFTLElBQUlyRixNQUFNNkwsR0FMN0IsQ0FNRixrQkMxR0EsSUFBSXNmLEVBRUpsd0IsRUFBT0QsUUFBVSxXQUNmLElBQUttd0IsRUFBTyxDQUNWLElBRUVBLEVBQVEsRUFBUSxLQUFSLENBQWlCLG1CQUMzQixDQUNBLE1BQU9odUIsR0FBZSxDQUNELG1CQUFWZ3VCLElBQ1RBLEVBQVEsV0FBb0IsRUFFaEMsQ0FDQUEsRUFBTWtCLE1BQU0sS0FBTTJDLFVBQ3BCLGtCQ2RBLElBQUlyYSxFQUFNLEVBQVEsTUFDZHNPLEVBQU10TyxFQUFJc08sSUFDVnprQixFQUFPLEVBQVEsTUFDZkMsRUFBUSxFQUFRLE1BQ2hCMndCLEVBQVcsaUJBQ1hDLEVBQVMsRUFBUSxNQUNqQmxFLEVBQVEsRUFBUSxNQUdoQm1FLEdBQWUsRUFDbkIsSUFDRUQsRUFBTyxJQUFJcE0sRUFDYixDQUNBLE1BQU85bEIsR0FDTG15QixFQUE4QixvQkFBZm55QixFQUFNcWQsSUFDdkIsQ0FHQSxJQUFJK1UsRUFBcUIsQ0FDdkIsT0FDQSxPQUNBLFdBQ0EsT0FDQSxPQUNBLFdBQ0EsT0FDQSxXQUNBLFFBQ0EsU0FDQSxRQUlFL1osRUFBUyxDQUFDLFFBQVMsVUFBVyxVQUFXLFFBQVMsU0FBVSxXQUM1RGdhLEVBQWdCNXpCLE9BQU84TixPQUFPLE1BQ2xDOEwsRUFBTzFaLFNBQVEsU0FBVTJ6QixHQUN2QkQsRUFBY0MsR0FBUyxTQUFVQyxFQUFNQyxFQUFNQyxHQUMzQ3gwQixLQUFLeTBCLGNBQWN4cUIsS0FBS29xQixFQUFPQyxFQUFNQyxFQUFNQyxFQUM3QyxDQUNGLElBR0EsSUFBSUUsRUFBa0JDLEVBQ3BCLGtCQUNBLGNBQ0FDLFdBRUVDLEVBQW1CRixFQUNyQiw2QkFDQSw2QkFFRUcsRUFBd0JILEVBQzFCLDRCQUNBLHVDQUNBRSxHQUVFRSxFQUE2QkosRUFDL0Isa0NBQ0EsZ0RBRUVLLEVBQXFCTCxFQUN2Qiw2QkFDQSxtQkFJRTdsQixFQUFVa2xCLEVBQVMxdkIsVUFBVXdLLFNBQVdtbUIsRUFHNUMsU0FBU0MsRUFBb0JyeEIsRUFBU3N4QixHQUVwQ25CLEVBQVM5dkIsS0FBS2xFLE1BQ2RBLEtBQUtvMUIsaUJBQWlCdnhCLEdBQ3RCN0QsS0FBS3ExQixTQUFXeHhCLEVBQ2hCN0QsS0FBS3MxQixRQUFTLEVBQ2R0MUIsS0FBS3UxQixTQUFVLEVBQ2Z2MUIsS0FBS3cxQixlQUFpQixFQUN0QngxQixLQUFLeTFCLFdBQWEsR0FDbEJ6MUIsS0FBSzAxQixtQkFBcUIsRUFDMUIxMUIsS0FBSzIxQixvQkFBc0IsR0FHdkJSLEdBQ0ZuMUIsS0FBS2tHLEdBQUcsV0FBWWl2QixHQUl0QixJQUFJL2tCLEVBQU9wUSxLQUNYQSxLQUFLNDFCLGtCQUFvQixTQUFVenZCLEdBQ2pDLElBQ0VpSyxFQUFLeWxCLGlCQUFpQjF2QixFQUN4QixDQUNBLE1BQU8ydkIsR0FDTDFsQixFQUFLbkcsS0FBSyxRQUFTNnJCLGFBQWlCakIsRUFDbENpQixFQUFRLElBQUlqQixFQUFpQixDQUFFaUIsTUFBT0EsSUFDMUMsQ0FDRixFQUdBOTFCLEtBQUsrMUIsaUJBQ1AsQ0FrWUEsU0FBU0MsRUFBS0MsR0FFWixJQUFJcjJCLEVBQVUsQ0FDWnMyQixhQUFjLEdBQ2RsTixjQUFlLFVBSWJtTixFQUFrQixDQUFDLEVBcUR2QixPQXBEQTMxQixPQUFPQyxLQUFLdzFCLEdBQVd2MUIsU0FBUSxTQUFVMDFCLEdBQ3ZDLElBQUl6c0IsRUFBV3lzQixFQUFTLElBQ3BCQyxFQUFpQkYsRUFBZ0J4c0IsR0FBWXNzQixFQUFVRyxHQUN2REUsRUFBa0IxMkIsRUFBUXcyQixHQUFVNTFCLE9BQU84TixPQUFPK25CLEdBNEN0RDcxQixPQUFPKzFCLGlCQUFpQkQsRUFBaUIsQ0FDdkNsdEIsUUFBUyxDQUFFM0UsTUExQ2IsU0FBaUI2bUIsRUFBT3puQixFQUFTaEQsR0FvS3JDLElBQWU0RCxFQXRJVCxPQXNJU0EsRUFsS0M2bUIsRUFtS1B6RCxHQUFPcGpCLGFBQWlCb2pCLEVBbEt6QnlELEVBQVFrTCxFQUFnQmxMLEdBRWpCbUwsRUFBU25MLEdBQ2hCQSxFQUFRa0wsRUFBZ0JsekIsRUFBU2dvQixLQUdqQ3pxQixFQUFXZ0QsRUFDWEEsRUFBVTZ5QixFQUFZcEwsR0FDdEJBLEVBQVEsQ0FBRTNoQixTQUFVQSxJQUVsQmd0QixFQUFXOXlCLEtBQ2JoRCxFQUFXZ0QsRUFDWEEsRUFBVSxPQUlaQSxFQUFVckQsT0FBT29MLE9BQU8sQ0FDdEJzcUIsYUFBY3QyQixFQUFRczJCLGFBQ3RCbE4sY0FBZXBwQixFQUFRb3BCLGVBQ3RCc0MsRUFBT3puQixJQUNGc3lCLGdCQUFrQkEsRUFDckJNLEVBQVM1eUIsRUFBUTRGLE9BQVVndEIsRUFBUzV5QixFQUFRNkYsWUFDL0M3RixFQUFRNkYsU0FBVyxPQUdyQnVxQixFQUFPMkMsTUFBTS95QixFQUFROEYsU0FBVUEsRUFBVSxxQkFDekNvbUIsRUFBTSxVQUFXbHNCLEdBQ1YsSUFBSXF4QixFQUFvQnJ4QixFQUFTaEQsRUFDMUMsRUFXNkJ3d0IsY0FBYyxFQUFNRCxZQUFZLEVBQU1sRixVQUFVLEdBQzNFcGUsSUFBSyxDQUFFckosTUFUVCxTQUFhNm1CLEVBQU96bkIsRUFBU2hELEdBQzNCLElBQUlnMkIsRUFBaUJQLEVBQWdCbHRCLFFBQVFraUIsRUFBT3puQixFQUFTaEQsR0FFN0QsT0FEQWcyQixFQUFlanhCLE1BQ1JpeEIsQ0FDVCxFQUtxQnhGLGNBQWMsRUFBTUQsWUFBWSxFQUFNbEYsVUFBVSxJQUV2RSxJQUNPdHNCLENBQ1QsQ0FFQSxTQUFTcTFCLElBQXFCLENBRTlCLFNBQVMzeEIsRUFBU2dvQixHQUNoQixJQUFJd0wsRUFFSixHQUFJNUMsRUFDRjRDLEVBQVMsSUFBSWpQLEVBQUl5RCxRQUtqQixJQUFLbUwsR0FETEssRUFBU0osRUFBWW5kLEVBQUlvRSxNQUFNMk4sS0FDVjNoQixVQUNuQixNQUFNLElBQUkrcUIsRUFBZ0IsQ0FBRXBKLFVBR2hDLE9BQU93TCxDQUNULENBT0EsU0FBU0osRUFBWXBMLEdBQ25CLEdBQUksTUFBTXZILEtBQUt1SCxFQUFNNWhCLFlBQWMsb0JBQW9CcWEsS0FBS3VILEVBQU01aEIsVUFDaEUsTUFBTSxJQUFJZ3JCLEVBQWdCLENBQUVwSixNQUFPQSxFQUFNeUwsTUFBUXpMLElBRW5ELEdBQUksTUFBTXZILEtBQUt1SCxFQUFNN2hCLFFBQVUsMkJBQTJCc2EsS0FBS3VILEVBQU03aEIsTUFDbkUsTUFBTSxJQUFJaXJCLEVBQWdCLENBQUVwSixNQUFPQSxFQUFNeUwsTUFBUXpMLElBRW5ELE9BQU9BLENBQ1QsQ0FFQSxTQUFTa0wsRUFBZ0JRLEVBQVdDLEdBQ2xDLElBQUlDLEVBQVNELEdBQVUsQ0FBQyxFQUN4QixJQUFLLElBQUk1MkIsS0FBTzh6QixFQUNkK0MsRUFBTzcyQixHQUFPMjJCLEVBQVUzMkIsR0FjMUIsT0FWSTYyQixFQUFPeHRCLFNBQVN5dEIsV0FBVyxPQUM3QkQsRUFBT3h0QixTQUFXd3RCLEVBQU94dEIsU0FBU21vQixNQUFNLEdBQUksSUFHMUIsS0FBaEJxRixFQUFPM3RCLE9BQ1QydEIsRUFBTzN0QixLQUFPa25CLE9BQU95RyxFQUFPM3RCLE9BRzlCMnRCLEVBQU8vekIsS0FBTyt6QixFQUFPRSxPQUFTRixFQUFPMXRCLFNBQVcwdEIsRUFBT0UsT0FBU0YsRUFBTzF0QixTQUVoRTB0QixDQUNULENBRUEsU0FBU0csRUFBc0JDLEVBQU9yeEIsR0FDcEMsSUFBSXN4QixFQUNKLElBQUssSUFBSTF5QixLQUFVb0IsRUFDYnF4QixFQUFNdlQsS0FBS2xmLEtBQ2IweUIsRUFBWXR4QixFQUFRcEIsVUFDYm9CLEVBQVFwQixJQUduQixPQUFPLE1BQUMweUIsT0FDTjV4QixFQUFZNGxCLE9BQU9nTSxHQUFXbkUsTUFDbEMsQ0FFQSxTQUFTdUIsRUFBZ0J2VixFQUFNM08sRUFBUyttQixHQUV0QyxTQUFTQyxFQUFZQyxHQUNuQjl5QixNQUFNK3lCLGtCQUFrQjMzQixLQUFNQSxLQUFLNDNCLGFBQ25DcDNCLE9BQU9vTCxPQUFPNUwsS0FBTTAzQixHQUFjLENBQUMsR0FDbkMxM0IsS0FBS29mLEtBQU9BLEVBQ1pwZixLQUFLeVEsUUFBVXpRLEtBQUs4MUIsTUFBUXJsQixFQUFVLEtBQU96USxLQUFLODFCLE1BQU1ybEIsUUFBVUEsQ0FDcEUsQ0FjQSxPQVhBZ25CLEVBQVluekIsVUFBWSxJQUFLa3pCLEdBQWE1eUIsT0FDMUNwRSxPQUFPKzFCLGlCQUFpQmtCLEVBQVluekIsVUFBVyxDQUM3Q3N6QixZQUFhLENBQ1huekIsTUFBT2d6QixFQUNQckcsWUFBWSxHQUVkbHFCLEtBQU0sQ0FDSnpDLE1BQU8sVUFBWTJhLEVBQU8sSUFDMUJnUyxZQUFZLEtBR1RxRyxDQUNULENBRUEsU0FBU0ksRUFBZXp1QixFQUFTckgsR0FDL0IsSUFBSyxJQUFJc3lCLEtBQVNqYSxFQUNoQmhSLEVBQVFZLGVBQWVxcUIsRUFBT0QsRUFBY0MsSUFFOUNqckIsRUFBUWxELEdBQUcsUUFBUyt1QixHQUNwQjdyQixFQUFRMEYsUUFBUS9NLEVBQ2xCLENBUUEsU0FBUzAwQixFQUFTaHlCLEdBQ2hCLE1BQXdCLGlCQUFWQSxHQUFzQkEsYUFBaUI4bUIsTUFDdkQsQ0FFQSxTQUFTb0wsRUFBV2x5QixHQUNsQixNQUF3QixtQkFBVkEsQ0FDaEIsQ0E5aUJBeXdCLEVBQW9CNXdCLFVBQVk5RCxPQUFPOE4sT0FBTzBsQixFQUFTMXZCLFdBRXZENHdCLEVBQW9CNXdCLFVBQVUvQyxNQUFRLFdBQ3BDczJCLEVBQWU3M0IsS0FBSzgzQixpQkFDcEI5M0IsS0FBSzgzQixnQkFBZ0J2MkIsUUFDckJ2QixLQUFLaUssS0FBSyxRQUNaLEVBRUFpckIsRUFBb0I1d0IsVUFBVXdLLFFBQVUsU0FBVS9NLEdBR2hELE9BRkE4MUIsRUFBZTczQixLQUFLODNCLGdCQUFpQi8xQixHQUNyQytNLEVBQVE1SyxLQUFLbEUsS0FBTStCLEdBQ1ovQixJQUNULEVBR0FrMUIsRUFBb0I1d0IsVUFBVStvQixNQUFRLFNBQVVoakIsRUFBTTB0QixFQUFVbDNCLEdBRTlELEdBQUliLEtBQUt1MUIsUUFDUCxNQUFNLElBQUlQLEVBSVosSUFBS3lCLEVBQVNwc0IsS0EyaEJVLGlCQURSNUYsRUExaEJpQjRGLE1BMmhCSSxXQUFZNUYsSUExaEIvQyxNQUFNLElBQUltd0IsVUFBVSxpREF5aEJ4QixJQUFrQm53QixFQXZoQlpreUIsRUFBV29CLEtBQ2JsM0IsRUFBV2szQixFQUNYQSxFQUFXLE1BS08sSUFBaEIxdEIsRUFBS3hJLE9BT0w3QixLQUFLMDFCLG1CQUFxQnJyQixFQUFLeEksUUFBVTdCLEtBQUtxMUIsU0FBU3JNLGVBQ3pEaHBCLEtBQUswMUIsb0JBQXNCcnJCLEVBQUt4SSxPQUNoQzdCLEtBQUsyMUIsb0JBQW9CbHdCLEtBQUssQ0FBRTRFLEtBQU1BLEVBQU0wdEIsU0FBVUEsSUFDdEQvM0IsS0FBSzgzQixnQkFBZ0J6SyxNQUFNaGpCLEVBQU0wdEIsRUFBVWwzQixLQUkzQ2IsS0FBS2lLLEtBQUssUUFBUyxJQUFJOHFCLEdBQ3ZCLzBCLEtBQUt1QixTQWREVixHQUNGQSxHQWVOLEVBR0FxMEIsRUFBb0I1d0IsVUFBVXNCLElBQU0sU0FBVXlFLEVBQU0wdEIsRUFBVWwzQixHQVk1RCxHQVZJODFCLEVBQVd0c0IsSUFDYnhKLEVBQVd3SixFQUNYQSxFQUFPMHRCLEVBQVcsTUFFWHBCLEVBQVdvQixLQUNsQmwzQixFQUFXazNCLEVBQ1hBLEVBQVcsTUFJUjF0QixFQUlBLENBQ0gsSUFBSStGLEVBQU9wUSxLQUNQZzRCLEVBQWlCaDRCLEtBQUs4M0IsZ0JBQzFCOTNCLEtBQUtxdEIsTUFBTWhqQixFQUFNMHRCLEdBQVUsV0FDekIzbkIsRUFBS2tsQixRQUFTLEVBQ2QwQyxFQUFlcHlCLElBQUksS0FBTSxLQUFNL0UsRUFDakMsSUFDQWIsS0FBS3UxQixTQUFVLENBQ2pCLE1BWEV2MUIsS0FBS3MxQixPQUFTdDFCLEtBQUt1MUIsU0FBVSxFQUM3QnYxQixLQUFLODNCLGdCQUFnQmx5QixJQUFJLEtBQU0sS0FBTS9FLEVBV3pDLEVBR0FxMEIsRUFBb0I1d0IsVUFBVXNGLFVBQVksU0FBVTFDLEVBQU16QyxHQUN4RHpFLEtBQUtxMUIsU0FBU3B2QixRQUFRaUIsR0FBUXpDLEVBQzlCekUsS0FBSzgzQixnQkFBZ0JsdUIsVUFBVTFDLEVBQU16QyxFQUN2QyxFQUdBeXdCLEVBQW9CNXdCLFVBQVUyekIsYUFBZSxTQUFVL3dCLFVBQzlDbEgsS0FBS3ExQixTQUFTcHZCLFFBQVFpQixHQUM3QmxILEtBQUs4M0IsZ0JBQWdCRyxhQUFhL3dCLEVBQ3BDLEVBR0FndUIsRUFBb0I1d0IsVUFBVWpELFdBQWEsU0FBVTYyQixFQUFPcjNCLEdBQzFELElBQUl1UCxFQUFPcFEsS0FHWCxTQUFTbTRCLEVBQWlCQyxHQUN4QkEsRUFBTy8yQixXQUFXNjJCLEdBQ2xCRSxFQUFPcHVCLGVBQWUsVUFBV291QixFQUFPdHBCLFNBQ3hDc3BCLEVBQU9DLFlBQVksVUFBV0QsRUFBT3RwQixRQUN2QyxDQUdBLFNBQVN3cEIsRUFBV0YsR0FDZGhvQixFQUFLbW9CLFVBQ1BDLGFBQWFwb0IsRUFBS21vQixVQUVwQm5vQixFQUFLbW9CLFNBQVdsM0IsWUFBVyxXQUN6QitPLEVBQUtuRyxLQUFLLFdBQ1Z3dUIsR0FDRixHQUFHUCxHQUNIQyxFQUFpQkMsRUFDbkIsQ0FHQSxTQUFTSyxJQUVIcm9CLEVBQUttb0IsV0FDUEMsYUFBYXBvQixFQUFLbW9CLFVBQ2xCbm9CLEVBQUttb0IsU0FBVyxNQUlsQm5vQixFQUFLcEcsZUFBZSxRQUFTeXVCLEdBQzdCcm9CLEVBQUtwRyxlQUFlLFFBQVN5dUIsR0FDN0Jyb0IsRUFBS3BHLGVBQWUsV0FBWXl1QixHQUNoQ3JvQixFQUFLcEcsZUFBZSxRQUFTeXVCLEdBQ3pCNTNCLEdBQ0Z1UCxFQUFLcEcsZUFBZSxVQUFXbkosR0FFNUJ1UCxFQUFLZ29CLFFBQ1Job0IsRUFBSzBuQixnQkFBZ0I5dEIsZUFBZSxTQUFVc3VCLEVBRWxELENBc0JBLE9BbkJJejNCLEdBQ0ZiLEtBQUtrRyxHQUFHLFVBQVdyRixHQUlqQmIsS0FBS280QixPQUNQRSxFQUFXdDRCLEtBQUtvNEIsUUFHaEJwNEIsS0FBSzgzQixnQkFBZ0JZLEtBQUssU0FBVUosR0FJdEN0NEIsS0FBS2tHLEdBQUcsU0FBVWl5QixHQUNsQm40QixLQUFLa0csR0FBRyxRQUFTdXlCLEdBQ2pCejRCLEtBQUtrRyxHQUFHLFFBQVN1eUIsR0FDakJ6NEIsS0FBS2tHLEdBQUcsV0FBWXV5QixHQUNwQno0QixLQUFLa0csR0FBRyxRQUFTdXlCLEdBRVZ6NEIsSUFDVCxFQUdBLENBQ0UsZUFBZ0IsWUFDaEIsYUFBYyxzQkFDZFUsU0FBUSxTQUFVNEksR0FDbEI0ckIsRUFBb0I1d0IsVUFBVWdGLEdBQVUsU0FBVTVHLEVBQUdDLEdBQ25ELE9BQU8zQyxLQUFLODNCLGdCQUFnQnh1QixHQUFRNUcsRUFBR0MsRUFDekMsQ0FDRixJQUdBLENBQUMsVUFBVyxhQUFjLFVBQVVqQyxTQUFRLFNBQVVpNEIsR0FDcERuNEIsT0FBTzRqQixlQUFlOFEsRUFBb0I1d0IsVUFBV3EwQixFQUFVLENBQzdEN3FCLElBQUssV0FBYyxPQUFPOU4sS0FBSzgzQixnQkFBZ0JhLEVBQVcsR0FFOUQsSUFFQXpELEVBQW9CNXdCLFVBQVU4d0IsaUJBQW1CLFNBQVV2eEIsR0FrQnpELEdBaEJLQSxFQUFRb0MsVUFDWHBDLEVBQVFvQyxRQUFVLENBQUMsR0FNakJwQyxFQUFRNEYsT0FFTDVGLEVBQVE2RixXQUNYN0YsRUFBUTZGLFNBQVc3RixFQUFRNEYsYUFFdEI1RixFQUFRNEYsT0FJWjVGLEVBQVEyRixVQUFZM0YsRUFBUVYsS0FBTSxDQUNyQyxJQUFJeTFCLEVBQVkvMEIsRUFBUVYsS0FBSzRvQixRQUFRLEtBQ2pDNk0sRUFBWSxFQUNkLzBCLEVBQVEyRixTQUFXM0YsRUFBUVYsTUFHM0JVLEVBQVEyRixTQUFXM0YsRUFBUVYsS0FBS3FGLFVBQVUsRUFBR293QixHQUM3Qy8wQixFQUFRdXpCLE9BQVN2ekIsRUFBUVYsS0FBS3FGLFVBQVVvd0IsR0FFNUMsQ0FDRixFQUlBMUQsRUFBb0I1d0IsVUFBVXl4QixnQkFBa0IsV0FFOUMsSUFBSXBzQixFQUFXM0osS0FBS3ExQixTQUFTMXJCLFNBQ3pCMHNCLEVBQWlCcjJCLEtBQUtxMUIsU0FBU2MsZ0JBQWdCeHNCLEdBQ25ELElBQUswc0IsRUFDSCxNQUFNLElBQUl6QixVQUFVLHdCQUEwQmpyQixHQUtoRCxHQUFJM0osS0FBS3ExQixTQUFTd0QsT0FBUSxDQUN4QixJQUFJekMsRUFBU3pzQixFQUFTa29CLE1BQU0sR0FBSSxHQUNoQzd4QixLQUFLcTFCLFNBQVN5RCxNQUFROTRCLEtBQUtxMUIsU0FBU3dELE9BQU96QyxFQUM3QyxDQUdBLElBQUlodEIsRUFBVXBKLEtBQUs4M0IsZ0JBQ2J6QixFQUFlanRCLFFBQVFwSixLQUFLcTFCLFNBQVVyMUIsS0FBSzQxQixtQkFFakQsSUFBSyxJQUFJdkIsS0FEVGpyQixFQUFRcXJCLGNBQWdCejBCLEtBQ05vYSxHQUNoQmhSLEVBQVFsRCxHQUFHbXVCLEVBQU9ELEVBQWNDLElBYWxDLEdBUkFyMEIsS0FBSys0QixZQUFjLE1BQU1oVixLQUFLL2pCLEtBQUtxMUIsU0FBU2x5QixNQUMxQ29XLEVBQUl1WCxPQUFPOXdCLEtBQUtxMUIsVUFHaEJyMUIsS0FBS3ExQixTQUFTbHlCLEtBSVpuRCxLQUFLZzVCLFlBQWEsQ0FFcEIsSUFBSTN3QixFQUFJLEVBQ0orSCxFQUFPcFEsS0FDUGk1QixFQUFVajVCLEtBQUsyMUIscUJBQ2xCLFNBQVN1RCxFQUFVbjNCLEdBR2xCLEdBQUlxSCxJQUFZZ0gsRUFBSzBuQixnQkFHbkIsR0FBSS8xQixFQUNGcU8sRUFBS25HLEtBQUssUUFBU2xJLFFBR2hCLEdBQUlzRyxFQUFJNHdCLEVBQVFwM0IsT0FBUSxDQUMzQixJQUFJK2lCLEVBQVNxVSxFQUFRNXdCLEtBRWhCZSxFQUFRK3ZCLFVBQ1gvdkIsRUFBUWlrQixNQUFNekksRUFBT3ZhLEtBQU11YSxFQUFPbVQsU0FBVW1CLEVBRWhELE1BRVM5b0IsRUFBS2tsQixRQUNabHNCLEVBQVF4RCxLQUdkLENBdEJBLEVBdUJGLENBQ0YsRUFHQXN2QixFQUFvQjV3QixVQUFVdXhCLGlCQUFtQixTQUFVMXZCLEdBRXpELElBQUlpekIsRUFBYWp6QixFQUFTaXpCLFdBQ3RCcDVCLEtBQUtxMUIsU0FBU2dFLGdCQUNoQnI1QixLQUFLeTFCLFdBQVdod0IsS0FBSyxDQUNuQjhULElBQUt2WixLQUFLKzRCLFlBQ1Y5eUIsUUFBU0UsRUFBU0YsUUFDbEJtekIsV0FBWUEsSUFZaEIsSUF3QklqUSxFQXhCQW1RLEVBQVduekIsRUFBU0YsUUFBUXF6QixTQUNoQyxJQUFLQSxJQUE4QyxJQUFsQ3Q1QixLQUFLcTFCLFNBQVNrRSxpQkFDM0JILEVBQWEsS0FBT0EsR0FBYyxJQU9wQyxPQU5BanpCLEVBQVNxekIsWUFBY3g1QixLQUFLKzRCLFlBQzVCNXlCLEVBQVNzekIsVUFBWXo1QixLQUFLeTFCLFdBQzFCejFCLEtBQUtpSyxLQUFLLFdBQVk5RCxRQUd0Qm5HLEtBQUsyMUIsb0JBQXNCLElBVzdCLEdBTkFrQyxFQUFlNzNCLEtBQUs4M0IsaUJBRXBCM3hCLEVBQVMySSxZQUlIOU8sS0FBS3cxQixlQUFpQngxQixLQUFLcTFCLFNBQVNhLGFBQ3hDLE1BQU0sSUFBSXBCLEVBS1osSUFBSTRFLEVBQWlCMTVCLEtBQUtxMUIsU0FBU3FFLGVBQy9CQSxJQUNGdlEsRUFBaUIzb0IsT0FBT29MLE9BQU8sQ0FFN0IrdEIsS0FBTXh6QixFQUFTeXpCLElBQUlDLFVBQVUsU0FDNUI3NUIsS0FBS3ExQixTQUFTcHZCLFVBT25CLElBQUlxRCxFQUFTdEosS0FBS3ExQixTQUFTL3JCLFNBQ1AsTUFBZjh2QixHQUFxQyxNQUFmQSxJQUFnRCxTQUF6QnA1QixLQUFLcTFCLFNBQVMvckIsUUFLNUMsTUFBZjh2QixJQUF3QixpQkFBaUJyVixLQUFLL2pCLEtBQUtxMUIsU0FBUy9yQixXQUMvRHRKLEtBQUtxMUIsU0FBUy9yQixPQUFTLE1BRXZCdEosS0FBSzIxQixvQkFBc0IsR0FDM0IwQixFQUFzQixhQUFjcjNCLEtBQUtxMUIsU0FBU3B2QixVQUlwRCxJQTZIa0I2ekIsRUFBVUMsRUE3SHhCQyxFQUFvQjNDLEVBQXNCLFVBQVdyM0IsS0FBS3ExQixTQUFTcHZCLFNBR25FZzBCLEVBQWtCMzJCLEVBQVN0RCxLQUFLKzRCLGFBQ2hDbUIsRUFBY0YsR0FBcUJDLEVBQWdCeHdCLEtBQ25EMHdCLEVBQWEsUUFBUXBXLEtBQUt1VixHQUFZdDVCLEtBQUsrNEIsWUFDN0N4ZixFQUFJdVgsT0FBT3R3QixPQUFPb0wsT0FBT3F1QixFQUFpQixDQUFFeHdCLEtBQU15d0IsS0FHaERFLEdBb0hjTixFQXBIV1IsRUFvSERTLEVBcEhXSSxFQXNIaENqRyxFQUFlLElBQUlyTSxFQUFJaVMsRUFBVUMsR0FBUXoyQixFQUFTaVcsRUFBSThnQixRQUFRTixFQUFNRCxLQXZHM0UsR0FkQS9KLEVBQU0saUJBQWtCcUssRUFBWXJELE1BQ3BDLzJCLEtBQUtnNUIsYUFBYyxFQUNuQnhDLEVBQWdCNEQsRUFBYXA2QixLQUFLcTFCLFdBSTlCK0UsRUFBWXp3QixXQUFhc3dCLEVBQWdCdHdCLFVBQ2pCLFdBQXpCeXdCLEVBQVl6d0IsVUFDWnl3QixFQUFZM3dCLE9BQVN5d0IsSUEwTDFCLFNBQXFCSSxFQUFXaHRCLEdBQzlCMm1CLEVBQU93QyxFQUFTNkQsSUFBYzdELEVBQVNucEIsSUFDdkMsSUFBSWl0QixFQUFNRCxFQUFVejRCLE9BQVN5TCxFQUFPekwsT0FBUyxFQUM3QyxPQUFPMDRCLEVBQU0sR0FBd0IsTUFBbkJELEVBQVVDLElBQWdCRCxFQUFVRSxTQUFTbHRCLEVBQ2pFLENBN0xNbXRCLENBQVlMLEVBQVkzd0IsS0FBTXl3QixLQUNoQzdDLEVBQXNCLHlDQUEwQ3IzQixLQUFLcTFCLFNBQVNwdkIsU0FJNUUwd0IsRUFBVytDLEdBQWlCLENBQzlCLElBQUlnQixFQUFrQixDQUNwQnowQixRQUFTRSxFQUFTRixRQUNsQm16QixXQUFZQSxHQUVWdUIsRUFBaUIsQ0FDbkJwaEIsSUFBSzRnQixFQUNMN3dCLE9BQVFBLEVBQ1JyRCxRQUFTa2pCLEdBRVh1USxFQUFlMTVCLEtBQUtxMUIsU0FBVXFGLEVBQWlCQyxHQUMvQzM2QixLQUFLbzFCLGlCQUFpQnAxQixLQUFLcTFCLFNBQzdCLENBR0FyMUIsS0FBSysxQixpQkFDUCxFQTJMQWwyQixFQUFPRCxRQUFVbzJCLEVBQUssQ0FBRTV5QixLQUFNQSxFQUFNQyxNQUFPQSxJQUMzQ3hELEVBQU9ELFFBQVFvMkIsS0FBT0EseUJDOXBCdEJuMkIsRUFBT0QsUUFBVSxDQUFDZzdCLEVBQU1DLEtBQ3ZCQSxFQUFPQSxHQUFRejVCLFFBQVF5NUIsS0FDdkIsTUFBTXZJLEVBQVNzSSxFQUFLekQsV0FBVyxLQUFPLEdBQXNCLElBQWhCeUQsRUFBSy80QixPQUFlLElBQU0sS0FDaEVpNUIsRUFBTUQsRUFBSzlPLFFBQVF1RyxFQUFTc0ksR0FDNUJHLEVBQWdCRixFQUFLOU8sUUFBUSxNQUNuQyxPQUFnQixJQUFUK08sS0FBa0MsSUFBbkJDLEdBQThCRCxFQUFNQyxFQUFjLGtCQ0t6RWw3QixFQUFPRCxRQUFVLEVBQWpCLG1DQ0dBLElBMkl1Qm83QixFQUFZQyxFQUU3QkMsRUE3SUZDLEVBQUssRUFBUSxNQUNiQyxFQUFVLGdCQU9WQyxFQUFzQiwwQkFDdEJDLEVBQW1CLFdBeUJ2QixTQUFTQyxFQUFTdndCLEdBQ2hCLElBQUtBLEdBQXdCLGlCQUFUQSxFQUNsQixPQUFPLEVBSVQsSUFBSWtqQixFQUFRbU4sRUFBb0JHLEtBQUt4d0IsR0FDakN2SCxFQUFPeXFCLEdBQVNpTixFQUFHak4sRUFBTSxHQUFHcm1CLGVBRWhDLE9BQUlwRSxHQUFRQSxFQUFLODNCLFFBQ1I5M0IsRUFBSzgzQixXQUlWck4sSUFBU29OLEVBQWlCdlgsS0FBS21LLEVBQU0sTUFDaEMsT0FJWCxDQXJDQXR1QixFQUFRMjdCLFFBQVVBLEVBQ2xCMzdCLEVBQVE2N0IsU0FBVyxDQUFFbjBCLE9BQVFpMEIsR0FDN0IzN0IsRUFBUTRHLFlBNENSLFNBQXNCMnNCLEdBRXBCLElBQUtBLEdBQXNCLGlCQUFSQSxFQUNqQixPQUFPLEVBR1QsSUFBSTF2QixHQUE2QixJQUF0QjB2QixFQUFJcEgsUUFBUSxLQUNuQm5zQixFQUFRMEgsT0FBTzZyQixHQUNmQSxFQUVKLElBQUsxdkIsRUFDSCxPQUFPLEVBSVQsSUFBaUMsSUFBN0JBLEVBQUtzb0IsUUFBUSxXQUFtQixDQUNsQyxJQUFJd1AsRUFBVTM3QixFQUFRMjdCLFFBQVE5M0IsR0FDMUI4M0IsSUFBUzkzQixHQUFRLGFBQWU4M0IsRUFBUTF6QixjQUM5QyxDQUVBLE9BQU9wRSxDQUNULEVBaEVBN0QsRUFBUTg3QixVQXlFUixTQUFvQjF3QixHQUNsQixJQUFLQSxHQUF3QixpQkFBVEEsRUFDbEIsT0FBTyxFQUlULElBQUlrakIsRUFBUW1OLEVBQW9CRyxLQUFLeHdCLEdBR2pDMndCLEVBQU96TixHQUFTdHVCLEVBQVFvN0IsV0FBVzlNLEVBQU0sR0FBR3JtQixlQUVoRCxJQUFLOHpCLElBQVNBLEVBQUs5NUIsT0FDakIsT0FBTyxFQUdULE9BQU84NUIsRUFBSyxFQUNkLEVBeEZBLzdCLEVBQVFvN0IsV0FBYXg2QixPQUFPOE4sT0FBTyxNQUNuQzFPLEVBQVEwSCxPQWdHUixTQUFpQm5FLEdBQ2YsSUFBS0EsR0FBd0IsaUJBQVRBLEVBQ2xCLE9BQU8sRUFJVCxJQUFJdTRCLEVBQVlOLEVBQVEsS0FBT2o0QixHQUM1QjBFLGNBQ0ErekIsT0FBTyxHQUVWLElBQUtGLEVBQ0gsT0FBTyxFQUdULE9BQU85N0IsRUFBUXE3QixNQUFNUyxLQUFjLENBQ3JDLEVBOUdBOTdCLEVBQVFxN0IsTUFBUXo2QixPQUFPOE4sT0FBTyxNQXFIUDBzQixFQWxIVnA3QixFQUFRbzdCLFdBa0hjQyxFQWxIRnI3QixFQUFRcTdCLE1Bb0huQ0MsRUFBYSxDQUFDLFFBQVMsY0FBVXYxQixFQUFXLFFBRWhEbkYsT0FBT0MsS0FBSzA2QixHQUFJejZCLFNBQVEsU0FBMEJzSyxHQUNoRCxJQUFJdkgsRUFBTzAzQixFQUFHbndCLEdBQ1Yyd0IsRUFBT2w0QixFQUFLdTNCLFdBRWhCLEdBQUtXLEdBQVNBLEVBQUs5NUIsT0FBbkIsQ0FLQW01QixFQUFXaHdCLEdBQVEyd0IsRUFHbkIsSUFBSyxJQUFJdHpCLEVBQUksRUFBR0EsRUFBSXN6QixFQUFLOTVCLE9BQVF3RyxJQUFLLENBQ3BDLElBQUlxekIsRUFBWUMsRUFBS3R6QixHQUVyQixHQUFJNHlCLEVBQU1TLEdBQVksQ0FDcEIsSUFBSW56QixFQUFPMnlCLEVBQVduUCxRQUFRb1AsRUFBR0YsRUFBTVMsSUFBWXBJLFFBQy9DdUksRUFBS1gsRUFBV25QLFFBQVF0b0IsRUFBSzZ2QixRQUVqQyxHQUF5Qiw2QkFBckIySCxFQUFNUyxLQUNQbnpCLEVBQU9zekIsR0FBT3R6QixJQUFTc3pCLEdBQXlDLGlCQUFuQ1osRUFBTVMsR0FBV0UsT0FBTyxFQUFHLEtBRXpELFFBRUosQ0FHQVgsRUFBTVMsR0FBYTF3QixDQUNyQixDQXRCQSxDQXVCRixjQ3RMRixJQUFJOHdCLEVBQUksSUFDSkMsRUFBUSxHQUFKRCxFQUNKRSxFQUFRLEdBQUpELEVBQ0pyb0IsRUFBUSxHQUFKc29CLEVBQ0pDLEVBQVEsRUFBSnZvQixFQUNKd29CLEVBQVEsT0FBSnhvQixFQXFKUixTQUFTeW9CLEVBQU96TCxFQUFJMEwsRUFBT0MsRUFBR24xQixHQUM1QixJQUFJbzFCLEVBQVdGLEdBQWEsSUFBSkMsRUFDeEIsT0FBTzV6QixLQUFLOHpCLE1BQU03TCxFQUFLMkwsR0FBSyxJQUFNbjFCLEdBQVFvMUIsRUFBVyxJQUFNLEdBQzdELENBeElBejhCLEVBQU9ELFFBQVUsU0FBU294QixFQUFLbnRCLEdBQzdCQSxFQUFVQSxHQUFXLENBQUMsRUFDdEIsSUFBSW1ILFNBQWNnbUIsRUFDbEIsR0FBYSxXQUFUaG1CLEdBQXFCZ21CLEVBQUludkIsT0FBUyxFQUNwQyxPQWtCSixTQUFlc3hCLEdBRWIsSUFEQUEsRUFBTTVILE9BQU80SCxJQUNMdHhCLE9BQVMsSUFDZixPQUVGLElBQUlxc0IsRUFBUSxtSUFBbUlzTixLQUM3SXJJLEdBRUYsSUFBS2pGLEVBQ0gsT0FFRixJQUFJbU8sRUFBSUcsV0FBV3RPLEVBQU0sSUFFekIsUUFEWUEsRUFBTSxJQUFNLE1BQU1ybUIsZUFFNUIsSUFBSyxRQUNMLElBQUssT0FDTCxJQUFLLE1BQ0wsSUFBSyxLQUNMLElBQUssSUFDSCxPQUFPdzBCLEVBQUlILEVBQ2IsSUFBSyxRQUNMLElBQUssT0FDTCxJQUFLLElBQ0gsT0FBT0csRUFBSUosRUFDYixJQUFLLE9BQ0wsSUFBSyxNQUNMLElBQUssSUFDSCxPQUFPSSxFQUFJM29CLEVBQ2IsSUFBSyxRQUNMLElBQUssT0FDTCxJQUFLLE1BQ0wsSUFBSyxLQUNMLElBQUssSUFDSCxPQUFPMm9CLEVBQUlMLEVBQ2IsSUFBSyxVQUNMLElBQUssU0FDTCxJQUFLLE9BQ0wsSUFBSyxNQUNMLElBQUssSUFDSCxPQUFPSyxFQUFJTixFQUNiLElBQUssVUFDTCxJQUFLLFNBQ0wsSUFBSyxPQUNMLElBQUssTUFDTCxJQUFLLElBQ0gsT0FBT00sRUFBSVAsRUFDYixJQUFLLGVBQ0wsSUFBSyxjQUNMLElBQUssUUFDTCxJQUFLLE9BQ0wsSUFBSyxLQUNILE9BQU9PLEVBQ1QsUUFDRSxPQUVOLENBekVXMWUsQ0FBTXFULEdBQ1IsR0FBYSxXQUFUaG1CLEdBQXFCeXhCLFNBQVN6TCxHQUN2QyxPQUFPbnRCLEVBQVE2NEIsS0EwR25CLFNBQWlCaE0sR0FDZixJQUFJMEwsRUFBUTN6QixLQUFLc3BCLElBQUlyQixHQUNyQixHQUFJMEwsR0FBUzFvQixFQUNYLE9BQU95b0IsRUFBT3pMLEVBQUkwTCxFQUFPMW9CLEVBQUcsT0FFOUIsR0FBSTBvQixHQUFTSixFQUNYLE9BQU9HLEVBQU96TCxFQUFJMEwsRUFBT0osRUFBRyxRQUU5QixHQUFJSSxHQUFTTCxFQUNYLE9BQU9JLEVBQU96TCxFQUFJMEwsRUFBT0wsRUFBRyxVQUU5QixHQUFJSyxHQUFTTixFQUNYLE9BQU9LLEVBQU96TCxFQUFJMEwsRUFBT04sRUFBRyxVQUU5QixPQUFPcEwsRUFBSyxLQUNkLENBekgwQmlNLENBQVEzTCxHQWlGbEMsU0FBa0JOLEdBQ2hCLElBQUkwTCxFQUFRM3pCLEtBQUtzcEIsSUFBSXJCLEdBQ3JCLEdBQUkwTCxHQUFTMW9CLEVBQ1gsT0FBT2pMLEtBQUs4ekIsTUFBTTdMLEVBQUtoZCxHQUFLLElBRTlCLEdBQUkwb0IsR0FBU0osRUFDWCxPQUFPdnpCLEtBQUs4ekIsTUFBTTdMLEVBQUtzTCxHQUFLLElBRTlCLEdBQUlJLEdBQVNMLEVBQ1gsT0FBT3R6QixLQUFLOHpCLE1BQU03TCxFQUFLcUwsR0FBSyxJQUU5QixHQUFJSyxHQUFTTixFQUNYLE9BQU9yekIsS0FBSzh6QixNQUFNN0wsRUFBS29MLEdBQUssSUFFOUIsT0FBT3BMLEVBQUssSUFDZCxDQWhHeUNrTSxDQUFTNUwsR0FFaEQsTUFBTSxJQUFJcHNCLE1BQ1Isd0RBQ0U0VyxLQUFLQyxVQUFVdVYsR0FFckIsK0JDbkNBLElBQUkxdEIsRUFBVyxjQUVYdTVCLEVBQWdCLENBQ2xCQyxJQUFLLEdBQ0xDLE9BQVEsR0FDUjM1QixLQUFNLEdBQ05DLE1BQU8sSUFDUDI1QixHQUFJLEdBQ0pDLElBQUssS0FHSEMsRUFBaUIzUixPQUFPam5CLFVBQVVrMkIsVUFBWSxTQUFTc0IsR0FDekQsT0FBT0EsRUFBRWo2QixRQUFVN0IsS0FBSzZCLFNBQ3VCLElBQTdDN0IsS0FBSytyQixRQUFRK1AsRUFBRzk3QixLQUFLNkIsT0FBU2k2QixFQUFFajZCLE9BQ3BDLEVBdUZBLFNBQVNzN0IsRUFBTzk4QixHQUNkLE9BQU9lLFFBQVF1dEIsSUFBSXR1QixFQUFJd0gsZ0JBQWtCekcsUUFBUXV0QixJQUFJdHVCLEVBQUkyeUIsZ0JBQWtCLEVBQzdFLENBRUFwekIsRUFBUXc5QixlQXBGUixTQUF3QjdqQixHQUN0QixJQUFJOGpCLEVBQTJCLGlCQUFSOWpCLEVBQW1CalcsRUFBU2lXLEdBQU9BLEdBQU8sQ0FBQyxFQUM5RCtqQixFQUFRRCxFQUFVMXpCLFNBQ2xCRCxFQUFXMnpCLEVBQVU1ekIsS0FDckJGLEVBQU84ekIsRUFBVTl6QixLQUNyQixHQUF3QixpQkFBYkcsSUFBMEJBLEdBQTZCLGlCQUFWNHpCLEVBQ3RELE1BQU8sR0FRVCxHQUxBQSxFQUFRQSxFQUFNdlYsTUFBTSxJQUFLLEdBQUcsSUE2QjlCLFNBQXFCcmUsRUFBVUgsR0FDN0IsSUFBSWcwQixHQUNESixFQUFPLHdCQUEwQkEsRUFBTyxhQUFhdDFCLGNBQ3hELElBQUswMUIsRUFDSCxPQUFPLEVBRVQsR0FBaUIsTUFBYkEsRUFDRixPQUFPLEVBR1QsT0FBT0EsRUFBU3hWLE1BQU0sU0FBU2pCLE9BQU0sU0FBU21DLEdBQzVDLElBQUtBLEVBQ0gsT0FBTyxFQUVULElBQUl1VSxFQUFjdlUsRUFBTWlGLE1BQU0sZ0JBQzFCdVAsRUFBc0JELEVBQWNBLEVBQVksR0FBS3ZVLEVBQ3JEeVUsRUFBa0JGLEVBQWNqTyxTQUFTaU8sRUFBWSxJQUFNLEVBQy9ELFNBQUlFLEdBQW1CQSxJQUFvQm4wQixLQUl0QyxRQUFRd2EsS0FBSzBaLElBS29CLE1BQWxDQSxFQUFvQjdSLE9BQU8sS0FFN0I2UixFQUFzQkEsRUFBb0I1TCxNQUFNLEtBRzFDcUwsRUFBZWg1QixLQUFLd0YsRUFBVSt6QixJQVI3Qi96QixJQUFhK3pCLEVBU3hCLEdBQ0YsQ0F6RE9FLENBRkxqMEIsRUFBV0EsRUFBU3pDLFFBQVEsUUFBUyxJQUNyQ3NDLEVBQU9nbUIsU0FBU2htQixJQUFTc3pCLEVBQWNTLElBQVUsR0FFL0MsTUFBTyxHQUdULElBQUlyVSxFQUNGa1UsRUFBTyxjQUFnQkcsRUFBUSxXQUMvQkgsRUFBT0csRUFBUSxXQUNmSCxFQUFPLHFCQUNQQSxFQUFPLGFBS1QsT0FKSWxVLElBQW1DLElBQTFCQSxFQUFNOEMsUUFBUSxTQUV6QjlDLEVBQVFxVSxFQUFRLE1BQVFyVSxHQUVuQkEsQ0FDVCwrQkNsREEsTUFBTTJVLEVBQUssRUFBUSxLQUNiQyxFQUFVLEVBQVEsTUFFbEJsUCxFQUFNdnRCLFFBQVF1dEIsSUFFcEIsSUFBSW1QLEVBbUhKLFNBQVNDLEVBQWdCN1osR0FDeEIsTUFBTTJPLEVBeEZQLFNBQXVCM08sR0FDdEIsSUFBbUIsSUFBZjRaLEVBQ0gsT0FBTyxFQUdSLEdBQUlELEVBQVEsY0FDWEEsRUFBUSxlQUNSQSxFQUFRLG1CQUNSLE9BQU8sRUFHUixHQUFJQSxFQUFRLGFBQ1gsT0FBTyxFQUdSLEdBQUkzWixJQUFXQSxFQUFPOFosUUFBd0IsSUFBZkYsRUFDOUIsT0FBTyxFQUdSLE1BQU1HLEVBQU1ILEVBQWEsRUFBSSxFQUU3QixHQUF5QixVQUFyQjE4QixRQUFRODhCLFNBQXNCLENBT2pDLE1BQU1DLEVBQVlQLEVBQUc5SixVQUFVL0wsTUFBTSxLQUNyQyxPQUNDMEksT0FBT3J2QixRQUFRNFIsU0FBU29yQixLQUFLclcsTUFBTSxLQUFLLEtBQU8sR0FDL0MwSSxPQUFPME4sRUFBVSxLQUFPLElBQ3hCMU4sT0FBTzBOLEVBQVUsS0FBTyxNQUVqQjFOLE9BQU8wTixFQUFVLEtBQU8sTUFBUSxFQUFJLEVBR3JDLENBQ1IsQ0FFQSxHQUFJLE9BQVF4UCxFQUNYLE1BQUksQ0FBQyxTQUFVLFdBQVksV0FBWSxhQUFhbE8sTUFBSzRkLEdBQVFBLEtBQVExUCxLQUF3QixhQUFoQkEsRUFBSTJQLFFBQzdFLEVBR0RMLEVBR1IsR0FBSSxxQkFBc0J0UCxFQUN6QixNQUFPLGdDQUFnQzVLLEtBQUs0SyxFQUFJNFAsa0JBQW9CLEVBQUksRUFHekUsR0FBc0IsY0FBbEI1UCxFQUFJNlAsVUFDUCxPQUFPLEVBR1IsR0FBSSxpQkFBa0I3UCxFQUFLLENBQzFCLE1BQU01YixFQUFVd2MsVUFBVVosRUFBSThQLHNCQUF3QixJQUFJMVcsTUFBTSxLQUFLLEdBQUksSUFFekUsT0FBUTRHLEVBQUkrUCxjQUNYLElBQUssWUFDSixPQUFPM3JCLEdBQVcsRUFBSSxFQUFJLEVBQzNCLElBQUssaUJBQ0osT0FBTyxFQUdWLENBRUEsTUFBSSxpQkFBaUJnUixLQUFLNEssRUFBSWdRLE1BQ3RCLEVBR0osOERBQThENWEsS0FBSzRLLEVBQUlnUSxPQUl2RSxjQUFlaFEsRUFIWCxHQU9KQSxFQUFJZ1EsS0FDQVYsRUFJVCxDQUdlckwsQ0FBYzFPLEdBQzVCLE9BdEdELFNBQXdCMk8sR0FDdkIsT0FBYyxJQUFWQSxHQUlHLENBQ05BLFFBQ0ErTCxVQUFVLEVBQ1ZDLE9BQVFoTSxHQUFTLEVBQ2pCaU0sT0FBUWpNLEdBQVMsRUFFbkIsQ0EyRlFrTSxDQUFlbE0sRUFDdkIsQ0FySElnTCxFQUFRLGFBQ1hBLEVBQVEsY0FDUkEsRUFBUSxlQUNSQyxHQUFhLEdBQ0hELEVBQVEsVUFDbEJBLEVBQVEsV0FDUkEsRUFBUSxlQUNSQSxFQUFRLG1CQUNSQyxHQUFhLEdBRVYsZ0JBQWlCblAsSUFDcEJtUCxFQUF3QyxJQUEzQm5QLEVBQUlxUSxZQUFZbjlCLFFBQWtELElBQWxDMHRCLFNBQVNaLEVBQUlxUSxZQUFhLEtBNEd4RW4vQixFQUFPRCxRQUFVLENBQ2hCZ3pCLGNBQWVtTCxFQUNma0IsT0FBUWxCLEVBQWdCMzhCLFFBQVE2OUIsUUFDaEM5TSxPQUFRNEwsRUFBZ0IzOEIsUUFBUSt3QiwrQkNqSWpDLFlBSW9CLFdBNkRsQixPQUFPLFdBU0wsT0FwRUYsU0FBb0IrTSxHQUNsQixJQUFJQyxFQUFjLEdBQ2xCLEdBQXdCLElBQXBCRCxFQUFTcjlCLE9BQWdCLE1BQU8sR0FFcEMsR0FBMkIsaUJBQWhCcTlCLEVBQVMsR0FDbEIsTUFBTSxJQUFJdEssVUFBVSxrQ0FBb0NzSyxFQUFTLElBSW5FLEdBQUlBLEVBQVMsR0FBR2hSLE1BQU0saUJBQW1CZ1IsRUFBU3I5QixPQUFTLEVBQUcsQ0FDNUQsSUFBSXU5QixFQUFRRixFQUFTL1IsUUFDckIrUixFQUFTLEdBQUtFLEVBQVFGLEVBQVMsRUFDakMsQ0FHSUEsRUFBUyxHQUFHaFIsTUFBTSxnQkFDcEJnUixFQUFTLEdBQUtBLEVBQVMsR0FBR2o0QixRQUFRLGdCQUFpQixVQUVuRGk0QixFQUFTLEdBQUtBLEVBQVMsR0FBR2o0QixRQUFRLGdCQUFpQixTQUdyRCxJQUFLLElBQUlvQixFQUFJLEVBQUdBLEVBQUk2MkIsRUFBU3I5QixPQUFRd0csSUFBSyxDQUN4QyxJQUFJZzNCLEVBQVlILEVBQVM3MkIsR0FFekIsR0FBeUIsaUJBQWRnM0IsRUFDVCxNQUFNLElBQUl6SyxVQUFVLGtDQUFvQ3lLLEdBR3hDLEtBQWRBLElBRUFoM0IsRUFBSSxJQUVOZzNCLEVBQVlBLEVBQVVwNEIsUUFBUSxTQUFVLEtBSXhDbzRCLEVBRkVoM0IsRUFBSTYyQixFQUFTcjlCLE9BQVMsRUFFWnc5QixFQUFVcDRCLFFBQVEsU0FBVSxJQUc1Qm80QixFQUFVcDRCLFFBQVEsU0FBVSxLQUcxQ2s0QixFQUFZMTVCLEtBQUs0NUIsR0FFbkIsQ0FFQSxJQUFJbE0sRUFBTWdNLEVBQVl0NEIsS0FBSyxLQU92Qnk0QixHQUhKbk0sRUFBTUEsRUFBSWxzQixRQUFRLGtCQUFtQixPQUdyQjhnQixNQUFNLEtBR3RCLE9BRk11WCxFQUFNblMsU0FBV21TLEVBQU16OUIsT0FBUyxFQUFJLElBQUssSUFBTXk5QixFQUFNejRCLEtBQUssSUFHbEUsQ0FXU0csQ0FOcUIsaUJBQWpCNHNCLFVBQVUsR0FDWEEsVUFBVSxHQUVWLEdBQUcvQixNQUFNM3RCLEtBQUswdkIsV0FJMUIsQ0FFRixFQTVFdUMvekIsRUFBT0QsUUFBU0MsRUFBT0QsUUFBVTIvQixTQUNBLDBCQUFqQixLQUFpQix5RENGeEUxL0IsRUFBT0QsUUFBVW1NLFFBQVEsaUNDQXpCbE0sRUFBT0QsUUFBVW1NLFFBQVEsaUNDQXpCbE0sRUFBT0QsUUFBVW1NLFFBQVEsNkJDQXpCbE0sRUFBT0QsUUFBVW1NLFFBQVEsK0JDQXpCbE0sRUFBT0QsUUFBVW1NLFFBQVEsK0JDQXpCbE0sRUFBT0QsUUFBVW1NLFFBQVEsNkJDQXpCbE0sRUFBT0QsUUFBVW1NLFFBQVEsK0JDQXpCbE0sRUFBT0QsUUFBVW1NLFFBQVEsaUNDQXpCbE0sRUFBT0QsUUFBVW1NLFFBQVEsOEJDQXpCbE0sRUFBT0QsUUFBVW1NLFFBQVEsOEJDQXpCbE0sRUFBT0QsUUFBVW1NLFFBQVEsK0JDQXpCbE0sRUFBT0QsUUFBVW1NLFFBQVEscUNDR3pCLE1BQU15ekIsRUFBYSxFQUFRLE1BQ3JCam1CLEVBQU0sRUFBUSxNQUNka21CLEVBQWUsRUFBUSxNQUN2QnI4QixFQUFPLEVBQVEsTUFDZkMsRUFBUSxFQUFRLE1BQ2hCSCxFQUFPLEVBQVEsTUFDZnEyQixFQUFrQixFQUFRLE1BQzFCbUcsRUFBTyxFQUFRLE1BQ2Z4YixFQUFTLEVBQVEsTUFDakI5SixFQUFTLEVBQVEsTUFFdkIsU0FBU3VsQixFQUF1QkMsR0FBSyxPQUFPQSxHQUFrQixpQkFBTkEsR0FBa0IsWUFBYUEsRUFBSUEsRUFBSSxDQUFFLFFBQVdBLEVBQUssQ0FFakgsTUFBTUMsRUFBaUNGLEVBQXNCSCxHQUN2RE0sRUFBNEJILEVBQXNCcG1CLEdBQ2xEd21CLEVBQTZCSixFQUFzQnY4QixHQUNuRDQ4QixFQUE4QkwsRUFBc0J0OEIsR0FDcEQ0OEIsRUFBNkJOLEVBQXNCejhCLEdBQ25EZzlCLEVBQXdDUCxFQUFzQnBHLEdBQzlENEcsRUFBNkJSLEVBQXNCRCxHQUNuRFUsRUFBK0JULEVBQXNCemIsR0FFM0QsU0FBU3ZqQixFQUFLTSxFQUFJby9CLEdBQ2hCLE9BQU8sV0FDTCxPQUFPcC9CLEVBQUdnd0IsTUFBTW9QLEVBQVN6TSxVQUMzQixDQUNGLENBSUEsTUFBTSxTQUFDaHJCLEdBQVlwSSxPQUFPOEQsV0FDcEIsZUFBQ2c4QixHQUFrQjkvQixPQUVuQisvQixHQUFVQyxFQUdiaGdDLE9BQU84TixPQUFPLE1BSFFteUIsSUFDckIsTUFBTXROLEVBQU12cUIsRUFBUzFFLEtBQUt1OEIsR0FDMUIsT0FBT0QsRUFBTXJOLEtBQVNxTixFQUFNck4sR0FBT0EsRUFBSXRCLE1BQU0sR0FBSSxHQUFHaHFCLGNBQWMsR0FGdkQsSUFBQzI0QixFQUtoQixNQUFNRSxFQUFjMTFCLElBQ2xCQSxFQUFPQSxFQUFLbkQsY0FDSjQ0QixHQUFVRixFQUFPRSxLQUFXejFCLEdBR2hDMjFCLEVBQWEzMUIsR0FBUXkxQixVQUFnQkEsSUFBVXoxQixHQVMvQyxRQUFDM0ksR0FBV0QsTUFTWncrQixFQUFjRCxFQUFXLGFBcUIvQixNQUFNRSxFQUFnQkgsRUFBVyxlQTJCakMsTUFBTWpLLEVBQVdrSyxFQUFXLFVBUXRCaEssRUFBYWdLLEVBQVcsWUFTeEJHLEVBQVdILEVBQVcsVUFTdEJJLEVBQVlOLEdBQW9CLE9BQVZBLEdBQW1DLGlCQUFWQSxFQWlCL0NPLEVBQWlCaFEsSUFDckIsR0FBb0IsV0FBaEJ1UCxFQUFPdlAsR0FDVCxPQUFPLEVBR1QsTUFBTTFzQixFQUFZZzhCLEVBQWV0UCxHQUNqQyxRQUFzQixPQUFkMXNCLEdBQXNCQSxJQUFjOUQsT0FBTzhELFdBQWtELE9BQXJDOUQsT0FBTzgvQixlQUFlaDhCLElBQTBCK2YsT0FBT0MsZUFBZTBNLEdBQVUzTSxPQUFPNWlCLFlBQVl1dkIsRUFBSSxFQVVuS2lRLEVBQVNQLEVBQVcsUUFTcEJRLEVBQVNSLEVBQVcsUUFTcEJTLEVBQVNULEVBQVcsUUFTcEJVLEVBQWFWLEVBQVcsWUFzQ3hCVyxFQUFvQlgsRUFBVyxvQkFFOUJZLEVBQWtCQyxFQUFXQyxFQUFZQyxHQUFhLENBQUMsaUJBQWtCLFVBQVcsV0FBWSxXQUFXdDBCLElBQUl1ekIsR0EyQnRILFNBQVNoZ0MsRUFBUWlOLEVBQUsxTSxHQUFJLFdBQUN5Z0MsR0FBYSxHQUFTLENBQUMsR0FFaEQsR0FBSS96QixRQUNGLE9BR0YsSUFBSXRGLEVBQ0FzNUIsRUFRSixHQUxtQixpQkFBUmgwQixJQUVUQSxFQUFNLENBQUNBLElBR0x0TCxFQUFRc0wsR0FFVixJQUFLdEYsRUFBSSxFQUFHczVCLEVBQUloMEIsRUFBSTlMLE9BQVF3RyxFQUFJczVCLEVBQUd0NUIsSUFDakNwSCxFQUFHaUQsS0FBSyxLQUFNeUosRUFBSXRGLEdBQUlBLEVBQUdzRixPQUV0QixDQUVMLE1BQU1sTixFQUFPaWhDLEVBQWFsaEMsT0FBTzZvQixvQkFBb0IxYixHQUFPbk4sT0FBT0MsS0FBS2tOLEdBQ2xFckYsRUFBTTdILEVBQUtvQixPQUNqQixJQUFJeEIsRUFFSixJQUFLZ0ksRUFBSSxFQUFHQSxFQUFJQyxFQUFLRCxJQUNuQmhJLEVBQU1JLEVBQUs0SCxHQUNYcEgsRUFBR2lELEtBQUssS0FBTXlKLEVBQUl0TixHQUFNQSxFQUFLc04sRUFFakMsQ0FDRixDQUVBLFNBQVNpMEIsRUFBUWowQixFQUFLdE4sR0FDcEJBLEVBQU1BLEVBQUl3SCxjQUNWLE1BQU1wSCxFQUFPRCxPQUFPQyxLQUFLa04sR0FDekIsSUFDSWswQixFQURBeDVCLEVBQUk1SCxFQUFLb0IsT0FFYixLQUFPd0csS0FBTSxHQUVYLEdBREF3NUIsRUFBT3BoQyxFQUFLNEgsR0FDUmhJLElBQVF3aEMsRUFBS2g2QixjQUNmLE9BQU9nNkIsRUFHWCxPQUFPLElBQ1QsQ0FFQSxNQUFNQyxFQUVzQixvQkFBZkMsV0FBbUNBLFdBQ3ZCLG9CQUFUM3hCLEtBQXVCQSxLQUEwQixvQkFBWDhhLE9BQXlCQSxPQUFTRCxPQUdsRitXLEVBQW9CQyxJQUFhckIsRUFBWXFCLElBQVlBLElBQVlILEVBb0QzRSxNQThITUksR0FBZ0JDLEVBS0csb0JBQWZDLFlBQThCOUIsRUFBZThCLFlBSDlDM0IsR0FDRTBCLEdBQWMxQixhQUFpQjBCLEdBSHJCLElBQUNBLEVBZXRCLE1BaUNNRSxFQUFhM0IsRUFBVyxtQkFXeEJsN0IsRUFBaUIsR0FBR0Esb0JBQW9CLENBQUNtSSxFQUFLL0csSUFBU3BCLEVBQWV0QixLQUFLeUosRUFBSy9HLEdBQS9ELENBQXNFcEcsT0FBTzhELFdBUzlGZytCLEdBQVc1QixFQUFXLFVBRXRCNkIsR0FBb0IsQ0FBQzUwQixFQUFLNjBCLEtBQzlCLE1BQU1DLEVBQWNqaUMsT0FBT2tpQywwQkFBMEIvMEIsR0FDL0NnMUIsRUFBcUIsQ0FBQyxFQUU1QmppQyxFQUFRK2hDLEdBQWEsQ0FBQ0csRUFBWTE3QixLQUNoQyxJQUFJMjdCLEdBQzJDLEtBQTFDQSxFQUFNTCxFQUFRSSxFQUFZMTdCLEVBQU15RyxNQUNuQ2cxQixFQUFtQno3QixHQUFRMjdCLEdBQU9ELEVBQ3BDLElBR0ZwaUMsT0FBTysxQixpQkFBaUI1b0IsRUFBS2cxQixFQUFtQixFQXNENUNHLEdBQVEsNkJBRVJDLEdBQVEsYUFFUkMsR0FBVyxDQUNmRCxTQUNBRCxTQUNBRyxZQUFhSCxHQUFRQSxHQUFNOVAsY0FBZ0IrUCxJQXdCN0MsTUErQk1HLEdBQVl4QyxFQUFXLGlCQVF2QnlDLElBQWtCQyxHQWtCRSxtQkFBakJqaUMsYUFsQnNDa2lDLEdBbUI3QzFNLEVBQVdtTCxFQUFRd0IsYUFsQmZGLEdBQ0tqaUMsYUFHRmtpQyxJQUF5QkUsR0FXN0IsU0FBUzk2QixLQUFLRSxXQVhzQjY2QixHQVdWLEdBVjNCMUIsRUFBUTJCLGlCQUFpQixXQUFXLEVBQUVuUSxTQUFRanBCLFdBQ3hDaXBCLElBQVd3TyxHQUFXejNCLElBQVNrNUIsSUFDakNDLEdBQVUzaEMsUUFBVTJoQyxHQUFVclcsT0FBVnFXLEVBQ3RCLElBQ0MsR0FFS3g2QixJQUNOdzZCLEdBQVUvOUIsS0FBS3VELEdBQ2Y4NEIsRUFBUXdCLFlBQVlDLEdBQU8sSUFBSSxHQUVDdjZCLEdBQU8zSCxXQUFXMkgsSUFoQmxDLElBQUVvNkIsR0FBdUJDLEdBS2JFLEdBQU9DLEdBaUJ6QyxNQUFNRSxHQUFpQyxvQkFBbkJDLGVBQ2xCQSxlQUFlaGpDLEtBQUttaEMsR0FBZ0Msb0JBQVoxZ0MsU0FBMkJBLFFBQVFGLFVBQVlpaUMsR0FJbkZTLEdBQVUsQ0FDZHZoQyxVQUNBdytCLGdCQUNBeDdCLFNBbHBCRixTQUFrQjJyQixHQUNoQixPQUFlLE9BQVJBLElBQWlCNFAsRUFBWTVQLElBQTRCLE9BQXBCQSxFQUFJNEcsY0FBeUJnSixFQUFZNVAsRUFBSTRHLGNBQ3BGakIsRUFBVzNGLEVBQUk0RyxZQUFZdnlCLFdBQWEyckIsRUFBSTRHLFlBQVl2eUIsU0FBUzJyQixFQUN4RSxFQWdwQkU2UyxXQXBnQmtCcEQsSUFDbEIsSUFBSXFELEVBQ0osT0FBT3JELElBQ2dCLG1CQUFiNzhCLFVBQTJCNjhCLGFBQWlCNzhCLFVBQ2xEK3lCLEVBQVc4SixFQUFNbDhCLFVBQ1ksY0FBMUJ1L0IsRUFBT3ZELEVBQU9FLEtBRUwsV0FBVHFELEdBQXFCbk4sRUFBVzhKLEVBQU03M0IsV0FBa0Msc0JBQXJCNjNCLEVBQU03M0IsWUFHaEUsRUEyZkFtN0Isa0JBOW5CRixTQUEyQi9TLEdBQ3pCLElBQUlod0IsRUFNSixPQUpFQSxFQUQwQixvQkFBaEJnakMsYUFBaUNBLFlBQWtCLE9BQ3BEQSxZQUFZQyxPQUFPalQsR0FFbkIsR0FBVUEsRUFBVSxRQUFNNlAsRUFBYzdQLEVBQUlwTSxRQUVoRDVqQixDQUNULEVBdW5CRXkxQixXQUNBcUssV0FDQW9ELFVBOWtCZ0J6RCxJQUFtQixJQUFWQSxJQUE0QixJQUFWQSxFQStrQjNDTSxXQUNBQyxnQkFDQU0sbUJBQ0FDLFlBQ0FDLGFBQ0FDLFlBQ0FiLGNBQ0FLLFNBQ0FDLFNBQ0FDLFNBQ0FtQixZQUNBM0wsYUFDQXhULFNBOWhCZ0I2TixHQUFRK1AsRUFBUy9QLElBQVEyRixFQUFXM0YsRUFBSW5uQixNQStoQnhEdzNCLG9CQUNBYSxlQUNBZCxhQUNBMWdDLFVBQ0F5akMsTUFoYUYsU0FBU0EsSUFDUCxNQUFNLFNBQUNDLEdBQVlwQyxFQUFpQmhpQyxPQUFTQSxNQUFRLENBQUMsRUFDaERnQixFQUFTLENBQUMsRUFDVnFqQyxFQUFjLENBQUNyVCxFQUFLM3dCLEtBQ3hCLE1BQU1pa0MsRUFBWUYsR0FBWXhDLEVBQVE1Z0MsRUFBUVgsSUFBUUEsRUFDbEQyZ0MsRUFBY2hnQyxFQUFPc2pDLEtBQWV0RCxFQUFjaFEsR0FDcERod0IsRUFBT3NqQyxHQUFhSCxFQUFNbmpDLEVBQU9zakMsR0FBWXRULEdBQ3BDZ1EsRUFBY2hRLEdBQ3ZCaHdCLEVBQU9zakMsR0FBYUgsRUFBTSxDQUFDLEVBQUduVCxHQUNyQjN1QixFQUFRMnVCLEdBQ2pCaHdCLEVBQU9zakMsR0FBYXRULEVBQUlhLFFBRXhCN3dCLEVBQU9zakMsR0FBYXRULENBQ3RCLEVBR0YsSUFBSyxJQUFJM29CLEVBQUksRUFBR3M1QixFQUFJL04sVUFBVS94QixPQUFRd0csRUFBSXM1QixFQUFHdDVCLElBQzNDdXJCLFVBQVV2ckIsSUFBTTNILEVBQVFrekIsVUFBVXZyQixHQUFJZzhCLEdBRXhDLE9BQU9yakMsQ0FDVCxFQTZZRW13QixPQWpZYSxDQUFDenVCLEVBQUdDLEVBQUcwOUIsR0FBVXFCLGNBQWEsQ0FBQyxLQUM1Q2hoQyxFQUFRaUMsR0FBRyxDQUFDcXVCLEVBQUszd0IsS0FDWGdnQyxHQUFXMUosRUFBVzNGLEdBQ3hCdHVCLEVBQUVyQyxHQUFPTSxFQUFLcXdCLEVBQUtxUCxHQUVuQjM5QixFQUFFckMsR0FBTzJ3QixDQUNYLEdBQ0MsQ0FBQzBRLGVBQ0doL0IsR0EwWFAwd0IsS0E3ZllELEdBQVFBLEVBQUlDLEtBQ3hCRCxFQUFJQyxPQUFTRCxFQUFJbHNCLFFBQVEscUNBQXNDLElBNmYvRHM5QixTQWpYZ0JDLElBQ2MsUUFBMUJBLEVBQVE3WSxXQUFXLEtBQ3JCNlksRUFBVUEsRUFBUTNTLE1BQU0sSUFFbkIyUyxHQThXUHJnQyxTQWxXZSxDQUFDeXpCLEVBQWE2TSxFQUFrQkMsRUFBT2pDLEtBQ3REN0ssRUFBWXR6QixVQUFZOUQsT0FBTzhOLE9BQU9tMkIsRUFBaUJuZ0MsVUFBV20rQixHQUNsRTdLLEVBQVl0ekIsVUFBVXN6QixZQUFjQSxFQUNwQ3AzQixPQUFPNGpCLGVBQWV3VCxFQUFhLFFBQVMsQ0FDMUNuekIsTUFBT2dnQyxFQUFpQm5nQyxZQUUxQm9nQyxHQUFTbGtDLE9BQU9vTCxPQUFPZ3NCLEVBQVl0ekIsVUFBV29nQyxFQUFNLEVBNlZwREMsYUFqVm1CLENBQUNDLEVBQVdDLEVBQVMvZSxFQUFRZ2YsS0FDaEQsSUFBSUosRUFDQXI4QixFQUNBekIsRUFDSixNQUFNbStCLEVBQVMsQ0FBQyxFQUloQixHQUZBRixFQUFVQSxHQUFXLENBQUMsRUFFTCxNQUFiRCxFQUFtQixPQUFPQyxFQUU5QixFQUFHLENBR0QsSUFGQUgsRUFBUWxrQyxPQUFPNm9CLG9CQUFvQnViLEdBQ25DdjhCLEVBQUlxOEIsRUFBTTdpQyxPQUNId0csS0FBTSxHQUNYekIsRUFBTzg5QixFQUFNcjhCLEdBQ1B5OEIsSUFBY0EsRUFBV2wrQixFQUFNZytCLEVBQVdDLElBQWNFLEVBQU9uK0IsS0FDbkVpK0IsRUFBUWorQixHQUFRZytCLEVBQVVoK0IsR0FDMUJtK0IsRUFBT24rQixJQUFRLEdBR25CZytCLEdBQXVCLElBQVg5ZSxHQUFvQndhLEVBQWVzRSxFQUNqRCxPQUFTQSxLQUFlOWUsR0FBVUEsRUFBTzhlLEVBQVdDLEtBQWFELElBQWNwa0MsT0FBTzhELFdBRXRGLE9BQU91Z0MsQ0FBTyxFQTJUZHRFLFNBQ0FHLGFBQ0FsRyxTQWpUZSxDQUFDckgsRUFBSzZSLEVBQWN0WixLQUNuQ3lILEVBQU01SCxPQUFPNEgsU0FDSXh0QixJQUFiK2xCLEdBQTBCQSxFQUFXeUgsRUFBSXR4QixVQUMzQzZwQixFQUFXeUgsRUFBSXR4QixRQUVqQjZwQixHQUFZc1osRUFBYW5qQyxPQUN6QixNQUFNb2pDLEVBQVk5UixFQUFJcEgsUUFBUWlaLEVBQWN0WixHQUM1QyxPQUFzQixJQUFmdVosR0FBb0JBLElBQWN2WixDQUFRLEVBMlNqRHdaLFFBaFNlekUsSUFDZixJQUFLQSxFQUFPLE9BQU8sS0FDbkIsR0FBSXArQixFQUFRbytCLEdBQVEsT0FBT0EsRUFDM0IsSUFBSXA0QixFQUFJbzRCLEVBQU01K0IsT0FDZCxJQUFLaS9CLEVBQVN6NEIsR0FBSSxPQUFPLEtBQ3pCLE1BQU04OEIsRUFBTSxJQUFJL2lDLE1BQU1pRyxHQUN0QixLQUFPQSxLQUFNLEdBQ1g4OEIsRUFBSTk4QixHQUFLbzRCLEVBQU1wNEIsR0FFakIsT0FBTzg4QixDQUFHLEVBd1JWQyxhQTdQbUIsQ0FBQ3ozQixFQUFLMU0sS0FDekIsTUFFTVEsR0FGWWtNLEdBQU9BLEVBQUkwVyxPQUFPNWlCLFdBRVR5QyxLQUFLeUosR0FFaEMsSUFBSTNNLEVBRUosTUFBUUEsRUFBU1MsRUFBUzhGLFVBQVl2RyxFQUFPcWtDLE1BQU0sQ0FDakQsTUFBTUMsRUFBT3RrQyxFQUFPeUQsTUFDcEJ4RCxFQUFHaUQsS0FBS3lKLEVBQUsyM0IsRUFBSyxHQUFJQSxFQUFLLEdBQzdCLEdBb1BBQyxTQXpPZSxDQUFDQyxFQUFRclMsS0FDeEIsSUFBSXNTLEVBQ0osTUFBTU4sRUFBTSxHQUVaLEtBQXdDLFFBQWhDTSxFQUFVRCxFQUFPaEssS0FBS3JJLEtBQzVCZ1MsRUFBSTEvQixLQUFLZ2dDLEdBR1gsT0FBT04sQ0FBRyxFQWtPVjlDLGFBQ0E3OEIsaUJBQ0FrZ0MsV0FBWWxnQyxFQUNaKzhCLHFCQUNBb0QsY0F6THFCaDRCLElBQ3JCNDBCLEdBQWtCNTBCLEdBQUssQ0FBQ2kxQixFQUFZMTdCLEtBRWxDLEdBQUl5dkIsRUFBV2hwQixLQUE2RCxJQUFyRCxDQUFDLFlBQWEsU0FBVSxVQUFVb2UsUUFBUTdrQixHQUMvRCxPQUFPLEVBR1QsTUFBTXpDLEVBQVFrSixFQUFJekcsR0FFYnl2QixFQUFXbHlCLEtBRWhCbStCLEVBQVd4UixZQUFhLEVBRXBCLGFBQWN3UixFQUNoQkEsRUFBVzFXLFVBQVcsRUFJbkIwVyxFQUFXeGIsTUFDZHdiLEVBQVd4YixJQUFNLEtBQ2YsTUFBTXhpQixNQUFNLHFDQUF3Q3NDLEVBQU8sSUFBSyxHQUVwRSxHQUNBLEVBbUtGMCtCLFlBaEtrQixDQUFDQyxFQUFldFUsS0FDbEMsTUFBTTVqQixFQUFNLENBQUMsRUFFUDdOLEVBQVVxbEMsSUFDZEEsRUFBSXprQyxTQUFRK0QsSUFDVmtKLEVBQUlsSixJQUFTLENBQUksR0FDakIsRUFLSixPQUZBcEMsRUFBUXdqQyxHQUFpQi9sQyxFQUFPK2xDLEdBQWlCL2xDLEVBQU95ckIsT0FBT3NhLEdBQWU5ZCxNQUFNd0osSUFFN0U1akIsQ0FBRyxFQXNKVm00QixZQWxPa0IzUyxHQUNYQSxFQUFJdHJCLGNBQWNaLFFBQVEseUJBQy9CLFNBQWtCODBCLEVBQUdnSyxFQUFJQyxHQUN2QixPQUFPRCxFQUFHL1MsY0FBZ0JnVCxDQUM1QixJQStORi9RLEtBcEpXLE9BcUpYZ1IsZUFuSnFCLENBQUN4aEMsRUFBT3loQyxJQUNiLE1BQVR6aEMsR0FBaUJnc0IsT0FBT2dNLFNBQVNoNEIsR0FBU0EsR0FBU0EsRUFBUXloQyxFQW1KbEV0RSxVQUNBM1csT0FBUTZXLEVBQ1JFLG1CQUNBZ0IsWUFDQW1ELGVBMUlxQixDQUFDM2pDLEVBQU8sR0FBSTRqQyxFQUFXcEQsR0FBU0MsZUFDckQsSUFBSTlQLEVBQU0sR0FDVixNQUFNLE9BQUN0eEIsR0FBVXVrQyxFQUNqQixLQUFPNWpDLEtBQ0wyd0IsR0FBT2lULEVBQVMzOUIsS0FBS0UsU0FBVzlHLEVBQU8sR0FHekMsT0FBT3N4QixDQUFHLEVBb0lWa1Qsb0JBMUhGLFNBQTZCNUYsR0FDM0IsU0FBVUEsR0FBUzlKLEVBQVc4SixFQUFNbDhCLFNBQXlDLGFBQTlCazhCLEVBQU1wYyxPQUFPQyxjQUErQm1jLEVBQU1wYyxPQUFPNWlCLFVBQzFHLEVBeUhFNmtDLGFBdkhvQjM0QixJQUNwQixNQUFNNlgsRUFBUSxJQUFJcGpCLE1BQU0sSUFFbEJta0MsRUFBUSxDQUFDalQsRUFBUWpyQixLQUVyQixHQUFJMDRCLEVBQVN6TixHQUFTLENBQ3BCLEdBQUk5TixFQUFNdUcsUUFBUXVILElBQVcsRUFDM0IsT0FHRixLQUFLLFdBQVlBLEdBQVMsQ0FDeEI5TixFQUFNbmQsR0FBS2lyQixFQUNYLE1BQU0yRCxFQUFTNTBCLEVBQVFpeEIsR0FBVSxHQUFLLENBQUMsRUFTdkMsT0FQQTV5QixFQUFRNHlCLEdBQVEsQ0FBQzd1QixFQUFPcEUsS0FDdEIsTUFBTW1tQyxFQUFlRCxFQUFNOWhDLEVBQU80RCxFQUFJLElBQ3JDdTRCLEVBQVk0RixLQUFrQnZQLEVBQU81MkIsR0FBT21tQyxFQUFhLElBRzVEaGhCLEVBQU1uZCxRQUFLMUMsRUFFSnN4QixDQUNULENBQ0YsQ0FFQSxPQUFPM0QsQ0FBTSxFQUdmLE9BQU9pVCxFQUFNNTRCLEVBQUssRUFBRSxFQTRGcEJ1MUIsYUFDQXVELFdBeEZrQmhHLEdBQ2xCQSxJQUFVTSxFQUFTTixJQUFVOUosRUFBVzhKLEtBQVc5SixFQUFXOEosRUFBTTF5QixPQUFTNG9CLEVBQVc4SixFQUFNaUcsT0F3RjlGdmxDLGFBQWNnaUMsR0FDZE8sU0FjRixTQUFTaUQsR0FBV2wyQixFQUFTMk8sRUFBTTlGLEVBQVFsUSxFQUFTakQsR0FDbER2QixNQUFNVixLQUFLbEUsTUFFUDRFLE1BQU0reUIsa0JBQ1IveUIsTUFBTSt5QixrQkFBa0IzM0IsS0FBTUEsS0FBSzQzQixhQUVuQzUzQixLQUFLd2xCLE9BQVEsSUFBSzVnQixPQUFTNGdCLE1BRzdCeGxCLEtBQUt5USxRQUFVQSxFQUNmelEsS0FBS2tILEtBQU8sYUFDWmtZLElBQVNwZixLQUFLb2YsS0FBT0EsR0FDckI5RixJQUFXdFosS0FBS3NaLE9BQVNBLEdBQ3pCbFEsSUFBWXBKLEtBQUtvSixRQUFVQSxHQUMzQmpELElBQWFuRyxLQUFLbUcsU0FBV0EsRUFDL0IsQ0FFQXk5QixHQUFRei9CLFNBQVN3aUMsR0FBWS9oQyxNQUFPLENBQ2xDZ2lDLE9BQVEsV0FDTixNQUFPLENBRUxuMkIsUUFBU3pRLEtBQUt5USxRQUNkdkosS0FBTWxILEtBQUtrSCxLQUVYdUssWUFBYXpSLEtBQUt5UixZQUNsQm8xQixPQUFRN21DLEtBQUs2bUMsT0FFYkMsU0FBVTltQyxLQUFLOG1DLFNBQ2ZDLFdBQVkvbUMsS0FBSyttQyxXQUNqQkMsYUFBY2huQyxLQUFLZ25DLGFBQ25CeGhCLE1BQU94bEIsS0FBS3dsQixNQUVabE0sT0FBUXNxQixHQUFRMEMsYUFBYXRtQyxLQUFLc1osUUFDbEM4RixLQUFNcGYsS0FBS29mLEtBQ1g3TyxPQUFRdlEsS0FBS21HLFVBQVluRyxLQUFLbUcsU0FBU29LLE9BQVN2USxLQUFLbUcsU0FBU29LLE9BQVMsS0FFM0UsSUFHRixNQUFNMDJCLEdBQWNOLEdBQVdyaUMsVUFDekJtK0IsR0FBYyxDQUFDLEVBbURyQixTQUFTeUUsR0FBWXpHLEdBQ25CLE9BQU9tRCxHQUFRNUMsY0FBY1AsSUFBVW1ELEdBQVF2aEMsUUFBUW8rQixFQUN6RCxDQVNBLFNBQVMwRyxHQUFlOW1DLEdBQ3RCLE9BQU91akMsR0FBUXBKLFNBQVNuNkIsRUFBSyxNQUFRQSxFQUFJd3hCLE1BQU0sR0FBSSxHQUFLeHhCLENBQzFELENBV0EsU0FBUyttQyxHQUFVamtDLEVBQU05QyxFQUFLZ25DLEdBQzVCLE9BQUtsa0MsRUFDRUEsRUFBS3dELE9BQU90RyxHQUFLOE0sS0FBSSxTQUFjbzJCLEVBQU9sN0IsR0FHL0MsT0FEQWs3QixFQUFRNEQsR0FBZTVELElBQ2Y4RCxHQUFRaC9CLEVBQUksSUFBTWs3QixFQUFRLElBQU1BLENBQzFDLElBQUcxOEIsS0FBS3dnQyxFQUFPLElBQU0sSUFMSGhuQyxDQU1wQixDQWhGQSxDQUNFLHVCQUNBLGlCQUNBLGVBQ0EsWUFDQSxjQUNBLDRCQUNBLGlCQUNBLG1CQUNBLGtCQUNBLGVBQ0Esa0JBQ0EsbUJBRUFLLFNBQVEwZSxJQUNScWpCLEdBQVlyakIsR0FBUSxDQUFDM2EsTUFBTzJhLEVBQUssSUFHbkM1ZSxPQUFPKzFCLGlCQUFpQm9RLEdBQVlsRSxJQUNwQ2ppQyxPQUFPNGpCLGVBQWU2aUIsR0FBYSxlQUFnQixDQUFDeGlDLE9BQU8sSUFHM0RraUMsR0FBV3ArQixLQUFPLENBQUN4RyxFQUFPcWQsRUFBTTlGLEVBQVFsUSxFQUFTakQsRUFBVW1oQyxLQUN6RCxNQUFNQyxFQUFhL21DLE9BQU84TixPQUFPMjRCLElBZ0JqQyxPQWRBckQsR0FBUWUsYUFBYTVpQyxFQUFPd2xDLEdBQVksU0FBZ0I1NUIsR0FDdEQsT0FBT0EsSUFBUS9JLE1BQU1OLFNBQ3ZCLElBQUdzQyxHQUNlLGlCQUFUQSxJQUdUKy9CLEdBQVd6aUMsS0FBS3FqQyxFQUFZeGxDLEVBQU0wTyxRQUFTMk8sRUFBTTlGLEVBQVFsUSxFQUFTakQsR0FFbEVvaEMsRUFBV3pSLE1BQVEvekIsRUFFbkJ3bEMsRUFBV3JnQyxLQUFPbkYsRUFBTW1GLEtBRXhCb2dDLEdBQWU5bUMsT0FBT29MLE9BQU8yN0IsRUFBWUQsR0FFbENDLENBQVUsRUFzRG5CLE1BQU1DLEdBQWE1RCxHQUFRZSxhQUFhZixHQUFTLENBQUMsRUFBRyxNQUFNLFNBQWdCaDlCLEdBQ3pFLE1BQU8sV0FBV21kLEtBQUtuZCxFQUN6QixJQXlCQSxTQUFTNmdDLEdBQVc5NUIsRUFBSzBMLEVBQVV4VixHQUNqQyxJQUFLKy9CLEdBQVE3QyxTQUFTcHpCLEdBQ3BCLE1BQU0sSUFBSWluQixVQUFVLDRCQUl0QnZiLEVBQVdBLEdBQVksSUFBS3dtQixFQUEyQixTQUFLajhCLFVBWTVELE1BQU04akMsR0FUTjdqQyxFQUFVKy9CLEdBQVFlLGFBQWE5Z0MsRUFBUyxDQUN0QzZqQyxZQUFZLEVBQ1pMLE1BQU0sRUFDTk0sU0FBUyxJQUNSLEdBQU8sU0FBaUI3akMsRUFBUXd2QixHQUVqQyxPQUFRc1EsR0FBUWhELFlBQVl0TixFQUFPeHZCLEdBQ3JDLEtBRTJCNGpDLFdBRXJCRSxFQUFVL2pDLEVBQVErakMsU0FBV0MsRUFDN0JSLEVBQU94akMsRUFBUXdqQyxLQUNmTSxFQUFVOWpDLEVBQVE4akMsUUFFbEJHLEdBRFFqa0MsRUFBUWtoQixNQUF3QixvQkFBVEEsTUFBd0JBLE9BQ3BDNmUsR0FBUXlDLG9CQUFvQmh0QixHQUVyRCxJQUFLdXFCLEdBQVFqTixXQUFXaVIsR0FDdEIsTUFBTSxJQUFJaFQsVUFBVSw4QkFHdEIsU0FBU21ULEVBQWF0akMsR0FDcEIsR0FBYyxPQUFWQSxFQUFnQixNQUFPLEdBRTNCLEdBQUltL0IsR0FBUTNDLE9BQU94OEIsR0FDakIsT0FBT0EsRUFBTXlRLGNBR2YsSUFBSzR5QixHQUFXbEUsR0FBUXpDLE9BQU8xOEIsR0FDN0IsTUFBTSxJQUFJa2lDLEdBQVcsZ0RBR3ZCLE9BQUkvQyxHQUFRL0MsY0FBY3A4QixJQUFVbS9CLEdBQVExQixhQUFhejlCLEdBQ2hEcWpDLEdBQTJCLG1CQUFUL2lCLEtBQXNCLElBQUlBLEtBQUssQ0FBQ3RnQixJQUFVVyxPQUFPbUQsS0FBSzlELEdBRzFFQSxDQUNULENBWUEsU0FBU29qQyxFQUFlcGpDLEVBQU9wRSxFQUFLOEMsR0FDbEMsSUFBSWdpQyxFQUFNMWdDLEVBRVYsR0FBSUEsSUFBVXRCLEdBQXlCLGlCQUFWc0IsRUFDM0IsR0FBSW0vQixHQUFRcEosU0FBU242QixFQUFLLE1BRXhCQSxFQUFNcW5DLEVBQWFybkMsRUFBTUEsRUFBSXd4QixNQUFNLEdBQUksR0FFdkNwdEIsRUFBUStXLEtBQUtDLFVBQVVoWCxRQUNsQixHQUNKbS9CLEdBQVF2aEMsUUFBUW9DLElBbkd6QixTQUFxQjBnQyxHQUNuQixPQUFPdkIsR0FBUXZoQyxRQUFROGlDLEtBQVNBLEVBQUkxa0IsS0FBS3ltQixHQUMzQyxDQWlHbUNjLENBQVl2akMsS0FDckNtL0IsR0FBUXhDLFdBQVczOEIsSUFBVW0vQixHQUFRcEosU0FBU242QixFQUFLLFNBQVc4a0MsRUFBTXZCLEdBQVFzQixRQUFRemdDLElBWXRGLE9BVEFwRSxFQUFNOG1DLEdBQWU5bUMsR0FFckI4a0MsRUFBSXprQyxTQUFRLFNBQWN1bkMsRUFBSXZtQyxJQUMxQmtpQyxHQUFRaEQsWUFBWXFILElBQWMsT0FBUEEsR0FBZ0I1dUIsRUFBUzlVLFFBRXhDLElBQVpvakMsRUFBbUJQLEdBQVUsQ0FBQy9tQyxHQUFNcUIsRUFBTzJsQyxHQUFxQixPQUFaTSxFQUFtQnRuQyxFQUFNQSxFQUFNLEtBQ25GMG5DLEVBQWFFLEdBRWpCLEtBQ08sRUFJWCxRQUFJZixHQUFZemlDLEtBSWhCNFUsRUFBUzlVLE9BQU82aUMsR0FBVWprQyxFQUFNOUMsRUFBS2duQyxHQUFPVSxFQUFhdGpDLEtBRWxELEVBQ1QsQ0FFQSxNQUFNK2dCLEVBQVEsR0FFUjBpQixFQUFpQjFuQyxPQUFPb0wsT0FBTzQ3QixHQUFZLENBQy9DSyxpQkFDQUUsZUFDQWIsaUJBeUJGLElBQUt0RCxHQUFRN0MsU0FBU3B6QixHQUNwQixNQUFNLElBQUlpbkIsVUFBVSwwQkFLdEIsT0E1QkEsU0FBU3VULEVBQU0xakMsRUFBT3RCLEdBQ3BCLElBQUl5Z0MsR0FBUWhELFlBQVluOEIsR0FBeEIsQ0FFQSxJQUE4QixJQUExQitnQixFQUFNdUcsUUFBUXRuQixHQUNoQixNQUFNRyxNQUFNLGtDQUFvQ3pCLEVBQUswRCxLQUFLLE1BRzVEMmUsRUFBTS9mLEtBQUtoQixHQUVYbS9CLEdBQVFsakMsUUFBUStELEdBQU8sU0FBY3dqQyxFQUFJNW5DLElBS3hCLE9BSkV1akMsR0FBUWhELFlBQVlxSCxJQUFjLE9BQVBBLElBQWdCTCxFQUFRMWpDLEtBQ2xFbVYsRUFBVTR1QixFQUFJckUsR0FBUW5OLFNBQVNwMkIsR0FBT0EsRUFBSSt5QixPQUFTL3lCLEVBQUs4QyxFQUFNK2tDLEtBSTlEQyxFQUFNRixFQUFJOWtDLEVBQU9BLEVBQUt3RCxPQUFPdEcsR0FBTyxDQUFDQSxHQUV6QyxJQUVBbWxCLEVBQU13QyxLQWxCZ0MsQ0FtQnhDLENBTUFtZ0IsQ0FBTXg2QixHQUVDMEwsQ0FDVCxDQVVBLFNBQVMrdUIsR0FBU2pWLEdBQ2hCLE1BQU1rVixFQUFVLENBQ2QsSUFBSyxNQUNMLElBQUssTUFDTCxJQUFLLE1BQ0wsSUFBSyxNQUNMLElBQUssTUFDTCxNQUFPLElBQ1AsTUFBTyxNQUVULE9BQU92bkIsbUJBQW1CcVMsR0FBS2xzQixRQUFRLG9CQUFvQixTQUFrQmluQixHQUMzRSxPQUFPbWEsRUFBUW5hLEVBQ2pCLEdBQ0YsQ0FVQSxTQUFTb2EsR0FBcUJuL0IsRUFBUXRGLEdBQ3BDN0QsS0FBS3VvQyxPQUFTLEdBRWRwL0IsR0FBVXMrQixHQUFXdCtCLEVBQVFuSixLQUFNNkQsRUFDckMsQ0FFQSxNQUFNUyxHQUFZZ2tDLEdBQXFCaGtDLFVBd0J2QyxTQUFTMGxCLEdBQU9nSCxHQUNkLE9BQU9sUSxtQkFBbUJrUSxHQUN4Qi9wQixRQUFRLFFBQVMsS0FDakJBLFFBQVEsT0FBUSxLQUNoQkEsUUFBUSxRQUFTLEtBQ2pCQSxRQUFRLE9BQVEsS0FDaEJBLFFBQVEsUUFBUyxLQUNqQkEsUUFBUSxRQUFTLElBQ3JCLENBV0EsU0FBU3VoQyxHQUFTanZCLEVBQUtwUSxFQUFRdEYsR0FFN0IsSUFBS3NGLEVBQ0gsT0FBT29RLEVBR1QsTUFBTWt2QixFQUFVNWtDLEdBQVdBLEVBQVFtbUIsUUFBVUEsR0FFdkMwZSxFQUFjN2tDLEdBQVdBLEVBQVE4a0MsVUFFdkMsSUFBSUMsRUFVSixHQVBFQSxFQURFRixFQUNpQkEsRUFBWXYvQixFQUFRdEYsR0FFcEIrL0IsR0FBUXZDLGtCQUFrQmw0QixHQUMzQ0EsRUFBT1AsV0FDUCxJQUFJMC9CLEdBQXFCbi9CLEVBQVF0RixHQUFTK0UsU0FBUzYvQixHQUduREcsRUFBa0IsQ0FDcEIsTUFBTUMsRUFBZ0J0dkIsRUFBSXdTLFFBQVEsTUFFWCxJQUFuQjhjLElBQ0Z0dkIsRUFBTUEsRUFBSXNZLE1BQU0sRUFBR2dYLElBRXJCdHZCLEtBQThCLElBQXRCQSxFQUFJd1MsUUFBUSxLQUFjLElBQU0sS0FBTzZjLENBQ2pELENBRUEsT0FBT3J2QixDQUNULENBdkVBalYsR0FBVUMsT0FBUyxTQUFnQjJDLEVBQU16QyxHQUN2Q3pFLEtBQUt1b0MsT0FBTzlpQyxLQUFLLENBQUN5QixFQUFNekMsR0FDMUIsRUFFQUgsR0FBVXNFLFNBQVcsU0FBa0JrZ0MsR0FDckMsTUFBTUwsRUFBVUssRUFBVSxTQUFTcmtDLEdBQ2pDLE9BQU9xa0MsRUFBUTVrQyxLQUFLbEUsS0FBTXlFLEVBQU8yakMsR0FDbkMsRUFBSUEsR0FFSixPQUFPcG9DLEtBQUt1b0MsT0FBT3A3QixLQUFJLFNBQWNtNEIsR0FDbkMsT0FBT21ELEVBQVFuRCxFQUFLLElBQU0sSUFBTW1ELEVBQVFuRCxFQUFLLEdBQy9DLEdBQUcsSUFBSXorQixLQUFLLElBQ2QsRUErSEEsTUFBTWtpQyxHQWxFTixNQUFNQyxtQkFDSixXQUFBcFIsR0FDRTUzQixLQUFLaXBDLFNBQVcsRUFDbEIsQ0FVQSxHQUFBQyxDQUFJQyxFQUFXQyxFQUFVdmxDLEdBT3ZCLE9BTkE3RCxLQUFLaXBDLFNBQVN4akMsS0FBSyxDQUNqQjBqQyxZQUNBQyxXQUNBQyxjQUFheGxDLEdBQVVBLEVBQVF3bEMsWUFDL0JDLFFBQVN6bEMsRUFBVUEsRUFBUXlsQyxRQUFVLE9BRWhDdHBDLEtBQUtpcEMsU0FBU3BuQyxPQUFTLENBQ2hDLENBU0EsS0FBQTBuQyxDQUFNcCtCLEdBQ0FuTCxLQUFLaXBDLFNBQVM5OUIsS0FDaEJuTCxLQUFLaXBDLFNBQVM5OUIsR0FBTSxLQUV4QixDQU9BLEtBQUFxK0IsR0FDTXhwQyxLQUFLaXBDLFdBQ1BqcEMsS0FBS2lwQyxTQUFXLEdBRXBCLENBWUEsT0FBQXZvQyxDQUFRTyxHQUNOMmlDLEdBQVFsakMsUUFBUVYsS0FBS2lwQyxVQUFVLFNBQXdCak4sR0FDM0MsT0FBTkEsR0FDRi82QixFQUFHKzZCLEVBRVAsR0FDRixHQUtJeU4sR0FBdUIsQ0FDM0JDLG1CQUFtQixFQUNuQkMsbUJBQW1CLEVBQ25CQyxxQkFBcUIsR0FLakJDLEdBQWEsQ0FDakJDLFFBQVEsRUFDUkMsUUFBUyxDQUNQemdCLGdCQUxvQndXLEVBQXNCLFFBQUV4VyxnQkFNNUMxbEIsU0FBVWk4QixFQUEyQixRQUNyQzlhLEtBQXNCLG9CQUFUQSxNQUF3QkEsTUFBUSxNQUUvQ2tSLFVBQVcsQ0FBRSxPQUFRLFFBQVMsT0FBUSxTQUdsQytULEdBQWtDLG9CQUFYOWUsUUFBOEMsb0JBQWI4RCxTQW1CeERpYixJQUNIQyxHQUV1QixvQkFBZHBiLFdBQTZCQSxVQUFVb2IsUUFEeENGLElBQWlCLENBQUMsY0FBZSxlQUFnQixNQUFNamUsUUFBUW1lLElBQVcsR0FGdkQsSUFDM0JBLEdBYUgsTUFBTUMsR0FFMkIsb0JBQXRCQyxtQkFFUGg2QixnQkFBZ0JnNkIsbUJBQ2MsbUJBQXZCaDZCLEtBQUtpNkIsY0FJVkMsR0FBU04sSUFBaUI5ZSxPQUFPb08sU0FBU3ZDLE1BQVEsbUJBVWxEbUgsR0FBVyxJQVJVMTlCLE9BQU8rcEMsT0FBTyxDQUN2Q0MsVUFBVyxLQUNYUixjQUFlQSxHQUNmRywrQkFBZ0NBLEdBQ2hDRixzQkFBdUJBLEdBQ3ZCSyxPQUFRQSxRQUtMVCxJQTRETCxTQUFTWSxHQUFlcHhCLEdBQ3RCLFNBQVNxeEIsRUFBVXZuQyxFQUFNc0IsRUFBT3d5QixFQUFRdjFCLEdBQ3RDLElBQUl3RixFQUFPL0QsRUFBS3pCLEtBRWhCLEdBQWEsY0FBVHdGLEVBQXNCLE9BQU8sRUFFakMsTUFBTXlqQyxFQUFlbGEsT0FBT2dNLFVBQVV2MUIsR0FDaEMwakMsRUFBU2xwQyxHQUFTeUIsRUFBS3RCLE9BRzdCLEdBRkFxRixHQUFRQSxHQUFRMDhCLEdBQVF2aEMsUUFBUTQwQixHQUFVQSxFQUFPcDFCLE9BQVNxRixFQUV0RDBqQyxFQU9GLE9BTkloSCxHQUFROEIsV0FBV3pPLEVBQVEvdkIsR0FDN0IrdkIsRUFBTy92QixHQUFRLENBQUMrdkIsRUFBTy92QixHQUFPekMsR0FFOUJ3eUIsRUFBTy92QixHQUFRekMsR0FHVGttQyxFQUdMMVQsRUFBTy92QixJQUFVMDhCLEdBQVE3QyxTQUFTOUosRUFBTy92QixNQUM1Qyt2QixFQUFPL3ZCLEdBQVEsSUFTakIsT0FOZXdqQyxFQUFVdm5DLEVBQU1zQixFQUFPd3lCLEVBQU8vdkIsR0FBT3hGLElBRXRDa2lDLEdBQVF2aEMsUUFBUTQwQixFQUFPL3ZCLE1BQ25DK3ZCLEVBQU8vdkIsR0EvQ2IsU0FBdUJpK0IsR0FDckIsTUFBTXgzQixFQUFNLENBQUMsRUFDUGxOLEVBQU9ELE9BQU9DLEtBQUswa0MsR0FDekIsSUFBSTk4QixFQUNKLE1BQU1DLEVBQU03SCxFQUFLb0IsT0FDakIsSUFBSXhCLEVBQ0osSUFBS2dJLEVBQUksRUFBR0EsRUFBSUMsRUFBS0QsSUFDbkJoSSxFQUFNSSxFQUFLNEgsR0FDWHNGLEVBQUl0TixHQUFPOGtDLEVBQUk5a0MsR0FFakIsT0FBT3NOLENBQ1QsQ0FvQ3FCazlCLENBQWM1VCxFQUFPL3ZCLE1BRzlCeWpDLENBQ1YsQ0FFQSxHQUFJL0csR0FBUUMsV0FBV3hxQixJQUFhdXFCLEdBQVFqTixXQUFXdGQsRUFBUzhFLFNBQVUsQ0FDeEUsTUFBTXhRLEVBQU0sQ0FBQyxFQU1iLE9BSkFpMkIsR0FBUXdCLGFBQWEvckIsR0FBVSxDQUFDblMsRUFBTXpDLEtBQ3BDaW1DLEVBMUVOLFNBQXVCeGpDLEdBS3JCLE9BQU8wOEIsR0FBUTJCLFNBQVMsZ0JBQWlCcitCLEdBQU1pRyxLQUFJK2dCLEdBQzdCLE9BQWJBLEVBQU0sR0FBYyxHQUFLQSxFQUFNLElBQU1BLEVBQU0sSUFFdEQsQ0FrRWdCNGMsQ0FBYzVqQyxHQUFPekMsRUFBT2tKLEVBQUssRUFBRSxJQUd4Q0EsQ0FDVCxDQUVBLE9BQU8sSUFDVCxDQTJCQSxNQUFNdEUsR0FBVyxDQUVmMGhDLGFBQWN0QixHQUVkdUIsUUFBUyxDQUFDLE1BQU8sT0FBUSxTQUV6QkMsaUJBQWtCLENBQUMsU0FBMEI1Z0MsRUFBTXBFLEdBQ2pELE1BQU1PLEVBQWNQLEVBQVFpbEMsa0JBQW9CLEdBQzFDQyxFQUFxQjNrQyxFQUFZdWxCLFFBQVEscUJBQXVCLEVBQ2hFcWYsRUFBa0J4SCxHQUFRN0MsU0FBUzEyQixHQUVyQytnQyxHQUFtQnhILEdBQVF2QixXQUFXaDRCLEtBQ3hDQSxFQUFPLElBQUl6RyxTQUFTeUcsSUFLdEIsR0FGbUJ1NUIsR0FBUUMsV0FBV3g1QixHQUdwQyxPQUFPOGdDLEVBQXFCM3ZCLEtBQUtDLFVBQVVndkIsR0FBZXBnQyxJQUFTQSxFQUdyRSxHQUFJdTVCLEdBQVEvQyxjQUFjeDJCLElBQ3hCdTVCLEdBQVF2K0IsU0FBU2dGLElBQ2pCdTVCLEdBQVF6Z0IsU0FBUzlZLElBQ2pCdTVCLEdBQVExQyxPQUFPNzJCLElBQ2Z1NUIsR0FBUXpDLE9BQU85MkIsSUFDZnU1QixHQUFRdEMsaUJBQWlCajNCLEdBRXpCLE9BQU9BLEVBRVQsR0FBSXU1QixHQUFRRyxrQkFBa0IxNUIsR0FDNUIsT0FBT0EsRUFBS3VhLE9BRWQsR0FBSWdmLEdBQVF2QyxrQkFBa0JoM0IsR0FFNUIsT0FEQXBFLEVBQVFvbEMsZUFBZSxtREFBbUQsR0FDbkVoaEMsRUFBS3pCLFdBR2QsSUFBSXc0QixFQUVKLEdBQUlnSyxFQUFpQixDQUNuQixHQUFJNWtDLEVBQVl1bEIsUUFBUSxzQ0FBd0MsRUFDOUQsT0ExS1IsU0FBMEIxaEIsRUFBTXhHLEdBQzlCLE9BQU80akMsR0FBV3A5QixFQUFNLElBQUk2ekIsR0FBUzZMLFFBQVF6Z0IsZ0JBQW1COW9CLE9BQU9vTCxPQUFPLENBQzVFZzhCLFFBQVMsU0FBU25qQyxFQUFPcEUsRUFBSzhDLEVBQU1tb0MsR0FDbEMsT0FBSXBOLEdBQVM0TCxRQUFVbEcsR0FBUXYrQixTQUFTWixJQUN0Q3pFLEtBQUt1RSxPQUFPbEUsRUFBS29FLEVBQU1tRSxTQUFTLFlBQ3pCLEdBR0YwaUMsRUFBUXpELGVBQWU1VyxNQUFNanhCLEtBQU00ekIsVUFDNUMsR0FDQy92QixHQUNMLENBK0plMG5DLENBQWlCbGhDLEVBQU1ySyxLQUFLd3JDLGdCQUFnQjVpQyxXQUdyRCxJQUFLdzRCLEVBQWF3QyxHQUFReEMsV0FBVy8yQixLQUFVN0QsRUFBWXVsQixRQUFRLHdCQUEwQixFQUFHLENBQzlGLE1BQU0wZixFQUFZenJDLEtBQUsydUIsS0FBTzN1QixLQUFLMnVCLElBQUkvcUIsU0FFdkMsT0FBTzZqQyxHQUNMckcsRUFBYSxDQUFDLFVBQVcvMkIsR0FBUUEsRUFDakNvaEMsR0FBYSxJQUFJQSxFQUNqQnpyQyxLQUFLd3JDLGVBRVQsQ0FDRixDQUVBLE9BQUlKLEdBQW1CRCxHQUNyQmxsQyxFQUFRb2xDLGVBQWUsb0JBQW9CLEdBeEVqRCxTQUF5QkssRUFBVUMsRUFBUTdDLEdBQ3pDLEdBQUlsRixHQUFRbk4sU0FBU2lWLEdBQ25CLElBRUUsT0FEQ0MsR0FBVW53QixLQUFLbUMsT0FBTyt0QixHQUNoQjlILEdBQVF4USxLQUFLc1ksRUFDdEIsQ0FBRSxNQUFPOUwsR0FDUCxHQUFlLGdCQUFYQSxFQUFFMTRCLEtBQ0osTUFBTTA0QixDQUVWLENBR0YsT0FBUWtKLEdBQVd0dEIsS0FBS0MsV0FBV2l3QixFQUNyQyxDQTREYUUsQ0FBZ0J2aEMsSUFHbEJBLENBQ1QsR0FFQXdoQyxrQkFBbUIsQ0FBQyxTQUEyQnhoQyxHQUM3QyxNQUFNMGdDLEVBQWUvcUMsS0FBSytxQyxjQUFnQjFoQyxHQUFTMGhDLGFBQzdDcEIsRUFBb0JvQixHQUFnQkEsRUFBYXBCLGtCQUNqRG1DLEVBQXNDLFNBQXRCOXJDLEtBQUsrckMsYUFFM0IsR0FBSW5JLEdBQVFwQyxXQUFXbjNCLElBQVN1NUIsR0FBUXRDLGlCQUFpQmozQixHQUN2RCxPQUFPQSxFQUdULEdBQUlBLEdBQVF1NUIsR0FBUW5OLFNBQVNwc0IsS0FBV3MvQixJQUFzQjNwQyxLQUFLK3JDLGNBQWlCRCxHQUFnQixDQUNsRyxNQUNNRSxJQURvQmpCLEdBQWdCQSxFQUFhckIsb0JBQ1BvQyxFQUVoRCxJQUNFLE9BQU90d0IsS0FBS21DLE1BQU10VCxFQUNwQixDQUFFLE1BQU91MUIsR0FDUCxHQUFJb00sRUFBbUIsQ0FDckIsR0FBZSxnQkFBWHBNLEVBQUUxNEIsS0FDSixNQUFNeS9CLEdBQVdwK0IsS0FBS3EzQixFQUFHK0csR0FBV3NGLGlCQUFrQmpzQyxLQUFNLEtBQU1BLEtBQUttRyxVQUV6RSxNQUFNeTVCLENBQ1IsQ0FDRixDQUNGLENBRUEsT0FBT3YxQixDQUNULEdBTUF3ZSxRQUFTLEVBRVRxakIsZUFBZ0IsYUFDaEJDLGVBQWdCLGVBRWhCQyxrQkFBbUIsRUFDbkJwakIsZUFBZ0IsRUFFaEIyRixJQUFLLENBQ0gvcUIsU0FBVXM2QixHQUFTNkwsUUFBUW5tQyxTQUMzQm1oQixLQUFNbVosR0FBUzZMLFFBQVFobEIsTUFHekJzbkIsZUFBZ0IsU0FBd0I5N0IsR0FDdEMsT0FBT0EsR0FBVSxLQUFPQSxFQUFTLEdBQ25DLEVBRUF0SyxRQUFTLENBQ1BxbUMsT0FBUSxDQUNOLE9BQVUsb0NBQ1Ysb0JBQWdCM21DLEtBS3RCaStCLEdBQVFsakMsUUFBUSxDQUFDLFNBQVUsTUFBTyxPQUFRLE9BQVEsTUFBTyxVQUFXNEksSUFDbEVELEdBQVNwRCxRQUFRcUQsR0FBVSxDQUFDLENBQUMsSUFHL0IsTUFBTWlqQyxHQUFhbGpDLEdBSWJtakMsR0FBb0I1SSxHQUFRZ0MsWUFBWSxDQUM1QyxNQUFPLGdCQUFpQixpQkFBa0IsZUFBZ0IsT0FDMUQsVUFBVyxPQUFRLE9BQVEsb0JBQXFCLHNCQUNoRCxnQkFBaUIsV0FBWSxlQUFnQixzQkFDN0MsVUFBVyxjQUFlLGVBOEN0QjZHLEdBQWFwb0IsT0FBTyxhQUUxQixTQUFTcW9CLEdBQWdCN25DLEdBQ3ZCLE9BQU9BLEdBQVUwbUIsT0FBTzFtQixHQUFRdXVCLE9BQU92ckIsYUFDekMsQ0FFQSxTQUFTOGtDLEdBQWVsb0MsR0FDdEIsT0FBYyxJQUFWQSxHQUE0QixNQUFUQSxFQUNkQSxFQUdGbS9CLEdBQVF2aEMsUUFBUW9DLEdBQVNBLEVBQU0wSSxJQUFJdy9CLElBQWtCcGhCLE9BQU85bUIsRUFDckUsQ0FnQkEsU0FBU21vQyxHQUFpQjNLLEVBQVN4OUIsRUFBT0ksRUFBUWloQixFQUFRK21CLEdBQ3hELE9BQUlqSixHQUFRak4sV0FBVzdRLEdBQ2RBLEVBQU81aEIsS0FBS2xFLEtBQU15RSxFQUFPSSxJQUc5QmdvQyxJQUNGcG9DLEVBQVFJLEdBR0wrK0IsR0FBUW5OLFNBQVNoeUIsR0FFbEJtL0IsR0FBUW5OLFNBQVMzUSxJQUNlLElBQTNCcmhCLEVBQU1zbkIsUUFBUWpHLEdBR25COGQsR0FBUXRCLFNBQVN4YyxHQUNaQSxFQUFPL0IsS0FBS3RmLFFBRHJCLE9BTkEsRUFTRixDQXNCQSxNQUFNcWxCLGFBQ0osV0FBQThOLENBQVkzeEIsR0FDVkEsR0FBV2pHLEtBQUtvbkIsSUFBSW5oQixFQUN0QixDQUVBLEdBQUFtaEIsQ0FBSXZpQixFQUFRaW9DLEVBQWdCQyxHQUMxQixNQUFNMzhCLEVBQU9wUSxLQUViLFNBQVM0SixFQUFVb2pDLEVBQVFDLEVBQVNDLEdBQ2xDLE1BQU1DLEVBQVVULEdBQWdCTyxHQUVoQyxJQUFLRSxFQUNILE1BQU0sSUFBSXZvQyxNQUFNLDBDQUdsQixNQUFNdkUsRUFBTXVqQyxHQUFRaEMsUUFBUXh4QixFQUFNKzhCLEtBRTlCOXNDLFFBQXFCc0YsSUFBZHlLLEVBQUsvUCxLQUFtQyxJQUFiNnNDLFFBQW1Ddm5DLElBQWJ1bkMsSUFBd0MsSUFBZDk4QixFQUFLL1AsTUFDekYrUCxFQUFLL1AsR0FBTzRzQyxHQUFXTixHQUFlSyxHQUUxQyxDQUVBLE1BQU1JLEVBQWEsQ0FBQ25uQyxFQUFTaW5DLElBQzNCdEosR0FBUWxqQyxRQUFRdUYsR0FBUyxDQUFDK21DLEVBQVFDLElBQVlyakMsRUFBVW9qQyxFQUFRQyxFQUFTQyxLQUUzRSxHQUFJdEosR0FBUTVDLGNBQWNuOEIsSUFBV0EsYUFBa0I3RSxLQUFLNDNCLFlBQzFEd1YsRUFBV3ZvQyxFQUFRaW9DLFFBQ2QsR0FBR2xKLEdBQVFuTixTQUFTNXhCLEtBQVlBLEVBQVNBLEVBQU91dUIsVUFyRXhCLGlDQUFpQ3JQLEtBcUVxQmxmLEVBckVadXVCLFFBc0V2RWdhLEVBN0hlQyxLQUNuQixNQUFNdlcsRUFBUyxDQUFDLEVBQ2hCLElBQUl6MkIsRUFDQTJ3QixFQUNBM29CLEVBc0JKLE9BcEJBZ2xDLEdBQWNBLEVBQVd0bEIsTUFBTSxNQUFNcm5CLFNBQVEsU0FBZ0I0c0MsR0FDM0RqbEMsRUFBSWlsQyxFQUFLdmhCLFFBQVEsS0FDakIxckIsRUFBTWl0QyxFQUFLOWtDLFVBQVUsRUFBR0gsR0FBRytxQixPQUFPdnJCLGNBQ2xDbXBCLEVBQU1zYyxFQUFLOWtDLFVBQVVILEVBQUksR0FBRytxQixRQUV2Qi95QixHQUFReTJCLEVBQU96MkIsSUFBUW1zQyxHQUFrQm5zQyxLQUlsQyxlQUFSQSxFQUNFeTJCLEVBQU96MkIsR0FDVHkyQixFQUFPejJCLEdBQUtvRixLQUFLdXJCLEdBRWpCOEYsRUFBT3oyQixHQUFPLENBQUMyd0IsR0FHakI4RixFQUFPejJCLEdBQU95MkIsRUFBT3oyQixHQUFPeTJCLEVBQU96MkIsR0FBTyxLQUFPMndCLEVBQU1BLEVBRTNELElBRU84RixDQUFNLEVBbUdFeVcsQ0FBYTFvQyxHQUFTaW9DLFFBQzVCLEdBQUlsSixHQUFRbkMsVUFBVTU4QixHQUMzQixJQUFLLE1BQU94RSxFQUFLb0UsS0FBVUksRUFBT3NaLFVBQ2hDdlUsRUFBVW5GLEVBQU9wRSxFQUFLMHNDLFFBR2QsTUFBVmxvQyxHQUFrQitFLEVBQVVrakMsRUFBZ0Jqb0MsRUFBUWtvQyxHQUd0RCxPQUFPL3NDLElBQ1QsQ0FFQSxHQUFBOE4sQ0FBSWpKLEVBQVE4bUMsR0FHVixHQUZBOW1DLEVBQVM2bkMsR0FBZ0I3bkMsR0FFYixDQUNWLE1BQU14RSxFQUFNdWpDLEdBQVFoQyxRQUFRNWhDLEtBQU02RSxHQUVsQyxHQUFJeEUsRUFBSyxDQUNQLE1BQU1vRSxFQUFRekUsS0FBS0ssR0FFbkIsSUFBS3NyQyxFQUNILE9BQU9sbkMsRUFHVCxJQUFlLElBQVhrbkMsRUFDRixPQTVHVixTQUFxQnhZLEdBQ25CLE1BQU1xYSxFQUFTaHRDLE9BQU84TixPQUFPLE1BQ3ZCbS9CLEVBQVcsbUNBQ2pCLElBQUl2ZixFQUVKLEtBQVFBLEVBQVF1ZixFQUFTalMsS0FBS3JJLElBQzVCcWEsRUFBT3RmLEVBQU0sSUFBTUEsRUFBTSxHQUczQixPQUFPc2YsQ0FDVCxDQWtHaUJFLENBQVlqcEMsR0FHckIsR0FBSW0vQixHQUFRak4sV0FBV2dWLEdBQ3JCLE9BQU9BLEVBQU96bkMsS0FBS2xFLEtBQU15RSxFQUFPcEUsR0FHbEMsR0FBSXVqQyxHQUFRdEIsU0FBU3FKLEdBQ25CLE9BQU9BLEVBQU9uUSxLQUFLLzJCLEdBR3JCLE1BQU0sSUFBSW13QixVQUFVLHlDQUN0QixDQUNGLENBQ0YsQ0FFQSxHQUFBN1gsQ0FBSWxZLEVBQVE4b0MsR0FHVixHQUZBOW9DLEVBQVM2bkMsR0FBZ0I3bkMsR0FFYixDQUNWLE1BQU14RSxFQUFNdWpDLEdBQVFoQyxRQUFRNWhDLEtBQU02RSxHQUVsQyxTQUFVeEUsUUFBcUJzRixJQUFkM0YsS0FBS0ssSUFBd0JzdEMsSUFBV2YsR0FBaUI1c0MsRUFBTUEsS0FBS0ssR0FBTUEsRUFBS3N0QyxHQUNsRyxDQUVBLE9BQU8sQ0FDVCxDQUVBLE9BQU85b0MsRUFBUThvQyxHQUNiLE1BQU12OUIsRUFBT3BRLEtBQ2IsSUFBSTR0QyxHQUFVLEVBRWQsU0FBU0MsRUFBYVosR0FHcEIsR0FGQUEsRUFBVVAsR0FBZ0JPLEdBRWIsQ0FDWCxNQUFNNXNDLEVBQU11akMsR0FBUWhDLFFBQVF4eEIsRUFBTTY4QixJQUU5QjVzQyxHQUFTc3RDLElBQVdmLEdBQWlCeDhCLEVBQU1BLEVBQUsvUCxHQUFNQSxFQUFLc3RDLFlBQ3REdjlCLEVBQUsvUCxHQUVadXRDLEdBQVUsRUFFZCxDQUNGLENBUUEsT0FOSWhLLEdBQVF2aEMsUUFBUXdDLEdBQ2xCQSxFQUFPbkUsUUFBUW10QyxHQUVmQSxFQUFhaHBDLEdBR1Irb0MsQ0FDVCxDQUVBLEtBQUFwRSxDQUFNbUUsR0FDSixNQUFNbHRDLEVBQU9ELE9BQU9DLEtBQUtULE1BQ3pCLElBQUlxSSxFQUFJNUgsRUFBS29CLE9BQ1QrckMsR0FBVSxFQUVkLEtBQU92bEMsS0FBSyxDQUNWLE1BQU1oSSxFQUFNSSxFQUFLNEgsR0FDYnNsQyxJQUFXZixHQUFpQjVzQyxFQUFNQSxLQUFLSyxHQUFNQSxFQUFLc3RDLEdBQVMsWUFDdEQzdEMsS0FBS0ssR0FDWnV0QyxHQUFVLEVBRWQsQ0FFQSxPQUFPQSxDQUNULENBRUEsU0FBQTVtQyxDQUFVOHBCLEdBQ1IsTUFBTTFnQixFQUFPcFEsS0FDUGlHLEVBQVUsQ0FBQyxFQXNCakIsT0FwQkEyOUIsR0FBUWxqQyxRQUFRVixNQUFNLENBQUN5RSxFQUFPSSxLQUM1QixNQUFNeEUsRUFBTXVqQyxHQUFRaEMsUUFBUTM3QixFQUFTcEIsR0FFckMsR0FBSXhFLEVBR0YsT0FGQStQLEVBQUsvUCxHQUFPc3NDLEdBQWVsb0MsZUFDcEIyTCxFQUFLdkwsR0FJZCxNQUFNaXBDLEVBQWFoZCxFQTlKekIsU0FBc0Jqc0IsR0FDcEIsT0FBT0EsRUFBT3V1QixPQUNYdnJCLGNBQWNaLFFBQVEsbUJBQW1CLENBQUNnMUIsRUFBRzhSLEVBQU01YSxJQUMzQzRhLEVBQUsvYSxjQUFnQkcsR0FFbEMsQ0F5SmtDNmEsQ0FBYW5wQyxHQUFVMG1CLE9BQU8xbUIsR0FBUXV1QixPQUU5RDBhLElBQWVqcEMsVUFDVnVMLEVBQUt2TCxHQUdkdUwsRUFBSzA5QixHQUFjbkIsR0FBZWxvQyxHQUVsQ3dCLEVBQVE2bkMsSUFBYyxDQUFJLElBR3JCOXRDLElBQ1QsQ0FFQSxNQUFBMkcsSUFBVXNuQyxHQUNSLE9BQU9qdUMsS0FBSzQzQixZQUFZanhCLE9BQU8zRyxRQUFTaXVDLEVBQzFDLENBRUEsTUFBQXJILENBQU9zSCxHQUNMLE1BQU12Z0MsRUFBTW5OLE9BQU84TixPQUFPLE1BTTFCLE9BSkFzMUIsR0FBUWxqQyxRQUFRVixNQUFNLENBQUN5RSxFQUFPSSxLQUNuQixNQUFUSixJQUEyQixJQUFWQSxJQUFvQmtKLEVBQUk5SSxHQUFVcXBDLEdBQWF0SyxHQUFRdmhDLFFBQVFvQyxHQUFTQSxFQUFNb0MsS0FBSyxNQUFRcEMsRUFBTSxJQUc3R2tKLENBQ1QsQ0FFQSxDQUFDMFcsT0FBTzVpQixZQUNOLE9BQU9qQixPQUFPMmQsUUFBUW5lLEtBQUs0bUMsVUFBVXZpQixPQUFPNWlCLFdBQzlDLENBRUEsUUFBQW1ILEdBQ0UsT0FBT3BJLE9BQU8yZCxRQUFRbmUsS0FBSzRtQyxVQUFVejVCLEtBQUksRUFBRXRJLEVBQVFKLEtBQVdJLEVBQVMsS0FBT0osSUFBT29DLEtBQUssS0FDNUYsQ0FFQSxJQUFLd2QsT0FBT0MsZUFDVixNQUFPLGNBQ1QsQ0FFQSxXQUFPL2IsQ0FBS2s0QixHQUNWLE9BQU9BLGFBQWlCemdDLEtBQU95Z0MsRUFBUSxJQUFJemdDLEtBQUt5Z0MsRUFDbEQsQ0FFQSxhQUFPOTVCLENBQU95NEIsS0FBVTZPLEdBQ3RCLE1BQU1FLEVBQVcsSUFBSW51QyxLQUFLby9CLEdBSTFCLE9BRkE2TyxFQUFRdnRDLFNBQVN1MkIsR0FBV2tYLEVBQVMvbUIsSUFBSTZQLEtBRWxDa1gsQ0FDVCxDQUVBLGVBQU9DLENBQVN2cEMsR0FDZCxNQUlNd3BDLEdBSllydUMsS0FBS3lzQyxJQUFlenNDLEtBQUt5c0MsSUFBYyxDQUN2RDRCLFVBQVcsQ0FBQyxJQUdjQSxVQUN0Qi9wQyxFQUFZdEUsS0FBS3NFLFVBRXZCLFNBQVNncUMsRUFBZXJCLEdBQ3RCLE1BQU1FLEVBQVVULEdBQWdCTyxHQUUzQm9CLEVBQVVsQixNQXROckIsU0FBd0J4L0IsRUFBSzlJLEdBQzNCLE1BQU0wcEMsRUFBZTNLLEdBQVFrQyxZQUFZLElBQU1qaEMsR0FFL0MsQ0FBQyxNQUFPLE1BQU8sT0FBT25FLFNBQVE4dEMsSUFDNUJodUMsT0FBTzRqQixlQUFlelcsRUFBSzZnQyxFQUFhRCxFQUFjLENBQ3BEOXBDLE1BQU8sU0FBUzZ2QixFQUFNQyxFQUFNQyxHQUMxQixPQUFPeDBCLEtBQUt3dUMsR0FBWXRxQyxLQUFLbEUsS0FBTTZFLEVBQVF5dkIsRUFBTUMsRUFBTUMsRUFDekQsRUFDQW5ELGNBQWMsR0FDZCxHQUVOLENBNE1Rb2QsQ0FBZW5xQyxFQUFXMm9DLEdBQzFCb0IsRUFBVWxCLElBQVcsRUFFekIsQ0FJQSxPQUZBdkosR0FBUXZoQyxRQUFRd0MsR0FBVUEsRUFBT25FLFFBQVE0dEMsR0FBa0JBLEVBQWV6cEMsR0FFbkU3RSxJQUNULEVBR0Y4cEIsYUFBYXNrQixTQUFTLENBQUMsZUFBZ0IsaUJBQWtCLFNBQVUsa0JBQW1CLGFBQWMsa0JBR3BHeEssR0FBUXJCLGtCQUFrQnpZLGFBQWF4bEIsV0FBVyxFQUFFRyxTQUFRcEUsS0FDMUQsSUFBSXF1QyxFQUFTcnVDLEVBQUksR0FBRzJ5QixjQUFnQjN5QixFQUFJd3hCLE1BQU0sR0FDOUMsTUFBTyxDQUNML2pCLElBQUssSUFBTXJKLEVBQ1gsR0FBQTJpQixDQUFJdW5CLEdBQ0YzdUMsS0FBSzB1QyxHQUFVQyxDQUNqQixFQUNGLElBR0YvSyxHQUFRK0IsY0FBYzdiLGNBRXRCLE1BQU04a0IsR0FBaUI5a0IsYUFVdkIsU0FBUytrQixHQUFjQyxFQUFLM29DLEdBQzFCLE1BQU1tVCxFQUFTdFosTUFBUXVzQyxHQUNqQnRLLEVBQVU5N0IsR0FBWW1ULEVBQ3RCclQsRUFBVTJvQyxHQUFlcm1DLEtBQUswNUIsRUFBUWg4QixTQUM1QyxJQUFJb0UsRUFBTzQzQixFQUFRNTNCLEtBUW5CLE9BTkF1NUIsR0FBUWxqQyxRQUFRb3VDLEdBQUssU0FBbUI3dEMsR0FDdENvSixFQUFPcEosRUFBR2lELEtBQUtvVixFQUFRalAsRUFBTXBFLEVBQVFlLFlBQWFiLEVBQVdBLEVBQVNvSyxZQUFTNUssRUFDakYsSUFFQU0sRUFBUWUsWUFFRHFELENBQ1QsQ0FFQSxTQUFTMGtDLEdBQVN0cUMsR0FDaEIsU0FBVUEsSUFBU0EsRUFBTXVxQyxXQUMzQixDQVdBLFNBQVNDLEdBQWN4K0IsRUFBUzZJLEVBQVFsUSxHQUV0Q3U5QixHQUFXemlDLEtBQUtsRSxLQUFpQixNQUFYeVEsRUFBa0IsV0FBYUEsRUFBU2syQixHQUFXdUksYUFBYzUxQixFQUFRbFEsR0FDL0ZwSixLQUFLa0gsS0FBTyxlQUNkLENBZUEsU0FBU2lvQyxHQUFPOVUsRUFBUytVLEVBQVFqcEMsR0FDL0IsTUFBTWttQyxFQUFpQmxtQyxFQUFTbVQsT0FBTyt5QixlQUNsQ2xtQyxFQUFTb0ssUUFBVzg3QixJQUFrQkEsRUFBZWxtQyxFQUFTb0ssUUFHakU2K0IsRUFBTyxJQUFJekksR0FDVCxtQ0FBcUN4Z0MsRUFBU29LLE9BQzlDLENBQUNvMkIsR0FBVzBJLGdCQUFpQjFJLEdBQVdzRixrQkFBa0J4akMsS0FBS0MsTUFBTXZDLEVBQVNvSyxPQUFTLEtBQU8sR0FDOUZwSyxFQUFTbVQsT0FDVG5ULEVBQVNpRCxRQUNUakQsSUFQRmswQixFQUFRbDBCLEVBVVosQ0F3Q0EsU0FBU21wQyxHQUFjQyxFQUFTQyxHQUM5QixPQUFJRCxJQWhDTixTQUF1QmgyQixHQUlyQixNQUFPLDhCQUE4QndLLEtBQUt4SyxFQUM1QyxDQTJCa0JrMkIsQ0FBY0QsR0FqQmhDLFNBQXFCRCxFQUFTRyxHQUM1QixPQUFPQSxFQUNISCxFQUFRdG9DLFFBQVEsU0FBVSxJQUFNLElBQU15b0MsRUFBWXpvQyxRQUFRLE9BQVEsSUFDbEVzb0MsQ0FDTixDQWNXSSxDQUFZSixFQUFTQyxHQUV2QkEsQ0FDVCxDQXZFQTVMLEdBQVF6L0IsU0FBUzhxQyxHQUFldEksR0FBWSxDQUMxQ3FJLFlBQVksSUF3RWQsTUFBTVksR0FBVSxRQUVoQixTQUFTQyxHQUFjdDJCLEdBQ3JCLE1BQU0yVSxFQUFRLDRCQUE0QnNOLEtBQUtqaUIsR0FDL0MsT0FBTzJVLEdBQVNBLEVBQU0sSUFBTSxFQUM5QixDQUVBLE1BQU00aEIsR0FBbUIsZ0RBZ0R6QixNQUFNQyxHQUFhMXJCLE9BQU8sYUFFMUIsTUFBTTJyQiw2QkFBNkI1UCxFQUF5QixRQUFFNlAsVUFDNUQsV0FBQXJZLENBQVkvekIsR0FZVnFzQyxNQUFNLENBQ0pDLHVCQVpGdHNDLEVBQVUrL0IsR0FBUWUsYUFBYTlnQyxFQUFTLENBQ3RDdXNDLFFBQVMsRUFDVEMsVUFBVyxNQUNYQyxhQUFjLElBQ2RDLFdBQVksSUFDWkMsVUFBVyxFQUNYQyxhQUFjLElBQ2IsTUFBTSxDQUFDN3BDLEVBQU0wc0IsS0FDTnNRLEdBQVFoRCxZQUFZdE4sRUFBTzFzQixPQUlKeXBDLFlBR2pDLE1BQU1LLEVBQVkxd0MsS0FBSyt2QyxJQUFjLENBQ25DUSxXQUFZMXNDLEVBQVEwc0MsV0FDcEJGLFVBQVd4c0MsRUFBUXdzQyxVQUNuQkQsUUFBU3ZzQyxFQUFRdXNDLFFBQ2pCRSxhQUFjenNDLEVBQVF5c0MsYUFDdEJLLFVBQVcsRUFDWEMsWUFBWSxFQUNaQyxvQkFBcUIsRUFDckJDLEdBQUlqbUMsS0FBS2ttQyxNQUNUQyxNQUFPLEVBQ1BDLGVBQWdCLE1BR2xCanhDLEtBQUtrRyxHQUFHLGVBQWVtdUIsSUFDUCxhQUFWQSxJQUNHcWMsRUFBVUUsYUFDYkYsRUFBVUUsWUFBYSxHQUUzQixHQUVKLENBRUEsS0FBQU0sQ0FBTTF1QyxHQUNKLE1BQU1rdUMsRUFBWTF3QyxLQUFLK3ZDLElBTXZCLE9BSklXLEVBQVVPLGdCQUNaUCxFQUFVTyxpQkFHTGYsTUFBTWdCLE1BQU0xdUMsRUFDckIsQ0FFQSxVQUFBMnVDLENBQVdDLEVBQU9yWixFQUFVbDNCLEdBQzFCLE1BQU02dkMsRUFBWTF3QyxLQUFLK3ZDLElBQ2pCSyxFQUFVTSxFQUFVTixRQUVwQkQsRUFBd0Jud0MsS0FBS213QyxzQkFFN0JJLEVBQWFHLEVBQVVILFdBR3ZCYyxFQUFrQmpCLEdBRFIsSUFBT0csR0FFakJELEdBQTBDLElBQTNCSSxFQUFVSixhQUF5QjduQyxLQUFLNm9DLElBQUlaLEVBQVVKLGFBQStCLElBQWpCZSxHQUF5QixFQUU1R0UsRUFBWSxDQUFDQyxFQUFRQyxLQUN6QixNQUFNVCxFQUFRNXJDLE9BQU9FLFdBQVdrc0MsR0FDaENkLEVBQVVDLFdBQWFLLEVBQ3ZCTixFQUFVTSxPQUFTQSxFQUVuQk4sRUFBVUUsWUFBYzV3QyxLQUFLaUssS0FBSyxXQUFZeW1DLEVBQVVDLFdBRXBEM3dDLEtBQUt5RixLQUFLK3JDLEdBQ1pwd0MsUUFBUUYsU0FBU3V3QyxHQUVqQmYsRUFBVU8sZUFBaUIsS0FDekJQLEVBQVVPLGVBQWlCLEtBQzNCN3ZDLFFBQVFGLFNBQVN1d0MsRUFBVSxDQUUvQixFQUdJQyxFQUFpQixDQUFDRixFQUFRQyxLQUM5QixNQUFNcEIsRUFBWWpyQyxPQUFPRSxXQUFXa3NDLEdBQ3BDLElBRUlHLEVBRkFDLEVBQWlCLEtBQ2pCQyxFQUFlMUIsRUFFZjJCLEVBQVMsRUFFYixHQUFJMUIsRUFBUyxDQUNYLE1BQU1XLEVBQU1sbUMsS0FBS2ttQyxRQUVaTCxFQUFVSSxLQUFPZ0IsRUFBVWYsRUFBTUwsRUFBVUksS0FBUVAsS0FDdERHLEVBQVVJLEdBQUtDLEVBQ2ZZLEVBQVlOLEVBQWlCWCxFQUFVTSxNQUN2Q04sRUFBVU0sTUFBUVcsRUFBWSxHQUFLQSxFQUFZLEVBQy9DRyxFQUFTLEdBR1hILEVBQVlOLEVBQWlCWCxFQUFVTSxLQUN6QyxDQUVBLEdBQUlaLEVBQVMsQ0FDWCxHQUFJdUIsR0FBYSxFQUVmLE9BQU90d0MsWUFBVyxLQUNoQm93QyxFQUFVLEtBQU1ELEVBQU8sR0FDdEJqQixFQUFhdUIsR0FHZEgsRUFBWUUsSUFDZEEsRUFBZUYsRUFFbkIsQ0FFSUUsR0FBZ0J4QixFQUFZd0IsR0FBaUJ4QixFQUFZd0IsRUFBZ0J2QixJQUMzRXNCLEVBQWlCSixFQUFPTyxTQUFTRixHQUNqQ0wsRUFBU0EsRUFBT08sU0FBUyxFQUFHRixJQUc5Qk4sRUFBVUMsRUFBUUksRUFBaUIsS0FDakN4d0MsUUFBUUYsU0FBU3V3QyxFQUFXLEtBQU1HLEVBQWUsRUFDL0NILEVBQVUsRUFHaEJDLEVBQWVOLEdBQU8sU0FBU1ksRUFBbUJqeEMsRUFBS3l3QyxHQUNyRCxHQUFJendDLEVBQ0YsT0FBT0YsRUFBU0UsR0FHZHl3QyxFQUNGRSxFQUFlRixFQUFRUSxHQUV2Qm54QyxFQUFTLEtBRWIsR0FDRixFQUdGLE1BQU1veEMsR0FBeUJqQyxzQkFFekIsY0FBQ2tDLElBQWlCN3RCLE9BY2xCOHRCLEdBWlc3d0MsZ0JBQWlCNmxCLEdBQzVCQSxFQUFLakQsYUFDQWlELEVBQUtqRCxTQUNIaUQsRUFBS2lyQix3QkFDRmpyQixFQUFLaXJCLGNBQ1JqckIsRUFBSytxQixVQUNQL3FCLEVBQUsrcUIsWUFFTi9xQixDQUVWLEVBSU1rckIsR0FBb0J6TyxHQUFRWixTQUFTQyxZQUFjLEtBRW5EcVAsR0FBYyxJQUFJcHZDLEVBQUtxdkMsWUFFdkJDLEdBQU8sT0FDUEMsR0FBYUgsR0FBWXRvQixPQUFPd29CLElBR3RDLE1BQU1FLGFBQ0osV0FBQTlhLENBQVkxd0IsRUFBTXpDLEdBQ2hCLE1BQU0sV0FBQ2t1QyxHQUFjM3lDLEtBQUs0M0IsWUFDcEJnYixFQUFnQmhQLEdBQVFuTixTQUFTaHlCLEdBRXZDLElBQUl3QixFQUFVLHlDQUF5QzBzQyxFQUFXenJDLE9BQy9EMHJDLEdBQWlCbnVDLEVBQU15QyxLQUFPLGVBQWV5ckMsRUFBV2x1QyxFQUFNeUMsU0FBVyxLQUN6RXNyQyxLQUVDSSxFQUNGbnVDLEVBQVE2dEMsR0FBWXRvQixPQUFPdUIsT0FBTzltQixHQUFPd0MsUUFBUSxlQUFnQnVyQyxLQUVqRXZzQyxHQUFXLGlCQUFpQnhCLEVBQU11RyxNQUFRLDZCQUE2QnduQyxLQUd6RXh5QyxLQUFLaUcsUUFBVXFzQyxHQUFZdG9CLE9BQU8vakIsRUFBVXVzQyxJQUU1Q3h5QyxLQUFLNnlDLGNBQWdCRCxFQUFnQm51QyxFQUFNYSxXQUFhYixFQUFNakMsS0FFOUR4QyxLQUFLd0MsS0FBT3hDLEtBQUtpRyxRQUFRWCxXQUFhdEYsS0FBSzZ5QyxjQXJCdEIsRUF1QnJCN3lDLEtBQUtrSCxLQUFPQSxFQUNabEgsS0FBS3lFLE1BQVFBLENBQ2YsQ0FFQSxZQUFPdWxCLFNBQ0NocUIsS0FBS2lHLFFBRVgsTUFBTSxNQUFDeEIsR0FBU3pFLEtBRWI0akMsR0FBUTFCLGFBQWF6OUIsU0FDaEJBLFFBRUMwdEMsR0FBVzF0QyxTQUdkZ3VDLEVBQ1IsQ0FFQSxpQkFBT0UsQ0FBV3pyQyxHQUNkLE9BQU9xa0IsT0FBT3JrQixHQUFNRCxRQUFRLFlBQWFpbkIsSUFBVyxDQUNsRCxLQUFPLE1BQ1AsS0FBTyxNQUNQLElBQU0sT0FDTkEsS0FDTixFQUdGLE1BaURNNGtCLEdBakRtQixDQUFDQyxFQUFNQyxFQUFnQm52QyxLQUM5QyxNQUFNLElBQ0oyTixFQUFNLHFCQUFvQixLQUMxQmhQLEVBQU8sR0FBRSxTQUNUdUYsRUFBV3lKLEVBQU0sSUFBTW95QixHQUFRdUMsZUFBZTNqQyxFQUFNNnZDLEtBQ2xEeHVDLEdBQVcsQ0FBQyxFQUVoQixJQUFJKy9CLEdBQVFDLFdBQVdrUCxHQUNyQixNQUFNbmUsVUFBVSw4QkFHbEIsR0FBSTdzQixFQUFTbEcsT0FBUyxHQUFLa0csRUFBU2xHLE9BQVMsR0FDM0MsTUFBTStDLE1BQU0sMENBR2QsTUFBTXF1QyxFQUFnQlgsR0FBWXRvQixPQUFPLEtBQU9qaUIsRUFBV3lxQyxJQUNyRFUsRUFBY1osR0FBWXRvQixPQUFPLEtBQU9qaUIsRUFBVyxLQUFPeXFDLEdBQU9BLElBQ3ZFLElBQUlLLEVBQWdCSyxFQUFZNXRDLFdBRWhDLE1BQU1nNkIsRUFBUWw5QixNQUFNbUcsS0FBS3dxQyxFQUFLNTBCLFdBQVdoUixLQUFJLEVBQUVqRyxFQUFNekMsTUFDbkQsTUFBTTB1QyxFQUFPLElBQUlULGFBQWF4ckMsRUFBTXpDLEdBRXBDLE9BREFvdUMsR0FBaUJNLEVBQUszd0MsS0FDZjJ3QyxDQUFJLElBR2JOLEdBQWlCSSxFQUFjM3RDLFdBQWFnNkIsRUFBTXo5QixPQUVsRGd4QyxFQUFnQmpQLEdBQVFxQyxlQUFlNE0sR0FFdkMsTUFBTU8sRUFBa0IsQ0FDdEIsZUFBZ0IsaUNBQWlDcnJDLEtBU25ELE9BTkkwb0IsT0FBT2dNLFNBQVNvVyxLQUNsQk8sRUFBZ0Isa0JBQW9CUCxHQUd0Q0csR0FBa0JBLEVBQWVJLEdBRTFCbHZCLEVBQU9tdkIsU0FBUzlxQyxLQUFLLGtCQUMxQixJQUFJLE1BQU00cUMsS0FBUTdULFFBQ1YyVCxRQUNDRSxFQUFLbnBCLGVBR1JrcEIsQ0FDUCxDQVAyQixHQU92QixFQUtQLE1BQU1JLGtDQUFrQ2xULEVBQXlCLFFBQUU2UCxVQUNqRSxXQUFBc0QsQ0FBWW5DLEVBQU9yWixFQUFVbDNCLEdBQzNCYixLQUFLeUYsS0FBSzJyQyxHQUNWdndDLEdBQ0YsQ0FFQSxVQUFBc3dDLENBQVdDLEVBQU9yWixFQUFVbDNCLEdBQzFCLEdBQXFCLElBQWpCdXdDLEVBQU12dkMsU0FDUjdCLEtBQUtteEMsV0FBYW54QyxLQUFLdXpDLFlBR04sTUFBYm5DLEVBQU0sSUFBWSxDQUNwQixNQUFNdnNDLEVBQVNPLE9BQU9nRCxNQUFNLEdBQzVCdkQsRUFBTyxHQUFLLElBQ1pBLEVBQU8sR0FBSyxJQUNaN0UsS0FBS3lGLEtBQUtaLEVBQVFrekIsRUFDcEIsQ0FHRi8zQixLQUFLdXpDLFlBQVluQyxFQUFPclosRUFBVWwzQixFQUNwQyxFQUdGLE1BQU0yeUMsR0FBOEJGLDBCQWU5QkcsR0FiYyxDQUFDeHlDLEVBQUl1aEMsSUFDaEJvQixHQUFRVixVQUFVamlDLEdBQU0sWUFBYXlzQixHQUMxQyxNQUFNMWtCLEVBQUswa0IsRUFBSzFGLE1BQ2hCL21CLEVBQUdnd0IsTUFBTWp4QixLQUFNMHRCLEdBQU0zZixNQUFNdEosSUFDekIsSUFDRSs5QixFQUFVeDVCLEVBQUcsUUFBU3c1QixFQUFRLzlCLElBQVV1RSxFQUFHLEtBQU12RSxFQUNuRCxDQUFFLE1BQU8xRCxHQUNQaUksRUFBR2pJLEVBQ0wsSUFDQ2lJLEVBQ0wsRUFBSS9ILEVBb0dOLE1BQU15eUMsR0FBdUIsQ0FBQ0MsRUFBVUMsRUFBa0JDLEVBQU8sS0FDL0QsSUFBSUMsRUFBZ0IsRUFDcEIsTUFBTUMsRUEzRlIsU0FBcUJ0RCxFQUFjeFMsR0FDakN3UyxFQUFlQSxHQUFnQixHQUMvQixNQUFNTyxFQUFRLElBQUk1dUMsTUFBTXF1QyxHQUNsQnVELEVBQWEsSUFBSTV4QyxNQUFNcXVDLEdBQzdCLElBRUl3RCxFQUZBQyxFQUFPLEVBQ1BDLEVBQU8sRUFLWCxPQUZBbFcsT0FBY3Q0QixJQUFSczRCLEVBQW9CQSxFQUFNLElBRXpCLFNBQWNtVyxHQUNuQixNQUFNckQsRUFBTWxtQyxLQUFLa21DLE1BRVhzRCxFQUFZTCxFQUFXRyxHQUV4QkYsSUFDSEEsRUFBZ0JsRCxHQUdsQkMsRUFBTWtELEdBQVFFLEVBQ2RKLEVBQVdFLEdBQVFuRCxFQUVuQixJQUFJMW9DLEVBQUk4ckMsRUFDSkcsRUFBYSxFQUVqQixLQUFPanNDLElBQU02ckMsR0FDWEksR0FBY3RELEVBQU0zb0MsS0FDcEJBLEdBQVFvb0MsRUFTVixHQU5BeUQsR0FBUUEsRUFBTyxHQUFLekQsRUFFaEJ5RCxJQUFTQyxJQUNYQSxHQUFRQSxFQUFPLEdBQUsxRCxHQUdsQk0sRUFBTWtELEVBQWdCaFcsRUFDeEIsT0FHRixNQUFNNlQsRUFBU3VDLEdBQWF0RCxFQUFNc0QsRUFFbEMsT0FBT3ZDLEVBQVNycEMsS0FBSzh6QixNQUFtQixJQUFiK1gsRUFBb0J4QyxRQUFVbnNDLENBQzNELENBQ0YsQ0ErQ3VCNHVDLENBQVksR0FBSSxLQUVyQyxPQXpDRixTQUFrQnR6QyxFQUFJNHlDLEdBQ3BCLElBRUlXLEVBQ0FDLEVBSEFDLEVBQVksRUFDWkMsRUFBWSxJQUFPZCxFQUl2QixNQUFNZSxFQUFTLENBQUNsbkIsRUFBTXFqQixFQUFNbG1DLEtBQUtrbUMsU0FDL0IyRCxFQUFZM0QsRUFDWnlELEVBQVcsS0FDUEMsSUFDRmpjLGFBQWFpYyxHQUNiQSxFQUFRLE1BRVZ4ekMsRUFBR2d3QixNQUFNLEtBQU12RCxFQUFLLEVBcUJ0QixNQUFPLENBbEJXLElBQUlBLEtBQ3BCLE1BQU1xakIsRUFBTWxtQyxLQUFLa21DLE1BQ1hlLEVBQVNmLEVBQU0yRCxFQUNoQjVDLEdBQVU2QyxFQUNiQyxFQUFPbG5CLEVBQU1xakIsSUFFYnlELEVBQVc5bUIsRUFDTittQixJQUNIQSxFQUFRcHpDLFlBQVcsS0FDakJvekMsRUFBUSxLQUNSRyxFQUFPSixFQUFTLEdBQ2ZHLEVBQVk3QyxJQUVuQixFQUdZLElBQU0wQyxHQUFZSSxFQUFPSixHQUd6QyxDQU1TSyxFQUFTalYsSUFDZCxNQUFNa1YsRUFBU2xWLEVBQUVrVixPQUNYaHlCLEVBQVE4YyxFQUFFbVYsaUJBQW1CblYsRUFBRTljLFdBQVFuZCxFQUN2Q3F2QyxFQUFnQkYsRUFBU2hCLEVBQ3pCbUIsRUFBT2xCLEVBQWFpQixHQUcxQmxCLEVBQWdCZ0IsRUFjaEJuQixFQVphLENBQ1htQixTQUNBaHlCLFFBQ0FveUIsU0FBVXB5QixFQUFTZ3lCLEVBQVNoeUIsT0FBU25kLEVBQ3JDcXJDLE1BQU9nRSxFQUNQQyxLQUFNQSxRQUFjdHZDLEVBQ3BCd3ZDLFVBQVdGLEdBQVFueUIsR0FWTGd5QixHQUFVaHlCLEdBVWVBLEVBQVFneUIsR0FBVUcsT0FBT3R2QyxFQUNoRTB1QixNQUFPdUwsRUFDUG1WLGlCQUEyQixNQUFUanlCLEVBQ2xCLENBQUM4d0IsRUFBbUIsV0FBYSxXQUFXLEdBR2hDLEdBQ2JDLEVBQUssRUFHSnVCLEdBQXlCLENBQUN0eUIsRUFBT3V5QixLQUNyQyxNQUFNTixFQUE0QixNQUFUanlCLEVBRXpCLE1BQU8sQ0FBRWd5QixHQUFXTyxFQUFVLEdBQUcsQ0FDL0JOLG1CQUNBanlCLFFBQ0FneUIsV0FDRU8sRUFBVSxHQUFHLEVBR2JDLEdBQWtCcjBDLEdBQU8sSUFBSXlzQixJQUFTa1csR0FBUUYsTUFBSyxJQUFNemlDLEtBQU15c0IsS0FFL0Q2bkIsR0FBYyxDQUNsQkMsTUFBT3JWLEVBQXVCLFFBQUVzVixVQUFVQyxhQUMxQ0MsWUFBYXhWLEVBQXVCLFFBQUVzVixVQUFVQyxjQUc1Q0UsR0FBZ0IsQ0FDcEJKLE1BQU9yVixFQUF1QixRQUFFc1YsVUFBVUksdUJBQzFDRixZQUFheFYsRUFBdUIsUUFBRXNWLFVBQVVJLHdCQUc1Q0MsR0FBb0JsUyxHQUFRak4sV0FBV3dKLEVBQXVCLFFBQUU0Vix5QkFFL0QzeUMsS0FBTTR5QyxHQUFZM3lDLE1BQU80eUMsSUFBZS9WLEVBQWtDLFFBRTNFZ1csR0FBVSxVQUVWQyxHQUFxQmpZLEdBQVNqSSxVQUFVOW9CLEtBQUl4RCxHQUN6Q0EsRUFBVyxNQUdkeXNDLEdBQWdCLENBQUNseUIsR0FBU214QixFQUFXRyxNQUN6Q3R4QixFQUNHaGUsR0FBRyxNQUFPc3ZDLEdBQ1Z0dkMsR0FBRyxRQUFTc3ZDLEdBRVJILEdBV1QsU0FBU2dCLEdBQXVCeHlDLEVBQVM2MkIsR0FDbkM3MkIsRUFBUXl5QyxnQkFBZ0JydEIsT0FDMUJwbEIsRUFBUXl5QyxnQkFBZ0JydEIsTUFBTXBsQixHQUU1QkEsRUFBUXl5QyxnQkFBZ0JoOUIsUUFDMUJ6VixFQUFReXlDLGdCQUFnQmg5QixPQUFPelYsRUFBUzYyQixFQUU1QyxDQVdBLFNBQVM2YixHQUFTMXlDLEVBQVMyeUMsRUFBYWxkLEdBQ3RDLElBQUlyUSxFQUFRdXRCLEVBQ1osSUFBS3Z0QixJQUFtQixJQUFWQSxFQUFpQixDQUM3QixNQUFNd3RCLEVBQVdoWCxFQUFhckMsZUFBZTlELEdBQ3pDbWQsSUFDRnh0QixFQUFRLElBQUlwQixJQUFJNHVCLEdBRXBCLENBQ0EsR0FBSXh0QixFQUFPLENBTVQsR0FKSUEsRUFBTXpQLFdBQ1J5UCxFQUFNeXRCLE1BQVF6dEIsRUFBTXpQLFVBQVksSUFBTSxLQUFPeVAsRUFBTTB0QixVQUFZLEtBRzdEMXRCLEVBQU15dEIsS0FBTSxFQUVWenRCLEVBQU15dEIsS0FBS2w5QixVQUFZeVAsRUFBTXl0QixLQUFLQyxZQUNwQzF0QixFQUFNeXRCLE1BQVF6dEIsRUFBTXl0QixLQUFLbDlCLFVBQVksSUFBTSxLQUFPeVAsRUFBTXl0QixLQUFLQyxVQUFZLEtBRTNFLE1BQU1udUIsRUFBU3BqQixPQUNabUQsS0FBSzBnQixFQUFNeXRCLEtBQU0sUUFDakI5dEMsU0FBUyxVQUNaL0UsRUFBUW9DLFFBQVEsdUJBQXlCLFNBQVd1aUIsQ0FDdEQsQ0FFQTNrQixFQUFRb0MsUUFBUXdELEtBQU81RixFQUFRNkYsVUFBWTdGLEVBQVEwRixLQUFPLElBQU0xRixFQUFRMEYsS0FBTyxJQUMvRSxNQUFNcXRDLEVBQVkzdEIsRUFBTXZmLFVBQVl1ZixFQUFNeGYsS0FDMUM1RixFQUFRNkYsU0FBV2t0QyxFQUVuQi95QyxFQUFRNEYsS0FBT210QyxFQUNmL3lDLEVBQVEwRixLQUFPMGYsRUFBTTFmLEtBQ3JCMUYsRUFBUVYsS0FBT20yQixFQUNYclEsRUFBTXRmLFdBQ1I5RixFQUFROEYsU0FBV3NmLEVBQU10ZixTQUFTcWMsU0FBUyxLQUFPaUQsRUFBTXRmLFNBQVcsR0FBR3NmLEVBQU10ZixZQUVoRixDQUVBOUYsRUFBUXl5QyxnQkFBZ0JydEIsTUFBUSxTQUF3QjR0QixHQUd0RE4sR0FBU00sRUFBaUJMLEVBQWFLLEVBQWdCOWYsS0FDekQsQ0FDRixDQUVBLE1BQU0rZixHQUE0QyxvQkFBWjExQyxTQUF1RCxZQUE1QndpQyxHQUFRckQsT0FBT24vQixTQXVDMUUyMUMsR0FBb0IsQ0FBQzUzQixFQUFTNjNCLElBVmQsR0FBRTczQixVQUFTNjNCLGFBQy9CLElBQUtwVCxHQUFRbk4sU0FBU3RYLEdBQ3BCLE1BQU15VixVQUFVLDRCQUVsQixNQUFPLENBQ0x6VixVQUNBNjNCLE9BQVFBLElBQVc3M0IsRUFBUTRNLFFBQVEsS0FBTyxFQUFJLEVBQUksR0FDbEQsRUFHMkNrckIsQ0FBY3JULEdBQVE3QyxTQUFTNWhCLEdBQVdBLEVBQVUsQ0FBQ0EsVUFBUzYzQixXQUd2R0UsR0FBY0osSUFBMEIsU0FBcUJ4OUIsR0FDakUsT0F2Q2lCNjlCLEVBdUNBNzFDLGVBQW1DKzRCLEVBQVMrVSxFQUFRZ0ksR0FDbkUsSUFBSSxLQUFDL3NDLEVBQUksT0FBRS9DLEVBQU0sT0FBRTB2QyxHQUFVMTlCLEVBQzdCLE1BQU0sYUFBQ3l5QixFQUFZLGlCQUFFc0wsR0FBb0IvOUIsRUFDbkNoUSxFQUFTZ1EsRUFBT2hRLE9BQU8wcEIsY0FDN0IsSUFBSXNrQixFQUVBMWQsRUFEQXdQLEdBQVcsRUFHZixHQUFJOWhDLEVBQVEsQ0FDVixNQUFNaXdDLEVBQVU5RCxHQUFjbnNDLEdBQVM3QyxHQUFVbS9CLEdBQVF2aEMsUUFBUW9DLEdBQVNBLEVBQVEsQ0FBQ0EsS0FFbkY2QyxFQUFTLENBQUNvQyxFQUFVOHRDLEVBQUt4dUMsS0FDdkJ1dUMsRUFBUTd0QyxFQUFVOHRDLEdBQUssQ0FBQ3oyQyxFQUFLMDJDLEVBQU1uakIsS0FDakMsR0FBSXZ6QixFQUNGLE9BQU9pSSxFQUFHakksR0FHWixNQUFNMjJDLEVBQVk5VCxHQUFRdmhDLFFBQVFvMUMsR0FBUUEsRUFBS3RxQyxLQUFJd3FDLEdBQVFaLEdBQWtCWSxLQUFTLENBQUNaLEdBQWtCVSxFQUFNbmpCLElBRS9Ha2pCLEVBQUlJLElBQU01dUMsRUFBR2pJLEVBQUsyMkMsR0FBYTF1QyxFQUFHakksRUFBSzIyQyxFQUFVLEdBQUd2NEIsUUFBU3U0QixFQUFVLEdBQUdWLE9BQU8sR0FDakYsQ0FFTixDQUdBLE1BQU1hLEVBQVUsSUFBSXo5QixFQUFPMDlCLGFBRXJCQyxFQUFhLEtBQ2J6K0IsRUFBTzArQixhQUNUMStCLEVBQU8wK0IsWUFBWXQzQixZQUFZbmYsR0FHN0IrWCxFQUFPMitCLFFBQ1QzK0IsRUFBTzIrQixPQUFPQyxvQkFBb0IsUUFBUzMyQyxHQUc3Q3MyQyxFQUFRTSxvQkFBb0IsRUFXOUIsU0FBUzUyQyxFQUFNNmYsR0FDYnkyQixFQUFRNXRDLEtBQUssU0FBVW1YLEdBQVVBLEVBQU9wVyxLQUFPLElBQUlpa0MsR0FBYyxLQUFNMzFCLEVBQVFzZ0IsR0FBT3hZLEVBQ3hGLENBVkFnMkIsR0FBTyxDQUFDM3lDLEVBQU8yekMsS0FDYmQsR0FBUyxFQUNMYyxJQUNGaFAsR0FBVyxFQUNYMk8sSUFDRixJQU9GRixFQUFRbmYsS0FBSyxRQUFTMFcsSUFFbEI5MUIsRUFBTzArQixhQUFlMStCLEVBQU8yK0IsVUFDL0IzK0IsRUFBTzArQixhQUFlMStCLEVBQU8wK0IsWUFBWUssVUFBVTkyQyxHQUMvQytYLEVBQU8yK0IsU0FDVDMrQixFQUFPMitCLE9BQU9LLFFBQVUvMkMsSUFBVStYLEVBQU8yK0IsT0FBT3hVLGlCQUFpQixRQUFTbGlDLEtBSzlFLE1BQU1nM0MsRUFBV2pKLEdBQWNoMkIsRUFBT2kyQixRQUFTajJCLEVBQU9DLEtBQ2hEdWQsRUFBUyxJQUFJalAsSUFBSTB3QixFQUFVM1UsR0FBUW9HLGNBQWdCOUwsR0FBU29NLFlBQVMza0MsR0FDckVnRSxFQUFXbXRCLEVBQU9udEIsVUFBWXdzQyxHQUFtQixHQUV2RCxHQUFpQixVQUFieHNDLEVBQXNCLENBQ3hCLElBQUk2dUMsRUFFSixHQUFlLFFBQVhsdkMsRUFDRixPQUFPNmxDLEdBQU85VSxFQUFTK1UsRUFBUSxDQUM3QjcrQixPQUFRLElBQ1IrVSxXQUFZLHFCQUNacmYsUUFBUyxDQUFDLEVBQ1ZxVCxXQUlKLElBQ0VrL0IsRUFyckJSLFNBQXFCQyxFQUFLQyxFQUFRNzBDLEdBQ2hDLE1BQU04MEMsRUFBUTkwQyxHQUFXQSxFQUFRa2hCLE1BQVFtWixHQUFTNkwsUUFBUWhsQixLQUNwRHBiLEVBQVdrbUMsR0FBYzRJLEdBTS9CLFFBSmU5eUMsSUFBWCt5QyxHQUF3QkMsSUFDMUJELEdBQVMsR0FHTSxTQUFiL3VDLEVBQXFCLENBQ3ZCOHVDLEVBQU05dUMsRUFBUzlILE9BQVM0MkMsRUFBSTVtQixNQUFNbG9CLEVBQVM5SCxPQUFTLEdBQUs0MkMsRUFFekQsTUFBTXZxQixFQUFRNGhCLEdBQWlCdFUsS0FBS2lkLEdBRXBDLElBQUt2cUIsRUFDSCxNQUFNLElBQUl5WSxHQUFXLGNBQWVBLEdBQVdpUyxpQkFHakQsTUFBTW4xQyxFQUFPeXFCLEVBQU0sR0FDYjJxQixFQUFXM3FCLEVBQU0sR0FDakJsaEIsRUFBT2toQixFQUFNLEdBQ2J0SixFQUFTeGYsT0FBT21ELEtBQUt1d0MsbUJBQW1COXJDLEdBQU82ckMsRUFBVyxTQUFXLFFBRTNFLEdBQUlILEVBQVEsQ0FDVixJQUFLQyxFQUNILE1BQU0sSUFBSWhTLEdBQVcsd0JBQXlCQSxHQUFXb1MsaUJBRzNELE9BQU8sSUFBSUosRUFBTSxDQUFDL3pCLEdBQVMsQ0FBQzVaLEtBQU12SCxHQUNwQyxDQUVBLE9BQU9taEIsQ0FDVCxDQUVBLE1BQU0sSUFBSStoQixHQUFXLHdCQUEwQmg5QixFQUFVZzlCLEdBQVdvUyxnQkFDdEUsQ0FtcEJ3QkMsQ0FBWTEvQixFQUFPQyxJQUFzQixTQUFqQnd5QixFQUF5QixDQUMvRGhuQixLQUFNekwsRUFBT3FWLEtBQU9yVixFQUFPcVYsSUFBSTVKLE1BRW5DLENBQUUsTUFBT2hrQixHQUNQLE1BQU00bEMsR0FBV3ArQixLQUFLeEgsRUFBSzRsQyxHQUFXMEksZ0JBQWlCLzFCLEVBQ3pELENBWUEsTUFWcUIsU0FBakJ5eUIsR0FDRnlNLEVBQWdCQSxFQUFjNXZDLFNBQVN5dUMsR0FFbENBLEdBQXlDLFNBQXJCQSxJQUN2Qm1CLEVBQWdCNVUsR0FBUVcsU0FBU2lVLEtBRVQsV0FBakJ6TSxJQUNUeU0sRUFBZ0JwWSxFQUF5QixRQUFFaVQsU0FBUzlxQyxLQUFLaXdDLElBR3BEckosR0FBTzlVLEVBQVMrVSxFQUFRLENBQzdCL2tDLEtBQU1tdUMsRUFDTmpvQyxPQUFRLElBQ1IrVSxXQUFZLEtBQ1pyZixRQUFTLElBQUkyb0MsR0FDYnQxQixVQUVKLENBRUEsSUFBOEMsSUFBMUM2OEIsR0FBbUJwcUIsUUFBUXBpQixHQUM3QixPQUFPeWxDLEVBQU8sSUFBSXpJLEdBQ2hCLHdCQUEwQmg5QixFQUMxQmc5QixHQUFXMEksZ0JBQ1gvMUIsSUFJSixNQUFNclQsRUFBVTJvQyxHQUFlcm1DLEtBQUsrUSxFQUFPclQsU0FBU2UsWUFNcERmLEVBQVFtaEIsSUFBSSxhQUFjLFNBQVd3b0IsSUFBUyxHQUU5QyxNQUFNLGlCQUFDcUosRUFBZ0IsbUJBQUVDLEdBQXNCNS9CLEVBQ3pDODJCLEVBQVU5MkIsRUFBTzgyQixRQUN2QixJQUFJK0ksRUFDQUMsRUFHSixHQUFJeFYsR0FBUXlDLG9CQUFvQmg4QixHQUFPLENBQ3JDLE1BQU1ndkMsRUFBZXB6QyxFQUFRaWxDLGVBQWUsK0JBRTVDN2dDLEVBQU95b0MsR0FBbUJ6b0MsR0FBT3pDLElBQy9CM0IsRUFBUW1oQixJQUFJeGYsRUFBWSxHQUN2QixDQUNENEosSUFBSyxTQUFTbytCLGNBQ2Q3bkMsU0FBVXN4QyxHQUFnQkEsRUFBYSxTQUFNMXpDLEdBR2pELE1BQU8sR0FBSWkrQixHQUFRQyxXQUFXeDVCLElBQVN1NUIsR0FBUWpOLFdBQVd0c0IsRUFBSzNDLGFBRzdELEdBRkF6QixFQUFRbWhCLElBQUkvYyxFQUFLM0MsZUFFWnpCLEVBQVFxekMsbUJBQ1gsSUFDRSxNQUFNbjBDLFFBQW9CODZCLEVBQXVCLFFBQUVzWixVQUFVbHZDLEVBQUt0QixXQUFXN0UsS0FBS21HLEdBQ2xGb21CLE9BQU9nTSxTQUFTdDNCLElBQWdCQSxHQUFlLEdBQUtjLEVBQVF1ekMsaUJBQWlCcjBDLEVBRS9FLENBQUUsTUFBT3k2QixHQUNULE9BRUcsR0FBSWdFLEdBQVF6QyxPQUFPOTJCLEdBQ3hCQSxFQUFLN0gsTUFBUXlELEVBQVFvbEMsZUFBZWhoQyxFQUFLVyxNQUFRLDRCQUNqRC9FLEVBQVF1ekMsaUJBQWlCbnZDLEVBQUs3SCxNQUFRLEdBQ3RDNkgsRUFBTysxQixFQUF5QixRQUFFaVQsU0FBUzlxQyxLQUFLNHBDLEdBQVc5bkMsU0FDdEQsR0FBSUEsSUFBU3U1QixHQUFRemdCLFNBQVM5WSxHQUFPLENBQzFDLEdBQUlqRixPQUFPQyxTQUFTZ0YsU0FBYyxHQUFJdTVCLEdBQVEvQyxjQUFjeDJCLEdBQzFEQSxFQUFPakYsT0FBT21ELEtBQUssSUFBSTY1QixXQUFXLzNCLFFBQzdCLEtBQUl1NUIsR0FBUW5OLFNBQVNwc0IsR0FHMUIsT0FBTytrQyxFQUFPLElBQUl6SSxHQUNoQixvRkFDQUEsR0FBVzBJLGdCQUNYLzFCLElBTEZqUCxFQUFPakYsT0FBT21ELEtBQUs4QixFQUFNLFFBTzNCLENBS0EsR0FGQXBFLEVBQVF1ekMsaUJBQWlCbnZDLEVBQUt4SSxRQUFRLEdBRWxDeVgsRUFBTzBQLGVBQWlCLEdBQUszZSxFQUFLeEksT0FBU3lYLEVBQU8wUCxjQUNwRCxPQUFPb21CLEVBQU8sSUFBSXpJLEdBQ2hCLCtDQUNBQSxHQUFXMEksZ0JBQ1gvMUIsR0FHTixDQUVBLE1BQU11NUIsRUFBZ0JqUCxHQUFRcUMsZUFBZWhnQyxFQUFRd3pDLG9CQTRCckQsSUFBSS9DLEVBZUF2ekMsRUF6Q0F5Z0MsR0FBUXZoQyxRQUFRK3RDLElBQ2xCK0ksRUFBZ0IvSSxFQUFRLEdBQ3hCZ0osRUFBa0JoSixFQUFRLElBRTFCK0ksRUFBZ0JDLEVBQWtCaEosRUFHaEMvbEMsSUFBUzR1QyxHQUFvQkUsS0FDMUJ2VixHQUFRemdCLFNBQVM5WSxLQUNwQkEsRUFBTysxQixFQUF5QixRQUFFaVQsU0FBUzlxQyxLQUFLOEIsRUFBTSxDQUFDcXZDLFlBQVksS0FHckVydkMsRUFBTysxQixFQUF5QixRQUFFdVosU0FBUyxDQUFDdHZDLEVBQU0sSUFBSTRuQyxHQUF1QixDQUMzRTdCLFFBQVN4TSxHQUFRcUMsZUFBZWtULE1BQzdCdlYsR0FBUTNPLE1BRWJna0IsR0FBb0I1dUMsRUFBS25FLEdBQUcsV0FBWWt3QyxHQUN0Qy9yQyxFQUNBK3FDLEdBQ0V2QyxFQUNBYSxHQUFxQjRCLEdBQWUyRCxJQUFtQixFQUFPLE9BT2hFMy9CLEVBQU9vOUIsT0FHVEEsR0FGaUJwOUIsRUFBT285QixLQUFLbDlCLFVBQVksSUFFdkIsS0FEREYsRUFBT285QixLQUFLQyxVQUFZLE1BSXRDRCxHQUFRNWYsRUFBT3RkLFdBR2xCazlCLEVBRm9CNWYsRUFBT3RkLFNBRU4sSUFERHNkLEVBQU82ZixVQUk3QkQsR0FBUXp3QyxFQUFROEksT0FBTyxpQkFJdkIsSUFDRTVMLEVBQU9xbEMsR0FDTDFSLEVBQU90dEIsU0FBV3N0QixFQUFPTSxPQUN6QjlkLEVBQU9uUSxPQUNQbVEsRUFBT3NnQyxrQkFDUDN5QyxRQUFRLE1BQU8sR0FDbkIsQ0FBRSxNQUFPbEcsR0FDUCxNQUFNODRDLEVBQVksSUFBSWoxQyxNQUFNN0QsRUFBSTBQLFNBSWhDLE9BSEFvcEMsRUFBVXZnQyxPQUFTQSxFQUNuQnVnQyxFQUFVdGdDLElBQU1ELEVBQU9DLElBQ3ZCc2dDLEVBQVVDLFFBQVMsRUFDWjFLLEVBQU95SyxFQUNoQixDQUVBNXpDLEVBQVFtaEIsSUFDTixrQkFDQSwyQkFBNkIwdUIsR0FBb0IsT0FBUyxLQUFLLEdBR2pFLE1BQU1qeUMsRUFBVSxDQUNkVixPQUNBbUcsT0FBUUEsRUFDUnJELFFBQVNBLEVBQVEyZ0MsU0FDakIvTixPQUFRLENBQUV6MUIsS0FBTWtXLEVBQU95Z0MsVUFBVzEyQyxNQUFPaVcsRUFBTzBnQyxZQUNoRHRELE9BQ0Evc0MsV0FDQXF0QyxTQUNBdGQsZUFBZ0IyYyxHQUNoQkMsZ0JBQWlCLENBQUMsR0FjcEIsSUFBSTJELEdBVkhyVyxHQUFRaEQsWUFBWXQ1QixLQUFZekQsRUFBUXlELE9BQVNBLEdBRTlDZ1MsRUFBTzRnQyxXQUNUcjJDLEVBQVFxMkMsV0FBYTVnQyxFQUFPNGdDLFlBRTVCcjJDLEVBQVE2RixTQUFXb3RCLEVBQU9wdEIsU0FDMUI3RixFQUFRMEYsS0FBT3V0QixFQUFPdnRCLEtBQ3RCZ3RDLEdBQVMxeUMsRUFBU3lWLEVBQU8yUCxNQUFPdGYsRUFBVyxLQUFPbXRCLEVBQU9wdEIsVUFBWW90QixFQUFPdnRCLEtBQU8sSUFBTXV0QixFQUFPdnRCLEtBQU8sSUFBTTFGLEVBQVFWLE9BSXZILE1BQU1nM0MsRUFBaUJqRSxHQUFRbnlCLEtBQUtsZ0IsRUFBUThGLFVBa001QyxHQWpNQTlGLEVBQVFpMUIsTUFBUXFoQixFQUFpQjdnQyxFQUFPMGdDLFdBQWExZ0MsRUFBT3lnQyxVQUN4RHpnQyxFQUFPMmdDLFVBQ1RBLEVBQVkzZ0MsRUFBTzJnQyxVQUNjLElBQXhCM2dDLEVBQU80YyxhQUNoQitqQixFQUFZRSxFQUFpQm5hLEVBQXdCLFFBQUlELEVBQXVCLFNBRTVFem1CLEVBQU80YyxlQUNUcnlCLEVBQVFxeUIsYUFBZTVjLEVBQU80YyxjQUU1QjVjLEVBQU9vZ0IsaUJBQ1Q3MUIsRUFBUXl5QyxnQkFBZ0JoOUIsT0FBU0EsRUFBT29nQixnQkFFMUN1Z0IsRUFBWUUsRUFBaUJsRSxHQUFjRCxJQUd6QzE4QixFQUFPMFAsZUFBaUIsRUFDMUJubEIsRUFBUW1sQixjQUFnQjFQLEVBQU8wUCxjQUcvQm5sQixFQUFRbWxCLGNBQWdCbmpCLElBR3RCeVQsRUFBTzhnQyxxQkFDVHYyQyxFQUFRdTJDLG1CQUFxQjlnQyxFQUFPOGdDLG9CQUl0Q3hnQixFQUFNcWdCLEVBQVU3d0MsUUFBUXZGLEdBQVMsU0FBd0JtSyxHQUN2RCxHQUFJNHJCLEVBQUl5Z0IsVUFBVyxPQUVuQixNQUFNQyxFQUFVLENBQUN0c0MsR0FFWHVzQyxHQUFrQnZzQyxFQUFJL0gsUUFBUSxrQkFFcEMsR0FBSWl6QyxHQUFzQkUsRUFBaUIsQ0FDekMsTUFBTW9CLEVBQWtCLElBQUl2SSxHQUF1QixDQUNqRDdCLFFBQVN4TSxHQUFRcUMsZUFBZW1ULEtBR2xDRixHQUFzQnNCLEVBQWdCdDBDLEdBQUcsV0FBWWt3QyxHQUNuRG9FLEVBQ0FwRixHQUNFbUYsRUFDQTdHLEdBQXFCNEIsR0FBZTRELElBQXFCLEVBQU0sTUFJbkVvQixFQUFRNzBDLEtBQUsrMEMsRUFDZixDQUdBLElBQUlDLEVBQWlCenNDLEVBR3JCLE1BQU0wc0MsRUFBYzFzQyxFQUFJNHJCLEtBQU9BLEVBRy9CLElBQTBCLElBQXRCdGdCLEVBQU9xaEMsWUFBd0Izc0MsRUFBSS9ILFFBQVEsb0JBTzdDLE9BSmUsU0FBWHFELEdBQXdDLE1BQW5CMEUsRUFBSW9yQixtQkFDcEJwckIsRUFBSS9ILFFBQVEscUJBR1orSCxFQUFJL0gsUUFBUSxxQkFBdUIsSUFBSTRCLGVBRWhELElBQUssT0FDTCxJQUFLLFNBQ0wsSUFBSyxXQUNMLElBQUssYUFFSHl5QyxFQUFRNzBDLEtBQUswNkIsRUFBdUIsUUFBRXlhLFlBQVlyRixZQUczQ3ZuQyxFQUFJL0gsUUFBUSxvQkFDbkIsTUFDRixJQUFLLFVBQ0hxMEMsRUFBUTcwQyxLQUFLLElBQUkrdEMsSUFHakI4RyxFQUFRNzBDLEtBQUswNkIsRUFBdUIsUUFBRXlhLFlBQVlyRixZQUczQ3ZuQyxFQUFJL0gsUUFBUSxvQkFDbkIsTUFDRixJQUFLLEtBQ0M2dkMsS0FDRndFLEVBQVE3MEMsS0FBSzA2QixFQUF1QixRQUFFNFYsdUJBQXVCSCxZQUN0RDVuQyxFQUFJL0gsUUFBUSxxQkFLekJ3MEMsRUFBaUJILEVBQVF6NEMsT0FBUyxFQUFJdStCLEVBQXlCLFFBQUV1WixTQUFTVyxFQUFTMVcsR0FBUTNPLE1BQVFxbEIsRUFBUSxHQUUzRyxNQUFNTyxFQUFlemEsRUFBeUIsUUFBRWpILFNBQVNzaEIsR0FBZ0IsS0FDdkVJLElBQ0E5QyxHQUFZLElBR1I1eEMsRUFBVyxDQUNmb0ssT0FBUXZDLEVBQUlvckIsV0FDWjlULFdBQVl0WCxFQUFJOHNDLGNBQ2hCNzBDLFFBQVMsSUFBSTJvQyxHQUFlNWdDLEVBQUkvSCxTQUNoQ3FULFNBQ0FsUSxRQUFTc3hDLEdBR1gsR0FBcUIsV0FBakIzTyxFQUNGNWxDLEVBQVNrRSxLQUFPb3dDLEVBQ2hCdEwsR0FBTzlVLEVBQVMrVSxFQUFRanBDLE9BQ25CLENBQ0wsTUFBTTQwQyxFQUFpQixHQUN2QixJQUFJQyxFQUFxQixFQUV6QlAsRUFBZXYwQyxHQUFHLFFBQVEsU0FBMEJrckMsR0FDbEQySixFQUFldDFDLEtBQUsyckMsR0FDcEI0SixHQUFzQjVKLEVBQU12dkMsT0FHeEJ5WCxFQUFPOHlCLGtCQUFvQixHQUFLNE8sRUFBcUIxaEMsRUFBTzh5QixtQkFFOURoRCxHQUFXLEVBQ1hxUixFQUFlM3JDLFVBQ2ZzZ0MsRUFBTyxJQUFJekksR0FBVyw0QkFBOEJydEIsRUFBTzh5QixpQkFBbUIsWUFDNUV6RixHQUFXc0YsaUJBQWtCM3lCLEVBQVFvaEMsSUFFM0MsSUFFQUQsRUFBZXYwQyxHQUFHLFdBQVcsV0FDM0IsR0FBSWtqQyxFQUNGLE9BR0YsTUFBTXJvQyxFQUFNLElBQUk0bEMsR0FDZCw0QkFBOEJydEIsRUFBTzh5QixpQkFBbUIsWUFDeER6RixHQUFXc0YsaUJBQ1gzeUIsRUFDQW9oQyxHQUVGRCxFQUFlM3JDLFFBQVEvTixHQUN2QnF1QyxFQUFPcnVDLEVBQ1QsSUFFQTA1QyxFQUFldjBDLEdBQUcsU0FBUyxTQUEyQm5GLEdBQ2hENjRCLEVBQUl5Z0IsV0FDUmpMLEVBQU96SSxHQUFXcCtCLEtBQUt4SCxFQUFLLEtBQU11WSxFQUFRb2hDLEdBQzVDLElBRUFELEVBQWV2MEMsR0FBRyxPQUFPLFdBQ3ZCLElBQ0UsSUFBSSswQyxFQUF5QyxJQUExQkYsRUFBZWw1QyxPQUFlazVDLEVBQWUsR0FBSzMxQyxPQUFPdUIsT0FBT28wQyxHQUM5RCxnQkFBakJoUCxJQUNGa1AsRUFBZUEsRUFBYXJ5QyxTQUFTeXVDLEdBQ2hDQSxHQUF5QyxTQUFyQkEsSUFDdkI0RCxFQUFlclgsR0FBUVcsU0FBUzBXLEtBR3BDOTBDLEVBQVNrRSxLQUFPNHdDLENBQ2xCLENBQUUsTUFBT2w2QyxHQUNQLE9BQU9xdUMsRUFBT3pJLEdBQVdwK0IsS0FBS3hILEVBQUssS0FBTXVZLEVBQVFuVCxFQUFTaUQsUUFBU2pELEdBQ3JFLENBQ0FncEMsR0FBTzlVLEVBQVMrVSxFQUFRanBDLEVBQzFCLEdBQ0YsQ0FFQTB4QyxFQUFRbmYsS0FBSyxTQUFTMzNCLElBQ2YwNUMsRUFBZUosWUFDbEJJLEVBQWV4d0MsS0FBSyxRQUFTbEosR0FDN0IwNUMsRUFBZTNyQyxVQUNqQixHQUVKLElBRUErb0MsRUFBUW5mLEtBQUssU0FBUzMzQixJQUNwQnF1QyxFQUFPcnVDLEdBQ1A2NEIsRUFBSTlxQixRQUFRL04sRUFBSSxJQUlsQjY0QixFQUFJMXpCLEdBQUcsU0FBUyxTQUE0Qm5GLEdBRzFDcXVDLEVBQU96SSxHQUFXcCtCLEtBQUt4SCxFQUFLLEtBQU11WSxFQUFRc2dCLEdBQzVDLElBR0FBLEVBQUkxekIsR0FBRyxVQUFVLFNBQTZCa3lCLEdBRTVDQSxFQUFPOGlCLGNBQWEsRUFBTSxJQUM1QixJQUdJNWhDLEVBQU91UCxRQUFTLENBRWxCLE1BQU1BLEVBQVUwRyxTQUFTalcsRUFBT3VQLFFBQVMsSUFFekMsR0FBSTRILE9BQU8wcUIsTUFBTXR5QixHQVFmLFlBUEF1bUIsRUFBTyxJQUFJekksR0FDVCxnREFDQUEsR0FBV3lVLHFCQUNYOWhDLEVBQ0FzZ0IsSUFXSkEsRUFBSXY0QixXQUFXd25CLEdBQVMsV0FDdEIsR0FBSXl1QixFQUFRLE9BQ1osSUFBSStELEVBQXNCL2hDLEVBQU91UCxRQUFVLGNBQWdCdlAsRUFBT3VQLFFBQVUsY0FBZ0IsbUJBQzVGLE1BQU1raUIsRUFBZXp4QixFQUFPeXhCLGNBQWdCdEIsR0FDeENud0IsRUFBTytoQyxzQkFDVEEsRUFBc0IvaEMsRUFBTytoQyxxQkFFL0JqTSxFQUFPLElBQUl6SSxHQUNUMFUsRUFDQXRRLEVBQWFuQixvQkFBc0JqRCxHQUFXMlUsVUFBWTNVLEdBQVc0VSxhQUNyRWppQyxFQUNBc2dCLElBRUZyNEIsR0FDRixHQUNGLENBSUEsR0FBSXFpQyxHQUFRemdCLFNBQVM5WSxHQUFPLENBQzFCLElBQUlteEMsR0FBUSxFQUNSQyxHQUFVLEVBRWRweEMsRUFBS25FLEdBQUcsT0FBTyxLQUNiczFDLEdBQVEsQ0FBSSxJQUdkbnhDLEVBQUtxdUIsS0FBSyxTQUFTMzNCLElBQ2pCMDZDLEdBQVUsRUFDVjdoQixFQUFJOXFCLFFBQVEvTixFQUFJLElBR2xCc0osRUFBS25FLEdBQUcsU0FBUyxLQUNWczFDLEdBQVVDLEdBQ2JsNkMsRUFBTSxJQUFJMHRDLEdBQWMsa0NBQW1DMzFCLEVBQVFzZ0IsR0FDckUsSUFHRnZ2QixFQUFLUixLQUFLK3ZCLEVBQ1osTUFDRUEsRUFBSWgwQixJQUFJeUUsRUFFWixFQTlpQk8sSUFBSXF4QyxTQUFRLENBQUNyaEIsRUFBUytVLEtBQzNCLElBQUlnSSxFQUNBRSxFQUVKLE1BQU1qUyxFQUFPLENBQUM1Z0MsRUFBTzJ6QyxLQUNmZCxJQUNKQSxHQUFTLEVBQ1RGLEdBQVVBLEVBQU8zeUMsRUFBTzJ6QyxHQUFXLEVBUS9CdUQsRUFBV3Y2QixJQUNmaWtCLEVBQUtqa0IsR0FBUSxHQUNiZ3VCLEVBQU9odUIsRUFBTyxFQUdoQisxQixHQVZrQjF5QyxJQUNoQjRnQyxFQUFLNWdDLEdBQ0w0MUIsRUFBUTUxQixFQUFNLEdBUVFrM0MsR0FBVUMsR0FBbUJ4RSxFQUFTd0UsSUFBZ0JsVixNQUFNaVYsRUFBUSxJQXJCOUUsSUFBQ3hFLENBZ2pCbkIsRUFFTTBFLEdBQWtCM2QsR0FBUytMLHNCQUkvQixXQUNFLE1BQU02UixFQUFPLGtCQUFrQi8zQixLQUFLK0ssVUFBVUMsV0FDeENndEIsRUFBaUIvc0IsU0FBU2d0QixjQUFjLEtBQzlDLElBQUlDLEVBUUosU0FBU0MsRUFBVzNpQyxHQUNsQixJQUFJd2QsRUFBT3hkLEVBV1gsT0FUSXVpQyxJQUVGQyxFQUFlSSxhQUFhLE9BQVFwbEIsR0FDcENBLEVBQU9nbEIsRUFBZWhsQixNQUd4QmdsQixFQUFlSSxhQUFhLE9BQVFwbEIsR0FHN0IsQ0FDTEEsS0FBTWdsQixFQUFlaGxCLEtBQ3JCcHRCLFNBQVVveUMsRUFBZXB5QyxTQUFXb3lDLEVBQWVweUMsU0FBUzFDLFFBQVEsS0FBTSxJQUFNLEdBQ2hGd0MsS0FBTXN5QyxFQUFldHlDLEtBQ3JCMnRCLE9BQVEya0IsRUFBZTNrQixPQUFTMmtCLEVBQWUza0IsT0FBT253QixRQUFRLE1BQU8sSUFBTSxHQUMzRTZxQixLQUFNaXFCLEVBQWVqcUIsS0FBT2lxQixFQUFlanFCLEtBQUs3cUIsUUFBUSxLQUFNLElBQU0sR0FDcEV5QyxTQUFVcXlDLEVBQWVyeUMsU0FDekJILEtBQU13eUMsRUFBZXh5QyxLQUNyQkMsU0FBaUQsTUFBdEN1eUMsRUFBZXZ5QyxTQUFTb2lCLE9BQU8sR0FDeENtd0IsRUFBZXZ5QyxTQUNmLElBQU11eUMsRUFBZXZ5QyxTQUUzQixDQVVBLE9BUkF5eUMsRUFBWUMsRUFBV2h4QixPQUFPb08sU0FBU3ZDLE1BUWhDLFNBQXlCcWxCLEdBQzlCLE1BQU10bEIsRUFBVThNLEdBQVFuTixTQUFTMmxCLEdBQWVGLEVBQVdFLEdBQWNBLEVBQ3pFLE9BQVF0bEIsRUFBT250QixXQUFhc3lDLEVBQVV0eUMsVUFDbENtdEIsRUFBT3J0QixPQUFTd3lDLEVBQVV4eUMsSUFDaEMsQ0FDRCxDQWxERCxHQXNEUyxXQUNMLE9BQU8sQ0FDVCxFQUdFNHlDLEdBQVVuZSxHQUFTK0wsc0JBR3ZCLENBQ0UsS0FBQTVjLENBQU1ubUIsRUFBTXpDLEVBQU82M0MsRUFBU241QyxFQUFNbUssRUFBUWl2QyxHQUN4QyxNQUFNQyxFQUFTLENBQUN0MUMsRUFBTyxJQUFNNFosbUJBQW1CcmMsSUFFaERtL0IsR0FBUTlDLFNBQVN3YixJQUFZRSxFQUFPLzJDLEtBQUssV0FBYSxJQUFJb0YsS0FBS3l4QyxHQUFTRyxlQUV4RTdZLEdBQVFuTixTQUFTdHpCLElBQVNxNUMsRUFBTy8yQyxLQUFLLFFBQVV0QyxHQUVoRHlnQyxHQUFRbk4sU0FBU25wQixJQUFXa3ZDLEVBQU8vMkMsS0FBSyxVQUFZNkgsSUFFekMsSUFBWGl2QyxHQUFtQkMsRUFBTy8yQyxLQUFLLFVBRS9CdXBCLFNBQVN3dEIsT0FBU0EsRUFBTzMxQyxLQUFLLEtBQ2hDLEVBRUEsSUFBQTYxQyxDQUFLeDFDLEdBQ0gsTUFBTWduQixFQUFRYyxTQUFTd3RCLE9BQU90dUIsTUFBTSxJQUFJc0IsT0FBTyxhQUFldG9CLEVBQU8sY0FDckUsT0FBUWduQixFQUFRNHFCLG1CQUFtQjVxQixFQUFNLElBQU0sSUFDakQsRUFFQSxNQUFBeXVCLENBQU96MUMsR0FDTGxILEtBQUtxdEIsTUFBTW5tQixFQUFNLEdBQUkyRCxLQUFLa21DLE1BQVEsTUFDcEMsR0FNRixDQUNFLEtBQUExakIsR0FBUyxFQUNUcXZCLEtBQUksSUFDSyxLQUVULE1BQUFDLEdBQVUsR0FHUkMsR0FBbUJuYyxHQUFVQSxhQUFpQm1PLEdBQWlCLElBQUtuTyxHQUFVQSxFQVdwRixTQUFTb2MsR0FBWUMsRUFBU0MsR0FFNUJBLEVBQVVBLEdBQVcsQ0FBQyxFQUN0QixNQUFNempDLEVBQVMsQ0FBQyxFQUVoQixTQUFTMGpDLEVBQWUvbEIsRUFBUTNELEVBQVE4USxHQUN0QyxPQUFJUixHQUFRNUMsY0FBYy9KLElBQVcyTSxHQUFRNUMsY0FBYzFOLEdBQ2xEc1EsR0FBUU8sTUFBTWpnQyxLQUFLLENBQUNrZ0MsWUFBV25OLEVBQVEzRCxHQUNyQ3NRLEdBQVE1QyxjQUFjMU4sR0FDeEJzUSxHQUFRTyxNQUFNLENBQUMsRUFBRzdRLEdBQ2hCc1EsR0FBUXZoQyxRQUFRaXhCLEdBQ2xCQSxFQUFPekIsUUFFVHlCLENBQ1QsQ0FHQSxTQUFTMnBCLEVBQW9CdjZDLEVBQUdDLEVBQUd5aEMsR0FDakMsT0FBS1IsR0FBUWhELFlBQVlqK0IsR0FFYmloQyxHQUFRaEQsWUFBWWwrQixRQUF6QixFQUNFczZDLE9BQWVyM0MsRUFBV2pELEVBQUcwaEMsR0FGN0I0WSxFQUFldDZDLEVBQUdDLEVBQUd5aEMsRUFJaEMsQ0FHQSxTQUFTOFksRUFBaUJ4NkMsRUFBR0MsR0FDM0IsSUFBS2loQyxHQUFRaEQsWUFBWWorQixHQUN2QixPQUFPcTZDLE9BQWVyM0MsRUFBV2hELEVBRXJDLENBR0EsU0FBU3c2QyxFQUFpQno2QyxFQUFHQyxHQUMzQixPQUFLaWhDLEdBQVFoRCxZQUFZaitCLEdBRWJpaEMsR0FBUWhELFlBQVlsK0IsUUFBekIsRUFDRXM2QyxPQUFlcjNDLEVBQVdqRCxHQUYxQnM2QyxPQUFlcjNDLEVBQVdoRCxFQUlyQyxDQUdBLFNBQVN5NkMsRUFBZ0IxNkMsRUFBR0MsRUFBR2lFLEdBQzdCLE9BQUlBLEtBQVFtMkMsRUFDSEMsRUFBZXQ2QyxFQUFHQyxHQUNoQmlFLEtBQVFrMkMsRUFDVkUsT0FBZXIzQyxFQUFXakQsUUFENUIsQ0FHVCxDQUVBLE1BQU0yNkMsRUFBVyxDQUNmOWpDLElBQUsyakMsRUFDTDV6QyxPQUFRNHpDLEVBQ1I3eUMsS0FBTTZ5QyxFQUNOM04sUUFBUzROLEVBQ1RsUyxpQkFBa0JrUyxFQUNsQnRSLGtCQUFtQnNSLEVBQ25CdkQsaUJBQWtCdUQsRUFDbEJ0MEIsUUFBU3MwQixFQUNURyxlQUFnQkgsRUFDaEJJLGdCQUFpQkosRUFDakJLLGNBQWVMLEVBQ2ZuUyxRQUFTbVMsRUFDVHBSLGFBQWNvUixFQUNkalIsZUFBZ0JpUixFQUNoQmhSLGVBQWdCZ1IsRUFDaEJsRSxpQkFBa0JrRSxFQUNsQmpFLG1CQUFvQmlFLEVBQ3BCeEMsV0FBWXdDLEVBQ1ovUSxpQkFBa0IrUSxFQUNsQm4wQixjQUFlbTBCLEVBQ2Z6akIsZUFBZ0J5akIsRUFDaEJsRCxVQUFXa0QsRUFDWHBELFVBQVdvRCxFQUNYbkQsV0FBWW1ELEVBQ1puRixZQUFhbUYsRUFDYmpELFdBQVlpRCxFQUNaOUYsaUJBQWtCOEYsRUFDbEI5USxlQUFnQitRLEVBQ2hCbjNDLFFBQVMsQ0FBQ3ZELEVBQUdDLElBQU1zNkMsRUFBb0JMLEdBQWdCbDZDLEdBQUlrNkMsR0FBZ0JqNkMsSUFBSSxJQVNqRixPQU5BaWhDLEdBQVFsakMsUUFBUUYsT0FBT0MsS0FBS0QsT0FBT29MLE9BQU8sQ0FBQyxFQUFHa3hDLEVBQVNDLEtBQVcsU0FBNEJuMkMsR0FDNUYsTUFBTXU5QixFQUFRa1osRUFBU3oyQyxJQUFTcTJDLEVBQzFCUSxFQUFjdFosRUFBTTJZLEVBQVFsMkMsR0FBT20yQyxFQUFRbjJDLEdBQU9BLEdBQ3ZEZzlCLEdBQVFoRCxZQUFZNmMsSUFBZ0J0WixJQUFVaVosSUFBcUI5akMsRUFBTzFTLEdBQVE2MkMsRUFDckYsSUFFT25rQyxDQUNULENBRUEsTUFBTW9rQyxHQUFpQnBrQyxJQUNyQixNQUFNcWtDLEVBQVlkLEdBQVksQ0FBQyxFQUFHdmpDLEdBRWxDLElBYUk5UyxHQWJBLEtBQUM2RCxFQUFJLGNBQUVtekMsRUFBYSxlQUFFclIsRUFBYyxlQUFFRCxFQUFjLFFBQUVqbUMsRUFBTyxLQUFFeXdDLEdBQVFpSCxFQWUzRSxHQWJBQSxFQUFVMTNDLFFBQVVBLEVBQVUyb0MsR0FBZXJtQyxLQUFLdEMsR0FFbEQwM0MsRUFBVXBrQyxJQUFNaXZCLEdBQVM4RyxHQUFjcU8sRUFBVXBPLFFBQVNvTyxFQUFVcGtDLEtBQU1ELEVBQU9uUSxPQUFRbVEsRUFBT3NnQyxrQkFHNUZsRCxHQUNGendDLEVBQVFtaEIsSUFBSSxnQkFBaUIsU0FDM0J3MkIsTUFBTWxILEVBQUtsOUIsVUFBWSxJQUFNLEtBQU9rOUIsRUFBS0MsU0FBV2tILFNBQVMvOEIsbUJBQW1CNDFCLEVBQUtDLFdBQWEsTUFNbEcvUyxHQUFRQyxXQUFXeDVCLEdBQ3JCLEdBQUk2ekIsR0FBUytMLHVCQUF5Qi9MLEdBQVNpTSwrQkFDN0Nsa0MsRUFBUW9sQyxvQkFBZTFsQyxRQUNsQixJQUFpRCxLQUE1Q2EsRUFBY1AsRUFBUWlsQyxrQkFBNkIsQ0FFN0QsTUFBT2xnQyxLQUFTd2lDLEdBQVVobkMsRUFBY0EsRUFBWXVoQixNQUFNLEtBQUs1YSxLQUFJbzJCLEdBQVNBLEVBQU1uUSxTQUFRdE4sT0FBTzJNLFNBQVcsR0FDNUd4c0IsRUFBUW9sQyxlQUFlLENBQUNyZ0MsR0FBUSx5QkFBMEJ3aUMsR0FBUTNtQyxLQUFLLE1BQ3pFLENBT0YsR0FBSXEzQixHQUFTK0wsd0JBQ1h1VCxHQUFpQjVaLEdBQVFqTixXQUFXNm1CLEtBQW1CQSxFQUFnQkEsRUFBY0csSUFFakZILElBQW9DLElBQWxCQSxHQUEyQjNCLEdBQWdCOEIsRUFBVXBrQyxNQUFPLENBRWhGLE1BQU11a0MsRUFBWTNSLEdBQWtCRCxHQUFrQm1RLEdBQVFLLEtBQUt4USxHQUUvRDRSLEdBQ0Y3M0MsRUFBUW1oQixJQUFJK2tCLEVBQWdCMlIsRUFFaEMsQ0FHRixPQUFPSCxDQUFTLEVBS1pJLEdBRmtELG9CQUFuQkMsZ0JBRU8sU0FBVTFrQyxHQUNwRCxPQUFPLElBQUlvaUMsU0FBUSxTQUE0QnJoQixFQUFTK1UsR0FDdEQsTUFBTTZPLEVBQVVQLEdBQWNwa0MsR0FDOUIsSUFBSTRrQyxFQUFjRCxFQUFRNXpDLEtBQzFCLE1BQU04ZSxFQUFpQnlsQixHQUFlcm1DLEtBQUswMUMsRUFBUWg0QyxTQUFTZSxZQUM1RCxJQUNJbTNDLEVBQ0FDLEVBQWlCQyxFQUNqQkMsRUFBYUMsR0FIYixhQUFDeFMsRUFBWSxpQkFBRWtOLEVBQWdCLG1CQUFFQyxHQUFzQitFLEVBSzNELFNBQVM1WSxJQUNQaVosR0FBZUEsSUFDZkMsR0FBaUJBLElBRWpCTixFQUFRakcsYUFBZWlHLEVBQVFqRyxZQUFZdDNCLFlBQVl5OUIsR0FFdkRGLEVBQVFoRyxRQUFVZ0csRUFBUWhHLE9BQU9DLG9CQUFvQixRQUFTaUcsRUFDaEUsQ0FFQSxJQUFJLzBDLEVBQVUsSUFBSTQwQyxlQU9sQixTQUFTUSxJQUNQLElBQUtwMUMsRUFDSCxPQUdGLE1BQU1xMUMsRUFBa0I3UCxHQUFlcm1DLEtBQ3JDLDBCQUEyQmEsR0FBV0EsRUFBUXMxQyx5QkFhaER2UCxJQUFPLFNBQWtCMXFDLEdBQ3ZCNDFCLEVBQVE1MUIsR0FDUjRnQyxHQUNGLElBQUcsU0FBaUJ0a0MsR0FDbEJxdUMsRUFBT3J1QyxHQUNQc2tDLEdBQ0YsR0FmaUIsQ0FDZmg3QixLQUhvQjBoQyxHQUFpQyxTQUFqQkEsR0FBNEMsU0FBakJBLEVBQ3hDM2lDLEVBQVFqRCxTQUEvQmlELEVBQVF1MUMsYUFHUnB1QyxPQUFRbkgsRUFBUW1ILE9BQ2hCK1UsV0FBWWxjLEVBQVFrYyxXQUNwQnJmLFFBQVN3NEMsRUFDVG5sQyxTQUNBbFEsWUFZRkEsRUFBVSxJQUNaLENBbENBQSxFQUFRdzFDLEtBQUtYLEVBQVEzMEMsT0FBTzBwQixjQUFlaXJCLEVBQVExa0MsS0FBSyxHQUd4RG5RLEVBQVF5ZixRQUFVbzFCLEVBQVFwMUIsUUFpQ3RCLGNBQWV6ZixFQUVqQkEsRUFBUW8xQyxVQUFZQSxFQUdwQnAxQyxFQUFReTFDLG1CQUFxQixXQUN0QnoxQyxHQUFrQyxJQUF2QkEsRUFBUTAxQyxhQVFELElBQW5CMTFDLEVBQVFtSCxRQUFrQm5ILEVBQVEyMUMsYUFBd0QsSUFBekMzMUMsRUFBUTIxQyxZQUFZaHpCLFFBQVEsV0FLakYxcUIsV0FBV205QyxFQUNiLEVBSUZwMUMsRUFBUTQxQyxRQUFVLFdBQ1g1MUMsSUFJTGdtQyxFQUFPLElBQUl6SSxHQUFXLGtCQUFtQkEsR0FBVzRVLGFBQWNqaUMsRUFBUWxRLElBRzFFQSxFQUFVLEtBQ1osRUFHQUEsRUFBUTYxQyxRQUFVLFdBR2hCN1AsRUFBTyxJQUFJekksR0FBVyxnQkFBaUJBLEdBQVd1WSxZQUFhNWxDLEVBQVFsUSxJQUd2RUEsRUFBVSxJQUNaLEVBR0FBLEVBQVErMUMsVUFBWSxXQUNsQixJQUFJOUQsRUFBc0I0QyxFQUFRcDFCLFFBQVUsY0FBZ0JvMUIsRUFBUXAxQixRQUFVLGNBQWdCLG1CQUM5RixNQUFNa2lCLEVBQWVrVCxFQUFRbFQsY0FBZ0J0QixHQUN6Q3dVLEVBQVE1QyxzQkFDVkEsRUFBc0I0QyxFQUFRNUMscUJBRWhDak0sRUFBTyxJQUFJekksR0FDVDBVLEVBQ0F0USxFQUFhbkIsb0JBQXNCakQsR0FBVzJVLFVBQVkzVSxHQUFXNFUsYUFDckVqaUMsRUFDQWxRLElBR0ZBLEVBQVUsSUFDWixPQUdnQnpELElBQWhCdTRDLEdBQTZCLzBCLEVBQWVraUIsZUFBZSxNQUd2RCxxQkFBc0JqaUMsR0FDeEJ3NkIsR0FBUWxqQyxRQUFReW9CLEVBQWV5ZCxVQUFVLFNBQTBCNVYsRUFBSzN3QixHQUN0RStJLEVBQVFnMkMsaUJBQWlCLytDLEVBQUsyd0IsRUFDaEMsSUFJRzRTLEdBQVFoRCxZQUFZcWQsRUFBUVYsbUJBQy9CbjBDLEVBQVFtMEMsa0JBQW9CVSxFQUFRVixpQkFJbEN4UixHQUFpQyxTQUFqQkEsSUFDbEIzaUMsRUFBUTJpQyxhQUFla1MsRUFBUWxTLGNBSTdCbU4sS0FDQW1GLEVBQW1CRSxHQUFpQjdLLEdBQXFCd0YsR0FBb0IsR0FDL0U5dkMsRUFBUXE2QixpQkFBaUIsV0FBWTRhLElBSW5DcEYsR0FBb0I3dkMsRUFBUWkyQyxVQUM1QmpCLEVBQWlCRSxHQUFlNUssR0FBcUJ1RixHQUV2RDd2QyxFQUFRaTJDLE9BQU81YixpQkFBaUIsV0FBWTJhLEdBRTVDaDFDLEVBQVFpMkMsT0FBTzViLGlCQUFpQixVQUFXNmEsS0FHekNMLEVBQVFqRyxhQUFlaUcsRUFBUWhHLFVBR2pDa0csRUFBYW1CLElBQ05sMkMsSUFHTGdtQyxHQUFRa1EsR0FBVUEsRUFBT3QwQyxLQUFPLElBQUlpa0MsR0FBYyxLQUFNMzFCLEVBQVFsUSxHQUFXazJDLEdBQzNFbDJDLEVBQVE3SCxRQUNSNkgsRUFBVSxLQUFJLEVBR2hCNjBDLEVBQVFqRyxhQUFlaUcsRUFBUWpHLFlBQVlLLFVBQVU4RixHQUNqREYsRUFBUWhHLFNBQ1ZnRyxFQUFRaEcsT0FBT0ssUUFBVTZGLElBQWVGLEVBQVFoRyxPQUFPeFUsaUJBQWlCLFFBQVMwYSxLQUlyRixNQUFNeDBDLEVBQVdrbUMsR0FBY29PLEVBQVExa0MsS0FFbkM1UCxJQUFzRCxJQUExQ3UwQixHQUFTakksVUFBVWxLLFFBQVFwaUIsR0FDekN5bEMsRUFBTyxJQUFJekksR0FBVyx3QkFBMEJoOUIsRUFBVyxJQUFLZzlCLEdBQVcwSSxnQkFBaUIvMUIsSUFNOUZsUSxFQUFRbTJDLEtBQUtyQixHQUFlLEtBQzlCLEdBQ0YsRUE0Q01zQixHQTFDaUIsQ0FBQ0MsRUFBUzUyQixLQUMvQixJQUVJeXZCLEVBRkFvSCxFQUFhLElBQUlDLGdCQUlyQixNQUFNWCxFQUFVLFNBQVVNLEdBQ3hCLElBQUtoSCxFQUFTLENBQ1pBLEdBQVUsRUFDVjUzQixJQUNBLE1BQU0zZixFQUFNdStDLGFBQWtCMTZDLE1BQVEwNkMsRUFBU3QvQyxLQUFLb2hCLE9BQ3BEcytCLEVBQVduK0MsTUFBTVIsYUFBZTRsQyxHQUFhNWxDLEVBQU0sSUFBSWt1QyxHQUFjbHVDLGFBQWU2RCxNQUFRN0QsRUFBSTBQLFFBQVUxUCxHQUM1RyxDQUNGLEVBRUEsSUFBSTB6QyxFQUFRNXJCLEdBQVd4bkIsWUFBVyxLQUNoQzI5QyxFQUFRLElBQUlyWSxHQUFXLFdBQVc5ZCxtQkFBMEI4ZCxHQUFXMlUsV0FBVyxHQUNqRnp5QixHQUVILE1BQU1uSSxFQUFjLEtBQ2QrK0IsSUFDRmhMLEdBQVNqYyxhQUFhaWMsR0FDdEJBLEVBQVEsS0FDUmdMLEVBQVEvK0MsU0FBUXUzQyxJQUNkQSxJQUNDQSxFQUFPQyxvQkFBc0JELEVBQU9DLG9CQUFvQixRQUFTOEcsR0FBVy9HLEVBQU92M0IsWUFBWXMrQixHQUFTLElBRTNHUyxFQUFVLEtBQ1osRUFHRkEsRUFBUS8rQyxTQUFTdTNDLEdBQVdBLEdBQVVBLEVBQU94VSxrQkFBb0J3VSxFQUFPeFUsaUJBQWlCLFFBQVN1YixLQUVsRyxNQUFNLE9BQUMvRyxHQUFVeUgsRUFJakIsT0FGQXpILEVBQU92M0IsWUFBY0EsRUFFZCxDQUFDdTNCLEVBQVEsS0FDZHhELEdBQVNqYyxhQUFhaWMsR0FDdEJBLEVBQVEsSUFBSSxFQUNaLEVBS0VtTCxHQUFjLFVBQVd4TyxFQUFPZixHQUNwQyxJQUFJL25DLEVBQU04b0MsRUFBTTlyQyxXQUVoQixJQUFLK3FDLEdBQWEvbkMsRUFBTStuQyxFQUV0QixrQkFETWUsR0FJUixJQUNJeHJDLEVBREFrMUIsRUFBTSxFQUdWLEtBQU9BLEVBQU14eUIsR0FDWDFDLEVBQU1rMUIsRUFBTXVWLFFBQ05lLEVBQU12ZixNQUFNaUosRUFBS2wxQixHQUN2QmsxQixFQUFNbDFCLENBRVYsRUFRTWk2QyxHQUFjLENBQUMzN0IsRUFBUW1zQixFQUFXeVAsRUFBWUMsRUFBVS8xQixLQUM1RCxNQUFNdm9CLEVBUFVILGdCQUFpQjArQyxFQUFVM1AsRUFBV3JtQixHQUN0RCxVQUFXLE1BQU1vbkIsS0FBUzRPLFFBQ2pCSixHQUFZNWIsWUFBWUMsT0FBT21OLEdBQVNBLFFBQWVwbkIsRUFBT3VCLE9BQU82bEIsSUFBVWYsRUFFMUYsQ0FHbUI0UCxDQUFVLzdCLEVBQVFtc0IsRUFBV3JtQixHQUU5QyxJQUNJcWIsRUFEQTJMLEVBQVEsRUFFUmtQLEVBQWF0Z0IsSUFDVnlGLElBQ0hBLEdBQU8sRUFDUDBhLEdBQVlBLEVBQVNuZ0IsR0FDdkIsRUFHRixPQUFPLElBQUloWixlQUFlLENBQ3hCLFVBQU11NUIsQ0FBS1QsR0FDVCxJQUNFLE1BQU0sS0FBQ3JhLEVBQUksTUFBRTVnQyxTQUFlaEQsRUFBUzhGLE9BRXJDLEdBQUk4OUIsRUFHRixPQUZENmEsU0FDQ1IsRUFBV1UsUUFJYixJQUFJOTNDLEVBQU03RCxFQUFNYSxXQUNoQixHQUFJdzZDLEVBQVksQ0FDZCxJQUFJTyxFQUFjclAsR0FBUzFvQyxFQUMzQnczQyxFQUFXTyxFQUNiLENBQ0FYLEVBQVdZLFFBQVEsSUFBSWxlLFdBQVczOUIsR0FDcEMsQ0FBRSxNQUFPMUQsR0FFUCxNQURBbS9DLEVBQVVuL0MsR0FDSkEsQ0FDUixDQUNGLEVBQ0F1K0MsT0FBT2wrQixJQUNMOCtCLEVBQVU5K0IsR0FDSDNmLEVBQVM4K0MsV0FFakIsQ0FDREMsY0FBZSxHQUNoQixFQUdHQyxHQUFvQyxtQkFBVkMsT0FBMkMsbUJBQVo5M0IsU0FBOEMsbUJBQWIrM0IsU0FDMUZDLEdBQTRCSCxJQUE4QyxtQkFBbkI3NUIsZUFHdkRpNkIsR0FBYUosS0FBNEMsbUJBQWhCbE8sYUFDekN6SixHQUEwQyxJQUFJeUosWUFBakNwZixHQUFRMlYsR0FBUTllLE9BQU9tSixJQUN0Qzd4QixNQUFPNnhCLEdBQVEsSUFBSWlQLGlCQUFpQixJQUFJdWUsU0FBU3h0QixHQUFLaWYsZ0JBRHRELElBQUV0SixHQUlOLE1BQU0va0IsR0FBTyxDQUFDOWlCLEtBQU95c0IsS0FDbkIsSUFDRSxRQUFTenNCLEtBQU15c0IsRUFDakIsQ0FBRSxNQUFPa1MsR0FDUCxPQUFPLENBQ1QsR0FHSWtoQixHQUF3QkYsSUFBNkI3OEIsSUFBSyxLQUM5RCxJQUFJZzlCLEdBQWlCLEVBRXJCLE1BQU1DLEVBQWlCLElBQUlwNEIsUUFBUXNWLEdBQVNvTSxPQUFRLENBQ2xEdDlCLEtBQU0sSUFBSTRaLGVBQ1Z0ZCxPQUFRLE9BQ1IsVUFBSTIzQyxHQUVGLE9BREFGLEdBQWlCLEVBQ1YsTUFDVCxJQUNDOTZDLFFBQVE4VyxJQUFJLGdCQUVmLE9BQU9na0MsSUFBbUJDLENBQWMsSUFLcENFLEdBQXlCTixJQUM3Qjc4QixJQUFLLElBQU02ZixHQUFRdEMsaUJBQWlCLElBQUlxZixTQUFTLElBQUkzekMsUUFHakRtMEMsR0FBWSxDQUNoQmo5QixPQUFRZzlCLElBQTBCLENBQUVsekMsR0FBUUEsRUFBSWhCLE9BRzdCLElBQUVnQixHQUF2Qnl5QyxLQUF1Qnp5QyxHQU9wQixJQUFJMnlDLFNBTkwsQ0FBQyxPQUFRLGNBQWUsT0FBUSxXQUFZLFVBQVVqZ0QsU0FBUXNLLEtBQzNEbTJDLEdBQVVuMkMsS0FBVW0yQyxHQUFVbjJDLEdBQVE0NEIsR0FBUWpOLFdBQVczb0IsR0FBSWhELElBQVVnRCxHQUFRQSxFQUFJaEQsS0FDbEYsQ0FBQzhuQixFQUFHeFosS0FDRixNQUFNLElBQUlxdEIsR0FBVyxrQkFBa0IzN0Isc0JBQTBCMjdCLEdBQVdvUyxnQkFBaUJ6L0IsRUFBTyxFQUNwRyxLQUlSLE1BMEJNOG5DLEdBQW9COS9DLE1BQU8yRSxFQUFTK0csS0FDeEMsTUFBTW5MLEVBQVMraEMsR0FBUXFDLGVBQWVoZ0MsRUFBUXd6QyxvQkFFOUMsT0FBaUIsTUFBVjUzQyxFQTdCYVAsT0FBTzBMLEdBQ2YsTUFBUkEsRUFDSyxFQUdONDJCLEdBQVF6QyxPQUFPbjBCLEdBQ1RBLEVBQUt4SyxLQUdYb2hDLEdBQVF5QyxvQkFBb0JyNUIsVUFDZixJQUFJNGIsUUFBUTViLEdBQU1vbEMsZUFBZTlzQyxXQUc5Q3MrQixHQUFRRyxrQkFBa0IvMkIsSUFBUzQyQixHQUFRL0MsY0FBYzd6QixHQUNuREEsRUFBSzFILFlBR1hzK0IsR0FBUXZDLGtCQUFrQnIwQixLQUMzQkEsR0FBYyxJQUdiNDJCLEdBQVFuTixTQUFTenBCLFVBQ0o2ekMsR0FBVzd6QyxJQUFPMUgsZ0JBRGxDLEdBUXdCKzdDLENBQWNyMEMsR0FBUW5MLENBQU0sRUFHaER5L0MsR0FBZWIsSUFBb0IsT0FBUW5uQyxJQUMvQyxJQUFJLElBQ0ZDLEVBQUcsT0FDSGpRLEVBQU0sS0FDTmUsRUFBSSxPQUNKNHRDLEVBQU0sWUFDTkQsRUFBVyxRQUNYbnZCLEVBQU8sbUJBQ1Bxd0IsRUFBa0IsaUJBQ2xCRCxFQUFnQixhQUNoQmxOLEVBQVksUUFDWjlsQyxFQUFPLGdCQUNQczNDLEVBQWtCLGNBQWEsYUFDL0JnRSxHQUNFN0QsR0FBY3BrQyxHQUVsQnl5QixFQUFlQSxHQUFnQkEsRUFBZSxJQUFJbGtDLGNBQWdCLE9BRWxFLElBR0lzeEIsRUFBVS92QixHQUhUbzRDLEVBQWdCQyxHQUFnQnhKLEdBQVVELEdBQWVudkIsRUFDNUQyMkIsR0FBaUIsQ0FBQ3ZILEVBQVFELEdBQWNudkIsR0FBVyxHQUlyRCxNQUFNazNCLEVBQVcsTUFDZDVtQixHQUFZOTNCLFlBQVcsS0FDdEJtZ0QsR0FBa0JBLEVBQWU5Z0MsYUFBYSxJQUdoRHlZLEdBQVcsQ0FBSSxFQUdqQixJQUFJdW9CLEVBRUosSUFDRSxHQUNFekksR0FBb0I2SCxJQUFvQyxRQUFYeDNDLEdBQStCLFNBQVhBLEdBQ0csS0FBbkVvNEMsUUFBNkJOLEdBQWtCbjdDLEVBQVNvRSxJQUN6RCxDQUNBLElBTUlzM0MsRUFOQUMsRUFBVyxJQUFJaDVCLFFBQVFyUCxFQUFLLENBQzlCalEsT0FBUSxPQUNSMEQsS0FBTTNDLEVBQ040MkMsT0FBUSxTQVNWLEdBSklyZCxHQUFRQyxXQUFXeDVCLEtBQVVzM0MsRUFBb0JDLEVBQVMzN0MsUUFBUTZILElBQUksa0JBQ3hFN0gsRUFBUW9sQyxlQUFlc1csR0FHckJDLEVBQVM1MEMsS0FBTSxDQUNqQixNQUFPOHlDLEVBQVl0SyxHQUFTSixHQUMxQnNNLEVBQ0FoTyxHQUFxQjRCLEdBQWUyRCxLQUd0QzV1QyxFQUFPdzFDLEdBQVkrQixFQUFTNTBDLEtBM0dULE1BMkdtQzh5QyxFQUFZdEssRUFBT3FMLEdBQzNFLENBQ0YsQ0FFS2pkLEdBQVFuTixTQUFTOG1CLEtBQ3BCQSxFQUFrQkEsRUFBa0IsVUFBWSxRQUdsRG4wQyxFQUFVLElBQUl3ZixRQUFRclAsRUFBSyxJQUN0QmdvQyxFQUNIdEosT0FBUXVKLEVBQ1JsNEMsT0FBUUEsRUFBTzBwQixjQUNmL3NCLFFBQVNBLEVBQVFlLFlBQVk0L0IsU0FDN0I1NUIsS0FBTTNDLEVBQ040MkMsT0FBUSxPQUNSWSxZQUFhdEUsSUFHZixJQUFJcDNDLFFBQWlCdTZDLE1BQU10M0MsR0FFM0IsTUFBTTA0QyxFQUFtQlosS0FBNEMsV0FBakJuVixHQUE4QyxhQUFqQkEsR0FFakYsR0FBSW1WLEtBQTJCaEksR0FBc0I0SSxHQUFtQixDQUN0RSxNQUFNaitDLEVBQVUsQ0FBQyxFQUVqQixDQUFDLFNBQVUsYUFBYyxXQUFXbkQsU0FBUWtHLElBQzFDL0MsRUFBUStDLEdBQVFULEVBQVNTLEVBQUssSUFHaEMsTUFBTW03QyxFQUF3Qm5lLEdBQVFxQyxlQUFlOS9CLEVBQVNGLFFBQVE2SCxJQUFJLG9CQUVuRWd5QyxFQUFZdEssR0FBUzBELEdBQXNCOUQsR0FDaEQyTSxFQUNBck8sR0FBcUI0QixHQUFlNEQsSUFBcUIsS0FDdEQsR0FFTC95QyxFQUFXLElBQUl3NkMsU0FDYmQsR0FBWTE1QyxFQUFTNkcsS0FoSkYsTUFnSjRCOHlDLEdBQVksS0FDekR0SyxHQUFTQSxJQUNUc00sR0FBb0IvQixHQUFVLEdBQzdCYyxJQUNIaDlDLEVBRUosQ0FFQWtvQyxFQUFlQSxHQUFnQixPQUUvQixJQUFJa1AsUUFBcUJrRyxHQUFVdmQsR0FBUWhDLFFBQVF1ZixHQUFXcFYsSUFBaUIsUUFBUTVsQyxFQUFVbVQsR0FNakcsT0FKQ3dvQyxHQUFvQi9CLElBRXJCMEIsR0FBZUEsVUFFRixJQUFJL0YsU0FBUSxDQUFDcmhCLEVBQVMrVSxLQUNqQ0QsR0FBTzlVLEVBQVMrVSxFQUFRLENBQ3RCL2tDLEtBQU00d0MsRUFDTmgxQyxRQUFTMm9DLEdBQWVybUMsS0FBS3BDLEVBQVNGLFNBQ3RDc0ssT0FBUXBLLEVBQVNvSyxPQUNqQitVLFdBQVluZixFQUFTbWYsV0FDckJoTSxTQUNBbFEsV0FDQSxHQUVOLENBQUUsTUFBT3JJLEdBR1AsR0FGQWcvQyxJQUVJaC9DLEdBQW9CLGNBQWJBLEVBQUltRyxNQUF3QixTQUFTNmMsS0FBS2hqQixFQUFJMFAsU0FDdkQsTUFBTWpRLE9BQU9vTCxPQUNYLElBQUkrNkIsR0FBVyxnQkFBaUJBLEdBQVd1WSxZQUFhNWxDLEVBQVFsUSxHQUNoRSxDQUNFMHNCLE1BQU8vMEIsRUFBSSswQixPQUFTLzBCLElBSzFCLE1BQU00bEMsR0FBV3ArQixLQUFLeEgsRUFBS0EsR0FBT0EsRUFBSXFlLEtBQU05RixFQUFRbFEsRUFDdEQsQ0FDRCxHQUVLNDRDLEdBQWdCLENBQ3BCNStDLEtBQU04ekMsR0FDTitLLElBQUtsRSxHQUNMMkMsTUFBT1ksSUFHVDFkLEdBQVFsakMsUUFBUXNoRCxJQUFlLENBQUMvZ0QsRUFBSXdELEtBQ2xDLEdBQUl4RCxFQUFJLENBQ04sSUFDRVQsT0FBTzRqQixlQUFlbmpCLEVBQUksT0FBUSxDQUFDd0QsU0FDckMsQ0FBRSxNQUFPbTdCLEdBRVQsQ0FDQXAvQixPQUFPNGpCLGVBQWVuakIsRUFBSSxjQUFlLENBQUN3RCxTQUM1QyxLQUdGLE1BQU15OUMsR0FBZ0I5Z0MsR0FBVyxLQUFLQSxJQUVoQytnQyxHQUFvQm5YLEdBQVlwSCxHQUFRak4sV0FBV3FVLElBQXdCLE9BQVpBLElBQWdDLElBQVpBLEVBRW5Gb1gsR0FDU0EsSUFDWEEsRUFBV3hlLEdBQVF2aEMsUUFBUSsvQyxHQUFZQSxFQUFXLENBQUNBLEdBRW5ELE1BQU0sT0FBQ3ZnRCxHQUFVdWdELEVBQ2pCLElBQUlDLEVBQ0FyWCxFQUVKLE1BQU1zWCxFQUFrQixDQUFDLEVBRXpCLElBQUssSUFBSWo2QyxFQUFJLEVBQUdBLEVBQUl4RyxFQUFRd0csSUFBSyxDQUUvQixJQUFJOEMsRUFJSixHQUxBazNDLEVBQWdCRCxFQUFTLzVDLEdBR3pCMmlDLEVBQVVxWCxHQUVMRixHQUFpQkUsS0FDcEJyWCxFQUFVZ1gsSUFBZTcyQyxFQUFLb2dCLE9BQU84MkIsSUFBZ0J4NkMsb0JBRXJDbEMsSUFBWnFsQyxHQUNGLE1BQU0sSUFBSXJFLEdBQVcsb0JBQW9CeDdCLE1BSTdDLEdBQUk2L0IsRUFDRixNQUdGc1gsRUFBZ0JuM0MsR0FBTSxJQUFNOUMsR0FBSzJpQyxDQUNuQyxDQUVBLElBQUtBLEVBQVMsQ0FFWixNQUFNdVgsRUFBVS9oRCxPQUFPMmQsUUFBUW1rQyxHQUM1Qm4xQyxLQUFJLEVBQUVoQyxFQUFJNUssS0FBVyxXQUFXNEssT0FDcEIsSUFBVjVLLEVBQWtCLHNDQUF3QyxtQ0FPL0QsTUFBTSxJQUFJb21DLEdBQ1IseURBTE05a0MsRUFDTDBnRCxFQUFRMWdELE9BQVMsRUFBSSxZQUFjMGdELEVBQVFwMUMsSUFBSSswQyxJQUFjcjdDLEtBQUssTUFBUSxJQUFNcTdDLEdBQWFLLEVBQVEsSUFDdEcsMkJBSUEsa0JBRUosQ0FFQSxPQUFPdlgsQ0FBTyxFQVlsQixTQUFTd1gsR0FBNkJscEMsR0FLcEMsR0FKSUEsRUFBTzArQixhQUNUMStCLEVBQU8wK0IsWUFBWXlLLG1CQUdqQm5wQyxFQUFPMitCLFFBQVUzK0IsRUFBTzIrQixPQUFPSyxRQUNqQyxNQUFNLElBQUlySixHQUFjLEtBQU0zMUIsRUFFbEMsQ0FTQSxTQUFTb3BDLEdBQWdCcHBDLEdBQ3ZCa3BDLEdBQTZCbHBDLEdBRTdCQSxFQUFPclQsUUFBVTJvQyxHQUFlcm1DLEtBQUsrUSxFQUFPclQsU0FHNUNxVCxFQUFPalAsS0FBT3drQyxHQUFjM3FDLEtBQzFCb1YsRUFDQUEsRUFBTzJ4QixtQkFHZ0QsSUFBckQsQ0FBQyxPQUFRLE1BQU8sU0FBU2xmLFFBQVF6UyxFQUFPaFEsU0FDMUNnUSxFQUFPclQsUUFBUW9sQyxlQUFlLHFDQUFxQyxHQUtyRSxPQUZnQitXLEdBQW9COW9DLEVBQU8weEIsU0FBV3VCLEdBQVd2QixRQUUxREEsQ0FBUTF4QixHQUFRdkwsTUFBSyxTQUE2QjVILEdBWXZELE9BWEFxOEMsR0FBNkJscEMsR0FHN0JuVCxFQUFTa0UsS0FBT3drQyxHQUFjM3FDLEtBQzVCb1YsRUFDQUEsRUFBT3V5QixrQkFDUDFsQyxHQUdGQSxFQUFTRixRQUFVMm9DLEdBQWVybUMsS0FBS3BDLEVBQVNGLFNBRXpDRSxDQUNULElBQUcsU0FBNEJpYixHQWU3QixPQWRLMnRCLEdBQVMzdEIsS0FDWm9oQyxHQUE2QmxwQyxHQUd6QjhILEdBQVVBLEVBQU9qYixXQUNuQmliLEVBQU9qYixTQUFTa0UsS0FBT3drQyxHQUFjM3FDLEtBQ25Db1YsRUFDQUEsRUFBT3V5QixrQkFDUHpxQixFQUFPamIsVUFFVGliLEVBQU9qYixTQUFTRixRQUFVMm9DLEdBQWVybUMsS0FBSzZZLEVBQU9qYixTQUFTRixXQUkzRHkxQyxRQUFRdE0sT0FBT2h1QixFQUN4QixHQUNGLENBRUEsTUFBTXVoQyxHQUFlLENBQUMsRUFHdEIsQ0FBQyxTQUFVLFVBQVcsU0FBVSxXQUFZLFNBQVUsVUFBVWppRCxTQUFRLENBQUNzSyxFQUFNM0MsS0FDN0VzNkMsR0FBYTMzQyxHQUFRLFNBQW1CeTFCLEdBQ3RDLGNBQWNBLElBQVV6MUIsR0FBUSxLQUFPM0MsRUFBSSxFQUFJLEtBQU8sS0FBTzJDLENBQy9ELENBQUMsSUFHSCxNQUFNNDNDLEdBQXFCLENBQUMsRUFXNUJELEdBQWE1WCxhQUFlLFNBQXNCOFgsRUFBVzl2QyxFQUFTdEMsR0FDcEUsU0FBU3F5QyxFQUFjdEwsRUFBS3VMLEdBQzFCLE1BQU8sdUNBQW9EdkwsRUFBTSxJQUFPdUwsR0FBUXR5QyxFQUFVLEtBQU9BLEVBQVUsR0FDN0csQ0FHQSxNQUFPLENBQUNoTSxFQUFPK3lDLEVBQUt3TCxLQUNsQixJQUFrQixJQUFkSCxFQUNGLE1BQU0sSUFBSWxjLEdBQ1JtYyxFQUFjdEwsRUFBSyxxQkFBdUJ6a0MsRUFBVSxPQUFTQSxFQUFVLEtBQ3ZFNHpCLEdBQVdzYyxnQkFlZixPQVhJbHdDLElBQVk2dkMsR0FBbUJwTCxLQUNqQ29MLEdBQW1CcEwsSUFBTyxFQUUxQmpyQyxRQUFRaUQsS0FDTnN6QyxFQUNFdEwsRUFDQSwrQkFBaUN6a0MsRUFBVSw4Q0FLMUM4dkMsR0FBWUEsRUFBVXArQyxFQUFPK3lDLEVBQUt3TCxFQUFZLENBRXpELEVBbUNBLE1BQU1ILEdBQVksQ0FDaEJLLGNBeEJGLFNBQXVCci9DLEVBQVNzL0MsRUFBUUMsR0FDdEMsR0FBdUIsaUJBQVp2L0MsRUFDVCxNQUFNLElBQUk4aUMsR0FBVyw0QkFBNkJBLEdBQVd5VSxzQkFFL0QsTUFBTTM2QyxFQUFPRCxPQUFPQyxLQUFLb0QsR0FDekIsSUFBSXdFLEVBQUk1SCxFQUFLb0IsT0FDYixLQUFPd0csS0FBTSxHQUFHLENBQ2QsTUFBTW12QyxFQUFNLzJDLEVBQUs0SCxHQUNYdzZDLEVBQVlNLEVBQU8zTCxHQUN6QixHQUFJcUwsRUFBSixDQUNFLE1BQU1wK0MsRUFBUVosRUFBUTJ6QyxHQUNoQngyQyxPQUFtQjJFLElBQVZsQixHQUF1Qm8rQyxFQUFVcCtDLEVBQU8reUMsRUFBSzN6QyxHQUM1RCxJQUFlLElBQVg3QyxFQUNGLE1BQU0sSUFBSTJsQyxHQUFXLFVBQVk2USxFQUFNLFlBQWN4MkMsRUFBUTJsQyxHQUFXeVUscUJBRzVFLE1BQ0EsSUFBcUIsSUFBakJnSSxFQUNGLE1BQU0sSUFBSXpjLEdBQVcsa0JBQW9CNlEsRUFBSzdRLEdBQVcwYyxlQUU3RCxDQUNGLEVBSUVDLFdBQVlYLElBR1JXLEdBQWFULEdBQVVTLFdBUzdCLE1BQU1DLE1BQ0osV0FBQTNyQixDQUFZNHJCLEdBQ1Z4akQsS0FBS3FKLFNBQVdtNkMsRUFDaEJ4akQsS0FBS3lqRCxhQUFlLENBQ2xCcjZDLFFBQVMsSUFBSTIvQixHQUNiNWlDLFNBQVUsSUFBSTRpQyxHQUVsQixDQVVBLGFBQU0zL0IsQ0FBUXM2QyxFQUFhcHFDLEdBQ3pCLElBQ0UsYUFBYXRaLEtBQUs0aEQsU0FBUzhCLEVBQWFwcUMsRUFDMUMsQ0FBRSxNQUFPdlksR0FDUCxHQUFJQSxhQUFlNkQsTUFBTyxDQUN4QixJQUFJKytDLEVBRUovK0MsTUFBTSt5QixrQkFBb0IveUIsTUFBTSt5QixrQkFBa0Jnc0IsRUFBUSxDQUFDLEdBQU1BLEVBQVEsSUFBSS8rQyxNQUc3RSxNQUFNNGdCLEVBQVFtK0IsRUFBTW4rQixNQUFRbStCLEVBQU1uK0IsTUFBTXZlLFFBQVEsUUFBUyxJQUFNLEdBQy9ELElBQ09sRyxFQUFJeWtCLE1BR0VBLElBQVUrRixPQUFPeHFCLEVBQUl5a0IsT0FBT2dWLFNBQVNoVixFQUFNdmUsUUFBUSxZQUFhLE9BQ3pFbEcsRUFBSXlrQixPQUFTLEtBQU9BLEdBSHBCemtCLEVBQUl5a0IsTUFBUUEsQ0FLaEIsQ0FBRSxNQUFPb2EsR0FFVCxDQUNGLENBRUEsTUFBTTcrQixDQUNSLENBQ0YsQ0FFQSxRQUFBNmdELENBQVM4QixFQUFhcHFDLEdBR08saUJBQWhCb3FDLEdBQ1RwcUMsRUFBU0EsR0FBVSxDQUFDLEdBQ2JDLElBQU1tcUMsRUFFYnBxQyxFQUFTb3FDLEdBQWUsQ0FBQyxFQUczQnBxQyxFQUFTdWpDLEdBQVk3OEMsS0FBS3FKLFNBQVVpUSxHQUVwQyxNQUFNLGFBQUN5eEIsRUFBWSxpQkFBRTZPLEVBQWdCLFFBQUUzekMsR0FBV3FULE9BRTdCM1QsSUFBakJvbEMsR0FDRjhYLEdBQVVLLGNBQWNuWSxFQUFjLENBQ3BDckIsa0JBQW1CNFosR0FBV3ZZLGFBQWF1WSxHQUFXTSxTQUN0RGphLGtCQUFtQjJaLEdBQVd2WSxhQUFhdVksR0FBV00sU0FDdERoYSxvQkFBcUIwWixHQUFXdlksYUFBYXVZLEdBQVdNLFdBQ3ZELEdBR21CLE1BQXBCaEssSUFDRWhXLEdBQVFqTixXQUFXaWpCLEdBQ3JCdGdDLEVBQU9zZ0MsaUJBQW1CLENBQ3hCalIsVUFBV2lSLEdBR2JpSixHQUFVSyxjQUFjdEosRUFBa0IsQ0FDeEM1dkIsT0FBUXM1QixHQUFXTyxTQUNuQmxiLFVBQVcyYSxHQUFXTyxXQUNyQixJQUtQdnFDLEVBQU9oUSxRQUFVZ1EsRUFBT2hRLFFBQVV0SixLQUFLcUosU0FBU0MsUUFBVSxPQUFPekIsY0FHakUsSUFBSWk4QyxFQUFpQjc5QyxHQUFXMjlCLEdBQVFPLE1BQ3RDbCtCLEVBQVFxbUMsT0FDUnJtQyxFQUFRcVQsRUFBT2hRLFNBR2pCckQsR0FBVzI5QixHQUFRbGpDLFFBQ2pCLENBQUMsU0FBVSxNQUFPLE9BQVEsT0FBUSxNQUFPLFFBQVMsV0FDakQ0SSxXQUNRckQsRUFBUXFELEVBQU8sSUFJMUJnUSxFQUFPclQsUUFBVTJvQyxHQUFlam9DLE9BQU9tOUMsRUFBZ0I3OUMsR0FHdkQsTUFBTTg5QyxFQUEwQixHQUNoQyxJQUFJQyxHQUFpQyxFQUNyQ2hrRCxLQUFLeWpELGFBQWFyNkMsUUFBUTFJLFNBQVEsU0FBb0N1akQsR0FDakMsbUJBQXhCQSxFQUFZM2EsVUFBMEQsSUFBaEMyYSxFQUFZM2EsUUFBUWh3QixLQUlyRTBxQyxFQUFpQ0EsR0FBa0NDLEVBQVk1YSxZQUUvRTBhLEVBQXdCbHpCLFFBQVFvekIsRUFBWTlhLFVBQVc4YSxFQUFZN2EsVUFDckUsSUFFQSxNQUFNOGEsRUFBMkIsR0FLakMsSUFBSUMsRUFKSm5rRCxLQUFLeWpELGFBQWF0OUMsU0FBU3pGLFNBQVEsU0FBa0N1akQsR0FDbkVDLEVBQXlCeitDLEtBQUt3K0MsRUFBWTlhLFVBQVc4YSxFQUFZN2EsU0FDbkUsSUFHQSxJQUNJOWdDLEVBREFELEVBQUksRUFHUixJQUFLMjdDLEVBQWdDLENBQ25DLE1BQU1JLEVBQVEsQ0FBQzFCLEdBQWdCL2hELEtBQUtYLFdBQU8yRixHQU8zQyxJQU5BeStDLEVBQU12ekIsUUFBUUksTUFBTW16QixFQUFPTCxHQUMzQkssRUFBTTMrQyxLQUFLd3JCLE1BQU1tekIsRUFBT0YsR0FDeEI1N0MsRUFBTTg3QyxFQUFNdmlELE9BRVpzaUQsRUFBVXpJLFFBQVFyaEIsUUFBUS9nQixHQUVuQmpSLEVBQUlDLEdBQ1Q2N0MsRUFBVUEsRUFBUXAyQyxLQUFLcTJDLEVBQU0vN0MsS0FBTSs3QyxFQUFNLzdDLE1BRzNDLE9BQU84N0MsQ0FDVCxDQUVBNzdDLEVBQU15N0MsRUFBd0JsaUQsT0FFOUIsSUFBSTg3QyxFQUFZcmtDLEVBSWhCLElBRkFqUixFQUFJLEVBRUdBLEVBQUlDLEdBQUssQ0FDZCxNQUFNKzdDLEVBQWNOLEVBQXdCMTdDLEtBQ3RDaThDLEVBQWFQLEVBQXdCMTdDLEtBQzNDLElBQ0VzMUMsRUFBWTBHLEVBQVkxRyxFQUMxQixDQUFFLE1BQU81N0MsR0FDUHVpRCxFQUFXcGdELEtBQUtsRSxLQUFNK0IsR0FDdEIsS0FDRixDQUNGLENBRUEsSUFDRW9pRCxFQUFVekIsR0FBZ0J4K0MsS0FBS2xFLEtBQU0yOUMsRUFDdkMsQ0FBRSxNQUFPNTdDLEdBQ1AsT0FBTzI1QyxRQUFRdE0sT0FBT3J0QyxFQUN4QixDQUtBLElBSEFzRyxFQUFJLEVBQ0pDLEVBQU00N0MsRUFBeUJyaUQsT0FFeEJ3RyxFQUFJQyxHQUNUNjdDLEVBQVVBLEVBQVFwMkMsS0FBS20yQyxFQUF5Qjc3QyxLQUFNNjdDLEVBQXlCNzdDLE1BR2pGLE9BQU84N0MsQ0FDVCxDQUVBLE1BQUFJLENBQU9qckMsR0FHTCxPQUFPa3ZCLEdBRFU4RyxJQURqQmgyQixFQUFTdWpDLEdBQVk3OEMsS0FBS3FKLFNBQVVpUSxJQUNFaTJCLFFBQVNqMkIsRUFBT0MsS0FDNUJELEVBQU9uUSxPQUFRbVEsRUFBT3NnQyxpQkFDbEQsRUFJRmhXLEdBQVFsakMsUUFBUSxDQUFDLFNBQVUsTUFBTyxPQUFRLFlBQVksU0FBNkI0SSxHQUVqRmk2QyxNQUFNai9DLFVBQVVnRixHQUFVLFNBQVNpUSxFQUFLRCxHQUN0QyxPQUFPdFosS0FBS29KLFFBQVF5ekMsR0FBWXZqQyxHQUFVLENBQUMsRUFBRyxDQUM1Q2hRLFNBQ0FpUSxNQUNBbFAsTUFBT2lQLEdBQVUsQ0FBQyxHQUFHalAsT0FFekIsQ0FDRixJQUVBdTVCLEdBQVFsakMsUUFBUSxDQUFDLE9BQVEsTUFBTyxVQUFVLFNBQStCNEksR0FHdkUsU0FBU2s3QyxFQUFtQkMsR0FDMUIsT0FBTyxTQUFvQmxyQyxFQUFLbFAsRUFBTWlQLEdBQ3BDLE9BQU90WixLQUFLb0osUUFBUXl6QyxHQUFZdmpDLEdBQVUsQ0FBQyxFQUFHLENBQzVDaFEsU0FDQXJELFFBQVN3K0MsRUFBUyxDQUNoQixlQUFnQix1QkFDZCxDQUFDLEVBQ0xsckMsTUFDQWxQLFNBRUosQ0FDRixDQUVBazVDLE1BQU1qL0MsVUFBVWdGLEdBQVVrN0MsSUFFMUJqQixNQUFNai9DLFVBQVVnRixFQUFTLFFBQVVrN0MsR0FBbUIsRUFDeEQsSUFFQSxNQUFNRSxHQUFVbkIsTUFTaEIsTUFBTW9CLFlBQ0osV0FBQS9zQixDQUFZZ3RCLEdBQ1YsR0FBd0IsbUJBQWJBLEVBQ1QsTUFBTSxJQUFJaHdCLFVBQVUsZ0NBR3RCLElBQUlpd0IsRUFFSjdrRCxLQUFLbWtELFFBQVUsSUFBSXpJLFNBQVEsU0FBeUJyaEIsR0FDbER3cUIsRUFBaUJ4cUIsQ0FDbkIsSUFFQSxNQUFNa0osRUFBUXZqQyxLQUdkQSxLQUFLbWtELFFBQVFwMkMsTUFBS3V4QyxJQUNoQixJQUFLL2IsRUFBTXVoQixXQUFZLE9BRXZCLElBQUl6OEMsRUFBSWs3QixFQUFNdWhCLFdBQVdqakQsT0FFekIsS0FBT3dHLEtBQU0sR0FDWGs3QixFQUFNdWhCLFdBQVd6OEMsR0FBR2kzQyxHQUV0Qi9iLEVBQU11aEIsV0FBYSxJQUFJLElBSXpCOWtELEtBQUtta0QsUUFBUXAyQyxLQUFPZzNDLElBQ2xCLElBQUlDLEVBRUosTUFBTWIsRUFBVSxJQUFJekksU0FBUXJoQixJQUMxQmtKLEVBQU04VSxVQUFVaGUsR0FDaEIycUIsRUFBVzNxQixDQUFPLElBQ2pCdHNCLEtBQUtnM0MsR0FNUixPQUpBWixFQUFRN0UsT0FBUyxXQUNmL2IsRUFBTTdpQixZQUFZc2tDLEVBQ3BCLEVBRU9iLENBQU8sRUFHaEJTLEdBQVMsU0FBZ0JuMEMsRUFBUzZJLEVBQVFsUSxHQUNwQ202QixFQUFNbmlCLFNBS1ZtaUIsRUFBTW5pQixPQUFTLElBQUk2dEIsR0FBY3grQixFQUFTNkksRUFBUWxRLEdBQ2xEeTdDLEVBQWV0aEIsRUFBTW5pQixRQUN2QixHQUNGLENBS0EsZ0JBQUFxaEMsR0FDRSxHQUFJemlELEtBQUtvaEIsT0FDUCxNQUFNcGhCLEtBQUtvaEIsTUFFZixDQU1BLFNBQUFpM0IsQ0FBVTFFLEdBQ0ozekMsS0FBS29oQixPQUNQdXlCLEVBQVMzekMsS0FBS29oQixRQUlacGhCLEtBQUs4a0QsV0FDUDlrRCxLQUFLOGtELFdBQVdyL0MsS0FBS2t1QyxHQUVyQjN6QyxLQUFLOGtELFdBQWEsQ0FBQ25SLEVBRXZCLENBTUEsV0FBQWp6QixDQUFZaXpCLEdBQ1YsSUFBSzN6QyxLQUFLOGtELFdBQ1IsT0FFRixNQUFNcGpELEVBQVExQixLQUFLOGtELFdBQVcvNEIsUUFBUTRuQixJQUN2QixJQUFYanlDLEdBQ0YxQixLQUFLOGtELFdBQVc5MkIsT0FBT3RzQixFQUFPLEVBRWxDLENBTUEsYUFBTzR4QixHQUNMLElBQUlnc0IsRUFJSixNQUFPLENBQ0wvYixNQUpZLElBQUlvaEIsYUFBWSxTQUFrQm41QixHQUM5Qzh6QixFQUFTOXpCLENBQ1gsSUFHRTh6QixTQUVKLEVBR0YsTUFBTTJGLEdBQWdCTixZQXdDdEIsTUFBTU8sR0FBaUIsQ0FDckJDLFNBQVUsSUFDVkMsbUJBQW9CLElBQ3BCQyxXQUFZLElBQ1pDLFdBQVksSUFDWkMsR0FBSSxJQUNKQyxRQUFTLElBQ1RDLFNBQVUsSUFDVkMsNEJBQTZCLElBQzdCQyxVQUFXLElBQ1hDLGFBQWMsSUFDZEMsZUFBZ0IsSUFDaEJDLFlBQWEsSUFDYkMsZ0JBQWlCLElBQ2pCQyxPQUFRLElBQ1JDLGdCQUFpQixJQUNqQkMsaUJBQWtCLElBQ2xCQyxNQUFPLElBQ1BDLFNBQVUsSUFDVkMsWUFBYSxJQUNiQyxTQUFVLElBQ1ZDLE9BQVEsSUFDUkMsa0JBQW1CLElBQ25CQyxrQkFBbUIsSUFDbkJDLFdBQVksSUFDWkMsYUFBYyxJQUNkQyxnQkFBaUIsSUFDakJDLFVBQVcsSUFDWEMsU0FBVSxJQUNWQyxpQkFBa0IsSUFDbEJDLGNBQWUsSUFDZkMsNEJBQTZCLElBQzdCQyxlQUFnQixJQUNoQkMsU0FBVSxJQUNWQyxLQUFNLElBQ05DLGVBQWdCLElBQ2hCQyxtQkFBb0IsSUFDcEJDLGdCQUFpQixJQUNqQkMsV0FBWSxJQUNaQyxxQkFBc0IsSUFDdEJDLG9CQUFxQixJQUNyQkMsa0JBQW1CLElBQ25CQyxVQUFXLElBQ1hDLG1CQUFvQixJQUNwQkMsb0JBQXFCLElBQ3JCQyxPQUFRLElBQ1JDLGlCQUFrQixJQUNsQkMsU0FBVSxJQUNWQyxnQkFBaUIsSUFDakJDLHFCQUFzQixJQUN0QkMsZ0JBQWlCLElBQ2pCQyw0QkFBNkIsSUFDN0JDLDJCQUE0QixJQUM1QkMsb0JBQXFCLElBQ3JCQyxlQUFnQixJQUNoQkMsV0FBWSxJQUNaQyxtQkFBb0IsSUFDcEJDLGVBQWdCLElBQ2hCQyx3QkFBeUIsSUFDekJDLHNCQUF1QixJQUN2QkMsb0JBQXFCLElBQ3JCQyxhQUFjLElBQ2RDLFlBQWEsSUFDYkMsOEJBQStCLEtBR2pDem9ELE9BQU8yZCxRQUFRK21DLElBQWdCeGtELFNBQVEsRUFBRUwsRUFBS29FLE1BQzVDeWdELEdBQWV6Z0QsR0FBU3BFLENBQUcsSUFHN0IsTUFBTTZvRCxHQUFtQmhFLEdBNEJ6QixNQUFNaUUsR0FuQk4sU0FBU0MsRUFBZUMsR0FDdEIsTUFBTXBuQixFQUFVLElBQUl5aUIsR0FBUTJFLEdBQ3RCQyxFQUFXM29ELEVBQUsrakQsR0FBUXBnRCxVQUFVOEUsUUFBUzY0QixHQWFqRCxPQVZBMkIsR0FBUXpTLE9BQU9tNEIsRUFBVTVFLEdBQVFwZ0QsVUFBVzI5QixFQUFTLENBQUNQLFlBQVksSUFHbEVrQyxHQUFRelMsT0FBT200QixFQUFVcm5CLEVBQVMsS0FBTSxDQUFDUCxZQUFZLElBR3JENG5CLEVBQVNoN0MsT0FBUyxTQUFnQmsxQyxHQUNoQyxPQUFPNEYsRUFBZXZNLEdBQVl3TSxFQUFlN0YsR0FDbkQsRUFFTzhGLENBQ1QsQ0FHY0YsQ0FBZTdjLElBRzdCNGMsR0FBTTVGLE1BQVFtQixHQUdkeUUsR0FBTWxhLGNBQWdCQSxHQUN0QmthLEdBQU14RSxZQUFjTSxHQUNwQmtFLEdBQU1wYSxTQUFXQSxHQUNqQm9hLEdBQU12WixRQUFVQSxHQUNoQnVaLEdBQU0xaEIsV0FBYUEsR0FHbkIwaEIsR0FBTXhpQixXQUFhQSxHQUduQndpQixHQUFNSSxPQUFTSixHQUFNbGEsY0FHckJrYSxHQUFNdlIsSUFBTSxTQUFhNFIsR0FDdkIsT0FBTzlOLFFBQVE5RCxJQUFJNFIsRUFDckIsRUFFQUwsR0FBTWp5QixPQTFJTixTQUFnQnIyQixHQUNkLE9BQU8sU0FBY3NrQyxHQUNuQixPQUFPdGtDLEVBQVNvd0IsTUFBTSxLQUFNa1UsRUFDOUIsQ0FDRixFQXlJQWdrQixHQUFNTSxhQWhJTixTQUFzQkMsR0FDcEIsT0FBTzlsQixHQUFRN0MsU0FBUzJvQixLQUFzQyxJQUF6QkEsRUFBUUQsWUFDL0MsRUFpSUFOLEdBQU10TSxZQUFjQSxHQUVwQnNNLEdBQU1yL0IsYUFBZThrQixHQUVyQnVhLEdBQU1RLFdBQWFscEIsR0FBU2dLLEdBQWU3RyxHQUFRdkIsV0FBVzVCLEdBQVMsSUFBSTc4QixTQUFTNjhCLEdBQVNBLEdBRTdGMG9CLEdBQU1TLFdBQWF4SCxHQUVuQitHLEdBQU1qRSxlQUFpQmdFLEdBRXZCQyxHQUFNLzdDLFFBQVUrN0MsR0FFaEJ0cEQsRUFBT0QsUUFBVXVwRCxrejlJQ3BvSmJVLEVBQTJCLENBQUMsRUFHaEMsU0FBU0MsRUFBb0JDLEdBRTVCLElBQUlDLEVBQWVILEVBQXlCRSxHQUM1QyxRQUFxQnBrRCxJQUFqQnFrRCxFQUNILE9BQU9BLEVBQWFwcUQsUUFHckIsSUFBSUMsRUFBU2dxRCxFQUF5QkUsR0FBWSxDQUNqRDUrQyxHQUFJNCtDLEVBQ0pqVixRQUFRLEVBQ1JsMUMsUUFBUyxDQUFDLEdBVVgsT0FOQXFxRCxFQUFvQkYsR0FBVTdsRCxLQUFLckUsRUFBT0QsUUFBU0MsRUFBUUEsRUFBT0QsUUFBU2txRCxHQUczRWpxRCxFQUFPaTFDLFFBQVMsRUFHVGoxQyxFQUFPRCxPQUNmLENDekJBa3FELEVBQW9CSSxJQUFPcnFELElBQzFCQSxFQUFPc3FELE1BQVEsR0FDVnRxRCxFQUFPdXFELFdBQVV2cUQsRUFBT3VxRCxTQUFXLElBQ2pDdnFELEdDQVIsSUFBSXdxRCxFQUFzQlAsRUFBb0IsMEJuSE85QyIsInNvdXJjZXMiOlsid2VicGFjazovL21haWxndW4vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovL21haWxndW4vLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9saWIvYWJvcnQuanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9saWIvYXN5bmMuanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9saWIvZGVmZXIuanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9saWIvaXRlcmF0ZS5qcyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbm9kZV9tb2R1bGVzL2FzeW5ja2l0L2xpYi9zdGF0ZS5qcyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbm9kZV9tb2R1bGVzL2FzeW5ja2l0L2xpYi90ZXJtaW5hdG9yLmpzIiwid2VicGFjazovL21haWxndW4vLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvcGFyYWxsZWwuanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9zZXJpYWwuanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9zZXJpYWxPcmRlcmVkLmpzIiwid2VicGFjazovL21haWxndW4vLi9ub2RlX21vZHVsZXMvYXhpb3Mvbm9kZV9tb2R1bGVzL2Zvcm0tZGF0YS9saWIvZm9ybV9kYXRhLmpzIiwid2VicGFjazovL21haWxndW4vLi9ub2RlX21vZHVsZXMvYXhpb3Mvbm9kZV9tb2R1bGVzL2Zvcm0tZGF0YS9saWIvcG9wdWxhdGUuanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL2xpYi9DbGFzc2VzL0RvbWFpbnMvZG9tYWluLnRzIiwid2VicGFjazovL21haWxndW4vLi9saWIvQ2xhc3Nlcy9Eb21haW5zL2RvbWFpbnNDbGllbnQudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL2xpYi9DbGFzc2VzL0RvbWFpbnMvZG9tYWluc0NyZWRlbnRpYWxzLnRzIiwid2VicGFjazovL21haWxndW4vLi9saWIvQ2xhc3Nlcy9Eb21haW5zL2RvbWFpbnNUYWdzLnRzIiwid2VicGFjazovL21haWxndW4vLi9saWIvQ2xhc3Nlcy9Eb21haW5zL2RvbWFpbnNUZW1wbGF0ZXMudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL2xpYi9DbGFzc2VzL0V2ZW50cy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbGliL0NsYXNzZXMvSVBQb29scy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbGliL0NsYXNzZXMvSVBzLnRzIiwid2VicGFjazovL21haWxndW4vLi9saWIvQ2xhc3Nlcy9JbmJveFBsYWNlbWVudHMvQXR0cmlidXRlc0NsaWVudC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbGliL0NsYXNzZXMvSW5ib3hQbGFjZW1lbnRzL0ZpbHRlcnNDbGllbnQudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL2xpYi9DbGFzc2VzL0luYm94UGxhY2VtZW50cy9SZXN1bHRzL0luYm94UGxhY2VtZW50c1Jlc3VsdHNDbGllbnQudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL2xpYi9DbGFzc2VzL0luYm94UGxhY2VtZW50cy9SZXN1bHRzL0luYm94UGxhY2VtZW50c1Jlc3VsdHNTaGFyaW5nQ2xpZW50LnRzIiwid2VicGFjazovL21haWxndW4vLi9saWIvQ2xhc3Nlcy9JbmJveFBsYWNlbWVudHMvU2VlZHNMaXN0cy9TZWVkc0xpc3RzQ2xpZW50LnRzIiwid2VicGFjazovL21haWxndW4vLi9saWIvQ2xhc3Nlcy9JbmJveFBsYWNlbWVudHMvaW5ib3hQbGFjZW1lbnRzLnRzIiwid2VicGFjazovL21haWxndW4vLi9saWIvQ2xhc3Nlcy9JbmJveFBsYWNlbWVudHMvcHJvdmlkZXJzL0luYm94UGxhY2VtZW50c1Byb3ZpZGVycy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbGliL0NsYXNzZXMvTWFpbGd1bkNsaWVudC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbGliL0NsYXNzZXMvTWFpbGluZ0xpc3RzL21haWxMaXN0TWVtYmVycy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbGliL0NsYXNzZXMvTWFpbGluZ0xpc3RzL21haWxpbmdMaXN0cy50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbGliL0NsYXNzZXMvTWVzc2FnZXMudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL2xpYi9DbGFzc2VzL01ldHJpY3MvTWV0cmljc0NsaWVudC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbGliL0NsYXNzZXMvUm91dGVzLnRzIiwid2VicGFjazovL21haWxndW4vLi9saWIvQ2xhc3Nlcy9TdGF0cy9TdGF0c0NsaWVudC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbGliL0NsYXNzZXMvU3RhdHMvU3RhdHNDb250YWluZXIudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL2xpYi9DbGFzc2VzL1N1YmFjY291bnRzLnRzIiwid2VicGFjazovL21haWxndW4vLi9saWIvQ2xhc3Nlcy9TdXBwcmVzc2lvbnMvQm91bmNlLnRzIiwid2VicGFjazovL21haWxndW4vLi9saWIvQ2xhc3Nlcy9TdXBwcmVzc2lvbnMvQ29tcGxhaW50LnRzIiwid2VicGFjazovL21haWxndW4vLi9saWIvQ2xhc3Nlcy9TdXBwcmVzc2lvbnMvU3VwcHJlc3Npb24udHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL2xpYi9DbGFzc2VzL1N1cHByZXNzaW9ucy9TdXBwcmVzc2lvbnNDbGllbnQudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL2xpYi9DbGFzc2VzL1N1cHByZXNzaW9ucy9VbnN1YnNjcmliZS50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbGliL0NsYXNzZXMvU3VwcHJlc3Npb25zL1doaXRlTGlzdC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbGliL0NsYXNzZXMvVmFsaWRhdGlvbnMvbXVsdGlwbGVWYWxpZGF0aW9uLnRzIiwid2VicGFjazovL21haWxndW4vLi9saWIvQ2xhc3Nlcy9WYWxpZGF0aW9ucy92YWxpZGF0ZS50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbGliL0NsYXNzZXMvV2ViaG9va3MudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL2xpYi9DbGFzc2VzL2NvbW1vbi9BdHRhY2htZW50c0hhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL2xpYi9DbGFzc2VzL2NvbW1vbi9FcnJvci50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbGliL0NsYXNzZXMvY29tbW9uL0Zvcm1EYXRhQnVpbGRlci50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbGliL0NsYXNzZXMvY29tbW9uL05hdmlnYXRpb25UaHJ1UGFnZXMudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL2xpYi9DbGFzc2VzL2NvbW1vbi9SZXF1ZXN0LnRzIiwid2VicGFjazovL21haWxndW4vLi9saWIvRW51bXMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL2xpYi9JbnRlcmZhY2VzL0NvbW1vbi9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbGliL0ludGVyZmFjZXMvRG9tYWlucy9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbGliL0ludGVyZmFjZXMvRXZlbnRDbGllbnQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL2xpYi9JbnRlcmZhY2VzL0lQUG9vbHMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL2xpYi9JbnRlcmZhY2VzL0lQcy9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbGliL0ludGVyZmFjZXMvSW5ib3hQbGFjZW1lbnRzL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4vLi9saWIvSW50ZXJmYWNlcy9NYWlsZ3VuQ2xpZW50L2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4vLi9saWIvSW50ZXJmYWNlcy9NYWlsaW5nTGlzdHMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL2xpYi9JbnRlcmZhY2VzL01lc3NhZ2VzL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4vLi9saWIvSW50ZXJmYWNlcy9Sb3V0ZXMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL2xpYi9JbnRlcmZhY2VzL1N0YXRzL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4vLi9saWIvSW50ZXJmYWNlcy9TdWJhY2NvdW50cy9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbGliL0ludGVyZmFjZXMvU3VwcHJlc3Npb25zL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4vLi9saWIvSW50ZXJmYWNlcy9WYWxpZGF0aW9ucy9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbGliL0ludGVyZmFjZXMvV2ViaG9va3MvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL2xpYi9JbnRlcmZhY2VzL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4vLi9saWIvVHlwZXMvQ29tbW9uL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4vLi9saWIvVHlwZXMvRG9tYWlucy9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbGliL1R5cGVzL0V2ZW50cy9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbGliL1R5cGVzL0lQUG9vbHMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL2xpYi9UeXBlcy9JUHMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL2xpYi9UeXBlcy9NYWlsZ3VuQ2xpZW50L2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4vLi9saWIvVHlwZXMvTWFpbGluZ0xpc3RzL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4vLi9saWIvVHlwZXMvTWVzc2FnZXMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL2xpYi9UeXBlcy9Sb3V0ZXMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL2xpYi9UeXBlcy9TdGF0cy9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbGliL1R5cGVzL1N1YmFjY291bnRzL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4vLi9saWIvVHlwZXMvU3VwcHJlc3Npb25zL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4vLi9saWIvVHlwZXMvVmFsaWRhdGlvbnMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL2xpYi9UeXBlcy9XZWJob29rcy9pbmRleC50cyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbGliL1R5cGVzL2luZGV4LnRzIiwid2VicGFjazovL21haWxndW4vLi9saWIvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL25vZGVfbW9kdWxlcy9iYXNlLTY0L2Jhc2U2NC5qcyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbm9kZV9tb2R1bGVzL2NvbWJpbmVkLXN0cmVhbS9saWIvY29tYmluZWRfc3RyZWFtLmpzIiwid2VicGFjazovL21haWxndW4vLi9ub2RlX21vZHVsZXMvZGVidWcvc3JjL2Jyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvY29tbW9uLmpzIiwid2VicGFjazovL21haWxndW4vLi9ub2RlX21vZHVsZXMvZGVidWcvc3JjL2luZGV4LmpzIiwid2VicGFjazovL21haWxndW4vLi9ub2RlX21vZHVsZXMvZGVidWcvc3JjL25vZGUuanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL25vZGVfbW9kdWxlcy9kZWxheWVkLXN0cmVhbS9saWIvZGVsYXllZF9zdHJlYW0uanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL25vZGVfbW9kdWxlcy9mb2xsb3ctcmVkaXJlY3RzL2RlYnVnLmpzIiwid2VicGFjazovL21haWxndW4vLi9ub2RlX21vZHVsZXMvZm9sbG93LXJlZGlyZWN0cy9pbmRleC5qcyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbm9kZV9tb2R1bGVzL2hhcy1mbGFnL2luZGV4LmpzIiwid2VicGFjazovL21haWxndW4vLi9ub2RlX21vZHVsZXMvbWltZS1kYi9pbmRleC5qcyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbm9kZV9tb2R1bGVzL21pbWUtdHlwZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL25vZGVfbW9kdWxlcy9tcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9tYWlsZ3VuLy4vbm9kZV9tb2R1bGVzL3Byb3h5LWZyb20tZW52L2luZGV4LmpzIiwid2VicGFjazovL21haWxndW4vLi9ub2RlX21vZHVsZXMvc3VwcG9ydHMtY29sb3IvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi8uL25vZGVfbW9kdWxlcy91cmwtam9pbi9saWIvdXJsLWpvaW4uanMiLCJ3ZWJwYWNrOi8vbWFpbGd1bi9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwiYXNzZXJ0XCIiLCJ3ZWJwYWNrOi8vbWFpbGd1bi9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwiZXZlbnRzXCIiLCJ3ZWJwYWNrOi8vbWFpbGd1bi9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwiZnNcIiIsIndlYnBhY2s6Ly9tYWlsZ3VuL2V4dGVybmFsIG5vZGUtY29tbW9uanMgXCJodHRwXCIiLCJ3ZWJwYWNrOi8vbWFpbGd1bi9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwiaHR0cHNcIiIsIndlYnBhY2s6Ly9tYWlsZ3VuL2V4dGVybmFsIG5vZGUtY29tbW9uanMgXCJvc1wiIiwid2VicGFjazovL21haWxndW4vZXh0ZXJuYWwgbm9kZS1jb21tb25qcyBcInBhdGhcIiIsIndlYnBhY2s6Ly9tYWlsZ3VuL2V4dGVybmFsIG5vZGUtY29tbW9uanMgXCJzdHJlYW1cIiIsIndlYnBhY2s6Ly9tYWlsZ3VuL2V4dGVybmFsIG5vZGUtY29tbW9uanMgXCJ0dHlcIiIsIndlYnBhY2s6Ly9tYWlsZ3VuL2V4dGVybmFsIG5vZGUtY29tbW9uanMgXCJ1cmxcIiIsIndlYnBhY2s6Ly9tYWlsZ3VuL2V4dGVybmFsIG5vZGUtY29tbW9uanMgXCJ1dGlsXCIiLCJ3ZWJwYWNrOi8vbWFpbGd1bi9leHRlcm5hbCBub2RlLWNvbW1vbmpzIFwiemxpYlwiIiwid2VicGFjazovL21haWxndW4vLi9ub2RlX21vZHVsZXMvYXhpb3MvZGlzdC9ub2RlL2F4aW9zLmNqcyIsIndlYnBhY2s6Ly9tYWlsZ3VuL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL21haWxndW4vd2VicGFjay9ydW50aW1lL25vZGUgbW9kdWxlIGRlY29yYXRvciIsIndlYnBhY2s6Ly9tYWlsZ3VuL3dlYnBhY2svc3RhcnR1cCJdLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJtYWlsZ3VuXCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIm1haWxndW5cIl0gPSBmYWN0b3J5KCk7XG59KSh0aGlzLCAoKSA9PiB7XG5yZXR1cm4gIiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICBwYXJhbGxlbCAgICAgIDogcmVxdWlyZSgnLi9wYXJhbGxlbC5qcycpLFxuICBzZXJpYWwgICAgICAgIDogcmVxdWlyZSgnLi9zZXJpYWwuanMnKSxcbiAgc2VyaWFsT3JkZXJlZCA6IHJlcXVpcmUoJy4vc2VyaWFsT3JkZXJlZC5qcycpXG59O1xuIiwiLy8gQVBJXG5tb2R1bGUuZXhwb3J0cyA9IGFib3J0O1xuXG4vKipcbiAqIEFib3J0cyBsZWZ0b3ZlciBhY3RpdmUgam9ic1xuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBzdGF0ZSAtIGN1cnJlbnQgc3RhdGUgb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGFib3J0KHN0YXRlKVxue1xuICBPYmplY3Qua2V5cyhzdGF0ZS5qb2JzKS5mb3JFYWNoKGNsZWFuLmJpbmQoc3RhdGUpKTtcblxuICAvLyByZXNldCBsZWZ0b3ZlciBqb2JzXG4gIHN0YXRlLmpvYnMgPSB7fTtcbn1cblxuLyoqXG4gKiBDbGVhbnMgdXAgbGVmdG92ZXIgam9iIGJ5IGludm9raW5nIGFib3J0IGZ1bmN0aW9uIGZvciB0aGUgcHJvdmlkZWQgam9iIGlkXG4gKlxuICogQHRoaXMgIHN0YXRlXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IGtleSAtIGpvYiBpZCB0byBhYm9ydFxuICovXG5mdW5jdGlvbiBjbGVhbihrZXkpXG57XG4gIGlmICh0eXBlb2YgdGhpcy5qb2JzW2tleV0gPT0gJ2Z1bmN0aW9uJylcbiAge1xuICAgIHRoaXMuam9ic1trZXldKCk7XG4gIH1cbn1cbiIsInZhciBkZWZlciA9IHJlcXVpcmUoJy4vZGVmZXIuanMnKTtcblxuLy8gQVBJXG5tb2R1bGUuZXhwb3J0cyA9IGFzeW5jO1xuXG4vKipcbiAqIFJ1bnMgcHJvdmlkZWQgY2FsbGJhY2sgYXN5bmNocm9ub3VzbHlcbiAqIGV2ZW4gaWYgY2FsbGJhY2sgaXRzZWxmIGlzIG5vdFxuICpcbiAqIEBwYXJhbSAgIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBjYWxsYmFjayB0byBpbnZva2VcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn0gLSBhdWdtZW50ZWQgY2FsbGJhY2tcbiAqL1xuZnVuY3Rpb24gYXN5bmMoY2FsbGJhY2spXG57XG4gIHZhciBpc0FzeW5jID0gZmFsc2U7XG5cbiAgLy8gY2hlY2sgaWYgYXN5bmMgaGFwcGVuZWRcbiAgZGVmZXIoZnVuY3Rpb24oKSB7IGlzQXN5bmMgPSB0cnVlOyB9KTtcblxuICByZXR1cm4gZnVuY3Rpb24gYXN5bmNfY2FsbGJhY2soZXJyLCByZXN1bHQpXG4gIHtcbiAgICBpZiAoaXNBc3luYylcbiAgICB7XG4gICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdCk7XG4gICAgfVxuICAgIGVsc2VcbiAgICB7XG4gICAgICBkZWZlcihmdW5jdGlvbiBuZXh0VGlja19jYWxsYmFjaygpXG4gICAgICB7XG4gICAgICAgIGNhbGxiYWNrKGVyciwgcmVzdWx0KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gZGVmZXI7XG5cbi8qKlxuICogUnVucyBwcm92aWRlZCBmdW5jdGlvbiBvbiBuZXh0IGl0ZXJhdGlvbiBvZiB0aGUgZXZlbnQgbG9vcFxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGZuIC0gZnVuY3Rpb24gdG8gcnVuXG4gKi9cbmZ1bmN0aW9uIGRlZmVyKGZuKVxue1xuICB2YXIgbmV4dFRpY2sgPSB0eXBlb2Ygc2V0SW1tZWRpYXRlID09ICdmdW5jdGlvbidcbiAgICA/IHNldEltbWVkaWF0ZVxuICAgIDogKFxuICAgICAgdHlwZW9mIHByb2Nlc3MgPT0gJ29iamVjdCcgJiYgdHlwZW9mIHByb2Nlc3MubmV4dFRpY2sgPT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyBwcm9jZXNzLm5leHRUaWNrXG4gICAgICA6IG51bGxcbiAgICApO1xuXG4gIGlmIChuZXh0VGljaylcbiAge1xuICAgIG5leHRUaWNrKGZuKTtcbiAgfVxuICBlbHNlXG4gIHtcbiAgICBzZXRUaW1lb3V0KGZuLCAwKTtcbiAgfVxufVxuIiwidmFyIGFzeW5jID0gcmVxdWlyZSgnLi9hc3luYy5qcycpXG4gICwgYWJvcnQgPSByZXF1aXJlKCcuL2Fib3J0LmpzJylcbiAgO1xuXG4vLyBBUElcbm1vZHVsZS5leHBvcnRzID0gaXRlcmF0ZTtcblxuLyoqXG4gKiBJdGVyYXRlcyBvdmVyIGVhY2ggam9iIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7YXJyYXl8b2JqZWN0fSBsaXN0IC0gYXJyYXkgb3Igb2JqZWN0IChuYW1lZCBsaXN0KSB0byBpdGVyYXRlIG92ZXJcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGl0ZXJhdG9yIC0gaXRlcmF0b3IgdG8gcnVuXG4gKiBAcGFyYW0ge29iamVjdH0gc3RhdGUgLSBjdXJyZW50IGpvYiBzdGF0dXNcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIC0gaW52b2tlZCB3aGVuIGFsbCBlbGVtZW50cyBwcm9jZXNzZWRcbiAqL1xuZnVuY3Rpb24gaXRlcmF0ZShsaXN0LCBpdGVyYXRvciwgc3RhdGUsIGNhbGxiYWNrKVxue1xuICAvLyBzdG9yZSBjdXJyZW50IGluZGV4XG4gIHZhciBrZXkgPSBzdGF0ZVsna2V5ZWRMaXN0J10gPyBzdGF0ZVsna2V5ZWRMaXN0J11bc3RhdGUuaW5kZXhdIDogc3RhdGUuaW5kZXg7XG5cbiAgc3RhdGUuam9ic1trZXldID0gcnVuSm9iKGl0ZXJhdG9yLCBrZXksIGxpc3Rba2V5XSwgZnVuY3Rpb24oZXJyb3IsIG91dHB1dClcbiAge1xuICAgIC8vIGRvbid0IHJlcGVhdCB5b3Vyc2VsZlxuICAgIC8vIHNraXAgc2Vjb25kYXJ5IGNhbGxiYWNrc1xuICAgIGlmICghKGtleSBpbiBzdGF0ZS5qb2JzKSlcbiAgICB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gY2xlYW4gdXAgam9ic1xuICAgIGRlbGV0ZSBzdGF0ZS5qb2JzW2tleV07XG5cbiAgICBpZiAoZXJyb3IpXG4gICAge1xuICAgICAgLy8gZG9uJ3QgcHJvY2VzcyByZXN0IG9mIHRoZSByZXN1bHRzXG4gICAgICAvLyBzdG9wIHN0aWxsIGFjdGl2ZSBqb2JzXG4gICAgICAvLyBhbmQgcmVzZXQgdGhlIGxpc3RcbiAgICAgIGFib3J0KHN0YXRlKTtcbiAgICB9XG4gICAgZWxzZVxuICAgIHtcbiAgICAgIHN0YXRlLnJlc3VsdHNba2V5XSA9IG91dHB1dDtcbiAgICB9XG5cbiAgICAvLyByZXR1cm4gc2FsdmFnZWQgcmVzdWx0c1xuICAgIGNhbGxiYWNrKGVycm9yLCBzdGF0ZS5yZXN1bHRzKTtcbiAgfSk7XG59XG5cbi8qKlxuICogUnVucyBpdGVyYXRvciBvdmVyIHByb3ZpZGVkIGpvYiBlbGVtZW50XG4gKlxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBpdGVyYXRvciAtIGl0ZXJhdG9yIHRvIGludm9rZVxuICogQHBhcmFtICAge3N0cmluZ3xudW1iZXJ9IGtleSAtIGtleS9pbmRleCBvZiB0aGUgZWxlbWVudCBpbiB0aGUgbGlzdCBvZiBqb2JzXG4gKiBAcGFyYW0gICB7bWl4ZWR9IGl0ZW0gLSBqb2IgZGVzY3JpcHRpb25cbiAqIEBwYXJhbSAgIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBpbnZva2VkIGFmdGVyIGl0ZXJhdG9yIGlzIGRvbmUgd2l0aCB0aGUgam9iXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb258bWl4ZWR9IC0gam9iIGFib3J0IGZ1bmN0aW9uIG9yIHNvbWV0aGluZyBlbHNlXG4gKi9cbmZ1bmN0aW9uIHJ1bkpvYihpdGVyYXRvciwga2V5LCBpdGVtLCBjYWxsYmFjaylcbntcbiAgdmFyIGFib3J0ZXI7XG5cbiAgLy8gYWxsb3cgc2hvcnRjdXQgaWYgaXRlcmF0b3IgZXhwZWN0cyBvbmx5IHR3byBhcmd1bWVudHNcbiAgaWYgKGl0ZXJhdG9yLmxlbmd0aCA9PSAyKVxuICB7XG4gICAgYWJvcnRlciA9IGl0ZXJhdG9yKGl0ZW0sIGFzeW5jKGNhbGxiYWNrKSk7XG4gIH1cbiAgLy8gb3RoZXJ3aXNlIGdvIHdpdGggZnVsbCB0aHJlZSBhcmd1bWVudHNcbiAgZWxzZVxuICB7XG4gICAgYWJvcnRlciA9IGl0ZXJhdG9yKGl0ZW0sIGtleSwgYXN5bmMoY2FsbGJhY2spKTtcbiAgfVxuXG4gIHJldHVybiBhYm9ydGVyO1xufVxuIiwiLy8gQVBJXG5tb2R1bGUuZXhwb3J0cyA9IHN0YXRlO1xuXG4vKipcbiAqIENyZWF0ZXMgaW5pdGlhbCBzdGF0ZSBvYmplY3RcbiAqIGZvciBpdGVyYXRpb24gb3ZlciBsaXN0XG4gKlxuICogQHBhcmFtICAge2FycmF5fG9iamVjdH0gbGlzdCAtIGxpc3QgdG8gaXRlcmF0ZSBvdmVyXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb258bnVsbH0gc29ydE1ldGhvZCAtIGZ1bmN0aW9uIHRvIHVzZSBmb3Iga2V5cyBzb3J0LFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgYG51bGxgIHRvIGtlZXAgdGhlbSBhcyBpc1xuICogQHJldHVybnMge29iamVjdH0gLSBpbml0aWFsIHN0YXRlIG9iamVjdFxuICovXG5mdW5jdGlvbiBzdGF0ZShsaXN0LCBzb3J0TWV0aG9kKVxue1xuICB2YXIgaXNOYW1lZExpc3QgPSAhQXJyYXkuaXNBcnJheShsaXN0KVxuICAgICwgaW5pdFN0YXRlID1cbiAgICB7XG4gICAgICBpbmRleCAgICA6IDAsXG4gICAgICBrZXllZExpc3Q6IGlzTmFtZWRMaXN0IHx8IHNvcnRNZXRob2QgPyBPYmplY3Qua2V5cyhsaXN0KSA6IG51bGwsXG4gICAgICBqb2JzICAgICA6IHt9LFxuICAgICAgcmVzdWx0cyAgOiBpc05hbWVkTGlzdCA/IHt9IDogW10sXG4gICAgICBzaXplICAgICA6IGlzTmFtZWRMaXN0ID8gT2JqZWN0LmtleXMobGlzdCkubGVuZ3RoIDogbGlzdC5sZW5ndGhcbiAgICB9XG4gICAgO1xuXG4gIGlmIChzb3J0TWV0aG9kKVxuICB7XG4gICAgLy8gc29ydCBhcnJheSBrZXlzIGJhc2VkIG9uIGl0J3MgdmFsdWVzXG4gICAgLy8gc29ydCBvYmplY3QncyBrZXlzIGp1c3Qgb24gb3duIG1lcml0XG4gICAgaW5pdFN0YXRlLmtleWVkTGlzdC5zb3J0KGlzTmFtZWRMaXN0ID8gc29ydE1ldGhvZCA6IGZ1bmN0aW9uKGEsIGIpXG4gICAge1xuICAgICAgcmV0dXJuIHNvcnRNZXRob2QobGlzdFthXSwgbGlzdFtiXSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gaW5pdFN0YXRlO1xufVxuIiwidmFyIGFib3J0ID0gcmVxdWlyZSgnLi9hYm9ydC5qcycpXG4gICwgYXN5bmMgPSByZXF1aXJlKCcuL2FzeW5jLmpzJylcbiAgO1xuXG4vLyBBUElcbm1vZHVsZS5leHBvcnRzID0gdGVybWluYXRvcjtcblxuLyoqXG4gKiBUZXJtaW5hdGVzIGpvYnMgaW4gdGhlIGF0dGFjaGVkIHN0YXRlIGNvbnRleHRcbiAqXG4gKiBAdGhpcyAgQXN5bmNLaXRTdGF0ZSNcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIC0gZmluYWwgY2FsbGJhY2sgdG8gaW52b2tlIGFmdGVyIHRlcm1pbmF0aW9uXG4gKi9cbmZ1bmN0aW9uIHRlcm1pbmF0b3IoY2FsbGJhY2spXG57XG4gIGlmICghT2JqZWN0LmtleXModGhpcy5qb2JzKS5sZW5ndGgpXG4gIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBmYXN0IGZvcndhcmQgaXRlcmF0aW9uIGluZGV4XG4gIHRoaXMuaW5kZXggPSB0aGlzLnNpemU7XG5cbiAgLy8gYWJvcnQgam9ic1xuICBhYm9ydCh0aGlzKTtcblxuICAvLyBzZW5kIGJhY2sgcmVzdWx0cyB3ZSBoYXZlIHNvIGZhclxuICBhc3luYyhjYWxsYmFjaykobnVsbCwgdGhpcy5yZXN1bHRzKTtcbn1cbiIsInZhciBpdGVyYXRlICAgID0gcmVxdWlyZSgnLi9saWIvaXRlcmF0ZS5qcycpXG4gICwgaW5pdFN0YXRlICA9IHJlcXVpcmUoJy4vbGliL3N0YXRlLmpzJylcbiAgLCB0ZXJtaW5hdG9yID0gcmVxdWlyZSgnLi9saWIvdGVybWluYXRvci5qcycpXG4gIDtcblxuLy8gUHVibGljIEFQSVxubW9kdWxlLmV4cG9ydHMgPSBwYXJhbGxlbDtcblxuLyoqXG4gKiBSdW5zIGl0ZXJhdG9yIG92ZXIgcHJvdmlkZWQgYXJyYXkgZWxlbWVudHMgaW4gcGFyYWxsZWxcbiAqXG4gKiBAcGFyYW0gICB7YXJyYXl8b2JqZWN0fSBsaXN0IC0gYXJyYXkgb3Igb2JqZWN0IChuYW1lZCBsaXN0KSB0byBpdGVyYXRlIG92ZXJcbiAqIEBwYXJhbSAgIHtmdW5jdGlvbn0gaXRlcmF0b3IgLSBpdGVyYXRvciB0byBydW5cbiAqIEBwYXJhbSAgIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBpbnZva2VkIHdoZW4gYWxsIGVsZW1lbnRzIHByb2Nlc3NlZFxuICogQHJldHVybnMge2Z1bmN0aW9ufSAtIGpvYnMgdGVybWluYXRvclxuICovXG5mdW5jdGlvbiBwYXJhbGxlbChsaXN0LCBpdGVyYXRvciwgY2FsbGJhY2spXG57XG4gIHZhciBzdGF0ZSA9IGluaXRTdGF0ZShsaXN0KTtcblxuICB3aGlsZSAoc3RhdGUuaW5kZXggPCAoc3RhdGVbJ2tleWVkTGlzdCddIHx8IGxpc3QpLmxlbmd0aClcbiAge1xuICAgIGl0ZXJhdGUobGlzdCwgaXRlcmF0b3IsIHN0YXRlLCBmdW5jdGlvbihlcnJvciwgcmVzdWx0KVxuICAgIHtcbiAgICAgIGlmIChlcnJvcilcbiAgICAgIHtcbiAgICAgICAgY2FsbGJhY2soZXJyb3IsIHJlc3VsdCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gbG9va3MgbGlrZSBpdCdzIHRoZSBsYXN0IG9uZVxuICAgICAgaWYgKE9iamVjdC5rZXlzKHN0YXRlLmpvYnMpLmxlbmd0aCA9PT0gMClcbiAgICAgIHtcbiAgICAgICAgY2FsbGJhY2sobnVsbCwgc3RhdGUucmVzdWx0cyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHN0YXRlLmluZGV4Kys7XG4gIH1cblxuICByZXR1cm4gdGVybWluYXRvci5iaW5kKHN0YXRlLCBjYWxsYmFjayk7XG59XG4iLCJ2YXIgc2VyaWFsT3JkZXJlZCA9IHJlcXVpcmUoJy4vc2VyaWFsT3JkZXJlZC5qcycpO1xuXG4vLyBQdWJsaWMgQVBJXG5tb2R1bGUuZXhwb3J0cyA9IHNlcmlhbDtcblxuLyoqXG4gKiBSdW5zIGl0ZXJhdG9yIG92ZXIgcHJvdmlkZWQgYXJyYXkgZWxlbWVudHMgaW4gc2VyaWVzXG4gKlxuICogQHBhcmFtICAge2FycmF5fG9iamVjdH0gbGlzdCAtIGFycmF5IG9yIG9iamVjdCAobmFtZWQgbGlzdCkgdG8gaXRlcmF0ZSBvdmVyXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb259IGl0ZXJhdG9yIC0gaXRlcmF0b3IgdG8gcnVuXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb259IGNhbGxiYWNrIC0gaW52b2tlZCB3aGVuIGFsbCBlbGVtZW50cyBwcm9jZXNzZWRcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn0gLSBqb2JzIHRlcm1pbmF0b3JcbiAqL1xuZnVuY3Rpb24gc2VyaWFsKGxpc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaylcbntcbiAgcmV0dXJuIHNlcmlhbE9yZGVyZWQobGlzdCwgaXRlcmF0b3IsIG51bGwsIGNhbGxiYWNrKTtcbn1cbiIsInZhciBpdGVyYXRlICAgID0gcmVxdWlyZSgnLi9saWIvaXRlcmF0ZS5qcycpXG4gICwgaW5pdFN0YXRlICA9IHJlcXVpcmUoJy4vbGliL3N0YXRlLmpzJylcbiAgLCB0ZXJtaW5hdG9yID0gcmVxdWlyZSgnLi9saWIvdGVybWluYXRvci5qcycpXG4gIDtcblxuLy8gUHVibGljIEFQSVxubW9kdWxlLmV4cG9ydHMgPSBzZXJpYWxPcmRlcmVkO1xuLy8gc29ydGluZyBoZWxwZXJzXG5tb2R1bGUuZXhwb3J0cy5hc2NlbmRpbmcgID0gYXNjZW5kaW5nO1xubW9kdWxlLmV4cG9ydHMuZGVzY2VuZGluZyA9IGRlc2NlbmRpbmc7XG5cbi8qKlxuICogUnVucyBpdGVyYXRvciBvdmVyIHByb3ZpZGVkIHNvcnRlZCBhcnJheSBlbGVtZW50cyBpbiBzZXJpZXNcbiAqXG4gKiBAcGFyYW0gICB7YXJyYXl8b2JqZWN0fSBsaXN0IC0gYXJyYXkgb3Igb2JqZWN0IChuYW1lZCBsaXN0KSB0byBpdGVyYXRlIG92ZXJcbiAqIEBwYXJhbSAgIHtmdW5jdGlvbn0gaXRlcmF0b3IgLSBpdGVyYXRvciB0byBydW5cbiAqIEBwYXJhbSAgIHtmdW5jdGlvbn0gc29ydE1ldGhvZCAtIGN1c3RvbSBzb3J0IGZ1bmN0aW9uXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb259IGNhbGxiYWNrIC0gaW52b2tlZCB3aGVuIGFsbCBlbGVtZW50cyBwcm9jZXNzZWRcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn0gLSBqb2JzIHRlcm1pbmF0b3JcbiAqL1xuZnVuY3Rpb24gc2VyaWFsT3JkZXJlZChsaXN0LCBpdGVyYXRvciwgc29ydE1ldGhvZCwgY2FsbGJhY2spXG57XG4gIHZhciBzdGF0ZSA9IGluaXRTdGF0ZShsaXN0LCBzb3J0TWV0aG9kKTtcblxuICBpdGVyYXRlKGxpc3QsIGl0ZXJhdG9yLCBzdGF0ZSwgZnVuY3Rpb24gaXRlcmF0b3JIYW5kbGVyKGVycm9yLCByZXN1bHQpXG4gIHtcbiAgICBpZiAoZXJyb3IpXG4gICAge1xuICAgICAgY2FsbGJhY2soZXJyb3IsIHJlc3VsdCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3RhdGUuaW5kZXgrKztcblxuICAgIC8vIGFyZSB3ZSB0aGVyZSB5ZXQ/XG4gICAgaWYgKHN0YXRlLmluZGV4IDwgKHN0YXRlWydrZXllZExpc3QnXSB8fCBsaXN0KS5sZW5ndGgpXG4gICAge1xuICAgICAgaXRlcmF0ZShsaXN0LCBpdGVyYXRvciwgc3RhdGUsIGl0ZXJhdG9ySGFuZGxlcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gZG9uZSBoZXJlXG4gICAgY2FsbGJhY2sobnVsbCwgc3RhdGUucmVzdWx0cyk7XG4gIH0pO1xuXG4gIHJldHVybiB0ZXJtaW5hdG9yLmJpbmQoc3RhdGUsIGNhbGxiYWNrKTtcbn1cblxuLypcbiAqIC0tIFNvcnQgbWV0aG9kc1xuICovXG5cbi8qKlxuICogc29ydCBoZWxwZXIgdG8gc29ydCBhcnJheSBlbGVtZW50cyBpbiBhc2NlbmRpbmcgb3JkZXJcbiAqXG4gKiBAcGFyYW0gICB7bWl4ZWR9IGEgLSBhbiBpdGVtIHRvIGNvbXBhcmVcbiAqIEBwYXJhbSAgIHttaXhlZH0gYiAtIGFuIGl0ZW0gdG8gY29tcGFyZVxuICogQHJldHVybnMge251bWJlcn0gLSBjb21wYXJpc29uIHJlc3VsdFxuICovXG5mdW5jdGlvbiBhc2NlbmRpbmcoYSwgYilcbntcbiAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwO1xufVxuXG4vKipcbiAqIHNvcnQgaGVscGVyIHRvIHNvcnQgYXJyYXkgZWxlbWVudHMgaW4gZGVzY2VuZGluZyBvcmRlclxuICpcbiAqIEBwYXJhbSAgIHttaXhlZH0gYSAtIGFuIGl0ZW0gdG8gY29tcGFyZVxuICogQHBhcmFtICAge21peGVkfSBiIC0gYW4gaXRlbSB0byBjb21wYXJlXG4gKiBAcmV0dXJucyB7bnVtYmVyfSAtIGNvbXBhcmlzb24gcmVzdWx0XG4gKi9cbmZ1bmN0aW9uIGRlc2NlbmRpbmcoYSwgYilcbntcbiAgcmV0dXJuIC0xICogYXNjZW5kaW5nKGEsIGIpO1xufVxuIiwidmFyIENvbWJpbmVkU3RyZWFtID0gcmVxdWlyZSgnY29tYmluZWQtc3RyZWFtJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xudmFyIGh0dHAgPSByZXF1aXJlKCdodHRwJyk7XG52YXIgaHR0cHMgPSByZXF1aXJlKCdodHRwcycpO1xudmFyIHBhcnNlVXJsID0gcmVxdWlyZSgndXJsJykucGFyc2U7XG52YXIgZnMgPSByZXF1aXJlKCdmcycpO1xudmFyIFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpLlN0cmVhbTtcbnZhciBtaW1lID0gcmVxdWlyZSgnbWltZS10eXBlcycpO1xudmFyIGFzeW5ja2l0ID0gcmVxdWlyZSgnYXN5bmNraXQnKTtcbnZhciBwb3B1bGF0ZSA9IHJlcXVpcmUoJy4vcG9wdWxhdGUuanMnKTtcblxuLy8gUHVibGljIEFQSVxubW9kdWxlLmV4cG9ydHMgPSBGb3JtRGF0YTtcblxuLy8gbWFrZSBpdCBhIFN0cmVhbVxudXRpbC5pbmhlcml0cyhGb3JtRGF0YSwgQ29tYmluZWRTdHJlYW0pO1xuXG4vKipcbiAqIENyZWF0ZSByZWFkYWJsZSBcIm11bHRpcGFydC9mb3JtLWRhdGFcIiBzdHJlYW1zLlxuICogQ2FuIGJlIHVzZWQgdG8gc3VibWl0IGZvcm1zXG4gKiBhbmQgZmlsZSB1cGxvYWRzIHRvIG90aGVyIHdlYiBhcHBsaWNhdGlvbnMuXG4gKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIFByb3BlcnRpZXMgdG8gYmUgYWRkZWQvb3ZlcnJpZGVuIGZvciBGb3JtRGF0YSBhbmQgQ29tYmluZWRTdHJlYW1cbiAqL1xuZnVuY3Rpb24gRm9ybURhdGEob3B0aW9ucykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRm9ybURhdGEpKSB7XG4gICAgcmV0dXJuIG5ldyBGb3JtRGF0YShvcHRpb25zKTtcbiAgfVxuXG4gIHRoaXMuX292ZXJoZWFkTGVuZ3RoID0gMDtcbiAgdGhpcy5fdmFsdWVMZW5ndGggPSAwO1xuICB0aGlzLl92YWx1ZXNUb01lYXN1cmUgPSBbXTtcblxuICBDb21iaW5lZFN0cmVhbS5jYWxsKHRoaXMpO1xuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBmb3IgKHZhciBvcHRpb24gaW4gb3B0aW9ucykge1xuICAgIHRoaXNbb3B0aW9uXSA9IG9wdGlvbnNbb3B0aW9uXTtcbiAgfVxufVxuXG5Gb3JtRGF0YS5MSU5FX0JSRUFLID0gJ1xcclxcbic7XG5Gb3JtRGF0YS5ERUZBVUxUX0NPTlRFTlRfVFlQRSA9ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nO1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24oZmllbGQsIHZhbHVlLCBvcHRpb25zKSB7XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgLy8gYWxsb3cgZmlsZW5hbWUgYXMgc2luZ2xlIG9wdGlvblxuICBpZiAodHlwZW9mIG9wdGlvbnMgPT0gJ3N0cmluZycpIHtcbiAgICBvcHRpb25zID0ge2ZpbGVuYW1lOiBvcHRpb25zfTtcbiAgfVxuXG4gIHZhciBhcHBlbmQgPSBDb21iaW5lZFN0cmVhbS5wcm90b3R5cGUuYXBwZW5kLmJpbmQodGhpcyk7XG5cbiAgLy8gYWxsIHRoYXQgc3RyZWFteSBidXNpbmVzcyBjYW4ndCBoYW5kbGUgbnVtYmVyc1xuICBpZiAodHlwZW9mIHZhbHVlID09ICdudW1iZXInKSB7XG4gICAgdmFsdWUgPSAnJyArIHZhbHVlO1xuICB9XG5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZlbGl4Z2Uvbm9kZS1mb3JtLWRhdGEvaXNzdWVzLzM4XG4gIGlmICh1dGlsLmlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gUGxlYXNlIGNvbnZlcnQgeW91ciBhcnJheSBpbnRvIHN0cmluZ1xuICAgIC8vIHRoZSB3YXkgd2ViIHNlcnZlciBleHBlY3RzIGl0XG4gICAgdGhpcy5fZXJyb3IobmV3IEVycm9yKCdBcnJheXMgYXJlIG5vdCBzdXBwb3J0ZWQuJykpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBoZWFkZXIgPSB0aGlzLl9tdWx0aVBhcnRIZWFkZXIoZmllbGQsIHZhbHVlLCBvcHRpb25zKTtcbiAgdmFyIGZvb3RlciA9IHRoaXMuX211bHRpUGFydEZvb3RlcigpO1xuXG4gIGFwcGVuZChoZWFkZXIpO1xuICBhcHBlbmQodmFsdWUpO1xuICBhcHBlbmQoZm9vdGVyKTtcblxuICAvLyBwYXNzIGFsb25nIG9wdGlvbnMua25vd25MZW5ndGhcbiAgdGhpcy5fdHJhY2tMZW5ndGgoaGVhZGVyLCB2YWx1ZSwgb3B0aW9ucyk7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuX3RyYWNrTGVuZ3RoID0gZnVuY3Rpb24oaGVhZGVyLCB2YWx1ZSwgb3B0aW9ucykge1xuICB2YXIgdmFsdWVMZW5ndGggPSAwO1xuXG4gIC8vIHVzZWQgdy8gZ2V0TGVuZ3RoU3luYygpLCB3aGVuIGxlbmd0aCBpcyBrbm93bi5cbiAgLy8gZS5nLiBmb3Igc3RyZWFtaW5nIGRpcmVjdGx5IGZyb20gYSByZW1vdGUgc2VydmVyLFxuICAvLyB3LyBhIGtub3duIGZpbGUgYSBzaXplLCBhbmQgbm90IHdhbnRpbmcgdG8gd2FpdCBmb3JcbiAgLy8gaW5jb21pbmcgZmlsZSB0byBmaW5pc2ggdG8gZ2V0IGl0cyBzaXplLlxuICBpZiAob3B0aW9ucy5rbm93bkxlbmd0aCAhPSBudWxsKSB7XG4gICAgdmFsdWVMZW5ndGggKz0gK29wdGlvbnMua25vd25MZW5ndGg7XG4gIH0gZWxzZSBpZiAoQnVmZmVyLmlzQnVmZmVyKHZhbHVlKSkge1xuICAgIHZhbHVlTGVuZ3RoID0gdmFsdWUubGVuZ3RoO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICB2YWx1ZUxlbmd0aCA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHZhbHVlKTtcbiAgfVxuXG4gIHRoaXMuX3ZhbHVlTGVuZ3RoICs9IHZhbHVlTGVuZ3RoO1xuXG4gIC8vIEBjaGVjayB3aHkgYWRkIENSTEY/IGRvZXMgdGhpcyBhY2NvdW50IGZvciBjdXN0b20vbXVsdGlwbGUgQ1JMRnM/XG4gIHRoaXMuX292ZXJoZWFkTGVuZ3RoICs9XG4gICAgQnVmZmVyLmJ5dGVMZW5ndGgoaGVhZGVyKSArXG4gICAgRm9ybURhdGEuTElORV9CUkVBSy5sZW5ndGg7XG5cbiAgLy8gZW1wdHkgb3IgZWl0aGVyIGRvZXNuJ3QgaGF2ZSBwYXRoIG9yIG5vdCBhbiBodHRwIHJlc3BvbnNlIG9yIG5vdCBhIHN0cmVhbVxuICBpZiAoIXZhbHVlIHx8ICggIXZhbHVlLnBhdGggJiYgISh2YWx1ZS5yZWFkYWJsZSAmJiB2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnaHR0cFZlcnNpb24nKSkgJiYgISh2YWx1ZSBpbnN0YW5jZW9mIFN0cmVhbSkpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gbm8gbmVlZCB0byBib3RoZXIgd2l0aCB0aGUgbGVuZ3RoXG4gIGlmICghb3B0aW9ucy5rbm93bkxlbmd0aCkge1xuICAgIHRoaXMuX3ZhbHVlc1RvTWVhc3VyZS5wdXNoKHZhbHVlKTtcbiAgfVxufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl9sZW5ndGhSZXRyaWV2ZXIgPSBmdW5jdGlvbih2YWx1ZSwgY2FsbGJhY2spIHtcblxuICBpZiAodmFsdWUuaGFzT3duUHJvcGVydHkoJ2ZkJykpIHtcblxuICAgIC8vIHRha2UgcmVhZCByYW5nZSBpbnRvIGEgYWNjb3VudFxuICAgIC8vIGBlbmRgID0gSW5maW5pdHkg4oCTPiByZWFkIGZpbGUgdGlsbCB0aGUgZW5kXG4gICAgLy9cbiAgICAvLyBUT0RPOiBMb29rcyBsaWtlIHRoZXJlIGlzIGJ1ZyBpbiBOb2RlIGZzLmNyZWF0ZVJlYWRTdHJlYW1cbiAgICAvLyBpdCBkb2Vzbid0IHJlc3BlY3QgYGVuZGAgb3B0aW9ucyB3aXRob3V0IGBzdGFydGAgb3B0aW9uc1xuICAgIC8vIEZpeCBpdCB3aGVuIG5vZGUgZml4ZXMgaXQuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2pveWVudC9ub2RlL2lzc3Vlcy83ODE5XG4gICAgaWYgKHZhbHVlLmVuZCAhPSB1bmRlZmluZWQgJiYgdmFsdWUuZW5kICE9IEluZmluaXR5ICYmIHZhbHVlLnN0YXJ0ICE9IHVuZGVmaW5lZCkge1xuXG4gICAgICAvLyB3aGVuIGVuZCBzcGVjaWZpZWRcbiAgICAgIC8vIG5vIG5lZWQgdG8gY2FsY3VsYXRlIHJhbmdlXG4gICAgICAvLyBpbmNsdXNpdmUsIHN0YXJ0cyB3aXRoIDBcbiAgICAgIGNhbGxiYWNrKG51bGwsIHZhbHVlLmVuZCArIDEgLSAodmFsdWUuc3RhcnQgPyB2YWx1ZS5zdGFydCA6IDApKTtcblxuICAgIC8vIG5vdCB0aGF0IGZhc3Qgc25vb3B5XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHN0aWxsIG5lZWQgdG8gZmV0Y2ggZmlsZSBzaXplIGZyb20gZnNcbiAgICAgIGZzLnN0YXQodmFsdWUucGF0aCwgZnVuY3Rpb24oZXJyLCBzdGF0KSB7XG5cbiAgICAgICAgdmFyIGZpbGVTaXplO1xuXG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHVwZGF0ZSBmaW5hbCBzaXplIGJhc2VkIG9uIHRoZSByYW5nZSBvcHRpb25zXG4gICAgICAgIGZpbGVTaXplID0gc3RhdC5zaXplIC0gKHZhbHVlLnN0YXJ0ID8gdmFsdWUuc3RhcnQgOiAwKTtcbiAgICAgICAgY2FsbGJhY2sobnVsbCwgZmlsZVNpemUpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gIC8vIG9yIGh0dHAgcmVzcG9uc2VcbiAgfSBlbHNlIGlmICh2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnaHR0cFZlcnNpb24nKSkge1xuICAgIGNhbGxiYWNrKG51bGwsICt2YWx1ZS5oZWFkZXJzWydjb250ZW50LWxlbmd0aCddKTtcblxuICAvLyBvciByZXF1ZXN0IHN0cmVhbSBodHRwOi8vZ2l0aHViLmNvbS9taWtlYWwvcmVxdWVzdFxuICB9IGVsc2UgaWYgKHZhbHVlLmhhc093blByb3BlcnR5KCdodHRwTW9kdWxlJykpIHtcbiAgICAvLyB3YWl0IHRpbGwgcmVzcG9uc2UgY29tZSBiYWNrXG4gICAgdmFsdWUub24oJ3Jlc3BvbnNlJywgZnVuY3Rpb24ocmVzcG9uc2UpIHtcbiAgICAgIHZhbHVlLnBhdXNlKCk7XG4gICAgICBjYWxsYmFjayhudWxsLCArcmVzcG9uc2UuaGVhZGVyc1snY29udGVudC1sZW5ndGgnXSk7XG4gICAgfSk7XG4gICAgdmFsdWUucmVzdW1lKCk7XG5cbiAgLy8gc29tZXRoaW5nIGVsc2VcbiAgfSBlbHNlIHtcbiAgICBjYWxsYmFjaygnVW5rbm93biBzdHJlYW0nKTtcbiAgfVxufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl9tdWx0aVBhcnRIZWFkZXIgPSBmdW5jdGlvbihmaWVsZCwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgLy8gY3VzdG9tIGhlYWRlciBzcGVjaWZpZWQgKGFzIHN0cmluZyk/XG4gIC8vIGl0IGJlY29tZXMgcmVzcG9uc2libGUgZm9yIGJvdW5kYXJ5XG4gIC8vIChlLmcuIHRvIGhhbmRsZSBleHRyYSBDUkxGcyBvbiAuTkVUIHNlcnZlcnMpXG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5oZWFkZXIgPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5oZWFkZXI7XG4gIH1cblxuICB2YXIgY29udGVudERpc3Bvc2l0aW9uID0gdGhpcy5fZ2V0Q29udGVudERpc3Bvc2l0aW9uKHZhbHVlLCBvcHRpb25zKTtcbiAgdmFyIGNvbnRlbnRUeXBlID0gdGhpcy5fZ2V0Q29udGVudFR5cGUodmFsdWUsIG9wdGlvbnMpO1xuXG4gIHZhciBjb250ZW50cyA9ICcnO1xuICB2YXIgaGVhZGVycyAgPSB7XG4gICAgLy8gYWRkIGN1c3RvbSBkaXNwb3NpdGlvbiBhcyB0aGlyZCBlbGVtZW50IG9yIGtlZXAgaXQgdHdvIGVsZW1lbnRzIGlmIG5vdFxuICAgICdDb250ZW50LURpc3Bvc2l0aW9uJzogWydmb3JtLWRhdGEnLCAnbmFtZT1cIicgKyBmaWVsZCArICdcIiddLmNvbmNhdChjb250ZW50RGlzcG9zaXRpb24gfHwgW10pLFxuICAgIC8vIGlmIG5vIGNvbnRlbnQgdHlwZS4gYWxsb3cgaXQgdG8gYmUgZW1wdHkgYXJyYXlcbiAgICAnQ29udGVudC1UeXBlJzogW10uY29uY2F0KGNvbnRlbnRUeXBlIHx8IFtdKVxuICB9O1xuXG4gIC8vIGFsbG93IGN1c3RvbSBoZWFkZXJzLlxuICBpZiAodHlwZW9mIG9wdGlvbnMuaGVhZGVyID09ICdvYmplY3QnKSB7XG4gICAgcG9wdWxhdGUoaGVhZGVycywgb3B0aW9ucy5oZWFkZXIpO1xuICB9XG5cbiAgdmFyIGhlYWRlcjtcbiAgZm9yICh2YXIgcHJvcCBpbiBoZWFkZXJzKSB7XG4gICAgaWYgKCFoZWFkZXJzLmhhc093blByb3BlcnR5KHByb3ApKSBjb250aW51ZTtcbiAgICBoZWFkZXIgPSBoZWFkZXJzW3Byb3BdO1xuXG4gICAgLy8gc2tpcCBudWxsaXNoIGhlYWRlcnMuXG4gICAgaWYgKGhlYWRlciA9PSBudWxsKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBjb252ZXJ0IGFsbCBoZWFkZXJzIHRvIGFycmF5cy5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoaGVhZGVyKSkge1xuICAgICAgaGVhZGVyID0gW2hlYWRlcl07XG4gICAgfVxuXG4gICAgLy8gYWRkIG5vbi1lbXB0eSBoZWFkZXJzLlxuICAgIGlmIChoZWFkZXIubGVuZ3RoKSB7XG4gICAgICBjb250ZW50cyArPSBwcm9wICsgJzogJyArIGhlYWRlci5qb2luKCc7ICcpICsgRm9ybURhdGEuTElORV9CUkVBSztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gJy0tJyArIHRoaXMuZ2V0Qm91bmRhcnkoKSArIEZvcm1EYXRhLkxJTkVfQlJFQUsgKyBjb250ZW50cyArIEZvcm1EYXRhLkxJTkVfQlJFQUs7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuX2dldENvbnRlbnREaXNwb3NpdGlvbiA9IGZ1bmN0aW9uKHZhbHVlLCBvcHRpb25zKSB7XG5cbiAgdmFyIGZpbGVuYW1lXG4gICAgLCBjb250ZW50RGlzcG9zaXRpb25cbiAgICA7XG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zLmZpbGVwYXRoID09PSAnc3RyaW5nJykge1xuICAgIC8vIGN1c3RvbSBmaWxlcGF0aCBmb3IgcmVsYXRpdmUgcGF0aHNcbiAgICBmaWxlbmFtZSA9IHBhdGgubm9ybWFsaXplKG9wdGlvbnMuZmlsZXBhdGgpLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgfSBlbHNlIGlmIChvcHRpb25zLmZpbGVuYW1lIHx8IHZhbHVlLm5hbWUgfHwgdmFsdWUucGF0aCkge1xuICAgIC8vIGN1c3RvbSBmaWxlbmFtZSB0YWtlIHByZWNlZGVuY2VcbiAgICAvLyBmb3JtaWRhYmxlIGFuZCB0aGUgYnJvd3NlciBhZGQgYSBuYW1lIHByb3BlcnR5XG4gICAgLy8gZnMtIGFuZCByZXF1ZXN0LSBzdHJlYW1zIGhhdmUgcGF0aCBwcm9wZXJ0eVxuICAgIGZpbGVuYW1lID0gcGF0aC5iYXNlbmFtZShvcHRpb25zLmZpbGVuYW1lIHx8IHZhbHVlLm5hbWUgfHwgdmFsdWUucGF0aCk7XG4gIH0gZWxzZSBpZiAodmFsdWUucmVhZGFibGUgJiYgdmFsdWUuaGFzT3duUHJvcGVydHkoJ2h0dHBWZXJzaW9uJykpIHtcbiAgICAvLyBvciB0cnkgaHR0cCByZXNwb25zZVxuICAgIGZpbGVuYW1lID0gcGF0aC5iYXNlbmFtZSh2YWx1ZS5jbGllbnQuX2h0dHBNZXNzYWdlLnBhdGggfHwgJycpO1xuICB9XG5cbiAgaWYgKGZpbGVuYW1lKSB7XG4gICAgY29udGVudERpc3Bvc2l0aW9uID0gJ2ZpbGVuYW1lPVwiJyArIGZpbGVuYW1lICsgJ1wiJztcbiAgfVxuXG4gIHJldHVybiBjb250ZW50RGlzcG9zaXRpb247XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuX2dldENvbnRlbnRUeXBlID0gZnVuY3Rpb24odmFsdWUsIG9wdGlvbnMpIHtcblxuICAvLyB1c2UgY3VzdG9tIGNvbnRlbnQtdHlwZSBhYm92ZSBhbGxcbiAgdmFyIGNvbnRlbnRUeXBlID0gb3B0aW9ucy5jb250ZW50VHlwZTtcblxuICAvLyBvciB0cnkgYG5hbWVgIGZyb20gZm9ybWlkYWJsZSwgYnJvd3NlclxuICBpZiAoIWNvbnRlbnRUeXBlICYmIHZhbHVlLm5hbWUpIHtcbiAgICBjb250ZW50VHlwZSA9IG1pbWUubG9va3VwKHZhbHVlLm5hbWUpO1xuICB9XG5cbiAgLy8gb3IgdHJ5IGBwYXRoYCBmcm9tIGZzLSwgcmVxdWVzdC0gc3RyZWFtc1xuICBpZiAoIWNvbnRlbnRUeXBlICYmIHZhbHVlLnBhdGgpIHtcbiAgICBjb250ZW50VHlwZSA9IG1pbWUubG9va3VwKHZhbHVlLnBhdGgpO1xuICB9XG5cbiAgLy8gb3IgaWYgaXQncyBodHRwLXJlcG9uc2VcbiAgaWYgKCFjb250ZW50VHlwZSAmJiB2YWx1ZS5yZWFkYWJsZSAmJiB2YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnaHR0cFZlcnNpb24nKSkge1xuICAgIGNvbnRlbnRUeXBlID0gdmFsdWUuaGVhZGVyc1snY29udGVudC10eXBlJ107XG4gIH1cblxuICAvLyBvciBndWVzcyBpdCBmcm9tIHRoZSBmaWxlcGF0aCBvciBmaWxlbmFtZVxuICBpZiAoIWNvbnRlbnRUeXBlICYmIChvcHRpb25zLmZpbGVwYXRoIHx8IG9wdGlvbnMuZmlsZW5hbWUpKSB7XG4gICAgY29udGVudFR5cGUgPSBtaW1lLmxvb2t1cChvcHRpb25zLmZpbGVwYXRoIHx8IG9wdGlvbnMuZmlsZW5hbWUpO1xuICB9XG5cbiAgLy8gZmFsbGJhY2sgdG8gdGhlIGRlZmF1bHQgY29udGVudCB0eXBlIGlmIGB2YWx1ZWAgaXMgbm90IHNpbXBsZSB2YWx1ZVxuICBpZiAoIWNvbnRlbnRUeXBlICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jykge1xuICAgIGNvbnRlbnRUeXBlID0gRm9ybURhdGEuREVGQVVMVF9DT05URU5UX1RZUEU7XG4gIH1cblxuICByZXR1cm4gY29udGVudFR5cGU7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuX211bHRpUGFydEZvb3RlciA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gZnVuY3Rpb24obmV4dCkge1xuICAgIHZhciBmb290ZXIgPSBGb3JtRGF0YS5MSU5FX0JSRUFLO1xuXG4gICAgdmFyIGxhc3RQYXJ0ID0gKHRoaXMuX3N0cmVhbXMubGVuZ3RoID09PSAwKTtcbiAgICBpZiAobGFzdFBhcnQpIHtcbiAgICAgIGZvb3RlciArPSB0aGlzLl9sYXN0Qm91bmRhcnkoKTtcbiAgICB9XG5cbiAgICBuZXh0KGZvb3Rlcik7XG4gIH0uYmluZCh0aGlzKTtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5fbGFzdEJvdW5kYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAnLS0nICsgdGhpcy5nZXRCb3VuZGFyeSgpICsgJy0tJyArIEZvcm1EYXRhLkxJTkVfQlJFQUs7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuZ2V0SGVhZGVycyA9IGZ1bmN0aW9uKHVzZXJIZWFkZXJzKSB7XG4gIHZhciBoZWFkZXI7XG4gIHZhciBmb3JtSGVhZGVycyA9IHtcbiAgICAnY29udGVudC10eXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PScgKyB0aGlzLmdldEJvdW5kYXJ5KClcbiAgfTtcblxuICBmb3IgKGhlYWRlciBpbiB1c2VySGVhZGVycykge1xuICAgIGlmICh1c2VySGVhZGVycy5oYXNPd25Qcm9wZXJ0eShoZWFkZXIpKSB7XG4gICAgICBmb3JtSGVhZGVyc1toZWFkZXIudG9Mb3dlckNhc2UoKV0gPSB1c2VySGVhZGVyc1toZWFkZXJdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmb3JtSGVhZGVycztcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5zZXRCb3VuZGFyeSA9IGZ1bmN0aW9uKGJvdW5kYXJ5KSB7XG4gIHRoaXMuX2JvdW5kYXJ5ID0gYm91bmRhcnk7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuZ2V0Qm91bmRhcnkgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCF0aGlzLl9ib3VuZGFyeSkge1xuICAgIHRoaXMuX2dlbmVyYXRlQm91bmRhcnkoKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLl9ib3VuZGFyeTtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5nZXRCdWZmZXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGRhdGFCdWZmZXIgPSBuZXcgQnVmZmVyLmFsbG9jKCAwICk7XG4gIHZhciBib3VuZGFyeSA9IHRoaXMuZ2V0Qm91bmRhcnkoKTtcblxuICAvLyBDcmVhdGUgdGhlIGZvcm0gY29udGVudC4gQWRkIExpbmUgYnJlYWtzIHRvIHRoZSBlbmQgb2YgZGF0YS5cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHRoaXMuX3N0cmVhbXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuX3N0cmVhbXNbaV0gIT09ICdmdW5jdGlvbicpIHtcblxuICAgICAgLy8gQWRkIGNvbnRlbnQgdG8gdGhlIGJ1ZmZlci5cbiAgICAgIGlmKEJ1ZmZlci5pc0J1ZmZlcih0aGlzLl9zdHJlYW1zW2ldKSkge1xuICAgICAgICBkYXRhQnVmZmVyID0gQnVmZmVyLmNvbmNhdCggW2RhdGFCdWZmZXIsIHRoaXMuX3N0cmVhbXNbaV1dKTtcbiAgICAgIH1lbHNlIHtcbiAgICAgICAgZGF0YUJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoIFtkYXRhQnVmZmVyLCBCdWZmZXIuZnJvbSh0aGlzLl9zdHJlYW1zW2ldKV0pO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgYnJlYWsgYWZ0ZXIgY29udGVudC5cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5fc3RyZWFtc1tpXSAhPT0gJ3N0cmluZycgfHwgdGhpcy5fc3RyZWFtc1tpXS5zdWJzdHJpbmcoIDIsIGJvdW5kYXJ5Lmxlbmd0aCArIDIgKSAhPT0gYm91bmRhcnkpIHtcbiAgICAgICAgZGF0YUJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoIFtkYXRhQnVmZmVyLCBCdWZmZXIuZnJvbShGb3JtRGF0YS5MSU5FX0JSRUFLKV0gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBBZGQgdGhlIGZvb3RlciBhbmQgcmV0dXJuIHRoZSBCdWZmZXIgb2JqZWN0LlxuICByZXR1cm4gQnVmZmVyLmNvbmNhdCggW2RhdGFCdWZmZXIsIEJ1ZmZlci5mcm9tKHRoaXMuX2xhc3RCb3VuZGFyeSgpKV0gKTtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5fZ2VuZXJhdGVCb3VuZGFyeSA9IGZ1bmN0aW9uKCkge1xuICAvLyBUaGlzIGdlbmVyYXRlcyBhIDUwIGNoYXJhY3RlciBib3VuZGFyeSBzaW1pbGFyIHRvIHRob3NlIHVzZWQgYnkgRmlyZWZveC5cbiAgLy8gVGhleSBhcmUgb3B0aW1pemVkIGZvciBib3llci1tb29yZSBwYXJzaW5nLlxuICB2YXIgYm91bmRhcnkgPSAnLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDI0OyBpKyspIHtcbiAgICBib3VuZGFyeSArPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMCkudG9TdHJpbmcoMTYpO1xuICB9XG5cbiAgdGhpcy5fYm91bmRhcnkgPSBib3VuZGFyeTtcbn07XG5cbi8vIE5vdGU6IGdldExlbmd0aFN5bmMgRE9FU04nVCBjYWxjdWxhdGUgc3RyZWFtcyBsZW5ndGhcbi8vIEFzIHdvcmthcm91bmQgb25lIGNhbiBjYWxjdWxhdGUgZmlsZSBzaXplIG1hbnVhbGx5XG4vLyBhbmQgYWRkIGl0IGFzIGtub3duTGVuZ3RoIG9wdGlvblxuRm9ybURhdGEucHJvdG90eXBlLmdldExlbmd0aFN5bmMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGtub3duTGVuZ3RoID0gdGhpcy5fb3ZlcmhlYWRMZW5ndGggKyB0aGlzLl92YWx1ZUxlbmd0aDtcblxuICAvLyBEb24ndCBnZXQgY29uZnVzZWQsIHRoZXJlIGFyZSAzIFwiaW50ZXJuYWxcIiBzdHJlYW1zIGZvciBlYWNoIGtleXZhbCBwYWlyXG4gIC8vIHNvIGl0IGJhc2ljYWxseSBjaGVja3MgaWYgdGhlcmUgaXMgYW55IHZhbHVlIGFkZGVkIHRvIHRoZSBmb3JtXG4gIGlmICh0aGlzLl9zdHJlYW1zLmxlbmd0aCkge1xuICAgIGtub3duTGVuZ3RoICs9IHRoaXMuX2xhc3RCb3VuZGFyeSgpLmxlbmd0aDtcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3JtLWRhdGEvZm9ybS1kYXRhL2lzc3Vlcy80MFxuICBpZiAoIXRoaXMuaGFzS25vd25MZW5ndGgoKSkge1xuICAgIC8vIFNvbWUgYXN5bmMgbGVuZ3RoIHJldHJpZXZlcnMgYXJlIHByZXNlbnRcbiAgICAvLyB0aGVyZWZvcmUgc3luY2hyb25vdXMgbGVuZ3RoIGNhbGN1bGF0aW9uIGlzIGZhbHNlLlxuICAgIC8vIFBsZWFzZSB1c2UgZ2V0TGVuZ3RoKGNhbGxiYWNrKSB0byBnZXQgcHJvcGVyIGxlbmd0aFxuICAgIHRoaXMuX2Vycm9yKG5ldyBFcnJvcignQ2Fubm90IGNhbGN1bGF0ZSBwcm9wZXIgbGVuZ3RoIGluIHN5bmNocm9ub3VzIHdheS4nKSk7XG4gIH1cblxuICByZXR1cm4ga25vd25MZW5ndGg7XG59O1xuXG4vLyBQdWJsaWMgQVBJIHRvIGNoZWNrIGlmIGxlbmd0aCBvZiBhZGRlZCB2YWx1ZXMgaXMga25vd25cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3JtLWRhdGEvZm9ybS1kYXRhL2lzc3Vlcy8xOTZcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3JtLWRhdGEvZm9ybS1kYXRhL2lzc3Vlcy8yNjJcbkZvcm1EYXRhLnByb3RvdHlwZS5oYXNLbm93bkxlbmd0aCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaGFzS25vd25MZW5ndGggPSB0cnVlO1xuXG4gIGlmICh0aGlzLl92YWx1ZXNUb01lYXN1cmUubGVuZ3RoKSB7XG4gICAgaGFzS25vd25MZW5ndGggPSBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBoYXNLbm93bkxlbmd0aDtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5nZXRMZW5ndGggPSBmdW5jdGlvbihjYikge1xuICB2YXIga25vd25MZW5ndGggPSB0aGlzLl9vdmVyaGVhZExlbmd0aCArIHRoaXMuX3ZhbHVlTGVuZ3RoO1xuXG4gIGlmICh0aGlzLl9zdHJlYW1zLmxlbmd0aCkge1xuICAgIGtub3duTGVuZ3RoICs9IHRoaXMuX2xhc3RCb3VuZGFyeSgpLmxlbmd0aDtcbiAgfVxuXG4gIGlmICghdGhpcy5fdmFsdWVzVG9NZWFzdXJlLmxlbmd0aCkge1xuICAgIHByb2Nlc3MubmV4dFRpY2soY2IuYmluZCh0aGlzLCBudWxsLCBrbm93bkxlbmd0aCkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGFzeW5ja2l0LnBhcmFsbGVsKHRoaXMuX3ZhbHVlc1RvTWVhc3VyZSwgdGhpcy5fbGVuZ3RoUmV0cmlldmVyLCBmdW5jdGlvbihlcnIsIHZhbHVlcykge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGNiKGVycik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFsdWVzLmZvckVhY2goZnVuY3Rpb24obGVuZ3RoKSB7XG4gICAgICBrbm93bkxlbmd0aCArPSBsZW5ndGg7XG4gICAgfSk7XG5cbiAgICBjYihudWxsLCBrbm93bkxlbmd0aCk7XG4gIH0pO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLnN1Ym1pdCA9IGZ1bmN0aW9uKHBhcmFtcywgY2IpIHtcbiAgdmFyIHJlcXVlc3RcbiAgICAsIG9wdGlvbnNcbiAgICAsIGRlZmF1bHRzID0ge21ldGhvZDogJ3Bvc3QnfVxuICAgIDtcblxuICAvLyBwYXJzZSBwcm92aWRlZCB1cmwgaWYgaXQncyBzdHJpbmdcbiAgLy8gb3IgdHJlYXQgaXQgYXMgb3B0aW9ucyBvYmplY3RcbiAgaWYgKHR5cGVvZiBwYXJhbXMgPT0gJ3N0cmluZycpIHtcblxuICAgIHBhcmFtcyA9IHBhcnNlVXJsKHBhcmFtcyk7XG4gICAgb3B0aW9ucyA9IHBvcHVsYXRlKHtcbiAgICAgIHBvcnQ6IHBhcmFtcy5wb3J0LFxuICAgICAgcGF0aDogcGFyYW1zLnBhdGhuYW1lLFxuICAgICAgaG9zdDogcGFyYW1zLmhvc3RuYW1lLFxuICAgICAgcHJvdG9jb2w6IHBhcmFtcy5wcm90b2NvbFxuICAgIH0sIGRlZmF1bHRzKTtcblxuICAvLyB1c2UgY3VzdG9tIHBhcmFtc1xuICB9IGVsc2Uge1xuXG4gICAgb3B0aW9ucyA9IHBvcHVsYXRlKHBhcmFtcywgZGVmYXVsdHMpO1xuICAgIC8vIGlmIG5vIHBvcnQgcHJvdmlkZWQgdXNlIGRlZmF1bHQgb25lXG4gICAgaWYgKCFvcHRpb25zLnBvcnQpIHtcbiAgICAgIG9wdGlvbnMucG9ydCA9IG9wdGlvbnMucHJvdG9jb2wgPT0gJ2h0dHBzOicgPyA0NDMgOiA4MDtcbiAgICB9XG4gIH1cblxuICAvLyBwdXQgdGhhdCBnb29kIGNvZGUgaW4gZ2V0SGVhZGVycyB0byBzb21lIHVzZVxuICBvcHRpb25zLmhlYWRlcnMgPSB0aGlzLmdldEhlYWRlcnMocGFyYW1zLmhlYWRlcnMpO1xuXG4gIC8vIGh0dHBzIGlmIHNwZWNpZmllZCwgZmFsbGJhY2sgdG8gaHR0cCBpbiBhbnkgb3RoZXIgY2FzZVxuICBpZiAob3B0aW9ucy5wcm90b2NvbCA9PSAnaHR0cHM6Jykge1xuICAgIHJlcXVlc3QgPSBodHRwcy5yZXF1ZXN0KG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIHJlcXVlc3QgPSBodHRwLnJlcXVlc3Qob3B0aW9ucyk7XG4gIH1cblxuICAvLyBnZXQgY29udGVudCBsZW5ndGggYW5kIGZpcmUgYXdheVxuICB0aGlzLmdldExlbmd0aChmdW5jdGlvbihlcnIsIGxlbmd0aCkge1xuICAgIGlmIChlcnIgJiYgZXJyICE9PSAnVW5rbm93biBzdHJlYW0nKSB7XG4gICAgICB0aGlzLl9lcnJvcihlcnIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGFkZCBjb250ZW50IGxlbmd0aFxuICAgIGlmIChsZW5ndGgpIHtcbiAgICAgIHJlcXVlc3Quc2V0SGVhZGVyKCdDb250ZW50LUxlbmd0aCcsIGxlbmd0aCk7XG4gICAgfVxuXG4gICAgdGhpcy5waXBlKHJlcXVlc3QpO1xuICAgIGlmIChjYikge1xuICAgICAgdmFyIG9uUmVzcG9uc2U7XG5cbiAgICAgIHZhciBjYWxsYmFjayA9IGZ1bmN0aW9uIChlcnJvciwgcmVzcG9uY2UpIHtcbiAgICAgICAgcmVxdWVzdC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBjYWxsYmFjayk7XG4gICAgICAgIHJlcXVlc3QucmVtb3ZlTGlzdGVuZXIoJ3Jlc3BvbnNlJywgb25SZXNwb25zZSk7XG5cbiAgICAgICAgcmV0dXJuIGNiLmNhbGwodGhpcywgZXJyb3IsIHJlc3BvbmNlKTtcbiAgICAgIH07XG5cbiAgICAgIG9uUmVzcG9uc2UgPSBjYWxsYmFjay5iaW5kKHRoaXMsIG51bGwpO1xuXG4gICAgICByZXF1ZXN0Lm9uKCdlcnJvcicsIGNhbGxiYWNrKTtcbiAgICAgIHJlcXVlc3Qub24oJ3Jlc3BvbnNlJywgb25SZXNwb25zZSk7XG4gICAgfVxuICB9LmJpbmQodGhpcykpO1xuXG4gIHJldHVybiByZXF1ZXN0O1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl9lcnJvciA9IGZ1bmN0aW9uKGVycikge1xuICBpZiAoIXRoaXMuZXJyb3IpIHtcbiAgICB0aGlzLmVycm9yID0gZXJyO1xuICAgIHRoaXMucGF1c2UoKTtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgfVxufTtcblxuRm9ybURhdGEucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJ1tvYmplY3QgRm9ybURhdGFdJztcbn07XG4iLCIvLyBwb3B1bGF0ZXMgbWlzc2luZyB2YWx1ZXNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZHN0LCBzcmMpIHtcblxuICBPYmplY3Qua2V5cyhzcmMpLmZvckVhY2goZnVuY3Rpb24ocHJvcClcbiAge1xuICAgIGRzdFtwcm9wXSA9IGRzdFtwcm9wXSB8fCBzcmNbcHJvcF07XG4gIH0pO1xuXG4gIHJldHVybiBkc3Q7XG59O1xuIiwiaW1wb3J0IHtcbiAgRE5TUmVjb3JkLFxuICBEb21haW5EYXRhLFxuICBEb21haW5EeW5hbWljUHJvcHNUeXBlLFxuICBURG9tYWluXG59IGZyb20gJy4uLy4uL1R5cGVzL0RvbWFpbnMnO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvbWFpbiBpbXBsZW1lbnRzIFREb21haW4ge1xuICBuYW1lOiBzdHJpbmc7XG4gIHJlcXVpcmVfdGxzOiBib29sZWFuO1xuICBza2lwX3ZlcmlmaWNhdGlvbjogYm9vbGVhbjtcbiAgc3RhdGU6IHN0cmluZztcbiAgd2lsZGNhcmQ6IGJvb2xlYW47XG4gIHNwYW1fYWN0aW9uOiBzdHJpbmc7XG4gIGNyZWF0ZWRfYXQ6IERhdGU7XG4gIHNtdHBfcGFzc3dvcmQ6IHN0cmluZztcbiAgc210cF9sb2dpbjogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIHJlY2VpdmluZ19kbnNfcmVjb3JkczogRE5TUmVjb3JkW10gfCBudWxsO1xuICBzZW5kaW5nX2Ruc19yZWNvcmRzOiBETlNSZWNvcmRbXSB8IG51bGw7XG4gIGlkOiBzdHJpbmc7XG4gIGlzX2Rpc2FibGVkOiBib29sZWFuO1xuICB3ZWJfcHJlZml4OiBzdHJpbmc7XG4gIHdlYl9zY2hlbWU6IHN0cmluZztcbiAgdXNlX2F1dG9tYXRpY19zZW5kZXJfc2VjdXJpdHk6IGJvb2xlYW47XG4gIGRraW1faG9zdD86IHN0cmluZztcbiAgbWFpbGZyb21faG9zdD86IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBkYXRhOiBEb21haW5EYXRhLFxuICAgIHJlY2VpdmluZz86IEROU1JlY29yZFtdIHwgbnVsbCxcbiAgICBzZW5kaW5nPzogRE5TUmVjb3JkW10gfCBudWxsXG4gICkge1xuICAgIHRoaXMubmFtZSA9IGRhdGEubmFtZTtcbiAgICB0aGlzLnJlcXVpcmVfdGxzID0gZGF0YS5yZXF1aXJlX3RscztcbiAgICB0aGlzLnNraXBfdmVyaWZpY2F0aW9uID0gZGF0YS5za2lwX3ZlcmlmaWNhdGlvbjtcbiAgICB0aGlzLnN0YXRlID0gZGF0YS5zdGF0ZTtcbiAgICB0aGlzLndpbGRjYXJkID0gZGF0YS53aWxkY2FyZDtcbiAgICB0aGlzLnNwYW1fYWN0aW9uID0gZGF0YS5zcGFtX2FjdGlvbjtcbiAgICB0aGlzLmNyZWF0ZWRfYXQgPSBuZXcgRGF0ZShkYXRhLmNyZWF0ZWRfYXQpO1xuICAgIHRoaXMuc210cF9wYXNzd29yZCA9IGRhdGEuc210cF9wYXNzd29yZDtcbiAgICB0aGlzLnNtdHBfbG9naW4gPSBkYXRhLnNtdHBfbG9naW47XG4gICAgdGhpcy50eXBlID0gZGF0YS50eXBlO1xuICAgIHRoaXMucmVjZWl2aW5nX2Ruc19yZWNvcmRzID0gcmVjZWl2aW5nIHx8IG51bGw7XG4gICAgdGhpcy5zZW5kaW5nX2Ruc19yZWNvcmRzID0gc2VuZGluZyB8fCBudWxsO1xuICAgIHRoaXMuaWQgPSBkYXRhLmlkO1xuICAgIHRoaXMuaXNfZGlzYWJsZWQgPSBkYXRhLmlzX2Rpc2FibGVkO1xuICAgIHRoaXMud2ViX3ByZWZpeCA9IGRhdGEud2ViX3ByZWZpeDtcbiAgICB0aGlzLndlYl9zY2hlbWUgPSBkYXRhLndlYl9zY2hlbWU7XG4gICAgdGhpcy51c2VfYXV0b21hdGljX3NlbmRlcl9zZWN1cml0eSA9IGRhdGEudXNlX2F1dG9tYXRpY19zZW5kZXJfc2VjdXJpdHk7XG5cbiAgICAvKlxuICAgICAgZG9tYWluIGdldCBhbmQgdXBkYXRlIG1ldGhvZHMgbWF5IGhhdmUgcmljaGVyIHJlc3BvbnNlIHRoYW4gY3JlYXRlIG1ldGhvZC5cbiAgICAqL1xuICAgIGNvbnN0IGR5bmFtaWNLZXlzOiAoa2V5b2YgRG9tYWluRHluYW1pY1Byb3BzVHlwZSlbXSA9IFsnZGtpbV9ob3N0JywgJ21haWxmcm9tX2hvc3QnXTtcblxuICAgIGNvbnN0IGR5bmFtaWNQcm9wZXJ0aWVzID0gZHluYW1pY0tleXMucmVkdWNlKChhY2MsIHByb3BlcnR5TmFtZSkgPT4ge1xuICAgICAgaWYgKGRhdGFbcHJvcGVydHlOYW1lXSkge1xuICAgICAgICBjb25zdCBwcm9wID0gcHJvcGVydHlOYW1lIGFzIGtleW9mIERvbWFpbkR5bmFtaWNQcm9wc1R5cGU7XG4gICAgICAgIGFjY1twcm9wXSA9IGRhdGFbcHJvcGVydHlOYW1lXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30gYXMgRG9tYWluRHluYW1pY1Byb3BzVHlwZSk7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLCBkeW5hbWljUHJvcGVydGllcyk7XG4gIH1cbn1cbiIsImltcG9ydCB1cmxqb2luIGZyb20gJ3VybC1qb2luJztcbmltcG9ydCB7XG4gIElEb21haW5UZW1wbGF0ZXNDbGllbnQsXG4gIElEb21haW5UYWdzQ2xpZW50LFxuICBJRG9tYWluQ3JlZGVudGlhbHMsXG4gIElEb21haW5zQ2xpZW50XG59IGZyb20gJy4uLy4uL0ludGVyZmFjZXMvRG9tYWlucyc7XG5cbmltcG9ydCB7IEFQSVJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vVHlwZXMvQ29tbW9uL0FwaVJlc3BvbnNlJztcbmltcG9ydCBBUElFcnJvciBmcm9tICcuLi9jb21tb24vRXJyb3InO1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi4vY29tbW9uL1JlcXVlc3QnO1xuXG5pbXBvcnQgRG9tYWluQ3JlZGVudGlhbHNDbGllbnQgZnJvbSAnLi9kb21haW5zQ3JlZGVudGlhbHMnO1xuaW1wb3J0IERvbWFpblRlbXBsYXRlc0NsaWVudCBmcm9tICcuL2RvbWFpbnNUZW1wbGF0ZXMnO1xuaW1wb3J0IERvbWFpblRhZ3NDbGllbnQgZnJvbSAnLi9kb21haW5zVGFncyc7XG5pbXBvcnQge1xuICBEZXN0cm95ZWREb21haW5SZXNwb25zZSxcbiAgTWVzc2FnZVJlc3BvbnNlLFxuICBEb21haW5MaXN0UmVzcG9uc2VEYXRhLFxuICBEb21haW5SZXNwb25zZURhdGEsXG4gIERvbWFpblRyYWNraW5nUmVzcG9uc2UsXG4gIERvbWFpblRyYWNraW5nRGF0YSxcbiAgVXBkYXRlRG9tYWluVHJhY2tpbmdSZXNwb25zZSxcbiAgVXBkYXRlZE9wZW5UcmFja2luZyxcbiAgRG9tYWluc1F1ZXJ5LFxuICBEb21haW5JbmZvLFxuICBDb25uZWN0aW9uU2V0dGluZ3MsXG4gIENvbm5lY3Rpb25TZXR0aW5nc1Jlc3BvbnNlLFxuICBVcGRhdGVkQ29ubmVjdGlvblNldHRpbmdzLFxuICBVcGRhdGVkQ29ubmVjdGlvblNldHRpbmdzUmVzLFxuICBPcGVuVHJhY2tpbmdJbmZvLFxuICBDbGlja1RyYWNraW5nSW5mbyxcbiAgVW5zdWJzY3JpYmVUcmFja2luZ0luZm8sXG4gIFJlcGxhY2VtZW50Rm9yUG9vbCxcbiAgREtJTUF1dGhvcml0eUluZm8sXG4gIFVwZGF0ZWRES0lNQXV0aG9yaXR5LFxuICBVcGRhdGVkREtJTUF1dGhvcml0eVJlc3BvbnNlLFxuICBES0lNU2VsZWN0b3JJbmZvLFxuICBVcGRhdGVkREtJTVNlbGVjdG9yUmVzcG9uc2UsXG4gIFdlYlByZWZpeEluZm8sXG4gIFVwZGF0ZWRXZWJQcmVmaXhSZXNwb25zZSxcbiAgVERvbWFpbixcbiAgRG9tYWluVXBkYXRlSW5mbyxcbiAgRG9tYWluVXBkYXRlSW5mb1JlcSxcbiAgRG9tYWluSW5mb1JlcSxcbiAgQm9vbFRvU3RyaW5nLFxuICBEb21haW5HZXRRdWVyeSxcbiAgVXBkYXRlZERLSU1TZWxlY3RvclJlc3VsdCxcbn0gZnJvbSAnLi4vLi4vVHlwZXMvRG9tYWlucyc7XG5pbXBvcnQgRG9tYWluIGZyb20gJy4vZG9tYWluJztcbmltcG9ydCB7IElMb2dnZXIgfSBmcm9tICcuLi8uLi9JbnRlcmZhY2VzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRG9tYWluc0NsaWVudCBpbXBsZW1lbnRzIElEb21haW5zQ2xpZW50IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcbiAgcHVibGljIGRvbWFpbkNyZWRlbnRpYWxzOiBJRG9tYWluQ3JlZGVudGlhbHM7XG4gIHB1YmxpYyBkb21haW5UZW1wbGF0ZXM6IElEb21haW5UZW1wbGF0ZXNDbGllbnQ7XG4gIHB1YmxpYyBkb21haW5UYWdzOiBJRG9tYWluVGFnc0NsaWVudDtcbiAgcHJpdmF0ZSBsb2dnZXI6IElMb2dnZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcmVxdWVzdDogUmVxdWVzdCxcbiAgICBkb21haW5DcmVkZW50aWFsc0NsaWVudDogRG9tYWluQ3JlZGVudGlhbHNDbGllbnQsXG4gICAgZG9tYWluVGVtcGxhdGVzQ2xpZW50OiBEb21haW5UZW1wbGF0ZXNDbGllbnQsXG4gICAgZG9tYWluVGFnc0NsaWVudDogRG9tYWluVGFnc0NsaWVudCxcbiAgICBsb2dnZXI6IElMb2dnZXIgPSBjb25zb2xlXG4gICkge1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgdGhpcy5kb21haW5DcmVkZW50aWFscyA9IGRvbWFpbkNyZWRlbnRpYWxzQ2xpZW50O1xuICAgIHRoaXMuZG9tYWluVGVtcGxhdGVzID0gZG9tYWluVGVtcGxhdGVzQ2xpZW50O1xuICAgIHRoaXMuZG9tYWluVGFncyA9IGRvbWFpblRhZ3NDbGllbnQ7XG4gICAgdGhpcy5sb2dnZXIgPSBsb2dnZXI7XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVCb29sVmFsdWVzKFxuICAgIGRhdGE6IERvbWFpbkluZm8gfCBEb21haW5VcGRhdGVJbmZvXG4gICk6IERvbWFpbkluZm9SZXEgfCBEb21haW5VcGRhdGVJbmZvUmVxIHtcbiAgICBjb25zdCBwcm9wc0ZvclJlcGxhY2VtZW50ID0gZGF0YSBhcyBCb29sVG9TdHJpbmc7XG4gICAgY29uc3QgcmVwbGFjZWRQcm9wcyA9IE9iamVjdC5rZXlzKHByb3BzRm9yUmVwbGFjZW1lbnQpLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICAgIGNvbnN0IHByb3AgPSBrZXkgYXMga2V5b2YgQm9vbFRvU3RyaW5nO1xuICAgICAgaWYgKHR5cGVvZiBwcm9wc0ZvclJlcGxhY2VtZW50W3Byb3BdID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBwcm9wc0ZvclJlcGxhY2VtZW50W3Byb3BdIGFzIGJvb2xlYW47XG4gICAgICAgIGFjY1twcm9wXSA9ICh2YWx1ZS50b1N0cmluZygpID09PSAndHJ1ZScpID8gJ3RydWUnIDogJ2ZhbHNlJztcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30gYXMgUmVjb3JkPGtleW9mIEJvb2xUb1N0cmluZywgJ3RydWUnfCAnZmFsc2UnPik7XG4gICAgcmV0dXJuIHsgLi4uZGF0YSwgLi4ucmVwbGFjZWRQcm9wcyB9IGFzIERvbWFpblVwZGF0ZUluZm9SZXEgfCBEb21haW5JbmZvUmVxO1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFyc2VNZXNzYWdlKHJlc3BvbnNlOiBEZXN0cm95ZWREb21haW5SZXNwb25zZSkgOiBNZXNzYWdlUmVzcG9uc2Uge1xuICAgIHJldHVybiByZXNwb25zZS5ib2R5O1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZURvbWFpbkxpc3QocmVzcG9uc2U6IERvbWFpbkxpc3RSZXNwb25zZURhdGEpOiBURG9tYWluW10ge1xuICAgIGlmIChyZXNwb25zZS5ib2R5ICYmIHJlc3BvbnNlLmJvZHkuaXRlbXMpIHtcbiAgICAgIHJldHVybiByZXNwb25zZS5ib2R5Lml0ZW1zLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICByZXR1cm4gbmV3IERvbWFpbihpdGVtKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH1cblxuICBwcml2YXRlIF9wYXJzZURvbWFpbihyZXNwb25zZTogRG9tYWluUmVzcG9uc2VEYXRhKTogVERvbWFpbiB7XG4gICAgcmV0dXJuIG5ldyBEb21haW4oXG4gICAgICByZXNwb25zZS5ib2R5LmRvbWFpbixcbiAgICAgIHJlc3BvbnNlLmJvZHkucmVjZWl2aW5nX2Ruc19yZWNvcmRzLFxuICAgICAgcmVzcG9uc2UuYm9keS5zZW5kaW5nX2Ruc19yZWNvcmRzXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX3BhcnNlVHJhY2tpbmdTZXR0aW5ncyhyZXNwb25zZTogRG9tYWluVHJhY2tpbmdSZXNwb25zZSkgOiBEb21haW5UcmFja2luZ0RhdGEge1xuICAgIHJldHVybiByZXNwb25zZS5ib2R5LnRyYWNraW5nO1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFyc2VUcmFja2luZ1VwZGF0ZShyZXNwb25zZTogVXBkYXRlRG9tYWluVHJhY2tpbmdSZXNwb25zZSkgOlVwZGF0ZWRPcGVuVHJhY2tpbmcge1xuICAgIHJldHVybiByZXNwb25zZS5ib2R5O1xuICB9XG5cbiAgcHJpdmF0ZSBfaXNPcGVuVHJhY2tpbmdJbmZvV2l0UGxhY2Uob2JqOiB1bmtub3duKTogb2JqIGlzIE9wZW5UcmFja2luZ0luZm8ge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiAncGxhY2VfYXRfdGhlX3RvcCcgaW4gKG9iaiBhcyBPcGVuVHJhY2tpbmdJbmZvKTtcbiAgfVxuXG4gIGxpc3QocXVlcnk/OiBEb21haW5zUXVlcnkpOiBQcm9taXNlPFREb21haW5bXT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KCcvdjQvZG9tYWlucycsIHF1ZXJ5KVxuICAgICAgLnRoZW4oKHJlcyA6IEFQSVJlc3BvbnNlKSA9PiB0aGlzLnBhcnNlRG9tYWluTGlzdChyZXMgYXMgRG9tYWluTGlzdFJlc3BvbnNlRGF0YSkpO1xuICB9XG5cbiAgZ2V0KGRvbWFpbjogc3RyaW5nLCBxdWVyeT86IERvbWFpbkdldFF1ZXJ5KSA6IFByb21pc2U8VERvbWFpbj4ge1xuICAgIGNvbnN0IHByZXBhcmVkUXVlcnkgPSBxdWVyeSA/IHtcbiAgICAgICdoOmV4dGVuZGVkJzogcXVlcnk/LmV4dGVuZGVkID8/IGZhbHNlLFxuICAgICAgJ2g6d2l0aF9kbnMnOiBxdWVyeT8ud2l0aF9kbnMgPz8gdHJ1ZSxcbiAgICB9IDoge307XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQoYC92NC9kb21haW5zLyR7ZG9tYWlufWAsIHByZXBhcmVkUXVlcnkpXG4gICAgICAudGhlbigocmVzIDogQVBJUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlRG9tYWluKHJlcyBhcyBEb21haW5SZXNwb25zZURhdGEpKTtcbiAgfVxuXG4gIGNyZWF0ZShkYXRhOiBEb21haW5JbmZvKSA6IFByb21pc2U8VERvbWFpbj4ge1xuICAgIGNvbnN0IHBvc3RPYmogPSB0aGlzLl9oYW5kbGVCb29sVmFsdWVzKGRhdGEpO1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRCgnL3Y0L2RvbWFpbnMnLCBwb3N0T2JqKVxuICAgICAgLnRoZW4oKHJlcyA6IEFQSVJlc3BvbnNlKSA9PiB0aGlzLl9wYXJzZURvbWFpbihyZXMgYXMgRG9tYWluUmVzcG9uc2VEYXRhKSk7XG4gIH1cblxuICB1cGRhdGUoZG9tYWluOiBzdHJpbmcsIGRhdGE6IERvbWFpblVwZGF0ZUluZm8pIDogUHJvbWlzZTxURG9tYWluPiB7XG4gICAgY29uc3QgcHV0RGF0YSA9IHRoaXMuX2hhbmRsZUJvb2xWYWx1ZXMoZGF0YSk7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXRXaXRoRkQoYC92NC9kb21haW5zLyR7ZG9tYWlufWAsIHB1dERhdGEpXG4gICAgICAudGhlbigocmVzIDogQVBJUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlRG9tYWluKHJlcyBhcyBEb21haW5SZXNwb25zZURhdGEpKTtcbiAgfVxuXG4gIHZlcmlmeShkb21haW46IHN0cmluZyk6IFByb21pc2U8VERvbWFpbj4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0KGAvdjQvZG9tYWlucy8ke2RvbWFpbn0vdmVyaWZ5YClcbiAgICAgIC50aGVuKChyZXMgOiBBUElSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VEb21haW4ocmVzIGFzIERvbWFpblJlc3BvbnNlRGF0YSkpO1xuICB9XG5cbiAgZGVzdHJveShkb21haW46IHN0cmluZyk6IFByb21pc2U8TWVzc2FnZVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5kZWxldGUoYC92My9kb21haW5zLyR7ZG9tYWlufWApXG4gICAgICAudGhlbigocmVzIDogQVBJUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlTWVzc2FnZShyZXMgYXMgRGVzdHJveWVkRG9tYWluUmVzcG9uc2UpKTtcbiAgfVxuXG4gIGdldENvbm5lY3Rpb24oZG9tYWluOiBzdHJpbmcpOiBQcm9taXNlPENvbm5lY3Rpb25TZXR0aW5ncz4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KGAvdjMvZG9tYWlucy8ke2RvbWFpbn0vY29ubmVjdGlvbmApXG4gICAgICAudGhlbigocmVzIDogQVBJUmVzcG9uc2UpID0+IHJlcyBhcyBDb25uZWN0aW9uU2V0dGluZ3NSZXNwb25zZSlcbiAgICAgIC50aGVuKChyZXM6Q29ubmVjdGlvblNldHRpbmdzUmVzcG9uc2UpID0+IHJlcy5ib2R5IGFzIENvbm5lY3Rpb25TZXR0aW5ncyk7XG4gIH1cblxuICB1cGRhdGVDb25uZWN0aW9uKGRvbWFpbjogc3RyaW5nLCBkYXRhOiBDb25uZWN0aW9uU2V0dGluZ3MpOiBQcm9taXNlPFVwZGF0ZWRDb25uZWN0aW9uU2V0dGluZ3M+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnB1dChgL3YzL2RvbWFpbnMvJHtkb21haW59L2Nvbm5lY3Rpb25gLCBkYXRhKVxuICAgICAgLnRoZW4oKHJlcyA6IEFQSVJlc3BvbnNlKSA9PiByZXMgYXMgVXBkYXRlZENvbm5lY3Rpb25TZXR0aW5nc1JlcylcbiAgICAgIC50aGVuKChyZXM6VXBkYXRlZENvbm5lY3Rpb25TZXR0aW5nc1JlcykgPT4gcmVzLmJvZHkgYXMgVXBkYXRlZENvbm5lY3Rpb25TZXR0aW5ncyk7XG4gIH1cblxuICAvLyBUcmFja2luZ1xuXG4gIGdldFRyYWNraW5nKGRvbWFpbjogc3RyaW5nKSA6IFByb21pc2U8RG9tYWluVHJhY2tpbmdEYXRhPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICd0cmFja2luZycpKVxuICAgICAgLnRoZW4odGhpcy5fcGFyc2VUcmFja2luZ1NldHRpbmdzKTtcbiAgfVxuXG4gIHVwZGF0ZVRyYWNraW5nKFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIHR5cGU6IHN0cmluZyxcbiAgICBkYXRhOiBPcGVuVHJhY2tpbmdJbmZvIHwgQ2xpY2tUcmFja2luZ0luZm8gfCBVbnN1YnNjcmliZVRyYWNraW5nSW5mb1xuICApOiBQcm9taXNlPFVwZGF0ZWRPcGVuVHJhY2tpbmc+IHtcbiAgICBjb25zdCBwcmVwYXJlZERhdGE6IE9wZW5UcmFja2luZ0luZm8gfCBDbGlja1RyYWNraW5nSW5mbyB8IFVuc3Vic2NyaWJlVHJhY2tpbmdJbmZvID0ge1xuICAgICAgLi4uZGF0YVxuICAgIH07XG4gICAgaWYgKHR5cGVvZiBkYXRhPy5hY3RpdmUgPT09ICdib29sZWFuJykge1xuICAgICAgcHJlcGFyZWREYXRhLmFjdGl2ZSA9IChkYXRhPy5hY3RpdmUpID8gJ3llcycgOiAnbm8nO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9pc09wZW5UcmFja2luZ0luZm9XaXRQbGFjZShkYXRhKSkge1xuICAgICAgaWYgKHR5cGVvZiBkYXRhPy5wbGFjZV9hdF90aGVfdG9wID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgKHByZXBhcmVkRGF0YSBhcyBPcGVuVHJhY2tpbmdJbmZvKS5wbGFjZV9hdF90aGVfdG9wID0gKGRhdGE/LnBsYWNlX2F0X3RoZV90b3ApID8gJ3llcycgOiAnbm8nO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnB1dFdpdGhGRCh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ3RyYWNraW5nJywgdHlwZSksIHByZXBhcmVkRGF0YSlcbiAgICAgIC50aGVuKChyZXMgOiBBUElSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VUcmFja2luZ1VwZGF0ZShyZXMgYXMgVXBkYXRlRG9tYWluVHJhY2tpbmdSZXNwb25zZSkpO1xuICB9XG5cbiAgLy8gSVBzXG4gIC8qKlxuICAqIEBkZXByZWNhdGVkIFwiZG9tYWlucy5nZXRJcHNcIiBtZXRob2QgaXMgZGVwcmVjYXRlZCwgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlIHJlbGVhc2VzLlxuICAqL1xuICBnZXRJcHMoZG9tYWluOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgdGhpcy5sb2dnZXIud2FybignXCJkb21haW5zLmdldElwc1wiIG1ldGhvZCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZSByZWxlYXNlcy4nKTtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ2lwcycpKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlOiBBUElSZXNwb25zZSkgPT4gcmVzcG9uc2U/LmJvZHk/Lml0ZW1zKTtcbiAgfVxuXG4gIC8qKlxuICAqIEBkZXByZWNhdGVkIFwiZG9tYWlucy5hc3NpZ25JcFwiIG1ldGhvZCBpcyBkZXByZWNhdGVkLCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUgcmVsZWFzZXMuXG4gICovXG4gIGFzc2lnbklwKGRvbWFpbjogc3RyaW5nLCBpcDogc3RyaW5nKTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIHRoaXMubG9nZ2VyLndhcm4oJ1wiZG9tYWlucy5hc3NpZ25JcFwiIG1ldGhvZCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZSByZWxlYXNlcy4nKTtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICdpcHMnKSwgeyBpcCB9KTtcbiAgfVxuXG4gIC8qKlxuICAqIEBkZXByZWNhdGVkIFwiZG9tYWlucy5kZWxldGVJcFwiIG1ldGhvZCBpcyBkZXByZWNhdGVkLCBhbmQgd2lsbCBiZSBtb3ZlZCB0byB0aGUgSXBzQ2xpZW50LlxuICAqL1xuICBkZWxldGVJcChkb21haW46IHN0cmluZywgaXA6IHN0cmluZyk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICB0aGlzLmxvZ2dlci53YXJuKCdcImRvbWFpbnMuZGVsZXRlSXBcIiBtZXRob2QgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSBtb3ZlZCBpbnRvIHRoZSBJcHNDbGllbnQgaW4gdGhlIGZ1dHVyZSByZWxlYXNlcy4nKTtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZSh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ2lwcycsIGlwKSk7XG4gIH1cblxuICAvKipcbiAgKiBAZGVwcmVjYXRlZCBcImRvbWFpbnMubGlua0lwUG9vbFwiIG1ldGhvZCBpcyBkZXByZWNhdGVkLCBhbmQgd2lsbCBiZSByZW1vdmVkXG4gICogaW4gdGhlIGZ1dHVyZSByZWxlYXNlcy5cbiAgKi9cbiAgbGlua0lwUG9vbChkb21haW46IHN0cmluZywgcG9vbElkOiBzdHJpbmcpOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgdGhpcy5sb2dnZXIud2FybignXCJkb21haW5zLmxpbmtJcFBvb2xcIiBtZXRob2QgaXMgZGVwcmVjYXRlZCwgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlIHJlbGVhc2VzLicpO1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRCh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ2lwcycpLCB7IHBvb2xfaWQ6IHBvb2xJZCB9KTtcbiAgfVxuXG4gIC8qKlxuICAqIEBkZXByZWNhdGVkIFwiZG9tYWlucy51bmxpbmtJcFBvbGxcIiBtZXRob2QgaXMgZGVwcmVjYXRlZCwgYW5kIHdpbGwgYmUgbW92ZWQgaW50byB0aGUgSXBzQ2xpZW50XG4gICogaW4gdGhlIGZ1dHVyZSByZWxlYXNlcy5cbiAgKi9cbiAgdW5saW5rSXBQb2xsKGRvbWFpbjogc3RyaW5nLCByZXBsYWNlbWVudDogUmVwbGFjZW1lbnRGb3JQb29sKTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIHRoaXMubG9nZ2VyLndhcm4oJ1wiZG9tYWlucy51bmxpbmtJcFBvbGxcIiBtZXRob2QgaXMgZGVwcmVjYXRlZCwgYW5kIHdpbGwgYmUgbW92ZWQgaW50byB0aGUgSXBzQ2xpZW50IGluIHRoZSBmdXR1cmUgcmVsZWFzZXMuJyk7XG4gICAgbGV0IHNlYXJjaFBhcmFtcyA9ICcnO1xuICAgIGlmIChyZXBsYWNlbWVudC5wb29sX2lkICYmIHJlcGxhY2VtZW50LmlwKSB7XG4gICAgICB0aHJvdyBBUElFcnJvci5nZXRVc2VyRGF0YUVycm9yKCdUb28gbXVjaCBkYXRhIGZvciByZXBsYWNlbWVudCcsICdQbGVhc2Ugc3BlY2lmeSBlaXRoZXIgcG9vbF9pZCBvciBpcCAobm90IGJvdGgpJyk7XG4gICAgfSBlbHNlIGlmIChyZXBsYWNlbWVudC5wb29sX2lkKSB7XG4gICAgICBzZWFyY2hQYXJhbXMgPSBgP3Bvb2xfaWQ9JHtyZXBsYWNlbWVudC5wb29sX2lkfWA7XG4gICAgfSBlbHNlIGlmIChyZXBsYWNlbWVudC5pcCkge1xuICAgICAgc2VhcmNoUGFyYW1zID0gYD9pcD0ke3JlcGxhY2VtZW50LmlwfWA7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKHVybGpvaW4oJy92My9kb21haW5zJywgZG9tYWluLCAnaXBzJywgJ2lwX3Bvb2wnLCBzZWFyY2hQYXJhbXMpKTtcbiAgfVxuXG4gIHVwZGF0ZURLSU1BdXRob3JpdHkoZG9tYWluOiBzdHJpbmcsIGRhdGE6IERLSU1BdXRob3JpdHlJbmZvKTogUHJvbWlzZTxVcGRhdGVkREtJTUF1dGhvcml0eT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0KGAvdjMvZG9tYWlucy8ke2RvbWFpbn0vZGtpbV9hdXRob3JpdHlgLCB7fSwgeyBxdWVyeTogYHNlbGY9JHtkYXRhLnNlbGZ9YCB9KVxuICAgICAgLnRoZW4oKHJlcyA6IEFQSVJlc3BvbnNlKSA9PiByZXMgYXMgVXBkYXRlZERLSU1BdXRob3JpdHlSZXNwb25zZSlcbiAgICAgIC50aGVuKChyZXMgOiBVcGRhdGVkREtJTUF1dGhvcml0eVJlc3BvbnNlKSA9PiByZXMuYm9keSBhcyBVcGRhdGVkREtJTUF1dGhvcml0eSk7XG4gIH1cblxuICBhc3luYyB1cGRhdGVES0lNU2VsZWN0b3IoXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgZGF0YTogREtJTVNlbGVjdG9ySW5mb1xuICApOiBQcm9taXNlPFVwZGF0ZWRES0lNU2VsZWN0b3JSZXN1bHQ+IHtcbiAgICBjb25zdCByZXM6IFVwZGF0ZWRES0lNU2VsZWN0b3JSZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5wdXQoYC92My9kb21haW5zLyR7ZG9tYWlufS9ka2ltX3NlbGVjdG9yYCwge30sIHsgcXVlcnk6IGBka2ltX3NlbGVjdG9yPSR7ZGF0YS5ka2ltU2VsZWN0b3J9YCB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IHJlcy5zdGF0dXMsXG4gICAgICBtZXNzYWdlOiByZXM/LmJvZHk/Lm1lc3NhZ2VcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICogQGRlcHJlY2F0ZWQgXCJkb21haW5zLnVwZGF0ZVdlYlByZWZpeFwiIG1ldGhvZCBpcyBkZXByZWNhdGVkLlxuICAqIFBsZWFzZSB1c2UgZG9tYWlucy51cGRhdGUgdG8gc2V0IG5ldyBcIndlYl9wcmVmaXhcIi5cbiAgKiBDdXJyZW50IG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZSByZWxlYXNlcy5cbiAgKi9cbiAgdXBkYXRlV2ViUHJlZml4KGRvbWFpbjogc3RyaW5nLCBkYXRhOiBXZWJQcmVmaXhJbmZvKTogUHJvbWlzZTxVcGRhdGVkV2ViUHJlZml4UmVzcG9uc2U+IHtcbiAgICB0aGlzLmxvZ2dlci53YXJuKCdcImRvbWFpbnMudXBkYXRlV2ViUHJlZml4XCIgbWV0aG9kIGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgZG9tYWlucy51cGRhdGUgdG8gc2V0IG5ldyBcIndlYl9wcmVmaXhcIi4gQ3VycmVudCBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUgcmVsZWFzZXMuJyk7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXQoYC92My9kb21haW5zLyR7ZG9tYWlufS93ZWJfcHJlZml4YCwge30sIHsgcXVlcnk6IGB3ZWJfcHJlZml4PSR7ZGF0YS53ZWJQcmVmaXh9YCB9KVxuICAgICAgLnRoZW4oKHJlcyA6IEFQSVJlc3BvbnNlKSA9PiByZXMgYXMgVXBkYXRlZFdlYlByZWZpeFJlc3BvbnNlKTtcbiAgfVxufVxuIiwiaW1wb3J0IHVybGpvaW4gZnJvbSAndXJsLWpvaW4nO1xuaW1wb3J0IHsgQVBJUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9UeXBlcy9Db21tb24vQXBpUmVzcG9uc2UnO1xuaW1wb3J0IHsgSURvbWFpbkNyZWRlbnRpYWxzIH0gZnJvbSAnLi4vLi4vSW50ZXJmYWNlcy9Eb21haW5zJztcbmltcG9ydCB7XG4gIERvbWFpbkNyZWRlbnRpYWxzUmVzcG9uc2VEYXRhLFxuICBEb21haW5DcmVkZW50aWFsc0xpc3QsXG4gIENyZWF0ZWRVcGRhdGVkRG9tYWluQ3JlZGVudGlhbHNSZXNwb25zZSxcbiAgRG9tYWluQ3JlZGVudGlhbHNSZXN1bHQsXG4gIERlbGV0ZWREb21haW5DcmVkZW50aWFsc1Jlc3BvbnNlLFxuICBEb21haW5DcmVkZW50aWFsc1F1ZXJ5LFxuICBEb21haW5DcmVkZW50aWFscyxcbiAgVXBkYXRlRG9tYWluQ3JlZGVudGlhbHNEYXRhXG59IGZyb20gJy4uLy4uL1R5cGVzL0RvbWFpbnMnO1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi4vY29tbW9uL1JlcXVlc3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb21haW5DcmVkZW50aWFsc0NsaWVudCBpbXBsZW1lbnRzIElEb21haW5DcmVkZW50aWFscyB7XG4gIGJhc2VSb3V0ZTogc3RyaW5nO1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMuYmFzZVJvdXRlID0gJy92My9kb21haW5zLyc7XG4gIH1cblxuICBwcml2YXRlIF9wYXJzZURvbWFpbkNyZWRlbnRpYWxzTGlzdChcbiAgICByZXNwb25zZTogRG9tYWluQ3JlZGVudGlhbHNSZXNwb25zZURhdGFcbiAgKTogRG9tYWluQ3JlZGVudGlhbHNMaXN0IHtcbiAgICByZXR1cm4ge1xuICAgICAgaXRlbXM6IHJlc3BvbnNlLmJvZHkuaXRlbXMsXG4gICAgICB0b3RhbENvdW50OiByZXNwb25zZS5ib2R5LnRvdGFsX2NvdW50XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgX3BhcnNlTWVzc2FnZVJlc3BvbnNlKFxuICAgIHJlc3BvbnNlOiBDcmVhdGVkVXBkYXRlZERvbWFpbkNyZWRlbnRpYWxzUmVzcG9uc2VcbiAgKTogRG9tYWluQ3JlZGVudGlhbHNSZXN1bHQge1xuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgbWVzc2FnZTogcmVzcG9uc2UuYm9keS5tZXNzYWdlXG4gICAgfSBhcyBEb21haW5DcmVkZW50aWFsc1Jlc3VsdDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFyc2VEZWxldGVkUmVzcG9uc2UoXG4gICAgcmVzcG9uc2U6RGVsZXRlZERvbWFpbkNyZWRlbnRpYWxzUmVzcG9uc2VcbiAgKTogRG9tYWluQ3JlZGVudGlhbHNSZXN1bHQge1xuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgbWVzc2FnZTogcmVzcG9uc2UuYm9keS5tZXNzYWdlLFxuICAgICAgc3BlYzogcmVzcG9uc2UuYm9keS5zcGVjXG4gICAgfSBhcyBEb21haW5DcmVkZW50aWFsc1Jlc3VsdDtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBsaXN0KGRvbWFpbjogc3RyaW5nLCBxdWVyeT86IERvbWFpbkNyZWRlbnRpYWxzUXVlcnkpOiBQcm9taXNlPERvbWFpbkNyZWRlbnRpYWxzTGlzdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy9jcmVkZW50aWFscycpLCBxdWVyeSlcbiAgICAgIC50aGVuKFxuICAgICAgICAocmVzOiBBUElSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VEb21haW5DcmVkZW50aWFsc0xpc3QocmVzIGFzIERvbWFpbkNyZWRlbnRpYWxzUmVzcG9uc2VEYXRhKVxuICAgICAgKTtcbiAgfVxuXG4gIGNyZWF0ZShcbiAgICBkb21haW46IHN0cmluZyxcbiAgICBkYXRhOiBEb21haW5DcmVkZW50aWFsc1xuICApOiBQcm9taXNlPERvbWFpbkNyZWRlbnRpYWxzUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKGAke3RoaXMuYmFzZVJvdXRlfSR7ZG9tYWlufS9jcmVkZW50aWFsc2AsIGRhdGEpXG4gICAgICAudGhlbigocmVzOiBBUElSZXNwb25zZSkgPT4gdGhpcy5fcGFyc2VNZXNzYWdlUmVzcG9uc2UocmVzKSk7XG4gIH1cblxuICB1cGRhdGUoXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgY3JlZGVudGlhbHNMb2dpbjogc3RyaW5nLFxuICAgIGRhdGE6IFVwZGF0ZURvbWFpbkNyZWRlbnRpYWxzRGF0YVxuICApOiBQcm9taXNlPERvbWFpbkNyZWRlbnRpYWxzUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXRXaXRoRkQoYCR7dGhpcy5iYXNlUm91dGV9JHtkb21haW59L2NyZWRlbnRpYWxzLyR7Y3JlZGVudGlhbHNMb2dpbn1gLCBkYXRhKVxuICAgICAgLnRoZW4oKHJlczogQVBJUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlTWVzc2FnZVJlc3BvbnNlKHJlcykpO1xuICB9XG5cbiAgZGVzdHJveShcbiAgICBkb21haW46IHN0cmluZyxcbiAgICBjcmVkZW50aWFsc0xvZ2luOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxEb21haW5DcmVkZW50aWFsc1Jlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKGAke3RoaXMuYmFzZVJvdXRlfSR7ZG9tYWlufS9jcmVkZW50aWFscy8ke2NyZWRlbnRpYWxzTG9naW59YClcbiAgICAgIC50aGVuKChyZXM6IEFQSVJlc3BvbnNlKSA9PiB0aGlzLl9wYXJzZURlbGV0ZWRSZXNwb25zZShyZXMpKTtcbiAgfVxufVxuIiwiaW1wb3J0IHVybGpvaW4gZnJvbSAndXJsLWpvaW4nO1xuaW1wb3J0IHsgQVBJUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9UeXBlcy9Db21tb24vQXBpUmVzcG9uc2UnO1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi4vY29tbW9uL1JlcXVlc3QnO1xuXG5pbXBvcnQge1xuICBJRG9tYWluVGFnU3RhdGlzdGljUmVzdWx0LFxuICBJRG9tYWluVGFnc0NsaWVudFxufSBmcm9tICcuLi8uLi9JbnRlcmZhY2VzL0RvbWFpbnMnO1xuaW1wb3J0IE5hdmlnYXRpb25UaHJ1UGFnZXMgZnJvbSAnLi4vY29tbW9uL05hdmlnYXRpb25UaHJ1UGFnZXMnO1xuaW1wb3J0IHsgUmVzb2x1dGlvbiB9IGZyb20gJy4uLy4uL0VudW1zJztcbmltcG9ydCB7XG4gIERvbWFpblRhZ3NJdGVtLFxuICBEb21haW5UYWdzSXRlbUluZm8sXG4gIERvbWFpblRhZ1N0YXRpc3RpY0l0ZW0sXG4gIERvbWFpblRhZ1N0YXRBUElSZXNwb25zZSxcbiAgRG9tYWluVGFnQVBJUmVzcG9uc2VTdGF0c0l0ZW0sXG4gIERvbWFpblRhZ3NMaXN0LFxuICBEb21haW5UYWdzUmVzcG9uc2VEYXRhLFxuICBEb21haW5UYWdzUXVlcnksXG4gIERvbWFpblRhZ3NNZXNzYWdlUmVzLFxuICBEb21haW5UYWdzU3RhdGlzdGljUXVlcnksXG4gIERvbWFpblRhZ0NvdW50cmllc0FnZ3JlZ2F0aW9uLFxuICBEb21haW5UYWdDb3VudHJpZXNBUElSZXNwb25zZSxcbiAgRG9tYWluVGFnUHJvdmlkZXJzQWdncmVnYXRpb24sXG4gIERvbWFpblRhZ1Byb3ZpZGVyc0FQSVJlc3BvbnNlLFxuICBEb21haW5UYWdEZXZpY2VzQWdncmVnYXRpb24sXG4gIERvbWFpblRhZ0RldmljZXNBUElSZXNwb25zZVxufSBmcm9tICcuLi8uLi9UeXBlcy9Eb21haW5zJztcblxuZXhwb3J0IGNsYXNzIERvbWFpblRhZyBpbXBsZW1lbnRzIERvbWFpblRhZ3NJdGVtIHtcbiAgdGFnOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICdmaXJzdC1zZWVuJzogRGF0ZTtcbiAgJ2xhc3Qtc2Vlbic6IERhdGU7XG5cbiAgY29uc3RydWN0b3IodGFnSW5mbzogRG9tYWluVGFnc0l0ZW1JbmZvKSB7XG4gICAgdGhpcy50YWcgPSB0YWdJbmZvLnRhZztcbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gdGFnSW5mby5kZXNjcmlwdGlvbjtcbiAgICB0aGlzWydmaXJzdC1zZWVuJ10gPSBuZXcgRGF0ZSh0YWdJbmZvWydmaXJzdC1zZWVuJ10pO1xuICAgIHRoaXNbJ2xhc3Qtc2VlbiddID0gbmV3IERhdGUodGFnSW5mb1snbGFzdC1zZWVuJ10pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEb21haW5UYWdTdGF0aXN0aWMgaW1wbGVtZW50cyBJRG9tYWluVGFnU3RhdGlzdGljUmVzdWx0IHtcbiAgdGFnOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHN0YXJ0OiBEYXRlO1xuICBlbmQ6IERhdGU7XG4gIHJlc29sdXRpb246IFJlc29sdXRpb247XG4gIHN0YXRzOiBEb21haW5UYWdTdGF0aXN0aWNJdGVtW107XG5cbiAgY29uc3RydWN0b3IodGFnU3RhdGlzdGljSW5mbzogRG9tYWluVGFnU3RhdEFQSVJlc3BvbnNlKSB7XG4gICAgdGhpcy50YWcgPSB0YWdTdGF0aXN0aWNJbmZvLmJvZHkudGFnO1xuICAgIHRoaXMuZGVzY3JpcHRpb24gPSB0YWdTdGF0aXN0aWNJbmZvLmJvZHkuZGVzY3JpcHRpb247XG4gICAgdGhpcy5zdGFydCA9IG5ldyBEYXRlKHRhZ1N0YXRpc3RpY0luZm8uYm9keS5zdGFydCk7XG4gICAgdGhpcy5lbmQgPSBuZXcgRGF0ZSh0YWdTdGF0aXN0aWNJbmZvLmJvZHkuZW5kKTtcbiAgICB0aGlzLnJlc29sdXRpb24gPSB0YWdTdGF0aXN0aWNJbmZvLmJvZHkucmVzb2x1dGlvbjtcbiAgICB0aGlzLnN0YXRzID0gdGFnU3RhdGlzdGljSW5mby5ib2R5LnN0YXRzLm1hcChmdW5jdGlvbiAoc3RhdDogRG9tYWluVGFnQVBJUmVzcG9uc2VTdGF0c0l0ZW0pIHtcbiAgICAgIGNvbnN0IHJlcyA9IHsgLi4uc3RhdCwgdGltZTogbmV3IERhdGUoc3RhdC50aW1lKSB9O1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEb21haW5UYWdzQ2xpZW50XG4gIGV4dGVuZHMgTmF2aWdhdGlvblRocnVQYWdlczxEb21haW5UYWdzTGlzdD5cbiAgaW1wbGVtZW50cyBJRG9tYWluVGFnc0NsaWVudCB7XG4gIGJhc2VSb3V0ZTogc3RyaW5nO1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICBzdXBlcihyZXF1ZXN0KTtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMuYmFzZVJvdXRlID0gJy92My8nO1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlTGlzdChcbiAgICByZXNwb25zZTogRG9tYWluVGFnc1Jlc3BvbnNlRGF0YSxcbiAgKTogRG9tYWluVGFnc0xpc3Qge1xuICAgIGNvbnN0IGRhdGEgPSB7fSBhcyBEb21haW5UYWdzTGlzdDtcbiAgICBkYXRhLml0ZW1zID0gcmVzcG9uc2UuYm9keS5pdGVtcy5tYXAoKHRhZ0luZm86IERvbWFpblRhZ3NJdGVtSW5mbykgPT4gbmV3IERvbWFpblRhZyh0YWdJbmZvKSk7XG5cbiAgICBkYXRhLnBhZ2VzID0gdGhpcy5wYXJzZVBhZ2VMaW5rcyhyZXNwb25zZSwgJz8nLCAndGFnJyk7XG4gICAgZGF0YS5zdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBwcml2YXRlIF9wYXJzZVRhZ1N0YXRpc3RpYyhcbiAgICByZXNwb25zZTogRG9tYWluVGFnU3RhdEFQSVJlc3BvbnNlXG4gICk6IElEb21haW5UYWdTdGF0aXN0aWNSZXN1bHQge1xuICAgIHJldHVybiBuZXcgRG9tYWluVGFnU3RhdGlzdGljKHJlc3BvbnNlKTtcbiAgfVxuXG4gIGFzeW5jIGxpc3QoZG9tYWluOiBzdHJpbmcsIHF1ZXJ5PzogRG9tYWluVGFnc1F1ZXJ5KTogUHJvbWlzZTxEb21haW5UYWdzTGlzdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3RMaXN0V2l0aFBhZ2VzKHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90YWdzJyksIHF1ZXJ5KTtcbiAgfVxuXG4gIGdldChkb21haW46IHN0cmluZywgdGFnOiBzdHJpbmcpOiBQcm9taXNlPERvbWFpblRhZ3NJdGVtPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RhZ3MnLCB0YWcpKVxuICAgICAgLnRoZW4oXG4gICAgICAgIChyZXM6IEFQSVJlc3BvbnNlKSA9PiBuZXcgRG9tYWluVGFnKHJlcy5ib2R5KVxuICAgICAgKTtcbiAgfVxuXG4gIHVwZGF0ZShkb21haW46IHN0cmluZywgdGFnOiBzdHJpbmcsIGRlc2NyaXB0aW9uOiBzdHJpbmcpOiBQcm9taXNlPERvbWFpblRhZ3NNZXNzYWdlUmVzPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RhZ3MnLCB0YWcpLCBkZXNjcmlwdGlvbilcbiAgICAgIC50aGVuKFxuICAgICAgICAocmVzOiBBUElSZXNwb25zZSkgPT4gcmVzLmJvZHkgYXMgRG9tYWluVGFnc01lc3NhZ2VSZXNcbiAgICAgICk7XG4gIH1cblxuICBkZXN0cm95KFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIHRhZzogc3RyaW5nXG4gICk6IFByb21pc2U8RG9tYWluVGFnc01lc3NhZ2VSZXM+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZShgJHt0aGlzLmJhc2VSb3V0ZX0ke2RvbWFpbn0vdGFncy8ke3RhZ31gKVxuICAgICAgLnRoZW4oKHJlczogQVBJUmVzcG9uc2UpID0+IChcbiAgICAgICAge1xuICAgICAgICAgIG1lc3NhZ2U6IHJlcy5ib2R5Lm1lc3NhZ2UsXG4gICAgICAgICAgc3RhdHVzOiByZXMuc3RhdHVzXG4gICAgICAgIH0gYXMgRG9tYWluVGFnc01lc3NhZ2VSZXMpKTtcbiAgfVxuXG4gIHN0YXRpc3RpYyhkb21haW46IHN0cmluZywgdGFnOiBzdHJpbmcsIHF1ZXJ5OiBEb21haW5UYWdzU3RhdGlzdGljUXVlcnkpXG4gICAgOiBQcm9taXNlPERvbWFpblRhZ1N0YXRpc3RpYz4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90YWdzJywgdGFnLCAnc3RhdHMnKSwgcXVlcnkpXG4gICAgICAudGhlbihcbiAgICAgICAgKHJlczogQVBJUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlVGFnU3RhdGlzdGljKHJlcylcbiAgICAgICk7XG4gIH1cblxuICBjb3VudHJpZXMoZG9tYWluOiBzdHJpbmcsIHRhZzogc3RyaW5nKTogUHJvbWlzZTxEb21haW5UYWdDb3VudHJpZXNBZ2dyZWdhdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90YWdzJywgdGFnLCAnc3RhdHMvYWdncmVnYXRlcy9jb3VudHJpZXMnKSlcbiAgICAgIC50aGVuKFxuICAgICAgICAocmVzOiBEb21haW5UYWdDb3VudHJpZXNBUElSZXNwb25zZSkgPT4gcmVzLmJvZHkgYXMgRG9tYWluVGFnQ291bnRyaWVzQWdncmVnYXRpb25cbiAgICAgICk7XG4gIH1cblxuICBwcm92aWRlcnMoZG9tYWluOiBzdHJpbmcsIHRhZzogc3RyaW5nKTogUHJvbWlzZTxEb21haW5UYWdQcm92aWRlcnNBZ2dyZWdhdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90YWdzJywgdGFnLCAnc3RhdHMvYWdncmVnYXRlcy9wcm92aWRlcnMnKSlcbiAgICAgIC50aGVuKFxuICAgICAgICAocmVzOiBEb21haW5UYWdQcm92aWRlcnNBUElSZXNwb25zZSkgPT4gcmVzLmJvZHkgYXMgRG9tYWluVGFnUHJvdmlkZXJzQWdncmVnYXRpb25cbiAgICAgICk7XG4gIH1cblxuICBkZXZpY2VzKGRvbWFpbjogc3RyaW5nLCB0YWc6IHN0cmluZyk6IFByb21pc2U8RG9tYWluVGFnRGV2aWNlc0FnZ3JlZ2F0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RhZ3MnLCB0YWcsICdzdGF0cy9hZ2dyZWdhdGVzL2RldmljZXMnKSlcbiAgICAgIC50aGVuKFxuICAgICAgICAocmVzOiBEb21haW5UYWdEZXZpY2VzQVBJUmVzcG9uc2UpID0+IHJlcy5ib2R5IGFzIERvbWFpblRhZ0RldmljZXNBZ2dyZWdhdGlvblxuICAgICAgKTtcbiAgfVxufVxuIiwiaW1wb3J0IHVybGpvaW4gZnJvbSAndXJsLWpvaW4nO1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi4vY29tbW9uL1JlcXVlc3QnO1xuXG5pbXBvcnQge1xuICBDcmVhdGVEb21haW5UZW1wbGF0ZUFQSVJlc3BvbnNlLFxuICBDcmVhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25BUElSZXNwb25zZSxcbiAgQ3JlYXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uUmVzdWx0LFxuICBEb21haW5UZW1wbGF0ZURhdGEsXG4gIERvbWFpblRlbXBsYXRlc1F1ZXJ5LFxuICBEb21haW5UZW1wbGF0ZVVwZGF0ZURhdGEsXG4gIERvbWFpblRlbXBsYXRlVXBkYXRlVmVyc2lvbkRhdGEsXG4gIERvbWFpblRlbXBsYXRlVmVyc2lvbkRhdGEsXG4gIEdldERvbWFpblRlbXBsYXRlQVBJUmVzcG9uc2UsXG4gIExpc3REb21haW5UZW1wbGF0ZXNBUElSZXNwb25zZSxcbiAgTGlzdERvbWFpblRlbXBsYXRlc1Jlc3VsdCxcbiAgTGlzdERvbWFpblRlbXBsYXRlVmVyc2lvbnNBUElSZXNwb25zZSxcbiAgTGlzdERvbWFpblRlbXBsYXRlVmVyc2lvbnNSZXN1bHQsXG4gIE11dGF0ZURvbWFpblRlbXBsYXRlVmVyc2lvbkFQSVJlc3BvbnNlLFxuICBNdXRhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25SZXN1bHQsXG4gIE5vdGlmaWNhdGlvbkFQSVJlc3BvbnNlLFxuICBOb3RpZmljYXRpb25SZXN1bHQsXG4gIFNob3J0VGVtcGxhdGVWZXJzaW9uLFxuICBUZW1wbGF0ZVF1ZXJ5LFxuICBUZW1wbGF0ZVZlcnNpb24sXG4gIFVwZGF0ZU9yRGVsZXRlRG9tYWluVGVtcGxhdGVBUElSZXNwb25zZSxcbiAgVXBkYXRlT3JEZWxldGVEb21haW5UZW1wbGF0ZVJlc3VsdFxufSBmcm9tICcuLi8uLi9UeXBlcy9Eb21haW5zJztcbmltcG9ydCBOYXZpZ2F0aW9uVGhydVBhZ2VzIGZyb20gJy4uL2NvbW1vbi9OYXZpZ2F0aW9uVGhydVBhZ2VzJztcbmltcG9ydCB7IElEb21haW5UZW1wbGF0ZSwgSURvbWFpblRlbXBsYXRlc0NsaWVudCB9IGZyb20gJy4uLy4uL0ludGVyZmFjZXMvRG9tYWlucyc7XG5cbmV4cG9ydCBjbGFzcyBEb21haW5UZW1wbGF0ZUl0ZW0gaW1wbGVtZW50cyBJRG9tYWluVGVtcGxhdGUge1xuICBuYW1lIDogc3RyaW5nO1xuICBkZXNjcmlwdGlvbiA6IHN0cmluZztcbiAgY3JlYXRlZEF0IDogRGF0ZSB8ICcnO1xuICBjcmVhdGVkQnkgOiBzdHJpbmc7XG4gIGlkIDogc3RyaW5nO1xuICB2ZXJzaW9uPzogVGVtcGxhdGVWZXJzaW9uO1xuICB2ZXJzaW9ucz86IFNob3J0VGVtcGxhdGVWZXJzaW9uW107XG5cbiAgY29uc3RydWN0b3IoZG9tYWluVGVtcGxhdGVGcm9tQVBJOiBJRG9tYWluVGVtcGxhdGUpIHtcbiAgICB0aGlzLm5hbWUgPSBkb21haW5UZW1wbGF0ZUZyb21BUEkubmFtZTtcbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gZG9tYWluVGVtcGxhdGVGcm9tQVBJLmRlc2NyaXB0aW9uO1xuICAgIHRoaXMuY3JlYXRlZEF0ID0gZG9tYWluVGVtcGxhdGVGcm9tQVBJLmNyZWF0ZWRBdCA/IG5ldyBEYXRlKGRvbWFpblRlbXBsYXRlRnJvbUFQSS5jcmVhdGVkQXQpIDogJyc7XG4gICAgdGhpcy5jcmVhdGVkQnkgPSBkb21haW5UZW1wbGF0ZUZyb21BUEkuY3JlYXRlZEJ5O1xuICAgIHRoaXMuaWQgPSBkb21haW5UZW1wbGF0ZUZyb21BUEkuaWQ7XG5cbiAgICBpZiAoZG9tYWluVGVtcGxhdGVGcm9tQVBJLnZlcnNpb24pIHtcbiAgICAgIHRoaXMudmVyc2lvbiA9IGRvbWFpblRlbXBsYXRlRnJvbUFQSS52ZXJzaW9uO1xuICAgICAgaWYgKGRvbWFpblRlbXBsYXRlRnJvbUFQSS52ZXJzaW9uLmNyZWF0ZWRBdCkge1xuICAgICAgICB0aGlzLnZlcnNpb24uY3JlYXRlZEF0ID0gbmV3IERhdGUoZG9tYWluVGVtcGxhdGVGcm9tQVBJLnZlcnNpb24uY3JlYXRlZEF0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZG9tYWluVGVtcGxhdGVGcm9tQVBJLnZlcnNpb25zICYmIGRvbWFpblRlbXBsYXRlRnJvbUFQSS52ZXJzaW9ucy5sZW5ndGgpIHtcbiAgICAgIHRoaXMudmVyc2lvbnMgPSBkb21haW5UZW1wbGF0ZUZyb21BUEkudmVyc2lvbnMubWFwKCh2ZXJzaW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHsgLi4udmVyc2lvbiB9O1xuICAgICAgICByZXN1bHQuY3JlYXRlZEF0ID0gbmV3IERhdGUodmVyc2lvbi5jcmVhdGVkQXQpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERvbWFpblRlbXBsYXRlc0NsaWVudFxuICBleHRlbmRzIE5hdmlnYXRpb25UaHJ1UGFnZXM8TGlzdERvbWFpblRlbXBsYXRlc1Jlc3VsdD5cbiAgaW1wbGVtZW50cyBJRG9tYWluVGVtcGxhdGVzQ2xpZW50IHtcbiAgYmFzZVJvdXRlOiBzdHJpbmc7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCkge1xuICAgIHN1cGVyKHJlcXVlc3QpO1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgdGhpcy5iYXNlUm91dGUgPSAnL3YzLyc7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlQ3JlYXRpb25SZXNwb25zZShkYXRhOiBDcmVhdGVEb21haW5UZW1wbGF0ZUFQSVJlc3BvbnNlKTogSURvbWFpblRlbXBsYXRlIHtcbiAgICByZXR1cm4gbmV3IERvbWFpblRlbXBsYXRlSXRlbShkYXRhLmJvZHkudGVtcGxhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZUNyZWF0aW9uVmVyc2lvblJlc3BvbnNlKFxuICAgIGRhdGE6IENyZWF0ZURvbWFpblRlbXBsYXRlVmVyc2lvbkFQSVJlc3BvbnNlXG4gICk6IENyZWF0ZURvbWFpblRlbXBsYXRlVmVyc2lvblJlc3VsdCB7XG4gICAgY29uc3QgcmVzdWx0OiBDcmVhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25SZXN1bHQgPSB7fSBhcyBDcmVhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25SZXN1bHQ7XG4gICAgcmVzdWx0LnN0YXR1cyA9IGRhdGEuc3RhdHVzO1xuICAgIHJlc3VsdC5tZXNzYWdlID0gZGF0YS5ib2R5Lm1lc3NhZ2U7XG4gICAgaWYgKGRhdGEuYm9keSAmJiBkYXRhLmJvZHkudGVtcGxhdGUpIHtcbiAgICAgIHJlc3VsdC50ZW1wbGF0ZSA9IG5ldyBEb21haW5UZW1wbGF0ZUl0ZW0oZGF0YS5ib2R5LnRlbXBsYXRlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VNdXRhdGlvblJlc3BvbnNlKFxuICAgIGRhdGE6IFVwZGF0ZU9yRGVsZXRlRG9tYWluVGVtcGxhdGVBUElSZXNwb25zZVxuICApOiBVcGRhdGVPckRlbGV0ZURvbWFpblRlbXBsYXRlUmVzdWx0IHtcbiAgICBjb25zdCByZXN1bHQ6IFVwZGF0ZU9yRGVsZXRlRG9tYWluVGVtcGxhdGVSZXN1bHQgPSB7fSBhcyBVcGRhdGVPckRlbGV0ZURvbWFpblRlbXBsYXRlUmVzdWx0O1xuICAgIHJlc3VsdC5zdGF0dXMgPSBkYXRhLnN0YXR1cztcbiAgICByZXN1bHQubWVzc2FnZSA9IGRhdGEuYm9keS5tZXNzYWdlO1xuICAgIGlmIChkYXRhLmJvZHkgJiYgZGF0YS5ib2R5LnRlbXBsYXRlKSB7XG4gICAgICByZXN1bHQudGVtcGxhdGVOYW1lID0gZGF0YS5ib2R5LnRlbXBsYXRlLm5hbWU7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlTm90aWZpY2F0aW9uUmVzcG9uc2UoZGF0YTogTm90aWZpY2F0aW9uQVBJUmVzcG9uc2UpOiBOb3RpZmljYXRpb25SZXN1bHQge1xuICAgIGNvbnN0IHJlc3VsdDogTm90aWZpY2F0aW9uUmVzdWx0ID0ge30gYXMgTm90aWZpY2F0aW9uUmVzdWx0O1xuICAgIHJlc3VsdC5zdGF0dXMgPSBkYXRhLnN0YXR1cztcbiAgICByZXN1bHQubWVzc2FnZSA9IGRhdGEuYm9keS5tZXNzYWdlO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlTXV0YXRlVGVtcGxhdGVWZXJzaW9uUmVzcG9uc2UoXG4gICAgZGF0YTogTXV0YXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uQVBJUmVzcG9uc2VcbiAgKTogTXV0YXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uUmVzdWx0IHtcbiAgICBjb25zdCByZXN1bHQ6IE11dGF0ZURvbWFpblRlbXBsYXRlVmVyc2lvblJlc3VsdCA9IHt9IGFzIE11dGF0ZURvbWFpblRlbXBsYXRlVmVyc2lvblJlc3VsdDtcbiAgICByZXN1bHQuc3RhdHVzID0gZGF0YS5zdGF0dXM7XG4gICAgcmVzdWx0Lm1lc3NhZ2UgPSBkYXRhLmJvZHkubWVzc2FnZTtcbiAgICBpZiAoZGF0YS5ib2R5LnRlbXBsYXRlKSB7XG4gICAgICByZXN1bHQudGVtcGxhdGVOYW1lID0gZGF0YS5ib2R5LnRlbXBsYXRlLm5hbWU7XG4gICAgICByZXN1bHQudGVtcGxhdGVWZXJzaW9uID0geyB0YWc6IGRhdGEuYm9keS50ZW1wbGF0ZS52ZXJzaW9uLnRhZyB9O1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlTGlzdChyZXNwb25zZTogTGlzdERvbWFpblRlbXBsYXRlc0FQSVJlc3BvbnNlKTogTGlzdERvbWFpblRlbXBsYXRlc1Jlc3VsdCB7XG4gICAgY29uc3QgZGF0YSA9IHt9IGFzIExpc3REb21haW5UZW1wbGF0ZXNSZXN1bHQ7XG5cbiAgICBkYXRhLml0ZW1zID0gcmVzcG9uc2UuYm9keS5pdGVtcy5tYXAoKGQ6IElEb21haW5UZW1wbGF0ZSkgPT4gbmV3IERvbWFpblRlbXBsYXRlSXRlbShkKSk7XG5cbiAgICBkYXRhLnBhZ2VzID0gdGhpcy5wYXJzZVBhZ2VMaW5rcyhyZXNwb25zZSwgJz8nLCAncCcpO1xuICAgIGRhdGEuc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlTGlzdFRlbXBsYXRlVmVyc2lvbnMoXG4gICAgcmVzcG9uc2U6IExpc3REb21haW5UZW1wbGF0ZVZlcnNpb25zQVBJUmVzcG9uc2VcbiAgKTogTGlzdERvbWFpblRlbXBsYXRlVmVyc2lvbnNSZXN1bHQge1xuICAgIGNvbnN0IGRhdGEgPSB7fSBhcyBMaXN0RG9tYWluVGVtcGxhdGVWZXJzaW9uc1Jlc3VsdDtcblxuICAgIGRhdGEudGVtcGxhdGUgPSBuZXcgRG9tYWluVGVtcGxhdGVJdGVtKHJlc3BvbnNlLmJvZHkudGVtcGxhdGUpO1xuXG4gICAgZGF0YS5wYWdlcyA9IHRoaXMucGFyc2VQYWdlTGlua3MocmVzcG9uc2UsICc/JywgJ3AnKTtcblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgYXN5bmMgbGlzdChkb21haW46IHN0cmluZywgcXVlcnk/OiBEb21haW5UZW1wbGF0ZXNRdWVyeSk6IFByb21pc2U8TGlzdERvbWFpblRlbXBsYXRlc1Jlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3RMaXN0V2l0aFBhZ2VzKHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90ZW1wbGF0ZXMnKSwgcXVlcnkpO1xuICB9XG5cbiAgZ2V0KGRvbWFpbjogc3RyaW5nLCB0ZW1wbGF0ZU5hbWU6IHN0cmluZywgcXVlcnk/OiBUZW1wbGF0ZVF1ZXJ5KTogUHJvbWlzZTxJRG9tYWluVGVtcGxhdGU+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGVtcGxhdGVzLycsIHRlbXBsYXRlTmFtZSksIHF1ZXJ5KVxuICAgICAgLnRoZW4oXG4gICAgICAgIChyZXM6IEdldERvbWFpblRlbXBsYXRlQVBJUmVzcG9uc2UpID0+IG5ldyBEb21haW5UZW1wbGF0ZUl0ZW0ocmVzLmJvZHkudGVtcGxhdGUpXG4gICAgICApO1xuICB9XG5cbiAgY3JlYXRlKFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIGRhdGE6IERvbWFpblRlbXBsYXRlRGF0YVxuICApOiBQcm9taXNlPElEb21haW5UZW1wbGF0ZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGVtcGxhdGVzJyksIGRhdGEpXG4gICAgICAudGhlbigocmVzOiBDcmVhdGVEb21haW5UZW1wbGF0ZUFQSVJlc3BvbnNlKSA9PiB0aGlzLnBhcnNlQ3JlYXRpb25SZXNwb25zZShyZXMpKTtcbiAgfVxuXG4gIHVwZGF0ZShcbiAgICBkb21haW46IHN0cmluZyxcbiAgICB0ZW1wbGF0ZU5hbWU6IHN0cmluZyxcbiAgICBkYXRhOiBEb21haW5UZW1wbGF0ZVVwZGF0ZURhdGFcbiAgKTogUHJvbWlzZTxVcGRhdGVPckRlbGV0ZURvbWFpblRlbXBsYXRlUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXRXaXRoRkQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RlbXBsYXRlcy8nLCB0ZW1wbGF0ZU5hbWUpLCBkYXRhKVxuICAgICAgLnRoZW4oKHJlczogVXBkYXRlT3JEZWxldGVEb21haW5UZW1wbGF0ZUFQSVJlc3BvbnNlKSA9PiB0aGlzLnBhcnNlTXV0YXRpb25SZXNwb25zZShyZXMpKTtcbiAgfVxuXG4gIGRlc3Ryb3koZG9tYWluOiBzdHJpbmcsIHRlbXBsYXRlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxVcGRhdGVPckRlbGV0ZURvbWFpblRlbXBsYXRlUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5kZWxldGUodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RlbXBsYXRlcy8nLCB0ZW1wbGF0ZU5hbWUpKVxuICAgICAgLnRoZW4oKHJlczogVXBkYXRlT3JEZWxldGVEb21haW5UZW1wbGF0ZUFQSVJlc3BvbnNlKSA9PiB0aGlzLnBhcnNlTXV0YXRpb25SZXNwb25zZShyZXMpKTtcbiAgfVxuXG4gIGRlc3Ryb3lBbGwoZG9tYWluOiBzdHJpbmcpOiBQcm9taXNlPE5vdGlmaWNhdGlvblJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90ZW1wbGF0ZXMnKSlcbiAgICAgIC50aGVuKChyZXM6IE5vdGlmaWNhdGlvbkFQSVJlc3BvbnNlKSA9PiB0aGlzLnBhcnNlTm90aWZpY2F0aW9uUmVzcG9uc2UocmVzKSk7XG4gIH1cblxuICBsaXN0VmVyc2lvbnMoXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgdGVtcGxhdGVOYW1lOiBzdHJpbmcsXG4gICAgcXVlcnk/OiBEb21haW5UZW1wbGF0ZXNRdWVyeVxuICApOiBQcm9taXNlPExpc3REb21haW5UZW1wbGF0ZVZlcnNpb25zUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RlbXBsYXRlcycsIHRlbXBsYXRlTmFtZSwgJy92ZXJzaW9ucycpLCBxdWVyeSlcbiAgICAgIC50aGVuKFxuICAgICAgICAocmVzOiBMaXN0RG9tYWluVGVtcGxhdGVWZXJzaW9uc0FQSVJlc3BvbnNlKSA9PiB0aGlzLnBhcnNlTGlzdFRlbXBsYXRlVmVyc2lvbnMocmVzKVxuICAgICAgKTtcbiAgfVxuXG4gIGdldFZlcnNpb24oZG9tYWluOiBzdHJpbmcsIHRlbXBsYXRlTmFtZTogc3RyaW5nLCB0YWc6IHN0cmluZyk6IFByb21pc2U8SURvbWFpblRlbXBsYXRlPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbih0aGlzLmJhc2VSb3V0ZSwgZG9tYWluLCAnL3RlbXBsYXRlcy8nLCB0ZW1wbGF0ZU5hbWUsICcvdmVyc2lvbnMvJywgdGFnKSlcbiAgICAgIC50aGVuKFxuICAgICAgICAocmVzOiBHZXREb21haW5UZW1wbGF0ZUFQSVJlc3BvbnNlKSA9PiBuZXcgRG9tYWluVGVtcGxhdGVJdGVtKHJlcy5ib2R5LnRlbXBsYXRlKVxuICAgICAgKTtcbiAgfVxuXG4gIGNyZWF0ZVZlcnNpb24oXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgdGVtcGxhdGVOYW1lOiBzdHJpbmcsXG4gICAgZGF0YTogRG9tYWluVGVtcGxhdGVWZXJzaW9uRGF0YVxuICApOiBQcm9taXNlPENyZWF0ZURvbWFpblRlbXBsYXRlVmVyc2lvblJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdFdpdGhGRCh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGVtcGxhdGVzLycsIHRlbXBsYXRlTmFtZSwgJy92ZXJzaW9ucycpLCBkYXRhKVxuICAgICAgLnRoZW4oXG4gICAgICAgIChyZXM6IENyZWF0ZURvbWFpblRlbXBsYXRlVmVyc2lvbkFQSVJlc3BvbnNlKSA9PiB0aGlzLnBhcnNlQ3JlYXRpb25WZXJzaW9uUmVzcG9uc2UocmVzKVxuICAgICAgKTtcbiAgfVxuXG4gIHVwZGF0ZVZlcnNpb24oXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgdGVtcGxhdGVOYW1lOiBzdHJpbmcsXG4gICAgdGFnOiBzdHJpbmcsXG4gICAgZGF0YTogRG9tYWluVGVtcGxhdGVVcGRhdGVWZXJzaW9uRGF0YVxuICApOiBQcm9taXNlPE11dGF0ZURvbWFpblRlbXBsYXRlVmVyc2lvblJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0V2l0aEZEKHVybGpvaW4odGhpcy5iYXNlUm91dGUsIGRvbWFpbiwgJy90ZW1wbGF0ZXMvJywgdGVtcGxhdGVOYW1lLCAnL3ZlcnNpb25zLycsIHRhZyksIGRhdGEpXG4gICAgICAudGhlbihcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICAgICAgKHJlczogTXV0YXRlRG9tYWluVGVtcGxhdGVWZXJzaW9uQVBJUmVzcG9uc2UpID0+IHRoaXMucGFyc2VNdXRhdGVUZW1wbGF0ZVZlcnNpb25SZXNwb25zZShyZXMpXG4gICAgICApO1xuICB9XG5cbiAgZGVzdHJveVZlcnNpb24oXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgdGVtcGxhdGVOYW1lOiBzdHJpbmcsXG4gICAgdGFnOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxNdXRhdGVEb21haW5UZW1wbGF0ZVZlcnNpb25SZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZSh1cmxqb2luKHRoaXMuYmFzZVJvdXRlLCBkb21haW4sICcvdGVtcGxhdGVzLycsIHRlbXBsYXRlTmFtZSwgJy92ZXJzaW9ucy8nLCB0YWcpKVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICAgIC50aGVuKChyZXM6IE11dGF0ZURvbWFpblRlbXBsYXRlVmVyc2lvbkFQSVJlc3BvbnNlKSA9PiB0aGlzLnBhcnNlTXV0YXRlVGVtcGxhdGVWZXJzaW9uUmVzcG9uc2UocmVzKSk7XG4gIH1cbn1cbiIsImltcG9ydCB1cmxqb2luIGZyb20gJ3VybC1qb2luJztcbmltcG9ydCBOYXZpZ2F0aW9uVGhydVBhZ2VzIGZyb20gJy4vY29tbW9uL05hdmlnYXRpb25UaHJ1UGFnZXMnO1xuaW1wb3J0IHtcbiAgRXZlbnRzTGlzdCxcbiAgRXZlbnRzUXVlcnksXG4gIEV2ZW50c1Jlc3BvbnNlLFxufSBmcm9tICcuLi9UeXBlcy9FdmVudHMnO1xuXG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuL2NvbW1vbi9SZXF1ZXN0JztcbmltcG9ydCB7IElFdmVudENsaWVudCB9IGZyb20gJy4uL0ludGVyZmFjZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFdmVudENsaWVudFxuICBleHRlbmRzIE5hdmlnYXRpb25UaHJ1UGFnZXM8RXZlbnRzTGlzdD5cbiAgaW1wbGVtZW50cyBJRXZlbnRDbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICBzdXBlcihyZXF1ZXN0KTtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlTGlzdChcbiAgICByZXNwb25zZTogRXZlbnRzUmVzcG9uc2UsXG4gICk6IEV2ZW50c0xpc3Qge1xuICAgIGNvbnN0IGRhdGEgPSB7fSBhcyBFdmVudHNMaXN0O1xuICAgIGRhdGEuaXRlbXMgPSByZXNwb25zZS5ib2R5Lml0ZW1zO1xuXG4gICAgZGF0YS5wYWdlcyA9IHRoaXMucGFyc2VQYWdlTGlua3MocmVzcG9uc2UsICcvJyk7XG4gICAgZGF0YS5zdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBhc3luYyBnZXQoZG9tYWluOiBzdHJpbmcsIHF1ZXJ5PzogRXZlbnRzUXVlcnkpIDogUHJvbWlzZTxFdmVudHNMaXN0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdExpc3RXaXRoUGFnZXModXJsam9pbignL3YzJywgZG9tYWluLCAnZXZlbnRzJyksIHF1ZXJ5KTtcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgY2FtZWxjYXNlICovXG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuL2NvbW1vbi9SZXF1ZXN0JztcblxuaW1wb3J0IHtcbiAgSXBQb29sQ3JlYXRlRGF0YSxcbiAgSXBQb29sQ3JlYXRlUmVzcG9uc2UsXG4gIElwUG9vbENyZWF0ZVJlc3VsdCxcbiAgSXBQb29sRGVsZXRlRGF0YSxcbiAgSXBQb29sTGlzdFJlc3BvbnNlLFxuICBJcFBvb2xMaXN0UmVzdWx0LFxuICBJcFBvb2xNZXNzYWdlUmVzcG9uc2UsXG4gIElwUG9vbE1lc3NhZ2VSZXN1bHQsXG4gIElwUG9vbFVwZGF0ZURhdGEsXG59IGZyb20gJy4uL1R5cGVzL0lQUG9vbHMnO1xuaW1wb3J0IHsgSUlQUG9vbHNDbGllbnQgfSBmcm9tICcuLi9JbnRlcmZhY2VzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSXBQb29sc0NsaWVudCBpbXBsZW1lbnRzIElJUFBvb2xzQ2xpZW50IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0KSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgfVxuXG4gIGxpc3QoKTogUHJvbWlzZTxJcFBvb2xMaXN0UmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQoJy92MS9pcF9wb29scycpXG4gICAgICAudGhlbigocmVzcG9uc2U6IElwUG9vbExpc3RSZXNwb25zZSkgPT4gdGhpcy5wYXJzZUlwUG9vbHNSZXNwb25zZShyZXNwb25zZSkpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlKGRhdGE6IElwUG9vbENyZWF0ZURhdGEpOiBQcm9taXNlPElwUG9vbENyZWF0ZVJlc3VsdD4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBJcFBvb2xDcmVhdGVSZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKCcvdjEvaXBfcG9vbHMnLCBkYXRhKTtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAuLi5yZXNwb25zZS5ib2R5XG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZShwb29sSWQ6IHN0cmluZywgZGF0YTogSXBQb29sVXBkYXRlRGF0YSk6IFByb21pc2U8SXBQb29sTWVzc2FnZVJlc3VsdD4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBJcFBvb2xNZXNzYWdlUmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QucGF0Y2hXaXRoRkQoYC92MS9pcF9wb29scy8ke3Bvb2xJZH1gLCBkYXRhKTtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAuLi5yZXNwb25zZS5ib2R5XG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZShwb29sSWQ6IHN0cmluZywgZGF0YTogSXBQb29sRGVsZXRlRGF0YSk6IFByb21pc2U8SXBQb29sTWVzc2FnZVJlc3VsdD4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOklwUG9vbE1lc3NhZ2VSZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5kZWxldGUoYC92MS9pcF9wb29scy8ke3Bvb2xJZH1gLCBkYXRhKTtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAuLi5yZXNwb25zZS5ib2R5XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VJcFBvb2xzUmVzcG9uc2UocmVzcG9uc2U6IElwUG9vbExpc3RSZXNwb25zZSk6IElwUG9vbExpc3RSZXN1bHQge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIC4uLnJlc3BvbnNlLmJvZHlcbiAgICB9O1xuICB9XG59XG4iLCJpbXBvcnQgTWdSZXF1ZXN0IGZyb20gJy4vY29tbW9uL1JlcXVlc3QnO1xuaW1wb3J0IHsgSXBEYXRhLCBJUHNMaXN0UXVlcnksIElwc0xpc3RSZXNwb25zZUJvZHkgfSBmcm9tICcuLi9UeXBlcy9JUHMnO1xuaW1wb3J0IHsgSUlQc0NsaWVudCB9IGZyb20gJy4uL0ludGVyZmFjZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJcHNDbGllbnQgaW1wbGVtZW50cyBJSVBzQ2xpZW50IHtcbiAgcmVxdWVzdDogTWdSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IE1nUmVxdWVzdCkge1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gIH1cblxuICBhc3luYyBsaXN0KHF1ZXJ5PzogSVBzTGlzdFF1ZXJ5KTogUHJvbWlzZTxJcHNMaXN0UmVzcG9uc2VCb2R5PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QuZ2V0KCcvdjMvaXBzJywgcXVlcnkpO1xuICAgIHJldHVybiB0aGlzLnBhcnNlSXBzUmVzcG9uc2U8SXBzTGlzdFJlc3BvbnNlQm9keT4ocmVzcG9uc2UpO1xuICB9XG5cbiAgYXN5bmMgZ2V0KGlwOiBzdHJpbmcpOiBQcm9taXNlPElwRGF0YT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LmdldChgL3YzL2lwcy8ke2lwfWApO1xuICAgIHJldHVybiB0aGlzLnBhcnNlSXBzUmVzcG9uc2U8SXBEYXRhPihyZXNwb25zZSk7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlSXBzUmVzcG9uc2U8VD4ocmVzcG9uc2U6IHsgYm9keTogVCB9KTogVCB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmJvZHk7XG4gIH1cbn1cbiIsImltcG9ydCB7IElJbmJveFBsYWNlbWVudHNBdHRyaWJ1dGVzQ2xpZW50IH0gZnJvbSAnLi4vLi4vSW50ZXJmYWNlcyc7XG5pbXBvcnQge1xuICBJbmJveFBsYWNlbWVudHNBdHRyaWJ1dGVzQXBpUmVzcG9uc2UsXG4gIEluYm94UGxhY2VtZW50c0F0dHJpYnV0ZXNSZXN1bHQsXG4gIEluYm94UGxhY2VtZW50c1ZhbHVlc0FwaVJlc3BvbnNlLFxuICBJbmJveFBsYWNlbWVudHNWYWx1ZXNSZXN1bHRcbn0gZnJvbSAnLi4vLi4vVHlwZXMvSW5ib3hQbGFjZW1lbnRzJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4uL2NvbW1vbi9SZXF1ZXN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5ib3hQbGFjZW1lbnRzQXR0cmlidXRlc0NsaWVudCBpbXBsZW1lbnRzIElJbmJveFBsYWNlbWVudHNBdHRyaWJ1dGVzQ2xpZW50IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcbiAgcGF0aDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlcXVlc3Q6IFJlcXVlc3QsXG4gICAgcGF0aDogc3RyaW5nXG4gICkge1xuICAgIHRoaXMucGF0aCA9IHBhdGg7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgfVxuXG4gIGFzeW5jIGxpc3QoKTogUHJvbWlzZTxJbmJveFBsYWNlbWVudHNBdHRyaWJ1dGVzUmVzdWx0PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QuZ2V0KHRoaXMucGF0aCkgYXMgSW5ib3hQbGFjZW1lbnRzQXR0cmlidXRlc0FwaVJlc3BvbnNlO1xuICAgIHJldHVybiB7XG4gICAgICBpdGVtczogcmVzcG9uc2UuYm9keS5pdGVtcyxcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgIH0gYXMgSW5ib3hQbGFjZW1lbnRzQXR0cmlidXRlc1Jlc3VsdDtcbiAgfVxuXG4gIGFzeW5jIGdldChhdHRyaWJ1dGVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPEluYm94UGxhY2VtZW50c1ZhbHVlc1Jlc3VsdD4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LmdldChgJHt0aGlzLnBhdGh9LyR7YXR0cmlidXRlTmFtZX1gKSBhcyBJbmJveFBsYWNlbWVudHNWYWx1ZXNBcGlSZXNwb25zZTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4ucmVzcG9uc2UuYm9keSxcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzXG4gICAgfTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgSW5ib3hQbGFjZW1lbnRzRmlsdGVyc0FwaVJlc3BvbnNlLCBJbmJveFBsYWNlbWVudHNGaWx0ZXJzUmVzdWx0IH0gZnJvbSAnLi4vLi4vVHlwZXMvSW5ib3hQbGFjZW1lbnRzJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4uL2NvbW1vbi9SZXF1ZXN0JztcbmltcG9ydCB7IElJbmJveFBsYWNlbWVudHNGaWx0ZXJzQ2xpZW50IH0gZnJvbSAnLi4vLi4vSW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEluYm94UGxhY2VtZW50c0ZpbHRlcnNDbGllbnQgaW1wbGVtZW50cyBJSW5ib3hQbGFjZW1lbnRzRmlsdGVyc0NsaWVudCB7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG4gIHBhdGg6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICByZXF1ZXN0OiBSZXF1ZXN0LFxuICAgIHBhdGg6IHN0cmluZ1xuICApIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMucGF0aCA9IHBhdGg7XG4gIH1cblxuICBhc3luYyBsaXN0KCk6IFByb21pc2U8SW5ib3hQbGFjZW1lbnRzRmlsdGVyc1Jlc3VsdD4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucmVxdWVzdC5nZXQodGhpcy5wYXRoKSBhcyBJbmJveFBsYWNlbWVudHNGaWx0ZXJzQXBpUmVzcG9uc2U7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogcmVzdWx0LnN0YXR1cyxcbiAgICAgIHN1cHBvcnRlZF9maWx0ZXJzOiByZXN1bHQuYm9keS5zdXBwb3J0ZWRfZmlsdGVyc1xuICAgIH07XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIElJUFJTaGFyaW5nQ2xpZW50LFxuICBJSW5ib3hQbGFjZW1lbnRzQXR0cmlidXRlc0NsaWVudCxcbiAgSUluYm94UGxhY2VtZW50c0ZpbHRlcnNDbGllbnQsXG4gIElJbmJveFBsYWNlbWVudHNSZXN1bHRzQ2xpZW50LFxuICBJTG9nZ2VyXG59IGZyb20gJy4uLy4uLy4uL0ludGVyZmFjZXMnO1xuXG5pbXBvcnQge1xuICBJbmJveFBsYWNlbWVudHNCb3gsXG4gIEluYm94UGxhY2VtZW50c0Rlc3Ryb3lBUElSZXNwb25zZSxcbiAgSW5ib3hQbGFjZW1lbnRzRGVzdHJveVJlc3VsdCxcbiAgSW5ib3hQbGFjZW1lbnRzUmVzdWx0LFxuICBJbmJveFBsYWNlbWVudHNSZXN1bHRBUElSZXNwb25zZSxcbiAgSW5ib3hQbGFjZW1lbnRzUmVzdWx0QVBJU2hhcGUsXG4gIEluYm94UGxhY2VtZW50c1Jlc3VsdFdpdGhTdGF0dXMsXG4gIEluYm94UGxhY2VtZW50c1Jlc3VsdHNBcGlRdWVyeSxcbiAgSW5ib3hQbGFjZW1lbnRzUmVzdWx0c0RhdGVzLFxuICBJbmJveFBsYWNlbWVudHNSZXN1bHRzTGlzdCxcbiAgSW5ib3hQbGFjZW1lbnRzUmVzdWx0c0xpc3RBUElSZXNwb25zZSxcbiAgSW5ib3hQbGFjZW1lbnRzUmVzdWx0c1F1ZXJ5XG59IGZyb20gJy4uLy4uLy4uL1R5cGVzL0luYm94UGxhY2VtZW50cyc7XG5cbmltcG9ydCBOYXZpZ2F0aW9uVGhydVBhZ2VzIGZyb20gJy4uLy4uL2NvbW1vbi9OYXZpZ2F0aW9uVGhydVBhZ2VzJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4uLy4uL2NvbW1vbi9SZXF1ZXN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5ib3hQbGFjZW1lbnRzUmVzdWx0c0NsaWVudFxuICBleHRlbmRzIE5hdmlnYXRpb25UaHJ1UGFnZXM8SW5ib3hQbGFjZW1lbnRzUmVzdWx0c0xpc3Q+XG4gIGltcGxlbWVudHMgSUluYm94UGxhY2VtZW50c1Jlc3VsdHNDbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuICBwdWJsaWMgYXR0cmlidXRlczogSUluYm94UGxhY2VtZW50c0F0dHJpYnV0ZXNDbGllbnQ7XG4gIHB1YmxpYyBmaWx0ZXJzOiBJSW5ib3hQbGFjZW1lbnRzRmlsdGVyc0NsaWVudDtcbiAgcHVibGljIHNoYXJpbmc6IElJUFJTaGFyaW5nQ2xpZW50O1xuICBwcml2YXRlIGxvZ2dlcjogSUxvZ2dlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICByZXF1ZXN0OiBSZXF1ZXN0LFxuICAgIGF0dHJpYnV0ZXM6IElJbmJveFBsYWNlbWVudHNBdHRyaWJ1dGVzQ2xpZW50LFxuICAgIGZpbHRlcnM6IElJbmJveFBsYWNlbWVudHNGaWx0ZXJzQ2xpZW50LFxuICAgIHNoYXJpbmc6IElJUFJTaGFyaW5nQ2xpZW50LFxuICAgIGxvZ2dlcjogSUxvZ2dlciA9IGNvbnNvbGVcbiAgKSB7XG4gICAgc3VwZXIocmVxdWVzdCk7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICB0aGlzLmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzO1xuICAgIHRoaXMuZmlsdGVycyA9IGZpbHRlcnM7XG4gICAgdGhpcy5zaGFyaW5nID0gc2hhcmluZztcbiAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlcjtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydERhdGVUb1VUQyhrZXk6c3RyaW5nLCBpbnB1dERhdGU6IERhdGUpOiBzdHJpbmcge1xuICAgIC8qXG4gICAgICBCZWNhdXNlIFwibmV3IERhdGUoJzIwMjItMTItMjVUMDA6MDA6MDAuMDAwWicpXCIgYmVjb21lcyBcIlN1biBEZWMgMjUgMjAyMiAwMjowMDowMCBHTVQrMDIwMFwiXG4gICAgICAocGx1cyAyIGhvdXJzIGZyb20gdGhlIHRpbWV6b25lKVxuICAgICAgYW5kIGJlY2F1c2UgZm9yIEFQSSwgd2UgbmVlZCB0byBwcm92aWRlIHRoZSBkYXRlIGluIHRoZSBleHBlY3RlZCBmb3JtYXRcbiAgICAgIGV4OiAnVGh1LCAxMyBPY3QgMjAxMSAxODowMjowMCArMDAwMCcuXG4gICAgICBIZXJlIHdlIHRyeSBhdXRvLWNvbnZlcnQgdGhlbSB0byBVVENcbiAgICAqL1xuICAgIHRoaXMubG9nZ2VyLndhcm4oYERhdGU6IFwiJHtpbnB1dERhdGV9XCIgd2FzIGF1dG8tY29udmVydGVkIHRvIFVUQyB0aW1lIHpvbmUuXG5WYWx1ZSBcIiR7aW5wdXREYXRlLnRvSVNPU3RyaW5nKCl9XCIgd2lsbCBiZSB1c2VkIGZvciByZXF1ZXN0LlxuQ29uc2lkZXIgdXNpbmcgc3RyaW5nIHR5cGUgZm9yIHByb3BlcnR5IFwiJHtrZXl9XCIgdG8gYXZvaWQgYXV0by1jb252ZXJ0aW5nYCk7XG4gICAgcmV0dXJuIGlucHV0RGF0ZS50b0lTT1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVwYXJlUXVlcnlEYXRhKFxuICAgIHF1ZXJ5RGF0YTogSW5ib3hQbGFjZW1lbnRzUmVzdWx0c1F1ZXJ5XG4gICk6IEluYm94UGxhY2VtZW50c1Jlc3VsdHNBcGlRdWVyeSB7XG4gICAgY29uc3QgcHJvcHNGb3JSZXBsYWNlbWVudCA9IHF1ZXJ5RGF0YSBhcyBJbmJveFBsYWNlbWVudHNSZXN1bHRzRGF0ZXM7XG4gICAgY29uc3QgcmVwbGFjZWRQcm9wcyA9IE9iamVjdC5rZXlzKHByb3BzRm9yUmVwbGFjZW1lbnQpLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICAgIGNvbnN0IHByb3AgPSBrZXkgYXMga2V5b2YgSW5ib3hQbGFjZW1lbnRzUmVzdWx0c0RhdGVzO1xuICAgICAgaWYgKCEhcHJvcHNGb3JSZXBsYWNlbWVudFtwcm9wXSAmJiB0eXBlb2YgcHJvcHNGb3JSZXBsYWNlbWVudFtwcm9wXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBxdWVyeURhdGFbcHJvcF0gYXMgRGF0ZTtcbiAgICAgICAgYWNjW3Byb3BdID0gdGhpcy5jb252ZXJ0RGF0ZVRvVVRDKHByb3AsIHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30gYXMgUmVjb3JkPGtleW9mIEluYm94UGxhY2VtZW50c1Jlc3VsdHNEYXRlcywgc3RyaW5nPik7XG5cbiAgICBjb25zdCByZXN1bHQ6IEluYm94UGxhY2VtZW50c1Jlc3VsdHNBcGlRdWVyeSA9IHtcbiAgICAgIC4uLnF1ZXJ5RGF0YSxcbiAgICAgIC4uLnJlcGxhY2VkUHJvcHNcbiAgICB9O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIHByZXBhcmVJbmJveFBsYWNlbWVudHNSZXN1bHQoZGF0YTogSW5ib3hQbGFjZW1lbnRzUmVzdWx0QVBJU2hhcGUpOiBJbmJveFBsYWNlbWVudHNSZXN1bHQge1xuICAgIGxldCBib3ggPSB7fSBhcyBJbmJveFBsYWNlbWVudHNCb3g7XG5cbiAgICBjb25zdCBoYW5kbGVkU2VlZExpc3REYXRlcyA9IHtcbiAgICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKGRhdGEuY3JlYXRlZF9hdCksXG4gICAgICB1cGRhdGVkX2F0OiBuZXcgRGF0ZShkYXRhLnVwZGF0ZWRfYXQpLFxuICAgICAgc2hhcmluZ19leHBpcmVzX2F0OiBuZXcgRGF0ZShkYXRhLnNoYXJpbmdfZXhwaXJlc19hdCksXG4gICAgfTtcblxuICAgIGlmIChkYXRhLkJveCkge1xuICAgICAgYm94ID0ge1xuICAgICAgICAuLi5kYXRhLkJveCxcbiAgICAgICAgY3JlYXRlZF9hdDogbmV3IERhdGUoZGF0YS5Cb3guY3JlYXRlZF9hdCksXG4gICAgICAgIHVwZGF0ZWRfYXQ6IG5ldyBEYXRlKGRhdGEuQm94LnVwZGF0ZWRfYXQpLFxuICAgICAgICBsYXN0X3Jlc3VsdF9hdDogbmV3IERhdGUoZGF0YS5Cb3gubGFzdF9yZXN1bHRfYXQpLFxuICAgICAgfTtcbiAgICAgIGRlbGV0ZSAoYm94IGFzIHtJRD86IHN0cmluZ30pLklEO1xuICAgIH1cblxuICAgIGNvbnN0IGluYm94UGxhY2VtZW50c1Jlc3VsdDogSW5ib3hQbGFjZW1lbnRzUmVzdWx0ID0ge1xuICAgICAgLi4uZGF0YSxcbiAgICAgIEJveDogYm94LFxuICAgICAgLi4uaGFuZGxlZFNlZWRMaXN0RGF0ZXMsXG4gICAgICBpZDogZGF0YS5JZCxcbiAgICB9O1xuXG4gICAgZGVsZXRlIChpbmJveFBsYWNlbWVudHNSZXN1bHQgYXMge0lEPzogc3RyaW5nfSkuSUQ7XG5cbiAgICByZXR1cm4gaW5ib3hQbGFjZW1lbnRzUmVzdWx0O1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlTGlzdChyZXNwb25zZTogSW5ib3hQbGFjZW1lbnRzUmVzdWx0c0xpc3RBUElSZXNwb25zZSk6IEluYm94UGxhY2VtZW50c1Jlc3VsdHNMaXN0IHtcbiAgICBjb25zdCBkYXRhID0ge30gYXMgSW5ib3hQbGFjZW1lbnRzUmVzdWx0c0xpc3Q7XG5cbiAgICBkYXRhLml0ZW1zID0gcmVzcG9uc2UuYm9keS5pdGVtcy5tYXAoXG4gICAgICAoaXRlbTogSW5ib3hQbGFjZW1lbnRzUmVzdWx0QVBJU2hhcGUpXG4gICAgICAgIDogSW5ib3hQbGFjZW1lbnRzUmVzdWx0ID0+IHRoaXMucHJlcGFyZUluYm94UGxhY2VtZW50c1Jlc3VsdChpdGVtKVxuICAgICk7XG5cbiAgICBkYXRhLnBhZ2VzID0gdGhpcy5wYXJzZVBhZ2VMaW5rcyhyZXNwb25zZSwgJz8nLCAnYWRkcmVzcycpO1xuICAgIGRhdGEuc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBhc3luYyBsaXN0KHF1ZXJ5OiBJbmJveFBsYWNlbWVudHNSZXN1bHRzUXVlcnkpOiBQcm9taXNlPEluYm94UGxhY2VtZW50c1Jlc3VsdHNMaXN0PiB7XG4gICAgY29uc3QgcXVlcnlEYXRhID0gdGhpcy5wcmVwYXJlUXVlcnlEYXRhKHF1ZXJ5KTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5nZXQoJy92NC9pbmJveC9yZXN1bHRzJywgcXVlcnlEYXRhKSBhcyBJbmJveFBsYWNlbWVudHNSZXN1bHRzTGlzdEFQSVJlc3BvbnNlO1xuICAgIHJldHVybiB0aGlzLnBhcnNlTGlzdChyZXNwb25zZSk7XG4gIH1cblxuICBhc3luYyBnZXQoaWQ6IHN0cmluZyk6IFByb21pc2U8SW5ib3hQbGFjZW1lbnRzUmVzdWx0V2l0aFN0YXR1cz4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBJbmJveFBsYWNlbWVudHNSZXN1bHRBUElSZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5nZXQoYC92NC9pbmJveC9yZXN1bHRzLyR7aWR9YCkgYXMgSW5ib3hQbGFjZW1lbnRzUmVzdWx0QVBJUmVzcG9uc2U7XG4gICAgY29uc3QgaW5ib3hQbGFjZW1lbnRSZXN1bHQ6IEluYm94UGxhY2VtZW50c1Jlc3VsdCA9IHRoaXMucHJlcGFyZUluYm94UGxhY2VtZW50c1Jlc3VsdChcbiAgICAgIHJlc3BvbnNlLmJvZHkucmVzdWx0XG4gICAgKTtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICBpbmJveFBsYWNlbWVudFJlc3VsdFxuICAgIH07XG4gIH1cblxuICBhc3luYyBkZXN0cm95KGlkOiBzdHJpbmcpIDogUHJvbWlzZTxJbmJveFBsYWNlbWVudHNEZXN0cm95UmVzdWx0PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QuZGVsZXRlKGAvdjQvaW5ib3gvcmVzdWx0cy8ke2lkfWApIGFzIEluYm94UGxhY2VtZW50c0Rlc3Ryb3lBUElSZXNwb25zZTtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAuLi5yZXNwb25zZS5ib2R5XG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGdldFJlc3VsdEJ5U2hhcmVJZChzaGFyZUlkOiBzdHJpbmcpOiBQcm9taXNlPEluYm94UGxhY2VtZW50c1Jlc3VsdFdpdGhTdGF0dXM+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5nZXQoYC92NC9pbmJveC9zaGFyaW5nL3B1YmxpYy8ke3NoYXJlSWR9YCkgYXMgSW5ib3hQbGFjZW1lbnRzUmVzdWx0QVBJUmVzcG9uc2U7XG4gICAgY29uc3QgaW5ib3hQbGFjZW1lbnRSZXN1bHQ6IEluYm94UGxhY2VtZW50c1Jlc3VsdCA9IHRoaXMucHJlcGFyZUluYm94UGxhY2VtZW50c1Jlc3VsdChcbiAgICAgIHJlc3BvbnNlLmJvZHkucmVzdWx0XG4gICAgKTtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICBpbmJveFBsYWNlbWVudFJlc3VsdFxuICAgIH07XG4gIH1cbn1cbiIsImltcG9ydCB7IElJUFJTaGFyaW5nQ2xpZW50IH0gZnJvbSAnLi4vLi4vLi4vSW50ZXJmYWNlcyc7XG5pbXBvcnQge1xuICBJUFJTaGFyaW5nQVBJUmVzcG9uc2UsXG4gIElQUlNoYXJpbmdBcGlTaGFwZSxcbiAgSVBSU2hhcmluZ1Jlc3VsdCxcbiAgSVBSU2hhcmluZ1VwZGF0ZUFQSVJlc3BvbnNlLFxuICBJUFJTaGFyaW5nVXBkYXRlRGF0YSxcbiAgSVBSU2hhcmluZ1VwZGF0ZVJlc3VsdFxufSBmcm9tICcuLi8uLi8uLi9UeXBlcy9JbmJveFBsYWNlbWVudHMnO1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi4vLi4vY29tbW9uL1JlcXVlc3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJUFJTaGFyaW5nQ2xpZW50IGltcGxlbWVudHMgSUlQUlNoYXJpbmdDbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlcXVlc3Q6IFJlcXVlc3QsXG4gICkge1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gIH1cblxuICBwcml2YXRlIHByZXBhcmVJbmJveFBsYWNlbWVudHNSZXN1bHRTaGFyaW5nKGRhdGE6IElQUlNoYXJpbmdBcGlTaGFwZSk6IElQUlNoYXJpbmdSZXN1bHQge1xuICAgIGNvbnN0IGhhbmRsZWRTZWVkTGlzdERhdGVzID0ge1xuICAgICAgZXhwaXJlc19hdDogbmV3IERhdGUoZGF0YS5leHBpcmVzX2F0KSxcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzdWx0OiBJUFJTaGFyaW5nUmVzdWx0ID0ge1xuICAgICAgLi4uZGF0YSxcbiAgICAgIC4uLmhhbmRsZWRTZWVkTGlzdERhdGVzXG4gICAgfTtcblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBhc3luYyBnZXQoaWQ6IHN0cmluZyk6IFByb21pc2U8SVBSU2hhcmluZ1Jlc3VsdCAmIHtzdGF0dXM6IG51bWJlcn0+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5nZXQoYC92NC9pbmJveC9zaGFyaW5nLyR7aWR9YCkgYXMgSVBSU2hhcmluZ0FQSVJlc3BvbnNlO1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMucHJlcGFyZUluYm94UGxhY2VtZW50c1Jlc3VsdFNoYXJpbmcocmVzcG9uc2UuYm9keS5zaGFyaW5nKTtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAuLi5yZXN1bHRcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgZGF0YTogSVBSU2hhcmluZ1VwZGF0ZURhdGFcbiAgKTogUHJvbWlzZTxJUFJTaGFyaW5nVXBkYXRlUmVzdWx0ICYgeyBzdGF0dXM6IG51bWJlciB9PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QucHV0KGAvdjQvaW5ib3gvc2hhcmluZy8ke2lkfWAsIHt9LCB7IHF1ZXJ5OiBgZW5hYmxlZD0ke2RhdGEuZW5hYmxlZH1gIH0pIGFzIElQUlNoYXJpbmdVcGRhdGVBUElSZXNwb25zZTtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLnByZXBhcmVJbmJveFBsYWNlbWVudHNSZXN1bHRTaGFyaW5nKHJlc3BvbnNlLmJvZHkuc2hhcmluZyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnJlc3VsdCxcbiAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzXG4gICAgfTtcbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgSUxvZ2dlcixcbiAgSUluYm94UGxhY2VtZW50c0F0dHJpYnV0ZXNDbGllbnQsXG4gIElTZWVkc0xpc3RzQ2xpZW50LFxuICBJSW5ib3hQbGFjZW1lbnRzRmlsdGVyc0NsaWVudFxufSBmcm9tICcuLi8uLi8uLi9JbnRlcmZhY2VzJztcbmltcG9ydCB7XG4gIFNlZWRMaXN0LFxuICBTZWVkTGlzdEFQSVNoYXBlLFxuICBTZWVkc0xpc3RzQVBJUXVlcnksXG4gIFNlZWRzTGlzdHNBUElRdWVyeURhdGVzLFxuICBTZWVkc0xpc3RzQVBJUmVzcG9uc2UsXG4gIFNlZWRzTGlzdHNDcmVhdGluZ0RhdGEsXG4gIFNlZWRzTGlzdHNRdWVyeSxcbiAgU2VlZHNMaXN0c1Jlc3VsdCxcbiAgU2VlZCxcbiAgU2VlZEFQSVNoYXBlLFxuICBTZWVkc0xpc3RzRGVzdHJveUFwaVJlc3BvbnNlLFxuICBTZWVkc0xpc3RzVXBkYXRpbmdEYXRhLFxuICBTZWVkTGlzdFJlc3VsdCxcbiAgU2VlZExpc3RHZXRBUElSZXNwb25zZSxcbiAgU2VlZExpc3RBUElSZXNwb25zZVxufSBmcm9tICcuLi8uLi8uLi9UeXBlcy9JbmJveFBsYWNlbWVudHMnO1xuaW1wb3J0IE5hdmlnYXRpb25UaHJ1UGFnZXMgZnJvbSAnLi4vLi4vY29tbW9uL05hdmlnYXRpb25UaHJ1UGFnZXMnO1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi4vLi4vY29tbW9uL1JlcXVlc3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZWVkc0xpc3RzQ2xpZW50XG4gIGV4dGVuZHMgTmF2aWdhdGlvblRocnVQYWdlczxTZWVkc0xpc3RzUmVzdWx0PlxuICBpbXBsZW1lbnRzIElTZWVkc0xpc3RzQ2xpZW50IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcbiAgcHVibGljIGF0dHJpYnV0ZXM6IElJbmJveFBsYWNlbWVudHNBdHRyaWJ1dGVzQ2xpZW50O1xuICBwdWJsaWMgZmlsdGVyczogSUluYm94UGxhY2VtZW50c0ZpbHRlcnNDbGllbnQ7XG4gIHByaXZhdGUgbG9nZ2VyOiBJTG9nZ2VyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlcXVlc3Q6IFJlcXVlc3QsXG4gICAgYXR0cmlidXRlczogSUluYm94UGxhY2VtZW50c0F0dHJpYnV0ZXNDbGllbnQsXG4gICAgZmlsdGVyczogSUluYm94UGxhY2VtZW50c0ZpbHRlcnNDbGllbnQsXG4gICAgbG9nZ2VyOiBJTG9nZ2VyID0gY29uc29sZVxuICApIHtcbiAgICBzdXBlcihyZXF1ZXN0KTtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7XG4gICAgdGhpcy5maWx0ZXJzID0gZmlsdGVycztcbiAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlcjtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydERhdGVUb1VUQyhrZXk6c3RyaW5nLCBpbnB1dERhdGU6IERhdGUpOiBzdHJpbmcge1xuICAgIC8qXG4gICAgICBCZWNhdXNlIFwibmV3IERhdGUoJzIwMjItMTItMjVUMDA6MDA6MDAuMDAwWicpXCIgYmVjb21lcyBcIlN1biBEZWMgMjUgMjAyMiAwMjowMDowMCBHTVQrMDIwMFwiXG4gICAgICAocGx1cyAyIGhvdXJzIGZyb20gdGhlIHRpbWV6b25lKVxuICAgICAgYW5kIGJlY2F1c2UgZm9yIEFQSSwgd2UgbmVlZCB0byBwcm92aWRlIHRoZSBkYXRlIGluIHRoZSBleHBlY3RlZCBmb3JtYXRcbiAgICAgIGV4OiAnVGh1LCAxMyBPY3QgMjAxMSAxODowMjowMCArMDAwMCcuXG4gICAgICBIZXJlIHdlIHRyeSBhdXRvLWNvbnZlcnQgdGhlbSB0byBVVENcbiAgICAqL1xuICAgIHRoaXMubG9nZ2VyLndhcm4oYERhdGU6IFwiJHtpbnB1dERhdGV9XCIgd2FzIGF1dG8tY29udmVydGVkIHRvIFVUQyB0aW1lIHpvbmUuXG5WYWx1ZSBcIiR7aW5wdXREYXRlLnRvSVNPU3RyaW5nKCl9XCIgd2lsbCBiZSB1c2VkIGZvciByZXF1ZXN0LlxuQ29uc2lkZXIgdXNpbmcgc3RyaW5nIHR5cGUgZm9yIHByb3BlcnR5IFwiJHtrZXl9XCIgdG8gYXZvaWQgYXV0by1jb252ZXJ0aW5nYCk7XG4gICAgcmV0dXJuIGlucHV0RGF0ZS50b0lTT1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVwYXJlUXVlcnlEYXRhKHF1ZXJ5RGF0YTogU2VlZHNMaXN0c1F1ZXJ5KSA6IFNlZWRzTGlzdHNBUElRdWVyeSB7XG4gICAgY29uc3QgcHJvcHNGb3JSZXBsYWNlbWVudCA9IHF1ZXJ5RGF0YSBhcyBTZWVkc0xpc3RzQVBJUXVlcnlEYXRlcztcbiAgICBjb25zdCByZXBsYWNlZFByb3BzID0gT2JqZWN0LmtleXMocHJvcHNGb3JSZXBsYWNlbWVudCkucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgICAgY29uc3QgcHJvcCA9IGtleSBhcyBrZXlvZiBTZWVkc0xpc3RzQVBJUXVlcnlEYXRlcztcbiAgICAgIGlmICghIXByb3BzRm9yUmVwbGFjZW1lbnRbcHJvcF0gJiYgdHlwZW9mIHByb3BzRm9yUmVwbGFjZW1lbnRbcHJvcF0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcXVlcnlEYXRhW3Byb3BdIGFzIERhdGU7XG4gICAgICAgIGFjY1twcm9wXSA9IHRoaXMuY29udmVydERhdGVUb1VUQyhwcm9wLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9IGFzIFJlY29yZDxrZXlvZiBTZWVkc0xpc3RzQVBJUXVlcnlEYXRlcywgc3RyaW5nPik7XG5cbiAgICBjb25zdCByZXN1bHQ6IFNlZWRzTGlzdHNBUElRdWVyeSA9IHtcbiAgICAgIC4uLnF1ZXJ5RGF0YSxcbiAgICAgIC4uLnJlcGxhY2VkUHJvcHNcbiAgICB9O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIHByZXBhcmVSZXN1bHQoZGF0YTogU2VlZExpc3RBUElSZXNwb25zZSk6IFNlZWRMaXN0UmVzdWx0IHtcbiAgICBsZXQgcmVzdWx0ID0ge30gYXMgU2VlZExpc3RSZXN1bHQ7XG4gICAgY29uc3Qgc2VlZExpc3QgPSB0aGlzLnByZXBhcmVTZWVkTGlzdChkYXRhLmJvZHkpO1xuICAgIHJlc3VsdCA9IHtcbiAgICAgIC4uLnNlZWRMaXN0LFxuICAgICAgc3RhdHVzOiBkYXRhLnN0YXR1c1xuICAgIH07XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgcHJlcGFyZVNlZWRMaXN0KGRhdGE6IFNlZWRMaXN0QVBJU2hhcGUpOiBTZWVkTGlzdCB7XG4gICAgbGV0IHNlZWRzOiBTZWVkW10gfCBudWxsO1xuXG4gICAgY29uc3QgaGFuZGxlZFNlZWRMaXN0RGF0ZXMgPSB7XG4gICAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZShkYXRhLmNyZWF0ZWRfYXQpLFxuICAgICAgdXBkYXRlZF9hdDogbmV3IERhdGUoZGF0YS51cGRhdGVkX2F0KSxcbiAgICAgIGxhc3RfcmVzdWx0X2F0OiBuZXcgRGF0ZShkYXRhLmxhc3RfcmVzdWx0X2F0KSxcbiAgICB9O1xuXG4gICAgaWYgKGRhdGEuU2VlZHMpIHtcbiAgICAgIHNlZWRzID0gZGF0YS5TZWVkcy5tYXAoKHNlZWRJdGVtOiBTZWVkQVBJU2hhcGUpOiBTZWVkID0+IHtcbiAgICAgICAgbGV0IHNlZWQgPSB7fSBhcyBTZWVkO1xuICAgICAgICBjb25zdCBoYW5kbGVkU2VlZERhdGVzID0ge1xuICAgICAgICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKHNlZWRJdGVtLmNyZWF0ZWRfYXQpLFxuICAgICAgICAgIHVwZGF0ZWRfYXQ6IG5ldyBEYXRlKHNlZWRJdGVtLnVwZGF0ZWRfYXQpLFxuICAgICAgICAgIG1heF9lbWFpbF9jb3VudF9oaXRfYXQ6IG5ldyBEYXRlKHNlZWRJdGVtLm1heF9lbWFpbF9jb3VudF9oaXRfYXQpLFxuICAgICAgICAgIGxhc3Rfc2VudF90b19hdDogbmV3IERhdGUoc2VlZEl0ZW0ubGFzdF9zZW50X3RvX2F0KSxcbiAgICAgICAgICBsYXN0X2RlbGl2ZXJlZF9hdDogbmV3IERhdGUoc2VlZEl0ZW0ubGFzdF9kZWxpdmVyZWRfYXQpLFxuICAgICAgICB9O1xuICAgICAgICBzZWVkID0ge1xuICAgICAgICAgIC4uLnNlZWRJdGVtLFxuICAgICAgICAgIC4uLmhhbmRsZWRTZWVkRGF0ZXNcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHNlZWQ7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VlZHMgPSBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHNlZWRMaXN0OiBTZWVkTGlzdCA9IHtcbiAgICAgIC4uLmRhdGEsXG4gICAgICBTZWVkczogc2VlZHMsXG4gICAgICAuLi5oYW5kbGVkU2VlZExpc3REYXRlc1xuICAgIH07XG5cbiAgICBkZWxldGUgKHNlZWRMaXN0IGFzIHtJZD86IHN0cmluZ30pLklkO1xuXG4gICAgcmV0dXJuIHNlZWRMaXN0O1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlTGlzdChyZXNwb25zZTogU2VlZHNMaXN0c0FQSVJlc3BvbnNlKTogU2VlZHNMaXN0c1Jlc3VsdCB7XG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIGl0ZW1zOiBbXVxuICAgIH0gYXMgU2VlZHNMaXN0c1Jlc3VsdDtcblxuICAgIGRhdGEuaXRlbXMgPSByZXNwb25zZS5ib2R5Lml0ZW1zPy5tYXAoXG4gICAgICAoaXRlbTogU2VlZExpc3RBUElTaGFwZSk6IFNlZWRMaXN0ID0+IHRoaXMucHJlcGFyZVNlZWRMaXN0KGl0ZW0pXG4gICAgKTtcblxuICAgIGRhdGEucGFnZXMgPSB0aGlzLnBhcnNlUGFnZUxpbmtzKHJlc3BvbnNlLCAnPycsICdhZGRyZXNzJyk7XG4gICAgZGF0YS5zdGF0dXMgPSByZXNwb25zZS5zdGF0dXM7XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGFzeW5jIGxpc3QocXVlcnk6IFNlZWRzTGlzdHNRdWVyeSk6IFByb21pc2U8U2VlZHNMaXN0c1Jlc3VsdD4ge1xuICAgIGNvbnN0IHF1ZXJ5RGF0YSA9IHRoaXMucHJlcGFyZVF1ZXJ5RGF0YShxdWVyeSk7XG4gICAgY29uc3QgcmVzcG9uc2U6IFNlZWRzTGlzdHNBUElSZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5nZXQoJy92NC9pbmJveC9zZWVkbGlzdHMnLCBxdWVyeURhdGEpIGFzIFNlZWRzTGlzdHNBUElSZXNwb25zZTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5wYXJzZUxpc3QocmVzcG9uc2UpLFxuICAgICAgc3RhdHVzOiAyMDBcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgZ2V0KGlkOiBzdHJpbmcpOiBQcm9taXNlPFNlZWRMaXN0UmVzdWx0PiB7XG4gICAgY29uc3QgcmVzcG9uc2U6IFNlZWRMaXN0R2V0QVBJUmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QuZ2V0KGAvdjQvaW5ib3gvc2VlZGxpc3RzLyR7aWR9YCkgYXMgU2VlZExpc3RHZXRBUElSZXNwb25zZTtcbiAgICBjb25zdCB1cGRhdGVkU2VlZHNMaXN0ID0gdGhpcy5wcmVwYXJlU2VlZExpc3QocmVzcG9uc2UuYm9keS5zZWVkbGlzdCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnVwZGF0ZWRTZWVkc0xpc3QsXG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1c1xuICAgIH07XG4gIH1cblxuICBhc3luYyBjcmVhdGUoZGF0YTogU2VlZHNMaXN0c0NyZWF0aW5nRGF0YSk6IFByb21pc2U8U2VlZExpc3RSZXN1bHQ+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKCcvdjQvaW5ib3gvc2VlZGxpc3RzJywgZGF0YSkgYXMgU2VlZExpc3RBUElSZXNwb25zZTtcbiAgICByZXR1cm4gdGhpcy5wcmVwYXJlUmVzdWx0KHJlc3BvbnNlKTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZShpZDogc3RyaW5nLCBkYXRhOiBTZWVkc0xpc3RzVXBkYXRpbmdEYXRhKTogUHJvbWlzZTxTZWVkTGlzdFJlc3VsdD4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LnB1dChgL3Y0L2luYm94L3NlZWRsaXN0cy8ke2lkfWAsIGRhdGEpIGFzIFNlZWRMaXN0QVBJUmVzcG9uc2U7XG4gICAgcmV0dXJuIHRoaXMucHJlcGFyZVJlc3VsdChyZXNwb25zZSk7XG4gIH1cblxuICBhc3luYyBkZXN0cm95KGlkOiBzdHJpbmcpOiBQcm9taXNlPFNlZWRzTGlzdHNEZXN0cm95QXBpUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmRlbGV0ZShgL3Y0L2luYm94L3NlZWRsaXN0cy8ke2lkfWApIGFzIHVua25vd24gYXMgU2VlZHNMaXN0c0Rlc3Ryb3lBcGlSZXNwb25zZTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgSUluYm94UGxhY2VtZW50c0NsaWVudCwgSUluYm94UGxhY2VtZW50c1Jlc3VsdHNDbGllbnQgfSBmcm9tICcuLi8uLi9JbnRlcmZhY2VzJztcbmltcG9ydCB7IElTZWVkc0xpc3RzQ2xpZW50IH0gZnJvbSAnLi4vLi4vSW50ZXJmYWNlcy9JbmJveFBsYWNlbWVudHMvU2VlZHNMaXN0cy9TZWVkc0xpc3RzQ2xpZW50JztcbmltcG9ydCB7IElJbmJveFBsYWNlbWVudHNQcm92aWRlcnNDbGllbnQgfSBmcm9tICcuLi8uLi9JbnRlcmZhY2VzL0luYm94UGxhY2VtZW50cy9wcm92aWRlcnMvSW5ib3hQbGFjZW1lbnRzUHJvdmlkZXJzJztcbmltcG9ydCB7IEluYm94UGxhY2VtZW50c0RhdGEsIEluYm94UGxhY2VtZW50c1Rlc3RSZXN1bHQsIEluYm94UGxhY2VtZW50c1Rlc3RSZXN1bHRBUElSZXNwb25zZSB9IGZyb20gJy4uLy4uL1R5cGVzL0luYm94UGxhY2VtZW50cyc7XG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuLi9jb21tb24vUmVxdWVzdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEluYm94UGxhY2VtZW50c0NsaWVudCBpbXBsZW1lbnRzIElJbmJveFBsYWNlbWVudHNDbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuICBwdWJsaWMgc2VlZHNMaXN0czogSVNlZWRzTGlzdHNDbGllbnQ7XG4gIHB1YmxpYyByZXN1bHRzOiBJSW5ib3hQbGFjZW1lbnRzUmVzdWx0c0NsaWVudDtcbiAgcHVibGljIHByb3ZpZGVyczogSUluYm94UGxhY2VtZW50c1Byb3ZpZGVyc0NsaWVudDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICByZXF1ZXN0OiBSZXF1ZXN0LFxuICAgIHNlZWRzTGlzdHNDbGllbnQ6IElTZWVkc0xpc3RzQ2xpZW50LFxuICAgIHJlc3VsdHM6IElJbmJveFBsYWNlbWVudHNSZXN1bHRzQ2xpZW50LFxuICAgIHByb3ZpZGVyczogSUluYm94UGxhY2VtZW50c1Byb3ZpZGVyc0NsaWVudFxuICApIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMuc2VlZHNMaXN0cyA9IHNlZWRzTGlzdHNDbGllbnQ7XG4gICAgdGhpcy5zZWVkc0xpc3RzID0gc2VlZHNMaXN0c0NsaWVudDtcbiAgICB0aGlzLnJlc3VsdHMgPSByZXN1bHRzO1xuICAgIHRoaXMucHJvdmlkZXJzID0gcHJvdmlkZXJzO1xuICB9XG5cbiAgYXN5bmMgcnVuVGVzdChkYXRhOiBJbmJveFBsYWNlbWVudHNEYXRhKTogUHJvbWlzZTxJbmJveFBsYWNlbWVudHNUZXN0UmVzdWx0PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QucG9zdCgnL3Y0L2luYm94L3Rlc3RzJywgZGF0YSkgYXMgSW5ib3hQbGFjZW1lbnRzVGVzdFJlc3VsdEFQSVJlc3BvbnNlO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5yZXNwb25zZS5ib2R5LFxuICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXNcbiAgICB9O1xuICB9XG59XG4iLCJpbXBvcnQgeyBJSW5ib3hQbGFjZW1lbnRzUHJvdmlkZXJzQ2xpZW50IH0gZnJvbSAnLi4vLi4vLi4vSW50ZXJmYWNlcy9JbmJveFBsYWNlbWVudHMvcHJvdmlkZXJzL0luYm94UGxhY2VtZW50c1Byb3ZpZGVycyc7XG5pbXBvcnQge1xuICBJbmJveFBsYWNlbWVudHNQcm92aWRlcixcbiAgSW5ib3hQbGFjZW1lbnRzUHJvdmlkZXJBUElTaGFwZSxcbiAgSW5ib3hQbGFjZW1lbnRzUHJvdmlkZXJzTGlzdCxcbiAgSW5ib3hQbGFjZW1lbnRzUHJvdmlkZXJzTGlzdEFQSVJlc3BvbnNlXG59IGZyb20gJy4uLy4uLy4uL1R5cGVzL0luYm94UGxhY2VtZW50cyc7XG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuLi8uLi9jb21tb24vUmVxdWVzdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEluYm94UGxhY2VtZW50c1Byb3ZpZGVyc0NsaWVudCBpbXBsZW1lbnRzIElJbmJveFBsYWNlbWVudHNQcm92aWRlcnNDbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuICBwYXRoOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcmVxdWVzdDogUmVxdWVzdCxcbiAgKSB7XG4gICAgdGhpcy5wYXRoID0gJy92NC9pbmJveC9wcm92aWRlcnMnO1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlTGlzdChcbiAgICByZXNwb25zZTogSW5ib3hQbGFjZW1lbnRzUHJvdmlkZXJzTGlzdEFQSVJlc3BvbnNlXG4gICk6IEluYm94UGxhY2VtZW50c1Byb3ZpZGVyc0xpc3Qge1xuICAgIGNvbnN0IGRhdGEgPSB7fSBhcyBJbmJveFBsYWNlbWVudHNQcm92aWRlcnNMaXN0O1xuXG4gICAgZGF0YS5pdGVtcyA9IHJlc3BvbnNlLmJvZHkuaXRlbXMubWFwKFxuICAgICAgKGl0ZW06IEluYm94UGxhY2VtZW50c1Byb3ZpZGVyQVBJU2hhcGUpOiBJbmJveFBsYWNlbWVudHNQcm92aWRlciA9PiB7XG4gICAgICAgIGNvbnN0IGhhbmRsZWRQcm92aWRlckRhdGVzID0ge1xuICAgICAgICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKGl0ZW0uY3JlYXRlZF9hdCksXG4gICAgICAgICAgdXBkYXRlZF9hdDogbmV3IERhdGUoaXRlbS51cGRhdGVkX2F0KSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBJbmJveFBsYWNlbWVudHNQcm92aWRlciA9IHtcbiAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgIC4uLmhhbmRsZWRQcm92aWRlckRhdGVzXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgKTtcblxuICAgIGRhdGEuc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBhc3luYyBsaXN0KCk6IFByb21pc2U8SW5ib3hQbGFjZW1lbnRzUHJvdmlkZXJzTGlzdD4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0LmdldCh0aGlzLnBhdGgpIGFzIEluYm94UGxhY2VtZW50c1Byb3ZpZGVyc0xpc3RBUElSZXNwb25zZTtcbiAgICByZXR1cm4gdGhpcy5wYXJzZUxpc3QocmVzcG9uc2UpO1xuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vY29tbW9uL1JlcXVlc3QnO1xuaW1wb3J0IHsgTWFpbGd1bkNsaWVudE9wdGlvbnMsIElucHV0Rm9ybURhdGEsIFJlcXVlc3RPcHRpb25zIH0gZnJvbSAnLi4vVHlwZXMnO1xuXG5pbXBvcnQgRG9tYWluc0NsaWVudCBmcm9tICcuL0RvbWFpbnMvZG9tYWluc0NsaWVudCc7XG5pbXBvcnQgRXZlbnRDbGllbnQgZnJvbSAnLi9FdmVudHMnO1xuaW1wb3J0IFN0YXRzQ2xpZW50IGZyb20gJy4vU3RhdHMvU3RhdHNDbGllbnQnO1xuaW1wb3J0IFN1cHByZXNzaW9uQ2xpZW50IGZyb20gJy4vU3VwcHJlc3Npb25zL1N1cHByZXNzaW9uc0NsaWVudCc7XG5pbXBvcnQgV2ViaG9va3NDbGllbnQgZnJvbSAnLi9XZWJob29rcyc7XG5pbXBvcnQgTWVzc2FnZXNDbGllbnQgZnJvbSAnLi9NZXNzYWdlcyc7XG5pbXBvcnQgUm91dGVzQ2xpZW50IGZyb20gJy4vUm91dGVzJztcbmltcG9ydCBWYWxpZGF0ZUNsaWVudCBmcm9tICcuL1ZhbGlkYXRpb25zL3ZhbGlkYXRlJztcbmltcG9ydCBJcHNDbGllbnQgZnJvbSAnLi9JUHMnO1xuaW1wb3J0IElwUG9vbHNDbGllbnQgZnJvbSAnLi9JUFBvb2xzJztcbmltcG9ydCBNYWlsaW5nTGlzdHNDbGllbnQgZnJvbSAnLi9NYWlsaW5nTGlzdHMvbWFpbGluZ0xpc3RzJztcbmltcG9ydCBNYWlsTGlzdHNNZW1iZXJzIGZyb20gJy4vTWFpbGluZ0xpc3RzL21haWxMaXN0TWVtYmVycyc7XG5pbXBvcnQgRG9tYWluQ3JlZGVudGlhbHNDbGllbnQgZnJvbSAnLi9Eb21haW5zL2RvbWFpbnNDcmVkZW50aWFscyc7XG5pbXBvcnQgTXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50IGZyb20gJy4vVmFsaWRhdGlvbnMvbXVsdGlwbGVWYWxpZGF0aW9uJztcbmltcG9ydCBEb21haW5UZW1wbGF0ZXNDbGllbnQgZnJvbSAnLi9Eb21haW5zL2RvbWFpbnNUZW1wbGF0ZXMnO1xuaW1wb3J0IERvbWFpblRhZ3NDbGllbnQgZnJvbSAnLi9Eb21haW5zL2RvbWFpbnNUYWdzJztcbmltcG9ydCBTdWJhY2NvdW50c0NsaWVudCBmcm9tICcuL1N1YmFjY291bnRzJztcblxuaW1wb3J0IHtcbiAgSURvbWFpbnNDbGllbnQsXG4gIElXZWJIb29rc0NsaWVudCxcbiAgSU1haWxndW5DbGllbnQsXG4gIElNYWlsaW5nTGlzdHNDbGllbnQsXG4gIElFdmVudENsaWVudCxcbiAgSVN0YXRzQ2xpZW50LFxuICBJU3VwcHJlc3Npb25DbGllbnQsXG4gIElNZXNzYWdlc0NsaWVudCxcbiAgSVJvdXRlc0NsaWVudCxcbiAgSVZhbGlkYXRpb25DbGllbnQsXG4gIElJUHNDbGllbnQsXG4gIElJUFBvb2xzQ2xpZW50LFxuICBJU3ViYWNjb3VudHNDbGllbnQsXG4gIElJbmJveFBsYWNlbWVudHNDbGllbnQsXG59IGZyb20gJy4uL0ludGVyZmFjZXMnO1xuaW1wb3J0IFNlZWRzTGlzdHNDbGllbnQgZnJvbSAnLi9JbmJveFBsYWNlbWVudHMvU2VlZHNMaXN0cy9TZWVkc0xpc3RzQ2xpZW50JztcbmltcG9ydCBJbmJveFBsYWNlbWVudHNDbGllbnQgZnJvbSAnLi9JbmJveFBsYWNlbWVudHMvaW5ib3hQbGFjZW1lbnRzJztcbmltcG9ydCBJbmJveFBsYWNlbWVudHNSZXN1bHRzQ2xpZW50IGZyb20gJy4vSW5ib3hQbGFjZW1lbnRzL1Jlc3VsdHMvSW5ib3hQbGFjZW1lbnRzUmVzdWx0c0NsaWVudCc7XG5pbXBvcnQgSW5ib3hQbGFjZW1lbnRzQXR0cmlidXRlc0NsaWVudCBmcm9tICcuL0luYm94UGxhY2VtZW50cy9BdHRyaWJ1dGVzQ2xpZW50JztcbmltcG9ydCBJbmJveFBsYWNlbWVudHNGaWx0ZXJzQ2xpZW50IGZyb20gJy4vSW5ib3hQbGFjZW1lbnRzL0ZpbHRlcnNDbGllbnQnO1xuaW1wb3J0IElQUlNoYXJpbmdDbGllbnQgZnJvbSAnLi9JbmJveFBsYWNlbWVudHMvUmVzdWx0cy9JbmJveFBsYWNlbWVudHNSZXN1bHRzU2hhcmluZ0NsaWVudCc7XG5pbXBvcnQgSW5ib3hQbGFjZW1lbnRzUHJvdmlkZXJzQ2xpZW50IGZyb20gJy4vSW5ib3hQbGFjZW1lbnRzL3Byb3ZpZGVycy9JbmJveFBsYWNlbWVudHNQcm92aWRlcnMnO1xuaW1wb3J0IE1ldHJpY3NDbGllbnQgZnJvbSAnLi9NZXRyaWNzL01ldHJpY3NDbGllbnQnO1xuaW1wb3J0IHsgSU1ldHJpY3NDbGllbnQgfSBmcm9tICcuLi9JbnRlcmZhY2VzL01ldHJpY3MvTWV0cmljc0NsaWVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1haWxndW5DbGllbnQgaW1wbGVtZW50cyBJTWFpbGd1bkNsaWVudCB7XG4gIHByaXZhdGUgcmVxdWVzdDtcblxuICBwdWJsaWMgZG9tYWluczogSURvbWFpbnNDbGllbnQ7XG4gIHB1YmxpYyB3ZWJob29rczogSVdlYkhvb2tzQ2xpZW50O1xuICBwdWJsaWMgZXZlbnRzOiBJRXZlbnRDbGllbnQ7XG4gIHB1YmxpYyBzdGF0czogSVN0YXRzQ2xpZW50O1xuICBwdWJsaWMgbWV0cmljczogSU1ldHJpY3NDbGllbnQ7XG4gIHB1YmxpYyBzdXBwcmVzc2lvbnM6IElTdXBwcmVzc2lvbkNsaWVudDtcbiAgcHVibGljIG1lc3NhZ2VzOiBJTWVzc2FnZXNDbGllbnQ7XG4gIHB1YmxpYyByb3V0ZXM6IElSb3V0ZXNDbGllbnQ7XG4gIHB1YmxpYyB2YWxpZGF0ZTogSVZhbGlkYXRpb25DbGllbnQ7XG4gIHB1YmxpYyBpcHM6IElJUHNDbGllbnQ7XG4gIHB1YmxpYyBpcF9wb29sczogSUlQUG9vbHNDbGllbnQ7XG4gIHB1YmxpYyBsaXN0czogSU1haWxpbmdMaXN0c0NsaWVudDtcbiAgcHVibGljIHN1YmFjY291bnRzOiBJU3ViYWNjb3VudHNDbGllbnQ7XG4gIHB1YmxpYyBpbmJveFBsYWNlbWVudHM6IElJbmJveFBsYWNlbWVudHNDbGllbnQ7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogTWFpbGd1bkNsaWVudE9wdGlvbnMsIGZvcm1EYXRhOiBJbnB1dEZvcm1EYXRhKSB7XG4gICAgY29uc3QgY29uZmlnOiBSZXF1ZXN0T3B0aW9ucyA9IHsgLi4ub3B0aW9ucyB9IGFzIFJlcXVlc3RPcHRpb25zO1xuXG4gICAgaWYgKCFjb25maWcudXJsKSB7XG4gICAgICBjb25maWcudXJsID0gJ2h0dHBzOi8vYXBpLm1haWxndW4ubmV0JztcbiAgICB9XG5cbiAgICBpZiAoIWNvbmZpZy51c2VybmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJhbWV0ZXIgXCJ1c2VybmFtZVwiIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgaWYgKCFjb25maWcua2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlciBcImtleVwiIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIHRoaXMucmVxdWVzdCA9IG5ldyBSZXF1ZXN0KGNvbmZpZywgZm9ybURhdGEpO1xuICAgIGNvbnN0IG1haWxMaXN0c01lbWJlcnMgPSBuZXcgTWFpbExpc3RzTWVtYmVycyh0aGlzLnJlcXVlc3QpO1xuICAgIGNvbnN0IGRvbWFpbkNyZWRlbnRpYWxzQ2xpZW50ID0gbmV3IERvbWFpbkNyZWRlbnRpYWxzQ2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgY29uc3QgZG9tYWluVGVtcGxhdGVzQ2xpZW50ID0gbmV3IERvbWFpblRlbXBsYXRlc0NsaWVudCh0aGlzLnJlcXVlc3QpO1xuICAgIGNvbnN0IGRvbWFpblRhZ3NDbGllbnQgPSBuZXcgRG9tYWluVGFnc0NsaWVudCh0aGlzLnJlcXVlc3QpO1xuICAgIGNvbnN0IG11bHRpcGxlVmFsaWRhdGlvbkNsaWVudCA9IG5ldyBNdWx0aXBsZVZhbGlkYXRpb25DbGllbnQodGhpcy5yZXF1ZXN0KTtcbiAgICBjb25zdCBJbmJveFBsYWNlbWVudHNSZXN1bHRzU2hhcmluZ0NsaWVudCA9IG5ldyBJUFJTaGFyaW5nQ2xpZW50KHRoaXMucmVxdWVzdCk7XG5cbiAgICBjb25zdCBzZWVkc0xpc3RzQXR0cmlidXRlcyA9IG5ldyBJbmJveFBsYWNlbWVudHNBdHRyaWJ1dGVzQ2xpZW50KHRoaXMucmVxdWVzdCwgJy92NC9pbmJveC9zZWVkbGlzdHMvYScpO1xuICAgIGNvbnN0IHJlc3VsdHNBdHRyaWJ1dGVzQ2xpZW50ID0gbmV3IEluYm94UGxhY2VtZW50c0F0dHJpYnV0ZXNDbGllbnQodGhpcy5yZXF1ZXN0LCAnL3Y0L2luYm94L3Jlc3VsdHMvYScpO1xuXG4gICAgY29uc3Qgc2VlZHNMaXN0c0ZpbHRlcnNDbGllbnQgPSBuZXcgSW5ib3hQbGFjZW1lbnRzRmlsdGVyc0NsaWVudCh0aGlzLnJlcXVlc3QsICcvdjQvaW5ib3gvc2VlZGxpc3RzL19maWx0ZXJzJyk7XG4gICAgY29uc3QgcmVzdWx0c0ZpbHRlcnNDbGllbnQgPSBuZXcgSW5ib3hQbGFjZW1lbnRzRmlsdGVyc0NsaWVudCh0aGlzLnJlcXVlc3QsICcvdjQvaW5ib3gvcmVzdWx0cy9fZmlsdGVycycpO1xuXG4gICAgY29uc3Qgc2VlZHNMaXN0c0NsaWVudCA9IG5ldyBTZWVkc0xpc3RzQ2xpZW50KFxuICAgICAgdGhpcy5yZXF1ZXN0LFxuICAgICAgc2VlZHNMaXN0c0F0dHJpYnV0ZXMsXG4gICAgICBzZWVkc0xpc3RzRmlsdGVyc0NsaWVudFxuICAgICk7XG5cbiAgICBjb25zdCBpbmJveFBsYWNlbWVudHNSZXN1bHRzQ2xpZW50ID0gbmV3IEluYm94UGxhY2VtZW50c1Jlc3VsdHNDbGllbnQoXG4gICAgICB0aGlzLnJlcXVlc3QsXG4gICAgICByZXN1bHRzQXR0cmlidXRlc0NsaWVudCxcbiAgICAgIHJlc3VsdHNGaWx0ZXJzQ2xpZW50LFxuICAgICAgSW5ib3hQbGFjZW1lbnRzUmVzdWx0c1NoYXJpbmdDbGllbnRcbiAgICApO1xuXG4gICAgY29uc3QgaW5ib3hQbGFjZW1lbnRzUHJvdmlkZXJzQ2xpZW50ID0gbmV3IEluYm94UGxhY2VtZW50c1Byb3ZpZGVyc0NsaWVudChcbiAgICAgIHRoaXMucmVxdWVzdFxuICAgICk7XG5cbiAgICB0aGlzLmRvbWFpbnMgPSBuZXcgRG9tYWluc0NsaWVudChcbiAgICAgIHRoaXMucmVxdWVzdCxcbiAgICAgIGRvbWFpbkNyZWRlbnRpYWxzQ2xpZW50LFxuICAgICAgZG9tYWluVGVtcGxhdGVzQ2xpZW50LFxuICAgICAgZG9tYWluVGFnc0NsaWVudFxuICAgICk7XG4gICAgdGhpcy53ZWJob29rcyA9IG5ldyBXZWJob29rc0NsaWVudCh0aGlzLnJlcXVlc3QpO1xuICAgIHRoaXMuZXZlbnRzID0gbmV3IEV2ZW50Q2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgdGhpcy5zdGF0cyA9IG5ldyBTdGF0c0NsaWVudCh0aGlzLnJlcXVlc3QpO1xuICAgIHRoaXMubWV0cmljcyA9IG5ldyBNZXRyaWNzQ2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgdGhpcy5zdXBwcmVzc2lvbnMgPSBuZXcgU3VwcHJlc3Npb25DbGllbnQodGhpcy5yZXF1ZXN0KTtcbiAgICB0aGlzLm1lc3NhZ2VzID0gbmV3IE1lc3NhZ2VzQ2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgdGhpcy5yb3V0ZXMgPSBuZXcgUm91dGVzQ2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgdGhpcy5pcHMgPSBuZXcgSXBzQ2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgdGhpcy5pcF9wb29scyA9IG5ldyBJcFBvb2xzQ2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgdGhpcy5saXN0cyA9IG5ldyBNYWlsaW5nTGlzdHNDbGllbnQodGhpcy5yZXF1ZXN0LCBtYWlsTGlzdHNNZW1iZXJzKTtcbiAgICB0aGlzLnZhbGlkYXRlID0gbmV3IFZhbGlkYXRlQ2xpZW50KHRoaXMucmVxdWVzdCwgbXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50KTtcbiAgICB0aGlzLnN1YmFjY291bnRzID0gbmV3IFN1YmFjY291bnRzQ2xpZW50KHRoaXMucmVxdWVzdCk7XG4gICAgdGhpcy5pbmJveFBsYWNlbWVudHMgPSBuZXcgSW5ib3hQbGFjZW1lbnRzQ2xpZW50KFxuICAgICAgdGhpcy5yZXF1ZXN0LFxuICAgICAgc2VlZHNMaXN0c0NsaWVudCxcbiAgICAgIGluYm94UGxhY2VtZW50c1Jlc3VsdHNDbGllbnQsXG4gICAgICBpbmJveFBsYWNlbWVudHNQcm92aWRlcnNDbGllbnQsXG4gICAgKTtcbiAgfVxuXG4gIHNldFN1YmFjY291bnQoc3ViYWNjb3VudElkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnJlcXVlc3Q/LnNldFN1YmFjY291bnRIZWFkZXIoc3ViYWNjb3VudElkKTtcbiAgfVxuXG4gIHJlc2V0U3ViYWNjb3VudCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlcXVlc3Q/LnJlc2V0U3ViYWNjb3VudEhlYWRlcigpO1xuICB9XG59XG4iLCJpbXBvcnQgUmVxdWVzdCBmcm9tICcuLi9jb21tb24vUmVxdWVzdCc7XG5pbXBvcnQge1xuICBNYWlsTGlzdE1lbWJlcnNRdWVyeSxcbiAgQ3JlYXRlVXBkYXRlTWFpbExpc3RNZW1iZXJzLFxuICBNYWlsTGlzdE1lbWJlcixcbiAgTXVsdGlwbGVNZW1iZXJzRGF0YSxcbiAgTXVsdGlwbGVNZW1iZXJzUmVxRGF0YSxcbiAgRGVsZXRlZE1lbWJlcixcbiAgQ3JlYXRlVXBkYXRlTWFpbExpc3RNZW1iZXJzUmVxLFxuICBOZXdNdWx0aXBsZU1lbWJlcnNSZXNwb25zZSxcbiAgTWFpbExpc3RNZW1iZXJzUmVzdWx0LFxuICBNYWlsTGlzdE1lbWJlcnNSZXNwb25zZVxufSBmcm9tICcuLi8uLi9UeXBlcy9NYWlsaW5nTGlzdHMnO1xuaW1wb3J0IE5hdmlnYXRpb25UaHJ1UGFnZXMgZnJvbSAnLi4vY29tbW9uL05hdmlnYXRpb25UaHJ1UGFnZXMnO1xuaW1wb3J0IHsgSU1haWxMaXN0c01lbWJlcnMgfSBmcm9tICcuLi8uLi9JbnRlcmZhY2VzL01haWxpbmdMaXN0cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1haWxMaXN0c01lbWJlcnNcbiAgZXh0ZW5kcyBOYXZpZ2F0aW9uVGhydVBhZ2VzPE1haWxMaXN0TWVtYmVyc1Jlc3VsdD5cbiAgaW1wbGVtZW50cyBJTWFpbExpc3RzTWVtYmVycyB7XG4gIGJhc2VSb3V0ZTogc3RyaW5nO1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICBzdXBlcihyZXF1ZXN0KTtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMuYmFzZVJvdXRlID0gJy92My9saXN0cyc7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrQW5kVXBkYXRlRGF0YShkYXRhOiBDcmVhdGVVcGRhdGVNYWlsTGlzdE1lbWJlcnMpIHtcbiAgICBjb25zdCBuZXdEYXRhID0geyAuLi5kYXRhIH07XG5cbiAgICBpZiAodHlwZW9mIGRhdGEudmFycyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIG5ld0RhdGEudmFycyA9IEpTT04uc3RyaW5naWZ5KG5ld0RhdGEudmFycyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBkYXRhLnN1YnNjcmliZWQgPT09ICdib29sZWFuJykge1xuICAgICAgbmV3RGF0YS5zdWJzY3JpYmVkID0gZGF0YS5zdWJzY3JpYmVkID8gJ3llcycgOiAnbm8nO1xuICAgIH1cblxuICAgIHJldHVybiBuZXdEYXRhIGFzIENyZWF0ZVVwZGF0ZU1haWxMaXN0TWVtYmVyc1JlcTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwYXJzZUxpc3QoXG4gICAgcmVzcG9uc2U6IE1haWxMaXN0TWVtYmVyc1Jlc3BvbnNlLFxuICApOiBNYWlsTGlzdE1lbWJlcnNSZXN1bHQge1xuICAgIGNvbnN0IGRhdGEgPSB7fSBhcyBNYWlsTGlzdE1lbWJlcnNSZXN1bHQ7XG4gICAgZGF0YS5pdGVtcyA9IHJlc3BvbnNlLmJvZHkuaXRlbXM7XG5cbiAgICBkYXRhLnBhZ2VzID0gdGhpcy5wYXJzZVBhZ2VMaW5rcyhyZXNwb25zZSwgJz8nLCAnYWRkcmVzcycpO1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgYXN5bmMgbGlzdE1lbWJlcnMoXG4gICAgbWFpbExpc3RBZGRyZXNzOiBzdHJpbmcsXG4gICAgcXVlcnk/OiBNYWlsTGlzdE1lbWJlcnNRdWVyeVxuICApOiBQcm9taXNlPE1haWxMaXN0TWVtYmVyc1Jlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3RMaXN0V2l0aFBhZ2VzKGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc30vbWVtYmVycy9wYWdlc2AsIHF1ZXJ5KTtcbiAgfVxuXG4gIGdldE1lbWJlcihtYWlsTGlzdEFkZHJlc3M6IHN0cmluZywgbWFpbExpc3RNZW1iZXJBZGRyZXNzOiBzdHJpbmcpOiBQcm9taXNlPE1haWxMaXN0TWVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQoYCR7dGhpcy5iYXNlUm91dGV9LyR7bWFpbExpc3RBZGRyZXNzfS9tZW1iZXJzLyR7bWFpbExpc3RNZW1iZXJBZGRyZXNzfWApXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkubWVtYmVyIGFzIE1haWxMaXN0TWVtYmVyKTtcbiAgfVxuXG4gIGNyZWF0ZU1lbWJlcihcbiAgICBtYWlsTGlzdEFkZHJlc3M6IHN0cmluZyxcbiAgICBkYXRhOiBDcmVhdGVVcGRhdGVNYWlsTGlzdE1lbWJlcnNcbiAgKTogUHJvbWlzZTxNYWlsTGlzdE1lbWJlcj4ge1xuICAgIGNvbnN0IHJlcURhdGEgPSB0aGlzLmNoZWNrQW5kVXBkYXRlRGF0YShkYXRhKTtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQoYCR7dGhpcy5iYXNlUm91dGV9LyR7bWFpbExpc3RBZGRyZXNzfS9tZW1iZXJzYCwgcmVxRGF0YSlcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keS5tZW1iZXIgYXMgTWFpbExpc3RNZW1iZXIpO1xuICB9XG5cbiAgY3JlYXRlTWVtYmVycyhcbiAgICBtYWlsTGlzdEFkZHJlc3M6IHN0cmluZyxcbiAgICBkYXRhOiBNdWx0aXBsZU1lbWJlcnNEYXRhXG4gICk6IFByb21pc2U8TmV3TXVsdGlwbGVNZW1iZXJzUmVzcG9uc2U+IHtcbiAgICBjb25zdCBuZXdEYXRhOiBNdWx0aXBsZU1lbWJlcnNSZXFEYXRhID0ge1xuICAgICAgbWVtYmVyczogQXJyYXkuaXNBcnJheShkYXRhLm1lbWJlcnMpID8gSlNPTi5zdHJpbmdpZnkoZGF0YS5tZW1iZXJzKSA6IGRhdGEubWVtYmVycyxcbiAgICAgIHVwc2VydDogZGF0YS51cHNlcnRcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc30vbWVtYmVycy5qc29uYCwgbmV3RGF0YSlcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keSBhcyBOZXdNdWx0aXBsZU1lbWJlcnNSZXNwb25zZSk7XG4gIH1cblxuICB1cGRhdGVNZW1iZXIoXG4gICAgbWFpbExpc3RBZGRyZXNzOiBzdHJpbmcsXG4gICAgbWFpbExpc3RNZW1iZXJBZGRyZXNzOiBzdHJpbmcsXG4gICAgZGF0YTogQ3JlYXRlVXBkYXRlTWFpbExpc3RNZW1iZXJzXG4gICk6IFByb21pc2U8TWFpbExpc3RNZW1iZXI+IHtcbiAgICBjb25zdCByZXFEYXRhID0gdGhpcy5jaGVja0FuZFVwZGF0ZURhdGEoZGF0YSk7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXRXaXRoRkQoYCR7dGhpcy5iYXNlUm91dGV9LyR7bWFpbExpc3RBZGRyZXNzfS9tZW1iZXJzLyR7bWFpbExpc3RNZW1iZXJBZGRyZXNzfWAsIHJlcURhdGEpXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkubWVtYmVyIGFzIE1haWxMaXN0TWVtYmVyKTtcbiAgfVxuXG4gIGRlc3Ryb3lNZW1iZXIobWFpbExpc3RBZGRyZXNzOiBzdHJpbmcsIG1haWxMaXN0TWVtYmVyQWRkcmVzczogc3RyaW5nKSA6IFByb21pc2U8RGVsZXRlZE1lbWJlcj4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc30vbWVtYmVycy8ke21haWxMaXN0TWVtYmVyQWRkcmVzc31gKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5IGFzIERlbGV0ZWRNZW1iZXIpO1xuICB9XG59XG4iLCJpbXBvcnQgUmVxdWVzdCBmcm9tICcuLi9jb21tb24vUmVxdWVzdCc7XG5pbXBvcnQge1xuICBMaXN0c1F1ZXJ5LFxuICBDcmVhdGVVcGRhdGVMaXN0LFxuICBEZXN0cm95ZWRMaXN0LFxuICBNYWlsaW5nTGlzdCxcbiAgTWFpbGluZ0xpc3RWYWxpZGF0aW9uQXBpUmVzcG9uc2UsXG4gIFN0YXJ0VmFsaWRhdGlvblJlc3VsdCxcbiAgTWFpbGluZ0xpc3RWYWxpZGF0aW9uUmVzdWx0LFxuICBNYWlsaW5nTGlzdENhbmNlbFZhbGlkYXRpb25SZXN1bHQsXG4gIE1haWxpbmdMaXN0UmVzdWx0LFxuICBNYWlsaW5nTGlzdEFwaVJlc3BvbnNlXG59IGZyb20gJy4uLy4uL1R5cGVzL01haWxpbmdMaXN0cyc7XG5pbXBvcnQgeyBJTWFpbExpc3RzTWVtYmVycyB9IGZyb20gJy4uLy4uL0ludGVyZmFjZXMvTWFpbGluZ0xpc3RzL01haWxpbmdMaXN0TWVtYmVycyc7XG5pbXBvcnQgTmF2aWdhdGlvblRocnVQYWdlcyBmcm9tICcuLi9jb21tb24vTmF2aWdhdGlvblRocnVQYWdlcyc7XG5pbXBvcnQgeyBJTWFpbGluZ0xpc3RzQ2xpZW50IH0gZnJvbSAnLi4vLi4vSW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1haWxpbmdMaXN0c0NsaWVudFxuICBleHRlbmRzIE5hdmlnYXRpb25UaHJ1UGFnZXM8TWFpbGluZ0xpc3RSZXN1bHQ+XG4gIGltcGxlbWVudHMgSU1haWxpbmdMaXN0c0NsaWVudCB7XG4gIGJhc2VSb3V0ZTogc3RyaW5nO1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuICBwdWJsaWMgbWVtYmVyczogSU1haWxMaXN0c01lbWJlcnM7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCwgbWVtYmVyczogSU1haWxMaXN0c01lbWJlcnMpIHtcbiAgICBzdXBlcihyZXF1ZXN0KTtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMuYmFzZVJvdXRlID0gJy92My9saXN0cyc7XG4gICAgdGhpcy5tZW1iZXJzID0gbWVtYmVycztcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VWYWxpZGF0aW9uUmVzdWx0KFxuICAgIHN0YXR1czogbnVtYmVyLFxuICAgIGRhdGE6IE1haWxpbmdMaXN0VmFsaWRhdGlvbkFwaVJlc3BvbnNlXG4gICk6IE1haWxpbmdMaXN0VmFsaWRhdGlvblJlc3VsdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1cyxcbiAgICAgIHZhbGlkYXRpb25SZXN1bHQ6IHtcbiAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgY3JlYXRlZF9hdDogbmV3IERhdGUoZGF0YS5jcmVhdGVkX2F0ICogMTAwMCkgLy8gYWRkIG1pbGxpc2Vjb25kIHRvIFVuaXggdGltZXN0YW1wXG4gICAgICB9XG4gICAgfSBhcyBNYWlsaW5nTGlzdFZhbGlkYXRpb25SZXN1bHQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgcGFyc2VMaXN0KHJlc3BvbnNlOiBNYWlsaW5nTGlzdEFwaVJlc3BvbnNlKTogTWFpbGluZ0xpc3RSZXN1bHQge1xuICAgIGNvbnN0IGRhdGEgPSB7fSBhcyBNYWlsaW5nTGlzdFJlc3VsdDtcblxuICAgIGRhdGEuaXRlbXMgPSByZXNwb25zZS5ib2R5Lml0ZW1zO1xuXG4gICAgZGF0YS5wYWdlcyA9IHRoaXMucGFyc2VQYWdlTGlua3MocmVzcG9uc2UsICc/JywgJ2FkZHJlc3MnKTtcbiAgICBkYXRhLnN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cztcblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgYXN5bmMgbGlzdChxdWVyeT86IExpc3RzUXVlcnkpOiBQcm9taXNlPE1haWxpbmdMaXN0UmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdExpc3RXaXRoUGFnZXMoYCR7dGhpcy5iYXNlUm91dGV9L3BhZ2VzYCwgcXVlcnkpO1xuICB9XG5cbiAgZ2V0KG1haWxMaXN0QWRkcmVzczogc3RyaW5nKTogUHJvbWlzZTxNYWlsaW5nTGlzdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc31gKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5Lmxpc3QgYXMgTWFpbGluZ0xpc3QpO1xuICB9XG5cbiAgY3JlYXRlKGRhdGE6IENyZWF0ZVVwZGF0ZUxpc3QpOiBQcm9taXNlPE1haWxpbmdMaXN0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKHRoaXMuYmFzZVJvdXRlLCBkYXRhKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5Lmxpc3QgYXMgTWFpbGluZ0xpc3QpO1xuICB9XG5cbiAgdXBkYXRlKG1haWxMaXN0QWRkcmVzczogc3RyaW5nLCBkYXRhOiBDcmVhdGVVcGRhdGVMaXN0KTogUHJvbWlzZTxNYWlsaW5nTGlzdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucHV0V2l0aEZEKGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc31gLCBkYXRhKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5Lmxpc3QgYXMgTWFpbGluZ0xpc3QpO1xuICB9XG5cbiAgZGVzdHJveShtYWlsTGlzdEFkZHJlc3M6IHN0cmluZyk6IFByb21pc2U8RGVzdHJveWVkTGlzdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc31gKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5IGFzIERlc3Ryb3llZExpc3QpO1xuICB9XG5cbiAgdmFsaWRhdGUobWFpbExpc3RBZGRyZXNzOiBzdHJpbmcpOiBQcm9taXNlPFN0YXJ0VmFsaWRhdGlvblJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdChgJHt0aGlzLmJhc2VSb3V0ZX0vJHttYWlsTGlzdEFkZHJlc3N9L3ZhbGlkYXRlYCwge30pXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+ICh7XG4gICAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICAuLi5yZXNwb25zZS5ib2R5XG4gICAgICB9KSBhcyBTdGFydFZhbGlkYXRpb25SZXN1bHQpO1xuICB9XG5cbiAgdmFsaWRhdGlvblJlc3VsdChtYWlsTGlzdEFkZHJlc3M6IHN0cmluZyk6IFByb21pc2U8TWFpbGluZ0xpc3RWYWxpZGF0aW9uUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQoYCR7dGhpcy5iYXNlUm91dGV9LyR7bWFpbExpc3RBZGRyZXNzfS92YWxpZGF0ZWApXG4gICAgICAudGhlbihcbiAgICAgICAgKHJlc3BvbnNlKSA9PiB0aGlzLnBhcnNlVmFsaWRhdGlvblJlc3VsdChcbiAgICAgICAgICByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgICAgIHJlc3BvbnNlLmJvZHkgYXMgTWFpbGluZ0xpc3RWYWxpZGF0aW9uQXBpUmVzcG9uc2VcbiAgICAgICAgKVxuICAgICAgKTtcbiAgfVxuXG4gIGNhbmNlbFZhbGlkYXRpb24obWFpbExpc3RBZGRyZXNzOiBzdHJpbmcpOiBQcm9taXNlPE1haWxpbmdMaXN0Q2FuY2VsVmFsaWRhdGlvblJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKGAke3RoaXMuYmFzZVJvdXRlfS8ke21haWxMaXN0QWRkcmVzc30vdmFsaWRhdGVgKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiAoe1xuICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgbWVzc2FnZTogcmVzcG9uc2UuYm9keS5tZXNzYWdlXG4gICAgICB9IGFzIE1haWxpbmdMaXN0Q2FuY2VsVmFsaWRhdGlvblJlc3VsdCkpO1xuICB9XG59XG4iLCJpbXBvcnQgQVBJRXJyb3IgZnJvbSAnLi9jb21tb24vRXJyb3InO1xuaW1wb3J0IHtcbiAgTWFpbGd1bk1lc3NhZ2VEYXRhLFxuICBNZXNzYWdlc1NlbmRBUElSZXNwb25zZSxcbiAgTWVzc2FnZXNTZW5kUmVzdWx0XG59IGZyb20gJy4uL1R5cGVzJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vY29tbW9uL1JlcXVlc3QnO1xuaW1wb3J0IHsgSU1lc3NhZ2VzQ2xpZW50IH0gZnJvbSAnLi4vSW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1lc3NhZ2VzQ2xpZW50IGltcGxlbWVudHMgSU1lc3NhZ2VzQ2xpZW50IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0KSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgfVxuXG4gIHByaXZhdGUgcHJlcGFyZUJvb2xlYW5WYWx1ZXMoZGF0YTogTWFpbGd1bk1lc3NhZ2VEYXRhKTogTWFpbGd1bk1lc3NhZ2VEYXRhIHtcbiAgICBjb25zdCB5ZXNOb1Byb3BlcnRpZXMgPSBuZXcgU2V0KFtcbiAgICAgICdvOnRlc3Rtb2RlJyxcbiAgICAgICd0OnRleHQnLFxuICAgICAgJ286ZGtpbScsXG4gICAgICAnbzp0cmFja2luZycsXG4gICAgICAnbzp0cmFja2luZy1jbGlja3MnLFxuICAgICAgJ286dHJhY2tpbmctb3BlbnMnLFxuICAgICAgJ286cmVxdWlyZS10bHMnLFxuICAgICAgJ286c2tpcC12ZXJpZmljYXRpb24nXG4gICAgXSk7XG5cbiAgICBpZiAoIWRhdGEgfHwgT2JqZWN0LmtleXMoZGF0YSkubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBBUElFcnJvci5nZXRVc2VyRGF0YUVycm9yKCdNZXNzYWdlIGRhdGEgb2JqZWN0IGNhbiBub3QgYmUgZW1wdHknLCAnTWVzc2FnZSBkYXRhIG9iamVjdCBjYW4gbm90IGJlIGVtcHR5Jyk7XG4gICAgfVxuICAgIHJldHVybiBPYmplY3Qua2V5cyhkYXRhKS5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgICBpZiAoeWVzTm9Qcm9wZXJ0aWVzLmhhcyhrZXkpICYmIHR5cGVvZiBkYXRhW2tleV0gPT09ICdib29sZWFuJykge1xuICAgICAgICBhY2Nba2V5XSA9IGRhdGFba2V5XSA/ICd5ZXMnIDogJ25vJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFjY1trZXldID0gZGF0YVtrZXldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSBhcyBNYWlsZ3VuTWVzc2FnZURhdGEpO1xuICB9XG5cbiAgX3BhcnNlUmVzcG9uc2UocmVzcG9uc2U6IE1lc3NhZ2VzU2VuZEFQSVJlc3BvbnNlKTogTWVzc2FnZXNTZW5kUmVzdWx0IHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAuLi5yZXNwb25zZS5ib2R5XG4gICAgfTtcbiAgfVxuXG4gIGNyZWF0ZShkb21haW46IHN0cmluZywgZGF0YTogTWFpbGd1bk1lc3NhZ2VEYXRhKTogUHJvbWlzZTxNZXNzYWdlc1NlbmRSZXN1bHQ+IHtcbiAgICBpZiAoZGF0YS5tZXNzYWdlKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQoYC92My8ke2RvbWFpbn0vbWVzc2FnZXMubWltZWAsIGRhdGEpXG4gICAgICAgIC50aGVuKHRoaXMuX3BhcnNlUmVzcG9uc2UpO1xuICAgIH1cblxuICAgIGNvbnN0IG1vZGlmaWVkRGF0YSA9IHRoaXMucHJlcGFyZUJvb2xlYW5WYWx1ZXMoZGF0YSk7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKGAvdjMvJHtkb21haW59L21lc3NhZ2VzYCwgbW9kaWZpZWREYXRhKVxuICAgICAgLnRoZW4odGhpcy5fcGFyc2VSZXNwb25zZSk7XG4gIH1cbn1cbiIsImltcG9ydCBSZXF1ZXN0IGZyb20gJy4uL2NvbW1vbi9SZXF1ZXN0JztcbmltcG9ydCB7IElMb2dnZXIgfSBmcm9tICcuLi8uLi9JbnRlcmZhY2VzL0NvbW1vbic7XG5pbXBvcnQgeyBJTWV0cmljc0NsaWVudCB9IGZyb20gJy4uLy4uL0ludGVyZmFjZXMvTWV0cmljcy9NZXRyaWNzQ2xpZW50JztcbmltcG9ydCB7XG4gIE1ldHJpY3NBUElRdWVyeSwgTWV0cmljc0FQSVJlc3BvbnNlLCBNZXRyaWNzUXVlcnksIE1ldHJpY3NSZXN1bHRcbn0gZnJvbSAnLi4vLi4vVHlwZXMvTWV0cmljcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldHJpY3NDbGllbnQgaW1wbGVtZW50cyBJTWV0cmljc0NsaWVudCB7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG4gIHByaXZhdGUgbG9nZ2VyOiBJTG9nZ2VyO1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QsIGxvZ2dlcjogSUxvZ2dlciA9IGNvbnNvbGUpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0RGF0ZVRvVVRDKGtleTpzdHJpbmcsIGlucHV0RGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgLypcbiAgICAgIEJlY2F1c2UgXCJuZXcgRGF0ZSgnMjAyMi0xMi0yNVQwMDowMDowMC4wMDBaJylcIiBiZWNvbWVzIFwiU3VuIERlYyAyNSAyMDIyIDAyOjAwOjAwIEdNVCswMjAwXCJcbiAgICAgIChwbHVzIDIgaG91cnMgZnJvbSB0aGUgdGltZXpvbmUpXG4gICAgICBhbmQgYmVjYXVzZSBmb3IgQVBJLCB3ZSBuZWVkIHRvIHByb3ZpZGUgdGhlIGRhdGUgaW4gdGhlIGV4cGVjdGVkIGZvcm1hdFxuICAgICAgZXg6ICdUaHUsIDEzIE9jdCAyMDExIDE4OjAyOjAwICswMDAwJy5cbiAgICAgIEhlcmUgd2UgdHJ5IGF1dG8tY29udmVydCB0aGVtIHRvIFVUQ1xuICAgICovXG4gICAgdGhpcy5sb2dnZXIud2FybihgRGF0ZTpcIiR7aW5wdXREYXRlfVwiIHdhcyBhdXRvLWNvbnZlcnRlZCB0byBVVEMgdGltZSB6b25lLlxuVmFsdWUgXCIke2lucHV0RGF0ZS50b1VUQ1N0cmluZygpfVwiIHdpbGwgYmUgdXNlZCBmb3IgcmVxdWVzdC5cbkNvbnNpZGVyIHVzaW5nIHN0cmluZyB0eXBlIGZvciBwcm9wZXJ0eSBcIiR7a2V5fVwiIHRvIGF2b2lkIGF1dG8tY29udmVydGluZ2ApO1xuICAgIHJldHVybiBpbnB1dERhdGUudG9VVENTdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJlcGFyZVF1ZXJ5KHF1ZXJ5OiBNZXRyaWNzUXVlcnkgfCB1bmRlZmluZWQpOiBNZXRyaWNzQVBJUXVlcnkge1xuICAgIGxldCBzdGFydERhdGU7XG4gICAgbGV0IGVuZERhdGU7XG4gICAgaWYgKHF1ZXJ5KSB7XG4gICAgICBjb25zdCBxU3RhcnQgPSBxdWVyeT8uc3RhcnQ7XG4gICAgICBjb25zdCBxRW5kID0gcXVlcnk/LmVuZDtcbiAgICAgIHN0YXJ0RGF0ZSA9IHFTdGFydCBpbnN0YW5jZW9mIERhdGUgPyB0aGlzLmNvbnZlcnREYXRlVG9VVEMoJ3N0YXJ0JywgcVN0YXJ0KSA6IHFTdGFydCA/PyAnJztcbiAgICAgIGVuZERhdGUgPSBxRW5kICYmIHFFbmQgaW5zdGFuY2VvZiBEYXRlID8gdGhpcy5jb252ZXJ0RGF0ZVRvVVRDKCdlbmQnLCBxRW5kKSA6IHFFbmQgPz8gJyc7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdDogTWV0cmljc0FQSVF1ZXJ5ID0ge1xuICAgICAgLi4ucXVlcnksXG4gICAgICBzdGFydDogc3RhcnREYXRlLFxuICAgICAgZW5kOiBlbmREYXRlXG4gICAgfTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVSZXNwb25zZShyZXNwb25zZTogTWV0cmljc0FQSVJlc3BvbnNlKTogTWV0cmljc1Jlc3VsdCB7XG4gICAgY29uc3QgcmVzQm9keSA9IHJlc3BvbnNlLmJvZHk7XG4gICAgY29uc3Qgc3RhcnREYXRlID0gRGF0ZS5wYXJzZShyZXNCb2R5LnN0YXJ0KSA/IG5ldyBEYXRlKHJlc0JvZHkuc3RhcnQpIDogbnVsbDtcbiAgICBjb25zdCBlbmREYXRlID0gRGF0ZS5wYXJzZShyZXNCb2R5LmVuZCkgPyBuZXcgRGF0ZShyZXNCb2R5LmVuZCkgOiBudWxsO1xuICAgIGNvbnN0IHJlc3VsdDogTWV0cmljc1Jlc3VsdCA9IHtcbiAgICAgIC4uLnJlc0JvZHksXG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIHN0YXJ0OiBzdGFydERhdGUsXG4gICAgICBlbmQ6IGVuZERhdGVcbiAgICB9O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBhc3luYyBnZXRBY2NvdW50KHF1ZXJ5PzogTWV0cmljc1F1ZXJ5KTogUHJvbWlzZTxNZXRyaWNzUmVzdWx0PiB7XG4gICAgY29uc3QgcXVlcnlEYXRhID0gdGhpcy5wcmVwYXJlUXVlcnkocXVlcnkpO1xuICAgIGNvbnN0IHJlc3BvbnNlOiBNZXRyaWNzQVBJUmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QucG9zdCgnL3YxL2FuYWx5dGljcy9tZXRyaWNzJywgcXVlcnlEYXRhKTtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVSZXNwb25zZShyZXNwb25zZSk7XG4gIH1cblxuICBhc3luYyBnZXRBY2NvdW50VXNhZ2UocXVlcnk/OiBNZXRyaWNzUXVlcnkpOiBQcm9taXNlPE1ldHJpY3NSZXN1bHQ+IHtcbiAgICBjb25zdCBxdWVyeURhdGEgPSB0aGlzLnByZXBhcmVRdWVyeShxdWVyeSk7XG4gICAgY29uc3QgcmVzcG9uc2U6IE1ldHJpY3NBUElSZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5wb3N0KCcvdjEvYW5hbHl0aWNzL3VzYWdlL21ldHJpY3MnLCBxdWVyeURhdGEpO1xuICAgIHJldHVybiB0aGlzLmhhbmRsZVJlc3BvbnNlKHJlc3BvbnNlKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVJvdXRlc0NsaWVudCB9IGZyb20gJy4uL0ludGVyZmFjZXMnO1xuaW1wb3J0IHtcbiAgQ3JlYXRlVXBkYXRlUm91dGVEYXRhLCBEZXN0cm95Um91dGVSZXNwb25zZSwgUm91dGUsIFJvdXRlc0xpc3RRdWVyeSwgVXBkYXRlUm91dGVSZXNwb25zZVxufSBmcm9tICcuLi9UeXBlcy9Sb3V0ZXMnO1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9jb21tb24vUmVxdWVzdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJvdXRlc0NsaWVudCBpbXBsZW1lbnRzIElSb3V0ZXNDbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICB9XG5cbiAgbGlzdChxdWVyeTogUm91dGVzTGlzdFF1ZXJ5KTogUHJvbWlzZTxSb3V0ZVtdPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQoJy92My9yb3V0ZXMnLCBxdWVyeSlcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keS5pdGVtcyk7XG4gIH1cblxuICBnZXQoaWQ6IHN0cmluZyk6IFByb21pc2U8Um91dGU+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldChgL3YzL3JvdXRlcy8ke2lkfWApXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkucm91dGUpO1xuICB9XG5cbiAgY3JlYXRlKGRhdGE6IENyZWF0ZVVwZGF0ZVJvdXRlRGF0YSk6IFByb21pc2U8Um91dGU+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQoJy92My9yb3V0ZXMnLCBkYXRhKVxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ib2R5LnJvdXRlKTtcbiAgfVxuXG4gIHVwZGF0ZShpZDogc3RyaW5nLCBkYXRhOiBDcmVhdGVVcGRhdGVSb3V0ZURhdGEpOiBQcm9taXNlPFVwZGF0ZVJvdXRlUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnB1dFdpdGhGRChgL3YzL3JvdXRlcy8ke2lkfWAsIGRhdGEpXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJvZHkpO1xuICB9XG5cbiAgZGVzdHJveShpZDogc3RyaW5nKTogUHJvbWlzZTxEZXN0cm95Um91dGVSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKGAvdjMvcm91dGVzLyR7aWR9YClcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYm9keSk7XG4gIH1cbn1cbiIsImltcG9ydCB1cmxqb2luIGZyb20gJ3VybC1qb2luJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4uL2NvbW1vbi9SZXF1ZXN0JztcbmltcG9ydCB7IFN0YXRzUXVlcnksIFN0YXRzT3B0aW9ucyB9IGZyb20gJy4uLy4uL1R5cGVzL1N0YXRzJztcbmltcG9ydCB7IElMb2dnZXIgfSBmcm9tICcuLi8uLi9JbnRlcmZhY2VzL0NvbW1vbic7XG5pbXBvcnQgU3RhdHNDb250YWluZXIgZnJvbSAnLi9TdGF0c0NvbnRhaW5lcic7XG5pbXBvcnQgeyBJU3RhdHNDbGllbnQsIElTdGF0c0NvbnRhaW5lciB9IGZyb20gJy4uLy4uL0ludGVyZmFjZXMvU3RhdHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdGF0c0NsaWVudCBpbXBsZW1lbnRzIElTdGF0c0NsaWVudCB7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG4gIHByaXZhdGUgbG9nZ2VyOiBJTG9nZ2VyO1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QsIGxvZ2dlcjogSUxvZ2dlciA9IGNvbnNvbGUpIHtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0RGF0ZVRvVVRDKGtleTpzdHJpbmcsIGlucHV0RGF0ZTogRGF0ZSk6IEFycmF5PHN0cmluZz4ge1xuICAgIC8qXG4gICAgICBCZWNhdXNlIFwibmV3IERhdGUoJzIwMjItMTItMjVUMDA6MDA6MDAuMDAwWicpXCIgYmVjb21lcyBcIlN1biBEZWMgMjUgMjAyMiAwMjowMDowMCBHTVQrMDIwMFwiXG4gICAgICAocGx1cyAyIGhvdXJzIGZyb20gdGhlIHRpbWV6b25lKVxuICAgICAgYW5kIGJlY2F1c2UgZm9yIEFQSSwgd2UgbmVlZCB0byBwcm92aWRlIHRoZSBkYXRlIGluIHRoZSBleHBlY3RlZCBmb3JtYXRcbiAgICAgIGV4OiAnVGh1LCAxMyBPY3QgMjAxMSAxODowMjowMCArMDAwMCcuXG4gICAgICBIZXJlIHdlIHRyeSBhdXRvLWNvbnZlcnQgdGhlbSB0byBVVENcbiAgICAqL1xuICAgIHRoaXMubG9nZ2VyLndhcm4oYERhdGU6XCIke2lucHV0RGF0ZX1cIiB3YXMgYXV0by1jb252ZXJ0ZWQgdG8gVVRDIHRpbWUgem9uZS5cblZhbHVlIFwiJHtpbnB1dERhdGUudG9VVENTdHJpbmcoKX1cIiB3aWxsIGJlIHVzZWQgZm9yIHJlcXVlc3QuXG5Db25zaWRlciB1c2luZyBzdHJpbmcgdHlwZSBmb3IgcHJvcGVydHkgXCIke2tleX1cIiB0byBhdm9pZCBhdXRvLWNvbnZlcnRpbmdgKTtcbiAgICByZXR1cm4gW2tleSwgaW5wdXREYXRlLnRvVVRDU3RyaW5nKCldO1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVwYXJlU2VhcmNoUGFyYW1zKHF1ZXJ5OiBTdGF0c1F1ZXJ5IHwgdW5kZWZpbmVkKTogQXJyYXk8QXJyYXk8c3RyaW5nPj4ge1xuICAgIGxldCBzZWFyY2hQYXJhbXMgPSBbXSBhcyBBcnJheTxBcnJheTxzdHJpbmc+PjtcbiAgICBpZiAodHlwZW9mIHF1ZXJ5ID09PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cyhxdWVyeSkubGVuZ3RoKSB7XG4gICAgICBzZWFyY2hQYXJhbXMgPSBPYmplY3QuZW50cmllcyhxdWVyeSkucmVkdWNlKChhcnJheVdpdGhQYWlycywgY3VycmVudFBhaXIpID0+IHtcbiAgICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gY3VycmVudFBhaXI7XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCkgeyAvLyBldmVudDogWydkZWxpdmVyZWQnLCAnYWNjZXB0ZWQnXVxuICAgICAgICAgIGNvbnN0IHJlcGVhdGVkUHJvcGVydHkgPSB2YWx1ZS5tYXAoKGl0ZW0pID0+IFtrZXksIGl0ZW1dKTtcbiAgICAgICAgICByZXR1cm4gWy4uLmFycmF5V2l0aFBhaXJzLCAuLi5yZXBlYXRlZFByb3BlcnR5XTsgLy8gW1tldmVudCxkZWxpdmVyZWRdLCBbZXZlbnQsYWNjZXB0ZWRdXVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgIGFycmF5V2l0aFBhaXJzLnB1c2godGhpcy5jb252ZXJ0RGF0ZVRvVVRDKGtleSwgdmFsdWUpKTtcbiAgICAgICAgICByZXR1cm4gYXJyYXlXaXRoUGFpcnM7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGFycmF5V2l0aFBhaXJzLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhcnJheVdpdGhQYWlycztcbiAgICAgIH0sIFtdIGFzIEFycmF5PEFycmF5PHN0cmluZz4+KTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VhcmNoUGFyYW1zO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZVN0YXRzKHJlc3BvbnNlOiB7IGJvZHk6IFN0YXRzT3B0aW9ucyB9KTogSVN0YXRzQ29udGFpbmVyIHtcbiAgICByZXR1cm4gbmV3IFN0YXRzQ29udGFpbmVyKHJlc3BvbnNlLmJvZHkpO1xuICB9XG5cbiAgZ2V0RG9tYWluKGRvbWFpbjogc3RyaW5nLCBxdWVyeT86IFN0YXRzUXVlcnkpOiBQcm9taXNlPElTdGF0c0NvbnRhaW5lcj4ge1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IHRoaXMucHJlcGFyZVNlYXJjaFBhcmFtcyhxdWVyeSk7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQodXJsam9pbignL3YzJywgZG9tYWluLCAnc3RhdHMvdG90YWwnKSwgc2VhcmNoUGFyYW1zKVxuICAgICAgLnRoZW4odGhpcy5wYXJzZVN0YXRzKTtcbiAgfVxuXG4gIGdldEFjY291bnQocXVlcnk/OiBTdGF0c1F1ZXJ5KTogUHJvbWlzZTxJU3RhdHNDb250YWluZXI+IHtcbiAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSB0aGlzLnByZXBhcmVTZWFyY2hQYXJhbXMocXVlcnkpO1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KCcvdjMvc3RhdHMvdG90YWwnLCBzZWFyY2hQYXJhbXMpXG4gICAgICAudGhlbih0aGlzLnBhcnNlU3RhdHMpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBJU3RhdHNDb250YWluZXIgfSBmcm9tICcuLi8uLi9JbnRlcmZhY2VzL1N0YXRzJztcbmltcG9ydCB7IFN0YXQsIFN0YXRzT3B0aW9ucyB9IGZyb20gJy4uLy4uL1R5cGVzL1N0YXRzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RhdHNDb250YWluZXIgaW1wbGVtZW50cyBJU3RhdHNDb250YWluZXIge1xuICAgIHN0YXJ0OiBEYXRlO1xuICAgIGVuZDogRGF0ZTtcbiAgICByZXNvbHV0aW9uOiBzdHJpbmc7XG4gICAgc3RhdHM6IFN0YXRbXTtcbiAgICBjb25zdHJ1Y3RvcihkYXRhOiBTdGF0c09wdGlvbnMpIHtcbiAgICAgIHRoaXMuc3RhcnQgPSBuZXcgRGF0ZShkYXRhLnN0YXJ0KTtcbiAgICAgIHRoaXMuZW5kID0gbmV3IERhdGUoZGF0YS5lbmQpO1xuICAgICAgdGhpcy5yZXNvbHV0aW9uID0gZGF0YS5yZXNvbHV0aW9uO1xuICAgICAgdGhpcy5zdGF0cyA9IGRhdGEuc3RhdHMubWFwKGZ1bmN0aW9uIChzdGF0OiBTdGF0KSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IHsgLi4uc3RhdCB9O1xuICAgICAgICByZXMudGltZSA9IG5ldyBEYXRlKHN0YXQudGltZSk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KTtcbiAgICB9XG59XG4iLCJpbXBvcnQgUmVxdWVzdCBmcm9tICcuL2NvbW1vbi9SZXF1ZXN0JztcbmltcG9ydCB7IElTdWJhY2NvdW50c0NsaWVudCB9IGZyb20gJy4uL0ludGVyZmFjZXMnO1xuaW1wb3J0IHtcbiAgU3ViYWNjb3VudExpc3RSZXNwb25zZURhdGEsXG4gIFN1YmFjY291bnRSZXNwb25zZURhdGEsXG4gIFN1YmFjY291bnRzUXVlcnksXG59IGZyb20gJy4uL1R5cGVzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3ViYWNjb3VudHNDbGllbnQgaW1wbGVtZW50cyBJU3ViYWNjb3VudHNDbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuICBzdGF0aWMgU1VCQUNDT1VOVF9IRUFERVIgPSAnWC1NYWlsZ3VuLU9uLUJlaGFsZi1PZic7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCkge1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gIH1cblxuICBsaXN0KHF1ZXJ5PzogU3ViYWNjb3VudHNRdWVyeSk6IFByb21pc2U8U3ViYWNjb3VudExpc3RSZXNwb25zZURhdGE+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCgnL3Y1L2FjY291bnRzL3N1YmFjY291bnRzJywgcXVlcnkpXG4gICAgICAudGhlbigocmVzKSA9PiByZXMuYm9keSk7XG4gIH1cblxuICBnZXQoaWQ6c3RyaW5nKTogUHJvbWlzZTxTdWJhY2NvdW50UmVzcG9uc2VEYXRhPiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5nZXQoYC92NS9hY2NvdW50cy9zdWJhY2NvdW50cy8ke2lkfWApXG4gICAgICAudGhlbigocmVzKSA9PiByZXMuYm9keSk7XG4gIH1cblxuICBjcmVhdGUobmFtZTpzdHJpbmcpOiBQcm9taXNlPFN1YmFjY291bnRSZXNwb25zZURhdGE+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQoJy92NS9hY2NvdW50cy9zdWJhY2NvdW50cycsIHsgbmFtZSB9KVxuICAgICAgLnRoZW4oKHJlcykgPT4gcmVzLmJvZHkpO1xuICB9XG5cbiAgZW5hYmxlKGlkOnN0cmluZyk6IFByb21pc2U8U3ViYWNjb3VudFJlc3BvbnNlRGF0YT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdChgL3Y1L2FjY291bnRzL3N1YmFjY291bnRzLyR7aWR9L2VuYWJsZWApXG4gICAgICAudGhlbigocmVzKSA9PiByZXMuYm9keSk7XG4gIH1cblxuICBkaXNhYmxlKGlkOnN0cmluZyk6IFByb21pc2U8U3ViYWNjb3VudFJlc3BvbnNlRGF0YT4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QucG9zdChgL3Y1L2FjY291bnRzL3N1YmFjY291bnRzLyR7aWR9L2Rpc2FibGVgKVxuICAgICAgLnRoZW4oKHJlcykgPT4gcmVzLmJvZHkpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBTdXBwcmVzc2lvbk1vZGVscyB9IGZyb20gJy4uLy4uL0VudW1zJztcbmltcG9ydCB7IElCb3VuY2UgfSBmcm9tICcuLi8uLi9JbnRlcmZhY2VzL1N1cHByZXNzaW9ucyc7XG5pbXBvcnQgeyBCb3VuY2VEYXRhIH0gZnJvbSAnLi4vLi4vVHlwZXMvU3VwcHJlc3Npb25zJztcbmltcG9ydCBTdXBwcmVzc2lvbiBmcm9tICcuL1N1cHByZXNzaW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm91bmNlIGV4dGVuZHMgU3VwcHJlc3Npb24gaW1wbGVtZW50cyBJQm91bmNlIHtcbiAgICBhZGRyZXNzOiBzdHJpbmc7XG4gICAgY29kZTogbnVtYmVyO1xuICAgIGVycm9yOiBzdHJpbmc7XG4gICAgLyogZXNsaW50LWRpc2FibGUgY2FtZWxjYXNlICovXG4gICAgY3JlYXRlZF9hdDogRGF0ZTtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE6IEJvdW5jZURhdGEpIHtcbiAgICAgIHN1cGVyKFN1cHByZXNzaW9uTW9kZWxzLkJPVU5DRVMpO1xuICAgICAgdGhpcy5hZGRyZXNzID0gZGF0YS5hZGRyZXNzO1xuICAgICAgdGhpcy5jb2RlID0gK2RhdGEuY29kZTtcbiAgICAgIHRoaXMuZXJyb3IgPSBkYXRhLmVycm9yO1xuICAgICAgdGhpcy5jcmVhdGVkX2F0ID0gbmV3IERhdGUoZGF0YS5jcmVhdGVkX2F0KTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBTdXBwcmVzc2lvbk1vZGVscyB9IGZyb20gJy4uLy4uL0VudW1zJztcbmltcG9ydCB7IElDb21wbGFpbnQgfSBmcm9tICcuLi8uLi9JbnRlcmZhY2VzL1N1cHByZXNzaW9ucyc7XG5pbXBvcnQgeyBDb21wbGFpbnREYXRhIH0gZnJvbSAnLi4vLi4vVHlwZXMvU3VwcHJlc3Npb25zJztcbmltcG9ydCBTdXBwcmVzc2lvbiBmcm9tICcuL1N1cHByZXNzaW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29tcGxhaW50IGV4dGVuZHMgU3VwcHJlc3Npb24gaW1wbGVtZW50cyBJQ29tcGxhaW50IHtcbiAgICBhZGRyZXNzOiBzdHJpbmc7XG4gICAgLyogZXNsaW50LWRpc2FibGUgY2FtZWxjYXNlICovXG4gICAgY3JlYXRlZF9hdDogRGF0ZTtcbiAgICBjb25zdHJ1Y3RvcihkYXRhOiBDb21wbGFpbnREYXRhKSB7XG4gICAgICBzdXBlcihTdXBwcmVzc2lvbk1vZGVscy5DT01QTEFJTlRTKTtcbiAgICAgIHRoaXMuYWRkcmVzcyA9IGRhdGEuYWRkcmVzcztcbiAgICAgIHRoaXMuY3JlYXRlZF9hdCA9IG5ldyBEYXRlKGRhdGEuY3JlYXRlZF9hdCk7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgU3VwcHJlc3Npb25Nb2RlbHMgfSBmcm9tICcuLi8uLi9FbnVtcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN1cHByZXNzaW9uIHtcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgY29uc3RydWN0b3IodHlwZTogU3VwcHJlc3Npb25Nb2RlbHMpIHtcbiAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgfVxufVxuIiwiaW1wb3J0IHVybGpvaW4gZnJvbSAndXJsLWpvaW4nO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cblxuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi4vY29tbW9uL1JlcXVlc3QnO1xuXG5pbXBvcnQgQVBJRXJyb3IgZnJvbSAnLi4vY29tbW9uL0Vycm9yJztcbmltcG9ydCBOYXZpZ2F0aW9uVGhydVBhZ2VzIGZyb20gJy4uL2NvbW1vbi9OYXZpZ2F0aW9uVGhydVBhZ2VzJztcbmltcG9ydCBCb3VuY2UgZnJvbSAnLi9Cb3VuY2UnO1xuaW1wb3J0IENvbXBsYWludCBmcm9tICcuL0NvbXBsYWludCc7XG5pbXBvcnQgVW5zdWJzY3JpYmUgZnJvbSAnLi9VbnN1YnNjcmliZSc7XG5pbXBvcnQgV2hpdGVMaXN0IGZyb20gJy4vV2hpdGVMaXN0JztcbmltcG9ydCBTdXBwcmVzc2lvbiBmcm9tICcuL1N1cHByZXNzaW9uJztcbmltcG9ydCB7XG4gIElCb3VuY2UsXG4gIElDb21wbGFpbnQsXG4gIElTdXBwcmVzc2lvbkNsaWVudCxcbiAgSVVuc3Vic2NyaWJlLFxuICBJV2hpdGVMaXN0XG59IGZyb20gJy4uLy4uL0ludGVyZmFjZXMvU3VwcHJlc3Npb25zJztcbmltcG9ydCB7XG4gIFN1cHByZXNzaW9uTGlzdCxcbiAgU3VwcHJlc3Npb25MaXN0UmVzcG9uc2UsXG4gIFN1cHByZXNzaW9uRGF0YVR5cGUsXG4gIFN1cHByZXNzaW9uQ3JlYXRpb25EYXRhLFxuICBTdXBwcmVzc2lvbkNyZWF0aW9uUmVzdWx0LFxuICBTdXBwcmVzc2lvbkNyZWF0aW9uUmVzcG9uc2UsXG4gIFN1cHByZXNzaW9uTGlzdFF1ZXJ5LFxuICBTdXBwcmVzc2lvblJlc3BvbnNlLFxuICBTdXBwcmVzc2lvbkRlc3Ryb3lSZXN1bHQsXG4gIFN1cHByZXNzaW9uRGVzdHJveVJlc3BvbnNlXG59IGZyb20gJy4uLy4uL1R5cGVzL1N1cHByZXNzaW9ucyc7XG5cbmNvbnN0IGNyZWF0ZU9wdGlvbnMgPSB7XG4gIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdXBwcmVzc2lvbkNsaWVudFxuICBleHRlbmRzIE5hdmlnYXRpb25UaHJ1UGFnZXM8U3VwcHJlc3Npb25MaXN0PlxuICBpbXBsZW1lbnRzIElTdXBwcmVzc2lvbkNsaWVudCB7XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG4gIG1vZGVsczogb2JqZWN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICBzdXBlcihyZXF1ZXN0KTtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMubW9kZWxzID0ge1xuICAgICAgYm91bmNlczogQm91bmNlLFxuICAgICAgY29tcGxhaW50czogQ29tcGxhaW50LFxuICAgICAgdW5zdWJzY3JpYmVzOiBVbnN1YnNjcmliZSxcbiAgICAgIHdoaXRlbGlzdHM6IFdoaXRlTGlzdCxcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlTGlzdChcbiAgICByZXNwb25zZTogU3VwcHJlc3Npb25MaXN0UmVzcG9uc2UsXG4gICAgTW9kZWw6IHtcbiAgICAgIG5ldyhkYXRhOiBTdXBwcmVzc2lvbkRhdGFUeXBlKTpcbiAgICAgIElCb3VuY2UgfCBJQ29tcGxhaW50IHwgSVVuc3Vic2NyaWJlIHwgSVdoaXRlTGlzdFxuICAgIH1cbiAgKTogU3VwcHJlc3Npb25MaXN0IHtcbiAgICBjb25zdCBkYXRhID0ge30gYXMgU3VwcHJlc3Npb25MaXN0O1xuICAgIGRhdGEuaXRlbXMgPSByZXNwb25zZS5ib2R5Lml0ZW1zPy5tYXAoKGl0ZW0pID0+IG5ldyBNb2RlbChpdGVtKSkgfHwgW107XG5cbiAgICBkYXRhLnBhZ2VzID0gdGhpcy5wYXJzZVBhZ2VMaW5rcyhyZXNwb25zZSwgJz8nLCAnYWRkcmVzcycpO1xuICAgIGRhdGEuc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgX3BhcnNlSXRlbTxUIGV4dGVuZHMgU3VwcHJlc3Npb24+KFxuICAgIGRhdGEgOiBTdXBwcmVzc2lvbkRhdGFUeXBlLFxuICAgIE1vZGVsOiB7XG4gICAgICBuZXcoZGF0YVR5cGU6IFN1cHByZXNzaW9uRGF0YVR5cGUpOlRcbiAgICB9XG4gICk6IFQge1xuICAgIHJldHVybiBuZXcgTW9kZWwoZGF0YSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVdoaXRlTGlzdChcbiAgICBkb21haW46IHN0cmluZyxcbiAgICBkYXRhOiBTdXBwcmVzc2lvbkNyZWF0aW9uRGF0YSB8IFN1cHByZXNzaW9uQ3JlYXRpb25EYXRhW10sXG4gICAgaXNEYXRhQXJyYXk6IGJvb2xlYW5cbiAgKTogUHJvbWlzZTxTdXBwcmVzc2lvbkNyZWF0aW9uUmVzdWx0PiB7XG4gICAgaWYgKGlzRGF0YUFycmF5KSB7XG4gICAgICB0aHJvdyBBUElFcnJvci5nZXRVc2VyRGF0YUVycm9yKFxuICAgICAgICAnRGF0YSBwcm9wZXJ0eSBzaG91bGQgYmUgYW4gb2JqZWN0JyxcbiAgICAgICAgJ1doaXRlbGlzdFxcJ3MgY3JlYXRpb24gcHJvY2VzcyBkb2VzIG5vdCBzdXBwb3J0IG11bHRpcGxlIGNyZWF0aW9ucy4gRGF0YSBwcm9wZXJ0eSBzaG91bGQgYmUgYW4gb2JqZWN0J1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdFxuICAgICAgLnBvc3RXaXRoRkQodXJsam9pbigndjMnLCBkb21haW4sICd3aGl0ZWxpc3RzJyksIGRhdGEgYXMgU3VwcHJlc3Npb25DcmVhdGlvbkRhdGEpXG4gICAgICAudGhlbih0aGlzLnByZXBhcmVSZXNwb25zZSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVVuc3Vic2NyaWJlKFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIGRhdGE6IFN1cHByZXNzaW9uQ3JlYXRpb25EYXRhIHwgU3VwcHJlc3Npb25DcmVhdGlvbkRhdGFbXVxuICApOiBQcm9taXNlPFN1cHByZXNzaW9uQ3JlYXRpb25SZXN1bHQ+IHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkgeyAvLyBVc2VyIHByb3ZpZGVkIGFuIGFycmF5XG4gICAgICBjb25zdCBpc0NvbnRhaW5zVGFnID0gZGF0YS5zb21lKCh1bnN1YnNjcmliZTogU3VwcHJlc3Npb25DcmVhdGlvbkRhdGEpID0+IHVuc3Vic2NyaWJlLnRhZyk7XG4gICAgICBpZiAoaXNDb250YWluc1RhZykge1xuICAgICAgICB0aHJvdyBBUElFcnJvci5nZXRVc2VyRGF0YUVycm9yKFxuICAgICAgICAgICdUYWcgcHJvcGVydHkgc2hvdWxkIG5vdCBiZSB1c2VkIGZvciBjcmVhdGluZyBtdWx0aXBsZSB1bnN1YnNjcmliZXMuJyxcbiAgICAgICAgICAnVGFnIHByb3BlcnR5IGNhbiBiZSB1c2VkIG9ubHkgaWYgb25lIHVuc3Vic2NyaWJlIHByb3ZpZGVkIGFzIHNlY29uZCBhcmd1bWVudCBvZiBjcmVhdGUgbWV0aG9kLiBQbGVhc2UgdXNlIHRhZ3MgaW5zdGVhZC4nXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0XG4gICAgICAgIC5wb3N0KHVybGpvaW4oJ3YzJywgZG9tYWluLCAndW5zdWJzY3JpYmVzJyksIEpTT04uc3RyaW5naWZ5KGRhdGEpLCBjcmVhdGVPcHRpb25zKVxuICAgICAgICAudGhlbih0aGlzLnByZXBhcmVSZXNwb25zZSk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGE/LnRhZ3MpIHtcbiAgICAgIHRocm93IEFQSUVycm9yLmdldFVzZXJEYXRhRXJyb3IoXG4gICAgICAgICdUYWdzIHByb3BlcnR5IHNob3VsZCBub3QgYmUgdXNlZCBmb3IgY3JlYXRpbmcgb25lIHVuc3Vic2NyaWJlLicsXG4gICAgICAgICdUYWdzIHByb3BlcnR5IGNhbiBiZSB1c2VkIGlmIHlvdSBwcm92aWRlcyBhbiBhcnJheSBvZiB1bnN1YnNjcmliZXMgYXMgc2Vjb25kIGFyZ3VtZW50IG9mIGNyZWF0ZSBtZXRob2QuIFBsZWFzZSB1c2UgdGFnIGluc3RlYWQnXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhLnRhZykpIHtcbiAgICAgIHRocm93IEFQSUVycm9yLmdldFVzZXJEYXRhRXJyb3IoXG4gICAgICAgICdUYWcgcHJvcGVydHkgY2FuIG5vdCBiZSBhbiBhcnJheScsXG4gICAgICAgICdQbGVhc2UgdXNlIGFycmF5IG9mIHVuc3Vic2NyaWJlcyBhcyBzZWNvbmQgYXJndW1lbnQgb2YgY3JlYXRlIG1ldGhvZCB0byBiZSBhYmxlIHRvIHByb3ZpZGUgZmV3IHRhZ3MnXG4gICAgICApO1xuICAgIH1cbiAgICAvKiBXZSBuZWVkIEZvcm0gRGF0YSBmb3IgdW5zdWJzY3JpYmVzIGlmIHdlIHdhbnQgdG8gc3VwcG9ydCB0aGUgXCJ0YWdcIiBwcm9wZXJ0eSAqL1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3RcbiAgICAgIC5wb3N0V2l0aEZEKHVybGpvaW4oJ3YzJywgZG9tYWluLCAndW5zdWJzY3JpYmVzJyksIGRhdGEpXG4gICAgICAudGhlbih0aGlzLnByZXBhcmVSZXNwb25zZSk7XG4gIH1cblxuICBwcml2YXRlIGdldE1vZGVsKHR5cGU6IHN0cmluZykge1xuICAgIGlmICh0eXBlIGluIHRoaXMubW9kZWxzKSB7XG4gICAgICByZXR1cm4gdGhpcy5tb2RlbHNbdHlwZSBhcyBrZXlvZiB0eXBlb2YgdGhpcy5tb2RlbHNdO1xuICAgIH1cbiAgICB0aHJvdyBBUElFcnJvci5nZXRVc2VyRGF0YUVycm9yKFxuICAgICAgJ1Vua25vd24gdHlwZSB2YWx1ZScsXG4gICAgICAnVHlwZSBtYXkgYmUgb25seSBvbmUgb2YgW2JvdW5jZXMsIGNvbXBsYWludHMsIHVuc3Vic2NyaWJlcywgd2hpdGVsaXN0c10nXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJlcGFyZVJlc3BvbnNlKHJlc3BvbnNlOiBTdXBwcmVzc2lvbkNyZWF0aW9uUmVzcG9uc2UpOiBTdXBwcmVzc2lvbkNyZWF0aW9uUmVzdWx0IHtcbiAgICByZXR1cm4ge1xuICAgICAgbWVzc2FnZTogcmVzcG9uc2UuYm9keS5tZXNzYWdlLFxuICAgICAgdHlwZTogcmVzcG9uc2UuYm9keS50eXBlIHx8ICcnLFxuICAgICAgdmFsdWU6IHJlc3BvbnNlLmJvZHkudmFsdWUgfHwgJycsXG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1c1xuICAgIH07XG4gIH1cblxuICBhc3luYyBsaXN0KFxuICAgIGRvbWFpbjogc3RyaW5nLFxuICAgIHR5cGU6IHN0cmluZyxcbiAgICBxdWVyeT86IFN1cHByZXNzaW9uTGlzdFF1ZXJ5XG4gICk6IFByb21pc2U8U3VwcHJlc3Npb25MaXN0PiB7XG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLmdldE1vZGVsKHR5cGUpO1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3RMaXN0V2l0aFBhZ2VzKHVybGpvaW4oJ3YzJywgZG9tYWluLCB0eXBlKSwgcXVlcnksIG1vZGVsKTtcbiAgfVxuXG4gIGdldChcbiAgICBkb21haW46IHN0cmluZyxcbiAgICB0eXBlOiBzdHJpbmcsXG4gICAgYWRkcmVzczogc3RyaW5nXG4gICk6IFByb21pc2U8SUJvdW5jZSB8IElDb21wbGFpbnQgfCBJVW5zdWJzY3JpYmUgfCBJV2hpdGVMaXN0PiB7XG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLmdldE1vZGVsKHR5cGUpO1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3RcbiAgICAgIC5nZXQodXJsam9pbigndjMnLCBkb21haW4sIHR5cGUsIGVuY29kZVVSSUNvbXBvbmVudChhZGRyZXNzKSkpXG4gICAgICAudGhlbigocmVzcG9uc2U6IFN1cHByZXNzaW9uUmVzcG9uc2UpID0+IHRoaXMuX3BhcnNlSXRlbTx0eXBlb2YgbW9kZWw+KHJlc3BvbnNlLmJvZHksIG1vZGVsKSk7XG4gIH1cblxuICBjcmVhdGUoXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgdHlwZTogc3RyaW5nLFxuICAgIGRhdGE6IFN1cHByZXNzaW9uQ3JlYXRpb25EYXRhIHwgU3VwcHJlc3Npb25DcmVhdGlvbkRhdGFbXVxuICApOiBQcm9taXNlPFN1cHByZXNzaW9uQ3JlYXRpb25SZXN1bHQ+IHtcbiAgICB0aGlzLmdldE1vZGVsKHR5cGUpO1xuICAgIC8vIHN1cHBvcnRzIGFkZGluZyBtdWx0aXBsZSBzdXBwcmVzc2lvbnMgYnkgZGVmYXVsdFxuICAgIGxldCBwb3N0RGF0YTtcbiAgICBjb25zdCBpc0RhdGFBcnJheSA9IEFycmF5LmlzQXJyYXkoZGF0YSk7XG5cbiAgICBpZiAodHlwZSA9PT0gJ3doaXRlbGlzdHMnKSB7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVXaGl0ZUxpc3QoZG9tYWluLCBkYXRhLCBpc0RhdGFBcnJheSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09ICd1bnN1YnNjcmliZXMnKSB7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVVbnN1YnNjcmliZShkb21haW4sIGRhdGEpO1xuICAgIH1cblxuICAgIGlmICghaXNEYXRhQXJyYXkpIHtcbiAgICAgIHBvc3REYXRhID0gW2RhdGFdO1xuICAgIH0gZWxzZSB7XG4gICAgICBwb3N0RGF0YSA9IFsuLi5kYXRhXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0XG4gICAgICAucG9zdCh1cmxqb2luKCd2MycsIGRvbWFpbiwgdHlwZSksIEpTT04uc3RyaW5naWZ5KHBvc3REYXRhKSwgY3JlYXRlT3B0aW9ucylcbiAgICAgIC50aGVuKHRoaXMucHJlcGFyZVJlc3BvbnNlKTtcbiAgfVxuXG4gIGRlc3Ryb3koXG4gICAgZG9tYWluOiBzdHJpbmcsXG4gICAgdHlwZTogc3RyaW5nLFxuICAgIGFkZHJlc3M6IHN0cmluZ1xuICApOiBQcm9taXNlPFN1cHByZXNzaW9uRGVzdHJveVJlc3VsdD4ge1xuICAgIHRoaXMuZ2V0TW9kZWwodHlwZSk7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdFxuICAgICAgLmRlbGV0ZSh1cmxqb2luKCd2MycsIGRvbWFpbiwgdHlwZSwgZW5jb2RlVVJJQ29tcG9uZW50KGFkZHJlc3MpKSlcbiAgICAgIC50aGVuKChyZXNwb25zZTogU3VwcHJlc3Npb25EZXN0cm95UmVzcG9uc2UpID0+ICh7XG4gICAgICAgIG1lc3NhZ2U6IHJlc3BvbnNlLmJvZHkubWVzc2FnZSxcbiAgICAgICAgdmFsdWU6IHJlc3BvbnNlLmJvZHkudmFsdWUgfHwgJycsXG4gICAgICAgIGFkZHJlc3M6IHJlc3BvbnNlLmJvZHkuYWRkcmVzcyB8fCAnJyxcbiAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXNcbiAgICAgIH0pKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFN1cHByZXNzaW9uQ2xpZW50O1xuIiwiaW1wb3J0IHsgU3VwcHJlc3Npb25Nb2RlbHMgfSBmcm9tICcuLi8uLi9FbnVtcyc7XG5pbXBvcnQgeyBJVW5zdWJzY3JpYmUgfSBmcm9tICcuLi8uLi9JbnRlcmZhY2VzL1N1cHByZXNzaW9ucyc7XG5pbXBvcnQgeyBVbnN1YnNjcmliZURhdGEgfSBmcm9tICcuLi8uLi9UeXBlcy9TdXBwcmVzc2lvbnMnO1xuXG5pbXBvcnQgU3VwcHJlc3Npb24gZnJvbSAnLi9TdXBwcmVzc2lvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFVuc3Vic2NyaWJlIGV4dGVuZHMgU3VwcHJlc3Npb24gaW1wbGVtZW50cyBJVW5zdWJzY3JpYmUge1xuICAgIGFkZHJlc3M6IHN0cmluZztcbiAgICB0YWdzOiBzdHJpbmdbXTtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cbiAgICBjcmVhdGVkX2F0OiBEYXRlO1xuXG4gICAgY29uc3RydWN0b3IoZGF0YTogVW5zdWJzY3JpYmVEYXRhKSB7XG4gICAgICBzdXBlcihTdXBwcmVzc2lvbk1vZGVscy5VTlNVQlNDUklCRVMpO1xuICAgICAgdGhpcy5hZGRyZXNzID0gZGF0YS5hZGRyZXNzO1xuICAgICAgdGhpcy50YWdzID0gZGF0YS50YWdzO1xuICAgICAgdGhpcy5jcmVhdGVkX2F0ID0gbmV3IERhdGUoZGF0YS5jcmVhdGVkX2F0KTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBTdXBwcmVzc2lvbk1vZGVscyB9IGZyb20gJy4uLy4uL0VudW1zJztcbmltcG9ydCB7IElXaGl0ZUxpc3QgfSBmcm9tICcuLi8uLi9JbnRlcmZhY2VzL1N1cHByZXNzaW9ucyc7XG5pbXBvcnQgeyBXaGl0ZUxpc3REYXRhIH0gZnJvbSAnLi4vLi4vVHlwZXMvU3VwcHJlc3Npb25zJztcbmltcG9ydCBTdXBwcmVzc2lvbiBmcm9tICcuL1N1cHByZXNzaW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2hpdGVMaXN0IGV4dGVuZHMgU3VwcHJlc3Npb24gaW1wbGVtZW50cyBJV2hpdGVMaXN0IHtcbiAgICB2YWx1ZTogc3RyaW5nO1xuICAgIHJlYXNvbjogc3RyaW5nO1xuICAgIGNyZWF0ZWRBdDogRGF0ZTtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGE6IFdoaXRlTGlzdERhdGEpIHtcbiAgICAgIHN1cGVyKFN1cHByZXNzaW9uTW9kZWxzLldISVRFTElTVFMpO1xuICAgICAgdGhpcy52YWx1ZSA9IGRhdGEudmFsdWU7XG4gICAgICB0aGlzLnJlYXNvbiA9IGRhdGEucmVhc29uO1xuICAgICAgdGhpcy5jcmVhdGVkQXQgPSBuZXcgRGF0ZShkYXRhLmNyZWF0ZWRBdCk7XG4gICAgfVxufVxuIiwiaW1wb3J0IE5hdmlnYXRpb25UaHJ1UGFnZXMgZnJvbSAnLi4vY29tbW9uL05hdmlnYXRpb25UaHJ1UGFnZXMnO1xuaW1wb3J0IHsgQVBJUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9UeXBlcy9Db21tb24vQXBpUmVzcG9uc2UnO1xuXG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuLi9jb21tb24vUmVxdWVzdCc7XG5pbXBvcnQgeyBJTXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50IH0gZnJvbSAnLi4vLi4vSW50ZXJmYWNlcy9WYWxpZGF0aW9ucyc7XG5pbXBvcnQge1xuICBNdWx0aXBsZVZhbGlkYXRpb25Kb2JSZXN1bHQsXG4gIE11bHRpcGxlVmFsaWRhdGlvbkpvYkRhdGEsXG4gIE11bHRpcGxlVmFsaWRhdGlvbkpvYnNMaXN0UmVzdWx0LFxuICBNdWx0aXBsZVZhbGlkYXRpb25Kb2JzTGlzdFJlc3BvbnNlLFxuICBNdWx0aXBsZVZhbGlkYXRpb25Kb2JzTGlzdFF1ZXJ5LFxuICBNdWx0aXBsZVZhbGlkYXRpb25DcmVhdGlvbkRhdGEsXG4gIENyZWF0ZWRNdWx0aXBsZVZhbGlkYXRpb25Kb2IsXG4gIE11bHRpcGxlVmFsaWRhdGlvbkNyZWF0aW9uRGF0YVVwZGF0ZWQsXG4gIENhbmNlbGVkTXVsdGlwbGVWYWxpZGF0aW9uSm9iXG59IGZyb20gJy4uLy4uL1R5cGVzL1ZhbGlkYXRpb25zL011bHRpcGxlVmFsaWRhdGlvbic7XG5pbXBvcnQgQXR0YWNobWVudHNIYW5kbGVyIGZyb20gJy4uL2NvbW1vbi9BdHRhY2htZW50c0hhbmRsZXInO1xuaW1wb3J0IEFQSUVycm9yIGZyb20gJy4uL2NvbW1vbi9FcnJvcic7XG5cbmV4cG9ydCBjbGFzcyBNdWx0aXBsZVZhbGlkYXRpb25Kb2IgaW1wbGVtZW50cyBNdWx0aXBsZVZhbGlkYXRpb25Kb2JSZXN1bHQge1xuICBjcmVhdGVkQXQ6IERhdGU7XG4gIGlkOiBzdHJpbmc7XG4gIHF1YW50aXR5OiBudW1iZXJcbiAgcmVjb3Jkc1Byb2Nlc3NlZDogbnVtYmVyIHwgbnVsbDtcbiAgc3RhdHVzOiBzdHJpbmc7XG4gIGRvd25sb2FkVXJsPzoge1xuICAgIGNzdjogc3RyaW5nO1xuICAgIGpzb246IHN0cmluZztcbiAgfTtcblxuICByZXNwb25zZVN0YXR1c0NvZGU6IG51bWJlcjtcbiAgc3VtbWFyeT86IHtcbiAgICAgIHJlc3VsdDoge1xuICAgICAgICAgIGNhdGNoQWxsOiBudW1iZXI7XG4gICAgICAgICAgZGVsaXZlcmFibGU6IG51bWJlcjtcbiAgICAgICAgICBkb05vdFNlbmQ6IG51bWJlcjtcbiAgICAgICAgICB1bmRlbGl2ZXJhYmxlOiBudW1iZXI7XG4gICAgICAgICAgdW5rbm93bjogbnVtYmVyO1xuICAgICAgfTtcbiAgICAgIHJpc2s6IHtcbiAgICAgICAgICBoaWdoOiBudW1iZXI7XG4gICAgICAgICAgbG93OiBudW1iZXI7XG4gICAgICAgICAgbWVkaXVtOiBudW1iZXI7XG4gICAgICAgICAgdW5rbm93bjogbnVtYmVyO1xuICAgICAgfVxuICB9XG5cbiAgY29uc3RydWN0b3IoZGF0YTogTXVsdGlwbGVWYWxpZGF0aW9uSm9iRGF0YSwgcmVzcG9uc2VTdGF0dXNDb2RlOiBudW1iZXIpIHtcbiAgICB0aGlzLmNyZWF0ZWRBdCA9IG5ldyBEYXRlKGRhdGEuY3JlYXRlZF9hdCk7XG4gICAgdGhpcy5pZCA9IGRhdGEuaWQ7XG4gICAgdGhpcy5xdWFudGl0eSA9IGRhdGEucXVhbnRpdHk7XG4gICAgdGhpcy5yZWNvcmRzUHJvY2Vzc2VkID0gZGF0YS5yZWNvcmRzX3Byb2Nlc3NlZDtcbiAgICB0aGlzLnN0YXR1cyA9IGRhdGEuc3RhdHVzO1xuICAgIHRoaXMucmVzcG9uc2VTdGF0dXNDb2RlID0gcmVzcG9uc2VTdGF0dXNDb2RlO1xuICAgIGlmIChkYXRhLmRvd25sb2FkX3VybCkge1xuICAgICAgdGhpcy5kb3dubG9hZFVybCA9IHtcbiAgICAgICAgY3N2OiBkYXRhLmRvd25sb2FkX3VybD8uY3N2LFxuICAgICAgICBqc29uOiBkYXRhLmRvd25sb2FkX3VybD8uanNvblxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKGRhdGEuc3VtbWFyeSkge1xuICAgICAgdGhpcy5zdW1tYXJ5ID0ge1xuICAgICAgICByZXN1bHQ6IHtcbiAgICAgICAgICBjYXRjaEFsbDogZGF0YS5zdW1tYXJ5LnJlc3VsdC5jYXRjaF9hbGwsXG4gICAgICAgICAgZGVsaXZlcmFibGU6IGRhdGEuc3VtbWFyeS5yZXN1bHQuZGVsaXZlcmFibGUsXG4gICAgICAgICAgZG9Ob3RTZW5kOiBkYXRhLnN1bW1hcnkucmVzdWx0LmRvX25vdF9zZW5kLFxuICAgICAgICAgIHVuZGVsaXZlcmFibGU6IGRhdGEuc3VtbWFyeS5yZXN1bHQudW5kZWxpdmVyYWJsZSxcbiAgICAgICAgICB1bmtub3duOiBkYXRhLnN1bW1hcnkucmVzdWx0LnVua25vd25cbiAgICAgICAgfSxcbiAgICAgICAgcmlzazoge1xuICAgICAgICAgIGhpZ2g6IGRhdGEuc3VtbWFyeS5yaXNrLmhpZ2gsXG4gICAgICAgICAgbG93OiBkYXRhLnN1bW1hcnkucmlzay5sb3csXG4gICAgICAgICAgbWVkaXVtOiBkYXRhLnN1bW1hcnkucmlzay5tZWRpdW0sXG4gICAgICAgICAgdW5rbm93bjogZGF0YS5zdW1tYXJ5LnJpc2sudW5rbm93blxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNdWx0aXBsZVZhbGlkYXRpb25DbGllbnRcbiAgZXh0ZW5kcyBOYXZpZ2F0aW9uVGhydVBhZ2VzPE11bHRpcGxlVmFsaWRhdGlvbkpvYnNMaXN0UmVzdWx0PlxuICBpbXBsZW1lbnRzIElNdWx0aXBsZVZhbGlkYXRpb25DbGllbnQge1xuICByZXF1ZXN0OiBSZXF1ZXN0O1xuICBwcml2YXRlIGF0dGFjaG1lbnRzSGFuZGxlcjogQXR0YWNobWVudHNIYW5kbGVyO1xuXG4gIGNvbnN0cnVjdG9yKHJlcXVlc3Q6IFJlcXVlc3QpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgdGhpcy5hdHRhY2htZW50c0hhbmRsZXIgPSBuZXcgQXR0YWNobWVudHNIYW5kbGVyKCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVJlc3BvbnNlPFQ+KHJlc3BvbnNlOiBBUElSZXNwb25zZSk6IFQge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIC4uLnJlc3BvbnNlPy5ib2R5XG4gICAgfSBhcyBUO1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlTGlzdChyZXNwb25zZTogTXVsdGlwbGVWYWxpZGF0aW9uSm9ic0xpc3RSZXNwb25zZSlcbiAgICA6IE11bHRpcGxlVmFsaWRhdGlvbkpvYnNMaXN0UmVzdWx0IHtcbiAgICBjb25zdCBkYXRhID0ge30gYXMgTXVsdGlwbGVWYWxpZGF0aW9uSm9ic0xpc3RSZXN1bHQ7XG5cbiAgICBkYXRhLmpvYnMgPSByZXNwb25zZS5ib2R5LmpvYnMubWFwKChqb2IpID0+IG5ldyBNdWx0aXBsZVZhbGlkYXRpb25Kb2Ioam9iLCByZXNwb25zZS5zdGF0dXMpKTtcblxuICAgIGRhdGEucGFnZXMgPSB0aGlzLnBhcnNlUGFnZUxpbmtzKHJlc3BvbnNlLCAnPycsICdwaXZvdCcpO1xuICAgIGRhdGEudG90YWwgPSByZXNwb25zZS5ib2R5LnRvdGFsO1xuICAgIGRhdGEuc3RhdHVzID0gcmVzcG9uc2Uuc3RhdHVzO1xuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBhc3luYyBsaXN0KHF1ZXJ5PzogTXVsdGlwbGVWYWxpZGF0aW9uSm9ic0xpc3RRdWVyeSk6IFByb21pc2U8TXVsdGlwbGVWYWxpZGF0aW9uSm9ic0xpc3RSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0TGlzdFdpdGhQYWdlcygnL3Y0L2FkZHJlc3MvdmFsaWRhdGUvYnVsaycsIHF1ZXJ5KTtcbiAgfVxuXG4gIGFzeW5jIGdldChsaXN0SWQ6IHN0cmluZyk6IFByb21pc2U8TXVsdGlwbGVWYWxpZGF0aW9uSm9iPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QuZ2V0KGAvdjQvYWRkcmVzcy92YWxpZGF0ZS9idWxrLyR7bGlzdElkfWApO1xuICAgIHJldHVybiBuZXcgTXVsdGlwbGVWYWxpZGF0aW9uSm9iKHJlc3BvbnNlLmJvZHksIHJlc3BvbnNlLnN0YXR1cyk7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRUb0V4cGVjdGVkU2hhcGUoZGF0YTogTXVsdGlwbGVWYWxpZGF0aW9uQ3JlYXRpb25EYXRhKVxuICAgIDogTXVsdGlwbGVWYWxpZGF0aW9uQ3JlYXRpb25EYXRhVXBkYXRlZCB7XG4gICAgbGV0IG11bHRpcGxlVmFsaWRhdGlvbkRhdGE6IE11bHRpcGxlVmFsaWRhdGlvbkNyZWF0aW9uRGF0YVVwZGF0ZWQ7XG4gICAgaWYgKHRoaXMuYXR0YWNobWVudHNIYW5kbGVyLmlzQnVmZmVyKGRhdGEuZmlsZSkpIHtcbiAgICAgIG11bHRpcGxlVmFsaWRhdGlvbkRhdGEgPSB7IG11bHRpcGxlVmFsaWRhdGlvbkZpbGU6IGRhdGEuZmlsZSB9O1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRhdGEuZmlsZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG11bHRpcGxlVmFsaWRhdGlvbkRhdGEgPSB7IG11bHRpcGxlVmFsaWRhdGlvbkZpbGU6IHsgZGF0YTogZGF0YS5maWxlIH0gfTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuYXR0YWNobWVudHNIYW5kbGVyLmlzU3RyZWFtKGRhdGEuZmlsZSkpIHtcbiAgICAgIG11bHRpcGxlVmFsaWRhdGlvbkRhdGEgPSB7IG11bHRpcGxlVmFsaWRhdGlvbkZpbGU6IGRhdGEuZmlsZSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBtdWx0aXBsZVZhbGlkYXRpb25EYXRhID0geyBtdWx0aXBsZVZhbGlkYXRpb25GaWxlOiBkYXRhLmZpbGUgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbXVsdGlwbGVWYWxpZGF0aW9uRGF0YTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZShcbiAgICBsaXN0SWQ6IHN0cmluZyxcbiAgICBkYXRhOiBNdWx0aXBsZVZhbGlkYXRpb25DcmVhdGlvbkRhdGFcbiAgKTogUHJvbWlzZTxDcmVhdGVkTXVsdGlwbGVWYWxpZGF0aW9uSm9iPiB7XG4gICAgaWYgKCFkYXRhIHx8ICFkYXRhLmZpbGUpIHtcbiAgICAgIHRocm93IEFQSUVycm9yLmdldFVzZXJEYXRhRXJyb3IoJ1wiZmlsZVwiIHByb3BlcnR5IGV4cGVjdGVkLicsICdNYWtlIHN1cmUgc2Vjb25kIGFyZ3VtZW50IGhhcyBcImZpbGVcIiBwcm9wZXJ0eS4nKTtcbiAgICB9XG4gICAgY29uc3QgbXVsdGlwbGVWYWxpZGF0aW9uRGF0YSA9IHRoaXMuY29udmVydFRvRXhwZWN0ZWRTaGFwZShkYXRhKTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdC5wb3N0V2l0aEZEKGAvdjQvYWRkcmVzcy92YWxpZGF0ZS9idWxrLyR7bGlzdElkfWAsIG11bHRpcGxlVmFsaWRhdGlvbkRhdGEpO1xuICAgIHJldHVybiB0aGlzLmhhbmRsZVJlc3BvbnNlPENyZWF0ZWRNdWx0aXBsZVZhbGlkYXRpb25Kb2I+KHJlc3BvbnNlKTtcbiAgfVxuXG4gIGFzeW5jIGRlc3Ryb3kobGlzdElkOiBzdHJpbmcpOiBQcm9taXNlPENhbmNlbGVkTXVsdGlwbGVWYWxpZGF0aW9uSm9iPiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QuZGVsZXRlKGAvdjQvYWRkcmVzcy92YWxpZGF0ZS9idWxrLyR7bGlzdElkfWApO1xuICAgIHJldHVybiB0aGlzLmhhbmRsZVJlc3BvbnNlPENhbmNlbGVkTXVsdGlwbGVWYWxpZGF0aW9uSm9iPihyZXNwb25zZSk7XG4gIH1cbn1cbiIsImltcG9ydCB7IElWYWxpZGF0aW9uQ2xpZW50LCBJTXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50IH0gZnJvbSAnLi4vLi4vSW50ZXJmYWNlcy9WYWxpZGF0aW9ucyc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uUXVlcnksIFZhbGlkYXRpb25SZXN1bHQsIFZhbGlkYXRpb25SZXNwb25zZSB9IGZyb20gJy4uLy4uL1R5cGVzL1ZhbGlkYXRpb25zJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4uL2NvbW1vbi9SZXF1ZXN0JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmFsaWRhdGVDbGllbnQgaW1wbGVtZW50cyBJVmFsaWRhdGlvbkNsaWVudCB7XG4gIHB1YmxpYyBtdWx0aXBsZVZhbGlkYXRpb247XG4gIHJlcXVlc3Q6IFJlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IocmVxdWVzdDogUmVxdWVzdCwgbXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50OiBJTXVsdGlwbGVWYWxpZGF0aW9uQ2xpZW50KSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgICB0aGlzLm11bHRpcGxlVmFsaWRhdGlvbiA9IG11bHRpcGxlVmFsaWRhdGlvbkNsaWVudDtcbiAgfVxuXG4gIGFzeW5jIGdldChhZGRyZXNzOiBzdHJpbmcpOiBQcm9taXNlPFZhbGlkYXRpb25SZXN1bHQ+IHtcbiAgICBjb25zdCBxdWVyeTogVmFsaWRhdGlvblF1ZXJ5ID0geyBhZGRyZXNzIH07XG4gICAgY29uc3QgcmVzdWx0OiBWYWxpZGF0aW9uUmVzcG9uc2UgPSBhd2FpdCB0aGlzLnJlcXVlc3QuZ2V0KCcvdjQvYWRkcmVzcy92YWxpZGF0ZScsIHF1ZXJ5KTtcbiAgICByZXR1cm4gcmVzdWx0LmJvZHkgYXMgVmFsaWRhdGlvblJlc3VsdDtcbiAgfVxufVxuIiwiaW1wb3J0IHVybGpvaW4gZnJvbSAndXJsLWpvaW4nO1xuaW1wb3J0IHsgV2ViaG9va3NJZHMgfSBmcm9tICcuLi9FbnVtcyc7XG5pbXBvcnQgeyBJV2ViSG9va3NDbGllbnQgfSBmcm9tICcuLi9JbnRlcmZhY2VzL1dlYmhvb2tzJztcblxuaW1wb3J0IHtcbiAgV2ViaG9va1ZhbGlkYXRpb25SZXNwb25zZSxcbiAgV2ViaG9va0xpc3QsXG4gIFdlYmhvb2tSZXNwb25zZSxcbiAgV2ViaG9va3NRdWVyeSxcbiAgV2ViaG9va1Jlc3VsdFxufSBmcm9tICcuLi9UeXBlcy9XZWJob29rcyc7XG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuL2NvbW1vbi9SZXF1ZXN0JztcblxuZXhwb3J0IGNsYXNzIFdlYmhvb2sgaW1wbGVtZW50cyBXZWJob29rUmVzdWx0IHtcbiAgaWQ6IHN0cmluZztcbiAgdXJsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHVybHM6IHN0cmluZ1tdO1xuXG4gIGNvbnN0cnVjdG9yKGlkOiBzdHJpbmcsIHVybDogc3RyaW5nIHwgdW5kZWZpbmVkLCB1cmxzOiBzdHJpbmdbXSkge1xuICAgIHRoaXMuaWQgPSBpZDtcbiAgICB0aGlzLnVybCA9IHVybDtcbiAgICB0aGlzLnVybHMgPSB1cmxzO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdlYmhvb2tzQ2xpZW50IGltcGxlbWVudHMgSVdlYkhvb2tzQ2xpZW50IHtcbiAgcmVxdWVzdDogUmVxdWVzdDtcblxuICBjb25zdHJ1Y3RvcihyZXF1ZXN0OiBSZXF1ZXN0KSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcbiAgfVxuXG4gIHByaXZhdGUgX3BhcnNlV2ViaG9va0xpc3QocmVzcG9uc2U6IHsgYm9keTogeyB3ZWJob29rczogV2ViaG9va0xpc3QgfSB9KTogV2ViaG9va0xpc3Qge1xuICAgIHJldHVybiByZXNwb25zZS5ib2R5LndlYmhvb2tzO1xuICB9XG5cbiAgX3BhcnNlV2ViaG9va1dpdGhJRChpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChyZXNwb25zZTogV2ViaG9va1Jlc3BvbnNlKTogV2ViaG9va1Jlc3VsdCB7XG4gICAgICBjb25zdCB3ZWJob29rUmVzcG9uc2UgPSByZXNwb25zZT8uYm9keT8ud2ViaG9vaztcbiAgICAgIGxldCB1cmwgPSB3ZWJob29rUmVzcG9uc2U/LnVybDtcbiAgICAgIGxldCB1cmxzID0gd2ViaG9va1Jlc3BvbnNlPy51cmxzO1xuICAgICAgaWYgKCF1cmwpIHtcbiAgICAgICAgdXJsID0gdXJscyAmJiB1cmxzLmxlbmd0aFxuICAgICAgICAgID8gdXJsc1swXVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKCghdXJscyB8fCB1cmxzLmxlbmd0aCA9PT0gMCkgJiYgdXJsKSB7XG4gICAgICAgIHVybHMgPSBbdXJsXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgV2ViaG9vayhpZCwgdXJsLCB1cmxzIGFzIHN0cmluZ1tdKTtcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFyc2VXZWJob29rVGVzdChyZXNwb25zZTogeyBib2R5OiB7IGNvZGU6IG51bWJlciwgbWVzc2FnZTogc3RyaW5nIH0gfSlcbiAgOiB7Y29kZTogbnVtYmVyLCBtZXNzYWdlOnN0cmluZ30ge1xuICAgIHJldHVybiB7XG4gICAgICBjb2RlOiByZXNwb25zZS5ib2R5LmNvZGUsXG4gICAgICBtZXNzYWdlOiByZXNwb25zZS5ib2R5Lm1lc3NhZ2VcbiAgICB9IGFzIFdlYmhvb2tWYWxpZGF0aW9uUmVzcG9uc2U7XG4gIH1cblxuICBsaXN0KGRvbWFpbjogc3RyaW5nLCBxdWVyeTogV2ViaG9va3NRdWVyeSk6IFByb21pc2U8V2ViaG9va0xpc3Q+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LmdldCh1cmxqb2luKCcvdjMvZG9tYWlucycsIGRvbWFpbiwgJ3dlYmhvb2tzJyksIHF1ZXJ5KVxuICAgICAgLnRoZW4odGhpcy5fcGFyc2VXZWJob29rTGlzdCk7XG4gIH1cblxuICBnZXQoZG9tYWluOiBzdHJpbmcsIGlkOiBXZWJob29rc0lkcyk6IFByb21pc2U8V2ViaG9va1Jlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZ2V0KHVybGpvaW4oJy92My9kb21haW5zJywgZG9tYWluLCAnd2ViaG9va3MnLCBpZCkpXG4gICAgICAudGhlbih0aGlzLl9wYXJzZVdlYmhvb2tXaXRoSUQoaWQpKTtcbiAgfVxuXG4gIGNyZWF0ZShkb21haW46IHN0cmluZyxcbiAgICBpZDogc3RyaW5nLFxuICAgIHVybDogc3RyaW5nLFxuICAgIHRlc3QgPSBmYWxzZSk6IFByb21pc2U8V2ViaG9va1Jlc3VsdCB8IFdlYmhvb2tWYWxpZGF0aW9uUmVzcG9uc2U+IHtcbiAgICBpZiAodGVzdCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXRXaXRoRkQodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICd3ZWJob29rcycsIGlkLCAndGVzdCcpLCB7IHVybCB9KVxuICAgICAgICAudGhlbih0aGlzLl9wYXJzZVdlYmhvb2tUZXN0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0LnBvc3RXaXRoRkQodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICd3ZWJob29rcycpLCB7IGlkLCB1cmwgfSlcbiAgICAgIC50aGVuKHRoaXMuX3BhcnNlV2ViaG9va1dpdGhJRChpZCkpO1xuICB9XG5cbiAgdXBkYXRlKGRvbWFpbjogc3RyaW5nLCBpZDogc3RyaW5nLCB1cmxWYWx1ZXM6IHN0cmluZyB8IHN0cmluZ1tdKTogUHJvbWlzZTxXZWJob29rUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdC5wdXRXaXRoRkQodXJsam9pbignL3YzL2RvbWFpbnMnLCBkb21haW4sICd3ZWJob29rcycsIGlkKSwgeyB1cmw6IHVybFZhbHVlcyB9KVxuICAgICAgLnRoZW4odGhpcy5fcGFyc2VXZWJob29rV2l0aElEKGlkKSk7XG4gIH1cblxuICBkZXN0cm95KGRvbWFpbjogc3RyaW5nLCBpZDogc3RyaW5nKSA6IFByb21pc2U8V2ViaG9va1Jlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QuZGVsZXRlKHVybGpvaW4oJy92My9kb21haW5zJywgZG9tYWluLCAnd2ViaG9va3MnLCBpZCkpXG4gICAgICAudGhlbih0aGlzLl9wYXJzZVdlYmhvb2tXaXRoSUQoaWQpKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgUmVhZGFibGUgfSBmcm9tICdzdHJlYW0nO1xuaW1wb3J0IHsgQ3VzdG9tRmlsZSwgQ3VzdG9tRmlsZURhdGEgfSBmcm9tICcuLi8uLi9UeXBlcyc7XG5pbXBvcnQgQVBJRXJyb3IgZnJvbSAnLi9FcnJvcic7XG5pbXBvcnQgeyBBdHRhY2htZW50SW5mbywgU3RyZWFtVmFsdWUgfSBmcm9tICcuLi8uLi9UeXBlcy9Db21tb24vQXR0YWNobWVudHMnO1xuXG5jbGFzcyBCbG9iRnJvbVN0cmVhbSB7XG4gIHByaXZhdGUgX3N0cmVhbTogUmVhZGFibGVcbiAgc2l6ZTogbnVtYmVyXG5cbiAgY29uc3RydWN0b3Ioc3RyZWFtOiBSZWFkYWJsZSwgc2l6ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuICAgIHRoaXMuc2l6ZSA9IHNpemU7XG4gIH1cblxuICBzdHJlYW0oKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0cmVhbTtcbiAgfVxuXG4gIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICByZXR1cm4gJ0Jsb2InO1xuICB9XG59XG5cbmNsYXNzIEF0dGFjaG1lbnRzSGFuZGxlciB7XG4gIHByaXZhdGUgZ2V0QXR0YWNobWVudE9wdGlvbnMoaXRlbToge1xuICAgIGZpbGVuYW1lPzogc3RyaW5nO1xuICAgIGNvbnRlbnRUeXBlPyA6IHN0cmluZztcbiAgICBrbm93bkxlbmd0aD86IG51bWJlcjtcbiAgfSk6IEF0dGFjaG1lbnRJbmZvIHtcbiAgICBjb25zdCB7XG4gICAgICBmaWxlbmFtZSxcbiAgICAgIGNvbnRlbnRUeXBlLFxuICAgICAga25vd25MZW5ndGgsXG4gICAgfSA9IGl0ZW07XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLihmaWxlbmFtZSA/IHsgZmlsZW5hbWUgfSA6IHsgZmlsZW5hbWU6ICdmaWxlJyB9KSxcbiAgICAgIC4uLihjb250ZW50VHlwZSAmJiB7IGNvbnRlbnRUeXBlIH0pLFxuICAgICAgLi4uKGtub3duTGVuZ3RoICYmIHsga25vd25MZW5ndGggfSlcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRGaWxlSW5mbyhmaWxlOiBGaWxlKSB7IC8vIGJyb3dzZXIgY29tcGxpYW50IGZpbGVcbiAgICBjb25zdCB7XG4gICAgICBuYW1lOiBmaWxlbmFtZSxcbiAgICAgIHR5cGU6IGNvbnRlbnRUeXBlLFxuICAgICAgc2l6ZToga25vd25MZW5ndGgsXG4gICAgfSA9IGZpbGU7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QXR0YWNobWVudE9wdGlvbnMoeyBmaWxlbmFtZSwgY29udGVudFR5cGUsIGtub3duTGVuZ3RoIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDdXN0b21GaWxlSW5mbyhmaWxlOiBDdXN0b21GaWxlKSB7IC8vIGN1c3RvbSBjcmVhdGVkIGZpbGVcbiAgICBjb25zdCB7XG4gICAgICBmaWxlbmFtZSxcbiAgICAgIGNvbnRlbnRUeXBlLFxuICAgICAga25vd25MZW5ndGgsXG4gICAgfSA9IGZpbGU7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QXR0YWNobWVudE9wdGlvbnMoeyBmaWxlbmFtZSwgY29udGVudFR5cGUsIGtub3duTGVuZ3RoIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRCdWZmZXJJbmZvKGJ1ZmZlcjogQnVmZmVyKSB7XG4gICAgY29uc3Qge1xuICAgICAgYnl0ZUxlbmd0aDoga25vd25MZW5ndGgsXG4gICAgfSA9IGJ1ZmZlcjtcbiAgICByZXR1cm4gdGhpcy5nZXRBdHRhY2htZW50T3B0aW9ucyh7IGZpbGVuYW1lOiAnZmlsZScsIGNvbnRlbnRUeXBlOiAnJywga25vd25MZW5ndGggfSk7XG4gIH1cblxuICBwdWJsaWMgaXNTdHJlYW0oZGF0YTogdW5rbm93bikgOiBkYXRhIGlzIFN0cmVhbVZhbHVlIHtcbiAgICByZXR1cm4gdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmIHR5cGVvZiAoZGF0YSBhcyBTdHJlYW1WYWx1ZSkucGlwZSA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIHB1YmxpYyBpc0N1c3RvbUZpbGUob2JqOiB1bmtub3duKTogb2JqIGlzIEN1c3RvbUZpbGUge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0J1xuICAgICAgJiYgISEob2JqIGFzIEN1c3RvbUZpbGUpLmRhdGE7XG4gIH1cblxuICBwdWJsaWMgaXNCcm93c2VyRmlsZShvYmo6IHVua25vd24pOiBvYmogaXMgRmlsZSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmICghIShvYmogYXMgRmlsZSkubmFtZSB8fCAodHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnICYmIG9iaiBpbnN0YW5jZW9mIEJsb2IpKTtcbiAgfVxuXG4gIHB1YmxpYyBpc0J1ZmZlcihkYXRhOiB1bmtub3duKTogZGF0YSBpcyBCdWZmZXIge1xuICAgIHJldHVybiB0eXBlb2YgQnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJiBCdWZmZXIuaXNCdWZmZXIoZGF0YSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QXR0YWNobWVudEluZm8oXG4gICAgYXR0YWNobWVudDogQ3VzdG9tRmlsZSB8IEZpbGUgfCBzdHJpbmcgfCBDdXN0b21GaWxlRGF0YVxuICApOiBBdHRhY2htZW50SW5mbyB7XG4gICAgY29uc3QgaXNCcm93c2VyRmlsZSA9IHRoaXMuaXNCcm93c2VyRmlsZShhdHRhY2htZW50KTtcbiAgICBjb25zdCBpc0N1c3RvbUZpbGUgPSB0aGlzLmlzQ3VzdG9tRmlsZShhdHRhY2htZW50KTtcbiAgICBjb25zdCBpc1N0cmluZyA9IHR5cGVvZiBhdHRhY2htZW50ID09PSAnc3RyaW5nJztcbiAgICBpZiAoIWlzU3RyaW5nKSB7XG4gICAgICBpZiAoaXNCcm93c2VyRmlsZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRGaWxlSW5mbyhhdHRhY2htZW50IGFzIEZpbGUpO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmIEJ1ZmZlci5pc0J1ZmZlcihhdHRhY2htZW50KSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRCdWZmZXJJbmZvKGF0dGFjaG1lbnQgYXMgQnVmZmVyKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0N1c3RvbUZpbGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q3VzdG9tRmlsZUluZm8oYXR0YWNobWVudCBhcyBDdXN0b21GaWxlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvcHRpb25zOiBBdHRhY2htZW50SW5mbyA9IHtcbiAgICAgIGZpbGVuYW1lOiAnZmlsZScsXG4gICAgICBjb250ZW50VHlwZTogdW5kZWZpbmVkLFxuICAgICAga25vd25MZW5ndGg6IHVuZGVmaW5lZFxuICAgIH07XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH1cblxuICBwdWJsaWMgY29udmVydFRvRkRleHBlY3RlZFNoYXBlKFxuICAgIHVzZXJQcm92aWRlZFZhbHVlOiBDdXN0b21GaWxlIHwgRmlsZSB8IHN0cmluZyB8IEN1c3RvbUZpbGVEYXRhXG4gICkge1xuICAgIGNvbnN0IGlzU3RyZWFtID0gdGhpcy5pc1N0cmVhbSh1c2VyUHJvdmlkZWRWYWx1ZSk7XG4gICAgY29uc3QgaXNCcm93c2VyRmlsZSA9IHRoaXMuaXNCcm93c2VyRmlsZSh1c2VyUHJvdmlkZWRWYWx1ZSk7XG4gICAgY29uc3QgaXNDdXN0b21GaWxlID0gdGhpcy5pc0N1c3RvbUZpbGUodXNlclByb3ZpZGVkVmFsdWUpO1xuICAgIGNvbnN0IGlzU3RyaW5nID0gdHlwZW9mIHVzZXJQcm92aWRlZFZhbHVlID09PSAnc3RyaW5nJztcbiAgICBsZXQgcmVzdWx0O1xuICAgIGlmIChpc1N0cmVhbSB8fCBpc1N0cmluZyB8fCBpc0Jyb3dzZXJGaWxlIHx8IHRoaXMuaXNCdWZmZXIodXNlclByb3ZpZGVkVmFsdWUpKSB7XG4gICAgICByZXN1bHQgPSB1c2VyUHJvdmlkZWRWYWx1ZTtcbiAgICB9IGVsc2UgaWYgKGlzQ3VzdG9tRmlsZSkge1xuICAgICAgcmVzdWx0ID0gdXNlclByb3ZpZGVkVmFsdWUuZGF0YTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgQVBJRXJyb3IuZ2V0VXNlckRhdGFFcnJvcihcbiAgICAgICAgYFVua25vd24gYXR0YWNobWVudCB0eXBlICR7dHlwZW9mIHVzZXJQcm92aWRlZFZhbHVlfWAsXG4gICAgICAgIGBUaGUgXCJhdHRhY2htZW50XCIgcHJvcGVydHkgZXhwZWN0cyBlaXRoZXIgQnVmZmVyLCBCbG9iLCBvciBTdHJpbmcuXG4gICAgICAgICAgQWxzbywgSXQgaXMgcG9zc2libGUgdG8gcHJvdmlkZSBhbiBvYmplY3QgdGhhdCBoYXMgdGhlIHByb3BlcnR5IFwiZGF0YVwiIHdpdGggYSB2YWx1ZSB0aGF0IGlzIGVxdWFsIHRvIG9uZSBvZiB0aGUgdHlwZXMgY291bnRlZCBiZWZvcmUuXG4gICAgICAgICAgQWRkaXRpb25hbGx5LCB5b3UgbWF5IHVzZSBhbiBhcnJheSB0byBzZW5kIG1vcmUgdGhhbiBvbmUgYXR0YWNobWVudC5gXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHVibGljIGdldEJsb2JGcm9tU3RyZWFtKHN0cmVhbTogUmVhZGFibGUsIHNpemU6IG51bWJlcik6IEJsb2JGcm9tU3RyZWFtIHtcbiAgICByZXR1cm4gbmV3IEJsb2JGcm9tU3RyZWFtKHN0cmVhbSwgc2l6ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQXR0YWNobWVudHNIYW5kbGVyO1xuIiwiaW1wb3J0IHsgQVBJRXJyb3JPcHRpb25zLCBBUElFcnJvclR5cGUgfSBmcm9tICcuLi8uLi9UeXBlcy9Db21tb24nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBUElFcnJvciBleHRlbmRzIEVycm9yIGltcGxlbWVudHMgQVBJRXJyb3JUeXBlIHtcbiAgcHVibGljIHN0YXR1czogbnVtYmVyIDtcbiAgcHVibGljIHN0YWNrOiBzdHJpbmc7XG4gIHB1YmxpYyBkZXRhaWxzOiBzdHJpbmc7XG4gIHB1YmxpYyB0eXBlOiBzdHJpbmc7XG5cbiAgcHVibGljIHN0YXRpYyBnZXRVc2VyRGF0YUVycm9yKHN0YXR1c1RleHQ6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyB0aGlzKHtcbiAgICAgIHN0YXR1czogNDAwLFxuICAgICAgc3RhdHVzVGV4dCxcbiAgICAgIGJvZHk6IHtcbiAgICAgICAgbWVzc2FnZVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY29uc3RydWN0b3Ioe1xuICAgIHN0YXR1cyxcbiAgICBzdGF0dXNUZXh0LFxuICAgIG1lc3NhZ2UsXG4gICAgYm9keSA9IHt9XG4gIH06IEFQSUVycm9yT3B0aW9ucykge1xuICAgIGxldCBib2R5TWVzc2FnZSA9ICcnO1xuICAgIGxldCBlcnJvciA9ICcnO1xuICAgIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGJvZHlNZXNzYWdlID0gYm9keTtcbiAgICB9IGVsc2Uge1xuICAgICAgYm9keU1lc3NhZ2UgPSBib2R5Py5tZXNzYWdlIHx8ICcnO1xuICAgICAgZXJyb3IgPSBib2R5Py5lcnJvciB8fCAnJztcbiAgICB9XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuc3RhY2sgPSAnJztcbiAgICB0aGlzLnN0YXR1cyA9IHN0YXR1cztcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8IGVycm9yIHx8IHN0YXR1c1RleHQgfHwgJyc7XG4gICAgdGhpcy5kZXRhaWxzID0gYm9keU1lc3NhZ2U7XG4gICAgdGhpcy50eXBlID0gJ01haWxndW5BUElFcnJvcic7XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIE5vZGVGb3JtRGF0YSBmcm9tICdmb3JtLWRhdGEnO1xuaW1wb3J0IHsgUmVhZGFibGUgfSBmcm9tICdzdHJlYW0nO1xuaW1wb3J0IHsgRm9ybURhdGFJbnB1dCwgSW5wdXRGb3JtRGF0YSB9IGZyb20gJy4uLy4uL1R5cGVzL0NvbW1vbic7XG5pbXBvcnQgQVBJRXJyb3IgZnJvbSAnLi9FcnJvcic7XG5cbmltcG9ydCB7XG4gIEN1c3RvbUZpbGUsXG4gIEN1c3RvbUZpbGVEYXRhLFxuICBGb3JtRGF0YUlucHV0VmFsdWUsXG4gIE1lc3NhZ2VBdHRhY2htZW50LFxuICBNaW1lTWVzc2FnZVxufSBmcm9tICcuLi8uLi9UeXBlcyc7XG5pbXBvcnQgQXR0YWNobWVudHNIYW5kbGVyIGZyb20gJy4vQXR0YWNobWVudHNIYW5kbGVyJztcbmltcG9ydCB7IEF0dGFjaG1lbnRJbmZvIH0gZnJvbSAnLi4vLi4vVHlwZXMvQ29tbW9uL0F0dGFjaG1lbnRzJztcblxuY2xhc3MgRm9ybURhdGFCdWlsZGVyIHtcbiAgcHJpdmF0ZSBGb3JtRGF0YUNvbnN0cnVjdG9yOiBJbnB1dEZvcm1EYXRhO1xuICBwcml2YXRlIGZpbGVLZXlzOiBzdHJpbmdbXTtcbiAgcHJpdmF0ZSBhdHRhY2htZW50c0hhbmRsZXI6IEF0dGFjaG1lbnRzSGFuZGxlcjtcblxuICBjb25zdHJ1Y3RvcihGb3JtRGF0YUNvbnN0cnVjdG9yOiBJbnB1dEZvcm1EYXRhKSB7XG4gICAgdGhpcy5Gb3JtRGF0YUNvbnN0cnVjdG9yID0gRm9ybURhdGFDb25zdHJ1Y3RvcjtcbiAgICB0aGlzLmZpbGVLZXlzID0gWydhdHRhY2htZW50JywgJ2lubGluZScsICdtdWx0aXBsZVZhbGlkYXRpb25GaWxlJ107XG4gICAgdGhpcy5hdHRhY2htZW50c0hhbmRsZXIgPSBuZXcgQXR0YWNobWVudHNIYW5kbGVyKCk7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlRm9ybURhdGEoZGF0YTogRm9ybURhdGFJbnB1dCk6IE5vZGVGb3JtRGF0YSB8IEZvcm1EYXRhIHtcbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGxlYXNlIHByb3ZpZGUgZGF0YSBvYmplY3QnKTtcbiAgICB9XG4gICAgY29uc3QgZm9ybURhdGE6IE5vZGVGb3JtRGF0YSB8IEZvcm1EYXRhID0gT2JqZWN0LmtleXMoZGF0YSlcbiAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gZGF0YVtrZXldOyB9KVxuICAgICAgLnJlZHVjZSgoZm9ybURhdGFBY2M6IE5vZGVGb3JtRGF0YSB8IEZvcm1EYXRhLCBrZXkpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZmlsZUtleXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnRWYWx1ZSA9IGRhdGFba2V5XTtcbiAgICAgICAgICBpZiAodGhpcy5pc01lc3NhZ2VBdHRhY2htZW50KGF0dGFjaG1lbnRWYWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkRmlsZXNUb0ZEKGtleSwgYXR0YWNobWVudFZhbHVlLCBmb3JtRGF0YUFjYyk7XG4gICAgICAgICAgICByZXR1cm4gZm9ybURhdGFBY2M7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IEFQSUVycm9yLmdldFVzZXJEYXRhRXJyb3IoXG4gICAgICAgICAgICBgVW5rbm93biB2YWx1ZSAke2RhdGFba2V5XX0gd2l0aCB0eXBlICR7dHlwZW9mIGRhdGFba2V5XX0gZm9yIHByb3BlcnR5IFwiJHtrZXl9XCJgLFxuICAgICAgICAgICAgYFRoZSBrZXkgXCIke2tleX1cIiBzaG91bGQgaGF2ZSB0eXBlIG9mIEJ1ZmZlciwgU3RyZWFtLCBGaWxlLCBvciBTdHJpbmcgYFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoa2V5ID09PSAnbWVzc2FnZScpIHsgLy8gbWltZSBtZXNzYWdlXG4gICAgICAgICAgY29uc3QgbWVzc2FnZVZhbHVlID0gZGF0YVtrZXldO1xuICAgICAgICAgIGlmICghbWVzc2FnZVZhbHVlIHx8ICF0aGlzLmlzTUlNRShtZXNzYWdlVmFsdWUpKSB7XG4gICAgICAgICAgICB0aHJvdyBBUElFcnJvci5nZXRVc2VyRGF0YUVycm9yKFxuICAgICAgICAgICAgICBgVW5rbm93biBkYXRhIHR5cGUgZm9yIFwiJHtrZXl9XCIgcHJvcGVydHlgLFxuICAgICAgICAgICAgICAnVGhlIG1pbWUgZGF0YSBzaG91bGQgaGF2ZSB0eXBlIG9mIEJ1ZmZlciwgU3RyaW5nIG9yIEJsb2InXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmFkZE1pbWVEYXRhVG9GRChrZXksIG1lc3NhZ2VWYWx1ZSwgZm9ybURhdGFBY2MpO1xuICAgICAgICAgIHJldHVybiBmb3JtRGF0YUFjYztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYWRkQ29tbW9uUHJvcGVydHlUb0ZEKGtleSwgZGF0YVtrZXldLCBmb3JtRGF0YUFjYyk7XG4gICAgICAgIHJldHVybiBmb3JtRGF0YUFjYztcbiAgICAgIH0sIG5ldyB0aGlzLkZvcm1EYXRhQ29uc3RydWN0b3IoKSk7XG4gICAgcmV0dXJuIGZvcm1EYXRhO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRNaW1lRGF0YVRvRkQoXG4gICAga2V5OiBzdHJpbmcsXG4gICAgZGF0YTogTWltZU1lc3NhZ2UsXG4gICAgZm9ybURhdGFJbnN0YW5jZTogTm9kZUZvcm1EYXRhIHwgRm9ybURhdGFcbiAgKTogdm9pZCB7XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykgeyAvLyBpZiBzdHJpbmcgb25seSB0d28gcGFyYW1ldGVycyBzaG91bGQgYmUgdXNlZC5cbiAgICAgIGZvcm1EYXRhSW5zdGFuY2UuYXBwZW5kKGtleSwgZGF0YSBhcyBzdHJpbmcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzRm9ybURhdGFQYWNrYWdlKGZvcm1EYXRhSW5zdGFuY2UpKSB7IC8vIGZvcm0tZGF0YSBwYWNrYWdlIGlzIHVzZWRcbiAgICAgIGNvbnN0IG5vZGVGb3JtRGF0YSA9IGZvcm1EYXRhSW5zdGFuY2UgYXMgTm9kZUZvcm1EYXRhO1xuICAgICAgbm9kZUZvcm1EYXRhLmFwcGVuZChrZXksIGRhdGEsIHsgZmlsZW5hbWU6ICdNaW1lTWVzc2FnZScgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBCbG9iICE9PSB1bmRlZmluZWQpIHsgLy8gZWl0aGVyIG5vZGUgPiAxOCBvciBicm93c2VyXG4gICAgICBjb25zdCBicm93c2VyRm9ybURhdGEgPSBmb3JtRGF0YUluc3RhbmNlIGFzIEZvcm1EYXRhOyAvLyBCcm93c2VyIGNvbXBsaWFudCBGb3JtRGF0YVxuICAgICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBCbG9iKSB7XG4gICAgICAgIGJyb3dzZXJGb3JtRGF0YS5hcHBlbmQoa2V5LCBkYXRhLCAnTWltZU1lc3NhZ2UnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuYXR0YWNobWVudHNIYW5kbGVyLmlzQnVmZmVyKGRhdGEpKSB7IC8vIG5vZGUgZW52aXJvbm1lbnRcbiAgICAgICAgY29uc3QgYmxvYkluc3RhbmNlID0gbmV3IEJsb2IoW2RhdGFdKTtcbiAgICAgICAgYnJvd3NlckZvcm1EYXRhLmFwcGVuZChrZXksIGJsb2JJbnN0YW5jZSwgJ01pbWVNZXNzYWdlJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlzTUlNRShkYXRhOiB1bmtub3duKSA6IGRhdGEgaXMgTWltZU1lc3NhZ2Uge1xuICAgIHJldHVybiB0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZydcbiAgICAgIHx8ICh0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgJiYgZGF0YSBpbnN0YW5jZW9mIEJsb2IpXG4gICAgICB8fCB0aGlzLmF0dGFjaG1lbnRzSGFuZGxlci5pc0J1ZmZlcihkYXRhKVxuICAgICAgfHwgKHR5cGVvZiBSZWFkYWJsZVN0cmVhbSAhPT0gJ3VuZGVmaW5lZCcgJiYgZGF0YSBpbnN0YW5jZW9mIFJlYWRhYmxlU3RyZWFtKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNGb3JtRGF0YVBhY2thZ2Uob2JqOiB1bmtub3duKTogb2JqIGlzIE5vZGVGb3JtRGF0YSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICdvYmplY3QnXG4gICAgICAmJiBvYmogIT09IG51bGxcbiAgICAgICYmIHR5cGVvZiAob2JqIGFzIE5vZGVGb3JtRGF0YSkuZ2V0SGVhZGVycyA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIHByaXZhdGUgaXNNZXNzYWdlQXR0YWNobWVudCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIE1lc3NhZ2VBdHRhY2htZW50IHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5hdHRhY2htZW50c0hhbmRsZXIuaXNDdXN0b21GaWxlKHZhbHVlKVxuICAgICAgfHwgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJ1xuICAgICAgfHwgKHR5cGVvZiBGaWxlICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZSBpbnN0YW5jZW9mIEZpbGUpXG4gICAgICB8fCAodHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlIGluc3RhbmNlb2YgQmxvYilcbiAgICAgIHx8IHRoaXMuYXR0YWNobWVudHNIYW5kbGVyLmlzQnVmZmVyKHZhbHVlKVxuICAgICAgfHwgdGhpcy5hdHRhY2htZW50c0hhbmRsZXIuaXNTdHJlYW0odmFsdWUpXG4gICAgICB8fCAoXG4gICAgICAgIEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmV2ZXJ5KFxuICAgICAgICAgIChpdGVtKSA9PiB0aGlzLmF0dGFjaG1lbnRzSGFuZGxlci5pc0N1c3RvbUZpbGUoaXRlbSlcbiAgICAgICAgICAgIHx8ICh0eXBlb2YgRmlsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgaXRlbSBpbnN0YW5jZW9mIEZpbGUpXG4gICAgICAgICAgICB8fCAodHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlIGluc3RhbmNlb2YgQmxvYilcbiAgICAgICAgICAgIHx8IHRoaXMuYXR0YWNobWVudHNIYW5kbGVyLmlzQnVmZmVyKGl0ZW0pXG4gICAgICAgICAgICB8fCB0aGlzLmF0dGFjaG1lbnRzSGFuZGxlci5pc1N0cmVhbShpdGVtKVxuICAgICAgICApXG4gICAgICApXG5cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRGaWxlc1RvRkQoXG4gICAgcHJvcGVydHlOYW1lOiB0eXBlb2YgdGhpcy5maWxlS2V5c1tudW1iZXJdLFxuICAgIHZhbHVlOiBNZXNzYWdlQXR0YWNobWVudCxcbiAgICBmb3JtRGF0YUluc3RhbmNlOiBOb2RlRm9ybURhdGEgfCBGb3JtRGF0YVxuICApOiB2b2lkIHtcbiAgICBjb25zdCBhcHBlbmRGaWxlVG9GRCA9IChcbiAgICAgIG9yaWdpbmFsS2V5OiBzdHJpbmcsXG4gICAgICBhdHRhY2htZW50OiBDdXN0b21GaWxlIHwgRmlsZSB8IHN0cmluZ3wgQ3VzdG9tRmlsZURhdGEsXG4gICAgICBmb3JtRGF0YTogTm9kZUZvcm1EYXRhIHwgRm9ybURhdGFcbiAgICApOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IG9yaWdpbmFsS2V5ID09PSAnbXVsdGlwbGVWYWxpZGF0aW9uRmlsZScgPyAnZmlsZScgOiBvcmlnaW5hbEtleTtcbiAgICAgIGNvbnN0IG9iakRhdGEgPSB0aGlzLmF0dGFjaG1lbnRzSGFuZGxlci5jb252ZXJ0VG9GRGV4cGVjdGVkU2hhcGUoYXR0YWNobWVudCk7XG4gICAgICBjb25zdCBvcHRpb25zOiBBdHRhY2htZW50SW5mbyA9IHRoaXMuYXR0YWNobWVudHNIYW5kbGVyLmdldEF0dGFjaG1lbnRJbmZvKGF0dGFjaG1lbnQpO1xuXG4gICAgICBpZiAodGhpcy5pc0Zvcm1EYXRhUGFja2FnZShmb3JtRGF0YSkpIHtcbiAgICAgICAgY29uc3QgZmQgPSBmb3JtRGF0YSBhcyBOb2RlRm9ybURhdGE7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0eXBlb2Ygb2JqRGF0YSA9PT0gJ3N0cmluZycgPyBCdWZmZXIuZnJvbShvYmpEYXRhKSA6IG9iakRhdGE7XG4gICAgICAgIGZkLmFwcGVuZChrZXksIGRhdGEsIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgQmxvYiAhPT0gdW5kZWZpbmVkKSB7IC8vIGVpdGhlciBub2RlID4gMTggb3IgYnJvd3NlclxuICAgICAgICBjb25zdCBicm93c2VyRm9ybURhdGEgPSBmb3JtRGF0YUluc3RhbmNlIGFzIEZvcm1EYXRhOyAvLyBCcm93c2VyIGNvbXBsaWFudCBGb3JtRGF0YVxuXG4gICAgICAgIGlmICh0eXBlb2Ygb2JqRGF0YSA9PT0gJ3N0cmluZycgfHwgdGhpcy5hdHRhY2htZW50c0hhbmRsZXIuaXNCdWZmZXIob2JqRGF0YSkpIHtcbiAgICAgICAgICBjb25zdCBibG9iSW5zdGFuY2UgPSBuZXcgQmxvYihbb2JqRGF0YV0pO1xuICAgICAgICAgIGJyb3dzZXJGb3JtRGF0YS5hcHBlbmQoa2V5LCBibG9iSW5zdGFuY2UsIG9wdGlvbnMuZmlsZW5hbWUpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvYmpEYXRhIGluc3RhbmNlb2YgQmxvYikge1xuICAgICAgICAgIGJyb3dzZXJGb3JtRGF0YS5hcHBlbmQoa2V5LCBvYmpEYXRhLCBvcHRpb25zLmZpbGVuYW1lKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hdHRhY2htZW50c0hhbmRsZXIuaXNTdHJlYW0ob2JqRGF0YSkpIHtcbiAgICAgICAgICBjb25zdCBibG9iID0gdGhpcy5hdHRhY2htZW50c0hhbmRsZXIuZ2V0QmxvYkZyb21TdHJlYW0oXG4gICAgICAgICAgICBvYmpEYXRhIGFzIHVua25vd24gYXMgUmVhZGFibGUsXG4gICAgICAgICAgICBvcHRpb25zLmtub3duTGVuZ3RoIGFzIG51bWJlclxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJvd3NlckZvcm1EYXRhLnNldChrZXksIGJsb2IgYXMgdW5rbm93biBhcyBGaWxlLCBvcHRpb25zLmZpbGVuYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgYXBwZW5kRmlsZVRvRkQocHJvcGVydHlOYW1lLCBpdGVtLCBmb3JtRGF0YUluc3RhbmNlKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcHBlbmRGaWxlVG9GRChwcm9wZXJ0eU5hbWUsIHZhbHVlLCBmb3JtRGF0YUluc3RhbmNlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkZENvbW1vblByb3BlcnR5VG9GRChcbiAgICBrZXk6IHN0cmluZyxcbiAgICB2YWx1ZTogRm9ybURhdGFJbnB1dFZhbHVlLFxuICAgIGZvcm1EYXRhQWNjOiBOb2RlRm9ybURhdGEgfCBGb3JtRGF0YVxuICApOiB2b2lkIHtcbiAgICBjb25zdCBhZGRWYWx1ZUJhc2VkT25GRCA9IChmZEtleTogc3RyaW5nLCBmZFZhbHVlOiBGb3JtRGF0YUlucHV0VmFsdWUpOiB2b2lkID0+IHtcbiAgICAgIGlmICh0aGlzLmlzRm9ybURhdGFQYWNrYWdlKGZvcm1EYXRhQWNjKSkge1xuICAgICAgICBpZiAodHlwZW9mIGZkVmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSByZWNlaXZlZCB2YWx1ZSBpcyBhbiBvYmplY3QuIFxcbidcbiAgICAgICAgICArICdcIkpTT04uU3RyaW5naWZ5XCIgd2lsbCBiZSB1c2VkIHRvIGF2b2lkIFR5cGVFcnJvciBcXG4nXG4gICAgICAgICAgKyAnVG8gcmVtb3ZlIHRoaXMgd2FybmluZzogXFxuJ1xuICAgICAgICAgICsgJ0NvbnNpZGVyIHN3aXRjaGluZyB0byBidWlsdC1pbiBGb3JtRGF0YSBvciBjb252ZXJ0aW5nIHRoZSB2YWx1ZSBvbiB5b3VyIG93bi5cXG4nKTtcbiAgICAgICAgICByZXR1cm4gZm9ybURhdGFBY2MuYXBwZW5kKGZkS2V5LCBKU09OLnN0cmluZ2lmeShmZFZhbHVlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZvcm1EYXRhQWNjLmFwcGVuZChmZEtleSwgZmRWYWx1ZSk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGZkVmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBmb3JtRGF0YUFjYy5hcHBlbmQoZmRLZXksIGZkVmFsdWUpO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBCbG9iICE9PSB1bmRlZmluZWQgJiYgZmRWYWx1ZSBpbnN0YW5jZW9mIEJsb2IpIHtcbiAgICAgICAgcmV0dXJuIGZvcm1EYXRhQWNjLmFwcGVuZChmZEtleSwgZmRWYWx1ZSk7XG4gICAgICB9XG4gICAgICB0aHJvdyBBUElFcnJvci5nZXRVc2VyRGF0YUVycm9yKFxuICAgICAgICAnVW5rbm93biB2YWx1ZSB0eXBlIGZvciBGb3JtIERhdGEuIFN0cmluZyBvciBCbG9iIGV4cGVjdGVkJyxcbiAgICAgICAgJ0Jyb3dzZXIgY29tcGxpYW50IEZvcm1EYXRhIGFsbG93cyBvbmx5IHN0cmluZyBvciBCbG9iIHZhbHVlcyBmb3IgcHJvcGVydGllcyB0aGF0IGFyZSBub3QgYXR0YWNobWVudHMuJ1xuICAgICAgKTtcbiAgICB9O1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtOiBGb3JtRGF0YUlucHV0VmFsdWUpIHtcbiAgICAgICAgYWRkVmFsdWVCYXNlZE9uRkQoa2V5LCBpdGVtKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgYWRkVmFsdWVCYXNlZE9uRkQoa2V5LCB2YWx1ZSk7XG4gICAgfVxuICB9XG59XG5leHBvcnQgZGVmYXVsdCBGb3JtRGF0YUJ1aWxkZXI7XG4iLCJpbXBvcnQgdXJsam9pbiBmcm9tICd1cmwtam9pbic7XG5pbXBvcnQgQVBJRXJyb3IgZnJvbSAnLi9FcnJvcic7XG5cbmltcG9ydCB7XG4gIFBhZ2VzTGlzdEFjY3VtdWxhdG9yLFxuICBQYXJzZWRQYWdlLFxuICBQYXJzZWRQYWdlc0xpc3QsXG4gIFF1ZXJ5V2l0aFBhZ2UsXG4gIFJlc3BvbnNlV2l0aFBhZ2luZyxcbiAgVXBkYXRlZFVybEFuZFF1ZXJ5LFxuICBBUElFcnJvck9wdGlvbnNcbn0gZnJvbSAnLi4vLi4vVHlwZXMvQ29tbW9uJztcbmltcG9ydCB7XG4gIElCb3VuY2UsXG4gIElDb21wbGFpbnQsXG4gIElVbnN1YnNjcmliZSxcbiAgSVdoaXRlTGlzdFxufSBmcm9tICcuLi8uLi9JbnRlcmZhY2VzL1N1cHByZXNzaW9ucyc7XG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuL1JlcXVlc3QnO1xuaW1wb3J0IHtcbiAgU3VwcHJlc3Npb25EYXRhVHlwZVxufSBmcm9tICcuLi8uLi9UeXBlcy9TdXBwcmVzc2lvbnMnO1xuXG5leHBvcnQgZGVmYXVsdCBhYnN0cmFjdCBjbGFzcyBOYXZpZ2F0aW9uVGhydVBhZ2VzIDxUPiB7XG4gIHJlcXVlc3Q/OiBSZXF1ZXN0O1xuICBjb25zdHJ1Y3RvcihyZXF1ZXN0PzogUmVxdWVzdCkge1xuICAgIGlmIChyZXF1ZXN0KSB7XG4gICAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBwYXJzZVBhZ2UoXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwYWdlVXJsOiBzdHJpbmcsXG4gICAgdXJsU2VwYXJhdG9yOiBzdHJpbmcsXG4gICAgaXRlcmF0b3JOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgKSA6IFBhcnNlZFBhZ2Uge1xuICAgIGNvbnN0IHBhcnNlZFVybCA9IG5ldyBVUkwocGFnZVVybCk7XG4gICAgY29uc3QgeyBzZWFyY2hQYXJhbXMgfSA9IHBhcnNlZFVybDtcblxuICAgIGNvbnN0IHBhZ2VWYWx1ZSA9IHBhZ2VVcmwgJiYgdHlwZW9mIHBhZ2VVcmwgPT09ICdzdHJpbmcnID8gcGFnZVVybC5zcGxpdCh1cmxTZXBhcmF0b3IpLnBvcCgpIHx8ICcnIDogJyc7XG4gICAgbGV0IGl0ZXJhdG9yUG9zaXRpb24gPSBudWxsO1xuICAgIGlmIChpdGVyYXRvck5hbWUpIHtcbiAgICAgIGl0ZXJhdG9yUG9zaXRpb24gPSBzZWFyY2hQYXJhbXMuaGFzKGl0ZXJhdG9yTmFtZSlcbiAgICAgICAgPyBzZWFyY2hQYXJhbXMuZ2V0KGl0ZXJhdG9yTmFtZSlcbiAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBpZCxcbiAgICAgIHBhZ2U6IHVybFNlcGFyYXRvciA9PT0gJz8nID8gYD8ke3BhZ2VWYWx1ZX1gIDogcGFnZVZhbHVlLFxuICAgICAgaXRlcmF0b3JQb3NpdGlvbixcbiAgICAgIHVybDogcGFnZVVybFxuICAgIH0gYXMgUGFyc2VkUGFnZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwYXJzZVBhZ2VMaW5rcyhcbiAgICByZXNwb25zZTogUmVzcG9uc2VXaXRoUGFnaW5nLFxuICAgIHVybFNlcGFyYXRvcjogc3RyaW5nLFxuICAgIGl0ZXJhdG9yTmFtZT86IHN0cmluZ1xuICApOiBQYXJzZWRQYWdlc0xpc3Qge1xuICAgIGNvbnN0IHBhZ2VzID0gT2JqZWN0LmVudHJpZXMocmVzcG9uc2UuYm9keS5wYWdpbmcpO1xuICAgIHJldHVybiBwYWdlcy5yZWR1Y2UoXG4gICAgICAoYWNjOiBQYWdlc0xpc3RBY2N1bXVsYXRvciwgW2lkLCBwYWdlVXJsXTogWyBpZDogc3RyaW5nLCBwYWdlVXJsOiBzdHJpbmddKSA9PiB7XG4gICAgICAgIGFjY1tpZF0gPSB0aGlzLnBhcnNlUGFnZShpZCwgcGFnZVVybCwgdXJsU2VwYXJhdG9yLCBpdGVyYXRvck5hbWUpO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwge31cbiAgICApIGFzIHVua25vd24gYXMgUGFyc2VkUGFnZXNMaXN0O1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVVcmxBbmRRdWVyeShjbGllbnRVcmw6IHN0cmluZywgcXVlcnk/OiBRdWVyeVdpdGhQYWdlKTogVXBkYXRlZFVybEFuZFF1ZXJ5IHtcbiAgICBsZXQgdXJsID0gY2xpZW50VXJsO1xuICAgIGNvbnN0IHF1ZXJ5Q29weSA9IHsgLi4ucXVlcnkgfTtcbiAgICBpZiAocXVlcnlDb3B5LnBhZ2UpIHtcbiAgICAgIHVybCA9IHVybGpvaW4oY2xpZW50VXJsLCBxdWVyeUNvcHkucGFnZSk7XG4gICAgICBkZWxldGUgcXVlcnlDb3B5LnBhZ2U7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICB1cmwsXG4gICAgICB1cGRhdGVkUXVlcnk6IHF1ZXJ5Q29weVxuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgcmVxdWVzdExpc3RXaXRoUGFnZXMoY2xpZW50VXJsOnN0cmluZywgcXVlcnk/OiBRdWVyeVdpdGhQYWdlLCBNb2RlbD86IHtcbiAgICBuZXcoZGF0YTogU3VwcHJlc3Npb25EYXRhVHlwZSk6XG4gICAgSUJvdW5jZSB8IElDb21wbGFpbnQgfCBJVW5zdWJzY3JpYmUgfCBJV2hpdGVMaXN0XG4gIH0pOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCB7IHVybCwgdXBkYXRlZFF1ZXJ5IH0gPSB0aGlzLnVwZGF0ZVVybEFuZFF1ZXJ5KGNsaWVudFVybCwgcXVlcnkpO1xuICAgIGlmICh0aGlzLnJlcXVlc3QpIHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlOiBSZXNwb25zZVdpdGhQYWdpbmcgPSBhd2FpdCB0aGlzLnJlcXVlc3QuZ2V0KHVybCwgdXBkYXRlZFF1ZXJ5KTtcbiAgICAgIC8vIE1vZGVsIGhlcmUgaXMgdXN1YWxseSB1bmRlZmluZWQgZXhjZXB0IGZvciBTdXBwcmVzc2lvbiBDbGllbnRcbiAgICAgIHJldHVybiB0aGlzLnBhcnNlTGlzdChyZXNwb25zZSwgTW9kZWwpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgQVBJRXJyb3Ioe1xuICAgICAgc3RhdHVzOiA1MDAsXG4gICAgICBzdGF0dXNUZXh0OiAnUmVxdWVzdCBwcm9wZXJ0eSBpcyBlbXB0eScsXG4gICAgICBib2R5OiB7IG1lc3NhZ2U6ICcnIH1cbiAgICB9IGFzIEFQSUVycm9yT3B0aW9ucyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgcGFyc2VMaXN0KHJlc3BvbnNlOiBSZXNwb25zZVdpdGhQYWdpbmcsIE1vZGVsPzoge1xuICAgIG5ldyhkYXRhOiBTdXBwcmVzc2lvbkRhdGFUeXBlKTpcbiAgICBJQm91bmNlIHwgSUNvbXBsYWludCB8IElVbnN1YnNjcmliZSB8IElXaGl0ZUxpc3RcbiAgfSk6IFQ7XG59XG4iLCJpbXBvcnQgKiBhcyBiYXNlNjQgZnJvbSAnYmFzZS02NCc7XG5pbXBvcnQgdXJsam9pbiBmcm9tICd1cmwtam9pbic7XG5pbXBvcnQgYXhpb3MsIHtcbiAgQXhpb3NFcnJvcixcbiAgQXhpb3NSZXNwb25zZSxcbiAgQXhpb3NIZWFkZXJzLFxuICBSYXdBeGlvc1JlcXVlc3RIZWFkZXJzLFxuICBBeGlvc1Byb3h5Q29uZmlnLFxufSBmcm9tICdheGlvcyc7XG5pbXBvcnQgKiBhcyBOb2RlRm9ybURhdGEgZnJvbSAnZm9ybS1kYXRhJztcbmltcG9ydCBBUElFcnJvciBmcm9tICcuL0Vycm9yJztcbmltcG9ydCB7XG4gIE9uQ2FsbFJlcXVlc3RPcHRpb25zLFxuICBSZXF1ZXN0T3B0aW9ucyxcbiAgQVBJRXJyb3JPcHRpb25zLFxuICBJbnB1dEZvcm1EYXRhLFxuICBBUElSZXNwb25zZSxcbiAgSXBQb29sRGVsZXRlRGF0YSxcbiAgRm9ybURhdGFJbnB1dFxufSBmcm9tICcuLi8uLi9UeXBlcyc7XG5cbmltcG9ydCBGb3JtRGF0YUJ1aWxkZXIgZnJvbSAnLi9Gb3JtRGF0YUJ1aWxkZXInO1xuaW1wb3J0IFN1YmFjY291bnRzQ2xpZW50IGZyb20gJy4uL1N1YmFjY291bnRzJztcblxuY2xhc3MgUmVxdWVzdCB7XG4gIHByaXZhdGUgdXNlcm5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSBrZXk6IHN0cmluZztcbiAgcHJpdmF0ZSB1cmw6IHN0cmluZztcbiAgcHJpdmF0ZSB0aW1lb3V0OiBudW1iZXI7XG4gIHByaXZhdGUgaGVhZGVyczogQXhpb3NIZWFkZXJzO1xuICBwcml2YXRlIGZvcm1EYXRhQnVpbGRlcjogRm9ybURhdGFCdWlsZGVyO1xuICBwcml2YXRlIG1heEJvZHlMZW5ndGg6IG51bWJlcjtcbiAgcHJpdmF0ZSBwcm94eTogQXhpb3NQcm94eUNvbmZpZyB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBSZXF1ZXN0T3B0aW9ucywgZm9ybURhdGE6IElucHV0Rm9ybURhdGEpIHtcbiAgICB0aGlzLnVzZXJuYW1lID0gb3B0aW9ucy51c2VybmFtZTtcbiAgICB0aGlzLmtleSA9IG9wdGlvbnMua2V5O1xuICAgIHRoaXMudXJsID0gb3B0aW9ucy51cmwgYXMgc3RyaW5nO1xuICAgIHRoaXMudGltZW91dCA9IG9wdGlvbnMudGltZW91dDtcbiAgICB0aGlzLmhlYWRlcnMgPSB0aGlzLm1ha2VIZWFkZXJzRnJvbU9iamVjdChvcHRpb25zLmhlYWRlcnMpO1xuICAgIHRoaXMuZm9ybURhdGFCdWlsZGVyID0gbmV3IEZvcm1EYXRhQnVpbGRlcihmb3JtRGF0YSk7XG4gICAgdGhpcy5tYXhCb2R5TGVuZ3RoID0gNTI0Mjg4MDA7IC8vIDUwIE1CXG4gICAgdGhpcy5wcm94eSA9IG9wdGlvbnM/LnByb3h5O1xuICB9XG5cbiAgYXN5bmMgcmVxdWVzdChcbiAgICBtZXRob2Q6IHN0cmluZyxcbiAgICB1cmw6IHN0cmluZyxcbiAgICBvbkNhbGxPcHRpb25zPzogUmVjb3JkPHN0cmluZywgdW5rbm93biB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID5cbiAgKTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIGNvbnN0IG9wdGlvbnM6IE9uQ2FsbFJlcXVlc3RPcHRpb25zID0geyAuLi5vbkNhbGxPcHRpb25zIH07XG4gICAgZGVsZXRlIG9wdGlvbnM/LmhlYWRlcnM7XG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnMgPSB0aGlzLmpvaW5BbmRUcmFuc2Zvcm1IZWFkZXJzKG9uQ2FsbE9wdGlvbnMpO1xuICAgIGNvbnN0IHBhcmFtcyA9IHsgLi4ub3B0aW9ucyB9O1xuXG4gICAgaWYgKG9wdGlvbnM/LnF1ZXJ5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9wdGlvbnM/LnF1ZXJ5KS5sZW5ndGggPiAwKSB7XG4gICAgICBwYXJhbXMucGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhvcHRpb25zLnF1ZXJ5KTtcbiAgICAgIGRlbGV0ZSBwYXJhbXMucXVlcnk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnM/LmJvZHkpIHtcbiAgICAgIGNvbnN0IGJvZHkgPSBvcHRpb25zPy5ib2R5O1xuICAgICAgcGFyYW1zLmRhdGEgPSBib2R5O1xuICAgICAgZGVsZXRlIHBhcmFtcy5ib2R5O1xuICAgIH1cbiAgICBsZXQgcmVzcG9uc2U6IEF4aW9zUmVzcG9uc2U7XG4gICAgY29uc3QgdXJsVmFsdWUgPSB1cmxqb2luKHRoaXMudXJsLCB1cmwpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgYXhpb3MucmVxdWVzdCh7XG4gICAgICAgIG1ldGhvZDogbWV0aG9kLnRvTG9jYWxlVXBwZXJDYXNlKCksXG4gICAgICAgIHRpbWVvdXQ6IHRoaXMudGltZW91dCxcbiAgICAgICAgdXJsOiB1cmxWYWx1ZSxcbiAgICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgbWF4Qm9keUxlbmd0aDogdGhpcy5tYXhCb2R5TGVuZ3RoLFxuICAgICAgICBwcm94eTogdGhpcy5wcm94eSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuICAgICAgY29uc3QgZXJyb3JSZXNwb25zZSA9IGVyciBhcyBBeGlvc0Vycm9yO1xuXG4gICAgICB0aHJvdyBuZXcgQVBJRXJyb3Ioe1xuICAgICAgICBzdGF0dXM6IGVycm9yUmVzcG9uc2U/LnJlc3BvbnNlPy5zdGF0dXMgfHwgNDAwLFxuICAgICAgICBzdGF0dXNUZXh0OiBlcnJvclJlc3BvbnNlPy5yZXNwb25zZT8uc3RhdHVzVGV4dCB8fCBlcnJvclJlc3BvbnNlLmNvZGUsXG4gICAgICAgIGJvZHk6IGVycm9yUmVzcG9uc2U/LnJlc3BvbnNlPy5kYXRhIHx8IGVycm9yUmVzcG9uc2UubWVzc2FnZVxuICAgICAgfSBhcyBBUElFcnJvck9wdGlvbnMpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZ2V0UmVzcG9uc2VCb2R5KHJlc3BvbnNlKTtcbiAgICByZXR1cm4gcmVzIGFzIEFQSVJlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRSZXNwb25zZUJvZHkocmVzcG9uc2U6IEF4aW9zUmVzcG9uc2UpOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgY29uc3QgcmVzID0ge1xuICAgICAgYm9keToge30sXG4gICAgICBzdGF0dXM6IHJlc3BvbnNlPy5zdGF0dXNcbiAgICB9IGFzIEFQSVJlc3BvbnNlO1xuXG4gICAgaWYgKHR5cGVvZiByZXNwb25zZS5kYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKHJlc3BvbnNlLmRhdGEgPT09ICdNYWlsZ3VuIE1hZ25pZmljZW50IEFQSScpIHtcbiAgICAgICAgdGhyb3cgbmV3IEFQSUVycm9yKHtcbiAgICAgICAgICBzdGF0dXM6IDQwMCxcbiAgICAgICAgICBzdGF0dXNUZXh0OiAnSW5jb3JyZWN0IHVybCcsXG4gICAgICAgICAgYm9keTogcmVzcG9uc2UuZGF0YVxuICAgICAgICB9IGFzIEFQSUVycm9yT3B0aW9ucyk7XG4gICAgICB9XG4gICAgICByZXMuYm9keSA9IHtcbiAgICAgICAgbWVzc2FnZTogcmVzcG9uc2UuZGF0YVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzLmJvZHkgPSByZXNwb25zZS5kYXRhO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgcHJpdmF0ZSBqb2luQW5kVHJhbnNmb3JtSGVhZGVycyhcbiAgICBvbkNhbGxPcHRpb25zPzogT25DYWxsUmVxdWVzdE9wdGlvbnNcbiAgKTogQXhpb3NIZWFkZXJzIHtcbiAgICBjb25zdCByZXF1ZXN0SGVhZGVycyA9IG5ldyBBeGlvc0hlYWRlcnMoKTtcblxuICAgIGNvbnN0IGJhc2ljID0gYmFzZTY0LmVuY29kZShgJHt0aGlzLnVzZXJuYW1lfToke3RoaXMua2V5fWApO1xuICAgIHJlcXVlc3RIZWFkZXJzLnNldEF1dGhvcml6YXRpb24oYEJhc2ljICR7YmFzaWN9YCk7XG4gICAgcmVxdWVzdEhlYWRlcnMuc2V0KHRoaXMuaGVhZGVycyk7XG5cbiAgICBjb25zdCByZWNlaXZlZE9uQ2FsbEhlYWRlcnMgPSBvbkNhbGxPcHRpb25zICYmIG9uQ2FsbE9wdGlvbnMuaGVhZGVycztcbiAgICBjb25zdCBvbkNhbGxIZWFkZXJzID0gdGhpcy5tYWtlSGVhZGVyc0Zyb21PYmplY3QocmVjZWl2ZWRPbkNhbGxIZWFkZXJzKTtcbiAgICByZXF1ZXN0SGVhZGVycy5zZXQob25DYWxsSGVhZGVycyk7XG4gICAgcmV0dXJuIHJlcXVlc3RIZWFkZXJzO1xuICB9XG5cbiAgcHJpdmF0ZSBtYWtlSGVhZGVyc0Zyb21PYmplY3QoXG4gICAgaGVhZGVyc09iamVjdDogUmF3QXhpb3NSZXF1ZXN0SGVhZGVycyA9IHt9XG4gICk6IEF4aW9zSGVhZGVycyB7XG4gICAgbGV0IHJlcXVlc3RIZWFkZXJzID0gbmV3IEF4aW9zSGVhZGVycygpO1xuICAgIHJlcXVlc3RIZWFkZXJzID0gT2JqZWN0LmVudHJpZXMoaGVhZGVyc09iamVjdCkucmVkdWNlKFxuICAgICAgKGhlYWRlcnNBY2N1bXVsYXRvcjogQXhpb3NIZWFkZXJzLCBjdXJyZW50UGFpcikgPT4ge1xuICAgICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBjdXJyZW50UGFpcjtcbiAgICAgICAgaGVhZGVyc0FjY3VtdWxhdG9yLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGhlYWRlcnNBY2N1bXVsYXRvcjtcbiAgICAgIH0sIHJlcXVlc3RIZWFkZXJzXG4gICAgKTtcbiAgICByZXR1cm4gcmVxdWVzdEhlYWRlcnM7XG4gIH1cblxuICBzZXRTdWJhY2NvdW50SGVhZGVyKHN1YmFjY291bnRJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMubWFrZUhlYWRlcnNGcm9tT2JqZWN0KHtcbiAgICAgIC4uLnRoaXMuaGVhZGVycyxcbiAgICAgIFtTdWJhY2NvdW50c0NsaWVudC5TVUJBQ0NPVU5UX0hFQURFUl06IHN1YmFjY291bnRJZFxuICAgIH0pO1xuICAgIHRoaXMuaGVhZGVycy5zZXQoaGVhZGVycyk7XG4gIH1cblxuICByZXNldFN1YmFjY291bnRIZWFkZXIoKTogdm9pZCB7XG4gICAgdGhpcy5oZWFkZXJzLmRlbGV0ZShTdWJhY2NvdW50c0NsaWVudC5TVUJBQ0NPVU5UX0hFQURFUik7XG4gIH1cblxuICBxdWVyeShcbiAgICBtZXRob2Q6IHN0cmluZyxcbiAgICB1cmw6IHN0cmluZyxcbiAgICBxdWVyeT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgQXJyYXk8QXJyYXk8c3RyaW5nPj4sXG4gICAgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1ldGhvZCwgdXJsLCB7IHF1ZXJ5LCAuLi5vcHRpb25zIH0pO1xuICB9XG5cbiAgY29tbWFuZChcbiAgICBtZXRob2Q6IHN0cmluZyxcbiAgICB1cmw6IHN0cmluZyxcbiAgICBkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdIHwgc3RyaW5nIHwgTm9kZUZvcm1EYXRhIHwgRm9ybURhdGEsXG4gICAgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgIGFkZERlZmF1bHRIZWFkZXJzID0gdHJ1ZVxuICApOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgbGV0IGhlYWRlcnMgPSB7fTtcbiAgICBpZiAoYWRkRGVmYXVsdEhlYWRlcnMpIHtcbiAgICAgIGhlYWRlcnMgPSB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyB9O1xuICAgIH1cbiAgICBjb25zdCByZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICAgIC4uLmhlYWRlcnMsXG4gICAgICBib2R5OiBkYXRhLFxuICAgICAgLi4ub3B0aW9uc1xuICAgIH07XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdChcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHJlcXVlc3RPcHRpb25zXG4gICAgKTtcbiAgfVxuXG4gIGdldChcbiAgICB1cmw6IHN0cmluZyxcbiAgICBxdWVyeT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgQXJyYXk8QXJyYXk8c3RyaW5nPj4sXG4gICAgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeSgnZ2V0JywgdXJsLCBxdWVyeSwgb3B0aW9ucyk7XG4gIH1cblxuICBwb3N0KFxuICAgIHVybDogc3RyaW5nLFxuICAgIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHN0cmluZyxcbiAgICBvcHRpb25zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgKTogUHJvbWlzZTxBUElSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmNvbW1hbmQoJ3Bvc3QnLCB1cmwsIGRhdGEsIG9wdGlvbnMpO1xuICB9XG5cbiAgcG9zdFdpdGhGRChcbiAgICB1cmw6IHN0cmluZyxcbiAgICBkYXRhOiBGb3JtRGF0YUlucHV0XG4gICk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICBjb25zdCBmb3JtRGF0YSA9IHRoaXMuZm9ybURhdGFCdWlsZGVyLmNyZWF0ZUZvcm1EYXRhKGRhdGEpO1xuICAgIHJldHVybiB0aGlzLmNvbW1hbmQoJ3Bvc3QnLCB1cmwsIGZvcm1EYXRhLCB7XG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScgfVxuICAgIH0sIGZhbHNlKTtcbiAgfVxuXG4gIHB1dFdpdGhGRCh1cmw6IHN0cmluZywgZGF0YTogRm9ybURhdGFJbnB1dCk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICBjb25zdCBmb3JtRGF0YSA9IHRoaXMuZm9ybURhdGFCdWlsZGVyLmNyZWF0ZUZvcm1EYXRhKGRhdGEpO1xuICAgIHJldHVybiB0aGlzLmNvbW1hbmQoJ3B1dCcsIHVybCwgZm9ybURhdGEsIHtcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJyB9XG4gICAgfSwgZmFsc2UpO1xuICB9XG5cbiAgcGF0Y2hXaXRoRkQodXJsOiBzdHJpbmcsIGRhdGE6IEZvcm1EYXRhSW5wdXQpOiBQcm9taXNlPEFQSVJlc3BvbnNlPiB7XG4gICAgY29uc3QgZm9ybURhdGEgPSB0aGlzLmZvcm1EYXRhQnVpbGRlci5jcmVhdGVGb3JtRGF0YShkYXRhKTtcbiAgICByZXR1cm4gdGhpcy5jb21tYW5kKCdwYXRjaCcsIHVybCwgZm9ybURhdGEsIHtcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJyB9XG4gICAgfSwgZmFsc2UpO1xuICB9XG5cbiAgcHV0KHVybDogc3RyaW5nLCBkYXRhPzogRm9ybURhdGFJbnB1dCB8IHN0cmluZywgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KVxuICA6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5jb21tYW5kKCdwdXQnLCB1cmwsIGRhdGEsIG9wdGlvbnMpO1xuICB9XG5cbiAgZGVsZXRlKHVybDogc3RyaW5nLCBkYXRhPzogSXBQb29sRGVsZXRlRGF0YSk6IFByb21pc2U8QVBJUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5jb21tYW5kKCdkZWxldGUnLCB1cmwsIGRhdGEpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJlcXVlc3Q7XG4iLCJleHBvcnQgZW51bSBSZXNvbHV0aW9uIHtcbiAgICBIT1VSID0gJ2hvdXInLFxuICAgIERBWSA9ICdkYXknLFxuICAgIE1PTlRIID0gJ21vbnRoJ1xufVxuXG5leHBvcnQgZW51bSBTdXBwcmVzc2lvbk1vZGVscyB7XG4gICAgQk9VTkNFUyA9ICdib3VuY2VzJyxcbiAgICBDT01QTEFJTlRTID0gJ2NvbXBsYWludHMnLFxuICAgIFVOU1VCU0NSSUJFUyA9ICd1bnN1YnNjcmliZXMnLFxuICAgIFdISVRFTElTVFMgPSAnd2hpdGVsaXN0cydcbn1cblxuZXhwb3J0IGVudW0gV2ViaG9va3NJZHMge1xuICAgIENMSUNLRUQgPSAnY2xpY2tlZCcsXG4gICAgQ09NUExBSU5FRCA9ICdjb21wbGFpbmVkJyxcbiAgICBERUxJVkVSRUQgPSAnZGVsaXZlcmVkJyxcbiAgICBPUEVORUQgPSAnb3BlbmVkJyxcbiAgICBQRVJNQU5FTlRfRkFJTCA9ICdwZXJtYW5lbnRfZmFpbCcsXG4gICAgVEVNUE9SQVJZX0ZBSUwgPSAndGVtcG9yYXJ5X2ZhaWwnLFxuICAgIFVOU1VCU0NSSUJFRCA9ICd1bnN1YnNjcmliZScsXG59XG5cbmV4cG9ydCBlbnVtIFllc05vIHtcbiAgICBZRVMgPSAneWVzJyxcbiAgICBOTyA9ICdubydcbn1cbiIsImV4cG9ydCAqIGZyb20gJy4vTG9nZ2VyJztcbiIsImV4cG9ydCAqIGZyb20gJy4vRG9tYWluQ3JlZGVudGlhbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9Eb21haW5UYWdzJztcbmV4cG9ydCAqIGZyb20gJy4vRG9tYWluVGVtcGxhdGVzJztcbmV4cG9ydCAqIGZyb20gJy4vRG9tYWluc0NsaWVudCc7XG4iLCJleHBvcnQgKiBmcm9tICcuL0lFdmVudENsaWVudCc7XG4iLCJleHBvcnQgKiBmcm9tICcuL0lJUFBvb2xzQ2xpZW50JztcbiIsImV4cG9ydCAqIGZyb20gJy4vSUlQc0NsaWVudCc7XG4iLCJleHBvcnQgKiBmcm9tICcuL0luYm94UGxhY2VtZW50c0NsaWVudCc7XG5leHBvcnQgKiBmcm9tICcuL0F0dHJpYnV0ZXNDbGllbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9GaWx0ZXJzQ2xpZW50JztcbmV4cG9ydCAqIGZyb20gJy4vU2VlZHNMaXN0cy9TZWVkc0xpc3RzQ2xpZW50JztcbmV4cG9ydCAqIGZyb20gJy4vUmVzdWx0cy9JbmJveFBsYWNlbWVudHNSZXN1bHRzJztcbmV4cG9ydCAqIGZyb20gJy4vUmVzdWx0cy9JbmJveFBsYWNlbWVudHNSZXN1bHRzU2hhcmluZyc7XG4iLCJleHBvcnQgKiBmcm9tICcuL0lNYWlsZ3VuQ2xpZW50JztcbiIsImV4cG9ydCAqIGZyb20gJy4vTWFpbGluZ0xpc3RNZW1iZXJzJztcbmV4cG9ydCAqIGZyb20gJy4vTWFpbGluZ0xpc3RzQ2xpZW50JztcbiIsImV4cG9ydCAqIGZyb20gJy4vSU1lc3NhZ2VzQ2xpZW50JztcbiIsImV4cG9ydCAqIGZyb20gJy4vSVJvdXRlc0NsaWVudCc7XG4iLCJleHBvcnQgKiBmcm9tICcuL1N0YXRzQ2xpZW50JztcbmV4cG9ydCAqIGZyb20gJy4vU3RhdHNDb250YWluZXInO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9JU3ViYWNjb3VudHNDbGllbnQnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9Cb3VuY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9Db21wbGFpbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9VbnN1YnNjcmliZSc7XG5leHBvcnQgKiBmcm9tICcuL1doaXRlTGlzdCc7XG5leHBvcnQgKiBmcm9tICcuL0lTdXBwcmVzc2lvbnNDbGllbnQnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9NdWx0aXBsZVZhbGlkYXRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9WYWxpZGF0aW9uJztcbiIsImV4cG9ydCAqIGZyb20gJy4vSVdlYkhvb2tzQ2xpZW50JztcbiIsImV4cG9ydCAqIGZyb20gJy4vQ29tbW9uJztcbmV4cG9ydCAqIGZyb20gJy4vRG9tYWlucyc7XG5leHBvcnQgKiBmcm9tICcuL01haWxndW5DbGllbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9NYWlsaW5nTGlzdHMnO1xuZXhwb3J0ICogZnJvbSAnLi9TdGF0cyc7XG5leHBvcnQgKiBmcm9tICcuL1N1cHByZXNzaW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL1ZhbGlkYXRpb25zJztcbmV4cG9ydCAqIGZyb20gJy4vRXZlbnRDbGllbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9XZWJob29rcyc7XG5leHBvcnQgKiBmcm9tICcuL01lc3NhZ2VzJztcbmV4cG9ydCAqIGZyb20gJy4vUm91dGVzJztcbmV4cG9ydCAqIGZyb20gJy4vSVBzJztcbmV4cG9ydCAqIGZyb20gJy4vSVBQb29scyc7XG5leHBvcnQgKiBmcm9tICcuL1N1YmFjY291bnRzJztcbmV4cG9ydCAqIGZyb20gJy4vSW5ib3hQbGFjZW1lbnRzJztcbiIsImV4cG9ydCAqIGZyb20gJy4vRXJyb3InO1xuZXhwb3J0ICogZnJvbSAnLi9BcGlSZXNwb25zZSc7XG5leHBvcnQgKiBmcm9tICcuL0Zvcm1EYXRhJztcbmV4cG9ydCAqIGZyb20gJy4vTmF2aWdhdGlvblRocnVQYWdlcyc7XG5leHBvcnQgKiBmcm9tICcuL1JlcXVlc3RPcHRpb25zJztcbiIsImV4cG9ydCAqIGZyb20gJy4vRG9tYWluQ3JlZGVudGlhbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9Eb21haW5zJztcbmV4cG9ydCAqIGZyb20gJy4vRG9tYWluVGFncyc7XG5leHBvcnQgKiBmcm9tICcuL0RvbWFpblRlbXBsYXRlcyc7XG5leHBvcnQgKiBmcm9tICcuL0RvbWFpblRyYWNraW5nJztcbiIsImV4cG9ydCAqIGZyb20gJy4vRXZlbnRzJztcbiIsImV4cG9ydCAqIGZyb20gJy4vSXBQb29scyc7XG4iLCJleHBvcnQgKiBmcm9tICcuL0lQcyc7XG4iLCJleHBvcnQgKiBmcm9tICcuL01haWxndW5DbGllbnRPcHRpb25zJztcbiIsImV4cG9ydCAqIGZyb20gJy4vTWFpbGluZ0xpc3RNZW1iZXJzJztcbmV4cG9ydCAqIGZyb20gJy4vTWFpbGluZ0xpc3RzJztcbiIsImV4cG9ydCAqIGZyb20gJy4vTWVzc2FnZXMnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9Sb3V0ZXMnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9TdGF0cyc7XG4iLCJleHBvcnQgKiBmcm9tICcuL1N1YmFjY291bnRzJztcbiIsImV4cG9ydCAqIGZyb20gJy4vQm91bmNlJztcbmV4cG9ydCAqIGZyb20gJy4vQ29tcGxhaW50JztcbmV4cG9ydCAqIGZyb20gJy4vU3VwcHJlc3Npb25zJztcbmV4cG9ydCAqIGZyb20gJy4vVW5zdWJzY3JpYmUnO1xuZXhwb3J0ICogZnJvbSAnLi9XaGl0ZUxpc3QnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9NdWx0aXBsZVZhbGlkYXRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9WYWxpZGF0aW9uJztcbiIsImV4cG9ydCAqIGZyb20gJy4vV2ViaG9va3MnO1xuIiwiZXhwb3J0ICogZnJvbSAnLi9Db21tb24nO1xuZXhwb3J0ICogZnJvbSAnLi9Eb21haW5zJztcbmV4cG9ydCAqIGZyb20gJy4vRXZlbnRzJztcbmV4cG9ydCAqIGZyb20gJy4vSVBQb29scyc7XG5leHBvcnQgKiBmcm9tICcuL0lQcyc7XG5leHBvcnQgKiBmcm9tICcuL01haWxndW5DbGllbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9NYWlsaW5nTGlzdHMnO1xuZXhwb3J0ICogZnJvbSAnLi9NZXNzYWdlcyc7XG5leHBvcnQgKiBmcm9tICcuL1JvdXRlcyc7XG5leHBvcnQgKiBmcm9tICcuL1N0YXRzJztcbmV4cG9ydCAqIGZyb20gJy4vU3ViYWNjb3VudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9TdXBwcmVzc2lvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9WYWxpZGF0aW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL1dlYmhvb2tzJztcbiIsImltcG9ydCBNYWlsZ3VuQ2xpZW50IGZyb20gJy4vQ2xhc3Nlcy9NYWlsZ3VuQ2xpZW50JztcbmltcG9ydCB7IElNYWlsZ3VuQ2xpZW50IH0gZnJvbSAnLi9JbnRlcmZhY2VzJztcbmltcG9ydCB7IElucHV0Rm9ybURhdGEsIE1haWxndW5DbGllbnRPcHRpb25zIH0gZnJvbSAnLi9UeXBlcyc7XG5cbmV4cG9ydCAqIGFzIEVudW1zIGZyb20gJy4vRW51bXMnO1xuZXhwb3J0ICogZnJvbSAnLi9UeXBlcyc7XG5leHBvcnQgKiBhcyBJbnRlcmZhY2VzIGZyb20gJy4vSW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1haWxndW4ge1xuICBzdGF0aWMgZ2V0IGRlZmF1bHQoKTogdHlwZW9mIE1haWxndW4geyByZXR1cm4gdGhpczsgfVxuICBwcml2YXRlIGZvcm1EYXRhOiBJbnB1dEZvcm1EYXRhXG5cbiAgY29uc3RydWN0b3IoRm9ybURhdGE6IElucHV0Rm9ybURhdGEpIHtcbiAgICB0aGlzLmZvcm1EYXRhID0gRm9ybURhdGE7XG4gIH1cblxuICBjbGllbnQob3B0aW9uczogTWFpbGd1bkNsaWVudE9wdGlvbnMpIDogSU1haWxndW5DbGllbnQge1xuICAgIHJldHVybiBuZXcgTWFpbGd1bkNsaWVudChvcHRpb25zLCB0aGlzLmZvcm1EYXRhKTtcbiAgfVxufVxuIiwiLyohIGh0dHBzOi8vbXRocy5iZS9iYXNlNjQgdjEuMC4wIGJ5IEBtYXRoaWFzIHwgTUlUIGxpY2Vuc2UgKi9cbjsoZnVuY3Rpb24ocm9vdCkge1xuXG5cdC8vIERldGVjdCBmcmVlIHZhcmlhYmxlcyBgZXhwb3J0c2AuXG5cdHZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHM7XG5cblx0Ly8gRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuXG5cdHZhciBmcmVlTW9kdWxlID0gdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiZcblx0XHRtb2R1bGUuZXhwb3J0cyA9PSBmcmVlRXhwb3J0cyAmJiBtb2R1bGU7XG5cblx0Ly8gRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGdsb2JhbGAsIGZyb20gTm9kZS5qcyBvciBCcm93c2VyaWZpZWQgY29kZSwgYW5kIHVzZVxuXHQvLyBpdCBhcyBgcm9vdGAuXG5cdHZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWw7XG5cdGlmIChmcmVlR2xvYmFsLmdsb2JhbCA9PT0gZnJlZUdsb2JhbCB8fCBmcmVlR2xvYmFsLndpbmRvdyA9PT0gZnJlZUdsb2JhbCkge1xuXHRcdHJvb3QgPSBmcmVlR2xvYmFsO1xuXHR9XG5cblx0LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cblx0dmFyIEludmFsaWRDaGFyYWN0ZXJFcnJvciA9IGZ1bmN0aW9uKG1lc3NhZ2UpIHtcblx0XHR0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuXHR9O1xuXHRJbnZhbGlkQ2hhcmFjdGVyRXJyb3IucHJvdG90eXBlID0gbmV3IEVycm9yO1xuXHRJbnZhbGlkQ2hhcmFjdGVyRXJyb3IucHJvdG90eXBlLm5hbWUgPSAnSW52YWxpZENoYXJhY3RlckVycm9yJztcblxuXHR2YXIgZXJyb3IgPSBmdW5jdGlvbihtZXNzYWdlKSB7XG5cdFx0Ly8gTm90ZTogdGhlIGVycm9yIG1lc3NhZ2VzIHVzZWQgdGhyb3VnaG91dCB0aGlzIGZpbGUgbWF0Y2ggdGhvc2UgdXNlZCBieVxuXHRcdC8vIHRoZSBuYXRpdmUgYGF0b2JgL2BidG9hYCBpbXBsZW1lbnRhdGlvbiBpbiBDaHJvbWl1bS5cblx0XHR0aHJvdyBuZXcgSW52YWxpZENoYXJhY3RlckVycm9yKG1lc3NhZ2UpO1xuXHR9O1xuXG5cdHZhciBUQUJMRSA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJztcblx0Ly8gaHR0cDovL3doYXR3Zy5vcmcvaHRtbC9jb21tb24tbWljcm9zeW50YXhlcy5odG1sI3NwYWNlLWNoYXJhY3RlclxuXHR2YXIgUkVHRVhfU1BBQ0VfQ0hBUkFDVEVSUyA9IC9bXFx0XFxuXFxmXFxyIF0vZztcblxuXHQvLyBgZGVjb2RlYCBpcyBkZXNpZ25lZCB0byBiZSBmdWxseSBjb21wYXRpYmxlIHdpdGggYGF0b2JgIGFzIGRlc2NyaWJlZCBpbiB0aGVcblx0Ly8gSFRNTCBTdGFuZGFyZC4gaHR0cDovL3doYXR3Zy5vcmcvaHRtbC93ZWJhcHBhcGlzLmh0bWwjZG9tLXdpbmRvd2Jhc2U2NC1hdG9iXG5cdC8vIFRoZSBvcHRpbWl6ZWQgYmFzZTY0LWRlY29kaW5nIGFsZ29yaXRobSB1c2VkIGlzIGJhc2VkIG9uIEBhdGvigJlzIGV4Y2VsbGVudFxuXHQvLyBpbXBsZW1lbnRhdGlvbi4gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vYXRrLzEwMjAzOTZcblx0dmFyIGRlY29kZSA9IGZ1bmN0aW9uKGlucHV0KSB7XG5cdFx0aW5wdXQgPSBTdHJpbmcoaW5wdXQpXG5cdFx0XHQucmVwbGFjZShSRUdFWF9TUEFDRV9DSEFSQUNURVJTLCAnJyk7XG5cdFx0dmFyIGxlbmd0aCA9IGlucHV0Lmxlbmd0aDtcblx0XHRpZiAobGVuZ3RoICUgNCA9PSAwKSB7XG5cdFx0XHRpbnB1dCA9IGlucHV0LnJlcGxhY2UoLz09PyQvLCAnJyk7XG5cdFx0XHRsZW5ndGggPSBpbnB1dC5sZW5ndGg7XG5cdFx0fVxuXHRcdGlmIChcblx0XHRcdGxlbmd0aCAlIDQgPT0gMSB8fFxuXHRcdFx0Ly8gaHR0cDovL3doYXR3Zy5vcmcvQyNhbHBoYW51bWVyaWMtYXNjaWktY2hhcmFjdGVyc1xuXHRcdFx0L1teK2EtekEtWjAtOS9dLy50ZXN0KGlucHV0KVxuXHRcdCkge1xuXHRcdFx0ZXJyb3IoXG5cdFx0XHRcdCdJbnZhbGlkIGNoYXJhY3RlcjogdGhlIHN0cmluZyB0byBiZSBkZWNvZGVkIGlzIG5vdCBjb3JyZWN0bHkgZW5jb2RlZC4nXG5cdFx0XHQpO1xuXHRcdH1cblx0XHR2YXIgYml0Q291bnRlciA9IDA7XG5cdFx0dmFyIGJpdFN0b3JhZ2U7XG5cdFx0dmFyIGJ1ZmZlcjtcblx0XHR2YXIgb3V0cHV0ID0gJyc7XG5cdFx0dmFyIHBvc2l0aW9uID0gLTE7XG5cdFx0d2hpbGUgKCsrcG9zaXRpb24gPCBsZW5ndGgpIHtcblx0XHRcdGJ1ZmZlciA9IFRBQkxFLmluZGV4T2YoaW5wdXQuY2hhckF0KHBvc2l0aW9uKSk7XG5cdFx0XHRiaXRTdG9yYWdlID0gYml0Q291bnRlciAlIDQgPyBiaXRTdG9yYWdlICogNjQgKyBidWZmZXIgOiBidWZmZXI7XG5cdFx0XHQvLyBVbmxlc3MgdGhpcyBpcyB0aGUgZmlyc3Qgb2YgYSBncm91cCBvZiA0IGNoYXJhY3RlcnPigKZcblx0XHRcdGlmIChiaXRDb3VudGVyKysgJSA0KSB7XG5cdFx0XHRcdC8vIOKApmNvbnZlcnQgdGhlIGZpcnN0IDggYml0cyB0byBhIHNpbmdsZSBBU0NJSSBjaGFyYWN0ZXIuXG5cdFx0XHRcdG91dHB1dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKFxuXHRcdFx0XHRcdDB4RkYgJiBiaXRTdG9yYWdlID4+ICgtMiAqIGJpdENvdW50ZXIgJiA2KVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0O1xuXHR9O1xuXG5cdC8vIGBlbmNvZGVgIGlzIGRlc2lnbmVkIHRvIGJlIGZ1bGx5IGNvbXBhdGlibGUgd2l0aCBgYnRvYWAgYXMgZGVzY3JpYmVkIGluIHRoZVxuXHQvLyBIVE1MIFN0YW5kYXJkOiBodHRwOi8vd2hhdHdnLm9yZy9odG1sL3dlYmFwcGFwaXMuaHRtbCNkb20td2luZG93YmFzZTY0LWJ0b2Fcblx0dmFyIGVuY29kZSA9IGZ1bmN0aW9uKGlucHV0KSB7XG5cdFx0aW5wdXQgPSBTdHJpbmcoaW5wdXQpO1xuXHRcdGlmICgvW15cXDAtXFx4RkZdLy50ZXN0KGlucHV0KSkge1xuXHRcdFx0Ly8gTm90ZTogbm8gbmVlZCB0byBzcGVjaWFsLWNhc2UgYXN0cmFsIHN5bWJvbHMgaGVyZSwgYXMgc3Vycm9nYXRlcyBhcmVcblx0XHRcdC8vIG1hdGNoZWQsIGFuZCB0aGUgaW5wdXQgaXMgc3VwcG9zZWQgdG8gb25seSBjb250YWluIEFTQ0lJIGFueXdheS5cblx0XHRcdGVycm9yKFxuXHRcdFx0XHQnVGhlIHN0cmluZyB0byBiZSBlbmNvZGVkIGNvbnRhaW5zIGNoYXJhY3RlcnMgb3V0c2lkZSBvZiB0aGUgJyArXG5cdFx0XHRcdCdMYXRpbjEgcmFuZ2UuJ1xuXHRcdFx0KTtcblx0XHR9XG5cdFx0dmFyIHBhZGRpbmcgPSBpbnB1dC5sZW5ndGggJSAzO1xuXHRcdHZhciBvdXRwdXQgPSAnJztcblx0XHR2YXIgcG9zaXRpb24gPSAtMTtcblx0XHR2YXIgYTtcblx0XHR2YXIgYjtcblx0XHR2YXIgYztcblx0XHR2YXIgYnVmZmVyO1xuXHRcdC8vIE1ha2Ugc3VyZSBhbnkgcGFkZGluZyBpcyBoYW5kbGVkIG91dHNpZGUgb2YgdGhlIGxvb3AuXG5cdFx0dmFyIGxlbmd0aCA9IGlucHV0Lmxlbmd0aCAtIHBhZGRpbmc7XG5cblx0XHR3aGlsZSAoKytwb3NpdGlvbiA8IGxlbmd0aCkge1xuXHRcdFx0Ly8gUmVhZCB0aHJlZSBieXRlcywgaS5lLiAyNCBiaXRzLlxuXHRcdFx0YSA9IGlucHV0LmNoYXJDb2RlQXQocG9zaXRpb24pIDw8IDE2O1xuXHRcdFx0YiA9IGlucHV0LmNoYXJDb2RlQXQoKytwb3NpdGlvbikgPDwgODtcblx0XHRcdGMgPSBpbnB1dC5jaGFyQ29kZUF0KCsrcG9zaXRpb24pO1xuXHRcdFx0YnVmZmVyID0gYSArIGIgKyBjO1xuXHRcdFx0Ly8gVHVybiB0aGUgMjQgYml0cyBpbnRvIGZvdXIgY2h1bmtzIG9mIDYgYml0cyBlYWNoLCBhbmQgYXBwZW5kIHRoZVxuXHRcdFx0Ly8gbWF0Y2hpbmcgY2hhcmFjdGVyIGZvciBlYWNoIG9mIHRoZW0gdG8gdGhlIG91dHB1dC5cblx0XHRcdG91dHB1dCArPSAoXG5cdFx0XHRcdFRBQkxFLmNoYXJBdChidWZmZXIgPj4gMTggJiAweDNGKSArXG5cdFx0XHRcdFRBQkxFLmNoYXJBdChidWZmZXIgPj4gMTIgJiAweDNGKSArXG5cdFx0XHRcdFRBQkxFLmNoYXJBdChidWZmZXIgPj4gNiAmIDB4M0YpICtcblx0XHRcdFx0VEFCTEUuY2hhckF0KGJ1ZmZlciAmIDB4M0YpXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdGlmIChwYWRkaW5nID09IDIpIHtcblx0XHRcdGEgPSBpbnB1dC5jaGFyQ29kZUF0KHBvc2l0aW9uKSA8PCA4O1xuXHRcdFx0YiA9IGlucHV0LmNoYXJDb2RlQXQoKytwb3NpdGlvbik7XG5cdFx0XHRidWZmZXIgPSBhICsgYjtcblx0XHRcdG91dHB1dCArPSAoXG5cdFx0XHRcdFRBQkxFLmNoYXJBdChidWZmZXIgPj4gMTApICtcblx0XHRcdFx0VEFCTEUuY2hhckF0KChidWZmZXIgPj4gNCkgJiAweDNGKSArXG5cdFx0XHRcdFRBQkxFLmNoYXJBdCgoYnVmZmVyIDw8IDIpICYgMHgzRikgK1xuXHRcdFx0XHQnPSdcblx0XHRcdCk7XG5cdFx0fSBlbHNlIGlmIChwYWRkaW5nID09IDEpIHtcblx0XHRcdGJ1ZmZlciA9IGlucHV0LmNoYXJDb2RlQXQocG9zaXRpb24pO1xuXHRcdFx0b3V0cHV0ICs9IChcblx0XHRcdFx0VEFCTEUuY2hhckF0KGJ1ZmZlciA+PiAyKSArXG5cdFx0XHRcdFRBQkxFLmNoYXJBdCgoYnVmZmVyIDw8IDQpICYgMHgzRikgK1xuXHRcdFx0XHQnPT0nXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiBvdXRwdXQ7XG5cdH07XG5cblx0dmFyIGJhc2U2NCA9IHtcblx0XHQnZW5jb2RlJzogZW5jb2RlLFxuXHRcdCdkZWNvZGUnOiBkZWNvZGUsXG5cdFx0J3ZlcnNpb24nOiAnMS4wLjAnXG5cdH07XG5cblx0Ly8gU29tZSBBTUQgYnVpbGQgb3B0aW1pemVycywgbGlrZSByLmpzLCBjaGVjayBmb3Igc3BlY2lmaWMgY29uZGl0aW9uIHBhdHRlcm5zXG5cdC8vIGxpa2UgdGhlIGZvbGxvd2luZzpcblx0aWYgKFxuXHRcdHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJlxuXHRcdHR5cGVvZiBkZWZpbmUuYW1kID09ICdvYmplY3QnICYmXG5cdFx0ZGVmaW5lLmFtZFxuXHQpIHtcblx0XHRkZWZpbmUoZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gYmFzZTY0O1xuXHRcdH0pO1xuXHR9XHRlbHNlIGlmIChmcmVlRXhwb3J0cyAmJiAhZnJlZUV4cG9ydHMubm9kZVR5cGUpIHtcblx0XHRpZiAoZnJlZU1vZHVsZSkgeyAvLyBpbiBOb2RlLmpzIG9yIFJpbmdvSlMgdjAuOC4wK1xuXHRcdFx0ZnJlZU1vZHVsZS5leHBvcnRzID0gYmFzZTY0O1xuXHRcdH0gZWxzZSB7IC8vIGluIE5hcndoYWwgb3IgUmluZ29KUyB2MC43LjAtXG5cdFx0XHRmb3IgKHZhciBrZXkgaW4gYmFzZTY0KSB7XG5cdFx0XHRcdGJhc2U2NC5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIChmcmVlRXhwb3J0c1trZXldID0gYmFzZTY0W2tleV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIHsgLy8gaW4gUmhpbm8gb3IgYSB3ZWIgYnJvd3NlclxuXHRcdHJvb3QuYmFzZTY0ID0gYmFzZTY0O1xuXHR9XG5cbn0odGhpcykpO1xuIiwidmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG52YXIgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJykuU3RyZWFtO1xudmFyIERlbGF5ZWRTdHJlYW0gPSByZXF1aXJlKCdkZWxheWVkLXN0cmVhbScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IENvbWJpbmVkU3RyZWFtO1xuZnVuY3Rpb24gQ29tYmluZWRTdHJlYW0oKSB7XG4gIHRoaXMud3JpdGFibGUgPSBmYWxzZTtcbiAgdGhpcy5yZWFkYWJsZSA9IHRydWU7XG4gIHRoaXMuZGF0YVNpemUgPSAwO1xuICB0aGlzLm1heERhdGFTaXplID0gMiAqIDEwMjQgKiAxMDI0O1xuICB0aGlzLnBhdXNlU3RyZWFtcyA9IHRydWU7XG5cbiAgdGhpcy5fcmVsZWFzZWQgPSBmYWxzZTtcbiAgdGhpcy5fc3RyZWFtcyA9IFtdO1xuICB0aGlzLl9jdXJyZW50U3RyZWFtID0gbnVsbDtcbiAgdGhpcy5faW5zaWRlTG9vcCA9IGZhbHNlO1xuICB0aGlzLl9wZW5kaW5nTmV4dCA9IGZhbHNlO1xufVxudXRpbC5pbmhlcml0cyhDb21iaW5lZFN0cmVhbSwgU3RyZWFtKTtcblxuQ29tYmluZWRTdHJlYW0uY3JlYXRlID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICB2YXIgY29tYmluZWRTdHJlYW0gPSBuZXcgdGhpcygpO1xuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBmb3IgKHZhciBvcHRpb24gaW4gb3B0aW9ucykge1xuICAgIGNvbWJpbmVkU3RyZWFtW29wdGlvbl0gPSBvcHRpb25zW29wdGlvbl07XG4gIH1cblxuICByZXR1cm4gY29tYmluZWRTdHJlYW07XG59O1xuXG5Db21iaW5lZFN0cmVhbS5pc1N0cmVhbUxpa2UgPSBmdW5jdGlvbihzdHJlYW0pIHtcbiAgcmV0dXJuICh0eXBlb2Ygc3RyZWFtICE9PSAnZnVuY3Rpb24nKVxuICAgICYmICh0eXBlb2Ygc3RyZWFtICE9PSAnc3RyaW5nJylcbiAgICAmJiAodHlwZW9mIHN0cmVhbSAhPT0gJ2Jvb2xlYW4nKVxuICAgICYmICh0eXBlb2Ygc3RyZWFtICE9PSAnbnVtYmVyJylcbiAgICAmJiAoIUJ1ZmZlci5pc0J1ZmZlcihzdHJlYW0pKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbihzdHJlYW0pIHtcbiAgdmFyIGlzU3RyZWFtTGlrZSA9IENvbWJpbmVkU3RyZWFtLmlzU3RyZWFtTGlrZShzdHJlYW0pO1xuXG4gIGlmIChpc1N0cmVhbUxpa2UpIHtcbiAgICBpZiAoIShzdHJlYW0gaW5zdGFuY2VvZiBEZWxheWVkU3RyZWFtKSkge1xuICAgICAgdmFyIG5ld1N0cmVhbSA9IERlbGF5ZWRTdHJlYW0uY3JlYXRlKHN0cmVhbSwge1xuICAgICAgICBtYXhEYXRhU2l6ZTogSW5maW5pdHksXG4gICAgICAgIHBhdXNlU3RyZWFtOiB0aGlzLnBhdXNlU3RyZWFtcyxcbiAgICAgIH0pO1xuICAgICAgc3RyZWFtLm9uKCdkYXRhJywgdGhpcy5fY2hlY2tEYXRhU2l6ZS5iaW5kKHRoaXMpKTtcbiAgICAgIHN0cmVhbSA9IG5ld1N0cmVhbTtcbiAgICB9XG5cbiAgICB0aGlzLl9oYW5kbGVFcnJvcnMoc3RyZWFtKTtcblxuICAgIGlmICh0aGlzLnBhdXNlU3RyZWFtcykge1xuICAgICAgc3RyZWFtLnBhdXNlKCk7XG4gICAgfVxuICB9XG5cbiAgdGhpcy5fc3RyZWFtcy5wdXNoKHN0cmVhbSk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbihkZXN0LCBvcHRpb25zKSB7XG4gIFN0cmVhbS5wcm90b3R5cGUucGlwZS5jYWxsKHRoaXMsIGRlc3QsIG9wdGlvbnMpO1xuICB0aGlzLnJlc3VtZSgpO1xuICByZXR1cm4gZGVzdDtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5fZ2V0TmV4dCA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9jdXJyZW50U3RyZWFtID0gbnVsbDtcblxuICBpZiAodGhpcy5faW5zaWRlTG9vcCkge1xuICAgIHRoaXMuX3BlbmRpbmdOZXh0ID0gdHJ1ZTtcbiAgICByZXR1cm47IC8vIGRlZmVyIGNhbGxcbiAgfVxuXG4gIHRoaXMuX2luc2lkZUxvb3AgPSB0cnVlO1xuICB0cnkge1xuICAgIGRvIHtcbiAgICAgIHRoaXMuX3BlbmRpbmdOZXh0ID0gZmFsc2U7XG4gICAgICB0aGlzLl9yZWFsR2V0TmV4dCgpO1xuICAgIH0gd2hpbGUgKHRoaXMuX3BlbmRpbmdOZXh0KTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0aGlzLl9pbnNpZGVMb29wID0gZmFsc2U7XG4gIH1cbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5fcmVhbEdldE5leHQgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHN0cmVhbSA9IHRoaXMuX3N0cmVhbXMuc2hpZnQoKTtcblxuXG4gIGlmICh0eXBlb2Ygc3RyZWFtID09ICd1bmRlZmluZWQnKSB7XG4gICAgdGhpcy5lbmQoKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAodHlwZW9mIHN0cmVhbSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRoaXMuX3BpcGVOZXh0KHN0cmVhbSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGdldFN0cmVhbSA9IHN0cmVhbTtcbiAgZ2V0U3RyZWFtKGZ1bmN0aW9uKHN0cmVhbSkge1xuICAgIHZhciBpc1N0cmVhbUxpa2UgPSBDb21iaW5lZFN0cmVhbS5pc1N0cmVhbUxpa2Uoc3RyZWFtKTtcbiAgICBpZiAoaXNTdHJlYW1MaWtlKSB7XG4gICAgICBzdHJlYW0ub24oJ2RhdGEnLCB0aGlzLl9jaGVja0RhdGFTaXplLmJpbmQodGhpcykpO1xuICAgICAgdGhpcy5faGFuZGxlRXJyb3JzKHN0cmVhbSk7XG4gICAgfVxuXG4gICAgdGhpcy5fcGlwZU5leHQoc3RyZWFtKTtcbiAgfS5iaW5kKHRoaXMpKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5fcGlwZU5leHQgPSBmdW5jdGlvbihzdHJlYW0pIHtcbiAgdGhpcy5fY3VycmVudFN0cmVhbSA9IHN0cmVhbTtcblxuICB2YXIgaXNTdHJlYW1MaWtlID0gQ29tYmluZWRTdHJlYW0uaXNTdHJlYW1MaWtlKHN0cmVhbSk7XG4gIGlmIChpc1N0cmVhbUxpa2UpIHtcbiAgICBzdHJlYW0ub24oJ2VuZCcsIHRoaXMuX2dldE5leHQuYmluZCh0aGlzKSk7XG4gICAgc3RyZWFtLnBpcGUodGhpcywge2VuZDogZmFsc2V9KTtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgdmFsdWUgPSBzdHJlYW07XG4gIHRoaXMud3JpdGUodmFsdWUpO1xuICB0aGlzLl9nZXROZXh0KCk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuX2hhbmRsZUVycm9ycyA9IGZ1bmN0aW9uKHN0cmVhbSkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHN0cmVhbS5vbignZXJyb3InLCBmdW5jdGlvbihlcnIpIHtcbiAgICBzZWxmLl9lbWl0RXJyb3IoZXJyKTtcbiAgfSk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihkYXRhKSB7XG4gIHRoaXMuZW1pdCgnZGF0YScsIGRhdGEpO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24oKSB7XG4gIGlmICghdGhpcy5wYXVzZVN0cmVhbXMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZih0aGlzLnBhdXNlU3RyZWFtcyAmJiB0aGlzLl9jdXJyZW50U3RyZWFtICYmIHR5cGVvZih0aGlzLl9jdXJyZW50U3RyZWFtLnBhdXNlKSA9PSAnZnVuY3Rpb24nKSB0aGlzLl9jdXJyZW50U3RyZWFtLnBhdXNlKCk7XG4gIHRoaXMuZW1pdCgncGF1c2UnKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5yZXN1bWUgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCF0aGlzLl9yZWxlYXNlZCkge1xuICAgIHRoaXMuX3JlbGVhc2VkID0gdHJ1ZTtcbiAgICB0aGlzLndyaXRhYmxlID0gdHJ1ZTtcbiAgICB0aGlzLl9nZXROZXh0KCk7XG4gIH1cblxuICBpZih0aGlzLnBhdXNlU3RyZWFtcyAmJiB0aGlzLl9jdXJyZW50U3RyZWFtICYmIHR5cGVvZih0aGlzLl9jdXJyZW50U3RyZWFtLnJlc3VtZSkgPT0gJ2Z1bmN0aW9uJykgdGhpcy5fY3VycmVudFN0cmVhbS5yZXN1bWUoKTtcbiAgdGhpcy5lbWl0KCdyZXN1bWUnKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fcmVzZXQoKTtcbiAgdGhpcy5lbWl0KCdlbmQnKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX3Jlc2V0KCk7XG4gIHRoaXMuZW1pdCgnY2xvc2UnKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5fcmVzZXQgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy53cml0YWJsZSA9IGZhbHNlO1xuICB0aGlzLl9zdHJlYW1zID0gW107XG4gIHRoaXMuX2N1cnJlbnRTdHJlYW0gPSBudWxsO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLl9jaGVja0RhdGFTaXplID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX3VwZGF0ZURhdGFTaXplKCk7XG4gIGlmICh0aGlzLmRhdGFTaXplIDw9IHRoaXMubWF4RGF0YVNpemUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgbWVzc2FnZSA9XG4gICAgJ0RlbGF5ZWRTdHJlYW0jbWF4RGF0YVNpemUgb2YgJyArIHRoaXMubWF4RGF0YVNpemUgKyAnIGJ5dGVzIGV4Y2VlZGVkLic7XG4gIHRoaXMuX2VtaXRFcnJvcihuZXcgRXJyb3IobWVzc2FnZSkpO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLl91cGRhdGVEYXRhU2l6ZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLmRhdGFTaXplID0gMDtcblxuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHRoaXMuX3N0cmVhbXMuZm9yRWFjaChmdW5jdGlvbihzdHJlYW0pIHtcbiAgICBpZiAoIXN0cmVhbS5kYXRhU2l6ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNlbGYuZGF0YVNpemUgKz0gc3RyZWFtLmRhdGFTaXplO1xuICB9KTtcblxuICBpZiAodGhpcy5fY3VycmVudFN0cmVhbSAmJiB0aGlzLl9jdXJyZW50U3RyZWFtLmRhdGFTaXplKSB7XG4gICAgdGhpcy5kYXRhU2l6ZSArPSB0aGlzLl9jdXJyZW50U3RyZWFtLmRhdGFTaXplO1xuICB9XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuX2VtaXRFcnJvciA9IGZ1bmN0aW9uKGVycikge1xuICB0aGlzLl9yZXNldCgpO1xuICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTtcbn07XG4iLCIvKiBlc2xpbnQtZW52IGJyb3dzZXIgKi9cblxuLyoqXG4gKiBUaGlzIGlzIHRoZSB3ZWIgYnJvd3NlciBpbXBsZW1lbnRhdGlvbiBvZiBgZGVidWcoKWAuXG4gKi9cblxuZXhwb3J0cy5mb3JtYXRBcmdzID0gZm9ybWF0QXJncztcbmV4cG9ydHMuc2F2ZSA9IHNhdmU7XG5leHBvcnRzLmxvYWQgPSBsb2FkO1xuZXhwb3J0cy51c2VDb2xvcnMgPSB1c2VDb2xvcnM7XG5leHBvcnRzLnN0b3JhZ2UgPSBsb2NhbHN0b3JhZ2UoKTtcbmV4cG9ydHMuZGVzdHJveSA9ICgoKSA9PiB7XG5cdGxldCB3YXJuZWQgPSBmYWxzZTtcblxuXHRyZXR1cm4gKCkgPT4ge1xuXHRcdGlmICghd2FybmVkKSB7XG5cdFx0XHR3YXJuZWQgPSB0cnVlO1xuXHRcdFx0Y29uc29sZS53YXJuKCdJbnN0YW5jZSBtZXRob2QgYGRlYnVnLmRlc3Ryb3koKWAgaXMgZGVwcmVjYXRlZCBhbmQgbm8gbG9uZ2VyIGRvZXMgYW55dGhpbmcuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIGBkZWJ1Z2AuJyk7XG5cdFx0fVxuXHR9O1xufSkoKTtcblxuLyoqXG4gKiBDb2xvcnMuXG4gKi9cblxuZXhwb3J0cy5jb2xvcnMgPSBbXG5cdCcjMDAwMENDJyxcblx0JyMwMDAwRkYnLFxuXHQnIzAwMzNDQycsXG5cdCcjMDAzM0ZGJyxcblx0JyMwMDY2Q0MnLFxuXHQnIzAwNjZGRicsXG5cdCcjMDA5OUNDJyxcblx0JyMwMDk5RkYnLFxuXHQnIzAwQ0MwMCcsXG5cdCcjMDBDQzMzJyxcblx0JyMwMENDNjYnLFxuXHQnIzAwQ0M5OScsXG5cdCcjMDBDQ0NDJyxcblx0JyMwMENDRkYnLFxuXHQnIzMzMDBDQycsXG5cdCcjMzMwMEZGJyxcblx0JyMzMzMzQ0MnLFxuXHQnIzMzMzNGRicsXG5cdCcjMzM2NkNDJyxcblx0JyMzMzY2RkYnLFxuXHQnIzMzOTlDQycsXG5cdCcjMzM5OUZGJyxcblx0JyMzM0NDMDAnLFxuXHQnIzMzQ0MzMycsXG5cdCcjMzNDQzY2Jyxcblx0JyMzM0NDOTknLFxuXHQnIzMzQ0NDQycsXG5cdCcjMzNDQ0ZGJyxcblx0JyM2NjAwQ0MnLFxuXHQnIzY2MDBGRicsXG5cdCcjNjYzM0NDJyxcblx0JyM2NjMzRkYnLFxuXHQnIzY2Q0MwMCcsXG5cdCcjNjZDQzMzJyxcblx0JyM5OTAwQ0MnLFxuXHQnIzk5MDBGRicsXG5cdCcjOTkzM0NDJyxcblx0JyM5OTMzRkYnLFxuXHQnIzk5Q0MwMCcsXG5cdCcjOTlDQzMzJyxcblx0JyNDQzAwMDAnLFxuXHQnI0NDMDAzMycsXG5cdCcjQ0MwMDY2Jyxcblx0JyNDQzAwOTknLFxuXHQnI0NDMDBDQycsXG5cdCcjQ0MwMEZGJyxcblx0JyNDQzMzMDAnLFxuXHQnI0NDMzMzMycsXG5cdCcjQ0MzMzY2Jyxcblx0JyNDQzMzOTknLFxuXHQnI0NDMzNDQycsXG5cdCcjQ0MzM0ZGJyxcblx0JyNDQzY2MDAnLFxuXHQnI0NDNjYzMycsXG5cdCcjQ0M5OTAwJyxcblx0JyNDQzk5MzMnLFxuXHQnI0NDQ0MwMCcsXG5cdCcjQ0NDQzMzJyxcblx0JyNGRjAwMDAnLFxuXHQnI0ZGMDAzMycsXG5cdCcjRkYwMDY2Jyxcblx0JyNGRjAwOTknLFxuXHQnI0ZGMDBDQycsXG5cdCcjRkYwMEZGJyxcblx0JyNGRjMzMDAnLFxuXHQnI0ZGMzMzMycsXG5cdCcjRkYzMzY2Jyxcblx0JyNGRjMzOTknLFxuXHQnI0ZGMzNDQycsXG5cdCcjRkYzM0ZGJyxcblx0JyNGRjY2MDAnLFxuXHQnI0ZGNjYzMycsXG5cdCcjRkY5OTAwJyxcblx0JyNGRjk5MzMnLFxuXHQnI0ZGQ0MwMCcsXG5cdCcjRkZDQzMzJ1xuXTtcblxuLyoqXG4gKiBDdXJyZW50bHkgb25seSBXZWJLaXQtYmFzZWQgV2ViIEluc3BlY3RvcnMsIEZpcmVmb3ggPj0gdjMxLFxuICogYW5kIHRoZSBGaXJlYnVnIGV4dGVuc2lvbiAoYW55IEZpcmVmb3ggdmVyc2lvbikgYXJlIGtub3duXG4gKiB0byBzdXBwb3J0IFwiJWNcIiBDU1MgY3VzdG9taXphdGlvbnMuXG4gKlxuICogVE9ETzogYWRkIGEgYGxvY2FsU3RvcmFnZWAgdmFyaWFibGUgdG8gZXhwbGljaXRseSBlbmFibGUvZGlzYWJsZSBjb2xvcnNcbiAqL1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZnVuY3Rpb24gdXNlQ29sb3JzKCkge1xuXHQvLyBOQjogSW4gYW4gRWxlY3Ryb24gcHJlbG9hZCBzY3JpcHQsIGRvY3VtZW50IHdpbGwgYmUgZGVmaW5lZCBidXQgbm90IGZ1bGx5XG5cdC8vIGluaXRpYWxpemVkLiBTaW5jZSB3ZSBrbm93IHdlJ3JlIGluIENocm9tZSwgd2UnbGwganVzdCBkZXRlY3QgdGhpcyBjYXNlXG5cdC8vIGV4cGxpY2l0bHlcblx0aWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5wcm9jZXNzICYmICh3aW5kb3cucHJvY2Vzcy50eXBlID09PSAncmVuZGVyZXInIHx8IHdpbmRvdy5wcm9jZXNzLl9fbndqcykpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8vIEludGVybmV0IEV4cGxvcmVyIGFuZCBFZGdlIGRvIG5vdCBzdXBwb3J0IGNvbG9ycy5cblx0aWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC8oZWRnZXx0cmlkZW50KVxcLyhcXGQrKS8pKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Ly8gSXMgd2Via2l0PyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8xNjQ1OTYwNi8zNzY3NzNcblx0Ly8gZG9jdW1lbnQgaXMgdW5kZWZpbmVkIGluIHJlYWN0LW5hdGl2ZTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0LW5hdGl2ZS9wdWxsLzE2MzJcblx0cmV0dXJuICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLldlYmtpdEFwcGVhcmFuY2UpIHx8XG5cdFx0Ly8gSXMgZmlyZWJ1Zz8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzk4MTIwLzM3Njc3M1xuXHRcdCh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuY29uc29sZSAmJiAod2luZG93LmNvbnNvbGUuZmlyZWJ1ZyB8fCAod2luZG93LmNvbnNvbGUuZXhjZXB0aW9uICYmIHdpbmRvdy5jb25zb2xlLnRhYmxlKSkpIHx8XG5cdFx0Ly8gSXMgZmlyZWZveCA+PSB2MzE/XG5cdFx0Ly8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9Ub29scy9XZWJfQ29uc29sZSNTdHlsaW5nX21lc3NhZ2VzXG5cdFx0KHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC9maXJlZm94XFwvKFxcZCspLykgJiYgcGFyc2VJbnQoUmVnRXhwLiQxLCAxMCkgPj0gMzEpIHx8XG5cdFx0Ly8gRG91YmxlIGNoZWNrIHdlYmtpdCBpbiB1c2VyQWdlbnQganVzdCBpbiBjYXNlIHdlIGFyZSBpbiBhIHdvcmtlclxuXHRcdCh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IudXNlckFnZW50ICYmIG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvYXBwbGV3ZWJraXRcXC8oXFxkKykvKSk7XG59XG5cbi8qKlxuICogQ29sb3JpemUgbG9nIGFyZ3VtZW50cyBpZiBlbmFibGVkLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gZm9ybWF0QXJncyhhcmdzKSB7XG5cdGFyZ3NbMF0gPSAodGhpcy51c2VDb2xvcnMgPyAnJWMnIDogJycpICtcblx0XHR0aGlzLm5hbWVzcGFjZSArXG5cdFx0KHRoaXMudXNlQ29sb3JzID8gJyAlYycgOiAnICcpICtcblx0XHRhcmdzWzBdICtcblx0XHQodGhpcy51c2VDb2xvcnMgPyAnJWMgJyA6ICcgJykgK1xuXHRcdCcrJyArIG1vZHVsZS5leHBvcnRzLmh1bWFuaXplKHRoaXMuZGlmZik7XG5cblx0aWYgKCF0aGlzLnVzZUNvbG9ycykge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGNvbnN0IGMgPSAnY29sb3I6ICcgKyB0aGlzLmNvbG9yO1xuXHRhcmdzLnNwbGljZSgxLCAwLCBjLCAnY29sb3I6IGluaGVyaXQnKTtcblxuXHQvLyBUaGUgZmluYWwgXCIlY1wiIGlzIHNvbWV3aGF0IHRyaWNreSwgYmVjYXVzZSB0aGVyZSBjb3VsZCBiZSBvdGhlclxuXHQvLyBhcmd1bWVudHMgcGFzc2VkIGVpdGhlciBiZWZvcmUgb3IgYWZ0ZXIgdGhlICVjLCBzbyB3ZSBuZWVkIHRvXG5cdC8vIGZpZ3VyZSBvdXQgdGhlIGNvcnJlY3QgaW5kZXggdG8gaW5zZXJ0IHRoZSBDU1MgaW50b1xuXHRsZXQgaW5kZXggPSAwO1xuXHRsZXQgbGFzdEMgPSAwO1xuXHRhcmdzWzBdLnJlcGxhY2UoLyVbYS16QS1aJV0vZywgbWF0Y2ggPT4ge1xuXHRcdGlmIChtYXRjaCA9PT0gJyUlJykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRpbmRleCsrO1xuXHRcdGlmIChtYXRjaCA9PT0gJyVjJykge1xuXHRcdFx0Ly8gV2Ugb25seSBhcmUgaW50ZXJlc3RlZCBpbiB0aGUgKmxhc3QqICVjXG5cdFx0XHQvLyAodGhlIHVzZXIgbWF5IGhhdmUgcHJvdmlkZWQgdGhlaXIgb3duKVxuXHRcdFx0bGFzdEMgPSBpbmRleDtcblx0XHR9XG5cdH0pO1xuXG5cdGFyZ3Muc3BsaWNlKGxhc3RDLCAwLCBjKTtcbn1cblxuLyoqXG4gKiBJbnZva2VzIGBjb25zb2xlLmRlYnVnKClgIHdoZW4gYXZhaWxhYmxlLlxuICogTm8tb3Agd2hlbiBgY29uc29sZS5kZWJ1Z2AgaXMgbm90IGEgXCJmdW5jdGlvblwiLlxuICogSWYgYGNvbnNvbGUuZGVidWdgIGlzIG5vdCBhdmFpbGFibGUsIGZhbGxzIGJhY2tcbiAqIHRvIGBjb25zb2xlLmxvZ2AuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuZXhwb3J0cy5sb2cgPSBjb25zb2xlLmRlYnVnIHx8IGNvbnNvbGUubG9nIHx8ICgoKSA9PiB7fSk7XG5cbi8qKlxuICogU2F2ZSBgbmFtZXNwYWNlc2AuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBzYXZlKG5hbWVzcGFjZXMpIHtcblx0dHJ5IHtcblx0XHRpZiAobmFtZXNwYWNlcykge1xuXHRcdFx0ZXhwb3J0cy5zdG9yYWdlLnNldEl0ZW0oJ2RlYnVnJywgbmFtZXNwYWNlcyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGV4cG9ydHMuc3RvcmFnZS5yZW1vdmVJdGVtKCdkZWJ1ZycpO1xuXHRcdH1cblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHQvLyBTd2FsbG93XG5cdFx0Ly8gWFhYIChAUWl4LSkgc2hvdWxkIHdlIGJlIGxvZ2dpbmcgdGhlc2U/XG5cdH1cbn1cblxuLyoqXG4gKiBMb2FkIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9IHJldHVybnMgdGhlIHByZXZpb3VzbHkgcGVyc2lzdGVkIGRlYnVnIG1vZGVzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gbG9hZCgpIHtcblx0bGV0IHI7XG5cdHRyeSB7XG5cdFx0ciA9IGV4cG9ydHMuc3RvcmFnZS5nZXRJdGVtKCdkZWJ1ZycpO1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdC8vIFN3YWxsb3dcblx0XHQvLyBYWFggKEBRaXgtKSBzaG91bGQgd2UgYmUgbG9nZ2luZyB0aGVzZT9cblx0fVxuXG5cdC8vIElmIGRlYnVnIGlzbid0IHNldCBpbiBMUywgYW5kIHdlJ3JlIGluIEVsZWN0cm9uLCB0cnkgdG8gbG9hZCAkREVCVUdcblx0aWYgKCFyICYmIHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiAnZW52JyBpbiBwcm9jZXNzKSB7XG5cdFx0ciA9IHByb2Nlc3MuZW52LkRFQlVHO1xuXHR9XG5cblx0cmV0dXJuIHI7XG59XG5cbi8qKlxuICogTG9jYWxzdG9yYWdlIGF0dGVtcHRzIHRvIHJldHVybiB0aGUgbG9jYWxzdG9yYWdlLlxuICpcbiAqIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugc2FmYXJpIHRocm93c1xuICogd2hlbiBhIHVzZXIgZGlzYWJsZXMgY29va2llcy9sb2NhbHN0b3JhZ2VcbiAqIGFuZCB5b3UgYXR0ZW1wdCB0byBhY2Nlc3MgaXQuXG4gKlxuICogQHJldHVybiB7TG9jYWxTdG9yYWdlfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gbG9jYWxzdG9yYWdlKCkge1xuXHR0cnkge1xuXHRcdC8vIFRWTUxLaXQgKEFwcGxlIFRWIEpTIFJ1bnRpbWUpIGRvZXMgbm90IGhhdmUgYSB3aW5kb3cgb2JqZWN0LCBqdXN0IGxvY2FsU3RvcmFnZSBpbiB0aGUgZ2xvYmFsIGNvbnRleHRcblx0XHQvLyBUaGUgQnJvd3NlciBhbHNvIGhhcyBsb2NhbFN0b3JhZ2UgaW4gdGhlIGdsb2JhbCBjb250ZXh0LlxuXHRcdHJldHVybiBsb2NhbFN0b3JhZ2U7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0Ly8gU3dhbGxvd1xuXHRcdC8vIFhYWCAoQFFpeC0pIHNob3VsZCB3ZSBiZSBsb2dnaW5nIHRoZXNlP1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9jb21tb24nKShleHBvcnRzKTtcblxuY29uc3Qge2Zvcm1hdHRlcnN9ID0gbW9kdWxlLmV4cG9ydHM7XG5cbi8qKlxuICogTWFwICVqIHRvIGBKU09OLnN0cmluZ2lmeSgpYCwgc2luY2Ugbm8gV2ViIEluc3BlY3RvcnMgZG8gdGhhdCBieSBkZWZhdWx0LlxuICovXG5cbmZvcm1hdHRlcnMuaiA9IGZ1bmN0aW9uICh2KSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KHYpO1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdHJldHVybiAnW1VuZXhwZWN0ZWRKU09OUGFyc2VFcnJvcl06ICcgKyBlcnJvci5tZXNzYWdlO1xuXHR9XG59O1xuIiwiXG4vKipcbiAqIFRoaXMgaXMgdGhlIGNvbW1vbiBsb2dpYyBmb3IgYm90aCB0aGUgTm9kZS5qcyBhbmQgd2ViIGJyb3dzZXJcbiAqIGltcGxlbWVudGF0aW9ucyBvZiBgZGVidWcoKWAuXG4gKi9cblxuZnVuY3Rpb24gc2V0dXAoZW52KSB7XG5cdGNyZWF0ZURlYnVnLmRlYnVnID0gY3JlYXRlRGVidWc7XG5cdGNyZWF0ZURlYnVnLmRlZmF1bHQgPSBjcmVhdGVEZWJ1Zztcblx0Y3JlYXRlRGVidWcuY29lcmNlID0gY29lcmNlO1xuXHRjcmVhdGVEZWJ1Zy5kaXNhYmxlID0gZGlzYWJsZTtcblx0Y3JlYXRlRGVidWcuZW5hYmxlID0gZW5hYmxlO1xuXHRjcmVhdGVEZWJ1Zy5lbmFibGVkID0gZW5hYmxlZDtcblx0Y3JlYXRlRGVidWcuaHVtYW5pemUgPSByZXF1aXJlKCdtcycpO1xuXHRjcmVhdGVEZWJ1Zy5kZXN0cm95ID0gZGVzdHJveTtcblxuXHRPYmplY3Qua2V5cyhlbnYpLmZvckVhY2goa2V5ID0+IHtcblx0XHRjcmVhdGVEZWJ1Z1trZXldID0gZW52W2tleV07XG5cdH0pO1xuXG5cdC8qKlxuXHQqIFRoZSBjdXJyZW50bHkgYWN0aXZlIGRlYnVnIG1vZGUgbmFtZXMsIGFuZCBuYW1lcyB0byBza2lwLlxuXHQqL1xuXG5cdGNyZWF0ZURlYnVnLm5hbWVzID0gW107XG5cdGNyZWF0ZURlYnVnLnNraXBzID0gW107XG5cblx0LyoqXG5cdCogTWFwIG9mIHNwZWNpYWwgXCIlblwiIGhhbmRsaW5nIGZ1bmN0aW9ucywgZm9yIHRoZSBkZWJ1ZyBcImZvcm1hdFwiIGFyZ3VtZW50LlxuXHQqXG5cdCogVmFsaWQga2V5IG5hbWVzIGFyZSBhIHNpbmdsZSwgbG93ZXIgb3IgdXBwZXItY2FzZSBsZXR0ZXIsIGkuZS4gXCJuXCIgYW5kIFwiTlwiLlxuXHQqL1xuXHRjcmVhdGVEZWJ1Zy5mb3JtYXR0ZXJzID0ge307XG5cblx0LyoqXG5cdCogU2VsZWN0cyBhIGNvbG9yIGZvciBhIGRlYnVnIG5hbWVzcGFjZVxuXHQqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2UgVGhlIG5hbWVzcGFjZSBzdHJpbmcgZm9yIHRoZSBkZWJ1ZyBpbnN0YW5jZSB0byBiZSBjb2xvcmVkXG5cdCogQHJldHVybiB7TnVtYmVyfFN0cmluZ30gQW4gQU5TSSBjb2xvciBjb2RlIGZvciB0aGUgZ2l2ZW4gbmFtZXNwYWNlXG5cdCogQGFwaSBwcml2YXRlXG5cdCovXG5cdGZ1bmN0aW9uIHNlbGVjdENvbG9yKG5hbWVzcGFjZSkge1xuXHRcdGxldCBoYXNoID0gMDtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbmFtZXNwYWNlLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRoYXNoID0gKChoYXNoIDw8IDUpIC0gaGFzaCkgKyBuYW1lc3BhY2UuY2hhckNvZGVBdChpKTtcblx0XHRcdGhhc2ggfD0gMDsgLy8gQ29udmVydCB0byAzMmJpdCBpbnRlZ2VyXG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNyZWF0ZURlYnVnLmNvbG9yc1tNYXRoLmFicyhoYXNoKSAlIGNyZWF0ZURlYnVnLmNvbG9ycy5sZW5ndGhdO1xuXHR9XG5cdGNyZWF0ZURlYnVnLnNlbGVjdENvbG9yID0gc2VsZWN0Q29sb3I7XG5cblx0LyoqXG5cdCogQ3JlYXRlIGEgZGVidWdnZXIgd2l0aCB0aGUgZ2l2ZW4gYG5hbWVzcGFjZWAuXG5cdCpcblx0KiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlXG5cdCogQHJldHVybiB7RnVuY3Rpb259XG5cdCogQGFwaSBwdWJsaWNcblx0Ki9cblx0ZnVuY3Rpb24gY3JlYXRlRGVidWcobmFtZXNwYWNlKSB7XG5cdFx0bGV0IHByZXZUaW1lO1xuXHRcdGxldCBlbmFibGVPdmVycmlkZSA9IG51bGw7XG5cdFx0bGV0IG5hbWVzcGFjZXNDYWNoZTtcblx0XHRsZXQgZW5hYmxlZENhY2hlO1xuXG5cdFx0ZnVuY3Rpb24gZGVidWcoLi4uYXJncykge1xuXHRcdFx0Ly8gRGlzYWJsZWQ/XG5cdFx0XHRpZiAoIWRlYnVnLmVuYWJsZWQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBzZWxmID0gZGVidWc7XG5cblx0XHRcdC8vIFNldCBgZGlmZmAgdGltZXN0YW1wXG5cdFx0XHRjb25zdCBjdXJyID0gTnVtYmVyKG5ldyBEYXRlKCkpO1xuXHRcdFx0Y29uc3QgbXMgPSBjdXJyIC0gKHByZXZUaW1lIHx8IGN1cnIpO1xuXHRcdFx0c2VsZi5kaWZmID0gbXM7XG5cdFx0XHRzZWxmLnByZXYgPSBwcmV2VGltZTtcblx0XHRcdHNlbGYuY3VyciA9IGN1cnI7XG5cdFx0XHRwcmV2VGltZSA9IGN1cnI7XG5cblx0XHRcdGFyZ3NbMF0gPSBjcmVhdGVEZWJ1Zy5jb2VyY2UoYXJnc1swXSk7XG5cblx0XHRcdGlmICh0eXBlb2YgYXJnc1swXSAhPT0gJ3N0cmluZycpIHtcblx0XHRcdFx0Ly8gQW55dGhpbmcgZWxzZSBsZXQncyBpbnNwZWN0IHdpdGggJU9cblx0XHRcdFx0YXJncy51bnNoaWZ0KCclTycpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBcHBseSBhbnkgYGZvcm1hdHRlcnNgIHRyYW5zZm9ybWF0aW9uc1xuXHRcdFx0bGV0IGluZGV4ID0gMDtcblx0XHRcdGFyZ3NbMF0gPSBhcmdzWzBdLnJlcGxhY2UoLyUoW2EtekEtWiVdKS9nLCAobWF0Y2gsIGZvcm1hdCkgPT4ge1xuXHRcdFx0XHQvLyBJZiB3ZSBlbmNvdW50ZXIgYW4gZXNjYXBlZCAlIHRoZW4gZG9uJ3QgaW5jcmVhc2UgdGhlIGFycmF5IGluZGV4XG5cdFx0XHRcdGlmIChtYXRjaCA9PT0gJyUlJykge1xuXHRcdFx0XHRcdHJldHVybiAnJSc7XG5cdFx0XHRcdH1cblx0XHRcdFx0aW5kZXgrKztcblx0XHRcdFx0Y29uc3QgZm9ybWF0dGVyID0gY3JlYXRlRGVidWcuZm9ybWF0dGVyc1tmb3JtYXRdO1xuXHRcdFx0XHRpZiAodHlwZW9mIGZvcm1hdHRlciA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRcdGNvbnN0IHZhbCA9IGFyZ3NbaW5kZXhdO1xuXHRcdFx0XHRcdG1hdGNoID0gZm9ybWF0dGVyLmNhbGwoc2VsZiwgdmFsKTtcblxuXHRcdFx0XHRcdC8vIE5vdyB3ZSBuZWVkIHRvIHJlbW92ZSBgYXJnc1tpbmRleF1gIHNpbmNlIGl0J3MgaW5saW5lZCBpbiB0aGUgYGZvcm1hdGBcblx0XHRcdFx0XHRhcmdzLnNwbGljZShpbmRleCwgMSk7XG5cdFx0XHRcdFx0aW5kZXgtLTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gbWF0Y2g7XG5cdFx0XHR9KTtcblxuXHRcdFx0Ly8gQXBwbHkgZW52LXNwZWNpZmljIGZvcm1hdHRpbmcgKGNvbG9ycywgZXRjLilcblx0XHRcdGNyZWF0ZURlYnVnLmZvcm1hdEFyZ3MuY2FsbChzZWxmLCBhcmdzKTtcblxuXHRcdFx0Y29uc3QgbG9nRm4gPSBzZWxmLmxvZyB8fCBjcmVhdGVEZWJ1Zy5sb2c7XG5cdFx0XHRsb2dGbi5hcHBseShzZWxmLCBhcmdzKTtcblx0XHR9XG5cblx0XHRkZWJ1Zy5uYW1lc3BhY2UgPSBuYW1lc3BhY2U7XG5cdFx0ZGVidWcudXNlQ29sb3JzID0gY3JlYXRlRGVidWcudXNlQ29sb3JzKCk7XG5cdFx0ZGVidWcuY29sb3IgPSBjcmVhdGVEZWJ1Zy5zZWxlY3RDb2xvcihuYW1lc3BhY2UpO1xuXHRcdGRlYnVnLmV4dGVuZCA9IGV4dGVuZDtcblx0XHRkZWJ1Zy5kZXN0cm95ID0gY3JlYXRlRGVidWcuZGVzdHJveTsgLy8gWFhYIFRlbXBvcmFyeS4gV2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2UuXG5cblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZGVidWcsICdlbmFibGVkJywge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG5cdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0aWYgKGVuYWJsZU92ZXJyaWRlICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGVuYWJsZU92ZXJyaWRlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChuYW1lc3BhY2VzQ2FjaGUgIT09IGNyZWF0ZURlYnVnLm5hbWVzcGFjZXMpIHtcblx0XHRcdFx0XHRuYW1lc3BhY2VzQ2FjaGUgPSBjcmVhdGVEZWJ1Zy5uYW1lc3BhY2VzO1xuXHRcdFx0XHRcdGVuYWJsZWRDYWNoZSA9IGNyZWF0ZURlYnVnLmVuYWJsZWQobmFtZXNwYWNlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBlbmFibGVkQ2FjaGU7XG5cdFx0XHR9LFxuXHRcdFx0c2V0OiB2ID0+IHtcblx0XHRcdFx0ZW5hYmxlT3ZlcnJpZGUgPSB2O1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Ly8gRW52LXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGxvZ2ljIGZvciBkZWJ1ZyBpbnN0YW5jZXNcblx0XHRpZiAodHlwZW9mIGNyZWF0ZURlYnVnLmluaXQgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdGNyZWF0ZURlYnVnLmluaXQoZGVidWcpO1xuXHRcdH1cblxuXHRcdHJldHVybiBkZWJ1Zztcblx0fVxuXG5cdGZ1bmN0aW9uIGV4dGVuZChuYW1lc3BhY2UsIGRlbGltaXRlcikge1xuXHRcdGNvbnN0IG5ld0RlYnVnID0gY3JlYXRlRGVidWcodGhpcy5uYW1lc3BhY2UgKyAodHlwZW9mIGRlbGltaXRlciA9PT0gJ3VuZGVmaW5lZCcgPyAnOicgOiBkZWxpbWl0ZXIpICsgbmFtZXNwYWNlKTtcblx0XHRuZXdEZWJ1Zy5sb2cgPSB0aGlzLmxvZztcblx0XHRyZXR1cm4gbmV3RGVidWc7XG5cdH1cblxuXHQvKipcblx0KiBFbmFibGVzIGEgZGVidWcgbW9kZSBieSBuYW1lc3BhY2VzLiBUaGlzIGNhbiBpbmNsdWRlIG1vZGVzXG5cdCogc2VwYXJhdGVkIGJ5IGEgY29sb24gYW5kIHdpbGRjYXJkcy5cblx0KlxuXHQqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VzXG5cdCogQGFwaSBwdWJsaWNcblx0Ki9cblx0ZnVuY3Rpb24gZW5hYmxlKG5hbWVzcGFjZXMpIHtcblx0XHRjcmVhdGVEZWJ1Zy5zYXZlKG5hbWVzcGFjZXMpO1xuXHRcdGNyZWF0ZURlYnVnLm5hbWVzcGFjZXMgPSBuYW1lc3BhY2VzO1xuXG5cdFx0Y3JlYXRlRGVidWcubmFtZXMgPSBbXTtcblx0XHRjcmVhdGVEZWJ1Zy5za2lwcyA9IFtdO1xuXG5cdFx0bGV0IGk7XG5cdFx0Y29uc3Qgc3BsaXQgPSAodHlwZW9mIG5hbWVzcGFjZXMgPT09ICdzdHJpbmcnID8gbmFtZXNwYWNlcyA6ICcnKS5zcGxpdCgvW1xccyxdKy8pO1xuXHRcdGNvbnN0IGxlbiA9IHNwbGl0Lmxlbmd0aDtcblxuXHRcdGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0aWYgKCFzcGxpdFtpXSkge1xuXHRcdFx0XHQvLyBpZ25vcmUgZW1wdHkgc3RyaW5nc1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0bmFtZXNwYWNlcyA9IHNwbGl0W2ldLnJlcGxhY2UoL1xcKi9nLCAnLio/Jyk7XG5cblx0XHRcdGlmIChuYW1lc3BhY2VzWzBdID09PSAnLScpIHtcblx0XHRcdFx0Y3JlYXRlRGVidWcuc2tpcHMucHVzaChuZXcgUmVnRXhwKCdeJyArIG5hbWVzcGFjZXMuc2xpY2UoMSkgKyAnJCcpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNyZWF0ZURlYnVnLm5hbWVzLnB1c2gobmV3IFJlZ0V4cCgnXicgKyBuYW1lc3BhY2VzICsgJyQnKSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCogRGlzYWJsZSBkZWJ1ZyBvdXRwdXQuXG5cdCpcblx0KiBAcmV0dXJuIHtTdHJpbmd9IG5hbWVzcGFjZXNcblx0KiBAYXBpIHB1YmxpY1xuXHQqL1xuXHRmdW5jdGlvbiBkaXNhYmxlKCkge1xuXHRcdGNvbnN0IG5hbWVzcGFjZXMgPSBbXG5cdFx0XHQuLi5jcmVhdGVEZWJ1Zy5uYW1lcy5tYXAodG9OYW1lc3BhY2UpLFxuXHRcdFx0Li4uY3JlYXRlRGVidWcuc2tpcHMubWFwKHRvTmFtZXNwYWNlKS5tYXAobmFtZXNwYWNlID0+ICctJyArIG5hbWVzcGFjZSlcblx0XHRdLmpvaW4oJywnKTtcblx0XHRjcmVhdGVEZWJ1Zy5lbmFibGUoJycpO1xuXHRcdHJldHVybiBuYW1lc3BhY2VzO1xuXHR9XG5cblx0LyoqXG5cdCogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBtb2RlIG5hbWUgaXMgZW5hYmxlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuXHQqXG5cdCogQHBhcmFtIHtTdHJpbmd9IG5hbWVcblx0KiBAcmV0dXJuIHtCb29sZWFufVxuXHQqIEBhcGkgcHVibGljXG5cdCovXG5cdGZ1bmN0aW9uIGVuYWJsZWQobmFtZSkge1xuXHRcdGlmIChuYW1lW25hbWUubGVuZ3RoIC0gMV0gPT09ICcqJykge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0bGV0IGk7XG5cdFx0bGV0IGxlbjtcblxuXHRcdGZvciAoaSA9IDAsIGxlbiA9IGNyZWF0ZURlYnVnLnNraXBzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHRpZiAoY3JlYXRlRGVidWcuc2tpcHNbaV0udGVzdChuYW1lKSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9yIChpID0gMCwgbGVuID0gY3JlYXRlRGVidWcubmFtZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdGlmIChjcmVhdGVEZWJ1Zy5uYW1lc1tpXS50ZXN0KG5hbWUpKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdC8qKlxuXHQqIENvbnZlcnQgcmVnZXhwIHRvIG5hbWVzcGFjZVxuXHQqXG5cdCogQHBhcmFtIHtSZWdFeHB9IHJlZ3hlcFxuXHQqIEByZXR1cm4ge1N0cmluZ30gbmFtZXNwYWNlXG5cdCogQGFwaSBwcml2YXRlXG5cdCovXG5cdGZ1bmN0aW9uIHRvTmFtZXNwYWNlKHJlZ2V4cCkge1xuXHRcdHJldHVybiByZWdleHAudG9TdHJpbmcoKVxuXHRcdFx0LnN1YnN0cmluZygyLCByZWdleHAudG9TdHJpbmcoKS5sZW5ndGggLSAyKVxuXHRcdFx0LnJlcGxhY2UoL1xcLlxcKlxcPyQvLCAnKicpO1xuXHR9XG5cblx0LyoqXG5cdCogQ29lcmNlIGB2YWxgLlxuXHQqXG5cdCogQHBhcmFtIHtNaXhlZH0gdmFsXG5cdCogQHJldHVybiB7TWl4ZWR9XG5cdCogQGFwaSBwcml2YXRlXG5cdCovXG5cdGZ1bmN0aW9uIGNvZXJjZSh2YWwpIHtcblx0XHRpZiAodmFsIGluc3RhbmNlb2YgRXJyb3IpIHtcblx0XHRcdHJldHVybiB2YWwuc3RhY2sgfHwgdmFsLm1lc3NhZ2U7XG5cdFx0fVxuXHRcdHJldHVybiB2YWw7XG5cdH1cblxuXHQvKipcblx0KiBYWFggRE8gTk9UIFVTRS4gVGhpcyBpcyBhIHRlbXBvcmFyeSBzdHViIGZ1bmN0aW9uLlxuXHQqIFhYWCBJdCBXSUxMIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZS5cblx0Ki9cblx0ZnVuY3Rpb24gZGVzdHJveSgpIHtcblx0XHRjb25zb2xlLndhcm4oJ0luc3RhbmNlIG1ldGhvZCBgZGVidWcuZGVzdHJveSgpYCBpcyBkZXByZWNhdGVkIGFuZCBubyBsb25nZXIgZG9lcyBhbnl0aGluZy4gSXQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gb2YgYGRlYnVnYC4nKTtcblx0fVxuXG5cdGNyZWF0ZURlYnVnLmVuYWJsZShjcmVhdGVEZWJ1Zy5sb2FkKCkpO1xuXG5cdHJldHVybiBjcmVhdGVEZWJ1Zztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXR1cDtcbiIsIi8qKlxuICogRGV0ZWN0IEVsZWN0cm9uIHJlbmRlcmVyIC8gbndqcyBwcm9jZXNzLCB3aGljaCBpcyBub2RlLCBidXQgd2Ugc2hvdWxkXG4gKiB0cmVhdCBhcyBhIGJyb3dzZXIuXG4gKi9cblxuaWYgKHR5cGVvZiBwcm9jZXNzID09PSAndW5kZWZpbmVkJyB8fCBwcm9jZXNzLnR5cGUgPT09ICdyZW5kZXJlcicgfHwgcHJvY2Vzcy5icm93c2VyID09PSB0cnVlIHx8IHByb2Nlc3MuX19ud2pzKSB7XG5cdG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9icm93c2VyLmpzJyk7XG59IGVsc2Uge1xuXHRtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbm9kZS5qcycpO1xufVxuIiwiLyoqXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICovXG5cbmNvbnN0IHR0eSA9IHJlcXVpcmUoJ3R0eScpO1xuY29uc3QgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcblxuLyoqXG4gKiBUaGlzIGlzIHRoZSBOb2RlLmpzIGltcGxlbWVudGF0aW9uIG9mIGBkZWJ1ZygpYC5cbiAqL1xuXG5leHBvcnRzLmluaXQgPSBpbml0O1xuZXhwb3J0cy5sb2cgPSBsb2c7XG5leHBvcnRzLmZvcm1hdEFyZ3MgPSBmb3JtYXRBcmdzO1xuZXhwb3J0cy5zYXZlID0gc2F2ZTtcbmV4cG9ydHMubG9hZCA9IGxvYWQ7XG5leHBvcnRzLnVzZUNvbG9ycyA9IHVzZUNvbG9ycztcbmV4cG9ydHMuZGVzdHJveSA9IHV0aWwuZGVwcmVjYXRlKFxuXHQoKSA9PiB7fSxcblx0J0luc3RhbmNlIG1ldGhvZCBgZGVidWcuZGVzdHJveSgpYCBpcyBkZXByZWNhdGVkIGFuZCBubyBsb25nZXIgZG9lcyBhbnl0aGluZy4gSXQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gb2YgYGRlYnVnYC4nXG4pO1xuXG4vKipcbiAqIENvbG9ycy5cbiAqL1xuXG5leHBvcnRzLmNvbG9ycyA9IFs2LCAyLCAzLCA0LCA1LCAxXTtcblxudHJ5IHtcblx0Ly8gT3B0aW9uYWwgZGVwZW5kZW5jeSAoYXMgaW4sIGRvZXNuJ3QgbmVlZCB0byBiZSBpbnN0YWxsZWQsIE5PVCBsaWtlIG9wdGlvbmFsRGVwZW5kZW5jaWVzIGluIHBhY2thZ2UuanNvbilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llc1xuXHRjb25zdCBzdXBwb3J0c0NvbG9yID0gcmVxdWlyZSgnc3VwcG9ydHMtY29sb3InKTtcblxuXHRpZiAoc3VwcG9ydHNDb2xvciAmJiAoc3VwcG9ydHNDb2xvci5zdGRlcnIgfHwgc3VwcG9ydHNDb2xvcikubGV2ZWwgPj0gMikge1xuXHRcdGV4cG9ydHMuY29sb3JzID0gW1xuXHRcdFx0MjAsXG5cdFx0XHQyMSxcblx0XHRcdDI2LFxuXHRcdFx0MjcsXG5cdFx0XHQzMixcblx0XHRcdDMzLFxuXHRcdFx0MzgsXG5cdFx0XHQzOSxcblx0XHRcdDQwLFxuXHRcdFx0NDEsXG5cdFx0XHQ0Mixcblx0XHRcdDQzLFxuXHRcdFx0NDQsXG5cdFx0XHQ0NSxcblx0XHRcdDU2LFxuXHRcdFx0NTcsXG5cdFx0XHQ2Mixcblx0XHRcdDYzLFxuXHRcdFx0NjgsXG5cdFx0XHQ2OSxcblx0XHRcdDc0LFxuXHRcdFx0NzUsXG5cdFx0XHQ3Nixcblx0XHRcdDc3LFxuXHRcdFx0NzgsXG5cdFx0XHQ3OSxcblx0XHRcdDgwLFxuXHRcdFx0ODEsXG5cdFx0XHQ5Mixcblx0XHRcdDkzLFxuXHRcdFx0OTgsXG5cdFx0XHQ5OSxcblx0XHRcdDExMixcblx0XHRcdDExMyxcblx0XHRcdDEyOCxcblx0XHRcdDEyOSxcblx0XHRcdDEzNCxcblx0XHRcdDEzNSxcblx0XHRcdDE0OCxcblx0XHRcdDE0OSxcblx0XHRcdDE2MCxcblx0XHRcdDE2MSxcblx0XHRcdDE2Mixcblx0XHRcdDE2Myxcblx0XHRcdDE2NCxcblx0XHRcdDE2NSxcblx0XHRcdDE2Nixcblx0XHRcdDE2Nyxcblx0XHRcdDE2OCxcblx0XHRcdDE2OSxcblx0XHRcdDE3MCxcblx0XHRcdDE3MSxcblx0XHRcdDE3Mixcblx0XHRcdDE3Myxcblx0XHRcdDE3OCxcblx0XHRcdDE3OSxcblx0XHRcdDE4NCxcblx0XHRcdDE4NSxcblx0XHRcdDE5Nixcblx0XHRcdDE5Nyxcblx0XHRcdDE5OCxcblx0XHRcdDE5OSxcblx0XHRcdDIwMCxcblx0XHRcdDIwMSxcblx0XHRcdDIwMixcblx0XHRcdDIwMyxcblx0XHRcdDIwNCxcblx0XHRcdDIwNSxcblx0XHRcdDIwNixcblx0XHRcdDIwNyxcblx0XHRcdDIwOCxcblx0XHRcdDIwOSxcblx0XHRcdDIxNCxcblx0XHRcdDIxNSxcblx0XHRcdDIyMCxcblx0XHRcdDIyMVxuXHRcdF07XG5cdH1cbn0gY2F0Y2ggKGVycm9yKSB7XG5cdC8vIFN3YWxsb3cgLSB3ZSBvbmx5IGNhcmUgaWYgYHN1cHBvcnRzLWNvbG9yYCBpcyBhdmFpbGFibGU7IGl0IGRvZXNuJ3QgaGF2ZSB0byBiZS5cbn1cblxuLyoqXG4gKiBCdWlsZCB1cCB0aGUgZGVmYXVsdCBgaW5zcGVjdE9wdHNgIG9iamVjdCBmcm9tIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gKlxuICogICAkIERFQlVHX0NPTE9SUz1ubyBERUJVR19ERVBUSD0xMCBERUJVR19TSE9XX0hJRERFTj1lbmFibGVkIG5vZGUgc2NyaXB0LmpzXG4gKi9cblxuZXhwb3J0cy5pbnNwZWN0T3B0cyA9IE9iamVjdC5rZXlzKHByb2Nlc3MuZW52KS5maWx0ZXIoa2V5ID0+IHtcblx0cmV0dXJuIC9eZGVidWdfL2kudGVzdChrZXkpO1xufSkucmVkdWNlKChvYmosIGtleSkgPT4ge1xuXHQvLyBDYW1lbC1jYXNlXG5cdGNvbnN0IHByb3AgPSBrZXlcblx0XHQuc3Vic3RyaW5nKDYpXG5cdFx0LnRvTG93ZXJDYXNlKClcblx0XHQucmVwbGFjZSgvXyhbYS16XSkvZywgKF8sIGspID0+IHtcblx0XHRcdHJldHVybiBrLnRvVXBwZXJDYXNlKCk7XG5cdFx0fSk7XG5cblx0Ly8gQ29lcmNlIHN0cmluZyB2YWx1ZSBpbnRvIEpTIHZhbHVlXG5cdGxldCB2YWwgPSBwcm9jZXNzLmVudltrZXldO1xuXHRpZiAoL14oeWVzfG9ufHRydWV8ZW5hYmxlZCkkL2kudGVzdCh2YWwpKSB7XG5cdFx0dmFsID0gdHJ1ZTtcblx0fSBlbHNlIGlmICgvXihub3xvZmZ8ZmFsc2V8ZGlzYWJsZWQpJC9pLnRlc3QodmFsKSkge1xuXHRcdHZhbCA9IGZhbHNlO1xuXHR9IGVsc2UgaWYgKHZhbCA9PT0gJ251bGwnKSB7XG5cdFx0dmFsID0gbnVsbDtcblx0fSBlbHNlIHtcblx0XHR2YWwgPSBOdW1iZXIodmFsKTtcblx0fVxuXG5cdG9ialtwcm9wXSA9IHZhbDtcblx0cmV0dXJuIG9iajtcbn0sIHt9KTtcblxuLyoqXG4gKiBJcyBzdGRvdXQgYSBUVFk/IENvbG9yZWQgb3V0cHV0IGlzIGVuYWJsZWQgd2hlbiBgdHJ1ZWAuXG4gKi9cblxuZnVuY3Rpb24gdXNlQ29sb3JzKCkge1xuXHRyZXR1cm4gJ2NvbG9ycycgaW4gZXhwb3J0cy5pbnNwZWN0T3B0cyA/XG5cdFx0Qm9vbGVhbihleHBvcnRzLmluc3BlY3RPcHRzLmNvbG9ycykgOlxuXHRcdHR0eS5pc2F0dHkocHJvY2Vzcy5zdGRlcnIuZmQpO1xufVxuXG4vKipcbiAqIEFkZHMgQU5TSSBjb2xvciBlc2NhcGUgY29kZXMgaWYgZW5hYmxlZC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGZvcm1hdEFyZ3MoYXJncykge1xuXHRjb25zdCB7bmFtZXNwYWNlOiBuYW1lLCB1c2VDb2xvcnN9ID0gdGhpcztcblxuXHRpZiAodXNlQ29sb3JzKSB7XG5cdFx0Y29uc3QgYyA9IHRoaXMuY29sb3I7XG5cdFx0Y29uc3QgY29sb3JDb2RlID0gJ1xcdTAwMUJbMycgKyAoYyA8IDggPyBjIDogJzg7NTsnICsgYyk7XG5cdFx0Y29uc3QgcHJlZml4ID0gYCAgJHtjb2xvckNvZGV9OzFtJHtuYW1lfSBcXHUwMDFCWzBtYDtcblxuXHRcdGFyZ3NbMF0gPSBwcmVmaXggKyBhcmdzWzBdLnNwbGl0KCdcXG4nKS5qb2luKCdcXG4nICsgcHJlZml4KTtcblx0XHRhcmdzLnB1c2goY29sb3JDb2RlICsgJ20rJyArIG1vZHVsZS5leHBvcnRzLmh1bWFuaXplKHRoaXMuZGlmZikgKyAnXFx1MDAxQlswbScpO1xuXHR9IGVsc2Uge1xuXHRcdGFyZ3NbMF0gPSBnZXREYXRlKCkgKyBuYW1lICsgJyAnICsgYXJnc1swXTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXREYXRlKCkge1xuXHRpZiAoZXhwb3J0cy5pbnNwZWN0T3B0cy5oaWRlRGF0ZSkge1xuXHRcdHJldHVybiAnJztcblx0fVxuXHRyZXR1cm4gbmV3IERhdGUoKS50b0lTT1N0cmluZygpICsgJyAnO1xufVxuXG4vKipcbiAqIEludm9rZXMgYHV0aWwuZm9ybWF0V2l0aE9wdGlvbnMoKWAgd2l0aCB0aGUgc3BlY2lmaWVkIGFyZ3VtZW50cyBhbmQgd3JpdGVzIHRvIHN0ZGVyci5cbiAqL1xuXG5mdW5jdGlvbiBsb2coLi4uYXJncykge1xuXHRyZXR1cm4gcHJvY2Vzcy5zdGRlcnIud3JpdGUodXRpbC5mb3JtYXRXaXRoT3B0aW9ucyhleHBvcnRzLmluc3BlY3RPcHRzLCAuLi5hcmdzKSArICdcXG4nKTtcbn1cblxuLyoqXG4gKiBTYXZlIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNhdmUobmFtZXNwYWNlcykge1xuXHRpZiAobmFtZXNwYWNlcykge1xuXHRcdHByb2Nlc3MuZW52LkRFQlVHID0gbmFtZXNwYWNlcztcblx0fSBlbHNlIHtcblx0XHQvLyBJZiB5b3Ugc2V0IGEgcHJvY2Vzcy5lbnYgZmllbGQgdG8gbnVsbCBvciB1bmRlZmluZWQsIGl0IGdldHMgY2FzdCB0byB0aGVcblx0XHQvLyBzdHJpbmcgJ251bGwnIG9yICd1bmRlZmluZWQnLiBKdXN0IGRlbGV0ZSBpbnN0ZWFkLlxuXHRcdGRlbGV0ZSBwcm9jZXNzLmVudi5ERUJVRztcblx0fVxufVxuXG4vKipcbiAqIExvYWQgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gcmV0dXJucyB0aGUgcHJldmlvdXNseSBwZXJzaXN0ZWQgZGVidWcgbW9kZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGxvYWQoKSB7XG5cdHJldHVybiBwcm9jZXNzLmVudi5ERUJVRztcbn1cblxuLyoqXG4gKiBJbml0IGxvZ2ljIGZvciBgZGVidWdgIGluc3RhbmNlcy5cbiAqXG4gKiBDcmVhdGUgYSBuZXcgYGluc3BlY3RPcHRzYCBvYmplY3QgaW4gY2FzZSBgdXNlQ29sb3JzYCBpcyBzZXRcbiAqIGRpZmZlcmVudGx5IGZvciBhIHBhcnRpY3VsYXIgYGRlYnVnYCBpbnN0YW5jZS5cbiAqL1xuXG5mdW5jdGlvbiBpbml0KGRlYnVnKSB7XG5cdGRlYnVnLmluc3BlY3RPcHRzID0ge307XG5cblx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGV4cG9ydHMuaW5zcGVjdE9wdHMpO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcblx0XHRkZWJ1Zy5pbnNwZWN0T3B0c1trZXlzW2ldXSA9IGV4cG9ydHMuaW5zcGVjdE9wdHNba2V5c1tpXV07XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2NvbW1vbicpKGV4cG9ydHMpO1xuXG5jb25zdCB7Zm9ybWF0dGVyc30gPSBtb2R1bGUuZXhwb3J0cztcblxuLyoqXG4gKiBNYXAgJW8gdG8gYHV0aWwuaW5zcGVjdCgpYCwgYWxsIG9uIGEgc2luZ2xlIGxpbmUuXG4gKi9cblxuZm9ybWF0dGVycy5vID0gZnVuY3Rpb24gKHYpIHtcblx0dGhpcy5pbnNwZWN0T3B0cy5jb2xvcnMgPSB0aGlzLnVzZUNvbG9ycztcblx0cmV0dXJuIHV0aWwuaW5zcGVjdCh2LCB0aGlzLmluc3BlY3RPcHRzKVxuXHRcdC5zcGxpdCgnXFxuJylcblx0XHQubWFwKHN0ciA9PiBzdHIudHJpbSgpKVxuXHRcdC5qb2luKCcgJyk7XG59O1xuXG4vKipcbiAqIE1hcCAlTyB0byBgdXRpbC5pbnNwZWN0KClgLCBhbGxvd2luZyBtdWx0aXBsZSBsaW5lcyBpZiBuZWVkZWQuXG4gKi9cblxuZm9ybWF0dGVycy5PID0gZnVuY3Rpb24gKHYpIHtcblx0dGhpcy5pbnNwZWN0T3B0cy5jb2xvcnMgPSB0aGlzLnVzZUNvbG9ycztcblx0cmV0dXJuIHV0aWwuaW5zcGVjdCh2LCB0aGlzLmluc3BlY3RPcHRzKTtcbn07XG4iLCJ2YXIgU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJykuU3RyZWFtO1xudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gRGVsYXllZFN0cmVhbTtcbmZ1bmN0aW9uIERlbGF5ZWRTdHJlYW0oKSB7XG4gIHRoaXMuc291cmNlID0gbnVsbDtcbiAgdGhpcy5kYXRhU2l6ZSA9IDA7XG4gIHRoaXMubWF4RGF0YVNpemUgPSAxMDI0ICogMTAyNDtcbiAgdGhpcy5wYXVzZVN0cmVhbSA9IHRydWU7XG5cbiAgdGhpcy5fbWF4RGF0YVNpemVFeGNlZWRlZCA9IGZhbHNlO1xuICB0aGlzLl9yZWxlYXNlZCA9IGZhbHNlO1xuICB0aGlzLl9idWZmZXJlZEV2ZW50cyA9IFtdO1xufVxudXRpbC5pbmhlcml0cyhEZWxheWVkU3RyZWFtLCBTdHJlYW0pO1xuXG5EZWxheWVkU3RyZWFtLmNyZWF0ZSA9IGZ1bmN0aW9uKHNvdXJjZSwgb3B0aW9ucykge1xuICB2YXIgZGVsYXllZFN0cmVhbSA9IG5ldyB0aGlzKCk7XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGZvciAodmFyIG9wdGlvbiBpbiBvcHRpb25zKSB7XG4gICAgZGVsYXllZFN0cmVhbVtvcHRpb25dID0gb3B0aW9uc1tvcHRpb25dO1xuICB9XG5cbiAgZGVsYXllZFN0cmVhbS5zb3VyY2UgPSBzb3VyY2U7XG5cbiAgdmFyIHJlYWxFbWl0ID0gc291cmNlLmVtaXQ7XG4gIHNvdXJjZS5lbWl0ID0gZnVuY3Rpb24oKSB7XG4gICAgZGVsYXllZFN0cmVhbS5faGFuZGxlRW1pdChhcmd1bWVudHMpO1xuICAgIHJldHVybiByZWFsRW1pdC5hcHBseShzb3VyY2UsIGFyZ3VtZW50cyk7XG4gIH07XG5cbiAgc291cmNlLm9uKCdlcnJvcicsIGZ1bmN0aW9uKCkge30pO1xuICBpZiAoZGVsYXllZFN0cmVhbS5wYXVzZVN0cmVhbSkge1xuICAgIHNvdXJjZS5wYXVzZSgpO1xuICB9XG5cbiAgcmV0dXJuIGRlbGF5ZWRTdHJlYW07XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRGVsYXllZFN0cmVhbS5wcm90b3R5cGUsICdyZWFkYWJsZScsIHtcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnNvdXJjZS5yZWFkYWJsZTtcbiAgfVxufSk7XG5cbkRlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLnNldEVuY29kaW5nID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnNvdXJjZS5zZXRFbmNvZGluZy5hcHBseSh0aGlzLnNvdXJjZSwgYXJndW1lbnRzKTtcbn07XG5cbkRlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLnJlc3VtZSA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIXRoaXMuX3JlbGVhc2VkKSB7XG4gICAgdGhpcy5yZWxlYXNlKCk7XG4gIH1cblxuICB0aGlzLnNvdXJjZS5yZXN1bWUoKTtcbn07XG5cbkRlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLnBhdXNlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuc291cmNlLnBhdXNlKCk7XG59O1xuXG5EZWxheWVkU3RyZWFtLnByb3RvdHlwZS5yZWxlYXNlID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX3JlbGVhc2VkID0gdHJ1ZTtcblxuICB0aGlzLl9idWZmZXJlZEV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGFyZ3MpIHtcbiAgICB0aGlzLmVtaXQuYXBwbHkodGhpcywgYXJncyk7XG4gIH0uYmluZCh0aGlzKSk7XG4gIHRoaXMuX2J1ZmZlcmVkRXZlbnRzID0gW107XG59O1xuXG5EZWxheWVkU3RyZWFtLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24oKSB7XG4gIHZhciByID0gU3RyZWFtLnByb3RvdHlwZS5waXBlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIHRoaXMucmVzdW1lKCk7XG4gIHJldHVybiByO1xufTtcblxuRGVsYXllZFN0cmVhbS5wcm90b3R5cGUuX2hhbmRsZUVtaXQgPSBmdW5jdGlvbihhcmdzKSB7XG4gIGlmICh0aGlzLl9yZWxlYXNlZCkge1xuICAgIHRoaXMuZW1pdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoYXJnc1swXSA9PT0gJ2RhdGEnKSB7XG4gICAgdGhpcy5kYXRhU2l6ZSArPSBhcmdzWzFdLmxlbmd0aDtcbiAgICB0aGlzLl9jaGVja0lmTWF4RGF0YVNpemVFeGNlZWRlZCgpO1xuICB9XG5cbiAgdGhpcy5fYnVmZmVyZWRFdmVudHMucHVzaChhcmdzKTtcbn07XG5cbkRlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLl9jaGVja0lmTWF4RGF0YVNpemVFeGNlZWRlZCA9IGZ1bmN0aW9uKCkge1xuICBpZiAodGhpcy5fbWF4RGF0YVNpemVFeGNlZWRlZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh0aGlzLmRhdGFTaXplIDw9IHRoaXMubWF4RGF0YVNpemUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aGlzLl9tYXhEYXRhU2l6ZUV4Y2VlZGVkID0gdHJ1ZTtcbiAgdmFyIG1lc3NhZ2UgPVxuICAgICdEZWxheWVkU3RyZWFtI21heERhdGFTaXplIG9mICcgKyB0aGlzLm1heERhdGFTaXplICsgJyBieXRlcyBleGNlZWRlZC4nXG4gIHRoaXMuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IobWVzc2FnZSkpO1xufTtcbiIsInZhciBkZWJ1ZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICghZGVidWcpIHtcbiAgICB0cnkge1xuICAgICAgLyogZXNsaW50IGdsb2JhbC1yZXF1aXJlOiBvZmYgKi9cbiAgICAgIGRlYnVnID0gcmVxdWlyZShcImRlYnVnXCIpKFwiZm9sbG93LXJlZGlyZWN0c1wiKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IC8qICovIH1cbiAgICBpZiAodHlwZW9mIGRlYnVnICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIGRlYnVnID0gZnVuY3Rpb24gKCkgeyAvKiAqLyB9O1xuICAgIH1cbiAgfVxuICBkZWJ1Zy5hcHBseShudWxsLCBhcmd1bWVudHMpO1xufTtcbiIsInZhciB1cmwgPSByZXF1aXJlKFwidXJsXCIpO1xudmFyIFVSTCA9IHVybC5VUkw7XG52YXIgaHR0cCA9IHJlcXVpcmUoXCJodHRwXCIpO1xudmFyIGh0dHBzID0gcmVxdWlyZShcImh0dHBzXCIpO1xudmFyIFdyaXRhYmxlID0gcmVxdWlyZShcInN0cmVhbVwiKS5Xcml0YWJsZTtcbnZhciBhc3NlcnQgPSByZXF1aXJlKFwiYXNzZXJ0XCIpO1xudmFyIGRlYnVnID0gcmVxdWlyZShcIi4vZGVidWdcIik7XG5cbi8vIFdoZXRoZXIgdG8gdXNlIHRoZSBuYXRpdmUgVVJMIG9iamVjdCBvciB0aGUgbGVnYWN5IHVybCBtb2R1bGVcbnZhciB1c2VOYXRpdmVVUkwgPSBmYWxzZTtcbnRyeSB7XG4gIGFzc2VydChuZXcgVVJMKCkpO1xufVxuY2F0Y2ggKGVycm9yKSB7XG4gIHVzZU5hdGl2ZVVSTCA9IGVycm9yLmNvZGUgPT09IFwiRVJSX0lOVkFMSURfVVJMXCI7XG59XG5cbi8vIFVSTCBmaWVsZHMgdG8gcHJlc2VydmUgaW4gY29weSBvcGVyYXRpb25zXG52YXIgcHJlc2VydmVkVXJsRmllbGRzID0gW1xuICBcImF1dGhcIixcbiAgXCJob3N0XCIsXG4gIFwiaG9zdG5hbWVcIixcbiAgXCJocmVmXCIsXG4gIFwicGF0aFwiLFxuICBcInBhdGhuYW1lXCIsXG4gIFwicG9ydFwiLFxuICBcInByb3RvY29sXCIsXG4gIFwicXVlcnlcIixcbiAgXCJzZWFyY2hcIixcbiAgXCJoYXNoXCIsXG5dO1xuXG4vLyBDcmVhdGUgaGFuZGxlcnMgdGhhdCBwYXNzIGV2ZW50cyBmcm9tIG5hdGl2ZSByZXF1ZXN0c1xudmFyIGV2ZW50cyA9IFtcImFib3J0XCIsIFwiYWJvcnRlZFwiLCBcImNvbm5lY3RcIiwgXCJlcnJvclwiLCBcInNvY2tldFwiLCBcInRpbWVvdXRcIl07XG52YXIgZXZlbnRIYW5kbGVycyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5ldmVudHMuZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcbiAgZXZlbnRIYW5kbGVyc1tldmVudF0gPSBmdW5jdGlvbiAoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIHRoaXMuX3JlZGlyZWN0YWJsZS5lbWl0KGV2ZW50LCBhcmcxLCBhcmcyLCBhcmczKTtcbiAgfTtcbn0pO1xuXG4vLyBFcnJvciB0eXBlcyB3aXRoIGNvZGVzXG52YXIgSW52YWxpZFVybEVycm9yID0gY3JlYXRlRXJyb3JUeXBlKFxuICBcIkVSUl9JTlZBTElEX1VSTFwiLFxuICBcIkludmFsaWQgVVJMXCIsXG4gIFR5cGVFcnJvclxuKTtcbnZhciBSZWRpcmVjdGlvbkVycm9yID0gY3JlYXRlRXJyb3JUeXBlKFxuICBcIkVSUl9GUl9SRURJUkVDVElPTl9GQUlMVVJFXCIsXG4gIFwiUmVkaXJlY3RlZCByZXF1ZXN0IGZhaWxlZFwiXG4pO1xudmFyIFRvb01hbnlSZWRpcmVjdHNFcnJvciA9IGNyZWF0ZUVycm9yVHlwZShcbiAgXCJFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTXCIsXG4gIFwiTWF4aW11bSBudW1iZXIgb2YgcmVkaXJlY3RzIGV4Y2VlZGVkXCIsXG4gIFJlZGlyZWN0aW9uRXJyb3Jcbik7XG52YXIgTWF4Qm9keUxlbmd0aEV4Y2VlZGVkRXJyb3IgPSBjcmVhdGVFcnJvclR5cGUoXG4gIFwiRVJSX0ZSX01BWF9CT0RZX0xFTkdUSF9FWENFRURFRFwiLFxuICBcIlJlcXVlc3QgYm9keSBsYXJnZXIgdGhhbiBtYXhCb2R5TGVuZ3RoIGxpbWl0XCJcbik7XG52YXIgV3JpdGVBZnRlckVuZEVycm9yID0gY3JlYXRlRXJyb3JUeXBlKFxuICBcIkVSUl9TVFJFQU1fV1JJVEVfQUZURVJfRU5EXCIsXG4gIFwid3JpdGUgYWZ0ZXIgZW5kXCJcbik7XG5cbi8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG52YXIgZGVzdHJveSA9IFdyaXRhYmxlLnByb3RvdHlwZS5kZXN0cm95IHx8IG5vb3A7XG5cbi8vIEFuIEhUVFAoUykgcmVxdWVzdCB0aGF0IGNhbiBiZSByZWRpcmVjdGVkXG5mdW5jdGlvbiBSZWRpcmVjdGFibGVSZXF1ZXN0KG9wdGlvbnMsIHJlc3BvbnNlQ2FsbGJhY2spIHtcbiAgLy8gSW5pdGlhbGl6ZSB0aGUgcmVxdWVzdFxuICBXcml0YWJsZS5jYWxsKHRoaXMpO1xuICB0aGlzLl9zYW5pdGl6ZU9wdGlvbnMob3B0aW9ucyk7XG4gIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuICB0aGlzLl9lbmRlZCA9IGZhbHNlO1xuICB0aGlzLl9lbmRpbmcgPSBmYWxzZTtcbiAgdGhpcy5fcmVkaXJlY3RDb3VudCA9IDA7XG4gIHRoaXMuX3JlZGlyZWN0cyA9IFtdO1xuICB0aGlzLl9yZXF1ZXN0Qm9keUxlbmd0aCA9IDA7XG4gIHRoaXMuX3JlcXVlc3RCb2R5QnVmZmVycyA9IFtdO1xuXG4gIC8vIEF0dGFjaCBhIGNhbGxiYWNrIGlmIHBhc3NlZFxuICBpZiAocmVzcG9uc2VDYWxsYmFjaykge1xuICAgIHRoaXMub24oXCJyZXNwb25zZVwiLCByZXNwb25zZUNhbGxiYWNrKTtcbiAgfVxuXG4gIC8vIFJlYWN0IHRvIHJlc3BvbnNlcyBvZiBuYXRpdmUgcmVxdWVzdHNcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB0aGlzLl9vbk5hdGl2ZVJlc3BvbnNlID0gZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgdHJ5IHtcbiAgICAgIHNlbGYuX3Byb2Nlc3NSZXNwb25zZShyZXNwb25zZSk7XG4gICAgfVxuICAgIGNhdGNoIChjYXVzZSkge1xuICAgICAgc2VsZi5lbWl0KFwiZXJyb3JcIiwgY2F1c2UgaW5zdGFuY2VvZiBSZWRpcmVjdGlvbkVycm9yID9cbiAgICAgICAgY2F1c2UgOiBuZXcgUmVkaXJlY3Rpb25FcnJvcih7IGNhdXNlOiBjYXVzZSB9KSk7XG4gICAgfVxuICB9O1xuXG4gIC8vIFBlcmZvcm0gdGhlIGZpcnN0IHJlcXVlc3RcbiAgdGhpcy5fcGVyZm9ybVJlcXVlc3QoKTtcbn1cblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShXcml0YWJsZS5wcm90b3R5cGUpO1xuXG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZS5hYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgZGVzdHJveVJlcXVlc3QodGhpcy5fY3VycmVudFJlcXVlc3QpO1xuICB0aGlzLl9jdXJyZW50UmVxdWVzdC5hYm9ydCgpO1xuICB0aGlzLmVtaXQoXCJhYm9ydFwiKTtcbn07XG5cblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgZGVzdHJveVJlcXVlc3QodGhpcy5fY3VycmVudFJlcXVlc3QsIGVycm9yKTtcbiAgZGVzdHJveS5jYWxsKHRoaXMsIGVycm9yKTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBXcml0ZXMgYnVmZmVyZWQgZGF0YSB0byB0aGUgY3VycmVudCBuYXRpdmUgcmVxdWVzdFxuUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAoZGF0YSwgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gIC8vIFdyaXRpbmcgaXMgbm90IGFsbG93ZWQgaWYgZW5kIGhhcyBiZWVuIGNhbGxlZFxuICBpZiAodGhpcy5fZW5kaW5nKSB7XG4gICAgdGhyb3cgbmV3IFdyaXRlQWZ0ZXJFbmRFcnJvcigpO1xuICB9XG5cbiAgLy8gVmFsaWRhdGUgaW5wdXQgYW5kIHNoaWZ0IHBhcmFtZXRlcnMgaWYgbmVjZXNzYXJ5XG4gIGlmICghaXNTdHJpbmcoZGF0YSkgJiYgIWlzQnVmZmVyKGRhdGEpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImRhdGEgc2hvdWxkIGJlIGEgc3RyaW5nLCBCdWZmZXIgb3IgVWludDhBcnJheVwiKTtcbiAgfVxuICBpZiAoaXNGdW5jdGlvbihlbmNvZGluZykpIHtcbiAgICBjYWxsYmFjayA9IGVuY29kaW5nO1xuICAgIGVuY29kaW5nID0gbnVsbDtcbiAgfVxuXG4gIC8vIElnbm9yZSBlbXB0eSBidWZmZXJzLCBzaW5jZSB3cml0aW5nIHRoZW0gZG9lc24ndCBpbnZva2UgdGhlIGNhbGxiYWNrXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9pc3N1ZXMvMjIwNjZcbiAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cbiAgLy8gT25seSB3cml0ZSB3aGVuIHdlIGRvbid0IGV4Y2VlZCB0aGUgbWF4aW11bSBib2R5IGxlbmd0aFxuICBpZiAodGhpcy5fcmVxdWVzdEJvZHlMZW5ndGggKyBkYXRhLmxlbmd0aCA8PSB0aGlzLl9vcHRpb25zLm1heEJvZHlMZW5ndGgpIHtcbiAgICB0aGlzLl9yZXF1ZXN0Qm9keUxlbmd0aCArPSBkYXRhLmxlbmd0aDtcbiAgICB0aGlzLl9yZXF1ZXN0Qm9keUJ1ZmZlcnMucHVzaCh7IGRhdGE6IGRhdGEsIGVuY29kaW5nOiBlbmNvZGluZyB9KTtcbiAgICB0aGlzLl9jdXJyZW50UmVxdWVzdC53cml0ZShkYXRhLCBlbmNvZGluZywgY2FsbGJhY2spO1xuICB9XG4gIC8vIEVycm9yIHdoZW4gd2UgZXhjZWVkIHRoZSBtYXhpbXVtIGJvZHkgbGVuZ3RoXG4gIGVsc2Uge1xuICAgIHRoaXMuZW1pdChcImVycm9yXCIsIG5ldyBNYXhCb2R5TGVuZ3RoRXhjZWVkZWRFcnJvcigpKTtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cbn07XG5cbi8vIEVuZHMgdGhlIGN1cnJlbnQgbmF0aXZlIHJlcXVlc3RcblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uIChkYXRhLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgLy8gU2hpZnQgcGFyYW1ldGVycyBpZiBuZWNlc3NhcnlcbiAgaWYgKGlzRnVuY3Rpb24oZGF0YSkpIHtcbiAgICBjYWxsYmFjayA9IGRhdGE7XG4gICAgZGF0YSA9IGVuY29kaW5nID0gbnVsbDtcbiAgfVxuICBlbHNlIGlmIChpc0Z1bmN0aW9uKGVuY29kaW5nKSkge1xuICAgIGNhbGxiYWNrID0gZW5jb2Rpbmc7XG4gICAgZW5jb2RpbmcgPSBudWxsO1xuICB9XG5cbiAgLy8gV3JpdGUgZGF0YSBpZiBuZWVkZWQgYW5kIGVuZFxuICBpZiAoIWRhdGEpIHtcbiAgICB0aGlzLl9lbmRlZCA9IHRoaXMuX2VuZGluZyA9IHRydWU7XG4gICAgdGhpcy5fY3VycmVudFJlcXVlc3QuZW5kKG51bGwsIG51bGwsIGNhbGxiYWNrKTtcbiAgfVxuICBlbHNlIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIGN1cnJlbnRSZXF1ZXN0ID0gdGhpcy5fY3VycmVudFJlcXVlc3Q7XG4gICAgdGhpcy53cml0ZShkYXRhLCBlbmNvZGluZywgZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi5fZW5kZWQgPSB0cnVlO1xuICAgICAgY3VycmVudFJlcXVlc3QuZW5kKG51bGwsIG51bGwsIGNhbGxiYWNrKTtcbiAgICB9KTtcbiAgICB0aGlzLl9lbmRpbmcgPSB0cnVlO1xuICB9XG59O1xuXG4vLyBTZXRzIGEgaGVhZGVyIHZhbHVlIG9uIHRoZSBjdXJyZW50IG5hdGl2ZSByZXF1ZXN0XG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZS5zZXRIZWFkZXIgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgdGhpcy5fb3B0aW9ucy5oZWFkZXJzW25hbWVdID0gdmFsdWU7XG4gIHRoaXMuX2N1cnJlbnRSZXF1ZXN0LnNldEhlYWRlcihuYW1lLCB2YWx1ZSk7XG59O1xuXG4vLyBDbGVhcnMgYSBoZWFkZXIgdmFsdWUgb24gdGhlIGN1cnJlbnQgbmF0aXZlIHJlcXVlc3RcblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLnJlbW92ZUhlYWRlciA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIGRlbGV0ZSB0aGlzLl9vcHRpb25zLmhlYWRlcnNbbmFtZV07XG4gIHRoaXMuX2N1cnJlbnRSZXF1ZXN0LnJlbW92ZUhlYWRlcihuYW1lKTtcbn07XG5cbi8vIEdsb2JhbCB0aW1lb3V0IGZvciBhbGwgdW5kZXJseWluZyByZXF1ZXN0c1xuUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUuc2V0VGltZW91dCA9IGZ1bmN0aW9uIChtc2VjcywgY2FsbGJhY2spIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIC8vIERlc3Ryb3lzIHRoZSBzb2NrZXQgb24gdGltZW91dFxuICBmdW5jdGlvbiBkZXN0cm95T25UaW1lb3V0KHNvY2tldCkge1xuICAgIHNvY2tldC5zZXRUaW1lb3V0KG1zZWNzKTtcbiAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoXCJ0aW1lb3V0XCIsIHNvY2tldC5kZXN0cm95KTtcbiAgICBzb2NrZXQuYWRkTGlzdGVuZXIoXCJ0aW1lb3V0XCIsIHNvY2tldC5kZXN0cm95KTtcbiAgfVxuXG4gIC8vIFNldHMgdXAgYSB0aW1lciB0byB0cmlnZ2VyIGEgdGltZW91dCBldmVudFxuICBmdW5jdGlvbiBzdGFydFRpbWVyKHNvY2tldCkge1xuICAgIGlmIChzZWxmLl90aW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQoc2VsZi5fdGltZW91dCk7XG4gICAgfVxuICAgIHNlbGYuX3RpbWVvdXQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYuZW1pdChcInRpbWVvdXRcIik7XG4gICAgICBjbGVhclRpbWVyKCk7XG4gICAgfSwgbXNlY3MpO1xuICAgIGRlc3Ryb3lPblRpbWVvdXQoc29ja2V0KTtcbiAgfVxuXG4gIC8vIFN0b3BzIGEgdGltZW91dCBmcm9tIHRyaWdnZXJpbmdcbiAgZnVuY3Rpb24gY2xlYXJUaW1lcigpIHtcbiAgICAvLyBDbGVhciB0aGUgdGltZW91dFxuICAgIGlmIChzZWxmLl90aW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQoc2VsZi5fdGltZW91dCk7XG4gICAgICBzZWxmLl90aW1lb3V0ID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBDbGVhbiB1cCBhbGwgYXR0YWNoZWQgbGlzdGVuZXJzXG4gICAgc2VsZi5yZW1vdmVMaXN0ZW5lcihcImFib3J0XCIsIGNsZWFyVGltZXIpO1xuICAgIHNlbGYucmVtb3ZlTGlzdGVuZXIoXCJlcnJvclwiLCBjbGVhclRpbWVyKTtcbiAgICBzZWxmLnJlbW92ZUxpc3RlbmVyKFwicmVzcG9uc2VcIiwgY2xlYXJUaW1lcik7XG4gICAgc2VsZi5yZW1vdmVMaXN0ZW5lcihcImNsb3NlXCIsIGNsZWFyVGltZXIpO1xuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgc2VsZi5yZW1vdmVMaXN0ZW5lcihcInRpbWVvdXRcIiwgY2FsbGJhY2spO1xuICAgIH1cbiAgICBpZiAoIXNlbGYuc29ja2V0KSB7XG4gICAgICBzZWxmLl9jdXJyZW50UmVxdWVzdC5yZW1vdmVMaXN0ZW5lcihcInNvY2tldFwiLCBzdGFydFRpbWVyKTtcbiAgICB9XG4gIH1cblxuICAvLyBBdHRhY2ggY2FsbGJhY2sgaWYgcGFzc2VkXG4gIGlmIChjYWxsYmFjaykge1xuICAgIHRoaXMub24oXCJ0aW1lb3V0XCIsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIC8vIFN0YXJ0IHRoZSB0aW1lciBpZiBvciB3aGVuIHRoZSBzb2NrZXQgaXMgb3BlbmVkXG4gIGlmICh0aGlzLnNvY2tldCkge1xuICAgIHN0YXJ0VGltZXIodGhpcy5zb2NrZXQpO1xuICB9XG4gIGVsc2Uge1xuICAgIHRoaXMuX2N1cnJlbnRSZXF1ZXN0Lm9uY2UoXCJzb2NrZXRcIiwgc3RhcnRUaW1lcik7XG4gIH1cblxuICAvLyBDbGVhbiB1cCBvbiBldmVudHNcbiAgdGhpcy5vbihcInNvY2tldFwiLCBkZXN0cm95T25UaW1lb3V0KTtcbiAgdGhpcy5vbihcImFib3J0XCIsIGNsZWFyVGltZXIpO1xuICB0aGlzLm9uKFwiZXJyb3JcIiwgY2xlYXJUaW1lcik7XG4gIHRoaXMub24oXCJyZXNwb25zZVwiLCBjbGVhclRpbWVyKTtcbiAgdGhpcy5vbihcImNsb3NlXCIsIGNsZWFyVGltZXIpO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gUHJveHkgYWxsIG90aGVyIHB1YmxpYyBDbGllbnRSZXF1ZXN0IG1ldGhvZHNcbltcbiAgXCJmbHVzaEhlYWRlcnNcIiwgXCJnZXRIZWFkZXJcIixcbiAgXCJzZXROb0RlbGF5XCIsIFwic2V0U29ja2V0S2VlcEFsaXZlXCIsXG5dLmZvckVhY2goZnVuY3Rpb24gKG1ldGhvZCkge1xuICBSZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudFJlcXVlc3RbbWV0aG9kXShhLCBiKTtcbiAgfTtcbn0pO1xuXG4vLyBQcm94eSBhbGwgcHVibGljIENsaWVudFJlcXVlc3QgcHJvcGVydGllc1xuW1wiYWJvcnRlZFwiLCBcImNvbm5lY3Rpb25cIiwgXCJzb2NrZXRcIl0uZm9yRWFjaChmdW5jdGlvbiAocHJvcGVydHkpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLCBwcm9wZXJ0eSwge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fY3VycmVudFJlcXVlc3RbcHJvcGVydHldOyB9LFxuICB9KTtcbn0pO1xuXG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZS5fc2FuaXRpemVPcHRpb25zID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgLy8gRW5zdXJlIGhlYWRlcnMgYXJlIGFsd2F5cyBwcmVzZW50XG4gIGlmICghb3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgb3B0aW9ucy5oZWFkZXJzID0ge307XG4gIH1cblxuICAvLyBTaW5jZSBodHRwLnJlcXVlc3QgdHJlYXRzIGhvc3QgYXMgYW4gYWxpYXMgb2YgaG9zdG5hbWUsXG4gIC8vIGJ1dCB0aGUgdXJsIG1vZHVsZSBpbnRlcnByZXRzIGhvc3QgYXMgaG9zdG5hbWUgcGx1cyBwb3J0LFxuICAvLyBlbGltaW5hdGUgdGhlIGhvc3QgcHJvcGVydHkgdG8gYXZvaWQgY29uZnVzaW9uLlxuICBpZiAob3B0aW9ucy5ob3N0KSB7XG4gICAgLy8gVXNlIGhvc3RuYW1lIGlmIHNldCwgYmVjYXVzZSBpdCBoYXMgcHJlY2VkZW5jZVxuICAgIGlmICghb3B0aW9ucy5ob3N0bmFtZSkge1xuICAgICAgb3B0aW9ucy5ob3N0bmFtZSA9IG9wdGlvbnMuaG9zdDtcbiAgICB9XG4gICAgZGVsZXRlIG9wdGlvbnMuaG9zdDtcbiAgfVxuXG4gIC8vIENvbXBsZXRlIHRoZSBVUkwgb2JqZWN0IHdoZW4gbmVjZXNzYXJ5XG4gIGlmICghb3B0aW9ucy5wYXRobmFtZSAmJiBvcHRpb25zLnBhdGgpIHtcbiAgICB2YXIgc2VhcmNoUG9zID0gb3B0aW9ucy5wYXRoLmluZGV4T2YoXCI/XCIpO1xuICAgIGlmIChzZWFyY2hQb3MgPCAwKSB7XG4gICAgICBvcHRpb25zLnBhdGhuYW1lID0gb3B0aW9ucy5wYXRoO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIG9wdGlvbnMucGF0aG5hbWUgPSBvcHRpb25zLnBhdGguc3Vic3RyaW5nKDAsIHNlYXJjaFBvcyk7XG4gICAgICBvcHRpb25zLnNlYXJjaCA9IG9wdGlvbnMucGF0aC5zdWJzdHJpbmcoc2VhcmNoUG9zKTtcbiAgICB9XG4gIH1cbn07XG5cblxuLy8gRXhlY3V0ZXMgdGhlIG5leHQgbmF0aXZlIHJlcXVlc3QgKGluaXRpYWwgb3IgcmVkaXJlY3QpXG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZS5fcGVyZm9ybVJlcXVlc3QgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIExvYWQgdGhlIG5hdGl2ZSBwcm90b2NvbFxuICB2YXIgcHJvdG9jb2wgPSB0aGlzLl9vcHRpb25zLnByb3RvY29sO1xuICB2YXIgbmF0aXZlUHJvdG9jb2wgPSB0aGlzLl9vcHRpb25zLm5hdGl2ZVByb3RvY29sc1twcm90b2NvbF07XG4gIGlmICghbmF0aXZlUHJvdG9jb2wpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5zdXBwb3J0ZWQgcHJvdG9jb2wgXCIgKyBwcm90b2NvbCk7XG4gIH1cblxuICAvLyBJZiBzcGVjaWZpZWQsIHVzZSB0aGUgYWdlbnQgY29ycmVzcG9uZGluZyB0byB0aGUgcHJvdG9jb2xcbiAgLy8gKEhUVFAgYW5kIEhUVFBTIHVzZSBkaWZmZXJlbnQgdHlwZXMgb2YgYWdlbnRzKVxuICBpZiAodGhpcy5fb3B0aW9ucy5hZ2VudHMpIHtcbiAgICB2YXIgc2NoZW1lID0gcHJvdG9jb2wuc2xpY2UoMCwgLTEpO1xuICAgIHRoaXMuX29wdGlvbnMuYWdlbnQgPSB0aGlzLl9vcHRpb25zLmFnZW50c1tzY2hlbWVdO1xuICB9XG5cbiAgLy8gQ3JlYXRlIHRoZSBuYXRpdmUgcmVxdWVzdCBhbmQgc2V0IHVwIGl0cyBldmVudCBoYW5kbGVyc1xuICB2YXIgcmVxdWVzdCA9IHRoaXMuX2N1cnJlbnRSZXF1ZXN0ID1cbiAgICAgICAgbmF0aXZlUHJvdG9jb2wucmVxdWVzdCh0aGlzLl9vcHRpb25zLCB0aGlzLl9vbk5hdGl2ZVJlc3BvbnNlKTtcbiAgcmVxdWVzdC5fcmVkaXJlY3RhYmxlID0gdGhpcztcbiAgZm9yICh2YXIgZXZlbnQgb2YgZXZlbnRzKSB7XG4gICAgcmVxdWVzdC5vbihldmVudCwgZXZlbnRIYW5kbGVyc1tldmVudF0pO1xuICB9XG5cbiAgLy8gUkZDNzIzMMKnNS4zLjE6IFdoZW4gbWFraW5nIGEgcmVxdWVzdCBkaXJlY3RseSB0byBhbiBvcmlnaW4gc2VydmVyLCBb4oCmXVxuICAvLyBhIGNsaWVudCBNVVNUIHNlbmQgb25seSB0aGUgYWJzb2x1dGUgcGF0aCBb4oCmXSBhcyB0aGUgcmVxdWVzdC10YXJnZXQuXG4gIHRoaXMuX2N1cnJlbnRVcmwgPSAvXlxcLy8udGVzdCh0aGlzLl9vcHRpb25zLnBhdGgpID9cbiAgICB1cmwuZm9ybWF0KHRoaXMuX29wdGlvbnMpIDpcbiAgICAvLyBXaGVuIG1ha2luZyBhIHJlcXVlc3QgdG8gYSBwcm94eSwgW+KApl1cbiAgICAvLyBhIGNsaWVudCBNVVNUIHNlbmQgdGhlIHRhcmdldCBVUkkgaW4gYWJzb2x1dGUtZm9ybSBb4oCmXS5cbiAgICB0aGlzLl9vcHRpb25zLnBhdGg7XG5cbiAgLy8gRW5kIGEgcmVkaXJlY3RlZCByZXF1ZXN0XG4gIC8vIChUaGUgZmlyc3QgcmVxdWVzdCBtdXN0IGJlIGVuZGVkIGV4cGxpY2l0bHkgd2l0aCBSZWRpcmVjdGFibGVSZXF1ZXN0I2VuZClcbiAgaWYgKHRoaXMuX2lzUmVkaXJlY3QpIHtcbiAgICAvLyBXcml0ZSB0aGUgcmVxdWVzdCBlbnRpdHkgYW5kIGVuZFxuICAgIHZhciBpID0gMDtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIGJ1ZmZlcnMgPSB0aGlzLl9yZXF1ZXN0Qm9keUJ1ZmZlcnM7XG4gICAgKGZ1bmN0aW9uIHdyaXRlTmV4dChlcnJvcikge1xuICAgICAgLy8gT25seSB3cml0ZSBpZiB0aGlzIHJlcXVlc3QgaGFzIG5vdCBiZWVuIHJlZGlyZWN0ZWQgeWV0XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKHJlcXVlc3QgPT09IHNlbGYuX2N1cnJlbnRSZXF1ZXN0KSB7XG4gICAgICAgIC8vIFJlcG9ydCBhbnkgd3JpdGUgZXJyb3JzXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICBzZWxmLmVtaXQoXCJlcnJvclwiLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gV3JpdGUgdGhlIG5leHQgYnVmZmVyIGlmIHRoZXJlIGFyZSBzdGlsbCBsZWZ0XG4gICAgICAgIGVsc2UgaWYgKGkgPCBidWZmZXJzLmxlbmd0aCkge1xuICAgICAgICAgIHZhciBidWZmZXIgPSBidWZmZXJzW2krK107XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICBpZiAoIXJlcXVlc3QuZmluaXNoZWQpIHtcbiAgICAgICAgICAgIHJlcXVlc3Qud3JpdGUoYnVmZmVyLmRhdGEsIGJ1ZmZlci5lbmNvZGluZywgd3JpdGVOZXh0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gRW5kIHRoZSByZXF1ZXN0IGlmIGBlbmRgIGhhcyBiZWVuIGNhbGxlZCBvbiB1c1xuICAgICAgICBlbHNlIGlmIChzZWxmLl9lbmRlZCkge1xuICAgICAgICAgIHJlcXVlc3QuZW5kKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KCkpO1xuICB9XG59O1xuXG4vLyBQcm9jZXNzZXMgYSByZXNwb25zZSBmcm9tIHRoZSBjdXJyZW50IG5hdGl2ZSByZXF1ZXN0XG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZS5fcHJvY2Vzc1Jlc3BvbnNlID0gZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gIC8vIFN0b3JlIHRoZSByZWRpcmVjdGVkIHJlc3BvbnNlXG4gIHZhciBzdGF0dXNDb2RlID0gcmVzcG9uc2Uuc3RhdHVzQ29kZTtcbiAgaWYgKHRoaXMuX29wdGlvbnMudHJhY2tSZWRpcmVjdHMpIHtcbiAgICB0aGlzLl9yZWRpcmVjdHMucHVzaCh7XG4gICAgICB1cmw6IHRoaXMuX2N1cnJlbnRVcmwsXG4gICAgICBoZWFkZXJzOiByZXNwb25zZS5oZWFkZXJzLFxuICAgICAgc3RhdHVzQ29kZTogc3RhdHVzQ29kZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFJGQzcyMzHCpzYuNDogVGhlIDN4eCAoUmVkaXJlY3Rpb24pIGNsYXNzIG9mIHN0YXR1cyBjb2RlIGluZGljYXRlc1xuICAvLyB0aGF0IGZ1cnRoZXIgYWN0aW9uIG5lZWRzIHRvIGJlIHRha2VuIGJ5IHRoZSB1c2VyIGFnZW50IGluIG9yZGVyIHRvXG4gIC8vIGZ1bGZpbGwgdGhlIHJlcXVlc3QuIElmIGEgTG9jYXRpb24gaGVhZGVyIGZpZWxkIGlzIHByb3ZpZGVkLFxuICAvLyB0aGUgdXNlciBhZ2VudCBNQVkgYXV0b21hdGljYWxseSByZWRpcmVjdCBpdHMgcmVxdWVzdCB0byB0aGUgVVJJXG4gIC8vIHJlZmVyZW5jZWQgYnkgdGhlIExvY2F0aW9uIGZpZWxkIHZhbHVlLFxuICAvLyBldmVuIGlmIHRoZSBzcGVjaWZpYyBzdGF0dXMgY29kZSBpcyBub3QgdW5kZXJzdG9vZC5cblxuICAvLyBJZiB0aGUgcmVzcG9uc2UgaXMgbm90IGEgcmVkaXJlY3Q7IHJldHVybiBpdCBhcy1pc1xuICB2YXIgbG9jYXRpb24gPSByZXNwb25zZS5oZWFkZXJzLmxvY2F0aW9uO1xuICBpZiAoIWxvY2F0aW9uIHx8IHRoaXMuX29wdGlvbnMuZm9sbG93UmVkaXJlY3RzID09PSBmYWxzZSB8fFxuICAgICAgc3RhdHVzQ29kZSA8IDMwMCB8fCBzdGF0dXNDb2RlID49IDQwMCkge1xuICAgIHJlc3BvbnNlLnJlc3BvbnNlVXJsID0gdGhpcy5fY3VycmVudFVybDtcbiAgICByZXNwb25zZS5yZWRpcmVjdHMgPSB0aGlzLl9yZWRpcmVjdHM7XG4gICAgdGhpcy5lbWl0KFwicmVzcG9uc2VcIiwgcmVzcG9uc2UpO1xuXG4gICAgLy8gQ2xlYW4gdXBcbiAgICB0aGlzLl9yZXF1ZXN0Qm9keUJ1ZmZlcnMgPSBbXTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBUaGUgcmVzcG9uc2UgaXMgYSByZWRpcmVjdCwgc28gYWJvcnQgdGhlIGN1cnJlbnQgcmVxdWVzdFxuICBkZXN0cm95UmVxdWVzdCh0aGlzLl9jdXJyZW50UmVxdWVzdCk7XG4gIC8vIERpc2NhcmQgdGhlIHJlbWFpbmRlciBvZiB0aGUgcmVzcG9uc2UgdG8gYXZvaWQgd2FpdGluZyBmb3IgZGF0YVxuICByZXNwb25zZS5kZXN0cm95KCk7XG5cbiAgLy8gUkZDNzIzMcKnNi40OiBBIGNsaWVudCBTSE9VTEQgZGV0ZWN0IGFuZCBpbnRlcnZlbmVcbiAgLy8gaW4gY3ljbGljYWwgcmVkaXJlY3Rpb25zIChpLmUuLCBcImluZmluaXRlXCIgcmVkaXJlY3Rpb24gbG9vcHMpLlxuICBpZiAoKyt0aGlzLl9yZWRpcmVjdENvdW50ID4gdGhpcy5fb3B0aW9ucy5tYXhSZWRpcmVjdHMpIHtcbiAgICB0aHJvdyBuZXcgVG9vTWFueVJlZGlyZWN0c0Vycm9yKCk7XG4gIH1cblxuICAvLyBTdG9yZSB0aGUgcmVxdWVzdCBoZWFkZXJzIGlmIGFwcGxpY2FibGVcbiAgdmFyIHJlcXVlc3RIZWFkZXJzO1xuICB2YXIgYmVmb3JlUmVkaXJlY3QgPSB0aGlzLl9vcHRpb25zLmJlZm9yZVJlZGlyZWN0O1xuICBpZiAoYmVmb3JlUmVkaXJlY3QpIHtcbiAgICByZXF1ZXN0SGVhZGVycyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgLy8gVGhlIEhvc3QgaGVhZGVyIHdhcyBzZXQgYnkgbmF0aXZlUHJvdG9jb2wucmVxdWVzdFxuICAgICAgSG9zdDogcmVzcG9uc2UucmVxLmdldEhlYWRlcihcImhvc3RcIiksXG4gICAgfSwgdGhpcy5fb3B0aW9ucy5oZWFkZXJzKTtcbiAgfVxuXG4gIC8vIFJGQzcyMzHCpzYuNDogQXV0b21hdGljIHJlZGlyZWN0aW9uIG5lZWRzIHRvIGRvbmUgd2l0aFxuICAvLyBjYXJlIGZvciBtZXRob2RzIG5vdCBrbm93biB0byBiZSBzYWZlLCBb4oCmXVxuICAvLyBSRkM3MjMxwqc2LjQuMuKAkzM6IEZvciBoaXN0b3JpY2FsIHJlYXNvbnMsIGEgdXNlciBhZ2VudCBNQVkgY2hhbmdlXG4gIC8vIHRoZSByZXF1ZXN0IG1ldGhvZCBmcm9tIFBPU1QgdG8gR0VUIGZvciB0aGUgc3Vic2VxdWVudCByZXF1ZXN0LlxuICB2YXIgbWV0aG9kID0gdGhpcy5fb3B0aW9ucy5tZXRob2Q7XG4gIGlmICgoc3RhdHVzQ29kZSA9PT0gMzAxIHx8IHN0YXR1c0NvZGUgPT09IDMwMikgJiYgdGhpcy5fb3B0aW9ucy5tZXRob2QgPT09IFwiUE9TVFwiIHx8XG4gICAgICAvLyBSRkM3MjMxwqc2LjQuNDogVGhlIDMwMyAoU2VlIE90aGVyKSBzdGF0dXMgY29kZSBpbmRpY2F0ZXMgdGhhdFxuICAgICAgLy8gdGhlIHNlcnZlciBpcyByZWRpcmVjdGluZyB0aGUgdXNlciBhZ2VudCB0byBhIGRpZmZlcmVudCByZXNvdXJjZSBb4oCmXVxuICAgICAgLy8gQSB1c2VyIGFnZW50IGNhbiBwZXJmb3JtIGEgcmV0cmlldmFsIHJlcXVlc3QgdGFyZ2V0aW5nIHRoYXQgVVJJXG4gICAgICAvLyAoYSBHRVQgb3IgSEVBRCByZXF1ZXN0IGlmIHVzaW5nIEhUVFApIFvigKZdXG4gICAgICAoc3RhdHVzQ29kZSA9PT0gMzAzKSAmJiAhL14oPzpHRVR8SEVBRCkkLy50ZXN0KHRoaXMuX29wdGlvbnMubWV0aG9kKSkge1xuICAgIHRoaXMuX29wdGlvbnMubWV0aG9kID0gXCJHRVRcIjtcbiAgICAvLyBEcm9wIGEgcG9zc2libGUgZW50aXR5IGFuZCBoZWFkZXJzIHJlbGF0ZWQgdG8gaXRcbiAgICB0aGlzLl9yZXF1ZXN0Qm9keUJ1ZmZlcnMgPSBbXTtcbiAgICByZW1vdmVNYXRjaGluZ0hlYWRlcnMoL15jb250ZW50LS9pLCB0aGlzLl9vcHRpb25zLmhlYWRlcnMpO1xuICB9XG5cbiAgLy8gRHJvcCB0aGUgSG9zdCBoZWFkZXIsIGFzIHRoZSByZWRpcmVjdCBtaWdodCBsZWFkIHRvIGEgZGlmZmVyZW50IGhvc3RcbiAgdmFyIGN1cnJlbnRIb3N0SGVhZGVyID0gcmVtb3ZlTWF0Y2hpbmdIZWFkZXJzKC9eaG9zdCQvaSwgdGhpcy5fb3B0aW9ucy5oZWFkZXJzKTtcblxuICAvLyBJZiB0aGUgcmVkaXJlY3QgaXMgcmVsYXRpdmUsIGNhcnJ5IG92ZXIgdGhlIGhvc3Qgb2YgdGhlIGxhc3QgcmVxdWVzdFxuICB2YXIgY3VycmVudFVybFBhcnRzID0gcGFyc2VVcmwodGhpcy5fY3VycmVudFVybCk7XG4gIHZhciBjdXJyZW50SG9zdCA9IGN1cnJlbnRIb3N0SGVhZGVyIHx8IGN1cnJlbnRVcmxQYXJ0cy5ob3N0O1xuICB2YXIgY3VycmVudFVybCA9IC9eXFx3KzovLnRlc3QobG9jYXRpb24pID8gdGhpcy5fY3VycmVudFVybCA6XG4gICAgdXJsLmZvcm1hdChPYmplY3QuYXNzaWduKGN1cnJlbnRVcmxQYXJ0cywgeyBob3N0OiBjdXJyZW50SG9zdCB9KSk7XG5cbiAgLy8gQ3JlYXRlIHRoZSByZWRpcmVjdGVkIHJlcXVlc3RcbiAgdmFyIHJlZGlyZWN0VXJsID0gcmVzb2x2ZVVybChsb2NhdGlvbiwgY3VycmVudFVybCk7XG4gIGRlYnVnKFwicmVkaXJlY3RpbmcgdG9cIiwgcmVkaXJlY3RVcmwuaHJlZik7XG4gIHRoaXMuX2lzUmVkaXJlY3QgPSB0cnVlO1xuICBzcHJlYWRVcmxPYmplY3QocmVkaXJlY3RVcmwsIHRoaXMuX29wdGlvbnMpO1xuXG4gIC8vIERyb3AgY29uZmlkZW50aWFsIGhlYWRlcnMgd2hlbiByZWRpcmVjdGluZyB0byBhIGxlc3Mgc2VjdXJlIHByb3RvY29sXG4gIC8vIG9yIHRvIGEgZGlmZmVyZW50IGRvbWFpbiB0aGF0IGlzIG5vdCBhIHN1cGVyZG9tYWluXG4gIGlmIChyZWRpcmVjdFVybC5wcm90b2NvbCAhPT0gY3VycmVudFVybFBhcnRzLnByb3RvY29sICYmXG4gICAgIHJlZGlyZWN0VXJsLnByb3RvY29sICE9PSBcImh0dHBzOlwiIHx8XG4gICAgIHJlZGlyZWN0VXJsLmhvc3QgIT09IGN1cnJlbnRIb3N0ICYmXG4gICAgICFpc1N1YmRvbWFpbihyZWRpcmVjdFVybC5ob3N0LCBjdXJyZW50SG9zdCkpIHtcbiAgICByZW1vdmVNYXRjaGluZ0hlYWRlcnMoL14oPzooPzpwcm94eS0pP2F1dGhvcml6YXRpb258Y29va2llKSQvaSwgdGhpcy5fb3B0aW9ucy5oZWFkZXJzKTtcbiAgfVxuXG4gIC8vIEV2YWx1YXRlIHRoZSBiZWZvcmVSZWRpcmVjdCBjYWxsYmFja1xuICBpZiAoaXNGdW5jdGlvbihiZWZvcmVSZWRpcmVjdCkpIHtcbiAgICB2YXIgcmVzcG9uc2VEZXRhaWxzID0ge1xuICAgICAgaGVhZGVyczogcmVzcG9uc2UuaGVhZGVycyxcbiAgICAgIHN0YXR1c0NvZGU6IHN0YXR1c0NvZGUsXG4gICAgfTtcbiAgICB2YXIgcmVxdWVzdERldGFpbHMgPSB7XG4gICAgICB1cmw6IGN1cnJlbnRVcmwsXG4gICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgIH07XG4gICAgYmVmb3JlUmVkaXJlY3QodGhpcy5fb3B0aW9ucywgcmVzcG9uc2VEZXRhaWxzLCByZXF1ZXN0RGV0YWlscyk7XG4gICAgdGhpcy5fc2FuaXRpemVPcHRpb25zKHRoaXMuX29wdGlvbnMpO1xuICB9XG5cbiAgLy8gUGVyZm9ybSB0aGUgcmVkaXJlY3RlZCByZXF1ZXN0XG4gIHRoaXMuX3BlcmZvcm1SZXF1ZXN0KCk7XG59O1xuXG4vLyBXcmFwcyB0aGUga2V5L3ZhbHVlIG9iamVjdCBvZiBwcm90b2NvbHMgd2l0aCByZWRpcmVjdCBmdW5jdGlvbmFsaXR5XG5mdW5jdGlvbiB3cmFwKHByb3RvY29scykge1xuICAvLyBEZWZhdWx0IHNldHRpbmdzXG4gIHZhciBleHBvcnRzID0ge1xuICAgIG1heFJlZGlyZWN0czogMjEsXG4gICAgbWF4Qm9keUxlbmd0aDogMTAgKiAxMDI0ICogMTAyNCxcbiAgfTtcblxuICAvLyBXcmFwIGVhY2ggcHJvdG9jb2xcbiAgdmFyIG5hdGl2ZVByb3RvY29scyA9IHt9O1xuICBPYmplY3Qua2V5cyhwcm90b2NvbHMpLmZvckVhY2goZnVuY3Rpb24gKHNjaGVtZSkge1xuICAgIHZhciBwcm90b2NvbCA9IHNjaGVtZSArIFwiOlwiO1xuICAgIHZhciBuYXRpdmVQcm90b2NvbCA9IG5hdGl2ZVByb3RvY29sc1twcm90b2NvbF0gPSBwcm90b2NvbHNbc2NoZW1lXTtcbiAgICB2YXIgd3JhcHBlZFByb3RvY29sID0gZXhwb3J0c1tzY2hlbWVdID0gT2JqZWN0LmNyZWF0ZShuYXRpdmVQcm90b2NvbCk7XG5cbiAgICAvLyBFeGVjdXRlcyBhIHJlcXVlc3QsIGZvbGxvd2luZyByZWRpcmVjdHNcbiAgICBmdW5jdGlvbiByZXF1ZXN0KGlucHV0LCBvcHRpb25zLCBjYWxsYmFjaykge1xuICAgICAgLy8gUGFyc2UgcGFyYW1ldGVycywgZW5zdXJpbmcgdGhhdCBpbnB1dCBpcyBhbiBvYmplY3RcbiAgICAgIGlmIChpc1VSTChpbnB1dCkpIHtcbiAgICAgICAgaW5wdXQgPSBzcHJlYWRVcmxPYmplY3QoaW5wdXQpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoaXNTdHJpbmcoaW5wdXQpKSB7XG4gICAgICAgIGlucHV0ID0gc3ByZWFkVXJsT2JqZWN0KHBhcnNlVXJsKGlucHV0KSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2sgPSBvcHRpb25zO1xuICAgICAgICBvcHRpb25zID0gdmFsaWRhdGVVcmwoaW5wdXQpO1xuICAgICAgICBpbnB1dCA9IHsgcHJvdG9jb2w6IHByb3RvY29sIH07XG4gICAgICB9XG4gICAgICBpZiAoaXNGdW5jdGlvbihvcHRpb25zKSkge1xuICAgICAgICBjYWxsYmFjayA9IG9wdGlvbnM7XG4gICAgICAgIG9wdGlvbnMgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyBTZXQgZGVmYXVsdHNcbiAgICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgbWF4UmVkaXJlY3RzOiBleHBvcnRzLm1heFJlZGlyZWN0cyxcbiAgICAgICAgbWF4Qm9keUxlbmd0aDogZXhwb3J0cy5tYXhCb2R5TGVuZ3RoLFxuICAgICAgfSwgaW5wdXQsIG9wdGlvbnMpO1xuICAgICAgb3B0aW9ucy5uYXRpdmVQcm90b2NvbHMgPSBuYXRpdmVQcm90b2NvbHM7XG4gICAgICBpZiAoIWlzU3RyaW5nKG9wdGlvbnMuaG9zdCkgJiYgIWlzU3RyaW5nKG9wdGlvbnMuaG9zdG5hbWUpKSB7XG4gICAgICAgIG9wdGlvbnMuaG9zdG5hbWUgPSBcIjo6MVwiO1xuICAgICAgfVxuXG4gICAgICBhc3NlcnQuZXF1YWwob3B0aW9ucy5wcm90b2NvbCwgcHJvdG9jb2wsIFwicHJvdG9jb2wgbWlzbWF0Y2hcIik7XG4gICAgICBkZWJ1ZyhcIm9wdGlvbnNcIiwgb3B0aW9ucyk7XG4gICAgICByZXR1cm4gbmV3IFJlZGlyZWN0YWJsZVJlcXVlc3Qob3B0aW9ucywgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIC8vIEV4ZWN1dGVzIGEgR0VUIHJlcXVlc3QsIGZvbGxvd2luZyByZWRpcmVjdHNcbiAgICBmdW5jdGlvbiBnZXQoaW5wdXQsIG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gICAgICB2YXIgd3JhcHBlZFJlcXVlc3QgPSB3cmFwcGVkUHJvdG9jb2wucmVxdWVzdChpbnB1dCwgb3B0aW9ucywgY2FsbGJhY2spO1xuICAgICAgd3JhcHBlZFJlcXVlc3QuZW5kKCk7XG4gICAgICByZXR1cm4gd3JhcHBlZFJlcXVlc3Q7XG4gICAgfVxuXG4gICAgLy8gRXhwb3NlIHRoZSBwcm9wZXJ0aWVzIG9uIHRoZSB3cmFwcGVkIHByb3RvY29sXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMod3JhcHBlZFByb3RvY29sLCB7XG4gICAgICByZXF1ZXN0OiB7IHZhbHVlOiByZXF1ZXN0LCBjb25maWd1cmFibGU6IHRydWUsIGVudW1lcmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0sXG4gICAgICBnZXQ6IHsgdmFsdWU6IGdldCwgY29uZmlndXJhYmxlOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9LFxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIGV4cG9ydHM7XG59XG5cbmZ1bmN0aW9uIG5vb3AoKSB7IC8qIGVtcHR5ICovIH1cblxuZnVuY3Rpb24gcGFyc2VVcmwoaW5wdXQpIHtcbiAgdmFyIHBhcnNlZDtcbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKHVzZU5hdGl2ZVVSTCkge1xuICAgIHBhcnNlZCA9IG5ldyBVUkwoaW5wdXQpO1xuICB9XG4gIGVsc2Uge1xuICAgIC8vIEVuc3VyZSB0aGUgVVJMIGlzIHZhbGlkIGFuZCBhYnNvbHV0ZVxuICAgIHBhcnNlZCA9IHZhbGlkYXRlVXJsKHVybC5wYXJzZShpbnB1dCkpO1xuICAgIGlmICghaXNTdHJpbmcocGFyc2VkLnByb3RvY29sKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRVcmxFcnJvcih7IGlucHV0IH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcGFyc2VkO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlVXJsKHJlbGF0aXZlLCBiYXNlKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIHJldHVybiB1c2VOYXRpdmVVUkwgPyBuZXcgVVJMKHJlbGF0aXZlLCBiYXNlKSA6IHBhcnNlVXJsKHVybC5yZXNvbHZlKGJhc2UsIHJlbGF0aXZlKSk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlVXJsKGlucHV0KSB7XG4gIGlmICgvXlxcWy8udGVzdChpbnB1dC5ob3N0bmFtZSkgJiYgIS9eXFxbWzowLTlhLWZdK1xcXSQvaS50ZXN0KGlucHV0Lmhvc3RuYW1lKSkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkVXJsRXJyb3IoeyBpbnB1dDogaW5wdXQuaHJlZiB8fCBpbnB1dCB9KTtcbiAgfVxuICBpZiAoL15cXFsvLnRlc3QoaW5wdXQuaG9zdCkgJiYgIS9eXFxbWzowLTlhLWZdK1xcXSg6XFxkKyk/JC9pLnRlc3QoaW5wdXQuaG9zdCkpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZFVybEVycm9yKHsgaW5wdXQ6IGlucHV0LmhyZWYgfHwgaW5wdXQgfSk7XG4gIH1cbiAgcmV0dXJuIGlucHV0O1xufVxuXG5mdW5jdGlvbiBzcHJlYWRVcmxPYmplY3QodXJsT2JqZWN0LCB0YXJnZXQpIHtcbiAgdmFyIHNwcmVhZCA9IHRhcmdldCB8fCB7fTtcbiAgZm9yICh2YXIga2V5IG9mIHByZXNlcnZlZFVybEZpZWxkcykge1xuICAgIHNwcmVhZFtrZXldID0gdXJsT2JqZWN0W2tleV07XG4gIH1cblxuICAvLyBGaXggSVB2NiBob3N0bmFtZVxuICBpZiAoc3ByZWFkLmhvc3RuYW1lLnN0YXJ0c1dpdGgoXCJbXCIpKSB7XG4gICAgc3ByZWFkLmhvc3RuYW1lID0gc3ByZWFkLmhvc3RuYW1lLnNsaWNlKDEsIC0xKTtcbiAgfVxuICAvLyBFbnN1cmUgcG9ydCBpcyBhIG51bWJlclxuICBpZiAoc3ByZWFkLnBvcnQgIT09IFwiXCIpIHtcbiAgICBzcHJlYWQucG9ydCA9IE51bWJlcihzcHJlYWQucG9ydCk7XG4gIH1cbiAgLy8gQ29uY2F0ZW5hdGUgcGF0aFxuICBzcHJlYWQucGF0aCA9IHNwcmVhZC5zZWFyY2ggPyBzcHJlYWQucGF0aG5hbWUgKyBzcHJlYWQuc2VhcmNoIDogc3ByZWFkLnBhdGhuYW1lO1xuXG4gIHJldHVybiBzcHJlYWQ7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZU1hdGNoaW5nSGVhZGVycyhyZWdleCwgaGVhZGVycykge1xuICB2YXIgbGFzdFZhbHVlO1xuICBmb3IgKHZhciBoZWFkZXIgaW4gaGVhZGVycykge1xuICAgIGlmIChyZWdleC50ZXN0KGhlYWRlcikpIHtcbiAgICAgIGxhc3RWYWx1ZSA9IGhlYWRlcnNbaGVhZGVyXTtcbiAgICAgIGRlbGV0ZSBoZWFkZXJzW2hlYWRlcl07XG4gICAgfVxuICB9XG4gIHJldHVybiAobGFzdFZhbHVlID09PSBudWxsIHx8IHR5cGVvZiBsYXN0VmFsdWUgPT09IFwidW5kZWZpbmVkXCIpID9cbiAgICB1bmRlZmluZWQgOiBTdHJpbmcobGFzdFZhbHVlKS50cmltKCk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVycm9yVHlwZShjb2RlLCBtZXNzYWdlLCBiYXNlQ2xhc3MpIHtcbiAgLy8gQ3JlYXRlIGNvbnN0cnVjdG9yXG4gIGZ1bmN0aW9uIEN1c3RvbUVycm9yKHByb3BlcnRpZXMpIHtcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMsIHByb3BlcnRpZXMgfHwge30pO1xuICAgIHRoaXMuY29kZSA9IGNvZGU7XG4gICAgdGhpcy5tZXNzYWdlID0gdGhpcy5jYXVzZSA/IG1lc3NhZ2UgKyBcIjogXCIgKyB0aGlzLmNhdXNlLm1lc3NhZ2UgOiBtZXNzYWdlO1xuICB9XG5cbiAgLy8gQXR0YWNoIGNvbnN0cnVjdG9yIGFuZCBzZXQgZGVmYXVsdCBwcm9wZXJ0aWVzXG4gIEN1c3RvbUVycm9yLnByb3RvdHlwZSA9IG5ldyAoYmFzZUNsYXNzIHx8IEVycm9yKSgpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhDdXN0b21FcnJvci5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IEN1c3RvbUVycm9yLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgfSxcbiAgICBuYW1lOiB7XG4gICAgICB2YWx1ZTogXCJFcnJvciBbXCIgKyBjb2RlICsgXCJdXCIsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICB9LFxuICB9KTtcbiAgcmV0dXJuIEN1c3RvbUVycm9yO1xufVxuXG5mdW5jdGlvbiBkZXN0cm95UmVxdWVzdChyZXF1ZXN0LCBlcnJvcikge1xuICBmb3IgKHZhciBldmVudCBvZiBldmVudHMpIHtcbiAgICByZXF1ZXN0LnJlbW92ZUxpc3RlbmVyKGV2ZW50LCBldmVudEhhbmRsZXJzW2V2ZW50XSk7XG4gIH1cbiAgcmVxdWVzdC5vbihcImVycm9yXCIsIG5vb3ApO1xuICByZXF1ZXN0LmRlc3Ryb3koZXJyb3IpO1xufVxuXG5mdW5jdGlvbiBpc1N1YmRvbWFpbihzdWJkb21haW4sIGRvbWFpbikge1xuICBhc3NlcnQoaXNTdHJpbmcoc3ViZG9tYWluKSAmJiBpc1N0cmluZyhkb21haW4pKTtcbiAgdmFyIGRvdCA9IHN1YmRvbWFpbi5sZW5ndGggLSBkb21haW4ubGVuZ3RoIC0gMTtcbiAgcmV0dXJuIGRvdCA+IDAgJiYgc3ViZG9tYWluW2RvdF0gPT09IFwiLlwiICYmIHN1YmRvbWFpbi5lbmRzV2l0aChkb21haW4pO1xufVxuXG5mdW5jdGlvbiBpc1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiIHx8IHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nO1xufVxuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIjtcbn1cblxuZnVuY3Rpb24gaXNCdWZmZXIodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiAoXCJsZW5ndGhcIiBpbiB2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIGlzVVJMKHZhbHVlKSB7XG4gIHJldHVybiBVUkwgJiYgdmFsdWUgaW5zdGFuY2VvZiBVUkw7XG59XG5cbi8vIEV4cG9ydHNcbm1vZHVsZS5leHBvcnRzID0gd3JhcCh7IGh0dHA6IGh0dHAsIGh0dHBzOiBodHRwcyB9KTtcbm1vZHVsZS5leHBvcnRzLndyYXAgPSB3cmFwO1xuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSAoZmxhZywgYXJndikgPT4ge1xuXHRhcmd2ID0gYXJndiB8fCBwcm9jZXNzLmFyZ3Y7XG5cdGNvbnN0IHByZWZpeCA9IGZsYWcuc3RhcnRzV2l0aCgnLScpID8gJycgOiAoZmxhZy5sZW5ndGggPT09IDEgPyAnLScgOiAnLS0nKTtcblx0Y29uc3QgcG9zID0gYXJndi5pbmRleE9mKHByZWZpeCArIGZsYWcpO1xuXHRjb25zdCB0ZXJtaW5hdG9yUG9zID0gYXJndi5pbmRleE9mKCctLScpO1xuXHRyZXR1cm4gcG9zICE9PSAtMSAmJiAodGVybWluYXRvclBvcyA9PT0gLTEgPyB0cnVlIDogcG9zIDwgdGVybWluYXRvclBvcyk7XG59O1xuIiwiLyohXG4gKiBtaW1lLWRiXG4gKiBDb3B5cmlnaHQoYykgMjAxNCBKb25hdGhhbiBPbmdcbiAqIENvcHlyaWdodChjKSAyMDE1LTIwMjIgRG91Z2xhcyBDaHJpc3RvcGhlciBXaWxzb25cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbi8qKlxuICogTW9kdWxlIGV4cG9ydHMuXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2RiLmpzb24nKVxuIiwiLyohXG4gKiBtaW1lLXR5cGVzXG4gKiBDb3B5cmlnaHQoYykgMjAxNCBKb25hdGhhbiBPbmdcbiAqIENvcHlyaWdodChjKSAyMDE1IERvdWdsYXMgQ2hyaXN0b3BoZXIgV2lsc29uXG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4ndXNlIHN0cmljdCdcblxuLyoqXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICogQHByaXZhdGVcbiAqL1xuXG52YXIgZGIgPSByZXF1aXJlKCdtaW1lLWRiJylcbnZhciBleHRuYW1lID0gcmVxdWlyZSgncGF0aCcpLmV4dG5hbWVcblxuLyoqXG4gKiBNb2R1bGUgdmFyaWFibGVzLlxuICogQHByaXZhdGVcbiAqL1xuXG52YXIgRVhUUkFDVF9UWVBFX1JFR0VYUCA9IC9eXFxzKihbXjtcXHNdKikoPzo7fFxcc3wkKS9cbnZhciBURVhUX1RZUEVfUkVHRVhQID0gL150ZXh0XFwvL2lcblxuLyoqXG4gKiBNb2R1bGUgZXhwb3J0cy5cbiAqIEBwdWJsaWNcbiAqL1xuXG5leHBvcnRzLmNoYXJzZXQgPSBjaGFyc2V0XG5leHBvcnRzLmNoYXJzZXRzID0geyBsb29rdXA6IGNoYXJzZXQgfVxuZXhwb3J0cy5jb250ZW50VHlwZSA9IGNvbnRlbnRUeXBlXG5leHBvcnRzLmV4dGVuc2lvbiA9IGV4dGVuc2lvblxuZXhwb3J0cy5leHRlbnNpb25zID0gT2JqZWN0LmNyZWF0ZShudWxsKVxuZXhwb3J0cy5sb29rdXAgPSBsb29rdXBcbmV4cG9ydHMudHlwZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpXG5cbi8vIFBvcHVsYXRlIHRoZSBleHRlbnNpb25zL3R5cGVzIG1hcHNcbnBvcHVsYXRlTWFwcyhleHBvcnRzLmV4dGVuc2lvbnMsIGV4cG9ydHMudHlwZXMpXG5cbi8qKlxuICogR2V0IHRoZSBkZWZhdWx0IGNoYXJzZXQgZm9yIGEgTUlNRSB0eXBlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcmV0dXJuIHtib29sZWFufHN0cmluZ31cbiAqL1xuXG5mdW5jdGlvbiBjaGFyc2V0ICh0eXBlKSB7XG4gIGlmICghdHlwZSB8fCB0eXBlb2YgdHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIFRPRE86IHVzZSBtZWRpYS10eXBlclxuICB2YXIgbWF0Y2ggPSBFWFRSQUNUX1RZUEVfUkVHRVhQLmV4ZWModHlwZSlcbiAgdmFyIG1pbWUgPSBtYXRjaCAmJiBkYlttYXRjaFsxXS50b0xvd2VyQ2FzZSgpXVxuXG4gIGlmIChtaW1lICYmIG1pbWUuY2hhcnNldCkge1xuICAgIHJldHVybiBtaW1lLmNoYXJzZXRcbiAgfVxuXG4gIC8vIGRlZmF1bHQgdGV4dC8qIHRvIHV0Zi04XG4gIGlmIChtYXRjaCAmJiBURVhUX1RZUEVfUkVHRVhQLnRlc3QobWF0Y2hbMV0pKSB7XG4gICAgcmV0dXJuICdVVEYtOCdcbiAgfVxuXG4gIHJldHVybiBmYWxzZVxufVxuXG4vKipcbiAqIENyZWF0ZSBhIGZ1bGwgQ29udGVudC1UeXBlIGhlYWRlciBnaXZlbiBhIE1JTUUgdHlwZSBvciBleHRlbnNpb24uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICogQHJldHVybiB7Ym9vbGVhbnxzdHJpbmd9XG4gKi9cblxuZnVuY3Rpb24gY29udGVudFR5cGUgKHN0cikge1xuICAvLyBUT0RPOiBzaG91bGQgdGhpcyBldmVuIGJlIGluIHRoaXMgbW9kdWxlP1xuICBpZiAoIXN0ciB8fCB0eXBlb2Ygc3RyICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgdmFyIG1pbWUgPSBzdHIuaW5kZXhPZignLycpID09PSAtMVxuICAgID8gZXhwb3J0cy5sb29rdXAoc3RyKVxuICAgIDogc3RyXG5cbiAgaWYgKCFtaW1lKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBUT0RPOiB1c2UgY29udGVudC10eXBlIG9yIG90aGVyIG1vZHVsZVxuICBpZiAobWltZS5pbmRleE9mKCdjaGFyc2V0JykgPT09IC0xKSB7XG4gICAgdmFyIGNoYXJzZXQgPSBleHBvcnRzLmNoYXJzZXQobWltZSlcbiAgICBpZiAoY2hhcnNldCkgbWltZSArPSAnOyBjaGFyc2V0PScgKyBjaGFyc2V0LnRvTG93ZXJDYXNlKClcbiAgfVxuXG4gIHJldHVybiBtaW1lXG59XG5cbi8qKlxuICogR2V0IHRoZSBkZWZhdWx0IGV4dGVuc2lvbiBmb3IgYSBNSU1FIHR5cGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEByZXR1cm4ge2Jvb2xlYW58c3RyaW5nfVxuICovXG5cbmZ1bmN0aW9uIGV4dGVuc2lvbiAodHlwZSkge1xuICBpZiAoIXR5cGUgfHwgdHlwZW9mIHR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBUT0RPOiB1c2UgbWVkaWEtdHlwZXJcbiAgdmFyIG1hdGNoID0gRVhUUkFDVF9UWVBFX1JFR0VYUC5leGVjKHR5cGUpXG5cbiAgLy8gZ2V0IGV4dGVuc2lvbnNcbiAgdmFyIGV4dHMgPSBtYXRjaCAmJiBleHBvcnRzLmV4dGVuc2lvbnNbbWF0Y2hbMV0udG9Mb3dlckNhc2UoKV1cblxuICBpZiAoIWV4dHMgfHwgIWV4dHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gZXh0c1swXVxufVxuXG4vKipcbiAqIExvb2t1cCB0aGUgTUlNRSB0eXBlIGZvciBhIGZpbGUgcGF0aC9leHRlbnNpb24uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAqIEByZXR1cm4ge2Jvb2xlYW58c3RyaW5nfVxuICovXG5cbmZ1bmN0aW9uIGxvb2t1cCAocGF0aCkge1xuICBpZiAoIXBhdGggfHwgdHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBnZXQgdGhlIGV4dGVuc2lvbiAoXCJleHRcIiBvciBcIi5leHRcIiBvciBmdWxsIHBhdGgpXG4gIHZhciBleHRlbnNpb24gPSBleHRuYW1lKCd4LicgKyBwYXRoKVxuICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgLnN1YnN0cigxKVxuXG4gIGlmICghZXh0ZW5zaW9uKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gZXhwb3J0cy50eXBlc1tleHRlbnNpb25dIHx8IGZhbHNlXG59XG5cbi8qKlxuICogUG9wdWxhdGUgdGhlIGV4dGVuc2lvbnMgYW5kIHR5cGVzIG1hcHMuXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHBvcHVsYXRlTWFwcyAoZXh0ZW5zaW9ucywgdHlwZXMpIHtcbiAgLy8gc291cmNlIHByZWZlcmVuY2UgKGxlYXN0IC0+IG1vc3QpXG4gIHZhciBwcmVmZXJlbmNlID0gWyduZ2lueCcsICdhcGFjaGUnLCB1bmRlZmluZWQsICdpYW5hJ11cblxuICBPYmplY3Qua2V5cyhkYikuZm9yRWFjaChmdW5jdGlvbiBmb3JFYWNoTWltZVR5cGUgKHR5cGUpIHtcbiAgICB2YXIgbWltZSA9IGRiW3R5cGVdXG4gICAgdmFyIGV4dHMgPSBtaW1lLmV4dGVuc2lvbnNcblxuICAgIGlmICghZXh0cyB8fCAhZXh0cy5sZW5ndGgpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIG1pbWUgLT4gZXh0ZW5zaW9uc1xuICAgIGV4dGVuc2lvbnNbdHlwZV0gPSBleHRzXG5cbiAgICAvLyBleHRlbnNpb24gLT4gbWltZVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXh0cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGV4dGVuc2lvbiA9IGV4dHNbaV1cblxuICAgICAgaWYgKHR5cGVzW2V4dGVuc2lvbl0pIHtcbiAgICAgICAgdmFyIGZyb20gPSBwcmVmZXJlbmNlLmluZGV4T2YoZGJbdHlwZXNbZXh0ZW5zaW9uXV0uc291cmNlKVxuICAgICAgICB2YXIgdG8gPSBwcmVmZXJlbmNlLmluZGV4T2YobWltZS5zb3VyY2UpXG5cbiAgICAgICAgaWYgKHR5cGVzW2V4dGVuc2lvbl0gIT09ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nICYmXG4gICAgICAgICAgKGZyb20gPiB0byB8fCAoZnJvbSA9PT0gdG8gJiYgdHlwZXNbZXh0ZW5zaW9uXS5zdWJzdHIoMCwgMTIpID09PSAnYXBwbGljYXRpb24vJykpKSB7XG4gICAgICAgICAgLy8gc2tpcCB0aGUgcmVtYXBwaW5nXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBzZXQgdGhlIGV4dGVuc2lvbiAtPiBtaW1lXG4gICAgICB0eXBlc1tleHRlbnNpb25dID0gdHlwZVxuICAgIH1cbiAgfSlcbn1cbiIsIi8qKlxuICogSGVscGVycy5cbiAqL1xuXG52YXIgcyA9IDEwMDA7XG52YXIgbSA9IHMgKiA2MDtcbnZhciBoID0gbSAqIDYwO1xudmFyIGQgPSBoICogMjQ7XG52YXIgdyA9IGQgKiA3O1xudmFyIHkgPSBkICogMzY1LjI1O1xuXG4vKipcbiAqIFBhcnNlIG9yIGZvcm1hdCB0aGUgZ2l2ZW4gYHZhbGAuXG4gKlxuICogT3B0aW9uczpcbiAqXG4gKiAgLSBgbG9uZ2AgdmVyYm9zZSBmb3JtYXR0aW5nIFtmYWxzZV1cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ3xOdW1iZXJ9IHZhbFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQHRocm93cyB7RXJyb3J9IHRocm93IGFuIGVycm9yIGlmIHZhbCBpcyBub3QgYSBub24tZW1wdHkgc3RyaW5nIG9yIGEgbnVtYmVyXG4gKiBAcmV0dXJuIHtTdHJpbmd8TnVtYmVyfVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHZhbCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsO1xuICBpZiAodHlwZSA9PT0gJ3N0cmluZycgJiYgdmFsLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gcGFyc2UodmFsKTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZSh2YWwpKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMubG9uZyA/IGZtdExvbmcodmFsKSA6IGZtdFNob3J0KHZhbCk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgICd2YWwgaXMgbm90IGEgbm9uLWVtcHR5IHN0cmluZyBvciBhIHZhbGlkIG51bWJlci4gdmFsPScgK1xuICAgICAgSlNPTi5zdHJpbmdpZnkodmFsKVxuICApO1xufTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgZ2l2ZW4gYHN0cmAgYW5kIHJldHVybiBtaWxsaXNlY29uZHMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybiB7TnVtYmVyfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gcGFyc2Uoc3RyKSB7XG4gIHN0ciA9IFN0cmluZyhzdHIpO1xuICBpZiAoc3RyLmxlbmd0aCA+IDEwMCkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgbWF0Y2ggPSAvXigtPyg/OlxcZCspP1xcLj9cXGQrKSAqKG1pbGxpc2Vjb25kcz98bXNlY3M/fG1zfHNlY29uZHM/fHNlY3M/fHN8bWludXRlcz98bWlucz98bXxob3Vycz98aHJzP3xofGRheXM/fGR8d2Vla3M/fHd8eWVhcnM/fHlycz98eSk/JC9pLmV4ZWMoXG4gICAgc3RyXG4gICk7XG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG4gPSBwYXJzZUZsb2F0KG1hdGNoWzFdKTtcbiAgdmFyIHR5cGUgPSAobWF0Y2hbMl0gfHwgJ21zJykudG9Mb3dlckNhc2UoKTtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAneWVhcnMnOlxuICAgIGNhc2UgJ3llYXInOlxuICAgIGNhc2UgJ3lycyc6XG4gICAgY2FzZSAneXInOlxuICAgIGNhc2UgJ3knOlxuICAgICAgcmV0dXJuIG4gKiB5O1xuICAgIGNhc2UgJ3dlZWtzJzpcbiAgICBjYXNlICd3ZWVrJzpcbiAgICBjYXNlICd3JzpcbiAgICAgIHJldHVybiBuICogdztcbiAgICBjYXNlICdkYXlzJzpcbiAgICBjYXNlICdkYXknOlxuICAgIGNhc2UgJ2QnOlxuICAgICAgcmV0dXJuIG4gKiBkO1xuICAgIGNhc2UgJ2hvdXJzJzpcbiAgICBjYXNlICdob3VyJzpcbiAgICBjYXNlICdocnMnOlxuICAgIGNhc2UgJ2hyJzpcbiAgICBjYXNlICdoJzpcbiAgICAgIHJldHVybiBuICogaDtcbiAgICBjYXNlICdtaW51dGVzJzpcbiAgICBjYXNlICdtaW51dGUnOlxuICAgIGNhc2UgJ21pbnMnOlxuICAgIGNhc2UgJ21pbic6XG4gICAgY2FzZSAnbSc6XG4gICAgICByZXR1cm4gbiAqIG07XG4gICAgY2FzZSAnc2Vjb25kcyc6XG4gICAgY2FzZSAnc2Vjb25kJzpcbiAgICBjYXNlICdzZWNzJzpcbiAgICBjYXNlICdzZWMnOlxuICAgIGNhc2UgJ3MnOlxuICAgICAgcmV0dXJuIG4gKiBzO1xuICAgIGNhc2UgJ21pbGxpc2Vjb25kcyc6XG4gICAgY2FzZSAnbWlsbGlzZWNvbmQnOlxuICAgIGNhc2UgJ21zZWNzJzpcbiAgICBjYXNlICdtc2VjJzpcbiAgICBjYXNlICdtcyc6XG4gICAgICByZXR1cm4gbjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIFNob3J0IGZvcm1hdCBmb3IgYG1zYC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gbXNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGZtdFNob3J0KG1zKSB7XG4gIHZhciBtc0FicyA9IE1hdGguYWJzKG1zKTtcbiAgaWYgKG1zQWJzID49IGQpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIGQpICsgJ2QnO1xuICB9XG4gIGlmIChtc0FicyA+PSBoKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBoKSArICdoJztcbiAgfVxuICBpZiAobXNBYnMgPj0gbSkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gbSkgKyAnbSc7XG4gIH1cbiAgaWYgKG1zQWJzID49IHMpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIHMpICsgJ3MnO1xuICB9XG4gIHJldHVybiBtcyArICdtcyc7XG59XG5cbi8qKlxuICogTG9uZyBmb3JtYXQgZm9yIGBtc2AuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IG1zXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBmbXRMb25nKG1zKSB7XG4gIHZhciBtc0FicyA9IE1hdGguYWJzKG1zKTtcbiAgaWYgKG1zQWJzID49IGQpIHtcbiAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgZCwgJ2RheScpO1xuICB9XG4gIGlmIChtc0FicyA+PSBoKSB7XG4gICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIGgsICdob3VyJyk7XG4gIH1cbiAgaWYgKG1zQWJzID49IG0pIHtcbiAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgbSwgJ21pbnV0ZScpO1xuICB9XG4gIGlmIChtc0FicyA+PSBzKSB7XG4gICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIHMsICdzZWNvbmQnKTtcbiAgfVxuICByZXR1cm4gbXMgKyAnIG1zJztcbn1cblxuLyoqXG4gKiBQbHVyYWxpemF0aW9uIGhlbHBlci5cbiAqL1xuXG5mdW5jdGlvbiBwbHVyYWwobXMsIG1zQWJzLCBuLCBuYW1lKSB7XG4gIHZhciBpc1BsdXJhbCA9IG1zQWJzID49IG4gKiAxLjU7XG4gIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gbikgKyAnICcgKyBuYW1lICsgKGlzUGx1cmFsID8gJ3MnIDogJycpO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcGFyc2VVcmwgPSByZXF1aXJlKCd1cmwnKS5wYXJzZTtcblxudmFyIERFRkFVTFRfUE9SVFMgPSB7XG4gIGZ0cDogMjEsXG4gIGdvcGhlcjogNzAsXG4gIGh0dHA6IDgwLFxuICBodHRwczogNDQzLFxuICB3czogODAsXG4gIHdzczogNDQzLFxufTtcblxudmFyIHN0cmluZ0VuZHNXaXRoID0gU3RyaW5nLnByb3RvdHlwZS5lbmRzV2l0aCB8fCBmdW5jdGlvbihzKSB7XG4gIHJldHVybiBzLmxlbmd0aCA8PSB0aGlzLmxlbmd0aCAmJlxuICAgIHRoaXMuaW5kZXhPZihzLCB0aGlzLmxlbmd0aCAtIHMubGVuZ3RoKSAhPT0gLTE7XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfG9iamVjdH0gdXJsIC0gVGhlIFVSTCwgb3IgdGhlIHJlc3VsdCBmcm9tIHVybC5wYXJzZS5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIFVSTCBvZiB0aGUgcHJveHkgdGhhdCBzaG91bGQgaGFuZGxlIHRoZSByZXF1ZXN0IHRvIHRoZVxuICogIGdpdmVuIFVSTC4gSWYgbm8gcHJveHkgaXMgc2V0LCB0aGlzIHdpbGwgYmUgYW4gZW1wdHkgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBnZXRQcm94eUZvclVybCh1cmwpIHtcbiAgdmFyIHBhcnNlZFVybCA9IHR5cGVvZiB1cmwgPT09ICdzdHJpbmcnID8gcGFyc2VVcmwodXJsKSA6IHVybCB8fCB7fTtcbiAgdmFyIHByb3RvID0gcGFyc2VkVXJsLnByb3RvY29sO1xuICB2YXIgaG9zdG5hbWUgPSBwYXJzZWRVcmwuaG9zdDtcbiAgdmFyIHBvcnQgPSBwYXJzZWRVcmwucG9ydDtcbiAgaWYgKHR5cGVvZiBob3N0bmFtZSAhPT0gJ3N0cmluZycgfHwgIWhvc3RuYW1lIHx8IHR5cGVvZiBwcm90byAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gJyc7ICAvLyBEb24ndCBwcm94eSBVUkxzIHdpdGhvdXQgYSB2YWxpZCBzY2hlbWUgb3IgaG9zdC5cbiAgfVxuXG4gIHByb3RvID0gcHJvdG8uc3BsaXQoJzonLCAxKVswXTtcbiAgLy8gU3RyaXBwaW5nIHBvcnRzIGluIHRoaXMgd2F5IGluc3RlYWQgb2YgdXNpbmcgcGFyc2VkVXJsLmhvc3RuYW1lIHRvIG1ha2VcbiAgLy8gc3VyZSB0aGF0IHRoZSBicmFja2V0cyBhcm91bmQgSVB2NiBhZGRyZXNzZXMgYXJlIGtlcHQuXG4gIGhvc3RuYW1lID0gaG9zdG5hbWUucmVwbGFjZSgvOlxcZCokLywgJycpO1xuICBwb3J0ID0gcGFyc2VJbnQocG9ydCkgfHwgREVGQVVMVF9QT1JUU1twcm90b10gfHwgMDtcbiAgaWYgKCFzaG91bGRQcm94eShob3N0bmFtZSwgcG9ydCkpIHtcbiAgICByZXR1cm4gJyc7ICAvLyBEb24ndCBwcm94eSBVUkxzIHRoYXQgbWF0Y2ggTk9fUFJPWFkuXG4gIH1cblxuICB2YXIgcHJveHkgPVxuICAgIGdldEVudignbnBtX2NvbmZpZ18nICsgcHJvdG8gKyAnX3Byb3h5JykgfHxcbiAgICBnZXRFbnYocHJvdG8gKyAnX3Byb3h5JykgfHxcbiAgICBnZXRFbnYoJ25wbV9jb25maWdfcHJveHknKSB8fFxuICAgIGdldEVudignYWxsX3Byb3h5Jyk7XG4gIGlmIChwcm94eSAmJiBwcm94eS5pbmRleE9mKCc6Ly8nKSA9PT0gLTEpIHtcbiAgICAvLyBNaXNzaW5nIHNjaGVtZSBpbiBwcm94eSwgZGVmYXVsdCB0byB0aGUgcmVxdWVzdGVkIFVSTCdzIHNjaGVtZS5cbiAgICBwcm94eSA9IHByb3RvICsgJzovLycgKyBwcm94eTtcbiAgfVxuICByZXR1cm4gcHJveHk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgZ2l2ZW4gVVJMIHNob3VsZCBiZSBwcm94aWVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBob3N0bmFtZSAtIFRoZSBob3N0IG5hbWUgb2YgdGhlIFVSTC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBwb3J0IC0gVGhlIGVmZmVjdGl2ZSBwb3J0IG9mIHRoZSBVUkwuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUgZ2l2ZW4gVVJMIHNob3VsZCBiZSBwcm94aWVkLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc2hvdWxkUHJveHkoaG9zdG5hbWUsIHBvcnQpIHtcbiAgdmFyIE5PX1BST1hZID1cbiAgICAoZ2V0RW52KCducG1fY29uZmlnX25vX3Byb3h5JykgfHwgZ2V0RW52KCdub19wcm94eScpKS50b0xvd2VyQ2FzZSgpO1xuICBpZiAoIU5PX1BST1hZKSB7XG4gICAgcmV0dXJuIHRydWU7ICAvLyBBbHdheXMgcHJveHkgaWYgTk9fUFJPWFkgaXMgbm90IHNldC5cbiAgfVxuICBpZiAoTk9fUFJPWFkgPT09ICcqJykge1xuICAgIHJldHVybiBmYWxzZTsgIC8vIE5ldmVyIHByb3h5IGlmIHdpbGRjYXJkIGlzIHNldC5cbiAgfVxuXG4gIHJldHVybiBOT19QUk9YWS5zcGxpdCgvWyxcXHNdLykuZXZlcnkoZnVuY3Rpb24ocHJveHkpIHtcbiAgICBpZiAoIXByb3h5KSB7XG4gICAgICByZXR1cm4gdHJ1ZTsgIC8vIFNraXAgemVyby1sZW5ndGggaG9zdHMuXG4gICAgfVxuICAgIHZhciBwYXJzZWRQcm94eSA9IHByb3h5Lm1hdGNoKC9eKC4rKTooXFxkKykkLyk7XG4gICAgdmFyIHBhcnNlZFByb3h5SG9zdG5hbWUgPSBwYXJzZWRQcm94eSA/IHBhcnNlZFByb3h5WzFdIDogcHJveHk7XG4gICAgdmFyIHBhcnNlZFByb3h5UG9ydCA9IHBhcnNlZFByb3h5ID8gcGFyc2VJbnQocGFyc2VkUHJveHlbMl0pIDogMDtcbiAgICBpZiAocGFyc2VkUHJveHlQb3J0ICYmIHBhcnNlZFByb3h5UG9ydCAhPT0gcG9ydCkge1xuICAgICAgcmV0dXJuIHRydWU7ICAvLyBTa2lwIGlmIHBvcnRzIGRvbid0IG1hdGNoLlxuICAgIH1cblxuICAgIGlmICghL15bLipdLy50ZXN0KHBhcnNlZFByb3h5SG9zdG5hbWUpKSB7XG4gICAgICAvLyBObyB3aWxkY2FyZHMsIHNvIHN0b3AgcHJveHlpbmcgaWYgdGhlcmUgaXMgYW4gZXhhY3QgbWF0Y2guXG4gICAgICByZXR1cm4gaG9zdG5hbWUgIT09IHBhcnNlZFByb3h5SG9zdG5hbWU7XG4gICAgfVxuXG4gICAgaWYgKHBhcnNlZFByb3h5SG9zdG5hbWUuY2hhckF0KDApID09PSAnKicpIHtcbiAgICAgIC8vIFJlbW92ZSBsZWFkaW5nIHdpbGRjYXJkLlxuICAgICAgcGFyc2VkUHJveHlIb3N0bmFtZSA9IHBhcnNlZFByb3h5SG9zdG5hbWUuc2xpY2UoMSk7XG4gICAgfVxuICAgIC8vIFN0b3AgcHJveHlpbmcgaWYgdGhlIGhvc3RuYW1lIGVuZHMgd2l0aCB0aGUgbm9fcHJveHkgaG9zdC5cbiAgICByZXR1cm4gIXN0cmluZ0VuZHNXaXRoLmNhbGwoaG9zdG5hbWUsIHBhcnNlZFByb3h5SG9zdG5hbWUpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHZhbHVlIGZvciBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIG5hbWUgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgdmFsdWUgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gZ2V0RW52KGtleSkge1xuICByZXR1cm4gcHJvY2Vzcy5lbnZba2V5LnRvTG93ZXJDYXNlKCldIHx8IHByb2Nlc3MuZW52W2tleS50b1VwcGVyQ2FzZSgpXSB8fCAnJztcbn1cblxuZXhwb3J0cy5nZXRQcm94eUZvclVybCA9IGdldFByb3h5Rm9yVXJsO1xuIiwiJ3VzZSBzdHJpY3QnO1xuY29uc3Qgb3MgPSByZXF1aXJlKCdvcycpO1xuY29uc3QgaGFzRmxhZyA9IHJlcXVpcmUoJ2hhcy1mbGFnJyk7XG5cbmNvbnN0IGVudiA9IHByb2Nlc3MuZW52O1xuXG5sZXQgZm9yY2VDb2xvcjtcbmlmIChoYXNGbGFnKCduby1jb2xvcicpIHx8XG5cdGhhc0ZsYWcoJ25vLWNvbG9ycycpIHx8XG5cdGhhc0ZsYWcoJ2NvbG9yPWZhbHNlJykpIHtcblx0Zm9yY2VDb2xvciA9IGZhbHNlO1xufSBlbHNlIGlmIChoYXNGbGFnKCdjb2xvcicpIHx8XG5cdGhhc0ZsYWcoJ2NvbG9ycycpIHx8XG5cdGhhc0ZsYWcoJ2NvbG9yPXRydWUnKSB8fFxuXHRoYXNGbGFnKCdjb2xvcj1hbHdheXMnKSkge1xuXHRmb3JjZUNvbG9yID0gdHJ1ZTtcbn1cbmlmICgnRk9SQ0VfQ09MT1InIGluIGVudikge1xuXHRmb3JjZUNvbG9yID0gZW52LkZPUkNFX0NPTE9SLmxlbmd0aCA9PT0gMCB8fCBwYXJzZUludChlbnYuRk9SQ0VfQ09MT1IsIDEwKSAhPT0gMDtcbn1cblxuZnVuY3Rpb24gdHJhbnNsYXRlTGV2ZWwobGV2ZWwpIHtcblx0aWYgKGxldmVsID09PSAwKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRsZXZlbCxcblx0XHRoYXNCYXNpYzogdHJ1ZSxcblx0XHRoYXMyNTY6IGxldmVsID49IDIsXG5cdFx0aGFzMTZtOiBsZXZlbCA+PSAzXG5cdH07XG59XG5cbmZ1bmN0aW9uIHN1cHBvcnRzQ29sb3Ioc3RyZWFtKSB7XG5cdGlmIChmb3JjZUNvbG9yID09PSBmYWxzZSkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0aWYgKGhhc0ZsYWcoJ2NvbG9yPTE2bScpIHx8XG5cdFx0aGFzRmxhZygnY29sb3I9ZnVsbCcpIHx8XG5cdFx0aGFzRmxhZygnY29sb3I9dHJ1ZWNvbG9yJykpIHtcblx0XHRyZXR1cm4gMztcblx0fVxuXG5cdGlmIChoYXNGbGFnKCdjb2xvcj0yNTYnKSkge1xuXHRcdHJldHVybiAyO1xuXHR9XG5cblx0aWYgKHN0cmVhbSAmJiAhc3RyZWFtLmlzVFRZICYmIGZvcmNlQ29sb3IgIT09IHRydWUpIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdGNvbnN0IG1pbiA9IGZvcmNlQ29sb3IgPyAxIDogMDtcblxuXHRpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuXHRcdC8vIE5vZGUuanMgNy41LjAgaXMgdGhlIGZpcnN0IHZlcnNpb24gb2YgTm9kZS5qcyB0byBpbmNsdWRlIGEgcGF0Y2ggdG9cblx0XHQvLyBsaWJ1diB0aGF0IGVuYWJsZXMgMjU2IGNvbG9yIG91dHB1dCBvbiBXaW5kb3dzLiBBbnl0aGluZyBlYXJsaWVyIGFuZCBpdFxuXHRcdC8vIHdvbid0IHdvcmsuIEhvd2V2ZXIsIGhlcmUgd2UgdGFyZ2V0IE5vZGUuanMgOCBhdCBtaW5pbXVtIGFzIGl0IGlzIGFuIExUU1xuXHRcdC8vIHJlbGVhc2UsIGFuZCBOb2RlLmpzIDcgaXMgbm90LiBXaW5kb3dzIDEwIGJ1aWxkIDEwNTg2IGlzIHRoZSBmaXJzdCBXaW5kb3dzXG5cdFx0Ly8gcmVsZWFzZSB0aGF0IHN1cHBvcnRzIDI1NiBjb2xvcnMuIFdpbmRvd3MgMTAgYnVpbGQgMTQ5MzEgaXMgdGhlIGZpcnN0IHJlbGVhc2Vcblx0XHQvLyB0aGF0IHN1cHBvcnRzIDE2bS9UcnVlQ29sb3IuXG5cdFx0Y29uc3Qgb3NSZWxlYXNlID0gb3MucmVsZWFzZSgpLnNwbGl0KCcuJyk7XG5cdFx0aWYgKFxuXHRcdFx0TnVtYmVyKHByb2Nlc3MudmVyc2lvbnMubm9kZS5zcGxpdCgnLicpWzBdKSA+PSA4ICYmXG5cdFx0XHROdW1iZXIob3NSZWxlYXNlWzBdKSA+PSAxMCAmJlxuXHRcdFx0TnVtYmVyKG9zUmVsZWFzZVsyXSkgPj0gMTA1ODZcblx0XHQpIHtcblx0XHRcdHJldHVybiBOdW1iZXIob3NSZWxlYXNlWzJdKSA+PSAxNDkzMSA/IDMgOiAyO1xuXHRcdH1cblxuXHRcdHJldHVybiAxO1xuXHR9XG5cblx0aWYgKCdDSScgaW4gZW52KSB7XG5cdFx0aWYgKFsnVFJBVklTJywgJ0NJUkNMRUNJJywgJ0FQUFZFWU9SJywgJ0dJVExBQl9DSSddLnNvbWUoc2lnbiA9PiBzaWduIGluIGVudikgfHwgZW52LkNJX05BTUUgPT09ICdjb2Rlc2hpcCcpIHtcblx0XHRcdHJldHVybiAxO1xuXHRcdH1cblxuXHRcdHJldHVybiBtaW47XG5cdH1cblxuXHRpZiAoJ1RFQU1DSVRZX1ZFUlNJT04nIGluIGVudikge1xuXHRcdHJldHVybiAvXig5XFwuKDAqWzEtOV1cXGQqKVxcLnxcXGR7Mix9XFwuKS8udGVzdChlbnYuVEVBTUNJVFlfVkVSU0lPTikgPyAxIDogMDtcblx0fVxuXG5cdGlmIChlbnYuQ09MT1JURVJNID09PSAndHJ1ZWNvbG9yJykge1xuXHRcdHJldHVybiAzO1xuXHR9XG5cblx0aWYgKCdURVJNX1BST0dSQU0nIGluIGVudikge1xuXHRcdGNvbnN0IHZlcnNpb24gPSBwYXJzZUludCgoZW52LlRFUk1fUFJPR1JBTV9WRVJTSU9OIHx8ICcnKS5zcGxpdCgnLicpWzBdLCAxMCk7XG5cblx0XHRzd2l0Y2ggKGVudi5URVJNX1BST0dSQU0pIHtcblx0XHRcdGNhc2UgJ2lUZXJtLmFwcCc6XG5cdFx0XHRcdHJldHVybiB2ZXJzaW9uID49IDMgPyAzIDogMjtcblx0XHRcdGNhc2UgJ0FwcGxlX1Rlcm1pbmFsJzpcblx0XHRcdFx0cmV0dXJuIDI7XG5cdFx0XHQvLyBObyBkZWZhdWx0XG5cdFx0fVxuXHR9XG5cblx0aWYgKC8tMjU2KGNvbG9yKT8kL2kudGVzdChlbnYuVEVSTSkpIHtcblx0XHRyZXR1cm4gMjtcblx0fVxuXG5cdGlmICgvXnNjcmVlbnxeeHRlcm18XnZ0MTAwfF52dDIyMHxecnh2dHxjb2xvcnxhbnNpfGN5Z3dpbnxsaW51eC9pLnRlc3QoZW52LlRFUk0pKSB7XG5cdFx0cmV0dXJuIDE7XG5cdH1cblxuXHRpZiAoJ0NPTE9SVEVSTScgaW4gZW52KSB7XG5cdFx0cmV0dXJuIDE7XG5cdH1cblxuXHRpZiAoZW52LlRFUk0gPT09ICdkdW1iJykge1xuXHRcdHJldHVybiBtaW47XG5cdH1cblxuXHRyZXR1cm4gbWluO1xufVxuXG5mdW5jdGlvbiBnZXRTdXBwb3J0TGV2ZWwoc3RyZWFtKSB7XG5cdGNvbnN0IGxldmVsID0gc3VwcG9ydHNDb2xvcihzdHJlYW0pO1xuXHRyZXR1cm4gdHJhbnNsYXRlTGV2ZWwobGV2ZWwpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblx0c3VwcG9ydHNDb2xvcjogZ2V0U3VwcG9ydExldmVsLFxuXHRzdGRvdXQ6IGdldFN1cHBvcnRMZXZlbChwcm9jZXNzLnN0ZG91dCksXG5cdHN0ZGVycjogZ2V0U3VwcG9ydExldmVsKHByb2Nlc3Muc3RkZXJyKVxufTtcbiIsIihmdW5jdGlvbiAobmFtZSwgY29udGV4dCwgZGVmaW5pdGlvbikge1xuICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIG1vZHVsZS5leHBvcnRzID0gZGVmaW5pdGlvbigpO1xuICBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIGRlZmluZShkZWZpbml0aW9uKTtcbiAgZWxzZSBjb250ZXh0W25hbWVdID0gZGVmaW5pdGlvbigpO1xufSkoJ3VybGpvaW4nLCB0aGlzLCBmdW5jdGlvbiAoKSB7XG5cbiAgZnVuY3Rpb24gbm9ybWFsaXplIChzdHJBcnJheSkge1xuICAgIHZhciByZXN1bHRBcnJheSA9IFtdO1xuICAgIGlmIChzdHJBcnJheS5sZW5ndGggPT09IDApIHsgcmV0dXJuICcnOyB9XG5cbiAgICBpZiAodHlwZW9mIHN0ckFycmF5WzBdICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVXJsIG11c3QgYmUgYSBzdHJpbmcuIFJlY2VpdmVkICcgKyBzdHJBcnJheVswXSk7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGZpcnN0IHBhcnQgaXMgYSBwbGFpbiBwcm90b2NvbCwgd2UgY29tYmluZSBpdCB3aXRoIHRoZSBuZXh0IHBhcnQuXG4gICAgaWYgKHN0ckFycmF5WzBdLm1hdGNoKC9eW14vOl0rOlxcLyokLykgJiYgc3RyQXJyYXkubGVuZ3RoID4gMSkge1xuICAgICAgdmFyIGZpcnN0ID0gc3RyQXJyYXkuc2hpZnQoKTtcbiAgICAgIHN0ckFycmF5WzBdID0gZmlyc3QgKyBzdHJBcnJheVswXTtcbiAgICB9XG5cbiAgICAvLyBUaGVyZSBtdXN0IGJlIHR3byBvciB0aHJlZSBzbGFzaGVzIGluIHRoZSBmaWxlIHByb3RvY29sLCB0d28gc2xhc2hlcyBpbiBhbnl0aGluZyBlbHNlLlxuICAgIGlmIChzdHJBcnJheVswXS5tYXRjaCgvXmZpbGU6XFwvXFwvXFwvLykpIHtcbiAgICAgIHN0ckFycmF5WzBdID0gc3RyQXJyYXlbMF0ucmVwbGFjZSgvXihbXi86XSspOlxcLyovLCAnJDE6Ly8vJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0ckFycmF5WzBdID0gc3RyQXJyYXlbMF0ucmVwbGFjZSgvXihbXi86XSspOlxcLyovLCAnJDE6Ly8nKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ckFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY29tcG9uZW50ID0gc3RyQXJyYXlbaV07XG5cbiAgICAgIGlmICh0eXBlb2YgY29tcG9uZW50ICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVcmwgbXVzdCBiZSBhIHN0cmluZy4gUmVjZWl2ZWQgJyArIGNvbXBvbmVudCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb21wb25lbnQgPT09ICcnKSB7IGNvbnRpbnVlOyB9XG5cbiAgICAgIGlmIChpID4gMCkge1xuICAgICAgICAvLyBSZW1vdmluZyB0aGUgc3RhcnRpbmcgc2xhc2hlcyBmb3IgZWFjaCBjb21wb25lbnQgYnV0IHRoZSBmaXJzdC5cbiAgICAgICAgY29tcG9uZW50ID0gY29tcG9uZW50LnJlcGxhY2UoL15bXFwvXSsvLCAnJyk7XG4gICAgICB9XG4gICAgICBpZiAoaSA8IHN0ckFycmF5Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgLy8gUmVtb3ZpbmcgdGhlIGVuZGluZyBzbGFzaGVzIGZvciBlYWNoIGNvbXBvbmVudCBidXQgdGhlIGxhc3QuXG4gICAgICAgIGNvbXBvbmVudCA9IGNvbXBvbmVudC5yZXBsYWNlKC9bXFwvXSskLywgJycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRm9yIHRoZSBsYXN0IGNvbXBvbmVudCB3ZSB3aWxsIGNvbWJpbmUgbXVsdGlwbGUgc2xhc2hlcyB0byBhIHNpbmdsZSBvbmUuXG4gICAgICAgIGNvbXBvbmVudCA9IGNvbXBvbmVudC5yZXBsYWNlKC9bXFwvXSskLywgJy8nKTtcbiAgICAgIH1cblxuICAgICAgcmVzdWx0QXJyYXkucHVzaChjb21wb25lbnQpO1xuXG4gICAgfVxuXG4gICAgdmFyIHN0ciA9IHJlc3VsdEFycmF5LmpvaW4oJy8nKTtcbiAgICAvLyBFYWNoIGlucHV0IGNvbXBvbmVudCBpcyBub3cgc2VwYXJhdGVkIGJ5IGEgc2luZ2xlIHNsYXNoIGV4Y2VwdCB0aGUgcG9zc2libGUgZmlyc3QgcGxhaW4gcHJvdG9jb2wgcGFydC5cblxuICAgIC8vIHJlbW92ZSB0cmFpbGluZyBzbGFzaCBiZWZvcmUgcGFyYW1ldGVycyBvciBoYXNoXG4gICAgc3RyID0gc3RyLnJlcGxhY2UoL1xcLyhcXD98JnwjW14hXSkvZywgJyQxJyk7XG5cbiAgICAvLyByZXBsYWNlID8gaW4gcGFyYW1ldGVycyB3aXRoICZcbiAgICB2YXIgcGFydHMgPSBzdHIuc3BsaXQoJz8nKTtcbiAgICBzdHIgPSBwYXJ0cy5zaGlmdCgpICsgKHBhcnRzLmxlbmd0aCA+IDAgPyAnPyc6ICcnKSArIHBhcnRzLmpvaW4oJyYnKTtcblxuICAgIHJldHVybiBzdHI7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciBpbnB1dDtcblxuICAgIGlmICh0eXBlb2YgYXJndW1lbnRzWzBdID09PSAnb2JqZWN0Jykge1xuICAgICAgaW5wdXQgPSBhcmd1bWVudHNbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGlucHV0ID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIHJldHVybiBub3JtYWxpemUoaW5wdXQpO1xuICB9O1xuXG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImFzc2VydFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJldmVudHNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZnNcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiaHR0cFwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJodHRwc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJvc1wiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJwYXRoXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInN0cmVhbVwiKTsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJ0dHlcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwidXJsXCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInV0aWxcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiemxpYlwiKTsiLCIvLyBBeGlvcyB2MS43LjQgQ29weXJpZ2h0IChjKSAyMDI0IE1hdHQgWmFicmlza2llIGFuZCBjb250cmlidXRvcnNcbid1c2Ugc3RyaWN0JztcblxuY29uc3QgRm9ybURhdGEkMSA9IHJlcXVpcmUoJ2Zvcm0tZGF0YScpO1xuY29uc3QgdXJsID0gcmVxdWlyZSgndXJsJyk7XG5jb25zdCBwcm94eUZyb21FbnYgPSByZXF1aXJlKCdwcm94eS1mcm9tLWVudicpO1xuY29uc3QgaHR0cCA9IHJlcXVpcmUoJ2h0dHAnKTtcbmNvbnN0IGh0dHBzID0gcmVxdWlyZSgnaHR0cHMnKTtcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5jb25zdCBmb2xsb3dSZWRpcmVjdHMgPSByZXF1aXJlKCdmb2xsb3ctcmVkaXJlY3RzJyk7XG5jb25zdCB6bGliID0gcmVxdWlyZSgnemxpYicpO1xuY29uc3Qgc3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJyk7XG5jb25zdCBldmVudHMgPSByZXF1aXJlKCdldmVudHMnKTtcblxuZnVuY3Rpb24gX2ludGVyb3BEZWZhdWx0TGVnYWN5IChlKSB7IHJldHVybiBlICYmIHR5cGVvZiBlID09PSAnb2JqZWN0JyAmJiAnZGVmYXVsdCcgaW4gZSA/IGUgOiB7ICdkZWZhdWx0JzogZSB9OyB9XG5cbmNvbnN0IEZvcm1EYXRhX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19pbnRlcm9wRGVmYXVsdExlZ2FjeShGb3JtRGF0YSQxKTtcbmNvbnN0IHVybF9fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9faW50ZXJvcERlZmF1bHRMZWdhY3kodXJsKTtcbmNvbnN0IGh0dHBfX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX2ludGVyb3BEZWZhdWx0TGVnYWN5KGh0dHApO1xuY29uc3QgaHR0cHNfX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX2ludGVyb3BEZWZhdWx0TGVnYWN5KGh0dHBzKTtcbmNvbnN0IHV0aWxfX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX2ludGVyb3BEZWZhdWx0TGVnYWN5KHV0aWwpO1xuY29uc3QgZm9sbG93UmVkaXJlY3RzX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19pbnRlcm9wRGVmYXVsdExlZ2FjeShmb2xsb3dSZWRpcmVjdHMpO1xuY29uc3QgemxpYl9fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9faW50ZXJvcERlZmF1bHRMZWdhY3koemxpYik7XG5jb25zdCBzdHJlYW1fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX2ludGVyb3BEZWZhdWx0TGVnYWN5KHN0cmVhbSk7XG5cbmZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXNBcmcsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbi8vIHV0aWxzIGlzIGEgbGlicmFyeSBvZiBnZW5lcmljIGhlbHBlciBmdW5jdGlvbnMgbm9uLXNwZWNpZmljIHRvIGF4aW9zXG5cbmNvbnN0IHt0b1N0cmluZ30gPSBPYmplY3QucHJvdG90eXBlO1xuY29uc3Qge2dldFByb3RvdHlwZU9mfSA9IE9iamVjdDtcblxuY29uc3Qga2luZE9mID0gKGNhY2hlID0+IHRoaW5nID0+IHtcbiAgICBjb25zdCBzdHIgPSB0b1N0cmluZy5jYWxsKHRoaW5nKTtcbiAgICByZXR1cm4gY2FjaGVbc3RyXSB8fCAoY2FjaGVbc3RyXSA9IHN0ci5zbGljZSg4LCAtMSkudG9Mb3dlckNhc2UoKSk7XG59KShPYmplY3QuY3JlYXRlKG51bGwpKTtcblxuY29uc3Qga2luZE9mVGVzdCA9ICh0eXBlKSA9PiB7XG4gIHR5cGUgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiAodGhpbmcpID0+IGtpbmRPZih0aGluZykgPT09IHR5cGVcbn07XG5cbmNvbnN0IHR5cGVPZlRlc3QgPSB0eXBlID0+IHRoaW5nID0+IHR5cGVvZiB0aGluZyA9PT0gdHlwZTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IHtpc0FycmF5fSA9IEFycmF5O1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIHVuZGVmaW5lZFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzVW5kZWZpbmVkID0gdHlwZU9mVGVzdCgndW5kZWZpbmVkJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCdWZmZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNCdWZmZXIodmFsKSB7XG4gIHJldHVybiB2YWwgIT09IG51bGwgJiYgIWlzVW5kZWZpbmVkKHZhbCkgJiYgdmFsLmNvbnN0cnVjdG9yICE9PSBudWxsICYmICFpc1VuZGVmaW5lZCh2YWwuY29uc3RydWN0b3IpXG4gICAgJiYgaXNGdW5jdGlvbih2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIpICYmIHZhbC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcih2YWwpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzQXJyYXlCdWZmZXIgPSBraW5kT2ZUZXN0KCdBcnJheUJ1ZmZlcicpO1xuXG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyVmlldyh2YWwpIHtcbiAgbGV0IHJlc3VsdDtcbiAgaWYgKCh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnKSAmJiAoQXJyYXlCdWZmZXIuaXNWaWV3KSkge1xuICAgIHJlc3VsdCA9IEFycmF5QnVmZmVyLmlzVmlldyh2YWwpO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9ICh2YWwpICYmICh2YWwuYnVmZmVyKSAmJiAoaXNBcnJheUJ1ZmZlcih2YWwuYnVmZmVyKSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmluZ1xuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJpbmcsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1N0cmluZyA9IHR5cGVPZlRlc3QoJ3N0cmluZycpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGdW5jdGlvbiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRnVuY3Rpb24gPSB0eXBlT2ZUZXN0KCdmdW5jdGlvbicpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgTnVtYmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIE51bWJlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzTnVtYmVyID0gdHlwZU9mVGVzdCgnbnVtYmVyJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzT2JqZWN0ID0gKHRoaW5nKSA9PiB0aGluZyAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpbmcgPT09ICdvYmplY3QnO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQm9vbGVhblxuICpcbiAqIEBwYXJhbSB7Kn0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQm9vbGVhbiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzQm9vbGVhbiA9IHRoaW5nID0+IHRoaW5nID09PSB0cnVlIHx8IHRoaW5nID09PSBmYWxzZTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHBsYWluIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1BsYWluT2JqZWN0ID0gKHZhbCkgPT4ge1xuICBpZiAoa2luZE9mKHZhbCkgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgcHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YodmFsKTtcbiAgcmV0dXJuIChwcm90b3R5cGUgPT09IG51bGwgfHwgcHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90b3R5cGUpID09PSBudWxsKSAmJiAhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiB2YWwpICYmICEoU3ltYm9sLml0ZXJhdG9yIGluIHZhbCk7XG59O1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRGF0ZVxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBEYXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNEYXRlID0ga2luZE9mVGVzdCgnRGF0ZScpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZVxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGaWxlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGaWxlID0ga2luZE9mVGVzdCgnRmlsZScpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQmxvYlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCbG9iLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNCbG9iID0ga2luZE9mVGVzdCgnQmxvYicpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZUxpc3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRmlsZUxpc3QgPSBraW5kT2ZUZXN0KCdGaWxlTGlzdCcpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyZWFtXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmVhbSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzU3RyZWFtID0gKHZhbCkgPT4gaXNPYmplY3QodmFsKSAmJiBpc0Z1bmN0aW9uKHZhbC5waXBlKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZvcm1EYXRhXG4gKlxuICogQHBhcmFtIHsqfSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEZvcm1EYXRhLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGb3JtRGF0YSA9ICh0aGluZykgPT4ge1xuICBsZXQga2luZDtcbiAgcmV0dXJuIHRoaW5nICYmIChcbiAgICAodHlwZW9mIEZvcm1EYXRhID09PSAnZnVuY3Rpb24nICYmIHRoaW5nIGluc3RhbmNlb2YgRm9ybURhdGEpIHx8IChcbiAgICAgIGlzRnVuY3Rpb24odGhpbmcuYXBwZW5kKSAmJiAoXG4gICAgICAgIChraW5kID0ga2luZE9mKHRoaW5nKSkgPT09ICdmb3JtZGF0YScgfHxcbiAgICAgICAgLy8gZGV0ZWN0IGZvcm0tZGF0YSBpbnN0YW5jZVxuICAgICAgICAoa2luZCA9PT0gJ29iamVjdCcgJiYgaXNGdW5jdGlvbih0aGluZy50b1N0cmluZykgJiYgdGhpbmcudG9TdHJpbmcoKSA9PT0gJ1tvYmplY3QgRm9ybURhdGFdJylcbiAgICAgIClcbiAgICApXG4gIClcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1VSTFNlYXJjaFBhcmFtcyA9IGtpbmRPZlRlc3QoJ1VSTFNlYXJjaFBhcmFtcycpO1xuXG5jb25zdCBbaXNSZWFkYWJsZVN0cmVhbSwgaXNSZXF1ZXN0LCBpc1Jlc3BvbnNlLCBpc0hlYWRlcnNdID0gWydSZWFkYWJsZVN0cmVhbScsICdSZXF1ZXN0JywgJ1Jlc3BvbnNlJywgJ0hlYWRlcnMnXS5tYXAoa2luZE9mVGVzdCk7XG5cbi8qKlxuICogVHJpbSBleGNlc3Mgd2hpdGVzcGFjZSBvZmYgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0ciBUaGUgU3RyaW5nIHRvIHRyaW1cbiAqXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgU3RyaW5nIGZyZWVkIG9mIGV4Y2VzcyB3aGl0ZXNwYWNlXG4gKi9cbmNvbnN0IHRyaW0gPSAoc3RyKSA9PiBzdHIudHJpbSA/XG4gIHN0ci50cmltKCkgOiBzdHIucmVwbGFjZSgvXltcXHNcXHVGRUZGXFx4QTBdK3xbXFxzXFx1RkVGRlxceEEwXSskL2csICcnKTtcblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYW4gQXJyYXkgb3IgYW4gT2JqZWN0IGludm9raW5nIGEgZnVuY3Rpb24gZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiBgb2JqYCBpcyBhbiBBcnJheSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGluZGV4LCBhbmQgY29tcGxldGUgYXJyYXkgZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiAnb2JqJyBpcyBhbiBPYmplY3QgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBrZXksIGFuZCBjb21wbGV0ZSBvYmplY3QgZm9yIGVhY2ggcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IG9iaiBUaGUgb2JqZWN0IHRvIGl0ZXJhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBjYWxsYmFjayB0byBpbnZva2UgZm9yIGVhY2ggaXRlbVxuICpcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW2FsbE93bktleXMgPSBmYWxzZV1cbiAqIEByZXR1cm5zIHthbnl9XG4gKi9cbmZ1bmN0aW9uIGZvckVhY2gob2JqLCBmbiwge2FsbE93bktleXMgPSBmYWxzZX0gPSB7fSkge1xuICAvLyBEb24ndCBib3RoZXIgaWYgbm8gdmFsdWUgcHJvdmlkZWRcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBpO1xuICBsZXQgbDtcblxuICAvLyBGb3JjZSBhbiBhcnJheSBpZiBub3QgYWxyZWFkeSBzb21ldGhpbmcgaXRlcmFibGVcbiAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgb2JqID0gW29ial07XG4gIH1cblxuICBpZiAoaXNBcnJheShvYmopKSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIGFycmF5IHZhbHVlc1xuICAgIGZvciAoaSA9IDAsIGwgPSBvYmoubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBmbi5jYWxsKG51bGwsIG9ialtpXSwgaSwgb2JqKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIG9iamVjdCBrZXlzXG4gICAgY29uc3Qga2V5cyA9IGFsbE93bktleXMgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopIDogT2JqZWN0LmtleXMob2JqKTtcbiAgICBjb25zdCBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgICBsZXQga2V5O1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgZm4uY2FsbChudWxsLCBvYmpba2V5XSwga2V5LCBvYmopO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kS2V5KG9iaiwga2V5KSB7XG4gIGtleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgbGV0IF9rZXk7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgX2tleSA9IGtleXNbaV07XG4gICAgaWYgKGtleSA9PT0gX2tleS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICByZXR1cm4gX2tleTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmNvbnN0IF9nbG9iYWwgPSAoKCkgPT4ge1xuICAvKmVzbGludCBuby11bmRlZjowKi9cbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZ2xvYmFsVGhpcztcbiAgcmV0dXJuIHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6ICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IGdsb2JhbClcbn0pKCk7XG5cbmNvbnN0IGlzQ29udGV4dERlZmluZWQgPSAoY29udGV4dCkgPT4gIWlzVW5kZWZpbmVkKGNvbnRleHQpICYmIGNvbnRleHQgIT09IF9nbG9iYWw7XG5cbi8qKlxuICogQWNjZXB0cyB2YXJhcmdzIGV4cGVjdGluZyBlYWNoIGFyZ3VtZW50IHRvIGJlIGFuIG9iamVjdCwgdGhlblxuICogaW1tdXRhYmx5IG1lcmdlcyB0aGUgcHJvcGVydGllcyBvZiBlYWNoIG9iamVjdCBhbmQgcmV0dXJucyByZXN1bHQuXG4gKlxuICogV2hlbiBtdWx0aXBsZSBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUga2V5IHRoZSBsYXRlciBvYmplY3QgaW5cbiAqIHRoZSBhcmd1bWVudHMgbGlzdCB3aWxsIHRha2UgcHJlY2VkZW5jZS5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVzdWx0ID0gbWVyZ2Uoe2ZvbzogMTIzfSwge2ZvbzogNDU2fSk7XG4gKiBjb25zb2xlLmxvZyhyZXN1bHQuZm9vKTsgLy8gb3V0cHV0cyA0NTZcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoxIE9iamVjdCB0byBtZXJnZVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJlc3VsdCBvZiBhbGwgbWVyZ2UgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBtZXJnZSgvKiBvYmoxLCBvYmoyLCBvYmozLCAuLi4gKi8pIHtcbiAgY29uc3Qge2Nhc2VsZXNzfSA9IGlzQ29udGV4dERlZmluZWQodGhpcykgJiYgdGhpcyB8fCB7fTtcbiAgY29uc3QgcmVzdWx0ID0ge307XG4gIGNvbnN0IGFzc2lnblZhbHVlID0gKHZhbCwga2V5KSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0S2V5ID0gY2FzZWxlc3MgJiYgZmluZEtleShyZXN1bHQsIGtleSkgfHwga2V5O1xuICAgIGlmIChpc1BsYWluT2JqZWN0KHJlc3VsdFt0YXJnZXRLZXldKSAmJiBpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gbWVyZ2UocmVzdWx0W3RhcmdldEtleV0sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gbWVyZ2Uoe30sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc0FycmF5KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gdmFsLnNsaWNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gdmFsO1xuICAgIH1cbiAgfTtcblxuICBmb3IgKGxldCBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBhcmd1bWVudHNbaV0gJiYgZm9yRWFjaChhcmd1bWVudHNbaV0sIGFzc2lnblZhbHVlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEV4dGVuZHMgb2JqZWN0IGEgYnkgbXV0YWJseSBhZGRpbmcgdG8gaXQgdGhlIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGEgVGhlIG9iamVjdCB0byBiZSBleHRlbmRlZFxuICogQHBhcmFtIHtPYmplY3R9IGIgVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgZnJvbVxuICogQHBhcmFtIHtPYmplY3R9IHRoaXNBcmcgVGhlIG9iamVjdCB0byBiaW5kIGZ1bmN0aW9uIHRvXG4gKlxuICogQHBhcmFtIHtCb29sZWFufSBbYWxsT3duS2V5c11cbiAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSByZXN1bHRpbmcgdmFsdWUgb2Ygb2JqZWN0IGFcbiAqL1xuY29uc3QgZXh0ZW5kID0gKGEsIGIsIHRoaXNBcmcsIHthbGxPd25LZXlzfT0ge30pID0+IHtcbiAgZm9yRWFjaChiLCAodmFsLCBrZXkpID0+IHtcbiAgICBpZiAodGhpc0FyZyAmJiBpc0Z1bmN0aW9uKHZhbCkpIHtcbiAgICAgIGFba2V5XSA9IGJpbmQodmFsLCB0aGlzQXJnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYVtrZXldID0gdmFsO1xuICAgIH1cbiAgfSwge2FsbE93bktleXN9KTtcbiAgcmV0dXJuIGE7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBieXRlIG9yZGVyIG1hcmtlci4gVGhpcyBjYXRjaGVzIEVGIEJCIEJGICh0aGUgVVRGLTggQk9NKVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50IHdpdGggQk9NXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gY29udGVudCB2YWx1ZSB3aXRob3V0IEJPTVxuICovXG5jb25zdCBzdHJpcEJPTSA9IChjb250ZW50KSA9PiB7XG4gIGlmIChjb250ZW50LmNoYXJDb2RlQXQoMCkgPT09IDB4RkVGRikge1xuICAgIGNvbnRlbnQgPSBjb250ZW50LnNsaWNlKDEpO1xuICB9XG4gIHJldHVybiBjb250ZW50O1xufTtcblxuLyoqXG4gKiBJbmhlcml0IHRoZSBwcm90b3R5cGUgbWV0aG9kcyBmcm9tIG9uZSBjb25zdHJ1Y3RvciBpbnRvIGFub3RoZXJcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBzdXBlckNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge29iamVjdH0gW3Byb3BzXVxuICogQHBhcmFtIHtvYmplY3R9IFtkZXNjcmlwdG9yc11cbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuY29uc3QgaW5oZXJpdHMgPSAoY29uc3RydWN0b3IsIHN1cGVyQ29uc3RydWN0b3IsIHByb3BzLCBkZXNjcmlwdG9ycykgPT4ge1xuICBjb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ29uc3RydWN0b3IucHJvdG90eXBlLCBkZXNjcmlwdG9ycyk7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29uc3RydWN0b3IsICdzdXBlcicsIHtcbiAgICB2YWx1ZTogc3VwZXJDb25zdHJ1Y3Rvci5wcm90b3R5cGVcbiAgfSk7XG4gIHByb3BzICYmIE9iamVjdC5hc3NpZ24oY29uc3RydWN0b3IucHJvdG90eXBlLCBwcm9wcyk7XG59O1xuXG4vKipcbiAqIFJlc29sdmUgb2JqZWN0IHdpdGggZGVlcCBwcm90b3R5cGUgY2hhaW4gdG8gYSBmbGF0IG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZU9iaiBzb3VyY2Ugb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gW2Rlc3RPYmpdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufEJvb2xlYW59IFtmaWx0ZXJdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJvcEZpbHRlcl1cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICovXG5jb25zdCB0b0ZsYXRPYmplY3QgPSAoc291cmNlT2JqLCBkZXN0T2JqLCBmaWx0ZXIsIHByb3BGaWx0ZXIpID0+IHtcbiAgbGV0IHByb3BzO1xuICBsZXQgaTtcbiAgbGV0IHByb3A7XG4gIGNvbnN0IG1lcmdlZCA9IHt9O1xuXG4gIGRlc3RPYmogPSBkZXN0T2JqIHx8IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgaWYgKHNvdXJjZU9iaiA9PSBudWxsKSByZXR1cm4gZGVzdE9iajtcblxuICBkbyB7XG4gICAgcHJvcHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzb3VyY2VPYmopO1xuICAgIGkgPSBwcm9wcy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSA+IDApIHtcbiAgICAgIHByb3AgPSBwcm9wc1tpXTtcbiAgICAgIGlmICgoIXByb3BGaWx0ZXIgfHwgcHJvcEZpbHRlcihwcm9wLCBzb3VyY2VPYmosIGRlc3RPYmopKSAmJiAhbWVyZ2VkW3Byb3BdKSB7XG4gICAgICAgIGRlc3RPYmpbcHJvcF0gPSBzb3VyY2VPYmpbcHJvcF07XG4gICAgICAgIG1lcmdlZFtwcm9wXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHNvdXJjZU9iaiA9IGZpbHRlciAhPT0gZmFsc2UgJiYgZ2V0UHJvdG90eXBlT2Yoc291cmNlT2JqKTtcbiAgfSB3aGlsZSAoc291cmNlT2JqICYmICghZmlsdGVyIHx8IGZpbHRlcihzb3VyY2VPYmosIGRlc3RPYmopKSAmJiBzb3VyY2VPYmogIT09IE9iamVjdC5wcm90b3R5cGUpO1xuXG4gIHJldHVybiBkZXN0T2JqO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSBzdHJpbmcgZW5kcyB3aXRoIHRoZSBjaGFyYWN0ZXJzIG9mIGEgc3BlY2lmaWVkIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZWFyY2hTdHJpbmdcbiAqIEBwYXJhbSB7TnVtYmVyfSBbcG9zaXRpb249IDBdXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmNvbnN0IGVuZHNXaXRoID0gKHN0ciwgc2VhcmNoU3RyaW5nLCBwb3NpdGlvbikgPT4ge1xuICBzdHIgPSBTdHJpbmcoc3RyKTtcbiAgaWYgKHBvc2l0aW9uID09PSB1bmRlZmluZWQgfHwgcG9zaXRpb24gPiBzdHIubGVuZ3RoKSB7XG4gICAgcG9zaXRpb24gPSBzdHIubGVuZ3RoO1xuICB9XG4gIHBvc2l0aW9uIC09IHNlYXJjaFN0cmluZy5sZW5ndGg7XG4gIGNvbnN0IGxhc3RJbmRleCA9IHN0ci5pbmRleE9mKHNlYXJjaFN0cmluZywgcG9zaXRpb24pO1xuICByZXR1cm4gbGFzdEluZGV4ICE9PSAtMSAmJiBsYXN0SW5kZXggPT09IHBvc2l0aW9uO1xufTtcblxuXG4vKipcbiAqIFJldHVybnMgbmV3IGFycmF5IGZyb20gYXJyYXkgbGlrZSBvYmplY3Qgb3IgbnVsbCBpZiBmYWlsZWRcbiAqXG4gKiBAcGFyYW0geyp9IFt0aGluZ11cbiAqXG4gKiBAcmV0dXJucyB7P0FycmF5fVxuICovXG5jb25zdCB0b0FycmF5ID0gKHRoaW5nKSA9PiB7XG4gIGlmICghdGhpbmcpIHJldHVybiBudWxsO1xuICBpZiAoaXNBcnJheSh0aGluZykpIHJldHVybiB0aGluZztcbiAgbGV0IGkgPSB0aGluZy5sZW5ndGg7XG4gIGlmICghaXNOdW1iZXIoaSkpIHJldHVybiBudWxsO1xuICBjb25zdCBhcnIgPSBuZXcgQXJyYXkoaSk7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgYXJyW2ldID0gdGhpbmdbaV07XG4gIH1cbiAgcmV0dXJuIGFycjtcbn07XG5cbi8qKlxuICogQ2hlY2tpbmcgaWYgdGhlIFVpbnQ4QXJyYXkgZXhpc3RzIGFuZCBpZiBpdCBkb2VzLCBpdCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBjaGVja3MgaWYgdGhlXG4gKiB0aGluZyBwYXNzZWQgaW4gaXMgYW4gaW5zdGFuY2Ugb2YgVWludDhBcnJheVxuICpcbiAqIEBwYXJhbSB7VHlwZWRBcnJheX1cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5jb25zdCBpc1R5cGVkQXJyYXkgPSAoVHlwZWRBcnJheSA9PiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHJldHVybiB0aGluZyA9PiB7XG4gICAgcmV0dXJuIFR5cGVkQXJyYXkgJiYgdGhpbmcgaW5zdGFuY2VvZiBUeXBlZEFycmF5O1xuICB9O1xufSkodHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnICYmIGdldFByb3RvdHlwZU9mKFVpbnQ4QXJyYXkpKTtcblxuLyoqXG4gKiBGb3IgZWFjaCBlbnRyeSBpbiB0aGUgb2JqZWN0LCBjYWxsIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBrZXkgYW5kIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PGFueSwgYW55Pn0gb2JqIC0gVGhlIG9iamVjdCB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAtIFRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGVudHJ5LlxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5jb25zdCBmb3JFYWNoRW50cnkgPSAob2JqLCBmbikgPT4ge1xuICBjb25zdCBnZW5lcmF0b3IgPSBvYmogJiYgb2JqW1N5bWJvbC5pdGVyYXRvcl07XG5cbiAgY29uc3QgaXRlcmF0b3IgPSBnZW5lcmF0b3IuY2FsbChvYmopO1xuXG4gIGxldCByZXN1bHQ7XG5cbiAgd2hpbGUgKChyZXN1bHQgPSBpdGVyYXRvci5uZXh0KCkpICYmICFyZXN1bHQuZG9uZSkge1xuICAgIGNvbnN0IHBhaXIgPSByZXN1bHQudmFsdWU7XG4gICAgZm4uY2FsbChvYmosIHBhaXJbMF0sIHBhaXJbMV0pO1xuICB9XG59O1xuXG4vKipcbiAqIEl0IHRha2VzIGEgcmVndWxhciBleHByZXNzaW9uIGFuZCBhIHN0cmluZywgYW5kIHJldHVybnMgYW4gYXJyYXkgb2YgYWxsIHRoZSBtYXRjaGVzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJlZ0V4cCAtIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggYWdhaW5zdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgLSBUaGUgc3RyaW5nIHRvIHNlYXJjaC5cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXk8Ym9vbGVhbj59XG4gKi9cbmNvbnN0IG1hdGNoQWxsID0gKHJlZ0V4cCwgc3RyKSA9PiB7XG4gIGxldCBtYXRjaGVzO1xuICBjb25zdCBhcnIgPSBbXTtcblxuICB3aGlsZSAoKG1hdGNoZXMgPSByZWdFeHAuZXhlYyhzdHIpKSAhPT0gbnVsbCkge1xuICAgIGFyci5wdXNoKG1hdGNoZXMpO1xuICB9XG5cbiAgcmV0dXJuIGFycjtcbn07XG5cbi8qIENoZWNraW5nIGlmIHRoZSBraW5kT2ZUZXN0IGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIHBhc3NlZCBhbiBIVE1MRm9ybUVsZW1lbnQuICovXG5jb25zdCBpc0hUTUxGb3JtID0ga2luZE9mVGVzdCgnSFRNTEZvcm1FbGVtZW50Jyk7XG5cbmNvbnN0IHRvQ2FtZWxDYXNlID0gc3RyID0+IHtcbiAgcmV0dXJuIHN0ci50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xcc10oW2EtelxcZF0pKFxcdyopL2csXG4gICAgZnVuY3Rpb24gcmVwbGFjZXIobSwgcDEsIHAyKSB7XG4gICAgICByZXR1cm4gcDEudG9VcHBlckNhc2UoKSArIHAyO1xuICAgIH1cbiAgKTtcbn07XG5cbi8qIENyZWF0aW5nIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGNoZWNrIGlmIGFuIG9iamVjdCBoYXMgYSBwcm9wZXJ0eS4gKi9cbmNvbnN0IGhhc093blByb3BlcnR5ID0gKCh7aGFzT3duUHJvcGVydHl9KSA9PiAob2JqLCBwcm9wKSA9PiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpKE9iamVjdC5wcm90b3R5cGUpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgUmVnRXhwIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBSZWdFeHAgb2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNSZWdFeHAgPSBraW5kT2ZUZXN0KCdSZWdFeHAnKTtcblxuY29uc3QgcmVkdWNlRGVzY3JpcHRvcnMgPSAob2JqLCByZWR1Y2VyKSA9PiB7XG4gIGNvbnN0IGRlc2NyaXB0b3JzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqKTtcbiAgY29uc3QgcmVkdWNlZERlc2NyaXB0b3JzID0ge307XG5cbiAgZm9yRWFjaChkZXNjcmlwdG9ycywgKGRlc2NyaXB0b3IsIG5hbWUpID0+IHtcbiAgICBsZXQgcmV0O1xuICAgIGlmICgocmV0ID0gcmVkdWNlcihkZXNjcmlwdG9yLCBuYW1lLCBvYmopKSAhPT0gZmFsc2UpIHtcbiAgICAgIHJlZHVjZWREZXNjcmlwdG9yc1tuYW1lXSA9IHJldCB8fCBkZXNjcmlwdG9yO1xuICAgIH1cbiAgfSk7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMob2JqLCByZWR1Y2VkRGVzY3JpcHRvcnMpO1xufTtcblxuLyoqXG4gKiBNYWtlcyBhbGwgbWV0aG9kcyByZWFkLW9ubHlcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqL1xuXG5jb25zdCBmcmVlemVNZXRob2RzID0gKG9iaikgPT4ge1xuICByZWR1Y2VEZXNjcmlwdG9ycyhvYmosIChkZXNjcmlwdG9yLCBuYW1lKSA9PiB7XG4gICAgLy8gc2tpcCByZXN0cmljdGVkIHByb3BzIGluIHN0cmljdCBtb2RlXG4gICAgaWYgKGlzRnVuY3Rpb24ob2JqKSAmJiBbJ2FyZ3VtZW50cycsICdjYWxsZXInLCAnY2FsbGVlJ10uaW5kZXhPZihuYW1lKSAhPT0gLTEpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IG9ialtuYW1lXTtcblxuICAgIGlmICghaXNGdW5jdGlvbih2YWx1ZSkpIHJldHVybjtcblxuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGZhbHNlO1xuXG4gICAgaWYgKCd3cml0YWJsZScgaW4gZGVzY3JpcHRvcikge1xuICAgICAgZGVzY3JpcHRvci53cml0YWJsZSA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghZGVzY3JpcHRvci5zZXQpIHtcbiAgICAgIGRlc2NyaXB0b3Iuc2V0ID0gKCkgPT4ge1xuICAgICAgICB0aHJvdyBFcnJvcignQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgXFwnJyArIG5hbWUgKyAnXFwnJyk7XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG59O1xuXG5jb25zdCB0b09iamVjdFNldCA9IChhcnJheU9yU3RyaW5nLCBkZWxpbWl0ZXIpID0+IHtcbiAgY29uc3Qgb2JqID0ge307XG5cbiAgY29uc3QgZGVmaW5lID0gKGFycikgPT4ge1xuICAgIGFyci5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgIG9ialt2YWx1ZV0gPSB0cnVlO1xuICAgIH0pO1xuICB9O1xuXG4gIGlzQXJyYXkoYXJyYXlPclN0cmluZykgPyBkZWZpbmUoYXJyYXlPclN0cmluZykgOiBkZWZpbmUoU3RyaW5nKGFycmF5T3JTdHJpbmcpLnNwbGl0KGRlbGltaXRlcikpO1xuXG4gIHJldHVybiBvYmo7XG59O1xuXG5jb25zdCBub29wID0gKCkgPT4ge307XG5cbmNvbnN0IHRvRmluaXRlTnVtYmVyID0gKHZhbHVlLCBkZWZhdWx0VmFsdWUpID0+IHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgTnVtYmVyLmlzRmluaXRlKHZhbHVlID0gK3ZhbHVlKSA/IHZhbHVlIDogZGVmYXVsdFZhbHVlO1xufTtcblxuY29uc3QgQUxQSEEgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonO1xuXG5jb25zdCBESUdJVCA9ICcwMTIzNDU2Nzg5JztcblxuY29uc3QgQUxQSEFCRVQgPSB7XG4gIERJR0lULFxuICBBTFBIQSxcbiAgQUxQSEFfRElHSVQ6IEFMUEhBICsgQUxQSEEudG9VcHBlckNhc2UoKSArIERJR0lUXG59O1xuXG5jb25zdCBnZW5lcmF0ZVN0cmluZyA9IChzaXplID0gMTYsIGFscGhhYmV0ID0gQUxQSEFCRVQuQUxQSEFfRElHSVQpID0+IHtcbiAgbGV0IHN0ciA9ICcnO1xuICBjb25zdCB7bGVuZ3RofSA9IGFscGhhYmV0O1xuICB3aGlsZSAoc2l6ZS0tKSB7XG4gICAgc3RyICs9IGFscGhhYmV0W01hdGgucmFuZG9tKCkgKiBsZW5ndGh8MF07XG4gIH1cblxuICByZXR1cm4gc3RyO1xufTtcblxuLyoqXG4gKiBJZiB0aGUgdGhpbmcgaXMgYSBGb3JtRGF0YSBvYmplY3QsIHJldHVybiB0cnVlLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxuICpcbiAqIEBwYXJhbSB7dW5rbm93bn0gdGhpbmcgLSBUaGUgdGhpbmcgdG8gY2hlY2suXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzU3BlY0NvbXBsaWFudEZvcm0odGhpbmcpIHtcbiAgcmV0dXJuICEhKHRoaW5nICYmIGlzRnVuY3Rpb24odGhpbmcuYXBwZW5kKSAmJiB0aGluZ1tTeW1ib2wudG9TdHJpbmdUYWddID09PSAnRm9ybURhdGEnICYmIHRoaW5nW1N5bWJvbC5pdGVyYXRvcl0pO1xufVxuXG5jb25zdCB0b0pTT05PYmplY3QgPSAob2JqKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IEFycmF5KDEwKTtcblxuICBjb25zdCB2aXNpdCA9IChzb3VyY2UsIGkpID0+IHtcblxuICAgIGlmIChpc09iamVjdChzb3VyY2UpKSB7XG4gICAgICBpZiAoc3RhY2suaW5kZXhPZihzb3VyY2UpID49IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZighKCd0b0pTT04nIGluIHNvdXJjZSkpIHtcbiAgICAgICAgc3RhY2tbaV0gPSBzb3VyY2U7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGlzQXJyYXkoc291cmNlKSA/IFtdIDoge307XG5cbiAgICAgICAgZm9yRWFjaChzb3VyY2UsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVkdWNlZFZhbHVlID0gdmlzaXQodmFsdWUsIGkgKyAxKTtcbiAgICAgICAgICAhaXNVbmRlZmluZWQocmVkdWNlZFZhbHVlKSAmJiAodGFyZ2V0W2tleV0gPSByZWR1Y2VkVmFsdWUpO1xuICAgICAgICB9KTtcblxuICAgICAgICBzdGFja1tpXSA9IHVuZGVmaW5lZDtcblxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzb3VyY2U7XG4gIH07XG5cbiAgcmV0dXJuIHZpc2l0KG9iaiwgMCk7XG59O1xuXG5jb25zdCBpc0FzeW5jRm4gPSBraW5kT2ZUZXN0KCdBc3luY0Z1bmN0aW9uJyk7XG5cbmNvbnN0IGlzVGhlbmFibGUgPSAodGhpbmcpID0+XG4gIHRoaW5nICYmIChpc09iamVjdCh0aGluZykgfHwgaXNGdW5jdGlvbih0aGluZykpICYmIGlzRnVuY3Rpb24odGhpbmcudGhlbikgJiYgaXNGdW5jdGlvbih0aGluZy5jYXRjaCk7XG5cbi8vIG9yaWdpbmFsIGNvZGVcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EaWdpdGFsQnJhaW5KUy9BeGlvc1Byb21pc2UvYmxvYi8xNmRlYWIxMzcxMGVjMDk3Nzk5MjIxMzFmM2ZhNTk1NDMyMGY4M2FiL2xpYi91dGlscy5qcyNMMTEtTDM0XG5cbmNvbnN0IF9zZXRJbW1lZGlhdGUgPSAoKHNldEltbWVkaWF0ZVN1cHBvcnRlZCwgcG9zdE1lc3NhZ2VTdXBwb3J0ZWQpID0+IHtcbiAgaWYgKHNldEltbWVkaWF0ZVN1cHBvcnRlZCkge1xuICAgIHJldHVybiBzZXRJbW1lZGlhdGU7XG4gIH1cblxuICByZXR1cm4gcG9zdE1lc3NhZ2VTdXBwb3J0ZWQgPyAoKHRva2VuLCBjYWxsYmFja3MpID0+IHtcbiAgICBfZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsICh7c291cmNlLCBkYXRhfSkgPT4ge1xuICAgICAgaWYgKHNvdXJjZSA9PT0gX2dsb2JhbCAmJiBkYXRhID09PSB0b2tlbikge1xuICAgICAgICBjYWxsYmFja3MubGVuZ3RoICYmIGNhbGxiYWNrcy5zaGlmdCgpKCk7XG4gICAgICB9XG4gICAgfSwgZmFsc2UpO1xuXG4gICAgcmV0dXJuIChjYikgPT4ge1xuICAgICAgY2FsbGJhY2tzLnB1c2goY2IpO1xuICAgICAgX2dsb2JhbC5wb3N0TWVzc2FnZSh0b2tlbiwgXCIqXCIpO1xuICAgIH1cbiAgfSkoYGF4aW9zQCR7TWF0aC5yYW5kb20oKX1gLCBbXSkgOiAoY2IpID0+IHNldFRpbWVvdXQoY2IpO1xufSkoXG4gIHR5cGVvZiBzZXRJbW1lZGlhdGUgPT09ICdmdW5jdGlvbicsXG4gIGlzRnVuY3Rpb24oX2dsb2JhbC5wb3N0TWVzc2FnZSlcbik7XG5cbmNvbnN0IGFzYXAgPSB0eXBlb2YgcXVldWVNaWNyb3Rhc2sgIT09ICd1bmRlZmluZWQnID9cbiAgcXVldWVNaWNyb3Rhc2suYmluZChfZ2xvYmFsKSA6ICggdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHByb2Nlc3MubmV4dFRpY2sgfHwgX3NldEltbWVkaWF0ZSk7XG5cbi8vICoqKioqKioqKioqKioqKioqKioqKlxuXG5jb25zdCB1dGlscyQxID0ge1xuICBpc0FycmF5LFxuICBpc0FycmF5QnVmZmVyLFxuICBpc0J1ZmZlcixcbiAgaXNGb3JtRGF0YSxcbiAgaXNBcnJheUJ1ZmZlclZpZXcsXG4gIGlzU3RyaW5nLFxuICBpc051bWJlcixcbiAgaXNCb29sZWFuLFxuICBpc09iamVjdCxcbiAgaXNQbGFpbk9iamVjdCxcbiAgaXNSZWFkYWJsZVN0cmVhbSxcbiAgaXNSZXF1ZXN0LFxuICBpc1Jlc3BvbnNlLFxuICBpc0hlYWRlcnMsXG4gIGlzVW5kZWZpbmVkLFxuICBpc0RhdGUsXG4gIGlzRmlsZSxcbiAgaXNCbG9iLFxuICBpc1JlZ0V4cCxcbiAgaXNGdW5jdGlvbixcbiAgaXNTdHJlYW0sXG4gIGlzVVJMU2VhcmNoUGFyYW1zLFxuICBpc1R5cGVkQXJyYXksXG4gIGlzRmlsZUxpc3QsXG4gIGZvckVhY2gsXG4gIG1lcmdlLFxuICBleHRlbmQsXG4gIHRyaW0sXG4gIHN0cmlwQk9NLFxuICBpbmhlcml0cyxcbiAgdG9GbGF0T2JqZWN0LFxuICBraW5kT2YsXG4gIGtpbmRPZlRlc3QsXG4gIGVuZHNXaXRoLFxuICB0b0FycmF5LFxuICBmb3JFYWNoRW50cnksXG4gIG1hdGNoQWxsLFxuICBpc0hUTUxGb3JtLFxuICBoYXNPd25Qcm9wZXJ0eSxcbiAgaGFzT3duUHJvcDogaGFzT3duUHJvcGVydHksIC8vIGFuIGFsaWFzIHRvIGF2b2lkIEVTTGludCBuby1wcm90b3R5cGUtYnVpbHRpbnMgZGV0ZWN0aW9uXG4gIHJlZHVjZURlc2NyaXB0b3JzLFxuICBmcmVlemVNZXRob2RzLFxuICB0b09iamVjdFNldCxcbiAgdG9DYW1lbENhc2UsXG4gIG5vb3AsXG4gIHRvRmluaXRlTnVtYmVyLFxuICBmaW5kS2V5LFxuICBnbG9iYWw6IF9nbG9iYWwsXG4gIGlzQ29udGV4dERlZmluZWQsXG4gIEFMUEhBQkVULFxuICBnZW5lcmF0ZVN0cmluZyxcbiAgaXNTcGVjQ29tcGxpYW50Rm9ybSxcbiAgdG9KU09OT2JqZWN0LFxuICBpc0FzeW5jRm4sXG4gIGlzVGhlbmFibGUsXG4gIHNldEltbWVkaWF0ZTogX3NldEltbWVkaWF0ZSxcbiAgYXNhcFxufTtcblxuLyoqXG4gKiBDcmVhdGUgYW4gRXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UsIGNvbmZpZywgZXJyb3IgY29kZSwgcmVxdWVzdCBhbmQgcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvZGVdIFRoZSBlcnJvciBjb2RlIChmb3IgZXhhbXBsZSwgJ0VDT05OQUJPUlRFRCcpLlxuICogQHBhcmFtIHtPYmplY3R9IFtjb25maWddIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge09iamVjdH0gW3JlcXVlc3RdIFRoZSByZXF1ZXN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXNwb25zZV0gVGhlIHJlc3BvbnNlLlxuICpcbiAqIEByZXR1cm5zIHtFcnJvcn0gVGhlIGNyZWF0ZWQgZXJyb3IuXG4gKi9cbmZ1bmN0aW9uIEF4aW9zRXJyb3IobWVzc2FnZSwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSkge1xuICBFcnJvci5jYWxsKHRoaXMpO1xuXG4gIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuc3RhY2sgPSAobmV3IEVycm9yKCkpLnN0YWNrO1xuICB9XG5cbiAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgdGhpcy5uYW1lID0gJ0F4aW9zRXJyb3InO1xuICBjb2RlICYmICh0aGlzLmNvZGUgPSBjb2RlKTtcbiAgY29uZmlnICYmICh0aGlzLmNvbmZpZyA9IGNvbmZpZyk7XG4gIHJlcXVlc3QgJiYgKHRoaXMucmVxdWVzdCA9IHJlcXVlc3QpO1xuICByZXNwb25zZSAmJiAodGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlKTtcbn1cblxudXRpbHMkMS5pbmhlcml0cyhBeGlvc0Vycm9yLCBFcnJvciwge1xuICB0b0pTT046IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gU3RhbmRhcmRcbiAgICAgIG1lc3NhZ2U6IHRoaXMubWVzc2FnZSxcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIC8vIE1pY3Jvc29mdFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICBudW1iZXI6IHRoaXMubnVtYmVyLFxuICAgICAgLy8gTW96aWxsYVxuICAgICAgZmlsZU5hbWU6IHRoaXMuZmlsZU5hbWUsXG4gICAgICBsaW5lTnVtYmVyOiB0aGlzLmxpbmVOdW1iZXIsXG4gICAgICBjb2x1bW5OdW1iZXI6IHRoaXMuY29sdW1uTnVtYmVyLFxuICAgICAgc3RhY2s6IHRoaXMuc3RhY2ssXG4gICAgICAvLyBBeGlvc1xuICAgICAgY29uZmlnOiB1dGlscyQxLnRvSlNPTk9iamVjdCh0aGlzLmNvbmZpZyksXG4gICAgICBjb2RlOiB0aGlzLmNvZGUsXG4gICAgICBzdGF0dXM6IHRoaXMucmVzcG9uc2UgJiYgdGhpcy5yZXNwb25zZS5zdGF0dXMgPyB0aGlzLnJlc3BvbnNlLnN0YXR1cyA6IG51bGxcbiAgICB9O1xuICB9XG59KTtcblxuY29uc3QgcHJvdG90eXBlJDEgPSBBeGlvc0Vycm9yLnByb3RvdHlwZTtcbmNvbnN0IGRlc2NyaXB0b3JzID0ge307XG5cbltcbiAgJ0VSUl9CQURfT1BUSU9OX1ZBTFVFJyxcbiAgJ0VSUl9CQURfT1BUSU9OJyxcbiAgJ0VDT05OQUJPUlRFRCcsXG4gICdFVElNRURPVVQnLFxuICAnRVJSX05FVFdPUksnLFxuICAnRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUycsXG4gICdFUlJfREVQUkVDQVRFRCcsXG4gICdFUlJfQkFEX1JFU1BPTlNFJyxcbiAgJ0VSUl9CQURfUkVRVUVTVCcsXG4gICdFUlJfQ0FOQ0VMRUQnLFxuICAnRVJSX05PVF9TVVBQT1JUJyxcbiAgJ0VSUl9JTlZBTElEX1VSTCdcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5dLmZvckVhY2goY29kZSA9PiB7XG4gIGRlc2NyaXB0b3JzW2NvZGVdID0ge3ZhbHVlOiBjb2RlfTtcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBeGlvc0Vycm9yLCBkZXNjcmlwdG9ycyk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG90eXBlJDEsICdpc0F4aW9zRXJyb3InLCB7dmFsdWU6IHRydWV9KTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbkF4aW9zRXJyb3IuZnJvbSA9IChlcnJvciwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSwgY3VzdG9tUHJvcHMpID0+IHtcbiAgY29uc3QgYXhpb3NFcnJvciA9IE9iamVjdC5jcmVhdGUocHJvdG90eXBlJDEpO1xuXG4gIHV0aWxzJDEudG9GbGF0T2JqZWN0KGVycm9yLCBheGlvc0Vycm9yLCBmdW5jdGlvbiBmaWx0ZXIob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAhPT0gRXJyb3IucHJvdG90eXBlO1xuICB9LCBwcm9wID0+IHtcbiAgICByZXR1cm4gcHJvcCAhPT0gJ2lzQXhpb3NFcnJvcic7XG4gIH0pO1xuXG4gIEF4aW9zRXJyb3IuY2FsbChheGlvc0Vycm9yLCBlcnJvci5tZXNzYWdlLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlKTtcblxuICBheGlvc0Vycm9yLmNhdXNlID0gZXJyb3I7XG5cbiAgYXhpb3NFcnJvci5uYW1lID0gZXJyb3IubmFtZTtcblxuICBjdXN0b21Qcm9wcyAmJiBPYmplY3QuYXNzaWduKGF4aW9zRXJyb3IsIGN1c3RvbVByb3BzKTtcblxuICByZXR1cm4gYXhpb3NFcnJvcjtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgZ2l2ZW4gdGhpbmcgaXMgYSBhcnJheSBvciBqcyBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRoaW5nIC0gVGhlIG9iamVjdCBvciBhcnJheSB0byBiZSB2aXNpdGVkLlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc1Zpc2l0YWJsZSh0aGluZykge1xuICByZXR1cm4gdXRpbHMkMS5pc1BsYWluT2JqZWN0KHRoaW5nKSB8fCB1dGlscyQxLmlzQXJyYXkodGhpbmcpO1xufVxuXG4vKipcbiAqIEl0IHJlbW92ZXMgdGhlIGJyYWNrZXRzIGZyb20gdGhlIGVuZCBvZiBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBwYXJhbWV0ZXIuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gdGhlIGtleSB3aXRob3V0IHRoZSBicmFja2V0cy5cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQnJhY2tldHMoa2V5KSB7XG4gIHJldHVybiB1dGlscyQxLmVuZHNXaXRoKGtleSwgJ1tdJykgPyBrZXkuc2xpY2UoMCwgLTIpIDoga2V5O1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgcGF0aCwgYSBrZXksIGFuZCBhIGJvb2xlYW4sIGFuZCByZXR1cm5zIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBUaGUgcGF0aCB0byB0aGUgY3VycmVudCBrZXkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgY3VycmVudCBvYmplY3QgYmVpbmcgaXRlcmF0ZWQgb3Zlci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkb3RzIC0gSWYgdHJ1ZSwgdGhlIGtleSB3aWxsIGJlIHJlbmRlcmVkIHdpdGggZG90cyBpbnN0ZWFkIG9mIGJyYWNrZXRzLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBwYXRoIHRvIHRoZSBjdXJyZW50IGtleS5cbiAqL1xuZnVuY3Rpb24gcmVuZGVyS2V5KHBhdGgsIGtleSwgZG90cykge1xuICBpZiAoIXBhdGgpIHJldHVybiBrZXk7XG4gIHJldHVybiBwYXRoLmNvbmNhdChrZXkpLm1hcChmdW5jdGlvbiBlYWNoKHRva2VuLCBpKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgdG9rZW4gPSByZW1vdmVCcmFja2V0cyh0b2tlbik7XG4gICAgcmV0dXJuICFkb3RzICYmIGkgPyAnWycgKyB0b2tlbiArICddJyA6IHRva2VuO1xuICB9KS5qb2luKGRvdHMgPyAnLicgOiAnJyk7XG59XG5cbi8qKlxuICogSWYgdGhlIGFycmF5IGlzIGFuIGFycmF5IGFuZCBub25lIG9mIGl0cyBlbGVtZW50cyBhcmUgdmlzaXRhYmxlLCB0aGVuIGl0J3MgYSBmbGF0IGFycmF5LlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gYXJyIC0gVGhlIGFycmF5IHRvIGNoZWNrXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzRmxhdEFycmF5KGFycikge1xuICByZXR1cm4gdXRpbHMkMS5pc0FycmF5KGFycikgJiYgIWFyci5zb21lKGlzVmlzaXRhYmxlKTtcbn1cblxuY29uc3QgcHJlZGljYXRlcyA9IHV0aWxzJDEudG9GbGF0T2JqZWN0KHV0aWxzJDEsIHt9LCBudWxsLCBmdW5jdGlvbiBmaWx0ZXIocHJvcCkge1xuICByZXR1cm4gL15pc1tBLVpdLy50ZXN0KHByb3ApO1xufSk7XG5cbi8qKlxuICogQ29udmVydCBhIGRhdGEgb2JqZWN0IHRvIEZvcm1EYXRhXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHBhcmFtIHs/T2JqZWN0fSBbZm9ybURhdGFdXG4gKiBAcGFyYW0gez9PYmplY3R9IFtvcHRpb25zXVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMudmlzaXRvcl1cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMubWV0YVRva2VucyA9IHRydWVdXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLmRvdHMgPSBmYWxzZV1cbiAqIEBwYXJhbSB7P0Jvb2xlYW59IFtvcHRpb25zLmluZGV4ZXMgPSBmYWxzZV1cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICoqL1xuXG4vKipcbiAqIEl0IGNvbnZlcnRzIGFuIG9iamVjdCBpbnRvIGEgRm9ybURhdGEgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3Q8YW55LCBhbnk+fSBvYmogLSBUaGUgb2JqZWN0IHRvIGNvbnZlcnQgdG8gZm9ybSBkYXRhLlxuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1EYXRhIC0gVGhlIEZvcm1EYXRhIG9iamVjdCB0byBhcHBlbmQgdG8uXG4gKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJuc1xuICovXG5mdW5jdGlvbiB0b0Zvcm1EYXRhKG9iaiwgZm9ybURhdGEsIG9wdGlvbnMpIHtcbiAgaWYgKCF1dGlscyQxLmlzT2JqZWN0KG9iaikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBmb3JtRGF0YSA9IGZvcm1EYXRhIHx8IG5ldyAoRm9ybURhdGFfX2RlZmF1bHRbXCJkZWZhdWx0XCJdIHx8IEZvcm1EYXRhKSgpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBvcHRpb25zID0gdXRpbHMkMS50b0ZsYXRPYmplY3Qob3B0aW9ucywge1xuICAgIG1ldGFUb2tlbnM6IHRydWUsXG4gICAgZG90czogZmFsc2UsXG4gICAgaW5kZXhlczogZmFsc2VcbiAgfSwgZmFsc2UsIGZ1bmN0aW9uIGRlZmluZWQob3B0aW9uLCBzb3VyY2UpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgICByZXR1cm4gIXV0aWxzJDEuaXNVbmRlZmluZWQoc291cmNlW29wdGlvbl0pO1xuICB9KTtcblxuICBjb25zdCBtZXRhVG9rZW5zID0gb3B0aW9ucy5tZXRhVG9rZW5zO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgY29uc3QgdmlzaXRvciA9IG9wdGlvbnMudmlzaXRvciB8fCBkZWZhdWx0VmlzaXRvcjtcbiAgY29uc3QgZG90cyA9IG9wdGlvbnMuZG90cztcbiAgY29uc3QgaW5kZXhlcyA9IG9wdGlvbnMuaW5kZXhlcztcbiAgY29uc3QgX0Jsb2IgPSBvcHRpb25zLkJsb2IgfHwgdHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnICYmIEJsb2I7XG4gIGNvbnN0IHVzZUJsb2IgPSBfQmxvYiAmJiB1dGlscyQxLmlzU3BlY0NvbXBsaWFudEZvcm0oZm9ybURhdGEpO1xuXG4gIGlmICghdXRpbHMkMS5pc0Z1bmN0aW9uKHZpc2l0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndmlzaXRvciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbnZlcnRWYWx1ZSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuICcnO1xuXG4gICAgaWYgKHV0aWxzJDEuaXNEYXRlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlLnRvSVNPU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgaWYgKCF1c2VCbG9iICYmIHV0aWxzJDEuaXNCbG9iKHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ0Jsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuJyk7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzJDEuaXNBcnJheUJ1ZmZlcih2YWx1ZSkgfHwgdXRpbHMkMS5pc1R5cGVkQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdXNlQmxvYiAmJiB0eXBlb2YgQmxvYiA9PT0gJ2Z1bmN0aW9uJyA/IG5ldyBCbG9iKFt2YWx1ZV0pIDogQnVmZmVyLmZyb20odmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZhdWx0IHZpc2l0b3IuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSBrZXlcbiAgICogQHBhcmFtIHtBcnJheTxTdHJpbmd8TnVtYmVyPn0gcGF0aFxuICAgKiBAdGhpcyB7Rm9ybURhdGF9XG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSByZXR1cm4gdHJ1ZSB0byB2aXNpdCB0aGUgZWFjaCBwcm9wIG9mIHRoZSB2YWx1ZSByZWN1cnNpdmVseVxuICAgKi9cbiAgZnVuY3Rpb24gZGVmYXVsdFZpc2l0b3IodmFsdWUsIGtleSwgcGF0aCkge1xuICAgIGxldCBhcnIgPSB2YWx1ZTtcblxuICAgIGlmICh2YWx1ZSAmJiAhcGF0aCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAodXRpbHMkMS5lbmRzV2l0aChrZXksICd7fScpKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBrZXkgPSBtZXRhVG9rZW5zID8ga2V5IDoga2V5LnNsaWNlKDAsIC0yKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIHZhbHVlID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgKHV0aWxzJDEuaXNBcnJheSh2YWx1ZSkgJiYgaXNGbGF0QXJyYXkodmFsdWUpKSB8fFxuICAgICAgICAoKHV0aWxzJDEuaXNGaWxlTGlzdCh2YWx1ZSkgfHwgdXRpbHMkMS5lbmRzV2l0aChrZXksICdbXScpKSAmJiAoYXJyID0gdXRpbHMkMS50b0FycmF5KHZhbHVlKSlcbiAgICAgICAgKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAga2V5ID0gcmVtb3ZlQnJhY2tldHMoa2V5KTtcblxuICAgICAgICBhcnIuZm9yRWFjaChmdW5jdGlvbiBlYWNoKGVsLCBpbmRleCkge1xuICAgICAgICAgICEodXRpbHMkMS5pc1VuZGVmaW5lZChlbCkgfHwgZWwgPT09IG51bGwpICYmIGZvcm1EYXRhLmFwcGVuZChcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXN0ZWQtdGVybmFyeVxuICAgICAgICAgICAgaW5kZXhlcyA9PT0gdHJ1ZSA/IHJlbmRlcktleShba2V5XSwgaW5kZXgsIGRvdHMpIDogKGluZGV4ZXMgPT09IG51bGwgPyBrZXkgOiBrZXkgKyAnW10nKSxcbiAgICAgICAgICAgIGNvbnZlcnRWYWx1ZShlbClcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc1Zpc2l0YWJsZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZvcm1EYXRhLmFwcGVuZChyZW5kZXJLZXkocGF0aCwga2V5LCBkb3RzKSwgY29udmVydFZhbHVlKHZhbHVlKSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBzdGFjayA9IFtdO1xuXG4gIGNvbnN0IGV4cG9zZWRIZWxwZXJzID0gT2JqZWN0LmFzc2lnbihwcmVkaWNhdGVzLCB7XG4gICAgZGVmYXVsdFZpc2l0b3IsXG4gICAgY29udmVydFZhbHVlLFxuICAgIGlzVmlzaXRhYmxlXG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGJ1aWxkKHZhbHVlLCBwYXRoKSB7XG4gICAgaWYgKHV0aWxzJDEuaXNVbmRlZmluZWQodmFsdWUpKSByZXR1cm47XG5cbiAgICBpZiAoc3RhY2suaW5kZXhPZih2YWx1ZSkgIT09IC0xKSB7XG4gICAgICB0aHJvdyBFcnJvcignQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICcgKyBwYXRoLmpvaW4oJy4nKSk7XG4gICAgfVxuXG4gICAgc3RhY2sucHVzaCh2YWx1ZSk7XG5cbiAgICB1dGlscyQxLmZvckVhY2godmFsdWUsIGZ1bmN0aW9uIGVhY2goZWwsIGtleSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gISh1dGlscyQxLmlzVW5kZWZpbmVkKGVsKSB8fCBlbCA9PT0gbnVsbCkgJiYgdmlzaXRvci5jYWxsKFxuICAgICAgICBmb3JtRGF0YSwgZWwsIHV0aWxzJDEuaXNTdHJpbmcoa2V5KSA/IGtleS50cmltKCkgOiBrZXksIHBhdGgsIGV4cG9zZWRIZWxwZXJzXG4gICAgICApO1xuXG4gICAgICBpZiAocmVzdWx0ID09PSB0cnVlKSB7XG4gICAgICAgIGJ1aWxkKGVsLCBwYXRoID8gcGF0aC5jb25jYXQoa2V5KSA6IFtrZXldKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHN0YWNrLnBvcCgpO1xuICB9XG5cbiAgaWYgKCF1dGlscyQxLmlzT2JqZWN0KG9iaikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdkYXRhIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cblxuICBidWlsZChvYmopO1xuXG4gIHJldHVybiBmb3JtRGF0YTtcbn1cblxuLyoqXG4gKiBJdCBlbmNvZGVzIGEgc3RyaW5nIGJ5IHJlcGxhY2luZyBhbGwgY2hhcmFjdGVycyB0aGF0IGFyZSBub3QgaW4gdGhlIHVucmVzZXJ2ZWQgc2V0IHdpdGhcbiAqIHRoZWlyIHBlcmNlbnQtZW5jb2RlZCBlcXVpdmFsZW50c1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgLSBUaGUgc3RyaW5nIHRvIGVuY29kZS5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZW5jb2RlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGVuY29kZSQxKHN0cikge1xuICBjb25zdCBjaGFyTWFwID0ge1xuICAgICchJzogJyUyMScsXG4gICAgXCInXCI6ICclMjcnLFxuICAgICcoJzogJyUyOCcsXG4gICAgJyknOiAnJTI5JyxcbiAgICAnfic6ICclN0UnLFxuICAgICclMjAnOiAnKycsXG4gICAgJyUwMCc6ICdcXHgwMCdcbiAgfTtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHIpLnJlcGxhY2UoL1shJygpfl18JTIwfCUwMC9nLCBmdW5jdGlvbiByZXBsYWNlcihtYXRjaCkge1xuICAgIHJldHVybiBjaGFyTWFwW21hdGNoXTtcbiAgfSk7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBwYXJhbXMgb2JqZWN0IGFuZCBjb252ZXJ0cyBpdCB0byBhIEZvcm1EYXRhIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgdG8gYmUgY29udmVydGVkIHRvIGEgRm9ybURhdGEgb2JqZWN0LlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgb2JqZWN0IHBhc3NlZCB0byB0aGUgQXhpb3MgY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIEF4aW9zVVJMU2VhcmNoUGFyYW1zKHBhcmFtcywgb3B0aW9ucykge1xuICB0aGlzLl9wYWlycyA9IFtdO1xuXG4gIHBhcmFtcyAmJiB0b0Zvcm1EYXRhKHBhcmFtcywgdGhpcywgb3B0aW9ucyk7XG59XG5cbmNvbnN0IHByb3RvdHlwZSA9IEF4aW9zVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZTtcblxucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uIGFwcGVuZChuYW1lLCB2YWx1ZSkge1xuICB0aGlzLl9wYWlycy5wdXNoKFtuYW1lLCB2YWx1ZV0pO1xufTtcblxucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoZW5jb2Rlcikge1xuICBjb25zdCBfZW5jb2RlID0gZW5jb2RlciA/IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGVuY29kZXIuY2FsbCh0aGlzLCB2YWx1ZSwgZW5jb2RlJDEpO1xuICB9IDogZW5jb2RlJDE7XG5cbiAgcmV0dXJuIHRoaXMuX3BhaXJzLm1hcChmdW5jdGlvbiBlYWNoKHBhaXIpIHtcbiAgICByZXR1cm4gX2VuY29kZShwYWlyWzBdKSArICc9JyArIF9lbmNvZGUocGFpclsxXSk7XG4gIH0sICcnKS5qb2luKCcmJyk7XG59O1xuXG4vKipcbiAqIEl0IHJlcGxhY2VzIGFsbCBpbnN0YW5jZXMgb2YgdGhlIGNoYXJhY3RlcnMgYDpgLCBgJGAsIGAsYCwgYCtgLCBgW2AsIGFuZCBgXWAgd2l0aCB0aGVpclxuICogVVJJIGVuY29kZWQgY291bnRlcnBhcnRzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbCBUaGUgdmFsdWUgdG8gYmUgZW5jb2RlZC5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZW5jb2RlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZW5jb2RlKHZhbCkge1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHZhbCkuXG4gICAgcmVwbGFjZSgvJTNBL2dpLCAnOicpLlxuICAgIHJlcGxhY2UoLyUyNC9nLCAnJCcpLlxuICAgIHJlcGxhY2UoLyUyQy9naSwgJywnKS5cbiAgICByZXBsYWNlKC8lMjAvZywgJysnKS5cbiAgICByZXBsYWNlKC8lNUIvZ2ksICdbJykuXG4gICAgcmVwbGFjZSgvJTVEL2dpLCAnXScpO1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgVVJMIGJ5IGFwcGVuZGluZyBwYXJhbXMgdG8gdGhlIGVuZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIGJhc2Ugb2YgdGhlIHVybCAoZS5nLiwgaHR0cDovL3d3dy5nb29nbGUuY29tKVxuICogQHBhcmFtIHtvYmplY3R9IFtwYXJhbXNdIFRoZSBwYXJhbXMgdG8gYmUgYXBwZW5kZWRcbiAqIEBwYXJhbSB7P29iamVjdH0gb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgdXJsXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkVVJMKHVybCwgcGFyYW1zLCBvcHRpb25zKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICBpZiAoIXBhcmFtcykge1xuICAgIHJldHVybiB1cmw7XG4gIH1cbiAgXG4gIGNvbnN0IF9lbmNvZGUgPSBvcHRpb25zICYmIG9wdGlvbnMuZW5jb2RlIHx8IGVuY29kZTtcblxuICBjb25zdCBzZXJpYWxpemVGbiA9IG9wdGlvbnMgJiYgb3B0aW9ucy5zZXJpYWxpemU7XG5cbiAgbGV0IHNlcmlhbGl6ZWRQYXJhbXM7XG5cbiAgaWYgKHNlcmlhbGl6ZUZuKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHNlcmlhbGl6ZUZuKHBhcmFtcywgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHV0aWxzJDEuaXNVUkxTZWFyY2hQYXJhbXMocGFyYW1zKSA/XG4gICAgICBwYXJhbXMudG9TdHJpbmcoKSA6XG4gICAgICBuZXcgQXhpb3NVUkxTZWFyY2hQYXJhbXMocGFyYW1zLCBvcHRpb25zKS50b1N0cmluZyhfZW5jb2RlKTtcbiAgfVxuXG4gIGlmIChzZXJpYWxpemVkUGFyYW1zKSB7XG4gICAgY29uc3QgaGFzaG1hcmtJbmRleCA9IHVybC5pbmRleE9mKFwiI1wiKTtcblxuICAgIGlmIChoYXNobWFya0luZGV4ICE9PSAtMSkge1xuICAgICAgdXJsID0gdXJsLnNsaWNlKDAsIGhhc2htYXJrSW5kZXgpO1xuICAgIH1cbiAgICB1cmwgKz0gKHVybC5pbmRleE9mKCc/JykgPT09IC0xID8gJz8nIDogJyYnKSArIHNlcmlhbGl6ZWRQYXJhbXM7XG4gIH1cblxuICByZXR1cm4gdXJsO1xufVxuXG5jbGFzcyBJbnRlcmNlcHRvck1hbmFnZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmhhbmRsZXJzID0gW107XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgbmV3IGludGVyY2VwdG9yIHRvIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdWxmaWxsZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgdGhlbmAgZm9yIGEgYFByb21pc2VgXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHJlamVjdGAgZm9yIGEgYFByb21pc2VgXG4gICAqXG4gICAqIEByZXR1cm4ge051bWJlcn0gQW4gSUQgdXNlZCB0byByZW1vdmUgaW50ZXJjZXB0b3IgbGF0ZXJcbiAgICovXG4gIHVzZShmdWxmaWxsZWQsIHJlamVjdGVkLCBvcHRpb25zKSB7XG4gICAgdGhpcy5oYW5kbGVycy5wdXNoKHtcbiAgICAgIGZ1bGZpbGxlZCxcbiAgICAgIHJlamVjdGVkLFxuICAgICAgc3luY2hyb25vdXM6IG9wdGlvbnMgPyBvcHRpb25zLnN5bmNocm9ub3VzIDogZmFsc2UsXG4gICAgICBydW5XaGVuOiBvcHRpb25zID8gb3B0aW9ucy5ydW5XaGVuIDogbnVsbFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXJzLmxlbmd0aCAtIDE7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFuIGludGVyY2VwdG9yIGZyb20gdGhlIHN0YWNrXG4gICAqXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBpZCBUaGUgSUQgdGhhdCB3YXMgcmV0dXJuZWQgYnkgYHVzZWBcbiAgICpcbiAgICogQHJldHVybnMge0Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgaW50ZXJjZXB0b3Igd2FzIHJlbW92ZWQsIGBmYWxzZWAgb3RoZXJ3aXNlXG4gICAqL1xuICBlamVjdChpZCkge1xuICAgIGlmICh0aGlzLmhhbmRsZXJzW2lkXSkge1xuICAgICAgdGhpcy5oYW5kbGVyc1tpZF0gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciBhbGwgaW50ZXJjZXB0b3JzIGZyb20gdGhlIHN0YWNrXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgY2xlYXIoKSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlcnMpIHtcbiAgICAgIHRoaXMuaGFuZGxlcnMgPSBbXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSXRlcmF0ZSBvdmVyIGFsbCB0aGUgcmVnaXN0ZXJlZCBpbnRlcmNlcHRvcnNcbiAgICpcbiAgICogVGhpcyBtZXRob2QgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3Igc2tpcHBpbmcgb3ZlciBhbnlcbiAgICogaW50ZXJjZXB0b3JzIHRoYXQgbWF5IGhhdmUgYmVjb21lIGBudWxsYCBjYWxsaW5nIGBlamVjdGAuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGludGVyY2VwdG9yXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZm9yRWFjaChmbikge1xuICAgIHV0aWxzJDEuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLCBmdW5jdGlvbiBmb3JFYWNoSGFuZGxlcihoKSB7XG4gICAgICBpZiAoaCAhPT0gbnVsbCkge1xuICAgICAgICBmbihoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5jb25zdCBJbnRlcmNlcHRvck1hbmFnZXIkMSA9IEludGVyY2VwdG9yTWFuYWdlcjtcblxuY29uc3QgdHJhbnNpdGlvbmFsRGVmYXVsdHMgPSB7XG4gIHNpbGVudEpTT05QYXJzaW5nOiB0cnVlLFxuICBmb3JjZWRKU09OUGFyc2luZzogdHJ1ZSxcbiAgY2xhcmlmeVRpbWVvdXRFcnJvcjogZmFsc2Vcbn07XG5cbmNvbnN0IFVSTFNlYXJjaFBhcmFtcyA9IHVybF9fZGVmYXVsdFtcImRlZmF1bHRcIl0uVVJMU2VhcmNoUGFyYW1zO1xuXG5jb25zdCBwbGF0Zm9ybSQxID0ge1xuICBpc05vZGU6IHRydWUsXG4gIGNsYXNzZXM6IHtcbiAgICBVUkxTZWFyY2hQYXJhbXMsXG4gICAgRm9ybURhdGE6IEZvcm1EYXRhX19kZWZhdWx0W1wiZGVmYXVsdFwiXSxcbiAgICBCbG9iOiB0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgJiYgQmxvYiB8fCBudWxsXG4gIH0sXG4gIHByb3RvY29sczogWyAnaHR0cCcsICdodHRwcycsICdmaWxlJywgJ2RhdGEnIF1cbn07XG5cbmNvbnN0IGhhc0Jyb3dzZXJFbnYgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnO1xuXG4vKipcbiAqIERldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudFxuICpcbiAqIFRoaXMgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXIsIGFuZCByZWFjdC1uYXRpdmUuXG4gKiBCb3RoIGVudmlyb25tZW50cyBzdXBwb3J0IFhNTEh0dHBSZXF1ZXN0LCBidXQgbm90IGZ1bGx5IHN0YW5kYXJkIGdsb2JhbHMuXG4gKlxuICogd2ViIHdvcmtlcnM6XG4gKiAgdHlwZW9mIHdpbmRvdyAtPiB1bmRlZmluZWRcbiAqICB0eXBlb2YgZG9jdW1lbnQgLT4gdW5kZWZpbmVkXG4gKlxuICogcmVhY3QtbmF0aXZlOlxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdSZWFjdE5hdGl2ZSdcbiAqIG5hdGl2ZXNjcmlwdFxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdOYXRpdmVTY3JpcHQnIG9yICdOUydcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuY29uc3QgaGFzU3RhbmRhcmRCcm93c2VyRW52ID0gKFxuICAocHJvZHVjdCkgPT4ge1xuICAgIHJldHVybiBoYXNCcm93c2VyRW52ICYmIFsnUmVhY3ROYXRpdmUnLCAnTmF0aXZlU2NyaXB0JywgJ05TJ10uaW5kZXhPZihwcm9kdWN0KSA8IDBcbiAgfSkodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnByb2R1Y3QpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciB3ZWJXb3JrZXIgZW52aXJvbm1lbnRcbiAqXG4gKiBBbHRob3VnaCB0aGUgYGlzU3RhbmRhcmRCcm93c2VyRW52YCBtZXRob2QgaW5kaWNhdGVzIHRoYXRcbiAqIGBhbGxvd3MgYXhpb3MgdG8gcnVuIGluIGEgd2ViIHdvcmtlcmAsIHRoZSBXZWJXb3JrZXIgd2lsbCBzdGlsbCBiZVxuICogZmlsdGVyZWQgb3V0IGR1ZSB0byBpdHMganVkZ21lbnQgc3RhbmRhcmRcbiAqIGB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnYC5cbiAqIFRoaXMgbGVhZHMgdG8gYSBwcm9ibGVtIHdoZW4gYXhpb3MgcG9zdCBgRm9ybURhdGFgIGluIHdlYldvcmtlclxuICovXG5jb25zdCBoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYgPSAoKCkgPT4ge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgICBzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUgJiZcbiAgICB0eXBlb2Ygc2VsZi5pbXBvcnRTY3JpcHRzID09PSAnZnVuY3Rpb24nXG4gICk7XG59KSgpO1xuXG5jb25zdCBvcmlnaW4gPSBoYXNCcm93c2VyRW52ICYmIHdpbmRvdy5sb2NhdGlvbi5ocmVmIHx8ICdodHRwOi8vbG9jYWxob3N0JztcblxuY29uc3QgdXRpbHMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgaGFzQnJvd3NlckVudjogaGFzQnJvd3NlckVudixcbiAgaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52OiBoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYsXG4gIGhhc1N0YW5kYXJkQnJvd3NlckVudjogaGFzU3RhbmRhcmRCcm93c2VyRW52LFxuICBvcmlnaW46IG9yaWdpblxufSk7XG5cbmNvbnN0IHBsYXRmb3JtID0ge1xuICAuLi51dGlscyxcbiAgLi4ucGxhdGZvcm0kMVxufTtcblxuZnVuY3Rpb24gdG9VUkxFbmNvZGVkRm9ybShkYXRhLCBvcHRpb25zKSB7XG4gIHJldHVybiB0b0Zvcm1EYXRhKGRhdGEsIG5ldyBwbGF0Zm9ybS5jbGFzc2VzLlVSTFNlYXJjaFBhcmFtcygpLCBPYmplY3QuYXNzaWduKHtcbiAgICB2aXNpdG9yOiBmdW5jdGlvbih2YWx1ZSwga2V5LCBwYXRoLCBoZWxwZXJzKSB7XG4gICAgICBpZiAocGxhdGZvcm0uaXNOb2RlICYmIHV0aWxzJDEuaXNCdWZmZXIodmFsdWUpKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKGtleSwgdmFsdWUudG9TdHJpbmcoJ2Jhc2U2NCcpKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaGVscGVycy5kZWZhdWx0VmlzaXRvci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgfSwgb3B0aW9ucykpO1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgc3RyaW5nIGxpa2UgYGZvb1t4XVt5XVt6XWAgYW5kIHJldHVybnMgYW4gYXJyYXkgbGlrZSBgWydmb28nLCAneCcsICd5JywgJ3onXVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBzdHJpbmdzLlxuICovXG5mdW5jdGlvbiBwYXJzZVByb3BQYXRoKG5hbWUpIHtcbiAgLy8gZm9vW3hdW3ldW3pdXG4gIC8vIGZvby54LnkuelxuICAvLyBmb28teC15LXpcbiAgLy8gZm9vIHggeSB6XG4gIHJldHVybiB1dGlscyQxLm1hdGNoQWxsKC9cXHcrfFxcWyhcXHcqKV0vZywgbmFtZSkubWFwKG1hdGNoID0+IHtcbiAgICByZXR1cm4gbWF0Y2hbMF0gPT09ICdbXScgPyAnJyA6IG1hdGNoWzFdIHx8IG1hdGNoWzBdO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGFuIGFycmF5IHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PGFueT59IGFyciAtIFRoZSBhcnJheSB0byBjb252ZXJ0IHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAcmV0dXJucyBBbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSBrZXlzIGFuZCB2YWx1ZXMgYXMgdGhlIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheVRvT2JqZWN0KGFycikge1xuICBjb25zdCBvYmogPSB7fTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGFycik7XG4gIGxldCBpO1xuICBjb25zdCBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgbGV0IGtleTtcbiAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAga2V5ID0ga2V5c1tpXTtcbiAgICBvYmpba2V5XSA9IGFycltrZXldO1xuICB9XG4gIHJldHVybiBvYmo7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBGb3JtRGF0YSBvYmplY3QgYW5kIHJldHVybnMgYSBKYXZhU2NyaXB0IG9iamVjdFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtRGF0YSBUaGUgRm9ybURhdGEgb2JqZWN0IHRvIGNvbnZlcnQgdG8gSlNPTi5cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0PHN0cmluZywgYW55PiB8IG51bGx9IFRoZSBjb252ZXJ0ZWQgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBmb3JtRGF0YVRvSlNPTihmb3JtRGF0YSkge1xuICBmdW5jdGlvbiBidWlsZFBhdGgocGF0aCwgdmFsdWUsIHRhcmdldCwgaW5kZXgpIHtcbiAgICBsZXQgbmFtZSA9IHBhdGhbaW5kZXgrK107XG5cbiAgICBpZiAobmFtZSA9PT0gJ19fcHJvdG9fXycpIHJldHVybiB0cnVlO1xuXG4gICAgY29uc3QgaXNOdW1lcmljS2V5ID0gTnVtYmVyLmlzRmluaXRlKCtuYW1lKTtcbiAgICBjb25zdCBpc0xhc3QgPSBpbmRleCA+PSBwYXRoLmxlbmd0aDtcbiAgICBuYW1lID0gIW5hbWUgJiYgdXRpbHMkMS5pc0FycmF5KHRhcmdldCkgPyB0YXJnZXQubGVuZ3RoIDogbmFtZTtcblxuICAgIGlmIChpc0xhc3QpIHtcbiAgICAgIGlmICh1dGlscyQxLmhhc093blByb3AodGFyZ2V0LCBuYW1lKSkge1xuICAgICAgICB0YXJnZXRbbmFtZV0gPSBbdGFyZ2V0W25hbWVdLCB2YWx1ZV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRbbmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICFpc051bWVyaWNLZXk7XG4gICAgfVxuXG4gICAgaWYgKCF0YXJnZXRbbmFtZV0gfHwgIXV0aWxzJDEuaXNPYmplY3QodGFyZ2V0W25hbWVdKSkge1xuICAgICAgdGFyZ2V0W25hbWVdID0gW107XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYnVpbGRQYXRoKHBhdGgsIHZhbHVlLCB0YXJnZXRbbmFtZV0sIGluZGV4KTtcblxuICAgIGlmIChyZXN1bHQgJiYgdXRpbHMkMS5pc0FycmF5KHRhcmdldFtuYW1lXSkpIHtcbiAgICAgIHRhcmdldFtuYW1lXSA9IGFycmF5VG9PYmplY3QodGFyZ2V0W25hbWVdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gIWlzTnVtZXJpY0tleTtcbiAgfVxuXG4gIGlmICh1dGlscyQxLmlzRm9ybURhdGEoZm9ybURhdGEpICYmIHV0aWxzJDEuaXNGdW5jdGlvbihmb3JtRGF0YS5lbnRyaWVzKSkge1xuICAgIGNvbnN0IG9iaiA9IHt9O1xuXG4gICAgdXRpbHMkMS5mb3JFYWNoRW50cnkoZm9ybURhdGEsIChuYW1lLCB2YWx1ZSkgPT4ge1xuICAgICAgYnVpbGRQYXRoKHBhcnNlUHJvcFBhdGgobmFtZSksIHZhbHVlLCBvYmosIDApO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgc3RyaW5nLCB0cmllcyB0byBwYXJzZSBpdCwgYW5kIGlmIGl0IGZhaWxzLCBpdCByZXR1cm5zIHRoZSBzdHJpbmdpZmllZCB2ZXJzaW9uXG4gKiBvZiB0aGUgaW5wdXRcbiAqXG4gKiBAcGFyYW0ge2FueX0gcmF3VmFsdWUgLSBUaGUgdmFsdWUgdG8gYmUgc3RyaW5naWZpZWQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwYXJzZXIgLSBBIGZ1bmN0aW9uIHRoYXQgcGFyc2VzIGEgc3RyaW5nIGludG8gYSBKYXZhU2NyaXB0IG9iamVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVuY29kZXIgLSBBIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSB2YWx1ZSBhbmQgcmV0dXJucyBhIHN0cmluZy5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIHN0cmluZ2lmaWVkIHZlcnNpb24gb2YgdGhlIHJhd1ZhbHVlLlxuICovXG5mdW5jdGlvbiBzdHJpbmdpZnlTYWZlbHkocmF3VmFsdWUsIHBhcnNlciwgZW5jb2Rlcikge1xuICBpZiAodXRpbHMkMS5pc1N0cmluZyhyYXdWYWx1ZSkpIHtcbiAgICB0cnkge1xuICAgICAgKHBhcnNlciB8fCBKU09OLnBhcnNlKShyYXdWYWx1ZSk7XG4gICAgICByZXR1cm4gdXRpbHMkMS50cmltKHJhd1ZhbHVlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZS5uYW1lICE9PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIChlbmNvZGVyIHx8IEpTT04uc3RyaW5naWZ5KShyYXdWYWx1ZSk7XG59XG5cbmNvbnN0IGRlZmF1bHRzID0ge1xuXG4gIHRyYW5zaXRpb25hbDogdHJhbnNpdGlvbmFsRGVmYXVsdHMsXG5cbiAgYWRhcHRlcjogWyd4aHInLCAnaHR0cCcsICdmZXRjaCddLFxuXG4gIHRyYW5zZm9ybVJlcXVlc3Q6IFtmdW5jdGlvbiB0cmFuc2Zvcm1SZXF1ZXN0KGRhdGEsIGhlYWRlcnMpIHtcbiAgICBjb25zdCBjb250ZW50VHlwZSA9IGhlYWRlcnMuZ2V0Q29udGVudFR5cGUoKSB8fCAnJztcbiAgICBjb25zdCBoYXNKU09OQ29udGVudFR5cGUgPSBjb250ZW50VHlwZS5pbmRleE9mKCdhcHBsaWNhdGlvbi9qc29uJykgPiAtMTtcbiAgICBjb25zdCBpc09iamVjdFBheWxvYWQgPSB1dGlscyQxLmlzT2JqZWN0KGRhdGEpO1xuXG4gICAgaWYgKGlzT2JqZWN0UGF5bG9hZCAmJiB1dGlscyQxLmlzSFRNTEZvcm0oZGF0YSkpIHtcbiAgICAgIGRhdGEgPSBuZXcgRm9ybURhdGEoZGF0YSk7XG4gICAgfVxuXG4gICAgY29uc3QgaXNGb3JtRGF0YSA9IHV0aWxzJDEuaXNGb3JtRGF0YShkYXRhKTtcblxuICAgIGlmIChpc0Zvcm1EYXRhKSB7XG4gICAgICByZXR1cm4gaGFzSlNPTkNvbnRlbnRUeXBlID8gSlNPTi5zdHJpbmdpZnkoZm9ybURhdGFUb0pTT04oZGF0YSkpIDogZGF0YTtcbiAgICB9XG5cbiAgICBpZiAodXRpbHMkMS5pc0FycmF5QnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscyQxLmlzQnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscyQxLmlzU3RyZWFtKGRhdGEpIHx8XG4gICAgICB1dGlscyQxLmlzRmlsZShkYXRhKSB8fFxuICAgICAgdXRpbHMkMS5pc0Jsb2IoZGF0YSkgfHxcbiAgICAgIHV0aWxzJDEuaXNSZWFkYWJsZVN0cmVhbShkYXRhKVxuICAgICkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGlmICh1dGlscyQxLmlzQXJyYXlCdWZmZXJWaWV3KGRhdGEpKSB7XG4gICAgICByZXR1cm4gZGF0YS5idWZmZXI7XG4gICAgfVxuICAgIGlmICh1dGlscyQxLmlzVVJMU2VhcmNoUGFyYW1zKGRhdGEpKSB7XG4gICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKCdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCcsIGZhbHNlKTtcbiAgICAgIHJldHVybiBkYXRhLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgbGV0IGlzRmlsZUxpc3Q7XG5cbiAgICBpZiAoaXNPYmplY3RQYXlsb2FkKSB7XG4gICAgICBpZiAoY29udGVudFR5cGUuaW5kZXhPZignYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJykgPiAtMSkge1xuICAgICAgICByZXR1cm4gdG9VUkxFbmNvZGVkRm9ybShkYXRhLCB0aGlzLmZvcm1TZXJpYWxpemVyKS50b1N0cmluZygpO1xuICAgICAgfVxuXG4gICAgICBpZiAoKGlzRmlsZUxpc3QgPSB1dGlscyQxLmlzRmlsZUxpc3QoZGF0YSkpIHx8IGNvbnRlbnRUeXBlLmluZGV4T2YoJ211bHRpcGFydC9mb3JtLWRhdGEnKSA+IC0xKSB7XG4gICAgICAgIGNvbnN0IF9Gb3JtRGF0YSA9IHRoaXMuZW52ICYmIHRoaXMuZW52LkZvcm1EYXRhO1xuXG4gICAgICAgIHJldHVybiB0b0Zvcm1EYXRhKFxuICAgICAgICAgIGlzRmlsZUxpc3QgPyB7J2ZpbGVzW10nOiBkYXRhfSA6IGRhdGEsXG4gICAgICAgICAgX0Zvcm1EYXRhICYmIG5ldyBfRm9ybURhdGEoKSxcbiAgICAgICAgICB0aGlzLmZvcm1TZXJpYWxpemVyXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzT2JqZWN0UGF5bG9hZCB8fCBoYXNKU09OQ29udGVudFR5cGUgKSB7XG4gICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKCdhcHBsaWNhdGlvbi9qc29uJywgZmFsc2UpO1xuICAgICAgcmV0dXJuIHN0cmluZ2lmeVNhZmVseShkYXRhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfV0sXG5cbiAgdHJhbnNmb3JtUmVzcG9uc2U6IFtmdW5jdGlvbiB0cmFuc2Zvcm1SZXNwb25zZShkYXRhKSB7XG4gICAgY29uc3QgdHJhbnNpdGlvbmFsID0gdGhpcy50cmFuc2l0aW9uYWwgfHwgZGVmYXVsdHMudHJhbnNpdGlvbmFsO1xuICAgIGNvbnN0IGZvcmNlZEpTT05QYXJzaW5nID0gdHJhbnNpdGlvbmFsICYmIHRyYW5zaXRpb25hbC5mb3JjZWRKU09OUGFyc2luZztcbiAgICBjb25zdCBKU09OUmVxdWVzdGVkID0gdGhpcy5yZXNwb25zZVR5cGUgPT09ICdqc29uJztcblxuICAgIGlmICh1dGlscyQxLmlzUmVzcG9uc2UoZGF0YSkgfHwgdXRpbHMkMS5pc1JlYWRhYmxlU3RyZWFtKGRhdGEpKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YSAmJiB1dGlscyQxLmlzU3RyaW5nKGRhdGEpICYmICgoZm9yY2VkSlNPTlBhcnNpbmcgJiYgIXRoaXMucmVzcG9uc2VUeXBlKSB8fCBKU09OUmVxdWVzdGVkKSkge1xuICAgICAgY29uc3Qgc2lsZW50SlNPTlBhcnNpbmcgPSB0cmFuc2l0aW9uYWwgJiYgdHJhbnNpdGlvbmFsLnNpbGVudEpTT05QYXJzaW5nO1xuICAgICAgY29uc3Qgc3RyaWN0SlNPTlBhcnNpbmcgPSAhc2lsZW50SlNPTlBhcnNpbmcgJiYgSlNPTlJlcXVlc3RlZDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChzdHJpY3RKU09OUGFyc2luZykge1xuICAgICAgICAgIGlmIChlLm5hbWUgPT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgICAgIHRocm93IEF4aW9zRXJyb3IuZnJvbShlLCBBeGlvc0Vycm9yLkVSUl9CQURfUkVTUE9OU0UsIHRoaXMsIG51bGwsIHRoaXMucmVzcG9uc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIC8qKlxuICAgKiBBIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIHRvIGFib3J0IGEgcmVxdWVzdC4gSWYgc2V0IHRvIDAgKGRlZmF1bHQpIGFcbiAgICogdGltZW91dCBpcyBub3QgY3JlYXRlZC5cbiAgICovXG4gIHRpbWVvdXQ6IDAsXG5cbiAgeHNyZkNvb2tpZU5hbWU6ICdYU1JGLVRPS0VOJyxcbiAgeHNyZkhlYWRlck5hbWU6ICdYLVhTUkYtVE9LRU4nLFxuXG4gIG1heENvbnRlbnRMZW5ndGg6IC0xLFxuICBtYXhCb2R5TGVuZ3RoOiAtMSxcblxuICBlbnY6IHtcbiAgICBGb3JtRGF0YTogcGxhdGZvcm0uY2xhc3Nlcy5Gb3JtRGF0YSxcbiAgICBCbG9iOiBwbGF0Zm9ybS5jbGFzc2VzLkJsb2JcbiAgfSxcblxuICB2YWxpZGF0ZVN0YXR1czogZnVuY3Rpb24gdmFsaWRhdGVTdGF0dXMoc3RhdHVzKSB7XG4gICAgcmV0dXJuIHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwO1xuICB9LFxuXG4gIGhlYWRlcnM6IHtcbiAgICBjb21tb246IHtcbiAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qJyxcbiAgICAgICdDb250ZW50LVR5cGUnOiB1bmRlZmluZWRcbiAgICB9XG4gIH1cbn07XG5cbnV0aWxzJDEuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdwb3N0JywgJ3B1dCcsICdwYXRjaCddLCAobWV0aG9kKSA9PiB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHt9O1xufSk7XG5cbmNvbnN0IGRlZmF1bHRzJDEgPSBkZWZhdWx0cztcblxuLy8gUmF3QXhpb3NIZWFkZXJzIHdob3NlIGR1cGxpY2F0ZXMgYXJlIGlnbm9yZWQgYnkgbm9kZVxuLy8gYy5mLiBodHRwczovL25vZGVqcy5vcmcvYXBpL2h0dHAuaHRtbCNodHRwX21lc3NhZ2VfaGVhZGVyc1xuY29uc3QgaWdub3JlRHVwbGljYXRlT2YgPSB1dGlscyQxLnRvT2JqZWN0U2V0KFtcbiAgJ2FnZScsICdhdXRob3JpemF0aW9uJywgJ2NvbnRlbnQtbGVuZ3RoJywgJ2NvbnRlbnQtdHlwZScsICdldGFnJyxcbiAgJ2V4cGlyZXMnLCAnZnJvbScsICdob3N0JywgJ2lmLW1vZGlmaWVkLXNpbmNlJywgJ2lmLXVubW9kaWZpZWQtc2luY2UnLFxuICAnbGFzdC1tb2RpZmllZCcsICdsb2NhdGlvbicsICdtYXgtZm9yd2FyZHMnLCAncHJveHktYXV0aG9yaXphdGlvbicsXG4gICdyZWZlcmVyJywgJ3JldHJ5LWFmdGVyJywgJ3VzZXItYWdlbnQnXG5dKTtcblxuLyoqXG4gKiBQYXJzZSBoZWFkZXJzIGludG8gYW4gb2JqZWN0XG4gKlxuICogYGBgXG4gKiBEYXRlOiBXZWQsIDI3IEF1ZyAyMDE0IDA4OjU4OjQ5IEdNVFxuICogQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uXG4gKiBDb25uZWN0aW9uOiBrZWVwLWFsaXZlXG4gKiBUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZFxuICogYGBgXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHJhd0hlYWRlcnMgSGVhZGVycyBuZWVkaW5nIHRvIGJlIHBhcnNlZFxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IEhlYWRlcnMgcGFyc2VkIGludG8gYW4gb2JqZWN0XG4gKi9cbmNvbnN0IHBhcnNlSGVhZGVycyA9IHJhd0hlYWRlcnMgPT4ge1xuICBjb25zdCBwYXJzZWQgPSB7fTtcbiAgbGV0IGtleTtcbiAgbGV0IHZhbDtcbiAgbGV0IGk7XG5cbiAgcmF3SGVhZGVycyAmJiByYXdIZWFkZXJzLnNwbGl0KCdcXG4nKS5mb3JFYWNoKGZ1bmN0aW9uIHBhcnNlcihsaW5lKSB7XG4gICAgaSA9IGxpbmUuaW5kZXhPZignOicpO1xuICAgIGtleSA9IGxpbmUuc3Vic3RyaW5nKDAsIGkpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhbCA9IGxpbmUuc3Vic3RyaW5nKGkgKyAxKS50cmltKCk7XG5cbiAgICBpZiAoIWtleSB8fCAocGFyc2VkW2tleV0gJiYgaWdub3JlRHVwbGljYXRlT2Zba2V5XSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgIGlmIChwYXJzZWRba2V5XSkge1xuICAgICAgICBwYXJzZWRba2V5XS5wdXNoKHZhbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJzZWRba2V5XSA9IFt2YWxdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwYXJzZWRba2V5XSA9IHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gKyAnLCAnICsgdmFsIDogdmFsO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn07XG5cbmNvbnN0ICRpbnRlcm5hbHMgPSBTeW1ib2woJ2ludGVybmFscycpO1xuXG5mdW5jdGlvbiBub3JtYWxpemVIZWFkZXIoaGVhZGVyKSB7XG4gIHJldHVybiBoZWFkZXIgJiYgU3RyaW5nKGhlYWRlcikudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gZmFsc2UgfHwgdmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiB1dGlscyQxLmlzQXJyYXkodmFsdWUpID8gdmFsdWUubWFwKG5vcm1hbGl6ZVZhbHVlKSA6IFN0cmluZyh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVG9rZW5zKHN0cikge1xuICBjb25zdCB0b2tlbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBjb25zdCB0b2tlbnNSRSA9IC8oW15cXHMsOz1dKylcXHMqKD86PVxccyooW14sO10rKSk/L2c7XG4gIGxldCBtYXRjaDtcblxuICB3aGlsZSAoKG1hdGNoID0gdG9rZW5zUkUuZXhlYyhzdHIpKSkge1xuICAgIHRva2Vuc1ttYXRjaFsxXV0gPSBtYXRjaFsyXTtcbiAgfVxuXG4gIHJldHVybiB0b2tlbnM7XG59XG5cbmNvbnN0IGlzVmFsaWRIZWFkZXJOYW1lID0gKHN0cikgPT4gL15bLV9hLXpBLVowLTleYHx+LCEjJCUmJyorLl0rJC8udGVzdChzdHIudHJpbSgpKTtcblxuZnVuY3Rpb24gbWF0Y2hIZWFkZXJWYWx1ZShjb250ZXh0LCB2YWx1ZSwgaGVhZGVyLCBmaWx0ZXIsIGlzSGVhZGVyTmFtZUZpbHRlcikge1xuICBpZiAodXRpbHMkMS5pc0Z1bmN0aW9uKGZpbHRlcikpIHtcbiAgICByZXR1cm4gZmlsdGVyLmNhbGwodGhpcywgdmFsdWUsIGhlYWRlcik7XG4gIH1cblxuICBpZiAoaXNIZWFkZXJOYW1lRmlsdGVyKSB7XG4gICAgdmFsdWUgPSBoZWFkZXI7XG4gIH1cblxuICBpZiAoIXV0aWxzJDEuaXNTdHJpbmcodmFsdWUpKSByZXR1cm47XG5cbiAgaWYgKHV0aWxzJDEuaXNTdHJpbmcoZmlsdGVyKSkge1xuICAgIHJldHVybiB2YWx1ZS5pbmRleE9mKGZpbHRlcikgIT09IC0xO1xuICB9XG5cbiAgaWYgKHV0aWxzJDEuaXNSZWdFeHAoZmlsdGVyKSkge1xuICAgIHJldHVybiBmaWx0ZXIudGVzdCh2YWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZm9ybWF0SGVhZGVyKGhlYWRlcikge1xuICByZXR1cm4gaGVhZGVyLnRyaW0oKVxuICAgIC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XFxkXSkoXFx3KikvZywgKHcsIGNoYXIsIHN0cikgPT4ge1xuICAgICAgcmV0dXJuIGNoYXIudG9VcHBlckNhc2UoKSArIHN0cjtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gYnVpbGRBY2Nlc3NvcnMob2JqLCBoZWFkZXIpIHtcbiAgY29uc3QgYWNjZXNzb3JOYW1lID0gdXRpbHMkMS50b0NhbWVsQ2FzZSgnICcgKyBoZWFkZXIpO1xuXG4gIFsnZ2V0JywgJ3NldCcsICdoYXMnXS5mb3JFYWNoKG1ldGhvZE5hbWUgPT4ge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIG1ldGhvZE5hbWUgKyBhY2Nlc3Nvck5hbWUsIHtcbiAgICAgIHZhbHVlOiBmdW5jdGlvbihhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgICAgIHJldHVybiB0aGlzW21ldGhvZE5hbWVdLmNhbGwodGhpcywgaGVhZGVyLCBhcmcxLCBhcmcyLCBhcmczKTtcbiAgICAgIH0sXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgfSk7XG59XG5cbmNsYXNzIEF4aW9zSGVhZGVycyB7XG4gIGNvbnN0cnVjdG9yKGhlYWRlcnMpIHtcbiAgICBoZWFkZXJzICYmIHRoaXMuc2V0KGhlYWRlcnMpO1xuICB9XG5cbiAgc2V0KGhlYWRlciwgdmFsdWVPclJld3JpdGUsIHJld3JpdGUpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgIGZ1bmN0aW9uIHNldEhlYWRlcihfdmFsdWUsIF9oZWFkZXIsIF9yZXdyaXRlKSB7XG4gICAgICBjb25zdCBsSGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoIWxIZWFkZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdoZWFkZXIgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBrZXkgPSB1dGlscyQxLmZpbmRLZXkoc2VsZiwgbEhlYWRlcik7XG5cbiAgICAgIGlmKCFrZXkgfHwgc2VsZltrZXldID09PSB1bmRlZmluZWQgfHwgX3Jld3JpdGUgPT09IHRydWUgfHwgKF9yZXdyaXRlID09PSB1bmRlZmluZWQgJiYgc2VsZltrZXldICE9PSBmYWxzZSkpIHtcbiAgICAgICAgc2VsZltrZXkgfHwgX2hlYWRlcl0gPSBub3JtYWxpemVWYWx1ZShfdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNldEhlYWRlcnMgPSAoaGVhZGVycywgX3Jld3JpdGUpID0+XG4gICAgICB1dGlscyQxLmZvckVhY2goaGVhZGVycywgKF92YWx1ZSwgX2hlYWRlcikgPT4gc2V0SGVhZGVyKF92YWx1ZSwgX2hlYWRlciwgX3Jld3JpdGUpKTtcblxuICAgIGlmICh1dGlscyQxLmlzUGxhaW5PYmplY3QoaGVhZGVyKSB8fCBoZWFkZXIgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKSB7XG4gICAgICBzZXRIZWFkZXJzKGhlYWRlciwgdmFsdWVPclJld3JpdGUpO1xuICAgIH0gZWxzZSBpZih1dGlscyQxLmlzU3RyaW5nKGhlYWRlcikgJiYgKGhlYWRlciA9IGhlYWRlci50cmltKCkpICYmICFpc1ZhbGlkSGVhZGVyTmFtZShoZWFkZXIpKSB7XG4gICAgICBzZXRIZWFkZXJzKHBhcnNlSGVhZGVycyhoZWFkZXIpLCB2YWx1ZU9yUmV3cml0ZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscyQxLmlzSGVhZGVycyhoZWFkZXIpKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBoZWFkZXIuZW50cmllcygpKSB7XG4gICAgICAgIHNldEhlYWRlcih2YWx1ZSwga2V5LCByZXdyaXRlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaGVhZGVyICE9IG51bGwgJiYgc2V0SGVhZGVyKHZhbHVlT3JSZXdyaXRlLCBoZWFkZXIsIHJld3JpdGUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0KGhlYWRlciwgcGFyc2VyKSB7XG4gICAgaGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKGhlYWRlcik7XG5cbiAgICBpZiAoaGVhZGVyKSB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscyQxLmZpbmRLZXkodGhpcywgaGVhZGVyKTtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXNba2V5XTtcblxuICAgICAgICBpZiAoIXBhcnNlcikge1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJzZXIgPT09IHRydWUpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VUb2tlbnModmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHV0aWxzJDEuaXNGdW5jdGlvbihwYXJzZXIpKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlci5jYWxsKHRoaXMsIHZhbHVlLCBrZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHV0aWxzJDEuaXNSZWdFeHAocGFyc2VyKSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZXIuZXhlYyh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhhcyhoZWFkZXIsIG1hdGNoZXIpIHtcbiAgICBoZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoaGVhZGVyKTtcblxuICAgIGlmIChoZWFkZXIpIHtcbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzJDEuZmluZEtleSh0aGlzLCBoZWFkZXIpO1xuXG4gICAgICByZXR1cm4gISEoa2V5ICYmIHRoaXNba2V5XSAhPT0gdW5kZWZpbmVkICYmICghbWF0Y2hlciB8fCBtYXRjaEhlYWRlclZhbHVlKHRoaXMsIHRoaXNba2V5XSwga2V5LCBtYXRjaGVyKSkpO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGRlbGV0ZShoZWFkZXIsIG1hdGNoZXIpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBsZXQgZGVsZXRlZCA9IGZhbHNlO1xuXG4gICAgZnVuY3Rpb24gZGVsZXRlSGVhZGVyKF9oZWFkZXIpIHtcbiAgICAgIF9oZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoX2hlYWRlcik7XG5cbiAgICAgIGlmIChfaGVhZGVyKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHV0aWxzJDEuZmluZEtleShzZWxmLCBfaGVhZGVyKTtcblxuICAgICAgICBpZiAoa2V5ICYmICghbWF0Y2hlciB8fCBtYXRjaEhlYWRlclZhbHVlKHNlbGYsIHNlbGZba2V5XSwga2V5LCBtYXRjaGVyKSkpIHtcbiAgICAgICAgICBkZWxldGUgc2VsZltrZXldO1xuXG4gICAgICAgICAgZGVsZXRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodXRpbHMkMS5pc0FycmF5KGhlYWRlcikpIHtcbiAgICAgIGhlYWRlci5mb3JFYWNoKGRlbGV0ZUhlYWRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZUhlYWRlcihoZWFkZXIpO1xuICAgIH1cblxuICAgIHJldHVybiBkZWxldGVkO1xuICB9XG5cbiAgY2xlYXIobWF0Y2hlcikge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0aGlzKTtcbiAgICBsZXQgaSA9IGtleXMubGVuZ3RoO1xuICAgIGxldCBkZWxldGVkID0gZmFsc2U7XG5cbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgICAgaWYoIW1hdGNoZXIgfHwgbWF0Y2hIZWFkZXJWYWx1ZSh0aGlzLCB0aGlzW2tleV0sIGtleSwgbWF0Y2hlciwgdHJ1ZSkpIHtcbiAgICAgICAgZGVsZXRlIHRoaXNba2V5XTtcbiAgICAgICAgZGVsZXRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlbGV0ZWQ7XG4gIH1cblxuICBub3JtYWxpemUoZm9ybWF0KSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgaGVhZGVycyA9IHt9O1xuXG4gICAgdXRpbHMkMS5mb3JFYWNoKHRoaXMsICh2YWx1ZSwgaGVhZGVyKSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscyQxLmZpbmRLZXkoaGVhZGVycywgaGVhZGVyKTtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICBzZWxmW2tleV0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIGRlbGV0ZSBzZWxmW2hlYWRlcl07XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IGZvcm1hdCA/IGZvcm1hdEhlYWRlcihoZWFkZXIpIDogU3RyaW5nKGhlYWRlcikudHJpbSgpO1xuXG4gICAgICBpZiAobm9ybWFsaXplZCAhPT0gaGVhZGVyKSB7XG4gICAgICAgIGRlbGV0ZSBzZWxmW2hlYWRlcl07XG4gICAgICB9XG5cbiAgICAgIHNlbGZbbm9ybWFsaXplZF0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG5cbiAgICAgIGhlYWRlcnNbbm9ybWFsaXplZF0gPSB0cnVlO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBjb25jYXQoLi4udGFyZ2V0cykge1xuICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLmNvbmNhdCh0aGlzLCAuLi50YXJnZXRzKTtcbiAgfVxuXG4gIHRvSlNPTihhc1N0cmluZ3MpIHtcbiAgICBjb25zdCBvYmogPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgdXRpbHMkMS5mb3JFYWNoKHRoaXMsICh2YWx1ZSwgaGVhZGVyKSA9PiB7XG4gICAgICB2YWx1ZSAhPSBudWxsICYmIHZhbHVlICE9PSBmYWxzZSAmJiAob2JqW2hlYWRlcl0gPSBhc1N0cmluZ3MgJiYgdXRpbHMkMS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLmpvaW4oJywgJykgOiB2YWx1ZSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgW1N5bWJvbC5pdGVyYXRvcl0oKSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFtoZWFkZXIsIHZhbHVlXSkgPT4gaGVhZGVyICsgJzogJyArIHZhbHVlKS5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICByZXR1cm4gJ0F4aW9zSGVhZGVycyc7XG4gIH1cblxuICBzdGF0aWMgZnJvbSh0aGluZykge1xuICAgIHJldHVybiB0aGluZyBpbnN0YW5jZW9mIHRoaXMgPyB0aGluZyA6IG5ldyB0aGlzKHRoaW5nKTtcbiAgfVxuXG4gIHN0YXRpYyBjb25jYXQoZmlyc3QsIC4uLnRhcmdldHMpIHtcbiAgICBjb25zdCBjb21wdXRlZCA9IG5ldyB0aGlzKGZpcnN0KTtcblxuICAgIHRhcmdldHMuZm9yRWFjaCgodGFyZ2V0KSA9PiBjb21wdXRlZC5zZXQodGFyZ2V0KSk7XG5cbiAgICByZXR1cm4gY29tcHV0ZWQ7XG4gIH1cblxuICBzdGF0aWMgYWNjZXNzb3IoaGVhZGVyKSB7XG4gICAgY29uc3QgaW50ZXJuYWxzID0gdGhpc1skaW50ZXJuYWxzXSA9ICh0aGlzWyRpbnRlcm5hbHNdID0ge1xuICAgICAgYWNjZXNzb3JzOiB7fVxuICAgIH0pO1xuXG4gICAgY29uc3QgYWNjZXNzb3JzID0gaW50ZXJuYWxzLmFjY2Vzc29ycztcbiAgICBjb25zdCBwcm90b3R5cGUgPSB0aGlzLnByb3RvdHlwZTtcblxuICAgIGZ1bmN0aW9uIGRlZmluZUFjY2Vzc29yKF9oZWFkZXIpIHtcbiAgICAgIGNvbnN0IGxIZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoX2hlYWRlcik7XG5cbiAgICAgIGlmICghYWNjZXNzb3JzW2xIZWFkZXJdKSB7XG4gICAgICAgIGJ1aWxkQWNjZXNzb3JzKHByb3RvdHlwZSwgX2hlYWRlcik7XG4gICAgICAgIGFjY2Vzc29yc1tsSGVhZGVyXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdXRpbHMkMS5pc0FycmF5KGhlYWRlcikgPyBoZWFkZXIuZm9yRWFjaChkZWZpbmVBY2Nlc3NvcikgOiBkZWZpbmVBY2Nlc3NvcihoZWFkZXIpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cblxuQXhpb3NIZWFkZXJzLmFjY2Vzc29yKFsnQ29udGVudC1UeXBlJywgJ0NvbnRlbnQtTGVuZ3RoJywgJ0FjY2VwdCcsICdBY2NlcHQtRW5jb2RpbmcnLCAnVXNlci1BZ2VudCcsICdBdXRob3JpemF0aW9uJ10pO1xuXG4vLyByZXNlcnZlZCBuYW1lcyBob3RmaXhcbnV0aWxzJDEucmVkdWNlRGVzY3JpcHRvcnMoQXhpb3NIZWFkZXJzLnByb3RvdHlwZSwgKHt2YWx1ZX0sIGtleSkgPT4ge1xuICBsZXQgbWFwcGVkID0ga2V5WzBdLnRvVXBwZXJDYXNlKCkgKyBrZXkuc2xpY2UoMSk7IC8vIG1hcCBgc2V0YCA9PiBgU2V0YFxuICByZXR1cm4ge1xuICAgIGdldDogKCkgPT4gdmFsdWUsXG4gICAgc2V0KGhlYWRlclZhbHVlKSB7XG4gICAgICB0aGlzW21hcHBlZF0gPSBoZWFkZXJWYWx1ZTtcbiAgICB9XG4gIH1cbn0pO1xuXG51dGlscyQxLmZyZWV6ZU1ldGhvZHMoQXhpb3NIZWFkZXJzKTtcblxuY29uc3QgQXhpb3NIZWFkZXJzJDEgPSBBeGlvc0hlYWRlcnM7XG5cbi8qKlxuICogVHJhbnNmb3JtIHRoZSBkYXRhIGZvciBhIHJlcXVlc3Qgb3IgYSByZXNwb25zZVxuICpcbiAqIEBwYXJhbSB7QXJyYXl8RnVuY3Rpb259IGZucyBBIHNpbmdsZSBmdW5jdGlvbiBvciBBcnJheSBvZiBmdW5jdGlvbnNcbiAqIEBwYXJhbSB7P09iamVjdH0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlIG9iamVjdFxuICpcbiAqIEByZXR1cm5zIHsqfSBUaGUgcmVzdWx0aW5nIHRyYW5zZm9ybWVkIGRhdGFcbiAqL1xuZnVuY3Rpb24gdHJhbnNmb3JtRGF0YShmbnMsIHJlc3BvbnNlKSB7XG4gIGNvbnN0IGNvbmZpZyA9IHRoaXMgfHwgZGVmYXVsdHMkMTtcbiAgY29uc3QgY29udGV4dCA9IHJlc3BvbnNlIHx8IGNvbmZpZztcbiAgY29uc3QgaGVhZGVycyA9IEF4aW9zSGVhZGVycyQxLmZyb20oY29udGV4dC5oZWFkZXJzKTtcbiAgbGV0IGRhdGEgPSBjb250ZXh0LmRhdGE7XG5cbiAgdXRpbHMkMS5mb3JFYWNoKGZucywgZnVuY3Rpb24gdHJhbnNmb3JtKGZuKSB7XG4gICAgZGF0YSA9IGZuLmNhbGwoY29uZmlnLCBkYXRhLCBoZWFkZXJzLm5vcm1hbGl6ZSgpLCByZXNwb25zZSA/IHJlc3BvbnNlLnN0YXR1cyA6IHVuZGVmaW5lZCk7XG4gIH0pO1xuXG4gIGhlYWRlcnMubm9ybWFsaXplKCk7XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbmZ1bmN0aW9uIGlzQ2FuY2VsKHZhbHVlKSB7XG4gIHJldHVybiAhISh2YWx1ZSAmJiB2YWx1ZS5fX0NBTkNFTF9fKTtcbn1cblxuLyoqXG4gKiBBIGBDYW5jZWxlZEVycm9yYCBpcyBhbiBvYmplY3QgdGhhdCBpcyB0aHJvd24gd2hlbiBhbiBvcGVyYXRpb24gaXMgY2FuY2VsZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmc9fSBtZXNzYWdlIFRoZSBtZXNzYWdlLlxuICogQHBhcmFtIHtPYmplY3Q9fSBjb25maWcgVGhlIGNvbmZpZy5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gcmVxdWVzdCBUaGUgcmVxdWVzdC5cbiAqXG4gKiBAcmV0dXJucyB7Q2FuY2VsZWRFcnJvcn0gVGhlIGNyZWF0ZWQgZXJyb3IuXG4gKi9cbmZ1bmN0aW9uIENhbmNlbGVkRXJyb3IobWVzc2FnZSwgY29uZmlnLCByZXF1ZXN0KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lcS1udWxsLGVxZXFlcVxuICBBeGlvc0Vycm9yLmNhbGwodGhpcywgbWVzc2FnZSA9PSBudWxsID8gJ2NhbmNlbGVkJyA6IG1lc3NhZ2UsIEF4aW9zRXJyb3IuRVJSX0NBTkNFTEVELCBjb25maWcsIHJlcXVlc3QpO1xuICB0aGlzLm5hbWUgPSAnQ2FuY2VsZWRFcnJvcic7XG59XG5cbnV0aWxzJDEuaW5oZXJpdHMoQ2FuY2VsZWRFcnJvciwgQXhpb3NFcnJvciwge1xuICBfX0NBTkNFTF9fOiB0cnVlXG59KTtcblxuLyoqXG4gKiBSZXNvbHZlIG9yIHJlamVjdCBhIFByb21pc2UgYmFzZWQgb24gcmVzcG9uc2Ugc3RhdHVzLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlc29sdmUgQSBmdW5jdGlvbiB0aGF0IHJlc29sdmVzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0IEEgZnVuY3Rpb24gdGhhdCByZWplY3RzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtvYmplY3R9IHJlc3BvbnNlIFRoZSByZXNwb25zZS5cbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBUaGUgcmVzcG9uc2UuXG4gKi9cbmZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKSB7XG4gIGNvbnN0IHZhbGlkYXRlU3RhdHVzID0gcmVzcG9uc2UuY29uZmlnLnZhbGlkYXRlU3RhdHVzO1xuICBpZiAoIXJlc3BvbnNlLnN0YXR1cyB8fCAhdmFsaWRhdGVTdGF0dXMgfHwgdmFsaWRhdGVTdGF0dXMocmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICB9IGVsc2Uge1xuICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcihcbiAgICAgICdSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICcgKyByZXNwb25zZS5zdGF0dXMsXG4gICAgICBbQXhpb3NFcnJvci5FUlJfQkFEX1JFUVVFU1QsIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcihyZXNwb25zZS5zdGF0dXMgLyAxMDApIC0gNF0sXG4gICAgICByZXNwb25zZS5jb25maWcsXG4gICAgICByZXNwb25zZS5yZXF1ZXN0LFxuICAgICAgcmVzcG9uc2VcbiAgICApKTtcbiAgfVxufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIFVSTCB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Fic29sdXRlVVJMKHVybCkge1xuICAvLyBBIFVSTCBpcyBjb25zaWRlcmVkIGFic29sdXRlIGlmIGl0IGJlZ2lucyB3aXRoIFwiPHNjaGVtZT46Ly9cIiBvciBcIi8vXCIgKHByb3RvY29sLXJlbGF0aXZlIFVSTCkuXG4gIC8vIFJGQyAzOTg2IGRlZmluZXMgc2NoZW1lIG5hbWUgYXMgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIGJlZ2lubmluZyB3aXRoIGEgbGV0dGVyIGFuZCBmb2xsb3dlZFxuICAvLyBieSBhbnkgY29tYmluYXRpb24gb2YgbGV0dGVycywgZGlnaXRzLCBwbHVzLCBwZXJpb2QsIG9yIGh5cGhlbi5cbiAgcmV0dXJuIC9eKFthLXpdW2EtelxcZCtcXC0uXSo6KT9cXC9cXC8vaS50ZXN0KHVybCk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBzcGVjaWZpZWQgVVJMc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aXZlVVJMIFRoZSByZWxhdGl2ZSBVUkxcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgVVJMXG4gKi9cbmZ1bmN0aW9uIGNvbWJpbmVVUkxzKGJhc2VVUkwsIHJlbGF0aXZlVVJMKSB7XG4gIHJldHVybiByZWxhdGl2ZVVSTFxuICAgID8gYmFzZVVSTC5yZXBsYWNlKC9cXC8/XFwvJC8sICcnKSArICcvJyArIHJlbGF0aXZlVVJMLnJlcGxhY2UoL15cXC8rLywgJycpXG4gICAgOiBiYXNlVVJMO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgYmFzZVVSTCB3aXRoIHRoZSByZXF1ZXN0ZWRVUkwsXG4gKiBvbmx5IHdoZW4gdGhlIHJlcXVlc3RlZFVSTCBpcyBub3QgYWxyZWFkeSBhbiBhYnNvbHV0ZSBVUkwuXG4gKiBJZiB0aGUgcmVxdWVzdFVSTCBpcyBhYnNvbHV0ZSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSByZXF1ZXN0ZWRVUkwgdW50b3VjaGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlcXVlc3RlZFVSTCBBYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gY29tYmluZVxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBmdWxsIHBhdGhcbiAqL1xuZnVuY3Rpb24gYnVpbGRGdWxsUGF0aChiYXNlVVJMLCByZXF1ZXN0ZWRVUkwpIHtcbiAgaWYgKGJhc2VVUkwgJiYgIWlzQWJzb2x1dGVVUkwocmVxdWVzdGVkVVJMKSkge1xuICAgIHJldHVybiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZXF1ZXN0ZWRVUkwpO1xuICB9XG4gIHJldHVybiByZXF1ZXN0ZWRVUkw7XG59XG5cbmNvbnN0IFZFUlNJT04gPSBcIjEuNy40XCI7XG5cbmZ1bmN0aW9uIHBhcnNlUHJvdG9jb2wodXJsKSB7XG4gIGNvbnN0IG1hdGNoID0gL14oWy0rXFx3XXsxLDI1fSkoOj9cXC9cXC98OikvLmV4ZWModXJsKTtcbiAgcmV0dXJuIG1hdGNoICYmIG1hdGNoWzFdIHx8ICcnO1xufVxuXG5jb25zdCBEQVRBX1VSTF9QQVRURVJOID0gL14oPzooW147XSspOyk/KD86W147XSs7KT8oYmFzZTY0fCksKFtcXHNcXFNdKikkLztcblxuLyoqXG4gKiBQYXJzZSBkYXRhIHVyaSB0byBhIEJ1ZmZlciBvciBCbG9iXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHVyaVxuICogQHBhcmFtIHs/Qm9vbGVhbn0gYXNCbG9iXG4gKiBAcGFyYW0gez9PYmplY3R9IG9wdGlvbnNcbiAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBvcHRpb25zLkJsb2JcbiAqXG4gKiBAcmV0dXJucyB7QnVmZmVyfEJsb2J9XG4gKi9cbmZ1bmN0aW9uIGZyb21EYXRhVVJJKHVyaSwgYXNCbG9iLCBvcHRpb25zKSB7XG4gIGNvbnN0IF9CbG9iID0gb3B0aW9ucyAmJiBvcHRpb25zLkJsb2IgfHwgcGxhdGZvcm0uY2xhc3Nlcy5CbG9iO1xuICBjb25zdCBwcm90b2NvbCA9IHBhcnNlUHJvdG9jb2wodXJpKTtcblxuICBpZiAoYXNCbG9iID09PSB1bmRlZmluZWQgJiYgX0Jsb2IpIHtcbiAgICBhc0Jsb2IgPSB0cnVlO1xuICB9XG5cbiAgaWYgKHByb3RvY29sID09PSAnZGF0YScpIHtcbiAgICB1cmkgPSBwcm90b2NvbC5sZW5ndGggPyB1cmkuc2xpY2UocHJvdG9jb2wubGVuZ3RoICsgMSkgOiB1cmk7XG5cbiAgICBjb25zdCBtYXRjaCA9IERBVEFfVVJMX1BBVFRFUk4uZXhlYyh1cmkpO1xuXG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ0ludmFsaWQgVVJMJywgQXhpb3NFcnJvci5FUlJfSU5WQUxJRF9VUkwpO1xuICAgIH1cblxuICAgIGNvbnN0IG1pbWUgPSBtYXRjaFsxXTtcbiAgICBjb25zdCBpc0Jhc2U2NCA9IG1hdGNoWzJdO1xuICAgIGNvbnN0IGJvZHkgPSBtYXRjaFszXTtcbiAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShkZWNvZGVVUklDb21wb25lbnQoYm9keSksIGlzQmFzZTY0ID8gJ2Jhc2U2NCcgOiAndXRmOCcpO1xuXG4gICAgaWYgKGFzQmxvYikge1xuICAgICAgaWYgKCFfQmxvYikge1xuICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignQmxvYiBpcyBub3Qgc3VwcG9ydGVkJywgQXhpb3NFcnJvci5FUlJfTk9UX1NVUFBPUlQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IF9CbG9iKFtidWZmZXJdLCB7dHlwZTogbWltZX0pO1xuICAgIH1cblxuICAgIHJldHVybiBidWZmZXI7XG4gIH1cblxuICB0aHJvdyBuZXcgQXhpb3NFcnJvcignVW5zdXBwb3J0ZWQgcHJvdG9jb2wgJyArIHByb3RvY29sLCBBeGlvc0Vycm9yLkVSUl9OT1RfU1VQUE9SVCk7XG59XG5cbmNvbnN0IGtJbnRlcm5hbHMgPSBTeW1ib2woJ2ludGVybmFscycpO1xuXG5jbGFzcyBBeGlvc1RyYW5zZm9ybVN0cmVhbSBleHRlbmRzIHN0cmVhbV9fZGVmYXVsdFtcImRlZmF1bHRcIl0uVHJhbnNmb3Jte1xuICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHV0aWxzJDEudG9GbGF0T2JqZWN0KG9wdGlvbnMsIHtcbiAgICAgIG1heFJhdGU6IDAsXG4gICAgICBjaHVua1NpemU6IDY0ICogMTAyNCxcbiAgICAgIG1pbkNodW5rU2l6ZTogMTAwLFxuICAgICAgdGltZVdpbmRvdzogNTAwLFxuICAgICAgdGlja3NSYXRlOiAyLFxuICAgICAgc2FtcGxlc0NvdW50OiAxNVxuICAgIH0sIG51bGwsIChwcm9wLCBzb3VyY2UpID0+IHtcbiAgICAgIHJldHVybiAhdXRpbHMkMS5pc1VuZGVmaW5lZChzb3VyY2VbcHJvcF0pO1xuICAgIH0pO1xuXG4gICAgc3VwZXIoe1xuICAgICAgcmVhZGFibGVIaWdoV2F0ZXJNYXJrOiBvcHRpb25zLmNodW5rU2l6ZVxuICAgIH0pO1xuXG4gICAgY29uc3QgaW50ZXJuYWxzID0gdGhpc1trSW50ZXJuYWxzXSA9IHtcbiAgICAgIHRpbWVXaW5kb3c6IG9wdGlvbnMudGltZVdpbmRvdyxcbiAgICAgIGNodW5rU2l6ZTogb3B0aW9ucy5jaHVua1NpemUsXG4gICAgICBtYXhSYXRlOiBvcHRpb25zLm1heFJhdGUsXG4gICAgICBtaW5DaHVua1NpemU6IG9wdGlvbnMubWluQ2h1bmtTaXplLFxuICAgICAgYnl0ZXNTZWVuOiAwLFxuICAgICAgaXNDYXB0dXJlZDogZmFsc2UsXG4gICAgICBub3RpZmllZEJ5dGVzTG9hZGVkOiAwLFxuICAgICAgdHM6IERhdGUubm93KCksXG4gICAgICBieXRlczogMCxcbiAgICAgIG9uUmVhZENhbGxiYWNrOiBudWxsXG4gICAgfTtcblxuICAgIHRoaXMub24oJ25ld0xpc3RlbmVyJywgZXZlbnQgPT4ge1xuICAgICAgaWYgKGV2ZW50ID09PSAncHJvZ3Jlc3MnKSB7XG4gICAgICAgIGlmICghaW50ZXJuYWxzLmlzQ2FwdHVyZWQpIHtcbiAgICAgICAgICBpbnRlcm5hbHMuaXNDYXB0dXJlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIF9yZWFkKHNpemUpIHtcbiAgICBjb25zdCBpbnRlcm5hbHMgPSB0aGlzW2tJbnRlcm5hbHNdO1xuXG4gICAgaWYgKGludGVybmFscy5vblJlYWRDYWxsYmFjaykge1xuICAgICAgaW50ZXJuYWxzLm9uUmVhZENhbGxiYWNrKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1cGVyLl9yZWFkKHNpemUpO1xuICB9XG5cbiAgX3RyYW5zZm9ybShjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gICAgY29uc3QgaW50ZXJuYWxzID0gdGhpc1trSW50ZXJuYWxzXTtcbiAgICBjb25zdCBtYXhSYXRlID0gaW50ZXJuYWxzLm1heFJhdGU7XG5cbiAgICBjb25zdCByZWFkYWJsZUhpZ2hXYXRlck1hcmsgPSB0aGlzLnJlYWRhYmxlSGlnaFdhdGVyTWFyaztcblxuICAgIGNvbnN0IHRpbWVXaW5kb3cgPSBpbnRlcm5hbHMudGltZVdpbmRvdztcblxuICAgIGNvbnN0IGRpdmlkZXIgPSAxMDAwIC8gdGltZVdpbmRvdztcbiAgICBjb25zdCBieXRlc1RocmVzaG9sZCA9IChtYXhSYXRlIC8gZGl2aWRlcik7XG4gICAgY29uc3QgbWluQ2h1bmtTaXplID0gaW50ZXJuYWxzLm1pbkNodW5rU2l6ZSAhPT0gZmFsc2UgPyBNYXRoLm1heChpbnRlcm5hbHMubWluQ2h1bmtTaXplLCBieXRlc1RocmVzaG9sZCAqIDAuMDEpIDogMDtcblxuICAgIGNvbnN0IHB1c2hDaHVuayA9IChfY2h1bmssIF9jYWxsYmFjaykgPT4ge1xuICAgICAgY29uc3QgYnl0ZXMgPSBCdWZmZXIuYnl0ZUxlbmd0aChfY2h1bmspO1xuICAgICAgaW50ZXJuYWxzLmJ5dGVzU2VlbiArPSBieXRlcztcbiAgICAgIGludGVybmFscy5ieXRlcyArPSBieXRlcztcblxuICAgICAgaW50ZXJuYWxzLmlzQ2FwdHVyZWQgJiYgdGhpcy5lbWl0KCdwcm9ncmVzcycsIGludGVybmFscy5ieXRlc1NlZW4pO1xuXG4gICAgICBpZiAodGhpcy5wdXNoKF9jaHVuaykpIHtcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhfY2FsbGJhY2spO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW50ZXJuYWxzLm9uUmVhZENhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgICAgIGludGVybmFscy5vblJlYWRDYWxsYmFjayA9IG51bGw7XG4gICAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhfY2FsbGJhY2spO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCB0cmFuc2Zvcm1DaHVuayA9IChfY2h1bmssIF9jYWxsYmFjaykgPT4ge1xuICAgICAgY29uc3QgY2h1bmtTaXplID0gQnVmZmVyLmJ5dGVMZW5ndGgoX2NodW5rKTtcbiAgICAgIGxldCBjaHVua1JlbWFpbmRlciA9IG51bGw7XG4gICAgICBsZXQgbWF4Q2h1bmtTaXplID0gcmVhZGFibGVIaWdoV2F0ZXJNYXJrO1xuICAgICAgbGV0IGJ5dGVzTGVmdDtcbiAgICAgIGxldCBwYXNzZWQgPSAwO1xuXG4gICAgICBpZiAobWF4UmF0ZSkge1xuICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgIGlmICghaW50ZXJuYWxzLnRzIHx8IChwYXNzZWQgPSAobm93IC0gaW50ZXJuYWxzLnRzKSkgPj0gdGltZVdpbmRvdykge1xuICAgICAgICAgIGludGVybmFscy50cyA9IG5vdztcbiAgICAgICAgICBieXRlc0xlZnQgPSBieXRlc1RocmVzaG9sZCAtIGludGVybmFscy5ieXRlcztcbiAgICAgICAgICBpbnRlcm5hbHMuYnl0ZXMgPSBieXRlc0xlZnQgPCAwID8gLWJ5dGVzTGVmdCA6IDA7XG4gICAgICAgICAgcGFzc2VkID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGJ5dGVzTGVmdCA9IGJ5dGVzVGhyZXNob2xkIC0gaW50ZXJuYWxzLmJ5dGVzO1xuICAgICAgfVxuXG4gICAgICBpZiAobWF4UmF0ZSkge1xuICAgICAgICBpZiAoYnl0ZXNMZWZ0IDw9IDApIHtcbiAgICAgICAgICAvLyBuZXh0IHRpbWUgd2luZG93XG4gICAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgX2NhbGxiYWNrKG51bGwsIF9jaHVuayk7XG4gICAgICAgICAgfSwgdGltZVdpbmRvdyAtIHBhc3NlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYnl0ZXNMZWZ0IDwgbWF4Q2h1bmtTaXplKSB7XG4gICAgICAgICAgbWF4Q2h1bmtTaXplID0gYnl0ZXNMZWZ0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChtYXhDaHVua1NpemUgJiYgY2h1bmtTaXplID4gbWF4Q2h1bmtTaXplICYmIChjaHVua1NpemUgLSBtYXhDaHVua1NpemUpID4gbWluQ2h1bmtTaXplKSB7XG4gICAgICAgIGNodW5rUmVtYWluZGVyID0gX2NodW5rLnN1YmFycmF5KG1heENodW5rU2l6ZSk7XG4gICAgICAgIF9jaHVuayA9IF9jaHVuay5zdWJhcnJheSgwLCBtYXhDaHVua1NpemUpO1xuICAgICAgfVxuXG4gICAgICBwdXNoQ2h1bmsoX2NodW5rLCBjaHVua1JlbWFpbmRlciA/ICgpID0+IHtcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhfY2FsbGJhY2ssIG51bGwsIGNodW5rUmVtYWluZGVyKTtcbiAgICAgIH0gOiBfY2FsbGJhY2spO1xuICAgIH07XG5cbiAgICB0cmFuc2Zvcm1DaHVuayhjaHVuaywgZnVuY3Rpb24gdHJhbnNmb3JtTmV4dENodW5rKGVyciwgX2NodW5rKSB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoX2NodW5rKSB7XG4gICAgICAgIHRyYW5zZm9ybUNodW5rKF9jaHVuaywgdHJhbnNmb3JtTmV4dENodW5rKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmNvbnN0IEF4aW9zVHJhbnNmb3JtU3RyZWFtJDEgPSBBeGlvc1RyYW5zZm9ybVN0cmVhbTtcblxuY29uc3Qge2FzeW5jSXRlcmF0b3J9ID0gU3ltYm9sO1xuXG5jb25zdCByZWFkQmxvYiA9IGFzeW5jIGZ1bmN0aW9uKiAoYmxvYikge1xuICBpZiAoYmxvYi5zdHJlYW0pIHtcbiAgICB5aWVsZCogYmxvYi5zdHJlYW0oKTtcbiAgfSBlbHNlIGlmIChibG9iLmFycmF5QnVmZmVyKSB7XG4gICAgeWllbGQgYXdhaXQgYmxvYi5hcnJheUJ1ZmZlcigpO1xuICB9IGVsc2UgaWYgKGJsb2JbYXN5bmNJdGVyYXRvcl0pIHtcbiAgICB5aWVsZCogYmxvYlthc3luY0l0ZXJhdG9yXSgpO1xuICB9IGVsc2Uge1xuICAgIHlpZWxkIGJsb2I7XG4gIH1cbn07XG5cbmNvbnN0IHJlYWRCbG9iJDEgPSByZWFkQmxvYjtcblxuY29uc3QgQk9VTkRBUllfQUxQSEFCRVQgPSB1dGlscyQxLkFMUEhBQkVULkFMUEhBX0RJR0lUICsgJy1fJztcblxuY29uc3QgdGV4dEVuY29kZXIgPSBuZXcgdXRpbC5UZXh0RW5jb2RlcigpO1xuXG5jb25zdCBDUkxGID0gJ1xcclxcbic7XG5jb25zdCBDUkxGX0JZVEVTID0gdGV4dEVuY29kZXIuZW5jb2RlKENSTEYpO1xuY29uc3QgQ1JMRl9CWVRFU19DT1VOVCA9IDI7XG5cbmNsYXNzIEZvcm1EYXRhUGFydCB7XG4gIGNvbnN0cnVjdG9yKG5hbWUsIHZhbHVlKSB7XG4gICAgY29uc3Qge2VzY2FwZU5hbWV9ID0gdGhpcy5jb25zdHJ1Y3RvcjtcbiAgICBjb25zdCBpc1N0cmluZ1ZhbHVlID0gdXRpbHMkMS5pc1N0cmluZyh2YWx1ZSk7XG5cbiAgICBsZXQgaGVhZGVycyA9IGBDb250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9XCIke2VzY2FwZU5hbWUobmFtZSl9XCIke1xuICAgICAgIWlzU3RyaW5nVmFsdWUgJiYgdmFsdWUubmFtZSA/IGA7IGZpbGVuYW1lPVwiJHtlc2NhcGVOYW1lKHZhbHVlLm5hbWUpfVwiYCA6ICcnXG4gICAgfSR7Q1JMRn1gO1xuXG4gICAgaWYgKGlzU3RyaW5nVmFsdWUpIHtcbiAgICAgIHZhbHVlID0gdGV4dEVuY29kZXIuZW5jb2RlKFN0cmluZyh2YWx1ZSkucmVwbGFjZSgvXFxyP1xcbnxcXHJcXG4/L2csIENSTEYpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGVhZGVycyArPSBgQ29udGVudC1UeXBlOiAke3ZhbHVlLnR5cGUgfHwgXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIn0ke0NSTEZ9YDtcbiAgICB9XG5cbiAgICB0aGlzLmhlYWRlcnMgPSB0ZXh0RW5jb2Rlci5lbmNvZGUoaGVhZGVycyArIENSTEYpO1xuXG4gICAgdGhpcy5jb250ZW50TGVuZ3RoID0gaXNTdHJpbmdWYWx1ZSA/IHZhbHVlLmJ5dGVMZW5ndGggOiB2YWx1ZS5zaXplO1xuXG4gICAgdGhpcy5zaXplID0gdGhpcy5oZWFkZXJzLmJ5dGVMZW5ndGggKyB0aGlzLmNvbnRlbnRMZW5ndGggKyBDUkxGX0JZVEVTX0NPVU5UO1xuXG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBhc3luYyAqZW5jb2RlKCl7XG4gICAgeWllbGQgdGhpcy5oZWFkZXJzO1xuXG4gICAgY29uc3Qge3ZhbHVlfSA9IHRoaXM7XG5cbiAgICBpZih1dGlscyQxLmlzVHlwZWRBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHlpZWxkIHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB5aWVsZCogcmVhZEJsb2IkMSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgeWllbGQgQ1JMRl9CWVRFUztcbiAgfVxuXG4gIHN0YXRpYyBlc2NhcGVOYW1lKG5hbWUpIHtcbiAgICAgIHJldHVybiBTdHJpbmcobmFtZSkucmVwbGFjZSgvW1xcclxcblwiXS9nLCAobWF0Y2gpID0+ICh7XG4gICAgICAgICdcXHInIDogJyUwRCcsXG4gICAgICAgICdcXG4nIDogJyUwQScsXG4gICAgICAgICdcIicgOiAnJTIyJyxcbiAgICAgIH1bbWF0Y2hdKSk7XG4gIH1cbn1cblxuY29uc3QgZm9ybURhdGFUb1N0cmVhbSA9IChmb3JtLCBoZWFkZXJzSGFuZGxlciwgb3B0aW9ucykgPT4ge1xuICBjb25zdCB7XG4gICAgdGFnID0gJ2Zvcm0tZGF0YS1ib3VuZGFyeScsXG4gICAgc2l6ZSA9IDI1LFxuICAgIGJvdW5kYXJ5ID0gdGFnICsgJy0nICsgdXRpbHMkMS5nZW5lcmF0ZVN0cmluZyhzaXplLCBCT1VOREFSWV9BTFBIQUJFVClcbiAgfSA9IG9wdGlvbnMgfHwge307XG5cbiAgaWYoIXV0aWxzJDEuaXNGb3JtRGF0YShmb3JtKSkge1xuICAgIHRocm93IFR5cGVFcnJvcignRm9ybURhdGEgaW5zdGFuY2UgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIGlmIChib3VuZGFyeS5sZW5ndGggPCAxIHx8IGJvdW5kYXJ5Lmxlbmd0aCA+IDcwKSB7XG4gICAgdGhyb3cgRXJyb3IoJ2JvdW5kYXJ5IG11c3QgYmUgMTAtNzAgY2hhcmFjdGVycyBsb25nJylcbiAgfVxuXG4gIGNvbnN0IGJvdW5kYXJ5Qnl0ZXMgPSB0ZXh0RW5jb2Rlci5lbmNvZGUoJy0tJyArIGJvdW5kYXJ5ICsgQ1JMRik7XG4gIGNvbnN0IGZvb3RlckJ5dGVzID0gdGV4dEVuY29kZXIuZW5jb2RlKCctLScgKyBib3VuZGFyeSArICctLScgKyBDUkxGICsgQ1JMRik7XG4gIGxldCBjb250ZW50TGVuZ3RoID0gZm9vdGVyQnl0ZXMuYnl0ZUxlbmd0aDtcblxuICBjb25zdCBwYXJ0cyA9IEFycmF5LmZyb20oZm9ybS5lbnRyaWVzKCkpLm1hcCgoW25hbWUsIHZhbHVlXSkgPT4ge1xuICAgIGNvbnN0IHBhcnQgPSBuZXcgRm9ybURhdGFQYXJ0KG5hbWUsIHZhbHVlKTtcbiAgICBjb250ZW50TGVuZ3RoICs9IHBhcnQuc2l6ZTtcbiAgICByZXR1cm4gcGFydDtcbiAgfSk7XG5cbiAgY29udGVudExlbmd0aCArPSBib3VuZGFyeUJ5dGVzLmJ5dGVMZW5ndGggKiBwYXJ0cy5sZW5ndGg7XG5cbiAgY29udGVudExlbmd0aCA9IHV0aWxzJDEudG9GaW5pdGVOdW1iZXIoY29udGVudExlbmd0aCk7XG5cbiAgY29uc3QgY29tcHV0ZWRIZWFkZXJzID0ge1xuICAgICdDb250ZW50LVR5cGUnOiBgbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9JHtib3VuZGFyeX1gXG4gIH07XG5cbiAgaWYgKE51bWJlci5pc0Zpbml0ZShjb250ZW50TGVuZ3RoKSkge1xuICAgIGNvbXB1dGVkSGVhZGVyc1snQ29udGVudC1MZW5ndGgnXSA9IGNvbnRlbnRMZW5ndGg7XG4gIH1cblxuICBoZWFkZXJzSGFuZGxlciAmJiBoZWFkZXJzSGFuZGxlcihjb21wdXRlZEhlYWRlcnMpO1xuXG4gIHJldHVybiBzdHJlYW0uUmVhZGFibGUuZnJvbSgoYXN5bmMgZnVuY3Rpb24gKigpIHtcbiAgICBmb3IoY29uc3QgcGFydCBvZiBwYXJ0cykge1xuICAgICAgeWllbGQgYm91bmRhcnlCeXRlcztcbiAgICAgIHlpZWxkKiBwYXJ0LmVuY29kZSgpO1xuICAgIH1cblxuICAgIHlpZWxkIGZvb3RlckJ5dGVzO1xuICB9KSgpKTtcbn07XG5cbmNvbnN0IGZvcm1EYXRhVG9TdHJlYW0kMSA9IGZvcm1EYXRhVG9TdHJlYW07XG5cbmNsYXNzIFpsaWJIZWFkZXJUcmFuc2Zvcm1TdHJlYW0gZXh0ZW5kcyBzdHJlYW1fX2RlZmF1bHRbXCJkZWZhdWx0XCJdLlRyYW5zZm9ybSB7XG4gIF9fdHJhbnNmb3JtKGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgICB0aGlzLnB1c2goY2h1bmspO1xuICAgIGNhbGxiYWNrKCk7XG4gIH1cblxuICBfdHJhbnNmb3JtKGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgICBpZiAoY2h1bmsubGVuZ3RoICE9PSAwKSB7XG4gICAgICB0aGlzLl90cmFuc2Zvcm0gPSB0aGlzLl9fdHJhbnNmb3JtO1xuXG4gICAgICAvLyBBZGQgRGVmYXVsdCBDb21wcmVzc2lvbiBoZWFkZXJzIGlmIG5vIHpsaWIgaGVhZGVycyBhcmUgcHJlc2VudFxuICAgICAgaWYgKGNodW5rWzBdICE9PSAxMjApIHsgLy8gSGV4OiA3OFxuICAgICAgICBjb25zdCBoZWFkZXIgPSBCdWZmZXIuYWxsb2MoMik7XG4gICAgICAgIGhlYWRlclswXSA9IDEyMDsgLy8gSGV4OiA3OFxuICAgICAgICBoZWFkZXJbMV0gPSAxNTY7IC8vIEhleDogOUMgXG4gICAgICAgIHRoaXMucHVzaChoZWFkZXIsIGVuY29kaW5nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9fdHJhbnNmb3JtKGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2spO1xuICB9XG59XG5cbmNvbnN0IFpsaWJIZWFkZXJUcmFuc2Zvcm1TdHJlYW0kMSA9IFpsaWJIZWFkZXJUcmFuc2Zvcm1TdHJlYW07XG5cbmNvbnN0IGNhbGxiYWNraWZ5ID0gKGZuLCByZWR1Y2VyKSA9PiB7XG4gIHJldHVybiB1dGlscyQxLmlzQXN5bmNGbihmbikgPyBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgIGNvbnN0IGNiID0gYXJncy5wb3AoKTtcbiAgICBmbi5hcHBseSh0aGlzLCBhcmdzKS50aGVuKCh2YWx1ZSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmVkdWNlciA/IGNiKG51bGwsIC4uLnJlZHVjZXIodmFsdWUpKSA6IGNiKG51bGwsIHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjYihlcnIpO1xuICAgICAgfVxuICAgIH0sIGNiKTtcbiAgfSA6IGZuO1xufTtcblxuY29uc3QgY2FsbGJhY2tpZnkkMSA9IGNhbGxiYWNraWZ5O1xuXG4vKipcbiAqIENhbGN1bGF0ZSBkYXRhIG1heFJhdGVcbiAqIEBwYXJhbSB7TnVtYmVyfSBbc2FtcGxlc0NvdW50PSAxMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSBbbWluPSAxMDAwXVxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBzcGVlZG9tZXRlcihzYW1wbGVzQ291bnQsIG1pbikge1xuICBzYW1wbGVzQ291bnQgPSBzYW1wbGVzQ291bnQgfHwgMTA7XG4gIGNvbnN0IGJ5dGVzID0gbmV3IEFycmF5KHNhbXBsZXNDb3VudCk7XG4gIGNvbnN0IHRpbWVzdGFtcHMgPSBuZXcgQXJyYXkoc2FtcGxlc0NvdW50KTtcbiAgbGV0IGhlYWQgPSAwO1xuICBsZXQgdGFpbCA9IDA7XG4gIGxldCBmaXJzdFNhbXBsZVRTO1xuXG4gIG1pbiA9IG1pbiAhPT0gdW5kZWZpbmVkID8gbWluIDogMTAwMDtcblxuICByZXR1cm4gZnVuY3Rpb24gcHVzaChjaHVua0xlbmd0aCkge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICBjb25zdCBzdGFydGVkQXQgPSB0aW1lc3RhbXBzW3RhaWxdO1xuXG4gICAgaWYgKCFmaXJzdFNhbXBsZVRTKSB7XG4gICAgICBmaXJzdFNhbXBsZVRTID0gbm93O1xuICAgIH1cblxuICAgIGJ5dGVzW2hlYWRdID0gY2h1bmtMZW5ndGg7XG4gICAgdGltZXN0YW1wc1toZWFkXSA9IG5vdztcblxuICAgIGxldCBpID0gdGFpbDtcbiAgICBsZXQgYnl0ZXNDb3VudCA9IDA7XG5cbiAgICB3aGlsZSAoaSAhPT0gaGVhZCkge1xuICAgICAgYnl0ZXNDb3VudCArPSBieXRlc1tpKytdO1xuICAgICAgaSA9IGkgJSBzYW1wbGVzQ291bnQ7XG4gICAgfVxuXG4gICAgaGVhZCA9IChoZWFkICsgMSkgJSBzYW1wbGVzQ291bnQ7XG5cbiAgICBpZiAoaGVhZCA9PT0gdGFpbCkge1xuICAgICAgdGFpbCA9ICh0YWlsICsgMSkgJSBzYW1wbGVzQ291bnQ7XG4gICAgfVxuXG4gICAgaWYgKG5vdyAtIGZpcnN0U2FtcGxlVFMgPCBtaW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXNzZWQgPSBzdGFydGVkQXQgJiYgbm93IC0gc3RhcnRlZEF0O1xuXG4gICAgcmV0dXJuIHBhc3NlZCA/IE1hdGgucm91bmQoYnl0ZXNDb3VudCAqIDEwMDAgLyBwYXNzZWQpIDogdW5kZWZpbmVkO1xuICB9O1xufVxuXG4vKipcbiAqIFRocm90dGxlIGRlY29yYXRvclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqIEBwYXJhbSB7TnVtYmVyfSBmcmVxXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gdGhyb3R0bGUoZm4sIGZyZXEpIHtcbiAgbGV0IHRpbWVzdGFtcCA9IDA7XG4gIGxldCB0aHJlc2hvbGQgPSAxMDAwIC8gZnJlcTtcbiAgbGV0IGxhc3RBcmdzO1xuICBsZXQgdGltZXI7XG5cbiAgY29uc3QgaW52b2tlID0gKGFyZ3MsIG5vdyA9IERhdGUubm93KCkpID0+IHtcbiAgICB0aW1lc3RhbXAgPSBub3c7XG4gICAgbGFzdEFyZ3MgPSBudWxsO1xuICAgIGlmICh0aW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgIHRpbWVyID0gbnVsbDtcbiAgICB9XG4gICAgZm4uYXBwbHkobnVsbCwgYXJncyk7XG4gIH07XG5cbiAgY29uc3QgdGhyb3R0bGVkID0gKC4uLmFyZ3MpID0+IHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHBhc3NlZCA9IG5vdyAtIHRpbWVzdGFtcDtcbiAgICBpZiAoIHBhc3NlZCA+PSB0aHJlc2hvbGQpIHtcbiAgICAgIGludm9rZShhcmdzLCBub3cpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsYXN0QXJncyA9IGFyZ3M7XG4gICAgICBpZiAoIXRpbWVyKSB7XG4gICAgICAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgICAgIGludm9rZShsYXN0QXJncyk7XG4gICAgICAgIH0sIHRocmVzaG9sZCAtIHBhc3NlZCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGZsdXNoID0gKCkgPT4gbGFzdEFyZ3MgJiYgaW52b2tlKGxhc3RBcmdzKTtcblxuICByZXR1cm4gW3Rocm90dGxlZCwgZmx1c2hdO1xufVxuXG5jb25zdCBwcm9ncmVzc0V2ZW50UmVkdWNlciA9IChsaXN0ZW5lciwgaXNEb3dubG9hZFN0cmVhbSwgZnJlcSA9IDMpID0+IHtcbiAgbGV0IGJ5dGVzTm90aWZpZWQgPSAwO1xuICBjb25zdCBfc3BlZWRvbWV0ZXIgPSBzcGVlZG9tZXRlcig1MCwgMjUwKTtcblxuICByZXR1cm4gdGhyb3R0bGUoZSA9PiB7XG4gICAgY29uc3QgbG9hZGVkID0gZS5sb2FkZWQ7XG4gICAgY29uc3QgdG90YWwgPSBlLmxlbmd0aENvbXB1dGFibGUgPyBlLnRvdGFsIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHByb2dyZXNzQnl0ZXMgPSBsb2FkZWQgLSBieXRlc05vdGlmaWVkO1xuICAgIGNvbnN0IHJhdGUgPSBfc3BlZWRvbWV0ZXIocHJvZ3Jlc3NCeXRlcyk7XG4gICAgY29uc3QgaW5SYW5nZSA9IGxvYWRlZCA8PSB0b3RhbDtcblxuICAgIGJ5dGVzTm90aWZpZWQgPSBsb2FkZWQ7XG5cbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgbG9hZGVkLFxuICAgICAgdG90YWwsXG4gICAgICBwcm9ncmVzczogdG90YWwgPyAobG9hZGVkIC8gdG90YWwpIDogdW5kZWZpbmVkLFxuICAgICAgYnl0ZXM6IHByb2dyZXNzQnl0ZXMsXG4gICAgICByYXRlOiByYXRlID8gcmF0ZSA6IHVuZGVmaW5lZCxcbiAgICAgIGVzdGltYXRlZDogcmF0ZSAmJiB0b3RhbCAmJiBpblJhbmdlID8gKHRvdGFsIC0gbG9hZGVkKSAvIHJhdGUgOiB1bmRlZmluZWQsXG4gICAgICBldmVudDogZSxcbiAgICAgIGxlbmd0aENvbXB1dGFibGU6IHRvdGFsICE9IG51bGwsXG4gICAgICBbaXNEb3dubG9hZFN0cmVhbSA/ICdkb3dubG9hZCcgOiAndXBsb2FkJ106IHRydWVcbiAgICB9O1xuXG4gICAgbGlzdGVuZXIoZGF0YSk7XG4gIH0sIGZyZXEpO1xufTtcblxuY29uc3QgcHJvZ3Jlc3NFdmVudERlY29yYXRvciA9ICh0b3RhbCwgdGhyb3R0bGVkKSA9PiB7XG4gIGNvbnN0IGxlbmd0aENvbXB1dGFibGUgPSB0b3RhbCAhPSBudWxsO1xuXG4gIHJldHVybiBbKGxvYWRlZCkgPT4gdGhyb3R0bGVkWzBdKHtcbiAgICBsZW5ndGhDb21wdXRhYmxlLFxuICAgIHRvdGFsLFxuICAgIGxvYWRlZFxuICB9KSwgdGhyb3R0bGVkWzFdXTtcbn07XG5cbmNvbnN0IGFzeW5jRGVjb3JhdG9yID0gKGZuKSA9PiAoLi4uYXJncykgPT4gdXRpbHMkMS5hc2FwKCgpID0+IGZuKC4uLmFyZ3MpKTtcblxuY29uc3QgemxpYk9wdGlvbnMgPSB7XG4gIGZsdXNoOiB6bGliX19kZWZhdWx0W1wiZGVmYXVsdFwiXS5jb25zdGFudHMuWl9TWU5DX0ZMVVNILFxuICBmaW5pc2hGbHVzaDogemxpYl9fZGVmYXVsdFtcImRlZmF1bHRcIl0uY29uc3RhbnRzLlpfU1lOQ19GTFVTSFxufTtcblxuY29uc3QgYnJvdGxpT3B0aW9ucyA9IHtcbiAgZmx1c2g6IHpsaWJfX2RlZmF1bHRbXCJkZWZhdWx0XCJdLmNvbnN0YW50cy5CUk9UTElfT1BFUkFUSU9OX0ZMVVNILFxuICBmaW5pc2hGbHVzaDogemxpYl9fZGVmYXVsdFtcImRlZmF1bHRcIl0uY29uc3RhbnRzLkJST1RMSV9PUEVSQVRJT05fRkxVU0hcbn07XG5cbmNvbnN0IGlzQnJvdGxpU3VwcG9ydGVkID0gdXRpbHMkMS5pc0Z1bmN0aW9uKHpsaWJfX2RlZmF1bHRbXCJkZWZhdWx0XCJdLmNyZWF0ZUJyb3RsaURlY29tcHJlc3MpO1xuXG5jb25zdCB7aHR0cDogaHR0cEZvbGxvdywgaHR0cHM6IGh0dHBzRm9sbG93fSA9IGZvbGxvd1JlZGlyZWN0c19fZGVmYXVsdFtcImRlZmF1bHRcIl07XG5cbmNvbnN0IGlzSHR0cHMgPSAvaHR0cHM6Py87XG5cbmNvbnN0IHN1cHBvcnRlZFByb3RvY29scyA9IHBsYXRmb3JtLnByb3RvY29scy5tYXAocHJvdG9jb2wgPT4ge1xuICByZXR1cm4gcHJvdG9jb2wgKyAnOic7XG59KTtcblxuY29uc3QgZmx1c2hPbkZpbmlzaCA9IChzdHJlYW0sIFt0aHJvdHRsZWQsIGZsdXNoXSkgPT4ge1xuICBzdHJlYW1cbiAgICAub24oJ2VuZCcsIGZsdXNoKVxuICAgIC5vbignZXJyb3InLCBmbHVzaCk7XG5cbiAgcmV0dXJuIHRocm90dGxlZDtcbn07XG5cbi8qKlxuICogSWYgdGhlIHByb3h5IG9yIGNvbmZpZyBiZWZvcmVSZWRpcmVjdHMgZnVuY3Rpb25zIGFyZSBkZWZpbmVkLCBjYWxsIHRoZW0gd2l0aCB0aGUgb3B0aW9uc1xuICogb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIG9iamVjdCB0aGF0IHdhcyBwYXNzZWQgdG8gdGhlIHJlcXVlc3QuXG4gKlxuICogQHJldHVybnMge09iamVjdDxzdHJpbmcsIGFueT59XG4gKi9cbmZ1bmN0aW9uIGRpc3BhdGNoQmVmb3JlUmVkaXJlY3Qob3B0aW9ucywgcmVzcG9uc2VEZXRhaWxzKSB7XG4gIGlmIChvcHRpb25zLmJlZm9yZVJlZGlyZWN0cy5wcm94eSkge1xuICAgIG9wdGlvbnMuYmVmb3JlUmVkaXJlY3RzLnByb3h5KG9wdGlvbnMpO1xuICB9XG4gIGlmIChvcHRpb25zLmJlZm9yZVJlZGlyZWN0cy5jb25maWcpIHtcbiAgICBvcHRpb25zLmJlZm9yZVJlZGlyZWN0cy5jb25maWcob3B0aW9ucywgcmVzcG9uc2VEZXRhaWxzKTtcbiAgfVxufVxuXG4vKipcbiAqIElmIHRoZSBwcm94eSBvciBjb25maWcgYWZ0ZXJSZWRpcmVjdHMgZnVuY3Rpb25zIGFyZSBkZWZpbmVkLCBjYWxsIHRoZW0gd2l0aCB0aGUgb3B0aW9uc1xuICpcbiAqIEBwYXJhbSB7aHR0cC5DbGllbnRSZXF1ZXN0QXJnc30gb3B0aW9uc1xuICogQHBhcmFtIHtBeGlvc1Byb3h5Q29uZmlnfSBjb25maWdQcm94eSBjb25maWd1cmF0aW9uIGZyb20gQXhpb3Mgb3B0aW9ucyBvYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBsb2NhdGlvblxuICpcbiAqIEByZXR1cm5zIHtodHRwLkNsaWVudFJlcXVlc3RBcmdzfVxuICovXG5mdW5jdGlvbiBzZXRQcm94eShvcHRpb25zLCBjb25maWdQcm94eSwgbG9jYXRpb24pIHtcbiAgbGV0IHByb3h5ID0gY29uZmlnUHJveHk7XG4gIGlmICghcHJveHkgJiYgcHJveHkgIT09IGZhbHNlKSB7XG4gICAgY29uc3QgcHJveHlVcmwgPSBwcm94eUZyb21FbnYuZ2V0UHJveHlGb3JVcmwobG9jYXRpb24pO1xuICAgIGlmIChwcm94eVVybCkge1xuICAgICAgcHJveHkgPSBuZXcgVVJMKHByb3h5VXJsKTtcbiAgICB9XG4gIH1cbiAgaWYgKHByb3h5KSB7XG4gICAgLy8gQmFzaWMgcHJveHkgYXV0aG9yaXphdGlvblxuICAgIGlmIChwcm94eS51c2VybmFtZSkge1xuICAgICAgcHJveHkuYXV0aCA9IChwcm94eS51c2VybmFtZSB8fCAnJykgKyAnOicgKyAocHJveHkucGFzc3dvcmQgfHwgJycpO1xuICAgIH1cblxuICAgIGlmIChwcm94eS5hdXRoKSB7XG4gICAgICAvLyBTdXBwb3J0IHByb3h5IGF1dGggb2JqZWN0IGZvcm1cbiAgICAgIGlmIChwcm94eS5hdXRoLnVzZXJuYW1lIHx8IHByb3h5LmF1dGgucGFzc3dvcmQpIHtcbiAgICAgICAgcHJveHkuYXV0aCA9IChwcm94eS5hdXRoLnVzZXJuYW1lIHx8ICcnKSArICc6JyArIChwcm94eS5hdXRoLnBhc3N3b3JkIHx8ICcnKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJhc2U2NCA9IEJ1ZmZlclxuICAgICAgICAuZnJvbShwcm94eS5hdXRoLCAndXRmOCcpXG4gICAgICAgIC50b1N0cmluZygnYmFzZTY0Jyk7XG4gICAgICBvcHRpb25zLmhlYWRlcnNbJ1Byb3h5LUF1dGhvcml6YXRpb24nXSA9ICdCYXNpYyAnICsgYmFzZTY0O1xuICAgIH1cblxuICAgIG9wdGlvbnMuaGVhZGVycy5ob3N0ID0gb3B0aW9ucy5ob3N0bmFtZSArIChvcHRpb25zLnBvcnQgPyAnOicgKyBvcHRpb25zLnBvcnQgOiAnJyk7XG4gICAgY29uc3QgcHJveHlIb3N0ID0gcHJveHkuaG9zdG5hbWUgfHwgcHJveHkuaG9zdDtcbiAgICBvcHRpb25zLmhvc3RuYW1lID0gcHJveHlIb3N0O1xuICAgIC8vIFJlcGxhY2UgJ2hvc3QnIHNpbmNlIG9wdGlvbnMgaXMgbm90IGEgVVJMIG9iamVjdFxuICAgIG9wdGlvbnMuaG9zdCA9IHByb3h5SG9zdDtcbiAgICBvcHRpb25zLnBvcnQgPSBwcm94eS5wb3J0O1xuICAgIG9wdGlvbnMucGF0aCA9IGxvY2F0aW9uO1xuICAgIGlmIChwcm94eS5wcm90b2NvbCkge1xuICAgICAgb3B0aW9ucy5wcm90b2NvbCA9IHByb3h5LnByb3RvY29sLmluY2x1ZGVzKCc6JykgPyBwcm94eS5wcm90b2NvbCA6IGAke3Byb3h5LnByb3RvY29sfTpgO1xuICAgIH1cbiAgfVxuXG4gIG9wdGlvbnMuYmVmb3JlUmVkaXJlY3RzLnByb3h5ID0gZnVuY3Rpb24gYmVmb3JlUmVkaXJlY3QocmVkaXJlY3RPcHRpb25zKSB7XG4gICAgLy8gQ29uZmlndXJlIHByb3h5IGZvciByZWRpcmVjdGVkIHJlcXVlc3QsIHBhc3NpbmcgdGhlIG9yaWdpbmFsIGNvbmZpZyBwcm94eSB0byBhcHBseVxuICAgIC8vIHRoZSBleGFjdCBzYW1lIGxvZ2ljIGFzIGlmIHRoZSByZWRpcmVjdGVkIHJlcXVlc3Qgd2FzIHBlcmZvcm1lZCBieSBheGlvcyBkaXJlY3RseS5cbiAgICBzZXRQcm94eShyZWRpcmVjdE9wdGlvbnMsIGNvbmZpZ1Byb3h5LCByZWRpcmVjdE9wdGlvbnMuaHJlZik7XG4gIH07XG59XG5cbmNvbnN0IGlzSHR0cEFkYXB0ZXJTdXBwb3J0ZWQgPSB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgdXRpbHMkMS5raW5kT2YocHJvY2VzcykgPT09ICdwcm9jZXNzJztcblxuLy8gdGVtcG9yYXJ5IGhvdGZpeFxuXG5jb25zdCB3cmFwQXN5bmMgPSAoYXN5bmNFeGVjdXRvcikgPT4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGxldCBvbkRvbmU7XG4gICAgbGV0IGlzRG9uZTtcblxuICAgIGNvbnN0IGRvbmUgPSAodmFsdWUsIGlzUmVqZWN0ZWQpID0+IHtcbiAgICAgIGlmIChpc0RvbmUpIHJldHVybjtcbiAgICAgIGlzRG9uZSA9IHRydWU7XG4gICAgICBvbkRvbmUgJiYgb25Eb25lKHZhbHVlLCBpc1JlamVjdGVkKTtcbiAgICB9O1xuXG4gICAgY29uc3QgX3Jlc29sdmUgPSAodmFsdWUpID0+IHtcbiAgICAgIGRvbmUodmFsdWUpO1xuICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IF9yZWplY3QgPSAocmVhc29uKSA9PiB7XG4gICAgICBkb25lKHJlYXNvbiwgdHJ1ZSk7XG4gICAgICByZWplY3QocmVhc29uKTtcbiAgICB9O1xuXG4gICAgYXN5bmNFeGVjdXRvcihfcmVzb2x2ZSwgX3JlamVjdCwgKG9uRG9uZUhhbmRsZXIpID0+IChvbkRvbmUgPSBvbkRvbmVIYW5kbGVyKSkuY2F0Y2goX3JlamVjdCk7XG4gIH0pXG59O1xuXG5jb25zdCByZXNvbHZlRmFtaWx5ID0gKHthZGRyZXNzLCBmYW1pbHl9KSA9PiB7XG4gIGlmICghdXRpbHMkMS5pc1N0cmluZyhhZGRyZXNzKSkge1xuICAgIHRocm93IFR5cGVFcnJvcignYWRkcmVzcyBtdXN0IGJlIGEgc3RyaW5nJyk7XG4gIH1cbiAgcmV0dXJuICh7XG4gICAgYWRkcmVzcyxcbiAgICBmYW1pbHk6IGZhbWlseSB8fCAoYWRkcmVzcy5pbmRleE9mKCcuJykgPCAwID8gNiA6IDQpXG4gIH0pO1xufTtcblxuY29uc3QgYnVpbGRBZGRyZXNzRW50cnkgPSAoYWRkcmVzcywgZmFtaWx5KSA9PiByZXNvbHZlRmFtaWx5KHV0aWxzJDEuaXNPYmplY3QoYWRkcmVzcykgPyBhZGRyZXNzIDoge2FkZHJlc3MsIGZhbWlseX0pO1xuXG4vKmVzbGludCBjb25zaXN0ZW50LXJldHVybjowKi9cbmNvbnN0IGh0dHBBZGFwdGVyID0gaXNIdHRwQWRhcHRlclN1cHBvcnRlZCAmJiBmdW5jdGlvbiBodHRwQWRhcHRlcihjb25maWcpIHtcbiAgcmV0dXJuIHdyYXBBc3luYyhhc3luYyBmdW5jdGlvbiBkaXNwYXRjaEh0dHBSZXF1ZXN0KHJlc29sdmUsIHJlamVjdCwgb25Eb25lKSB7XG4gICAgbGV0IHtkYXRhLCBsb29rdXAsIGZhbWlseX0gPSBjb25maWc7XG4gICAgY29uc3Qge3Jlc3BvbnNlVHlwZSwgcmVzcG9uc2VFbmNvZGluZ30gPSBjb25maWc7XG4gICAgY29uc3QgbWV0aG9kID0gY29uZmlnLm1ldGhvZC50b1VwcGVyQ2FzZSgpO1xuICAgIGxldCBpc0RvbmU7XG4gICAgbGV0IHJlamVjdGVkID0gZmFsc2U7XG4gICAgbGV0IHJlcTtcblxuICAgIGlmIChsb29rdXApIHtcbiAgICAgIGNvbnN0IF9sb29rdXAgPSBjYWxsYmFja2lmeSQxKGxvb2t1cCwgKHZhbHVlKSA9PiB1dGlscyQxLmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdKTtcbiAgICAgIC8vIGhvdGZpeCB0byBzdXBwb3J0IG9wdC5hbGwgb3B0aW9uIHdoaWNoIGlzIHJlcXVpcmVkIGZvciBub2RlIDIwLnhcbiAgICAgIGxvb2t1cCA9IChob3N0bmFtZSwgb3B0LCBjYikgPT4ge1xuICAgICAgICBfbG9va3VwKGhvc3RuYW1lLCBvcHQsIChlcnIsIGFyZzAsIGFyZzEpID0+IHtcbiAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gY2IoZXJyKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBhZGRyZXNzZXMgPSB1dGlscyQxLmlzQXJyYXkoYXJnMCkgPyBhcmcwLm1hcChhZGRyID0+IGJ1aWxkQWRkcmVzc0VudHJ5KGFkZHIpKSA6IFtidWlsZEFkZHJlc3NFbnRyeShhcmcwLCBhcmcxKV07XG5cbiAgICAgICAgICBvcHQuYWxsID8gY2IoZXJyLCBhZGRyZXNzZXMpIDogY2IoZXJyLCBhZGRyZXNzZXNbMF0uYWRkcmVzcywgYWRkcmVzc2VzWzBdLmZhbWlseSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyB0ZW1wb3JhcnkgaW50ZXJuYWwgZW1pdHRlciB1bnRpbCB0aGUgQXhpb3NSZXF1ZXN0IGNsYXNzIHdpbGwgYmUgaW1wbGVtZW50ZWRcbiAgICBjb25zdCBlbWl0dGVyID0gbmV3IGV2ZW50cy5FdmVudEVtaXR0ZXIoKTtcblxuICAgIGNvbnN0IG9uRmluaXNoZWQgPSAoKSA9PiB7XG4gICAgICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShhYm9ydCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcuc2lnbmFsKSB7XG4gICAgICAgIGNvbmZpZy5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydCk7XG4gICAgICB9XG5cbiAgICAgIGVtaXR0ZXIucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgfTtcblxuICAgIG9uRG9uZSgodmFsdWUsIGlzUmVqZWN0ZWQpID0+IHtcbiAgICAgIGlzRG9uZSA9IHRydWU7XG4gICAgICBpZiAoaXNSZWplY3RlZCkge1xuICAgICAgICByZWplY3RlZCA9IHRydWU7XG4gICAgICAgIG9uRmluaXNoZWQoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGFib3J0KHJlYXNvbikge1xuICAgICAgZW1pdHRlci5lbWl0KCdhYm9ydCcsICFyZWFzb24gfHwgcmVhc29uLnR5cGUgPyBuZXcgQ2FuY2VsZWRFcnJvcihudWxsLCBjb25maWcsIHJlcSkgOiByZWFzb24pO1xuICAgIH1cblxuICAgIGVtaXR0ZXIub25jZSgnYWJvcnQnLCByZWplY3QpO1xuXG4gICAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbiB8fCBjb25maWcuc2lnbmFsKSB7XG4gICAgICBjb25maWcuY2FuY2VsVG9rZW4gJiYgY29uZmlnLmNhbmNlbFRva2VuLnN1YnNjcmliZShhYm9ydCk7XG4gICAgICBpZiAoY29uZmlnLnNpZ25hbCkge1xuICAgICAgICBjb25maWcuc2lnbmFsLmFib3J0ZWQgPyBhYm9ydCgpIDogY29uZmlnLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBQYXJzZSB1cmxcbiAgICBjb25zdCBmdWxsUGF0aCA9IGJ1aWxkRnVsbFBhdGgoY29uZmlnLmJhc2VVUkwsIGNvbmZpZy51cmwpO1xuICAgIGNvbnN0IHBhcnNlZCA9IG5ldyBVUkwoZnVsbFBhdGgsIHV0aWxzJDEuaGFzQnJvd3NlckVudiA/IHBsYXRmb3JtLm9yaWdpbiA6IHVuZGVmaW5lZCk7XG4gICAgY29uc3QgcHJvdG9jb2wgPSBwYXJzZWQucHJvdG9jb2wgfHwgc3VwcG9ydGVkUHJvdG9jb2xzWzBdO1xuXG4gICAgaWYgKHByb3RvY29sID09PSAnZGF0YTonKSB7XG4gICAgICBsZXQgY29udmVydGVkRGF0YTtcblxuICAgICAgaWYgKG1ldGhvZCAhPT0gJ0dFVCcpIHtcbiAgICAgICAgcmV0dXJuIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHtcbiAgICAgICAgICBzdGF0dXM6IDQwNSxcbiAgICAgICAgICBzdGF0dXNUZXh0OiAnbWV0aG9kIG5vdCBhbGxvd2VkJyxcbiAgICAgICAgICBoZWFkZXJzOiB7fSxcbiAgICAgICAgICBjb25maWdcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnZlcnRlZERhdGEgPSBmcm9tRGF0YVVSSShjb25maWcudXJsLCByZXNwb25zZVR5cGUgPT09ICdibG9iJywge1xuICAgICAgICAgIEJsb2I6IGNvbmZpZy5lbnYgJiYgY29uZmlnLmVudi5CbG9iXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93IEF4aW9zRXJyb3IuZnJvbShlcnIsIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULCBjb25maWcpO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVzcG9uc2VUeXBlID09PSAndGV4dCcpIHtcbiAgICAgICAgY29udmVydGVkRGF0YSA9IGNvbnZlcnRlZERhdGEudG9TdHJpbmcocmVzcG9uc2VFbmNvZGluZyk7XG5cbiAgICAgICAgaWYgKCFyZXNwb25zZUVuY29kaW5nIHx8IHJlc3BvbnNlRW5jb2RpbmcgPT09ICd1dGY4Jykge1xuICAgICAgICAgIGNvbnZlcnRlZERhdGEgPSB1dGlscyQxLnN0cmlwQk9NKGNvbnZlcnRlZERhdGEpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlVHlwZSA9PT0gJ3N0cmVhbScpIHtcbiAgICAgICAgY29udmVydGVkRGF0YSA9IHN0cmVhbV9fZGVmYXVsdFtcImRlZmF1bHRcIl0uUmVhZGFibGUuZnJvbShjb252ZXJ0ZWREYXRhKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHtcbiAgICAgICAgZGF0YTogY29udmVydGVkRGF0YSxcbiAgICAgICAgc3RhdHVzOiAyMDAsXG4gICAgICAgIHN0YXR1c1RleHQ6ICdPSycsXG4gICAgICAgIGhlYWRlcnM6IG5ldyBBeGlvc0hlYWRlcnMkMSgpLFxuICAgICAgICBjb25maWdcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChzdXBwb3J0ZWRQcm90b2NvbHMuaW5kZXhPZihwcm90b2NvbCkgPT09IC0xKSB7XG4gICAgICByZXR1cm4gcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICAnVW5zdXBwb3J0ZWQgcHJvdG9jb2wgJyArIHByb3RvY29sLFxuICAgICAgICBBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCxcbiAgICAgICAgY29uZmlnXG4gICAgICApKTtcbiAgICB9XG5cbiAgICBjb25zdCBoZWFkZXJzID0gQXhpb3NIZWFkZXJzJDEuZnJvbShjb25maWcuaGVhZGVycykubm9ybWFsaXplKCk7XG5cbiAgICAvLyBTZXQgVXNlci1BZ2VudCAocmVxdWlyZWQgYnkgc29tZSBzZXJ2ZXJzKVxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYXhpb3MvYXhpb3MvaXNzdWVzLzY5XG4gICAgLy8gVXNlci1BZ2VudCBpcyBzcGVjaWZpZWQ7IGhhbmRsZSBjYXNlIHdoZXJlIG5vIFVBIGhlYWRlciBpcyBkZXNpcmVkXG4gICAgLy8gT25seSBzZXQgaGVhZGVyIGlmIGl0IGhhc24ndCBiZWVuIHNldCBpbiBjb25maWdcbiAgICBoZWFkZXJzLnNldCgnVXNlci1BZ2VudCcsICdheGlvcy8nICsgVkVSU0lPTiwgZmFsc2UpO1xuXG4gICAgY29uc3Qge29uVXBsb2FkUHJvZ3Jlc3MsIG9uRG93bmxvYWRQcm9ncmVzc30gPSBjb25maWc7XG4gICAgY29uc3QgbWF4UmF0ZSA9IGNvbmZpZy5tYXhSYXRlO1xuICAgIGxldCBtYXhVcGxvYWRSYXRlID0gdW5kZWZpbmVkO1xuICAgIGxldCBtYXhEb3dubG9hZFJhdGUgPSB1bmRlZmluZWQ7XG5cbiAgICAvLyBzdXBwb3J0IGZvciBzcGVjIGNvbXBsaWFudCBGb3JtRGF0YSBvYmplY3RzXG4gICAgaWYgKHV0aWxzJDEuaXNTcGVjQ29tcGxpYW50Rm9ybShkYXRhKSkge1xuICAgICAgY29uc3QgdXNlckJvdW5kYXJ5ID0gaGVhZGVycy5nZXRDb250ZW50VHlwZSgvYm91bmRhcnk9KFstX1xcd1xcZF17MTAsNzB9KS9pKTtcblxuICAgICAgZGF0YSA9IGZvcm1EYXRhVG9TdHJlYW0kMShkYXRhLCAoZm9ybUhlYWRlcnMpID0+IHtcbiAgICAgICAgaGVhZGVycy5zZXQoZm9ybUhlYWRlcnMpO1xuICAgICAgfSwge1xuICAgICAgICB0YWc6IGBheGlvcy0ke1ZFUlNJT059LWJvdW5kYXJ5YCxcbiAgICAgICAgYm91bmRhcnk6IHVzZXJCb3VuZGFyeSAmJiB1c2VyQm91bmRhcnlbMV0gfHwgdW5kZWZpbmVkXG4gICAgICB9KTtcbiAgICAgIC8vIHN1cHBvcnQgZm9yIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2Zvcm0tZGF0YSBhcGlcbiAgICB9IGVsc2UgaWYgKHV0aWxzJDEuaXNGb3JtRGF0YShkYXRhKSAmJiB1dGlscyQxLmlzRnVuY3Rpb24oZGF0YS5nZXRIZWFkZXJzKSkge1xuICAgICAgaGVhZGVycy5zZXQoZGF0YS5nZXRIZWFkZXJzKCkpO1xuXG4gICAgICBpZiAoIWhlYWRlcnMuaGFzQ29udGVudExlbmd0aCgpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qga25vd25MZW5ndGggPSBhd2FpdCB1dGlsX19kZWZhdWx0W1wiZGVmYXVsdFwiXS5wcm9taXNpZnkoZGF0YS5nZXRMZW5ndGgpLmNhbGwoZGF0YSk7XG4gICAgICAgICAgTnVtYmVyLmlzRmluaXRlKGtub3duTGVuZ3RoKSAmJiBrbm93bkxlbmd0aCA+PSAwICYmIGhlYWRlcnMuc2V0Q29udGVudExlbmd0aChrbm93bkxlbmd0aCk7XG4gICAgICAgICAgLyplc2xpbnQgbm8tZW1wdHk6MCovXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodXRpbHMkMS5pc0Jsb2IoZGF0YSkpIHtcbiAgICAgIGRhdGEuc2l6ZSAmJiBoZWFkZXJzLnNldENvbnRlbnRUeXBlKGRhdGEudHlwZSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJyk7XG4gICAgICBoZWFkZXJzLnNldENvbnRlbnRMZW5ndGgoZGF0YS5zaXplIHx8IDApO1xuICAgICAgZGF0YSA9IHN0cmVhbV9fZGVmYXVsdFtcImRlZmF1bHRcIl0uUmVhZGFibGUuZnJvbShyZWFkQmxvYiQxKGRhdGEpKTtcbiAgICB9IGVsc2UgaWYgKGRhdGEgJiYgIXV0aWxzJDEuaXNTdHJlYW0oZGF0YSkpIHtcbiAgICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoZGF0YSkpIDsgZWxzZSBpZiAodXRpbHMkMS5pc0FycmF5QnVmZmVyKGRhdGEpKSB7XG4gICAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShuZXcgVWludDhBcnJheShkYXRhKSk7XG4gICAgICB9IGVsc2UgaWYgKHV0aWxzJDEuaXNTdHJpbmcoZGF0YSkpIHtcbiAgICAgICAgZGF0YSA9IEJ1ZmZlci5mcm9tKGRhdGEsICd1dGYtOCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgICAnRGF0YSBhZnRlciB0cmFuc2Zvcm1hdGlvbiBtdXN0IGJlIGEgc3RyaW5nLCBhbiBBcnJheUJ1ZmZlciwgYSBCdWZmZXIsIG9yIGEgU3RyZWFtJyxcbiAgICAgICAgICBBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCxcbiAgICAgICAgICBjb25maWdcbiAgICAgICAgKSk7XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBDb250ZW50LUxlbmd0aCBoZWFkZXIgaWYgZGF0YSBleGlzdHNcbiAgICAgIGhlYWRlcnMuc2V0Q29udGVudExlbmd0aChkYXRhLmxlbmd0aCwgZmFsc2UpO1xuXG4gICAgICBpZiAoY29uZmlnLm1heEJvZHlMZW5ndGggPiAtMSAmJiBkYXRhLmxlbmd0aCA+IGNvbmZpZy5tYXhCb2R5TGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiByZWplY3QobmV3IEF4aW9zRXJyb3IoXG4gICAgICAgICAgJ1JlcXVlc3QgYm9keSBsYXJnZXIgdGhhbiBtYXhCb2R5TGVuZ3RoIGxpbWl0JyxcbiAgICAgICAgICBBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCxcbiAgICAgICAgICBjb25maWdcbiAgICAgICAgKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY29udGVudExlbmd0aCA9IHV0aWxzJDEudG9GaW5pdGVOdW1iZXIoaGVhZGVycy5nZXRDb250ZW50TGVuZ3RoKCkpO1xuXG4gICAgaWYgKHV0aWxzJDEuaXNBcnJheShtYXhSYXRlKSkge1xuICAgICAgbWF4VXBsb2FkUmF0ZSA9IG1heFJhdGVbMF07XG4gICAgICBtYXhEb3dubG9hZFJhdGUgPSBtYXhSYXRlWzFdO1xuICAgIH0gZWxzZSB7XG4gICAgICBtYXhVcGxvYWRSYXRlID0gbWF4RG93bmxvYWRSYXRlID0gbWF4UmF0ZTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YSAmJiAob25VcGxvYWRQcm9ncmVzcyB8fCBtYXhVcGxvYWRSYXRlKSkge1xuICAgICAgaWYgKCF1dGlscyQxLmlzU3RyZWFtKGRhdGEpKSB7XG4gICAgICAgIGRhdGEgPSBzdHJlYW1fX2RlZmF1bHRbXCJkZWZhdWx0XCJdLlJlYWRhYmxlLmZyb20oZGF0YSwge29iamVjdE1vZGU6IGZhbHNlfSk7XG4gICAgICB9XG5cbiAgICAgIGRhdGEgPSBzdHJlYW1fX2RlZmF1bHRbXCJkZWZhdWx0XCJdLnBpcGVsaW5lKFtkYXRhLCBuZXcgQXhpb3NUcmFuc2Zvcm1TdHJlYW0kMSh7XG4gICAgICAgIG1heFJhdGU6IHV0aWxzJDEudG9GaW5pdGVOdW1iZXIobWF4VXBsb2FkUmF0ZSlcbiAgICAgIH0pXSwgdXRpbHMkMS5ub29wKTtcblxuICAgICAgb25VcGxvYWRQcm9ncmVzcyAmJiBkYXRhLm9uKCdwcm9ncmVzcycsIGZsdXNoT25GaW5pc2goXG4gICAgICAgIGRhdGEsXG4gICAgICAgIHByb2dyZXNzRXZlbnREZWNvcmF0b3IoXG4gICAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgICBwcm9ncmVzc0V2ZW50UmVkdWNlcihhc3luY0RlY29yYXRvcihvblVwbG9hZFByb2dyZXNzKSwgZmFsc2UsIDMpXG4gICAgICAgIClcbiAgICAgICkpO1xuICAgIH1cblxuICAgIC8vIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb25cbiAgICBsZXQgYXV0aCA9IHVuZGVmaW5lZDtcbiAgICBpZiAoY29uZmlnLmF1dGgpIHtcbiAgICAgIGNvbnN0IHVzZXJuYW1lID0gY29uZmlnLmF1dGgudXNlcm5hbWUgfHwgJyc7XG4gICAgICBjb25zdCBwYXNzd29yZCA9IGNvbmZpZy5hdXRoLnBhc3N3b3JkIHx8ICcnO1xuICAgICAgYXV0aCA9IHVzZXJuYW1lICsgJzonICsgcGFzc3dvcmQ7XG4gICAgfVxuXG4gICAgaWYgKCFhdXRoICYmIHBhcnNlZC51c2VybmFtZSkge1xuICAgICAgY29uc3QgdXJsVXNlcm5hbWUgPSBwYXJzZWQudXNlcm5hbWU7XG4gICAgICBjb25zdCB1cmxQYXNzd29yZCA9IHBhcnNlZC5wYXNzd29yZDtcbiAgICAgIGF1dGggPSB1cmxVc2VybmFtZSArICc6JyArIHVybFBhc3N3b3JkO1xuICAgIH1cblxuICAgIGF1dGggJiYgaGVhZGVycy5kZWxldGUoJ2F1dGhvcml6YXRpb24nKTtcblxuICAgIGxldCBwYXRoO1xuXG4gICAgdHJ5IHtcbiAgICAgIHBhdGggPSBidWlsZFVSTChcbiAgICAgICAgcGFyc2VkLnBhdGhuYW1lICsgcGFyc2VkLnNlYXJjaCxcbiAgICAgICAgY29uZmlnLnBhcmFtcyxcbiAgICAgICAgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXJcbiAgICAgICkucmVwbGFjZSgvXlxcPy8sICcnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnN0IGN1c3RvbUVyciA9IG5ldyBFcnJvcihlcnIubWVzc2FnZSk7XG4gICAgICBjdXN0b21FcnIuY29uZmlnID0gY29uZmlnO1xuICAgICAgY3VzdG9tRXJyLnVybCA9IGNvbmZpZy51cmw7XG4gICAgICBjdXN0b21FcnIuZXhpc3RzID0gdHJ1ZTtcbiAgICAgIHJldHVybiByZWplY3QoY3VzdG9tRXJyKTtcbiAgICB9XG5cbiAgICBoZWFkZXJzLnNldChcbiAgICAgICdBY2NlcHQtRW5jb2RpbmcnLFxuICAgICAgJ2d6aXAsIGNvbXByZXNzLCBkZWZsYXRlJyArIChpc0Jyb3RsaVN1cHBvcnRlZCA/ICcsIGJyJyA6ICcnKSwgZmFsc2VcbiAgICAgICk7XG5cbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgcGF0aCxcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgaGVhZGVyczogaGVhZGVycy50b0pTT04oKSxcbiAgICAgIGFnZW50czogeyBodHRwOiBjb25maWcuaHR0cEFnZW50LCBodHRwczogY29uZmlnLmh0dHBzQWdlbnQgfSxcbiAgICAgIGF1dGgsXG4gICAgICBwcm90b2NvbCxcbiAgICAgIGZhbWlseSxcbiAgICAgIGJlZm9yZVJlZGlyZWN0OiBkaXNwYXRjaEJlZm9yZVJlZGlyZWN0LFxuICAgICAgYmVmb3JlUmVkaXJlY3RzOiB7fVxuICAgIH07XG5cbiAgICAvLyBjYWNoZWFibGUtbG9va3VwIGludGVncmF0aW9uIGhvdGZpeFxuICAgICF1dGlscyQxLmlzVW5kZWZpbmVkKGxvb2t1cCkgJiYgKG9wdGlvbnMubG9va3VwID0gbG9va3VwKTtcblxuICAgIGlmIChjb25maWcuc29ja2V0UGF0aCkge1xuICAgICAgb3B0aW9ucy5zb2NrZXRQYXRoID0gY29uZmlnLnNvY2tldFBhdGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnMuaG9zdG5hbWUgPSBwYXJzZWQuaG9zdG5hbWU7XG4gICAgICBvcHRpb25zLnBvcnQgPSBwYXJzZWQucG9ydDtcbiAgICAgIHNldFByb3h5KG9wdGlvbnMsIGNvbmZpZy5wcm94eSwgcHJvdG9jb2wgKyAnLy8nICsgcGFyc2VkLmhvc3RuYW1lICsgKHBhcnNlZC5wb3J0ID8gJzonICsgcGFyc2VkLnBvcnQgOiAnJykgKyBvcHRpb25zLnBhdGgpO1xuICAgIH1cblxuICAgIGxldCB0cmFuc3BvcnQ7XG4gICAgY29uc3QgaXNIdHRwc1JlcXVlc3QgPSBpc0h0dHBzLnRlc3Qob3B0aW9ucy5wcm90b2NvbCk7XG4gICAgb3B0aW9ucy5hZ2VudCA9IGlzSHR0cHNSZXF1ZXN0ID8gY29uZmlnLmh0dHBzQWdlbnQgOiBjb25maWcuaHR0cEFnZW50O1xuICAgIGlmIChjb25maWcudHJhbnNwb3J0KSB7XG4gICAgICB0cmFuc3BvcnQgPSBjb25maWcudHJhbnNwb3J0O1xuICAgIH0gZWxzZSBpZiAoY29uZmlnLm1heFJlZGlyZWN0cyA9PT0gMCkge1xuICAgICAgdHJhbnNwb3J0ID0gaXNIdHRwc1JlcXVlc3QgPyBodHRwc19fZGVmYXVsdFtcImRlZmF1bHRcIl0gOiBodHRwX19kZWZhdWx0W1wiZGVmYXVsdFwiXTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGNvbmZpZy5tYXhSZWRpcmVjdHMpIHtcbiAgICAgICAgb3B0aW9ucy5tYXhSZWRpcmVjdHMgPSBjb25maWcubWF4UmVkaXJlY3RzO1xuICAgICAgfVxuICAgICAgaWYgKGNvbmZpZy5iZWZvcmVSZWRpcmVjdCkge1xuICAgICAgICBvcHRpb25zLmJlZm9yZVJlZGlyZWN0cy5jb25maWcgPSBjb25maWcuYmVmb3JlUmVkaXJlY3Q7XG4gICAgICB9XG4gICAgICB0cmFuc3BvcnQgPSBpc0h0dHBzUmVxdWVzdCA/IGh0dHBzRm9sbG93IDogaHR0cEZvbGxvdztcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLm1heEJvZHlMZW5ndGggPiAtMSkge1xuICAgICAgb3B0aW9ucy5tYXhCb2R5TGVuZ3RoID0gY29uZmlnLm1heEJvZHlMZW5ndGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGZvbGxvdy1yZWRpcmVjdHMgZG9lcyBub3Qgc2tpcCBjb21wYXJpc29uLCBzbyBpdCBzaG91bGQgYWx3YXlzIHN1Y2NlZWQgZm9yIGF4aW9zIC0xIHVubGltaXRlZFxuICAgICAgb3B0aW9ucy5tYXhCb2R5TGVuZ3RoID0gSW5maW5pdHk7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy5pbnNlY3VyZUhUVFBQYXJzZXIpIHtcbiAgICAgIG9wdGlvbnMuaW5zZWN1cmVIVFRQUGFyc2VyID0gY29uZmlnLmluc2VjdXJlSFRUUFBhcnNlcjtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgdGhlIHJlcXVlc3RcbiAgICByZXEgPSB0cmFuc3BvcnQucmVxdWVzdChvcHRpb25zLCBmdW5jdGlvbiBoYW5kbGVSZXNwb25zZShyZXMpIHtcbiAgICAgIGlmIChyZXEuZGVzdHJveWVkKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IHN0cmVhbXMgPSBbcmVzXTtcblxuICAgICAgY29uc3QgcmVzcG9uc2VMZW5ndGggPSArcmVzLmhlYWRlcnNbJ2NvbnRlbnQtbGVuZ3RoJ107XG5cbiAgICAgIGlmIChvbkRvd25sb2FkUHJvZ3Jlc3MgfHwgbWF4RG93bmxvYWRSYXRlKSB7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybVN0cmVhbSA9IG5ldyBBeGlvc1RyYW5zZm9ybVN0cmVhbSQxKHtcbiAgICAgICAgICBtYXhSYXRlOiB1dGlscyQxLnRvRmluaXRlTnVtYmVyKG1heERvd25sb2FkUmF0ZSlcbiAgICAgICAgfSk7XG5cbiAgICAgICAgb25Eb3dubG9hZFByb2dyZXNzICYmIHRyYW5zZm9ybVN0cmVhbS5vbigncHJvZ3Jlc3MnLCBmbHVzaE9uRmluaXNoKFxuICAgICAgICAgIHRyYW5zZm9ybVN0cmVhbSxcbiAgICAgICAgICBwcm9ncmVzc0V2ZW50RGVjb3JhdG9yKFxuICAgICAgICAgICAgcmVzcG9uc2VMZW5ndGgsXG4gICAgICAgICAgICBwcm9ncmVzc0V2ZW50UmVkdWNlcihhc3luY0RlY29yYXRvcihvbkRvd25sb2FkUHJvZ3Jlc3MpLCB0cnVlLCAzKVxuICAgICAgICAgIClcbiAgICAgICAgKSk7XG5cbiAgICAgICAgc3RyZWFtcy5wdXNoKHRyYW5zZm9ybVN0cmVhbSk7XG4gICAgICB9XG5cbiAgICAgIC8vIGRlY29tcHJlc3MgdGhlIHJlc3BvbnNlIGJvZHkgdHJhbnNwYXJlbnRseSBpZiByZXF1aXJlZFxuICAgICAgbGV0IHJlc3BvbnNlU3RyZWFtID0gcmVzO1xuXG4gICAgICAvLyByZXR1cm4gdGhlIGxhc3QgcmVxdWVzdCBpbiBjYXNlIG9mIHJlZGlyZWN0c1xuICAgICAgY29uc3QgbGFzdFJlcXVlc3QgPSByZXMucmVxIHx8IHJlcTtcblxuICAgICAgLy8gaWYgZGVjb21wcmVzcyBkaXNhYmxlZCB3ZSBzaG91bGQgbm90IGRlY29tcHJlc3NcbiAgICAgIGlmIChjb25maWcuZGVjb21wcmVzcyAhPT0gZmFsc2UgJiYgcmVzLmhlYWRlcnNbJ2NvbnRlbnQtZW5jb2RpbmcnXSkge1xuICAgICAgICAvLyBpZiBubyBjb250ZW50LCBidXQgaGVhZGVycyBzdGlsbCBzYXkgdGhhdCBpdCBpcyBlbmNvZGVkLFxuICAgICAgICAvLyByZW1vdmUgdGhlIGhlYWRlciBub3QgY29uZnVzZSBkb3duc3RyZWFtIG9wZXJhdGlvbnNcbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gJ0hFQUQnIHx8IHJlcy5zdGF0dXNDb2RlID09PSAyMDQpIHtcbiAgICAgICAgICBkZWxldGUgcmVzLmhlYWRlcnNbJ2NvbnRlbnQtZW5jb2RpbmcnXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN3aXRjaCAoKHJlcy5oZWFkZXJzWydjb250ZW50LWVuY29kaW5nJ10gfHwgJycpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgLyplc2xpbnQgZGVmYXVsdC1jYXNlOjAqL1xuICAgICAgICBjYXNlICdnemlwJzpcbiAgICAgICAgY2FzZSAneC1nemlwJzpcbiAgICAgICAgY2FzZSAnY29tcHJlc3MnOlxuICAgICAgICBjYXNlICd4LWNvbXByZXNzJzpcbiAgICAgICAgICAvLyBhZGQgdGhlIHVuemlwcGVyIHRvIHRoZSBib2R5IHN0cmVhbSBwcm9jZXNzaW5nIHBpcGVsaW5lXG4gICAgICAgICAgc3RyZWFtcy5wdXNoKHpsaWJfX2RlZmF1bHRbXCJkZWZhdWx0XCJdLmNyZWF0ZVVuemlwKHpsaWJPcHRpb25zKSk7XG5cbiAgICAgICAgICAvLyByZW1vdmUgdGhlIGNvbnRlbnQtZW5jb2RpbmcgaW4gb3JkZXIgdG8gbm90IGNvbmZ1c2UgZG93bnN0cmVhbSBvcGVyYXRpb25zXG4gICAgICAgICAgZGVsZXRlIHJlcy5oZWFkZXJzWydjb250ZW50LWVuY29kaW5nJ107XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2RlZmxhdGUnOlxuICAgICAgICAgIHN0cmVhbXMucHVzaChuZXcgWmxpYkhlYWRlclRyYW5zZm9ybVN0cmVhbSQxKCkpO1xuXG4gICAgICAgICAgLy8gYWRkIHRoZSB1bnppcHBlciB0byB0aGUgYm9keSBzdHJlYW0gcHJvY2Vzc2luZyBwaXBlbGluZVxuICAgICAgICAgIHN0cmVhbXMucHVzaCh6bGliX19kZWZhdWx0W1wiZGVmYXVsdFwiXS5jcmVhdGVVbnppcCh6bGliT3B0aW9ucykpO1xuXG4gICAgICAgICAgLy8gcmVtb3ZlIHRoZSBjb250ZW50LWVuY29kaW5nIGluIG9yZGVyIHRvIG5vdCBjb25mdXNlIGRvd25zdHJlYW0gb3BlcmF0aW9uc1xuICAgICAgICAgIGRlbGV0ZSByZXMuaGVhZGVyc1snY29udGVudC1lbmNvZGluZyddO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdicic6XG4gICAgICAgICAgaWYgKGlzQnJvdGxpU3VwcG9ydGVkKSB7XG4gICAgICAgICAgICBzdHJlYW1zLnB1c2goemxpYl9fZGVmYXVsdFtcImRlZmF1bHRcIl0uY3JlYXRlQnJvdGxpRGVjb21wcmVzcyhicm90bGlPcHRpb25zKSk7XG4gICAgICAgICAgICBkZWxldGUgcmVzLmhlYWRlcnNbJ2NvbnRlbnQtZW5jb2RpbmcnXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmVzcG9uc2VTdHJlYW0gPSBzdHJlYW1zLmxlbmd0aCA+IDEgPyBzdHJlYW1fX2RlZmF1bHRbXCJkZWZhdWx0XCJdLnBpcGVsaW5lKHN0cmVhbXMsIHV0aWxzJDEubm9vcCkgOiBzdHJlYW1zWzBdO1xuXG4gICAgICBjb25zdCBvZmZMaXN0ZW5lcnMgPSBzdHJlYW1fX2RlZmF1bHRbXCJkZWZhdWx0XCJdLmZpbmlzaGVkKHJlc3BvbnNlU3RyZWFtLCAoKSA9PiB7XG4gICAgICAgIG9mZkxpc3RlbmVycygpO1xuICAgICAgICBvbkZpbmlzaGVkKCk7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSB7XG4gICAgICAgIHN0YXR1czogcmVzLnN0YXR1c0NvZGUsXG4gICAgICAgIHN0YXR1c1RleHQ6IHJlcy5zdGF0dXNNZXNzYWdlLFxuICAgICAgICBoZWFkZXJzOiBuZXcgQXhpb3NIZWFkZXJzJDEocmVzLmhlYWRlcnMpLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcXVlc3Q6IGxhc3RSZXF1ZXN0XG4gICAgICB9O1xuXG4gICAgICBpZiAocmVzcG9uc2VUeXBlID09PSAnc3RyZWFtJykge1xuICAgICAgICByZXNwb25zZS5kYXRhID0gcmVzcG9uc2VTdHJlYW07XG4gICAgICAgIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQnVmZmVyID0gW107XG4gICAgICAgIGxldCB0b3RhbFJlc3BvbnNlQnl0ZXMgPSAwO1xuXG4gICAgICAgIHJlc3BvbnNlU3RyZWFtLm9uKCdkYXRhJywgZnVuY3Rpb24gaGFuZGxlU3RyZWFtRGF0YShjaHVuaykge1xuICAgICAgICAgIHJlc3BvbnNlQnVmZmVyLnB1c2goY2h1bmspO1xuICAgICAgICAgIHRvdGFsUmVzcG9uc2VCeXRlcyArPSBjaHVuay5sZW5ndGg7XG5cbiAgICAgICAgICAvLyBtYWtlIHN1cmUgdGhlIGNvbnRlbnQgbGVuZ3RoIGlzIG5vdCBvdmVyIHRoZSBtYXhDb250ZW50TGVuZ3RoIGlmIHNwZWNpZmllZFxuICAgICAgICAgIGlmIChjb25maWcubWF4Q29udGVudExlbmd0aCA+IC0xICYmIHRvdGFsUmVzcG9uc2VCeXRlcyA+IGNvbmZpZy5tYXhDb250ZW50TGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBzdHJlYW0uZGVzdHJveSgpIGVtaXQgYWJvcnRlZCBldmVudCBiZWZvcmUgY2FsbGluZyByZWplY3QoKSBvbiBOb2RlLmpzIHYxNlxuICAgICAgICAgICAgcmVqZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgcmVzcG9uc2VTdHJlYW0uZGVzdHJveSgpO1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdtYXhDb250ZW50TGVuZ3RoIHNpemUgb2YgJyArIGNvbmZpZy5tYXhDb250ZW50TGVuZ3RoICsgJyBleGNlZWRlZCcsXG4gICAgICAgICAgICAgIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVNQT05TRSwgY29uZmlnLCBsYXN0UmVxdWVzdCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmVzcG9uc2VTdHJlYW0ub24oJ2Fib3J0ZWQnLCBmdW5jdGlvbiBoYW5kbGVyU3RyZWFtQWJvcnRlZCgpIHtcbiAgICAgICAgICBpZiAocmVqZWN0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBlcnIgPSBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgICAgICdtYXhDb250ZW50TGVuZ3RoIHNpemUgb2YgJyArIGNvbmZpZy5tYXhDb250ZW50TGVuZ3RoICsgJyBleGNlZWRlZCcsXG4gICAgICAgICAgICBBeGlvc0Vycm9yLkVSUl9CQURfUkVTUE9OU0UsXG4gICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICBsYXN0UmVxdWVzdFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmVzcG9uc2VTdHJlYW0uZGVzdHJveShlcnIpO1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXNwb25zZVN0cmVhbS5vbignZXJyb3InLCBmdW5jdGlvbiBoYW5kbGVTdHJlYW1FcnJvcihlcnIpIHtcbiAgICAgICAgICBpZiAocmVxLmRlc3Ryb3llZCkgcmV0dXJuO1xuICAgICAgICAgIHJlamVjdChBeGlvc0Vycm9yLmZyb20oZXJyLCBudWxsLCBjb25maWcsIGxhc3RSZXF1ZXN0KSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJlc3BvbnNlU3RyZWFtLm9uKCdlbmQnLCBmdW5jdGlvbiBoYW5kbGVTdHJlYW1FbmQoKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCByZXNwb25zZURhdGEgPSByZXNwb25zZUJ1ZmZlci5sZW5ndGggPT09IDEgPyByZXNwb25zZUJ1ZmZlclswXSA6IEJ1ZmZlci5jb25jYXQocmVzcG9uc2VCdWZmZXIpO1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlVHlwZSAhPT0gJ2FycmF5YnVmZmVyJykge1xuICAgICAgICAgICAgICByZXNwb25zZURhdGEgPSByZXNwb25zZURhdGEudG9TdHJpbmcocmVzcG9uc2VFbmNvZGluZyk7XG4gICAgICAgICAgICAgIGlmICghcmVzcG9uc2VFbmNvZGluZyB8fCByZXNwb25zZUVuY29kaW5nID09PSAndXRmOCcpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZURhdGEgPSB1dGlscyQxLnN0cmlwQk9NKHJlc3BvbnNlRGF0YSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3BvbnNlLmRhdGEgPSByZXNwb25zZURhdGE7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KEF4aW9zRXJyb3IuZnJvbShlcnIsIG51bGwsIGNvbmZpZywgcmVzcG9uc2UucmVxdWVzdCwgcmVzcG9uc2UpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgcmVzcG9uc2UpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgZW1pdHRlci5vbmNlKCdhYm9ydCcsIGVyciA9PiB7XG4gICAgICAgIGlmICghcmVzcG9uc2VTdHJlYW0uZGVzdHJveWVkKSB7XG4gICAgICAgICAgcmVzcG9uc2VTdHJlYW0uZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgICAgICAgIHJlc3BvbnNlU3RyZWFtLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBlbWl0dGVyLm9uY2UoJ2Fib3J0JywgZXJyID0+IHtcbiAgICAgIHJlamVjdChlcnIpO1xuICAgICAgcmVxLmRlc3Ryb3koZXJyKTtcbiAgICB9KTtcblxuICAgIC8vIEhhbmRsZSBlcnJvcnNcbiAgICByZXEub24oJ2Vycm9yJywgZnVuY3Rpb24gaGFuZGxlUmVxdWVzdEVycm9yKGVycikge1xuICAgICAgLy8gQHRvZG8gcmVtb3ZlXG4gICAgICAvLyBpZiAocmVxLmFib3J0ZWQgJiYgZXJyLmNvZGUgIT09IEF4aW9zRXJyb3IuRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUykgcmV0dXJuO1xuICAgICAgcmVqZWN0KEF4aW9zRXJyb3IuZnJvbShlcnIsIG51bGwsIGNvbmZpZywgcmVxKSk7XG4gICAgfSk7XG5cbiAgICAvLyBzZXQgdGNwIGtlZXAgYWxpdmUgdG8gcHJldmVudCBkcm9wIGNvbm5lY3Rpb24gYnkgcGVlclxuICAgIHJlcS5vbignc29ja2V0JywgZnVuY3Rpb24gaGFuZGxlUmVxdWVzdFNvY2tldChzb2NrZXQpIHtcbiAgICAgIC8vIGRlZmF1bHQgaW50ZXJ2YWwgb2Ygc2VuZGluZyBhY2sgcGFja2V0IGlzIDEgbWludXRlXG4gICAgICBzb2NrZXQuc2V0S2VlcEFsaXZlKHRydWUsIDEwMDAgKiA2MCk7XG4gICAgfSk7XG5cbiAgICAvLyBIYW5kbGUgcmVxdWVzdCB0aW1lb3V0XG4gICAgaWYgKGNvbmZpZy50aW1lb3V0KSB7XG4gICAgICAvLyBUaGlzIGlzIGZvcmNpbmcgYSBpbnQgdGltZW91dCB0byBhdm9pZCBwcm9ibGVtcyBpZiB0aGUgYHJlcWAgaW50ZXJmYWNlIGRvZXNuJ3QgaGFuZGxlIG90aGVyIHR5cGVzLlxuICAgICAgY29uc3QgdGltZW91dCA9IHBhcnNlSW50KGNvbmZpZy50aW1lb3V0LCAxMCk7XG5cbiAgICAgIGlmIChOdW1iZXIuaXNOYU4odGltZW91dCkpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICAgICdlcnJvciB0cnlpbmcgdG8gcGFyc2UgYGNvbmZpZy50aW1lb3V0YCB0byBpbnQnLFxuICAgICAgICAgIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT05fVkFMVUUsXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIHJlcVxuICAgICAgICApKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFNvbWV0aW1lLCB0aGUgcmVzcG9uc2Ugd2lsbCBiZSB2ZXJ5IHNsb3csIGFuZCBkb2VzIG5vdCByZXNwb25kLCB0aGUgY29ubmVjdCBldmVudCB3aWxsIGJlIGJsb2NrIGJ5IGV2ZW50IGxvb3Agc3lzdGVtLlxuICAgICAgLy8gQW5kIHRpbWVyIGNhbGxiYWNrIHdpbGwgYmUgZmlyZWQsIGFuZCBhYm9ydCgpIHdpbGwgYmUgaW52b2tlZCBiZWZvcmUgY29ubmVjdGlvbiwgdGhlbiBnZXQgXCJzb2NrZXQgaGFuZyB1cFwiIGFuZCBjb2RlIEVDT05OUkVTRVQuXG4gICAgICAvLyBBdCB0aGlzIHRpbWUsIGlmIHdlIGhhdmUgYSBsYXJnZSBudW1iZXIgb2YgcmVxdWVzdCwgbm9kZWpzIHdpbGwgaGFuZyB1cCBzb21lIHNvY2tldCBvbiBiYWNrZ3JvdW5kLiBhbmQgdGhlIG51bWJlciB3aWxsIHVwIGFuZCB1cC5cbiAgICAgIC8vIEFuZCB0aGVuIHRoZXNlIHNvY2tldCB3aGljaCBiZSBoYW5nIHVwIHdpbGwgZGV2b3VyaW5nIENQVSBsaXR0bGUgYnkgbGl0dGxlLlxuICAgICAgLy8gQ2xpZW50UmVxdWVzdC5zZXRUaW1lb3V0IHdpbGwgYmUgZmlyZWQgb24gdGhlIHNwZWNpZnkgbWlsbGlzZWNvbmRzLCBhbmQgY2FuIG1ha2Ugc3VyZSB0aGF0IGFib3J0KCkgd2lsbCBiZSBmaXJlZCBhZnRlciBjb25uZWN0LlxuICAgICAgcmVxLnNldFRpbWVvdXQodGltZW91dCwgZnVuY3Rpb24gaGFuZGxlUmVxdWVzdFRpbWVvdXQoKSB7XG4gICAgICAgIGlmIChpc0RvbmUpIHJldHVybjtcbiAgICAgICAgbGV0IHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBjb25maWcudGltZW91dCA/ICd0aW1lb3V0IG9mICcgKyBjb25maWcudGltZW91dCArICdtcyBleGNlZWRlZCcgOiAndGltZW91dCBleGNlZWRlZCc7XG4gICAgICAgIGNvbnN0IHRyYW5zaXRpb25hbCA9IGNvbmZpZy50cmFuc2l0aW9uYWwgfHwgdHJhbnNpdGlvbmFsRGVmYXVsdHM7XG4gICAgICAgIGlmIChjb25maWcudGltZW91dEVycm9yTWVzc2FnZSkge1xuICAgICAgICAgIHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBjb25maWcudGltZW91dEVycm9yTWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoXG4gICAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSxcbiAgICAgICAgICB0cmFuc2l0aW9uYWwuY2xhcmlmeVRpbWVvdXRFcnJvciA/IEF4aW9zRXJyb3IuRVRJTUVET1VUIDogQXhpb3NFcnJvci5FQ09OTkFCT1JURUQsXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIHJlcVxuICAgICAgICApKTtcbiAgICAgICAgYWJvcnQoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuXG4gICAgLy8gU2VuZCB0aGUgcmVxdWVzdFxuICAgIGlmICh1dGlscyQxLmlzU3RyZWFtKGRhdGEpKSB7XG4gICAgICBsZXQgZW5kZWQgPSBmYWxzZTtcbiAgICAgIGxldCBlcnJvcmVkID0gZmFsc2U7XG5cbiAgICAgIGRhdGEub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgZW5kZWQgPSB0cnVlO1xuICAgICAgfSk7XG5cbiAgICAgIGRhdGEub25jZSgnZXJyb3InLCBlcnIgPT4ge1xuICAgICAgICBlcnJvcmVkID0gdHJ1ZTtcbiAgICAgICAgcmVxLmRlc3Ryb3koZXJyKTtcbiAgICAgIH0pO1xuXG4gICAgICBkYXRhLm9uKCdjbG9zZScsICgpID0+IHtcbiAgICAgICAgaWYgKCFlbmRlZCAmJiAhZXJyb3JlZCkge1xuICAgICAgICAgIGFib3J0KG5ldyBDYW5jZWxlZEVycm9yKCdSZXF1ZXN0IHN0cmVhbSBoYXMgYmVlbiBhYm9ydGVkJywgY29uZmlnLCByZXEpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGRhdGEucGlwZShyZXEpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXEuZW5kKGRhdGEpO1xuICAgIH1cbiAgfSk7XG59O1xuXG5jb25zdCBpc1VSTFNhbWVPcmlnaW4gPSBwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYgP1xuXG4vLyBTdGFuZGFyZCBicm93c2VyIGVudnMgaGF2ZSBmdWxsIHN1cHBvcnQgb2YgdGhlIEFQSXMgbmVlZGVkIHRvIHRlc3Rcbi8vIHdoZXRoZXIgdGhlIHJlcXVlc3QgVVJMIGlzIG9mIHRoZSBzYW1lIG9yaWdpbiBhcyBjdXJyZW50IGxvY2F0aW9uLlxuICAoZnVuY3Rpb24gc3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgIGNvbnN0IG1zaWUgPSAvKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuICAgIGNvbnN0IHVybFBhcnNpbmdOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIGxldCBvcmlnaW5VUkw7XG5cbiAgICAvKipcbiAgICAqIFBhcnNlIGEgVVJMIHRvIGRpc2NvdmVyIGl0cyBjb21wb25lbnRzXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHVybCBUaGUgVVJMIHRvIGJlIHBhcnNlZFxuICAgICogQHJldHVybnMge09iamVjdH1cbiAgICAqL1xuICAgIGZ1bmN0aW9uIHJlc29sdmVVUkwodXJsKSB7XG4gICAgICBsZXQgaHJlZiA9IHVybDtcblxuICAgICAgaWYgKG1zaWUpIHtcbiAgICAgICAgLy8gSUUgbmVlZHMgYXR0cmlidXRlIHNldCB0d2ljZSB0byBub3JtYWxpemUgcHJvcGVydGllc1xuICAgICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcbiAgICAgICAgaHJlZiA9IHVybFBhcnNpbmdOb2RlLmhyZWY7XG4gICAgICB9XG5cbiAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuXG4gICAgICAvLyB1cmxQYXJzaW5nTm9kZSBwcm92aWRlcyB0aGUgVXJsVXRpbHMgaW50ZXJmYWNlIC0gaHR0cDovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3VybHV0aWxzXG4gICAgICByZXR1cm4ge1xuICAgICAgICBocmVmOiB1cmxQYXJzaW5nTm9kZS5ocmVmLFxuICAgICAgICBwcm90b2NvbDogdXJsUGFyc2luZ05vZGUucHJvdG9jb2wgPyB1cmxQYXJzaW5nTm9kZS5wcm90b2NvbC5yZXBsYWNlKC86JC8sICcnKSA6ICcnLFxuICAgICAgICBob3N0OiB1cmxQYXJzaW5nTm9kZS5ob3N0LFxuICAgICAgICBzZWFyY2g6IHVybFBhcnNpbmdOb2RlLnNlYXJjaCA/IHVybFBhcnNpbmdOb2RlLnNlYXJjaC5yZXBsYWNlKC9eXFw/LywgJycpIDogJycsXG4gICAgICAgIGhhc2g6IHVybFBhcnNpbmdOb2RlLmhhc2ggPyB1cmxQYXJzaW5nTm9kZS5oYXNoLnJlcGxhY2UoL14jLywgJycpIDogJycsXG4gICAgICAgIGhvc3RuYW1lOiB1cmxQYXJzaW5nTm9kZS5ob3N0bmFtZSxcbiAgICAgICAgcG9ydDogdXJsUGFyc2luZ05vZGUucG9ydCxcbiAgICAgICAgcGF0aG5hbWU6ICh1cmxQYXJzaW5nTm9kZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJykgP1xuICAgICAgICAgIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lIDpcbiAgICAgICAgICAnLycgKyB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBvcmlnaW5VUkwgPSByZXNvbHZlVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcblxuICAgIC8qKlxuICAgICogRGV0ZXJtaW5lIGlmIGEgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4gYXMgdGhlIGN1cnJlbnQgbG9jYXRpb25cbiAgICAqXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gcmVxdWVzdFVSTCBUaGUgVVJMIHRvIHRlc3RcbiAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luLCBvdGhlcndpc2UgZmFsc2VcbiAgICAqL1xuICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4ocmVxdWVzdFVSTCkge1xuICAgICAgY29uc3QgcGFyc2VkID0gKHV0aWxzJDEuaXNTdHJpbmcocmVxdWVzdFVSTCkpID8gcmVzb2x2ZVVSTChyZXF1ZXN0VVJMKSA6IHJlcXVlc3RVUkw7XG4gICAgICByZXR1cm4gKHBhcnNlZC5wcm90b2NvbCA9PT0gb3JpZ2luVVJMLnByb3RvY29sICYmXG4gICAgICAgICAgcGFyc2VkLmhvc3QgPT09IG9yaWdpblVSTC5ob3N0KTtcbiAgICB9O1xuICB9KSgpIDpcblxuICAvLyBOb24gc3RhbmRhcmQgYnJvd3NlciBlbnZzICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICAoZnVuY3Rpb24gbm9uU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4oKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICB9KSgpO1xuXG5jb25zdCBjb29raWVzID0gcGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52ID9cblxuICAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgc3VwcG9ydCBkb2N1bWVudC5jb29raWVcbiAge1xuICAgIHdyaXRlKG5hbWUsIHZhbHVlLCBleHBpcmVzLCBwYXRoLCBkb21haW4sIHNlY3VyZSkge1xuICAgICAgY29uc3QgY29va2llID0gW25hbWUgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpXTtcblxuICAgICAgdXRpbHMkMS5pc051bWJlcihleHBpcmVzKSAmJiBjb29raWUucHVzaCgnZXhwaXJlcz0nICsgbmV3IERhdGUoZXhwaXJlcykudG9HTVRTdHJpbmcoKSk7XG5cbiAgICAgIHV0aWxzJDEuaXNTdHJpbmcocGF0aCkgJiYgY29va2llLnB1c2goJ3BhdGg9JyArIHBhdGgpO1xuXG4gICAgICB1dGlscyQxLmlzU3RyaW5nKGRvbWFpbikgJiYgY29va2llLnB1c2goJ2RvbWFpbj0nICsgZG9tYWluKTtcblxuICAgICAgc2VjdXJlID09PSB0cnVlICYmIGNvb2tpZS5wdXNoKCdzZWN1cmUnKTtcblxuICAgICAgZG9jdW1lbnQuY29va2llID0gY29va2llLmpvaW4oJzsgJyk7XG4gICAgfSxcblxuICAgIHJlYWQobmFtZSkge1xuICAgICAgY29uc3QgbWF0Y2ggPSBkb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgnKF58O1xcXFxzKikoJyArIG5hbWUgKyAnKT0oW147XSopJykpO1xuICAgICAgcmV0dXJuIChtYXRjaCA/IGRlY29kZVVSSUNvbXBvbmVudChtYXRjaFszXSkgOiBudWxsKTtcbiAgICB9LFxuXG4gICAgcmVtb3ZlKG5hbWUpIHtcbiAgICAgIHRoaXMud3JpdGUobmFtZSwgJycsIERhdGUubm93KCkgLSA4NjQwMDAwMCk7XG4gICAgfVxuICB9XG5cbiAgOlxuXG4gIC8vIE5vbi1zdGFuZGFyZCBicm93c2VyIGVudiAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAge1xuICAgIHdyaXRlKCkge30sXG4gICAgcmVhZCgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG4gICAgcmVtb3ZlKCkge31cbiAgfTtcblxuY29uc3QgaGVhZGVyc1RvT2JqZWN0ID0gKHRoaW5nKSA9PiB0aGluZyBpbnN0YW5jZW9mIEF4aW9zSGVhZGVycyQxID8geyAuLi50aGluZyB9IDogdGhpbmc7XG5cbi8qKlxuICogQ29uZmlnLXNwZWNpZmljIG1lcmdlLWZ1bmN0aW9uIHdoaWNoIGNyZWF0ZXMgYSBuZXcgY29uZmlnLW9iamVjdFxuICogYnkgbWVyZ2luZyB0d28gY29uZmlndXJhdGlvbiBvYmplY3RzIHRvZ2V0aGVyLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcxXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMlxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IE5ldyBvYmplY3QgcmVzdWx0aW5nIGZyb20gbWVyZ2luZyBjb25maWcyIHRvIGNvbmZpZzFcbiAqL1xuZnVuY3Rpb24gbWVyZ2VDb25maWcoY29uZmlnMSwgY29uZmlnMikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgY29uZmlnMiA9IGNvbmZpZzIgfHwge307XG4gIGNvbnN0IGNvbmZpZyA9IHt9O1xuXG4gIGZ1bmN0aW9uIGdldE1lcmdlZFZhbHVlKHRhcmdldCwgc291cmNlLCBjYXNlbGVzcykge1xuICAgIGlmICh1dGlscyQxLmlzUGxhaW5PYmplY3QodGFyZ2V0KSAmJiB1dGlscyQxLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzJDEubWVyZ2UuY2FsbCh7Y2FzZWxlc3N9LCB0YXJnZXQsIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscyQxLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzJDEubWVyZ2Uoe30sIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscyQxLmlzQXJyYXkoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHNvdXJjZS5zbGljZSgpO1xuICAgIH1cbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIG1lcmdlRGVlcFByb3BlcnRpZXMoYSwgYiwgY2FzZWxlc3MpIHtcbiAgICBpZiAoIXV0aWxzJDEuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZShhLCBiLCBjYXNlbGVzcyk7XG4gICAgfSBlbHNlIGlmICghdXRpbHMkMS5pc1VuZGVmaW5lZChhKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYSwgY2FzZWxlc3MpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiB2YWx1ZUZyb21Db25maWcyKGEsIGIpIHtcbiAgICBpZiAoIXV0aWxzJDEuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGIpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBkZWZhdWx0VG9Db25maWcyKGEsIGIpIHtcbiAgICBpZiAoIXV0aWxzJDEuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGIpO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzJDEuaXNVbmRlZmluZWQoYSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGEpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBtZXJnZURpcmVjdEtleXMoYSwgYiwgcHJvcCkge1xuICAgIGlmIChwcm9wIGluIGNvbmZpZzIpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZShhLCBiKTtcbiAgICB9IGVsc2UgaWYgKHByb3AgaW4gY29uZmlnMSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbWVyZ2VNYXAgPSB7XG4gICAgdXJsOiB2YWx1ZUZyb21Db25maWcyLFxuICAgIG1ldGhvZDogdmFsdWVGcm9tQ29uZmlnMixcbiAgICBkYXRhOiB2YWx1ZUZyb21Db25maWcyLFxuICAgIGJhc2VVUkw6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdHJhbnNmb3JtUmVxdWVzdDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0cmFuc2Zvcm1SZXNwb25zZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBwYXJhbXNTZXJpYWxpemVyOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRpbWVvdXQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdGltZW91dE1lc3NhZ2U6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgd2l0aENyZWRlbnRpYWxzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHdpdGhYU1JGVG9rZW46IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgYWRhcHRlcjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICByZXNwb25zZVR5cGU6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgeHNyZkNvb2tpZU5hbWU6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgeHNyZkhlYWRlck5hbWU6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgb25VcGxvYWRQcm9ncmVzczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBvbkRvd25sb2FkUHJvZ3Jlc3M6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgZGVjb21wcmVzczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBtYXhDb250ZW50TGVuZ3RoOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG1heEJvZHlMZW5ndGg6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgYmVmb3JlUmVkaXJlY3Q6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdHJhbnNwb3J0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGh0dHBBZ2VudDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBodHRwc0FnZW50OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGNhbmNlbFRva2VuOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHNvY2tldFBhdGg6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgcmVzcG9uc2VFbmNvZGluZzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB2YWxpZGF0ZVN0YXR1czogbWVyZ2VEaXJlY3RLZXlzLFxuICAgIGhlYWRlcnM6IChhLCBiKSA9PiBtZXJnZURlZXBQcm9wZXJ0aWVzKGhlYWRlcnNUb09iamVjdChhKSwgaGVhZGVyc1RvT2JqZWN0KGIpLCB0cnVlKVxuICB9O1xuXG4gIHV0aWxzJDEuZm9yRWFjaChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LCBjb25maWcxLCBjb25maWcyKSksIGZ1bmN0aW9uIGNvbXB1dGVDb25maWdWYWx1ZShwcm9wKSB7XG4gICAgY29uc3QgbWVyZ2UgPSBtZXJnZU1hcFtwcm9wXSB8fCBtZXJnZURlZXBQcm9wZXJ0aWVzO1xuICAgIGNvbnN0IGNvbmZpZ1ZhbHVlID0gbWVyZ2UoY29uZmlnMVtwcm9wXSwgY29uZmlnMltwcm9wXSwgcHJvcCk7XG4gICAgKHV0aWxzJDEuaXNVbmRlZmluZWQoY29uZmlnVmFsdWUpICYmIG1lcmdlICE9PSBtZXJnZURpcmVjdEtleXMpIHx8IChjb25maWdbcHJvcF0gPSBjb25maWdWYWx1ZSk7XG4gIH0pO1xuXG4gIHJldHVybiBjb25maWc7XG59XG5cbmNvbnN0IHJlc29sdmVDb25maWcgPSAoY29uZmlnKSA9PiB7XG4gIGNvbnN0IG5ld0NvbmZpZyA9IG1lcmdlQ29uZmlnKHt9LCBjb25maWcpO1xuXG4gIGxldCB7ZGF0YSwgd2l0aFhTUkZUb2tlbiwgeHNyZkhlYWRlck5hbWUsIHhzcmZDb29raWVOYW1lLCBoZWFkZXJzLCBhdXRofSA9IG5ld0NvbmZpZztcblxuICBuZXdDb25maWcuaGVhZGVycyA9IGhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5mcm9tKGhlYWRlcnMpO1xuXG4gIG5ld0NvbmZpZy51cmwgPSBidWlsZFVSTChidWlsZEZ1bGxQYXRoKG5ld0NvbmZpZy5iYXNlVVJMLCBuZXdDb25maWcudXJsKSwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpO1xuXG4gIC8vIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb25cbiAgaWYgKGF1dGgpIHtcbiAgICBoZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsICdCYXNpYyAnICtcbiAgICAgIGJ0b2EoKGF1dGgudXNlcm5hbWUgfHwgJycpICsgJzonICsgKGF1dGgucGFzc3dvcmQgPyB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoYXV0aC5wYXNzd29yZCkpIDogJycpKVxuICAgICk7XG4gIH1cblxuICBsZXQgY29udGVudFR5cGU7XG5cbiAgaWYgKHV0aWxzJDEuaXNGb3JtRGF0YShkYXRhKSkge1xuICAgIGlmIChwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYgfHwgcGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52KSB7XG4gICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKHVuZGVmaW5lZCk7IC8vIExldCB0aGUgYnJvd3NlciBzZXQgaXRcbiAgICB9IGVsc2UgaWYgKChjb250ZW50VHlwZSA9IGhlYWRlcnMuZ2V0Q29udGVudFR5cGUoKSkgIT09IGZhbHNlKSB7XG4gICAgICAvLyBmaXggc2VtaWNvbG9uIGR1cGxpY2F0aW9uIGlzc3VlIGZvciBSZWFjdE5hdGl2ZSBGb3JtRGF0YSBpbXBsZW1lbnRhdGlvblxuICAgICAgY29uc3QgW3R5cGUsIC4uLnRva2Vuc10gPSBjb250ZW50VHlwZSA/IGNvbnRlbnRUeXBlLnNwbGl0KCc7JykubWFwKHRva2VuID0+IHRva2VuLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pIDogW107XG4gICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKFt0eXBlIHx8ICdtdWx0aXBhcnQvZm9ybS1kYXRhJywgLi4udG9rZW5zXS5qb2luKCc7ICcpKTtcbiAgICB9XG4gIH1cblxuICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgLy8gVGhpcyBpcyBvbmx5IGRvbmUgaWYgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnQuXG4gIC8vIFNwZWNpZmljYWxseSBub3QgaWYgd2UncmUgaW4gYSB3ZWIgd29ya2VyLCBvciByZWFjdC1uYXRpdmUuXG5cbiAgaWYgKHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudikge1xuICAgIHdpdGhYU1JGVG9rZW4gJiYgdXRpbHMkMS5pc0Z1bmN0aW9uKHdpdGhYU1JGVG9rZW4pICYmICh3aXRoWFNSRlRva2VuID0gd2l0aFhTUkZUb2tlbihuZXdDb25maWcpKTtcblxuICAgIGlmICh3aXRoWFNSRlRva2VuIHx8ICh3aXRoWFNSRlRva2VuICE9PSBmYWxzZSAmJiBpc1VSTFNhbWVPcmlnaW4obmV3Q29uZmlnLnVybCkpKSB7XG4gICAgICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgICAgIGNvbnN0IHhzcmZWYWx1ZSA9IHhzcmZIZWFkZXJOYW1lICYmIHhzcmZDb29raWVOYW1lICYmIGNvb2tpZXMucmVhZCh4c3JmQ29va2llTmFtZSk7XG5cbiAgICAgIGlmICh4c3JmVmFsdWUpIHtcbiAgICAgICAgaGVhZGVycy5zZXQoeHNyZkhlYWRlck5hbWUsIHhzcmZWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld0NvbmZpZztcbn07XG5cbmNvbnN0IGlzWEhSQWRhcHRlclN1cHBvcnRlZCA9IHR5cGVvZiBYTUxIdHRwUmVxdWVzdCAhPT0gJ3VuZGVmaW5lZCc7XG5cbmNvbnN0IHhockFkYXB0ZXIgPSBpc1hIUkFkYXB0ZXJTdXBwb3J0ZWQgJiYgZnVuY3Rpb24gKGNvbmZpZykge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gZGlzcGF0Y2hYaHJSZXF1ZXN0KHJlc29sdmUsIHJlamVjdCkge1xuICAgIGNvbnN0IF9jb25maWcgPSByZXNvbHZlQ29uZmlnKGNvbmZpZyk7XG4gICAgbGV0IHJlcXVlc3REYXRhID0gX2NvbmZpZy5kYXRhO1xuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzID0gQXhpb3NIZWFkZXJzJDEuZnJvbShfY29uZmlnLmhlYWRlcnMpLm5vcm1hbGl6ZSgpO1xuICAgIGxldCB7cmVzcG9uc2VUeXBlLCBvblVwbG9hZFByb2dyZXNzLCBvbkRvd25sb2FkUHJvZ3Jlc3N9ID0gX2NvbmZpZztcbiAgICBsZXQgb25DYW5jZWxlZDtcbiAgICBsZXQgdXBsb2FkVGhyb3R0bGVkLCBkb3dubG9hZFRocm90dGxlZDtcbiAgICBsZXQgZmx1c2hVcGxvYWQsIGZsdXNoRG93bmxvYWQ7XG5cbiAgICBmdW5jdGlvbiBkb25lKCkge1xuICAgICAgZmx1c2hVcGxvYWQgJiYgZmx1c2hVcGxvYWQoKTsgLy8gZmx1c2ggZXZlbnRzXG4gICAgICBmbHVzaERvd25sb2FkICYmIGZsdXNoRG93bmxvYWQoKTsgLy8gZmx1c2ggZXZlbnRzXG5cbiAgICAgIF9jb25maWcuY2FuY2VsVG9rZW4gJiYgX2NvbmZpZy5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShvbkNhbmNlbGVkKTtcblxuICAgICAgX2NvbmZpZy5zaWduYWwgJiYgX2NvbmZpZy5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkNhbmNlbGVkKTtcbiAgICB9XG5cbiAgICBsZXQgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXG4gICAgcmVxdWVzdC5vcGVuKF9jb25maWcubWV0aG9kLnRvVXBwZXJDYXNlKCksIF9jb25maWcudXJsLCB0cnVlKTtcblxuICAgIC8vIFNldCB0aGUgcmVxdWVzdCB0aW1lb3V0IGluIE1TXG4gICAgcmVxdWVzdC50aW1lb3V0ID0gX2NvbmZpZy50aW1lb3V0O1xuXG4gICAgZnVuY3Rpb24gb25sb2FkZW5kKCkge1xuICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIFByZXBhcmUgdGhlIHJlc3BvbnNlXG4gICAgICBjb25zdCByZXNwb25zZUhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5mcm9tKFxuICAgICAgICAnZ2V0QWxsUmVzcG9uc2VIZWFkZXJzJyBpbiByZXF1ZXN0ICYmIHJlcXVlc3QuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKClcbiAgICAgICk7XG4gICAgICBjb25zdCByZXNwb25zZURhdGEgPSAhcmVzcG9uc2VUeXBlIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ3RleHQnIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nID9cbiAgICAgICAgcmVxdWVzdC5yZXNwb25zZVRleHQgOiByZXF1ZXN0LnJlc3BvbnNlO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSB7XG4gICAgICAgIGRhdGE6IHJlc3BvbnNlRGF0YSxcbiAgICAgICAgc3RhdHVzOiByZXF1ZXN0LnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogcmVxdWVzdC5zdGF0dXNUZXh0LFxuICAgICAgICBoZWFkZXJzOiByZXNwb25zZUhlYWRlcnMsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdFxuICAgICAgfTtcblxuICAgICAgc2V0dGxlKGZ1bmN0aW9uIF9yZXNvbHZlKHZhbHVlKSB7XG4gICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9LCBmdW5jdGlvbiBfcmVqZWN0KGVycikge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSwgcmVzcG9uc2UpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoJ29ubG9hZGVuZCcgaW4gcmVxdWVzdCkge1xuICAgICAgLy8gVXNlIG9ubG9hZGVuZCBpZiBhdmFpbGFibGVcbiAgICAgIHJlcXVlc3Qub25sb2FkZW5kID0gb25sb2FkZW5kO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBMaXN0ZW4gZm9yIHJlYWR5IHN0YXRlIHRvIGVtdWxhdGUgb25sb2FkZW5kXG4gICAgICByZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uIGhhbmRsZUxvYWQoKSB7XG4gICAgICAgIGlmICghcmVxdWVzdCB8fCByZXF1ZXN0LnJlYWR5U3RhdGUgIT09IDQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgcmVxdWVzdCBlcnJvcmVkIG91dCBhbmQgd2UgZGlkbid0IGdldCBhIHJlc3BvbnNlLCB0aGlzIHdpbGwgYmVcbiAgICAgICAgLy8gaGFuZGxlZCBieSBvbmVycm9yIGluc3RlYWRcbiAgICAgICAgLy8gV2l0aCBvbmUgZXhjZXB0aW9uOiByZXF1ZXN0IHRoYXQgdXNpbmcgZmlsZTogcHJvdG9jb2wsIG1vc3QgYnJvd3NlcnNcbiAgICAgICAgLy8gd2lsbCByZXR1cm4gc3RhdHVzIGFzIDAgZXZlbiB0aG91Z2ggaXQncyBhIHN1Y2Nlc3NmdWwgcmVxdWVzdFxuICAgICAgICBpZiAocmVxdWVzdC5zdGF0dXMgPT09IDAgJiYgIShyZXF1ZXN0LnJlc3BvbnNlVVJMICYmIHJlcXVlc3QucmVzcG9uc2VVUkwuaW5kZXhPZignZmlsZTonKSA9PT0gMCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVhZHlzdGF0ZSBoYW5kbGVyIGlzIGNhbGxpbmcgYmVmb3JlIG9uZXJyb3Igb3Igb250aW1lb3V0IGhhbmRsZXJzLFxuICAgICAgICAvLyBzbyB3ZSBzaG91bGQgY2FsbCBvbmxvYWRlbmQgb24gdGhlIG5leHQgJ3RpY2snXG4gICAgICAgIHNldFRpbWVvdXQob25sb2FkZW5kKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGJyb3dzZXIgcmVxdWVzdCBjYW5jZWxsYXRpb24gKGFzIG9wcG9zZWQgdG8gYSBtYW51YWwgY2FuY2VsbGF0aW9uKVxuICAgIHJlcXVlc3Qub25hYm9ydCA9IGZ1bmN0aW9uIGhhbmRsZUFib3J0KCkge1xuICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdSZXF1ZXN0IGFib3J0ZWQnLCBBeGlvc0Vycm9yLkVDT05OQUJPUlRFRCwgY29uZmlnLCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgbG93IGxldmVsIG5ldHdvcmsgZXJyb3JzXG4gICAgcmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24gaGFuZGxlRXJyb3IoKSB7XG4gICAgICAvLyBSZWFsIGVycm9ycyBhcmUgaGlkZGVuIGZyb20gdXMgYnkgdGhlIGJyb3dzZXJcbiAgICAgIC8vIG9uZXJyb3Igc2hvdWxkIG9ubHkgZmlyZSBpZiBpdCdzIGEgbmV0d29yayBlcnJvclxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdOZXR3b3JrIEVycm9yJywgQXhpb3NFcnJvci5FUlJfTkVUV09SSywgY29uZmlnLCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgdGltZW91dFxuICAgIHJlcXVlc3Qub250aW1lb3V0ID0gZnVuY3Rpb24gaGFuZGxlVGltZW91dCgpIHtcbiAgICAgIGxldCB0aW1lb3V0RXJyb3JNZXNzYWdlID0gX2NvbmZpZy50aW1lb3V0ID8gJ3RpbWVvdXQgb2YgJyArIF9jb25maWcudGltZW91dCArICdtcyBleGNlZWRlZCcgOiAndGltZW91dCBleGNlZWRlZCc7XG4gICAgICBjb25zdCB0cmFuc2l0aW9uYWwgPSBfY29uZmlnLnRyYW5zaXRpb25hbCB8fCB0cmFuc2l0aW9uYWxEZWZhdWx0cztcbiAgICAgIGlmIChfY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSA9IF9jb25maWcudGltZW91dEVycm9yTWVzc2FnZTtcbiAgICAgIH1cbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSxcbiAgICAgICAgdHJhbnNpdGlvbmFsLmNsYXJpZnlUaW1lb3V0RXJyb3IgPyBBeGlvc0Vycm9yLkVUSU1FRE9VVCA6IEF4aW9zRXJyb3IuRUNPTk5BQk9SVEVELFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIFJlbW92ZSBDb250ZW50LVR5cGUgaWYgZGF0YSBpcyB1bmRlZmluZWRcbiAgICByZXF1ZXN0RGF0YSA9PT0gdW5kZWZpbmVkICYmIHJlcXVlc3RIZWFkZXJzLnNldENvbnRlbnRUeXBlKG51bGwpO1xuXG4gICAgLy8gQWRkIGhlYWRlcnMgdG8gdGhlIHJlcXVlc3RcbiAgICBpZiAoJ3NldFJlcXVlc3RIZWFkZXInIGluIHJlcXVlc3QpIHtcbiAgICAgIHV0aWxzJDEuZm9yRWFjaChyZXF1ZXN0SGVhZGVycy50b0pTT04oKSwgZnVuY3Rpb24gc2V0UmVxdWVzdEhlYWRlcih2YWwsIGtleSkge1xuICAgICAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWwpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIHdpdGhDcmVkZW50aWFscyB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmICghdXRpbHMkMS5pc1VuZGVmaW5lZChfY29uZmlnLndpdGhDcmVkZW50aWFscykpIHtcbiAgICAgIHJlcXVlc3Qud2l0aENyZWRlbnRpYWxzID0gISFfY29uZmlnLndpdGhDcmVkZW50aWFscztcbiAgICB9XG5cbiAgICAvLyBBZGQgcmVzcG9uc2VUeXBlIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKHJlc3BvbnNlVHlwZSAmJiByZXNwb25zZVR5cGUgIT09ICdqc29uJykge1xuICAgICAgcmVxdWVzdC5yZXNwb25zZVR5cGUgPSBfY29uZmlnLnJlc3BvbnNlVHlwZTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgcHJvZ3Jlc3MgaWYgbmVlZGVkXG4gICAgaWYgKG9uRG93bmxvYWRQcm9ncmVzcykge1xuICAgICAgKFtkb3dubG9hZFRocm90dGxlZCwgZmx1c2hEb3dubG9hZF0gPSBwcm9ncmVzc0V2ZW50UmVkdWNlcihvbkRvd25sb2FkUHJvZ3Jlc3MsIHRydWUpKTtcbiAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBkb3dubG9hZFRocm90dGxlZCk7XG4gICAgfVxuXG4gICAgLy8gTm90IGFsbCBicm93c2VycyBzdXBwb3J0IHVwbG9hZCBldmVudHNcbiAgICBpZiAob25VcGxvYWRQcm9ncmVzcyAmJiByZXF1ZXN0LnVwbG9hZCkge1xuICAgICAgKFt1cGxvYWRUaHJvdHRsZWQsIGZsdXNoVXBsb2FkXSA9IHByb2dyZXNzRXZlbnRSZWR1Y2VyKG9uVXBsb2FkUHJvZ3Jlc3MpKTtcblxuICAgICAgcmVxdWVzdC51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB1cGxvYWRUaHJvdHRsZWQpO1xuXG4gICAgICByZXF1ZXN0LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCdsb2FkZW5kJywgZmx1c2hVcGxvYWQpO1xuICAgIH1cblxuICAgIGlmIChfY29uZmlnLmNhbmNlbFRva2VuIHx8IF9jb25maWcuc2lnbmFsKSB7XG4gICAgICAvLyBIYW5kbGUgY2FuY2VsbGF0aW9uXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgICAgb25DYW5jZWxlZCA9IGNhbmNlbCA9PiB7XG4gICAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoIWNhbmNlbCB8fCBjYW5jZWwudHlwZSA/IG5ldyBDYW5jZWxlZEVycm9yKG51bGwsIGNvbmZpZywgcmVxdWVzdCkgOiBjYW5jZWwpO1xuICAgICAgICByZXF1ZXN0LmFib3J0KCk7XG4gICAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgICAgfTtcblxuICAgICAgX2NvbmZpZy5jYW5jZWxUb2tlbiAmJiBfY29uZmlnLmNhbmNlbFRva2VuLnN1YnNjcmliZShvbkNhbmNlbGVkKTtcbiAgICAgIGlmIChfY29uZmlnLnNpZ25hbCkge1xuICAgICAgICBfY29uZmlnLnNpZ25hbC5hYm9ydGVkID8gb25DYW5jZWxlZCgpIDogX2NvbmZpZy5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkNhbmNlbGVkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwcm90b2NvbCA9IHBhcnNlUHJvdG9jb2woX2NvbmZpZy51cmwpO1xuXG4gICAgaWYgKHByb3RvY29sICYmIHBsYXRmb3JtLnByb3RvY29scy5pbmRleE9mKHByb3RvY29sKSA9PT0gLTEpIHtcbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignVW5zdXBwb3J0ZWQgcHJvdG9jb2wgJyArIHByb3RvY29sICsgJzonLCBBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCwgY29uZmlnKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG5cbiAgICAvLyBTZW5kIHRoZSByZXF1ZXN0XG4gICAgcmVxdWVzdC5zZW5kKHJlcXVlc3REYXRhIHx8IG51bGwpO1xuICB9KTtcbn07XG5cbmNvbnN0IGNvbXBvc2VTaWduYWxzID0gKHNpZ25hbHMsIHRpbWVvdXQpID0+IHtcbiAgbGV0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgbGV0IGFib3J0ZWQ7XG5cbiAgY29uc3Qgb25hYm9ydCA9IGZ1bmN0aW9uIChjYW5jZWwpIHtcbiAgICBpZiAoIWFib3J0ZWQpIHtcbiAgICAgIGFib3J0ZWQgPSB0cnVlO1xuICAgICAgdW5zdWJzY3JpYmUoKTtcbiAgICAgIGNvbnN0IGVyciA9IGNhbmNlbCBpbnN0YW5jZW9mIEVycm9yID8gY2FuY2VsIDogdGhpcy5yZWFzb247XG4gICAgICBjb250cm9sbGVyLmFib3J0KGVyciBpbnN0YW5jZW9mIEF4aW9zRXJyb3IgPyBlcnIgOiBuZXcgQ2FuY2VsZWRFcnJvcihlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogZXJyKSk7XG4gICAgfVxuICB9O1xuXG4gIGxldCB0aW1lciA9IHRpbWVvdXQgJiYgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgb25hYm9ydChuZXcgQXhpb3NFcnJvcihgdGltZW91dCAke3RpbWVvdXR9IG9mIG1zIGV4Y2VlZGVkYCwgQXhpb3NFcnJvci5FVElNRURPVVQpKTtcbiAgfSwgdGltZW91dCk7XG5cbiAgY29uc3QgdW5zdWJzY3JpYmUgPSAoKSA9PiB7XG4gICAgaWYgKHNpZ25hbHMpIHtcbiAgICAgIHRpbWVyICYmIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICB0aW1lciA9IG51bGw7XG4gICAgICBzaWduYWxzLmZvckVhY2goc2lnbmFsID0+IHtcbiAgICAgICAgc2lnbmFsICYmXG4gICAgICAgIChzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lciA/IHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uYWJvcnQpIDogc2lnbmFsLnVuc3Vic2NyaWJlKG9uYWJvcnQpKTtcbiAgICAgIH0pO1xuICAgICAgc2lnbmFscyA9IG51bGw7XG4gICAgfVxuICB9O1xuXG4gIHNpZ25hbHMuZm9yRWFjaCgoc2lnbmFsKSA9PiBzaWduYWwgJiYgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIgJiYgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25hYm9ydCkpO1xuXG4gIGNvbnN0IHtzaWduYWx9ID0gY29udHJvbGxlcjtcblxuICBzaWduYWwudW5zdWJzY3JpYmUgPSB1bnN1YnNjcmliZTtcblxuICByZXR1cm4gW3NpZ25hbCwgKCkgPT4ge1xuICAgIHRpbWVyICYmIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgdGltZXIgPSBudWxsO1xuICB9XTtcbn07XG5cbmNvbnN0IGNvbXBvc2VTaWduYWxzJDEgPSBjb21wb3NlU2lnbmFscztcblxuY29uc3Qgc3RyZWFtQ2h1bmsgPSBmdW5jdGlvbiogKGNodW5rLCBjaHVua1NpemUpIHtcbiAgbGV0IGxlbiA9IGNodW5rLmJ5dGVMZW5ndGg7XG5cbiAgaWYgKCFjaHVua1NpemUgfHwgbGVuIDwgY2h1bmtTaXplKSB7XG4gICAgeWllbGQgY2h1bms7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IHBvcyA9IDA7XG4gIGxldCBlbmQ7XG5cbiAgd2hpbGUgKHBvcyA8IGxlbikge1xuICAgIGVuZCA9IHBvcyArIGNodW5rU2l6ZTtcbiAgICB5aWVsZCBjaHVuay5zbGljZShwb3MsIGVuZCk7XG4gICAgcG9zID0gZW5kO1xuICB9XG59O1xuXG5jb25zdCByZWFkQnl0ZXMgPSBhc3luYyBmdW5jdGlvbiogKGl0ZXJhYmxlLCBjaHVua1NpemUsIGVuY29kZSkge1xuICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGl0ZXJhYmxlKSB7XG4gICAgeWllbGQqIHN0cmVhbUNodW5rKEFycmF5QnVmZmVyLmlzVmlldyhjaHVuaykgPyBjaHVuayA6IChhd2FpdCBlbmNvZGUoU3RyaW5nKGNodW5rKSkpLCBjaHVua1NpemUpO1xuICB9XG59O1xuXG5jb25zdCB0cmFja1N0cmVhbSA9IChzdHJlYW0sIGNodW5rU2l6ZSwgb25Qcm9ncmVzcywgb25GaW5pc2gsIGVuY29kZSkgPT4ge1xuICBjb25zdCBpdGVyYXRvciA9IHJlYWRCeXRlcyhzdHJlYW0sIGNodW5rU2l6ZSwgZW5jb2RlKTtcblxuICBsZXQgYnl0ZXMgPSAwO1xuICBsZXQgZG9uZTtcbiAgbGV0IF9vbkZpbmlzaCA9IChlKSA9PiB7XG4gICAgaWYgKCFkb25lKSB7XG4gICAgICBkb25lID0gdHJ1ZTtcbiAgICAgIG9uRmluaXNoICYmIG9uRmluaXNoKGUpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHtcbiAgICBhc3luYyBwdWxsKGNvbnRyb2xsZXIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHtkb25lLCB2YWx1ZX0gPSBhd2FpdCBpdGVyYXRvci5uZXh0KCk7XG5cbiAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgIF9vbkZpbmlzaCgpO1xuICAgICAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbGVuID0gdmFsdWUuYnl0ZUxlbmd0aDtcbiAgICAgICAgaWYgKG9uUHJvZ3Jlc3MpIHtcbiAgICAgICAgICBsZXQgbG9hZGVkQnl0ZXMgPSBieXRlcyArPSBsZW47XG4gICAgICAgICAgb25Qcm9ncmVzcyhsb2FkZWRCeXRlcyk7XG4gICAgICAgIH1cbiAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KHZhbHVlKSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgX29uRmluaXNoKGVycik7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9LFxuICAgIGNhbmNlbChyZWFzb24pIHtcbiAgICAgIF9vbkZpbmlzaChyZWFzb24pO1xuICAgICAgcmV0dXJuIGl0ZXJhdG9yLnJldHVybigpO1xuICAgIH1cbiAgfSwge1xuICAgIGhpZ2hXYXRlck1hcms6IDJcbiAgfSlcbn07XG5cbmNvbnN0IGlzRmV0Y2hTdXBwb3J0ZWQgPSB0eXBlb2YgZmV0Y2ggPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFJlcXVlc3QgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFJlc3BvbnNlID09PSAnZnVuY3Rpb24nO1xuY29uc3QgaXNSZWFkYWJsZVN0cmVhbVN1cHBvcnRlZCA9IGlzRmV0Y2hTdXBwb3J0ZWQgJiYgdHlwZW9mIFJlYWRhYmxlU3RyZWFtID09PSAnZnVuY3Rpb24nO1xuXG4vLyB1c2VkIG9ubHkgaW5zaWRlIHRoZSBmZXRjaCBhZGFwdGVyXG5jb25zdCBlbmNvZGVUZXh0ID0gaXNGZXRjaFN1cHBvcnRlZCAmJiAodHlwZW9mIFRleHRFbmNvZGVyID09PSAnZnVuY3Rpb24nID9cbiAgICAoKGVuY29kZXIpID0+IChzdHIpID0+IGVuY29kZXIuZW5jb2RlKHN0cikpKG5ldyBUZXh0RW5jb2RlcigpKSA6XG4gICAgYXN5bmMgKHN0cikgPT4gbmV3IFVpbnQ4QXJyYXkoYXdhaXQgbmV3IFJlc3BvbnNlKHN0cikuYXJyYXlCdWZmZXIoKSlcbik7XG5cbmNvbnN0IHRlc3QgPSAoZm4sIC4uLmFyZ3MpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFmbiguLi5hcmdzKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59O1xuXG5jb25zdCBzdXBwb3J0c1JlcXVlc3RTdHJlYW0gPSBpc1JlYWRhYmxlU3RyZWFtU3VwcG9ydGVkICYmIHRlc3QoKCkgPT4ge1xuICBsZXQgZHVwbGV4QWNjZXNzZWQgPSBmYWxzZTtcblxuICBjb25zdCBoYXNDb250ZW50VHlwZSA9IG5ldyBSZXF1ZXN0KHBsYXRmb3JtLm9yaWdpbiwge1xuICAgIGJvZHk6IG5ldyBSZWFkYWJsZVN0cmVhbSgpLFxuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIGdldCBkdXBsZXgoKSB7XG4gICAgICBkdXBsZXhBY2Nlc3NlZCA9IHRydWU7XG4gICAgICByZXR1cm4gJ2hhbGYnO1xuICAgIH0sXG4gIH0pLmhlYWRlcnMuaGFzKCdDb250ZW50LVR5cGUnKTtcblxuICByZXR1cm4gZHVwbGV4QWNjZXNzZWQgJiYgIWhhc0NvbnRlbnRUeXBlO1xufSk7XG5cbmNvbnN0IERFRkFVTFRfQ0hVTktfU0laRSA9IDY0ICogMTAyNDtcblxuY29uc3Qgc3VwcG9ydHNSZXNwb25zZVN0cmVhbSA9IGlzUmVhZGFibGVTdHJlYW1TdXBwb3J0ZWQgJiZcbiAgdGVzdCgoKSA9PiB1dGlscyQxLmlzUmVhZGFibGVTdHJlYW0obmV3IFJlc3BvbnNlKCcnKS5ib2R5KSk7XG5cblxuY29uc3QgcmVzb2x2ZXJzID0ge1xuICBzdHJlYW06IHN1cHBvcnRzUmVzcG9uc2VTdHJlYW0gJiYgKChyZXMpID0+IHJlcy5ib2R5KVxufTtcblxuaXNGZXRjaFN1cHBvcnRlZCAmJiAoKChyZXMpID0+IHtcbiAgWyd0ZXh0JywgJ2FycmF5QnVmZmVyJywgJ2Jsb2InLCAnZm9ybURhdGEnLCAnc3RyZWFtJ10uZm9yRWFjaCh0eXBlID0+IHtcbiAgICAhcmVzb2x2ZXJzW3R5cGVdICYmIChyZXNvbHZlcnNbdHlwZV0gPSB1dGlscyQxLmlzRnVuY3Rpb24ocmVzW3R5cGVdKSA/IChyZXMpID0+IHJlc1t0eXBlXSgpIDpcbiAgICAgIChfLCBjb25maWcpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoYFJlc3BvbnNlIHR5cGUgJyR7dHlwZX0nIGlzIG5vdCBzdXBwb3J0ZWRgLCBBeGlvc0Vycm9yLkVSUl9OT1RfU1VQUE9SVCwgY29uZmlnKTtcbiAgICAgIH0pO1xuICB9KTtcbn0pKG5ldyBSZXNwb25zZSkpO1xuXG5jb25zdCBnZXRCb2R5TGVuZ3RoID0gYXN5bmMgKGJvZHkpID0+IHtcbiAgaWYgKGJvZHkgPT0gbnVsbCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgaWYodXRpbHMkMS5pc0Jsb2IoYm9keSkpIHtcbiAgICByZXR1cm4gYm9keS5zaXplO1xuICB9XG5cbiAgaWYodXRpbHMkMS5pc1NwZWNDb21wbGlhbnRGb3JtKGJvZHkpKSB7XG4gICAgcmV0dXJuIChhd2FpdCBuZXcgUmVxdWVzdChib2R5KS5hcnJheUJ1ZmZlcigpKS5ieXRlTGVuZ3RoO1xuICB9XG5cbiAgaWYodXRpbHMkMS5pc0FycmF5QnVmZmVyVmlldyhib2R5KSB8fCB1dGlscyQxLmlzQXJyYXlCdWZmZXIoYm9keSkpIHtcbiAgICByZXR1cm4gYm9keS5ieXRlTGVuZ3RoO1xuICB9XG5cbiAgaWYodXRpbHMkMS5pc1VSTFNlYXJjaFBhcmFtcyhib2R5KSkge1xuICAgIGJvZHkgPSBib2R5ICsgJyc7XG4gIH1cblxuICBpZih1dGlscyQxLmlzU3RyaW5nKGJvZHkpKSB7XG4gICAgcmV0dXJuIChhd2FpdCBlbmNvZGVUZXh0KGJvZHkpKS5ieXRlTGVuZ3RoO1xuICB9XG59O1xuXG5jb25zdCByZXNvbHZlQm9keUxlbmd0aCA9IGFzeW5jIChoZWFkZXJzLCBib2R5KSA9PiB7XG4gIGNvbnN0IGxlbmd0aCA9IHV0aWxzJDEudG9GaW5pdGVOdW1iZXIoaGVhZGVycy5nZXRDb250ZW50TGVuZ3RoKCkpO1xuXG4gIHJldHVybiBsZW5ndGggPT0gbnVsbCA/IGdldEJvZHlMZW5ndGgoYm9keSkgOiBsZW5ndGg7XG59O1xuXG5jb25zdCBmZXRjaEFkYXB0ZXIgPSBpc0ZldGNoU3VwcG9ydGVkICYmIChhc3luYyAoY29uZmlnKSA9PiB7XG4gIGxldCB7XG4gICAgdXJsLFxuICAgIG1ldGhvZCxcbiAgICBkYXRhLFxuICAgIHNpZ25hbCxcbiAgICBjYW5jZWxUb2tlbixcbiAgICB0aW1lb3V0LFxuICAgIG9uRG93bmxvYWRQcm9ncmVzcyxcbiAgICBvblVwbG9hZFByb2dyZXNzLFxuICAgIHJlc3BvbnNlVHlwZSxcbiAgICBoZWFkZXJzLFxuICAgIHdpdGhDcmVkZW50aWFscyA9ICdzYW1lLW9yaWdpbicsXG4gICAgZmV0Y2hPcHRpb25zXG4gIH0gPSByZXNvbHZlQ29uZmlnKGNvbmZpZyk7XG5cbiAgcmVzcG9uc2VUeXBlID0gcmVzcG9uc2VUeXBlID8gKHJlc3BvbnNlVHlwZSArICcnKS50b0xvd2VyQ2FzZSgpIDogJ3RleHQnO1xuXG4gIGxldCBbY29tcG9zZWRTaWduYWwsIHN0b3BUaW1lb3V0XSA9IChzaWduYWwgfHwgY2FuY2VsVG9rZW4gfHwgdGltZW91dCkgP1xuICAgIGNvbXBvc2VTaWduYWxzJDEoW3NpZ25hbCwgY2FuY2VsVG9rZW5dLCB0aW1lb3V0KSA6IFtdO1xuXG4gIGxldCBmaW5pc2hlZCwgcmVxdWVzdDtcblxuICBjb25zdCBvbkZpbmlzaCA9ICgpID0+IHtcbiAgICAhZmluaXNoZWQgJiYgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb21wb3NlZFNpZ25hbCAmJiBjb21wb3NlZFNpZ25hbC51bnN1YnNjcmliZSgpO1xuICAgIH0pO1xuXG4gICAgZmluaXNoZWQgPSB0cnVlO1xuICB9O1xuXG4gIGxldCByZXF1ZXN0Q29udGVudExlbmd0aDtcblxuICB0cnkge1xuICAgIGlmIChcbiAgICAgIG9uVXBsb2FkUHJvZ3Jlc3MgJiYgc3VwcG9ydHNSZXF1ZXN0U3RyZWFtICYmIG1ldGhvZCAhPT0gJ2dldCcgJiYgbWV0aG9kICE9PSAnaGVhZCcgJiZcbiAgICAgIChyZXF1ZXN0Q29udGVudExlbmd0aCA9IGF3YWl0IHJlc29sdmVCb2R5TGVuZ3RoKGhlYWRlcnMsIGRhdGEpKSAhPT0gMFxuICAgICkge1xuICAgICAgbGV0IF9yZXF1ZXN0ID0gbmV3IFJlcXVlc3QodXJsLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBib2R5OiBkYXRhLFxuICAgICAgICBkdXBsZXg6IFwiaGFsZlwiXG4gICAgICB9KTtcblxuICAgICAgbGV0IGNvbnRlbnRUeXBlSGVhZGVyO1xuXG4gICAgICBpZiAodXRpbHMkMS5pc0Zvcm1EYXRhKGRhdGEpICYmIChjb250ZW50VHlwZUhlYWRlciA9IF9yZXF1ZXN0LmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKSkpIHtcbiAgICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZShjb250ZW50VHlwZUhlYWRlcik7XG4gICAgICB9XG5cbiAgICAgIGlmIChfcmVxdWVzdC5ib2R5KSB7XG4gICAgICAgIGNvbnN0IFtvblByb2dyZXNzLCBmbHVzaF0gPSBwcm9ncmVzc0V2ZW50RGVjb3JhdG9yKFxuICAgICAgICAgIHJlcXVlc3RDb250ZW50TGVuZ3RoLFxuICAgICAgICAgIHByb2dyZXNzRXZlbnRSZWR1Y2VyKGFzeW5jRGVjb3JhdG9yKG9uVXBsb2FkUHJvZ3Jlc3MpKVxuICAgICAgICApO1xuXG4gICAgICAgIGRhdGEgPSB0cmFja1N0cmVhbShfcmVxdWVzdC5ib2R5LCBERUZBVUxUX0NIVU5LX1NJWkUsIG9uUHJvZ3Jlc3MsIGZsdXNoLCBlbmNvZGVUZXh0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXV0aWxzJDEuaXNTdHJpbmcod2l0aENyZWRlbnRpYWxzKSkge1xuICAgICAgd2l0aENyZWRlbnRpYWxzID0gd2l0aENyZWRlbnRpYWxzID8gJ2luY2x1ZGUnIDogJ29taXQnO1xuICAgIH1cblxuICAgIHJlcXVlc3QgPSBuZXcgUmVxdWVzdCh1cmwsIHtcbiAgICAgIC4uLmZldGNoT3B0aW9ucyxcbiAgICAgIHNpZ25hbDogY29tcG9zZWRTaWduYWwsXG4gICAgICBtZXRob2Q6IG1ldGhvZC50b1VwcGVyQ2FzZSgpLFxuICAgICAgaGVhZGVyczogaGVhZGVycy5ub3JtYWxpemUoKS50b0pTT04oKSxcbiAgICAgIGJvZHk6IGRhdGEsXG4gICAgICBkdXBsZXg6IFwiaGFsZlwiLFxuICAgICAgY3JlZGVudGlhbHM6IHdpdGhDcmVkZW50aWFsc1xuICAgIH0pO1xuXG4gICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2gocmVxdWVzdCk7XG5cbiAgICBjb25zdCBpc1N0cmVhbVJlc3BvbnNlID0gc3VwcG9ydHNSZXNwb25zZVN0cmVhbSAmJiAocmVzcG9uc2VUeXBlID09PSAnc3RyZWFtJyB8fCByZXNwb25zZVR5cGUgPT09ICdyZXNwb25zZScpO1xuXG4gICAgaWYgKHN1cHBvcnRzUmVzcG9uc2VTdHJlYW0gJiYgKG9uRG93bmxvYWRQcm9ncmVzcyB8fCBpc1N0cmVhbVJlc3BvbnNlKSkge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHt9O1xuXG4gICAgICBbJ3N0YXR1cycsICdzdGF0dXNUZXh0JywgJ2hlYWRlcnMnXS5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgICBvcHRpb25zW3Byb3BdID0gcmVzcG9uc2VbcHJvcF07XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmVzcG9uc2VDb250ZW50TGVuZ3RoID0gdXRpbHMkMS50b0Zpbml0ZU51bWJlcihyZXNwb25zZS5oZWFkZXJzLmdldCgnY29udGVudC1sZW5ndGgnKSk7XG5cbiAgICAgIGNvbnN0IFtvblByb2dyZXNzLCBmbHVzaF0gPSBvbkRvd25sb2FkUHJvZ3Jlc3MgJiYgcHJvZ3Jlc3NFdmVudERlY29yYXRvcihcbiAgICAgICAgcmVzcG9uc2VDb250ZW50TGVuZ3RoLFxuICAgICAgICBwcm9ncmVzc0V2ZW50UmVkdWNlcihhc3luY0RlY29yYXRvcihvbkRvd25sb2FkUHJvZ3Jlc3MpLCB0cnVlKVxuICAgICAgKSB8fCBbXTtcblxuICAgICAgcmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UoXG4gICAgICAgIHRyYWNrU3RyZWFtKHJlc3BvbnNlLmJvZHksIERFRkFVTFRfQ0hVTktfU0laRSwgb25Qcm9ncmVzcywgKCkgPT4ge1xuICAgICAgICAgIGZsdXNoICYmIGZsdXNoKCk7XG4gICAgICAgICAgaXNTdHJlYW1SZXNwb25zZSAmJiBvbkZpbmlzaCgpO1xuICAgICAgICB9LCBlbmNvZGVUZXh0KSxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXNwb25zZVR5cGUgPSByZXNwb25zZVR5cGUgfHwgJ3RleHQnO1xuXG4gICAgbGV0IHJlc3BvbnNlRGF0YSA9IGF3YWl0IHJlc29sdmVyc1t1dGlscyQxLmZpbmRLZXkocmVzb2x2ZXJzLCByZXNwb25zZVR5cGUpIHx8ICd0ZXh0J10ocmVzcG9uc2UsIGNvbmZpZyk7XG5cbiAgICAhaXNTdHJlYW1SZXNwb25zZSAmJiBvbkZpbmlzaCgpO1xuXG4gICAgc3RvcFRpbWVvdXQgJiYgc3RvcFRpbWVvdXQoKTtcblxuICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB7XG4gICAgICAgIGRhdGE6IHJlc3BvbnNlRGF0YSxcbiAgICAgICAgaGVhZGVyczogQXhpb3NIZWFkZXJzJDEuZnJvbShyZXNwb25zZS5oZWFkZXJzKSxcbiAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IHJlc3BvbnNlLnN0YXR1c1RleHQsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdFxuICAgICAgfSk7XG4gICAgfSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgb25GaW5pc2goKTtcblxuICAgIGlmIChlcnIgJiYgZXJyLm5hbWUgPT09ICdUeXBlRXJyb3InICYmIC9mZXRjaC9pLnRlc3QoZXJyLm1lc3NhZ2UpKSB7XG4gICAgICB0aHJvdyBPYmplY3QuYXNzaWduKFxuICAgICAgICBuZXcgQXhpb3NFcnJvcignTmV0d29yayBFcnJvcicsIEF4aW9zRXJyb3IuRVJSX05FVFdPUkssIGNvbmZpZywgcmVxdWVzdCksXG4gICAgICAgIHtcbiAgICAgICAgICBjYXVzZTogZXJyLmNhdXNlIHx8IGVyclxuICAgICAgICB9XG4gICAgICApXG4gICAgfVxuXG4gICAgdGhyb3cgQXhpb3NFcnJvci5mcm9tKGVyciwgZXJyICYmIGVyci5jb2RlLCBjb25maWcsIHJlcXVlc3QpO1xuICB9XG59KTtcblxuY29uc3Qga25vd25BZGFwdGVycyA9IHtcbiAgaHR0cDogaHR0cEFkYXB0ZXIsXG4gIHhocjogeGhyQWRhcHRlcixcbiAgZmV0Y2g6IGZldGNoQWRhcHRlclxufTtcblxudXRpbHMkMS5mb3JFYWNoKGtub3duQWRhcHRlcnMsIChmbiwgdmFsdWUpID0+IHtcbiAgaWYgKGZuKSB7XG4gICAgdHJ5IHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgJ25hbWUnLCB7dmFsdWV9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHlcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZuLCAnYWRhcHRlck5hbWUnLCB7dmFsdWV9KTtcbiAgfVxufSk7XG5cbmNvbnN0IHJlbmRlclJlYXNvbiA9IChyZWFzb24pID0+IGAtICR7cmVhc29ufWA7XG5cbmNvbnN0IGlzUmVzb2x2ZWRIYW5kbGUgPSAoYWRhcHRlcikgPT4gdXRpbHMkMS5pc0Z1bmN0aW9uKGFkYXB0ZXIpIHx8IGFkYXB0ZXIgPT09IG51bGwgfHwgYWRhcHRlciA9PT0gZmFsc2U7XG5cbmNvbnN0IGFkYXB0ZXJzID0ge1xuICBnZXRBZGFwdGVyOiAoYWRhcHRlcnMpID0+IHtcbiAgICBhZGFwdGVycyA9IHV0aWxzJDEuaXNBcnJheShhZGFwdGVycykgPyBhZGFwdGVycyA6IFthZGFwdGVyc107XG5cbiAgICBjb25zdCB7bGVuZ3RofSA9IGFkYXB0ZXJzO1xuICAgIGxldCBuYW1lT3JBZGFwdGVyO1xuICAgIGxldCBhZGFwdGVyO1xuXG4gICAgY29uc3QgcmVqZWN0ZWRSZWFzb25zID0ge307XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBuYW1lT3JBZGFwdGVyID0gYWRhcHRlcnNbaV07XG4gICAgICBsZXQgaWQ7XG5cbiAgICAgIGFkYXB0ZXIgPSBuYW1lT3JBZGFwdGVyO1xuXG4gICAgICBpZiAoIWlzUmVzb2x2ZWRIYW5kbGUobmFtZU9yQWRhcHRlcikpIHtcbiAgICAgICAgYWRhcHRlciA9IGtub3duQWRhcHRlcnNbKGlkID0gU3RyaW5nKG5hbWVPckFkYXB0ZXIpKS50b0xvd2VyQ2FzZSgpXTtcblxuICAgICAgICBpZiAoYWRhcHRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoYFVua25vd24gYWRhcHRlciAnJHtpZH0nYCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGFkYXB0ZXIpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHJlamVjdGVkUmVhc29uc1tpZCB8fCAnIycgKyBpXSA9IGFkYXB0ZXI7XG4gICAgfVxuXG4gICAgaWYgKCFhZGFwdGVyKSB7XG5cbiAgICAgIGNvbnN0IHJlYXNvbnMgPSBPYmplY3QuZW50cmllcyhyZWplY3RlZFJlYXNvbnMpXG4gICAgICAgIC5tYXAoKFtpZCwgc3RhdGVdKSA9PiBgYWRhcHRlciAke2lkfSBgICtcbiAgICAgICAgICAoc3RhdGUgPT09IGZhbHNlID8gJ2lzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGVudmlyb25tZW50JyA6ICdpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBidWlsZCcpXG4gICAgICAgICk7XG5cbiAgICAgIGxldCBzID0gbGVuZ3RoID9cbiAgICAgICAgKHJlYXNvbnMubGVuZ3RoID4gMSA/ICdzaW5jZSA6XFxuJyArIHJlYXNvbnMubWFwKHJlbmRlclJlYXNvbikuam9pbignXFxuJykgOiAnICcgKyByZW5kZXJSZWFzb24ocmVhc29uc1swXSkpIDpcbiAgICAgICAgJ2FzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkJztcblxuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoXG4gICAgICAgIGBUaGVyZSBpcyBubyBzdWl0YWJsZSBhZGFwdGVyIHRvIGRpc3BhdGNoIHRoZSByZXF1ZXN0IGAgKyBzLFxuICAgICAgICAnRVJSX05PVF9TVVBQT1JUJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWRhcHRlcjtcbiAgfSxcbiAgYWRhcHRlcnM6IGtub3duQWRhcHRlcnNcbn07XG5cbi8qKlxuICogVGhyb3dzIGEgYENhbmNlbGVkRXJyb3JgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHRoYXQgaXMgdG8gYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RcbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpIHtcbiAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgIGNvbmZpZy5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCk7XG4gIH1cblxuICBpZiAoY29uZmlnLnNpZ25hbCAmJiBjb25maWcuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICB0aHJvdyBuZXcgQ2FuY2VsZWRFcnJvcihudWxsLCBjb25maWcpO1xuICB9XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgdXNpbmcgdGhlIGNvbmZpZ3VyZWQgYWRhcHRlci5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIFRoZSBjb25maWcgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdFxuICpcbiAqIEByZXR1cm5zIHtQcm9taXNlfSBUaGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWRcbiAqL1xuZnVuY3Rpb24gZGlzcGF0Y2hSZXF1ZXN0KGNvbmZpZykge1xuICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgY29uZmlnLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5mcm9tKGNvbmZpZy5oZWFkZXJzKTtcblxuICAvLyBUcmFuc2Zvcm0gcmVxdWVzdCBkYXRhXG4gIGNvbmZpZy5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgIGNvbmZpZyxcbiAgICBjb25maWcudHJhbnNmb3JtUmVxdWVzdFxuICApO1xuXG4gIGlmIChbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10uaW5kZXhPZihjb25maWcubWV0aG9kKSAhPT0gLTEpIHtcbiAgICBjb25maWcuaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJywgZmFsc2UpO1xuICB9XG5cbiAgY29uc3QgYWRhcHRlciA9IGFkYXB0ZXJzLmdldEFkYXB0ZXIoY29uZmlnLmFkYXB0ZXIgfHwgZGVmYXVsdHMkMS5hZGFwdGVyKTtcblxuICByZXR1cm4gYWRhcHRlcihjb25maWcpLnRoZW4oZnVuY3Rpb24gb25BZGFwdGVyUmVzb2x1dGlvbihyZXNwb25zZSkge1xuICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgcmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgIGNvbmZpZyxcbiAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZSxcbiAgICAgIHJlc3BvbnNlXG4gICAgKTtcblxuICAgIHJlc3BvbnNlLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5mcm9tKHJlc3BvbnNlLmhlYWRlcnMpO1xuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9LCBmdW5jdGlvbiBvbkFkYXB0ZXJSZWplY3Rpb24ocmVhc29uKSB7XG4gICAgaWYgKCFpc0NhbmNlbChyZWFzb24pKSB7XG4gICAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgICBpZiAocmVhc29uICYmIHJlYXNvbi5yZXNwb25zZSkge1xuICAgICAgICByZWFzb24ucmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlLFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZVxuICAgICAgICApO1xuICAgICAgICByZWFzb24ucmVzcG9uc2UuaGVhZGVycyA9IEF4aW9zSGVhZGVycyQxLmZyb20ocmVhc29uLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZWFzb24pO1xuICB9KTtcbn1cblxuY29uc3QgdmFsaWRhdG9ycyQxID0ge307XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5bJ29iamVjdCcsICdib29sZWFuJywgJ251bWJlcicsICdmdW5jdGlvbicsICdzdHJpbmcnLCAnc3ltYm9sJ10uZm9yRWFjaCgodHlwZSwgaSkgPT4ge1xuICB2YWxpZGF0b3JzJDFbdHlwZV0gPSBmdW5jdGlvbiB2YWxpZGF0b3IodGhpbmcpIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaW5nID09PSB0eXBlIHx8ICdhJyArIChpIDwgMSA/ICduICcgOiAnICcpICsgdHlwZTtcbiAgfTtcbn0pO1xuXG5jb25zdCBkZXByZWNhdGVkV2FybmluZ3MgPSB7fTtcblxuLyoqXG4gKiBUcmFuc2l0aW9uYWwgb3B0aW9uIHZhbGlkYXRvclxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb258Ym9vbGVhbj99IHZhbGlkYXRvciAtIHNldCB0byBmYWxzZSBpZiB0aGUgdHJhbnNpdGlvbmFsIG9wdGlvbiBoYXMgYmVlbiByZW1vdmVkXG4gKiBAcGFyYW0ge3N0cmluZz99IHZlcnNpb24gLSBkZXByZWNhdGVkIHZlcnNpb24gLyByZW1vdmVkIHNpbmNlIHZlcnNpb25cbiAqIEBwYXJhbSB7c3RyaW5nP30gbWVzc2FnZSAtIHNvbWUgbWVzc2FnZSB3aXRoIGFkZGl0aW9uYWwgaW5mb1xuICpcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn1cbiAqL1xudmFsaWRhdG9ycyQxLnRyYW5zaXRpb25hbCA9IGZ1bmN0aW9uIHRyYW5zaXRpb25hbCh2YWxpZGF0b3IsIHZlcnNpb24sIG1lc3NhZ2UpIHtcbiAgZnVuY3Rpb24gZm9ybWF0TWVzc2FnZShvcHQsIGRlc2MpIHtcbiAgICByZXR1cm4gJ1tBeGlvcyB2JyArIFZFUlNJT04gKyAnXSBUcmFuc2l0aW9uYWwgb3B0aW9uIFxcJycgKyBvcHQgKyAnXFwnJyArIGRlc2MgKyAobWVzc2FnZSA/ICcuICcgKyBtZXNzYWdlIDogJycpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuICh2YWx1ZSwgb3B0LCBvcHRzKSA9PiB7XG4gICAgaWYgKHZhbGlkYXRvciA9PT0gZmFsc2UpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICBmb3JtYXRNZXNzYWdlKG9wdCwgJyBoYXMgYmVlbiByZW1vdmVkJyArICh2ZXJzaW9uID8gJyBpbiAnICsgdmVyc2lvbiA6ICcnKSksXG4gICAgICAgIEF4aW9zRXJyb3IuRVJSX0RFUFJFQ0FURURcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHZlcnNpb24gJiYgIWRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdKSB7XG4gICAgICBkZXByZWNhdGVkV2FybmluZ3Nbb3B0XSA9IHRydWU7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBmb3JtYXRNZXNzYWdlKFxuICAgICAgICAgIG9wdCxcbiAgICAgICAgICAnIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdicgKyB2ZXJzaW9uICsgJyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSdcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdG9yID8gdmFsaWRhdG9yKHZhbHVlLCBvcHQsIG9wdHMpIDogdHJ1ZTtcbiAgfTtcbn07XG5cbi8qKlxuICogQXNzZXJ0IG9iamVjdCdzIHByb3BlcnRpZXMgdHlwZVxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge29iamVjdH0gc2NoZW1hXG4gKiBAcGFyYW0ge2Jvb2xlYW4/fSBhbGxvd1Vua25vd25cbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fVxuICovXG5cbmZ1bmN0aW9uIGFzc2VydE9wdGlvbnMob3B0aW9ucywgc2NoZW1hLCBhbGxvd1Vua25vd24pIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0JywgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTl9WQUxVRSk7XG4gIH1cbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpO1xuICBsZXQgaSA9IGtleXMubGVuZ3RoO1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIGNvbnN0IG9wdCA9IGtleXNbaV07XG4gICAgY29uc3QgdmFsaWRhdG9yID0gc2NoZW1hW29wdF07XG4gICAgaWYgKHZhbGlkYXRvcikge1xuICAgICAgY29uc3QgdmFsdWUgPSBvcHRpb25zW29wdF07XG4gICAgICBjb25zdCByZXN1bHQgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbGlkYXRvcih2YWx1ZSwgb3B0LCBvcHRpb25zKTtcbiAgICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ29wdGlvbiAnICsgb3B0ICsgJyBtdXN0IGJlICcgKyByZXN1bHQsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT05fVkFMVUUpO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChhbGxvd1Vua25vd24gIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdVbmtub3duIG9wdGlvbiAnICsgb3B0LCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OKTtcbiAgICB9XG4gIH1cbn1cblxuY29uc3QgdmFsaWRhdG9yID0ge1xuICBhc3NlcnRPcHRpb25zLFxuICB2YWxpZGF0b3JzOiB2YWxpZGF0b3JzJDFcbn07XG5cbmNvbnN0IHZhbGlkYXRvcnMgPSB2YWxpZGF0b3IudmFsaWRhdG9ycztcblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJuIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuY2xhc3MgQXhpb3Mge1xuICBjb25zdHJ1Y3RvcihpbnN0YW5jZUNvbmZpZykge1xuICAgIHRoaXMuZGVmYXVsdHMgPSBpbnN0YW5jZUNvbmZpZztcbiAgICB0aGlzLmludGVyY2VwdG9ycyA9IHtcbiAgICAgIHJlcXVlc3Q6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIkMSgpLFxuICAgICAgcmVzcG9uc2U6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIkMSgpXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwYXRjaCBhIHJlcXVlc3RcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd8T2JqZWN0fSBjb25maWdPclVybCBUaGUgY29uZmlnIHNwZWNpZmljIGZvciB0aGlzIHJlcXVlc3QgKG1lcmdlZCB3aXRoIHRoaXMuZGVmYXVsdHMpXG4gICAqIEBwYXJhbSB7P09iamVjdH0gY29uZmlnXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfSBUaGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWRcbiAgICovXG4gIGFzeW5jIHJlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5fcmVxdWVzdChjb25maWdPclVybCwgY29uZmlnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICBsZXQgZHVtbXk7XG5cbiAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UgPyBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShkdW1teSA9IHt9KSA6IChkdW1teSA9IG5ldyBFcnJvcigpKTtcblxuICAgICAgICAvLyBzbGljZSBvZmYgdGhlIEVycm9yOiAuLi4gbGluZVxuICAgICAgICBjb25zdCBzdGFjayA9IGR1bW15LnN0YWNrID8gZHVtbXkuc3RhY2sucmVwbGFjZSgvXi4rXFxuLywgJycpIDogJyc7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKCFlcnIuc3RhY2spIHtcbiAgICAgICAgICAgIGVyci5zdGFjayA9IHN0YWNrO1xuICAgICAgICAgICAgLy8gbWF0Y2ggd2l0aG91dCB0aGUgMiB0b3Agc3RhY2sgbGluZXNcbiAgICAgICAgICB9IGVsc2UgaWYgKHN0YWNrICYmICFTdHJpbmcoZXJyLnN0YWNrKS5lbmRzV2l0aChzdGFjay5yZXBsYWNlKC9eLitcXG4uK1xcbi8sICcnKSkpIHtcbiAgICAgICAgICAgIGVyci5zdGFjayArPSAnXFxuJyArIHN0YWNrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIC8vIGlnbm9yZSB0aGUgY2FzZSB3aGVyZSBcInN0YWNrXCIgaXMgYW4gdW4td3JpdGFibGUgcHJvcGVydHlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG5cbiAgX3JlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZykge1xuICAgIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAgIC8vIEFsbG93IGZvciBheGlvcygnZXhhbXBsZS91cmwnWywgY29uZmlnXSkgYSBsYSBmZXRjaCBBUElcbiAgICBpZiAodHlwZW9mIGNvbmZpZ09yVXJsID09PSAnc3RyaW5nJykge1xuICAgICAgY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICAgICAgY29uZmlnLnVybCA9IGNvbmZpZ09yVXJsO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25maWcgPSBjb25maWdPclVybCB8fCB7fTtcbiAgICB9XG5cbiAgICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuXG4gICAgY29uc3Qge3RyYW5zaXRpb25hbCwgcGFyYW1zU2VyaWFsaXplciwgaGVhZGVyc30gPSBjb25maWc7XG5cbiAgICBpZiAodHJhbnNpdGlvbmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKHRyYW5zaXRpb25hbCwge1xuICAgICAgICBzaWxlbnRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgICAgZm9yY2VkSlNPTlBhcnNpbmc6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiksXG4gICAgICAgIGNsYXJpZnlUaW1lb3V0RXJyb3I6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbilcbiAgICAgIH0sIGZhbHNlKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zU2VyaWFsaXplciAhPSBudWxsKSB7XG4gICAgICBpZiAodXRpbHMkMS5pc0Z1bmN0aW9uKHBhcmFtc1NlcmlhbGl6ZXIpKSB7XG4gICAgICAgIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyID0ge1xuICAgICAgICAgIHNlcmlhbGl6ZTogcGFyYW1zU2VyaWFsaXplclxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsaWRhdG9yLmFzc2VydE9wdGlvbnMocGFyYW1zU2VyaWFsaXplciwge1xuICAgICAgICAgIGVuY29kZTogdmFsaWRhdG9ycy5mdW5jdGlvbixcbiAgICAgICAgICBzZXJpYWxpemU6IHZhbGlkYXRvcnMuZnVuY3Rpb25cbiAgICAgICAgfSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2V0IGNvbmZpZy5tZXRob2RcbiAgICBjb25maWcubWV0aG9kID0gKGNvbmZpZy5tZXRob2QgfHwgdGhpcy5kZWZhdWx0cy5tZXRob2QgfHwgJ2dldCcpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAvLyBGbGF0dGVuIGhlYWRlcnNcbiAgICBsZXQgY29udGV4dEhlYWRlcnMgPSBoZWFkZXJzICYmIHV0aWxzJDEubWVyZ2UoXG4gICAgICBoZWFkZXJzLmNvbW1vbixcbiAgICAgIGhlYWRlcnNbY29uZmlnLm1ldGhvZF1cbiAgICApO1xuXG4gICAgaGVhZGVycyAmJiB1dGlscyQxLmZvckVhY2goXG4gICAgICBbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdwb3N0JywgJ3B1dCcsICdwYXRjaCcsICdjb21tb24nXSxcbiAgICAgIChtZXRob2QpID0+IHtcbiAgICAgICAgZGVsZXRlIGhlYWRlcnNbbWV0aG9kXTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uZmlnLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5jb25jYXQoY29udGV4dEhlYWRlcnMsIGhlYWRlcnMpO1xuXG4gICAgLy8gZmlsdGVyIG91dCBza2lwcGVkIGludGVyY2VwdG9yc1xuICAgIGNvbnN0IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluID0gW107XG4gICAgbGV0IHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyA9IHRydWU7XG4gICAgdGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uIHVuc2hpZnRSZXF1ZXN0SW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgICBpZiAodHlwZW9mIGludGVyY2VwdG9yLnJ1bldoZW4gPT09ICdmdW5jdGlvbicgJiYgaW50ZXJjZXB0b3IucnVuV2hlbihjb25maWcpID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyA9IHN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycyAmJiBpbnRlcmNlcHRvci5zeW5jaHJvbm91cztcblxuICAgICAgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4udW5zaGlmdChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbiA9IFtdO1xuICAgIHRoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24gcHVzaFJlc3BvbnNlSW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgICByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ucHVzaChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgICB9KTtcblxuICAgIGxldCBwcm9taXNlO1xuICAgIGxldCBpID0gMDtcbiAgICBsZXQgbGVuO1xuXG4gICAgaWYgKCFzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMpIHtcbiAgICAgIGNvbnN0IGNoYWluID0gW2Rpc3BhdGNoUmVxdWVzdC5iaW5kKHRoaXMpLCB1bmRlZmluZWRdO1xuICAgICAgY2hhaW4udW5zaGlmdC5hcHBseShjaGFpbiwgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4pO1xuICAgICAgY2hhaW4ucHVzaC5hcHBseShjaGFpbiwgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluKTtcbiAgICAgIGxlbiA9IGNoYWluLmxlbmd0aDtcblxuICAgICAgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShjb25maWcpO1xuXG4gICAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKGNoYWluW2krK10sIGNoYWluW2krK10pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9XG5cbiAgICBsZW4gPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi5sZW5ndGg7XG5cbiAgICBsZXQgbmV3Q29uZmlnID0gY29uZmlnO1xuXG4gICAgaSA9IDA7XG5cbiAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgY29uc3Qgb25GdWxmaWxsZWQgPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbltpKytdO1xuICAgICAgY29uc3Qgb25SZWplY3RlZCA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluW2krK107XG4gICAgICB0cnkge1xuICAgICAgICBuZXdDb25maWcgPSBvbkZ1bGZpbGxlZChuZXdDb25maWcpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgb25SZWplY3RlZC5jYWxsKHRoaXMsIGVycm9yKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHByb21pc2UgPSBkaXNwYXRjaFJlcXVlc3QuY2FsbCh0aGlzLCBuZXdDb25maWcpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgIH1cblxuICAgIGkgPSAwO1xuICAgIGxlbiA9IHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5sZW5ndGg7XG5cbiAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihyZXNwb25zZUludGVyY2VwdG9yQ2hhaW5baSsrXSwgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluW2krK10pO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9XG5cbiAgZ2V0VXJpKGNvbmZpZykge1xuICAgIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG4gICAgY29uc3QgZnVsbFBhdGggPSBidWlsZEZ1bGxQYXRoKGNvbmZpZy5iYXNlVVJMLCBjb25maWcudXJsKTtcbiAgICByZXR1cm4gYnVpbGRVUkwoZnVsbFBhdGgsIGNvbmZpZy5wYXJhbXMsIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyKTtcbiAgfVxufVxuXG4vLyBQcm92aWRlIGFsaWFzZXMgZm9yIHN1cHBvcnRlZCByZXF1ZXN0IG1ldGhvZHNcbnV0aWxzJDEuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdvcHRpb25zJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24odXJsLCBjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgZGF0YTogKGNvbmZpZyB8fCB7fSkuZGF0YVxuICAgIH0pKTtcbiAgfTtcbn0pO1xuXG51dGlscyQxLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG5cbiAgZnVuY3Rpb24gZ2VuZXJhdGVIVFRQTWV0aG9kKGlzRm9ybSkge1xuICAgIHJldHVybiBmdW5jdGlvbiBodHRwTWV0aG9kKHVybCwgZGF0YSwgY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgICBtZXRob2QsXG4gICAgICAgIGhlYWRlcnM6IGlzRm9ybSA/IHtcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnXG4gICAgICAgIH0gOiB7fSxcbiAgICAgICAgdXJsLFxuICAgICAgICBkYXRhXG4gICAgICB9KSk7XG4gICAgfTtcbiAgfVxuXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZ2VuZXJhdGVIVFRQTWV0aG9kKCk7XG5cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZCArICdGb3JtJ10gPSBnZW5lcmF0ZUhUVFBNZXRob2QodHJ1ZSk7XG59KTtcblxuY29uc3QgQXhpb3MkMSA9IEF4aW9zO1xuXG4vKipcbiAqIEEgYENhbmNlbFRva2VuYCBpcyBhbiBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byByZXF1ZXN0IGNhbmNlbGxhdGlvbiBvZiBhbiBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXhlY3V0b3IgVGhlIGV4ZWN1dG9yIGZ1bmN0aW9uLlxuICpcbiAqIEByZXR1cm5zIHtDYW5jZWxUb2tlbn1cbiAqL1xuY2xhc3MgQ2FuY2VsVG9rZW4ge1xuICBjb25zdHJ1Y3RvcihleGVjdXRvcikge1xuICAgIGlmICh0eXBlb2YgZXhlY3V0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4nKTtcbiAgICB9XG5cbiAgICBsZXQgcmVzb2x2ZVByb21pc2U7XG5cbiAgICB0aGlzLnByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiBwcm9taXNlRXhlY3V0b3IocmVzb2x2ZSkge1xuICAgICAgcmVzb2x2ZVByb21pc2UgPSByZXNvbHZlO1xuICAgIH0pO1xuXG4gICAgY29uc3QgdG9rZW4gPSB0aGlzO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICB0aGlzLnByb21pc2UudGhlbihjYW5jZWwgPT4ge1xuICAgICAgaWYgKCF0b2tlbi5fbGlzdGVuZXJzKSByZXR1cm47XG5cbiAgICAgIGxldCBpID0gdG9rZW4uX2xpc3RlbmVycy5sZW5ndGg7XG5cbiAgICAgIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgICAgIHRva2VuLl9saXN0ZW5lcnNbaV0oY2FuY2VsKTtcbiAgICAgIH1cbiAgICAgIHRva2VuLl9saXN0ZW5lcnMgPSBudWxsO1xuICAgIH0pO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICB0aGlzLnByb21pc2UudGhlbiA9IG9uZnVsZmlsbGVkID0+IHtcbiAgICAgIGxldCBfcmVzb2x2ZTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIHRva2VuLnN1YnNjcmliZShyZXNvbHZlKTtcbiAgICAgICAgX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgfSkudGhlbihvbmZ1bGZpbGxlZCk7XG5cbiAgICAgIHByb21pc2UuY2FuY2VsID0gZnVuY3Rpb24gcmVqZWN0KCkge1xuICAgICAgICB0b2tlbi51bnN1YnNjcmliZShfcmVzb2x2ZSk7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9O1xuXG4gICAgZXhlY3V0b3IoZnVuY3Rpb24gY2FuY2VsKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCkge1xuICAgICAgaWYgKHRva2VuLnJlYXNvbikge1xuICAgICAgICAvLyBDYW5jZWxsYXRpb24gaGFzIGFscmVhZHkgYmVlbiByZXF1ZXN0ZWRcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0b2tlbi5yZWFzb24gPSBuZXcgQ2FuY2VsZWRFcnJvcihtZXNzYWdlLCBjb25maWcsIHJlcXVlc3QpO1xuICAgICAgcmVzb2x2ZVByb21pc2UodG9rZW4ucmVhc29uKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaHJvd3MgYSBgQ2FuY2VsZWRFcnJvcmAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAgICovXG4gIHRocm93SWZSZXF1ZXN0ZWQoKSB7XG4gICAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgICB0aHJvdyB0aGlzLnJlYXNvbjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlIHRvIHRoZSBjYW5jZWwgc2lnbmFsXG4gICAqL1xuXG4gIHN1YnNjcmliZShsaXN0ZW5lcikge1xuICAgIGlmICh0aGlzLnJlYXNvbikge1xuICAgICAgbGlzdGVuZXIodGhpcy5yZWFzb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzID0gW2xpc3RlbmVyXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVW5zdWJzY3JpYmUgZnJvbSB0aGUgY2FuY2VsIHNpZ25hbFxuICAgKi9cblxuICB1bnN1YnNjcmliZShsaXN0ZW5lcikge1xuICAgIGlmICghdGhpcy5fbGlzdGVuZXJzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fbGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIGEgbmV3IGBDYW5jZWxUb2tlbmAgYW5kIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBjYWxsZWQsXG4gICAqIGNhbmNlbHMgdGhlIGBDYW5jZWxUb2tlbmAuXG4gICAqL1xuICBzdGF0aWMgc291cmNlKCkge1xuICAgIGxldCBjYW5jZWw7XG4gICAgY29uc3QgdG9rZW4gPSBuZXcgQ2FuY2VsVG9rZW4oZnVuY3Rpb24gZXhlY3V0b3IoYykge1xuICAgICAgY2FuY2VsID0gYztcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW4sXG4gICAgICBjYW5jZWxcbiAgICB9O1xuICB9XG59XG5cbmNvbnN0IENhbmNlbFRva2VuJDEgPSBDYW5jZWxUb2tlbjtcblxuLyoqXG4gKiBTeW50YWN0aWMgc3VnYXIgZm9yIGludm9raW5nIGEgZnVuY3Rpb24gYW5kIGV4cGFuZGluZyBhbiBhcnJheSBmb3IgYXJndW1lbnRzLlxuICpcbiAqIENvbW1vbiB1c2UgY2FzZSB3b3VsZCBiZSB0byB1c2UgYEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseWAuXG4gKlxuICogIGBgYGpzXG4gKiAgZnVuY3Rpb24gZih4LCB5LCB6KSB7fVxuICogIHZhciBhcmdzID0gWzEsIDIsIDNdO1xuICogIGYuYXBwbHkobnVsbCwgYXJncyk7XG4gKiAgYGBgXG4gKlxuICogV2l0aCBgc3ByZWFkYCB0aGlzIGV4YW1wbGUgY2FuIGJlIHJlLXdyaXR0ZW4uXG4gKlxuICogIGBgYGpzXG4gKiAgc3ByZWFkKGZ1bmN0aW9uKHgsIHksIHopIHt9KShbMSwgMiwgM10pO1xuICogIGBgYFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKlxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBzcHJlYWQoY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoYXJyKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFycik7XG4gIH07XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvc1xuICpcbiAqIEBwYXJhbSB7Kn0gcGF5bG9hZCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvcywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXhpb3NFcnJvcihwYXlsb2FkKSB7XG4gIHJldHVybiB1dGlscyQxLmlzT2JqZWN0KHBheWxvYWQpICYmIChwYXlsb2FkLmlzQXhpb3NFcnJvciA9PT0gdHJ1ZSk7XG59XG5cbmNvbnN0IEh0dHBTdGF0dXNDb2RlID0ge1xuICBDb250aW51ZTogMTAwLFxuICBTd2l0Y2hpbmdQcm90b2NvbHM6IDEwMSxcbiAgUHJvY2Vzc2luZzogMTAyLFxuICBFYXJseUhpbnRzOiAxMDMsXG4gIE9rOiAyMDAsXG4gIENyZWF0ZWQ6IDIwMSxcbiAgQWNjZXB0ZWQ6IDIwMixcbiAgTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uOiAyMDMsXG4gIE5vQ29udGVudDogMjA0LFxuICBSZXNldENvbnRlbnQ6IDIwNSxcbiAgUGFydGlhbENvbnRlbnQ6IDIwNixcbiAgTXVsdGlTdGF0dXM6IDIwNyxcbiAgQWxyZWFkeVJlcG9ydGVkOiAyMDgsXG4gIEltVXNlZDogMjI2LFxuICBNdWx0aXBsZUNob2ljZXM6IDMwMCxcbiAgTW92ZWRQZXJtYW5lbnRseTogMzAxLFxuICBGb3VuZDogMzAyLFxuICBTZWVPdGhlcjogMzAzLFxuICBOb3RNb2RpZmllZDogMzA0LFxuICBVc2VQcm94eTogMzA1LFxuICBVbnVzZWQ6IDMwNixcbiAgVGVtcG9yYXJ5UmVkaXJlY3Q6IDMwNyxcbiAgUGVybWFuZW50UmVkaXJlY3Q6IDMwOCxcbiAgQmFkUmVxdWVzdDogNDAwLFxuICBVbmF1dGhvcml6ZWQ6IDQwMSxcbiAgUGF5bWVudFJlcXVpcmVkOiA0MDIsXG4gIEZvcmJpZGRlbjogNDAzLFxuICBOb3RGb3VuZDogNDA0LFxuICBNZXRob2ROb3RBbGxvd2VkOiA0MDUsXG4gIE5vdEFjY2VwdGFibGU6IDQwNixcbiAgUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOiA0MDcsXG4gIFJlcXVlc3RUaW1lb3V0OiA0MDgsXG4gIENvbmZsaWN0OiA0MDksXG4gIEdvbmU6IDQxMCxcbiAgTGVuZ3RoUmVxdWlyZWQ6IDQxMSxcbiAgUHJlY29uZGl0aW9uRmFpbGVkOiA0MTIsXG4gIFBheWxvYWRUb29MYXJnZTogNDEzLFxuICBVcmlUb29Mb25nOiA0MTQsXG4gIFVuc3VwcG9ydGVkTWVkaWFUeXBlOiA0MTUsXG4gIFJhbmdlTm90U2F0aXNmaWFibGU6IDQxNixcbiAgRXhwZWN0YXRpb25GYWlsZWQ6IDQxNyxcbiAgSW1BVGVhcG90OiA0MTgsXG4gIE1pc2RpcmVjdGVkUmVxdWVzdDogNDIxLFxuICBVbnByb2Nlc3NhYmxlRW50aXR5OiA0MjIsXG4gIExvY2tlZDogNDIzLFxuICBGYWlsZWREZXBlbmRlbmN5OiA0MjQsXG4gIFRvb0Vhcmx5OiA0MjUsXG4gIFVwZ3JhZGVSZXF1aXJlZDogNDI2LFxuICBQcmVjb25kaXRpb25SZXF1aXJlZDogNDI4LFxuICBUb29NYW55UmVxdWVzdHM6IDQyOSxcbiAgUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlOiA0MzEsXG4gIFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOiA0NTEsXG4gIEludGVybmFsU2VydmVyRXJyb3I6IDUwMCxcbiAgTm90SW1wbGVtZW50ZWQ6IDUwMSxcbiAgQmFkR2F0ZXdheTogNTAyLFxuICBTZXJ2aWNlVW5hdmFpbGFibGU6IDUwMyxcbiAgR2F0ZXdheVRpbWVvdXQ6IDUwNCxcbiAgSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6IDUwNSxcbiAgVmFyaWFudEFsc29OZWdvdGlhdGVzOiA1MDYsXG4gIEluc3VmZmljaWVudFN0b3JhZ2U6IDUwNyxcbiAgTG9vcERldGVjdGVkOiA1MDgsXG4gIE5vdEV4dGVuZGVkOiA1MTAsXG4gIE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkOiA1MTEsXG59O1xuXG5PYmplY3QuZW50cmllcyhIdHRwU3RhdHVzQ29kZSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gIEh0dHBTdGF0dXNDb2RlW3ZhbHVlXSA9IGtleTtcbn0pO1xuXG5jb25zdCBIdHRwU3RhdHVzQ29kZSQxID0gSHR0cFN0YXR1c0NvZGU7XG5cbi8qKlxuICogQ3JlYXRlIGFuIGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGRlZmF1bHRDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqXG4gKiBAcmV0dXJucyB7QXhpb3N9IEEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRDb25maWcpIHtcbiAgY29uc3QgY29udGV4dCA9IG5ldyBBeGlvcyQxKGRlZmF1bHRDb25maWcpO1xuICBjb25zdCBpbnN0YW5jZSA9IGJpbmQoQXhpb3MkMS5wcm90b3R5cGUucmVxdWVzdCwgY29udGV4dCk7XG5cbiAgLy8gQ29weSBheGlvcy5wcm90b3R5cGUgdG8gaW5zdGFuY2VcbiAgdXRpbHMkMS5leHRlbmQoaW5zdGFuY2UsIEF4aW9zJDEucHJvdG90eXBlLCBjb250ZXh0LCB7YWxsT3duS2V5czogdHJ1ZX0pO1xuXG4gIC8vIENvcHkgY29udGV4dCB0byBpbnN0YW5jZVxuICB1dGlscyQxLmV4dGVuZChpbnN0YW5jZSwgY29udGV4dCwgbnVsbCwge2FsbE93bktleXM6IHRydWV9KTtcblxuICAvLyBGYWN0b3J5IGZvciBjcmVhdGluZyBuZXcgaW5zdGFuY2VzXG4gIGluc3RhbmNlLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShpbnN0YW5jZUNvbmZpZykge1xuICAgIHJldHVybiBjcmVhdGVJbnN0YW5jZShtZXJnZUNvbmZpZyhkZWZhdWx0Q29uZmlnLCBpbnN0YW5jZUNvbmZpZykpO1xuICB9O1xuXG4gIHJldHVybiBpbnN0YW5jZTtcbn1cblxuLy8gQ3JlYXRlIHRoZSBkZWZhdWx0IGluc3RhbmNlIHRvIGJlIGV4cG9ydGVkXG5jb25zdCBheGlvcyA9IGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRzJDEpO1xuXG4vLyBFeHBvc2UgQXhpb3MgY2xhc3MgdG8gYWxsb3cgY2xhc3MgaW5oZXJpdGFuY2VcbmF4aW9zLkF4aW9zID0gQXhpb3MkMTtcblxuLy8gRXhwb3NlIENhbmNlbCAmIENhbmNlbFRva2VuXG5heGlvcy5DYW5jZWxlZEVycm9yID0gQ2FuY2VsZWRFcnJvcjtcbmF4aW9zLkNhbmNlbFRva2VuID0gQ2FuY2VsVG9rZW4kMTtcbmF4aW9zLmlzQ2FuY2VsID0gaXNDYW5jZWw7XG5heGlvcy5WRVJTSU9OID0gVkVSU0lPTjtcbmF4aW9zLnRvRm9ybURhdGEgPSB0b0Zvcm1EYXRhO1xuXG4vLyBFeHBvc2UgQXhpb3NFcnJvciBjbGFzc1xuYXhpb3MuQXhpb3NFcnJvciA9IEF4aW9zRXJyb3I7XG5cbi8vIGFsaWFzIGZvciBDYW5jZWxlZEVycm9yIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG5heGlvcy5DYW5jZWwgPSBheGlvcy5DYW5jZWxlZEVycm9yO1xuXG4vLyBFeHBvc2UgYWxsL3NwcmVhZFxuYXhpb3MuYWxsID0gZnVuY3Rpb24gYWxsKHByb21pc2VzKSB7XG4gIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XG59O1xuXG5heGlvcy5zcHJlYWQgPSBzcHJlYWQ7XG5cbi8vIEV4cG9zZSBpc0F4aW9zRXJyb3JcbmF4aW9zLmlzQXhpb3NFcnJvciA9IGlzQXhpb3NFcnJvcjtcblxuLy8gRXhwb3NlIG1lcmdlQ29uZmlnXG5heGlvcy5tZXJnZUNvbmZpZyA9IG1lcmdlQ29uZmlnO1xuXG5heGlvcy5BeGlvc0hlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMTtcblxuYXhpb3MuZm9ybVRvSlNPTiA9IHRoaW5nID0+IGZvcm1EYXRhVG9KU09OKHV0aWxzJDEuaXNIVE1MRm9ybSh0aGluZykgPyBuZXcgRm9ybURhdGEodGhpbmcpIDogdGhpbmcpO1xuXG5heGlvcy5nZXRBZGFwdGVyID0gYWRhcHRlcnMuZ2V0QWRhcHRlcjtcblxuYXhpb3MuSHR0cFN0YXR1c0NvZGUgPSBIdHRwU3RhdHVzQ29kZSQxO1xuXG5heGlvcy5kZWZhdWx0ID0gYXhpb3M7XG5cbm1vZHVsZS5leHBvcnRzID0gYXhpb3M7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1heGlvcy5janMubWFwXG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdGlkOiBtb2R1bGVJZCxcblx0XHRsb2FkZWQ6IGZhbHNlLFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcblx0bW9kdWxlLmxvYWRlZCA9IHRydWU7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm5tZCA9IChtb2R1bGUpID0+IHtcblx0bW9kdWxlLnBhdGhzID0gW107XG5cdGlmICghbW9kdWxlLmNoaWxkcmVuKSBtb2R1bGUuY2hpbGRyZW4gPSBbXTtcblx0cmV0dXJuIG1vZHVsZTtcbn07IiwiLy8gc3RhcnR1cFxuLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vLyBUaGlzIGVudHJ5IG1vZHVsZSBpcyByZWZlcmVuY2VkIGJ5IG90aGVyIG1vZHVsZXMgc28gaXQgY2FuJ3QgYmUgaW5saW5lZFxudmFyIF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDk3MTEpO1xuIl0sIm5hbWVzIjpbInJvb3QiLCJmYWN0b3J5IiwiZXhwb3J0cyIsIm1vZHVsZSIsImRlZmluZSIsImFtZCIsInRoaXMiLCJwYXJhbGxlbCIsInNlcmlhbCIsInNlcmlhbE9yZGVyZWQiLCJjbGVhbiIsImtleSIsImpvYnMiLCJzdGF0ZSIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwiYmluZCIsImRlZmVyIiwiY2FsbGJhY2siLCJpc0FzeW5jIiwiZXJyIiwicmVzdWx0IiwiZm4iLCJuZXh0VGljayIsInNldEltbWVkaWF0ZSIsInByb2Nlc3MiLCJzZXRUaW1lb3V0IiwiYXN5bmMiLCJhYm9ydCIsImxpc3QiLCJpdGVyYXRvciIsImluZGV4IiwiaXRlbSIsImFib3J0ZXIiLCJsZW5ndGgiLCJydW5Kb2IiLCJlcnJvciIsIm91dHB1dCIsInJlc3VsdHMiLCJzb3J0TWV0aG9kIiwiaXNOYW1lZExpc3QiLCJBcnJheSIsImlzQXJyYXkiLCJpbml0U3RhdGUiLCJrZXllZExpc3QiLCJzaXplIiwic29ydCIsImEiLCJiIiwiaXRlcmF0ZSIsInRlcm1pbmF0b3IiLCJhc2NlbmRpbmciLCJpdGVyYXRvckhhbmRsZXIiLCJkZXNjZW5kaW5nIiwiQ29tYmluZWRTdHJlYW0iLCJ1dGlsIiwicGF0aCIsImh0dHAiLCJodHRwcyIsInBhcnNlVXJsIiwiZnMiLCJTdHJlYW0iLCJtaW1lIiwiYXN5bmNraXQiLCJwb3B1bGF0ZSIsIkZvcm1EYXRhIiwib3B0aW9ucyIsIm9wdGlvbiIsIl9vdmVyaGVhZExlbmd0aCIsIl92YWx1ZUxlbmd0aCIsIl92YWx1ZXNUb01lYXN1cmUiLCJjYWxsIiwiaW5oZXJpdHMiLCJMSU5FX0JSRUFLIiwiREVGQVVMVF9DT05URU5UX1RZUEUiLCJwcm90b3R5cGUiLCJhcHBlbmQiLCJmaWVsZCIsInZhbHVlIiwiZmlsZW5hbWUiLCJfZXJyb3IiLCJFcnJvciIsImhlYWRlciIsIl9tdWx0aVBhcnRIZWFkZXIiLCJmb290ZXIiLCJfbXVsdGlQYXJ0Rm9vdGVyIiwiX3RyYWNrTGVuZ3RoIiwidmFsdWVMZW5ndGgiLCJrbm93bkxlbmd0aCIsIkJ1ZmZlciIsImlzQnVmZmVyIiwiYnl0ZUxlbmd0aCIsInJlYWRhYmxlIiwiaGFzT3duUHJvcGVydHkiLCJwdXNoIiwiX2xlbmd0aFJldHJpZXZlciIsInVuZGVmaW5lZCIsImVuZCIsIkluZmluaXR5Iiwic3RhcnQiLCJzdGF0IiwiZmlsZVNpemUiLCJoZWFkZXJzIiwib24iLCJyZXNwb25zZSIsInBhdXNlIiwicmVzdW1lIiwiY29udGVudERpc3Bvc2l0aW9uIiwiX2dldENvbnRlbnREaXNwb3NpdGlvbiIsImNvbnRlbnRUeXBlIiwiX2dldENvbnRlbnRUeXBlIiwiY29udGVudHMiLCJjb25jYXQiLCJwcm9wIiwiam9pbiIsImdldEJvdW5kYXJ5IiwiZmlsZXBhdGgiLCJub3JtYWxpemUiLCJyZXBsYWNlIiwibmFtZSIsImJhc2VuYW1lIiwiY2xpZW50IiwiX2h0dHBNZXNzYWdlIiwibG9va3VwIiwibmV4dCIsIl9zdHJlYW1zIiwiX2xhc3RCb3VuZGFyeSIsImdldEhlYWRlcnMiLCJ1c2VySGVhZGVycyIsImZvcm1IZWFkZXJzIiwidG9Mb3dlckNhc2UiLCJzZXRCb3VuZGFyeSIsImJvdW5kYXJ5IiwiX2JvdW5kYXJ5IiwiX2dlbmVyYXRlQm91bmRhcnkiLCJnZXRCdWZmZXIiLCJkYXRhQnVmZmVyIiwiYWxsb2MiLCJpIiwibGVuIiwiZnJvbSIsInN1YnN0cmluZyIsIk1hdGgiLCJmbG9vciIsInJhbmRvbSIsInRvU3RyaW5nIiwiZ2V0TGVuZ3RoU3luYyIsImhhc0tub3duTGVuZ3RoIiwiZ2V0TGVuZ3RoIiwiY2IiLCJ2YWx1ZXMiLCJzdWJtaXQiLCJwYXJhbXMiLCJyZXF1ZXN0IiwiZGVmYXVsdHMiLCJtZXRob2QiLCJwb3J0IiwicGF0aG5hbWUiLCJob3N0IiwiaG9zdG5hbWUiLCJwcm90b2NvbCIsInNldEhlYWRlciIsInBpcGUiLCJvblJlc3BvbnNlIiwicmVzcG9uY2UiLCJyZW1vdmVMaXN0ZW5lciIsImVtaXQiLCJkc3QiLCJzcmMiLCJEb21haW4iLCJkYXRhIiwicmVjZWl2aW5nIiwic2VuZGluZyIsInJlcXVpcmVfdGxzIiwic2tpcF92ZXJpZmljYXRpb24iLCJ3aWxkY2FyZCIsInNwYW1fYWN0aW9uIiwiY3JlYXRlZF9hdCIsIkRhdGUiLCJzbXRwX3Bhc3N3b3JkIiwic210cF9sb2dpbiIsInR5cGUiLCJyZWNlaXZpbmdfZG5zX3JlY29yZHMiLCJzZW5kaW5nX2Ruc19yZWNvcmRzIiwiaWQiLCJpc19kaXNhYmxlZCIsIndlYl9wcmVmaXgiLCJ3ZWJfc2NoZW1lIiwidXNlX2F1dG9tYXRpY19zZW5kZXJfc2VjdXJpdHkiLCJkeW5hbWljUHJvcGVydGllcyIsInJlZHVjZSIsImFjYyIsInByb3BlcnR5TmFtZSIsImFzc2lnbiIsInVybF9qb2luXzEiLCJfX2ltcG9ydERlZmF1bHQiLCJyZXF1aXJlIiwiRXJyb3JfMSIsImRvbWFpbl8xIiwiRG9tYWluc0NsaWVudCIsImRvbWFpbkNyZWRlbnRpYWxzQ2xpZW50IiwiZG9tYWluVGVtcGxhdGVzQ2xpZW50IiwiZG9tYWluVGFnc0NsaWVudCIsImxvZ2dlciIsImNvbnNvbGUiLCJkb21haW5DcmVkZW50aWFscyIsImRvbWFpblRlbXBsYXRlcyIsImRvbWFpblRhZ3MiLCJfaGFuZGxlQm9vbFZhbHVlcyIsInByb3BzRm9yUmVwbGFjZW1lbnQiLCJyZXBsYWNlZFByb3BzIiwiX19hc3NpZ24iLCJfcGFyc2VNZXNzYWdlIiwiYm9keSIsInBhcnNlRG9tYWluTGlzdCIsIml0ZW1zIiwibWFwIiwiZGVmYXVsdCIsIl9wYXJzZURvbWFpbiIsImRvbWFpbiIsIl9wYXJzZVRyYWNraW5nU2V0dGluZ3MiLCJ0cmFja2luZyIsIl9wYXJzZVRyYWNraW5nVXBkYXRlIiwiX2lzT3BlblRyYWNraW5nSW5mb1dpdFBsYWNlIiwib2JqIiwicXVlcnkiLCJfdGhpcyIsImdldCIsInRoZW4iLCJyZXMiLCJwcmVwYXJlZFF1ZXJ5IiwiX2EiLCJleHRlbmRlZCIsIl9iIiwid2l0aF9kbnMiLCJjcmVhdGUiLCJwb3N0T2JqIiwicG9zdFdpdGhGRCIsInVwZGF0ZSIsInB1dERhdGEiLCJwdXRXaXRoRkQiLCJ2ZXJpZnkiLCJwdXQiLCJkZXN0cm95IiwiZGVsZXRlIiwiZ2V0Q29ubmVjdGlvbiIsInVwZGF0ZUNvbm5lY3Rpb24iLCJnZXRUcmFja2luZyIsInVwZGF0ZVRyYWNraW5nIiwicHJlcGFyZWREYXRhIiwiYWN0aXZlIiwicGxhY2VfYXRfdGhlX3RvcCIsImdldElwcyIsIndhcm4iLCJhc3NpZ25JcCIsImlwIiwiZGVsZXRlSXAiLCJsaW5rSXBQb29sIiwicG9vbElkIiwicG9vbF9pZCIsInVubGlua0lwUG9sbCIsInJlcGxhY2VtZW50Iiwic2VhcmNoUGFyYW1zIiwiZ2V0VXNlckRhdGFFcnJvciIsInVwZGF0ZURLSU1BdXRob3JpdHkiLCJzZWxmIiwidXBkYXRlREtJTVNlbGVjdG9yIiwiZGtpbVNlbGVjdG9yIiwic3RhdHVzIiwic2VudCIsIm1lc3NhZ2UiLCJ1cGRhdGVXZWJQcmVmaXgiLCJ3ZWJQcmVmaXgiLCJEb21haW5DcmVkZW50aWFsc0NsaWVudCIsImJhc2VSb3V0ZSIsIl9wYXJzZURvbWFpbkNyZWRlbnRpYWxzTGlzdCIsInRvdGFsQ291bnQiLCJ0b3RhbF9jb3VudCIsIl9wYXJzZU1lc3NhZ2VSZXNwb25zZSIsIl9wYXJzZURlbGV0ZWRSZXNwb25zZSIsInNwZWMiLCJjcmVkZW50aWFsc0xvZ2luIiwiTmF2aWdhdGlvblRocnVQYWdlc18xIiwiRG9tYWluVGFnIiwidGFnSW5mbyIsInRhZyIsImRlc2NyaXB0aW9uIiwiRG9tYWluVGFnU3RhdGlzdGljIiwidGFnU3RhdGlzdGljSW5mbyIsInJlc29sdXRpb24iLCJzdGF0cyIsInRpbWUiLCJEb21haW5UYWdzQ2xpZW50IiwiX3N1cGVyIiwiX19leHRlbmRzIiwicGFyc2VMaXN0IiwicGFnZXMiLCJwYXJzZVBhZ2VMaW5rcyIsIl9wYXJzZVRhZ1N0YXRpc3RpYyIsInJlcXVlc3RMaXN0V2l0aFBhZ2VzIiwic3RhdGlzdGljIiwiY291bnRyaWVzIiwicHJvdmlkZXJzIiwiZGV2aWNlcyIsIkRvbWFpblRlbXBsYXRlSXRlbSIsImRvbWFpblRlbXBsYXRlRnJvbUFQSSIsImNyZWF0ZWRBdCIsImNyZWF0ZWRCeSIsInZlcnNpb24iLCJ2ZXJzaW9ucyIsIkRvbWFpblRlbXBsYXRlc0NsaWVudCIsInBhcnNlQ3JlYXRpb25SZXNwb25zZSIsInRlbXBsYXRlIiwicGFyc2VDcmVhdGlvblZlcnNpb25SZXNwb25zZSIsInBhcnNlTXV0YXRpb25SZXNwb25zZSIsInRlbXBsYXRlTmFtZSIsInBhcnNlTm90aWZpY2F0aW9uUmVzcG9uc2UiLCJwYXJzZU11dGF0ZVRlbXBsYXRlVmVyc2lvblJlc3BvbnNlIiwidGVtcGxhdGVWZXJzaW9uIiwiZCIsInBhcnNlTGlzdFRlbXBsYXRlVmVyc2lvbnMiLCJkZXN0cm95QWxsIiwibGlzdFZlcnNpb25zIiwiZ2V0VmVyc2lvbiIsImNyZWF0ZVZlcnNpb24iLCJ1cGRhdGVWZXJzaW9uIiwiZGVzdHJveVZlcnNpb24iLCJFdmVudENsaWVudCIsIklwUG9vbHNDbGllbnQiLCJwYXJzZUlwUG9vbHNSZXNwb25zZSIsInBhdGNoV2l0aEZEIiwiSXBzQ2xpZW50IiwicGFyc2VJcHNSZXNwb25zZSIsIkluYm94UGxhY2VtZW50c0F0dHJpYnV0ZXNDbGllbnQiLCJhdHRyaWJ1dGVOYW1lIiwiSW5ib3hQbGFjZW1lbnRzRmlsdGVyc0NsaWVudCIsInN1cHBvcnRlZF9maWx0ZXJzIiwiSW5ib3hQbGFjZW1lbnRzUmVzdWx0c0NsaWVudCIsImF0dHJpYnV0ZXMiLCJmaWx0ZXJzIiwic2hhcmluZyIsImNvbnZlcnREYXRlVG9VVEMiLCJpbnB1dERhdGUiLCJ0b0lTT1N0cmluZyIsInByZXBhcmVRdWVyeURhdGEiLCJxdWVyeURhdGEiLCJwcmVwYXJlSW5ib3hQbGFjZW1lbnRzUmVzdWx0IiwiYm94IiwiaGFuZGxlZFNlZWRMaXN0RGF0ZXMiLCJ1cGRhdGVkX2F0Iiwic2hhcmluZ19leHBpcmVzX2F0IiwiQm94IiwibGFzdF9yZXN1bHRfYXQiLCJJRCIsImluYm94UGxhY2VtZW50c1Jlc3VsdCIsIklkIiwiaW5ib3hQbGFjZW1lbnRSZXN1bHQiLCJnZXRSZXN1bHRCeVNoYXJlSWQiLCJzaGFyZUlkIiwiSVBSU2hhcmluZ0NsaWVudCIsInByZXBhcmVJbmJveFBsYWNlbWVudHNSZXN1bHRTaGFyaW5nIiwiZXhwaXJlc19hdCIsImVuYWJsZWQiLCJTZWVkc0xpc3RzQ2xpZW50IiwicHJlcGFyZVJlc3VsdCIsInNlZWRMaXN0IiwicHJlcGFyZVNlZWRMaXN0Iiwic2VlZHMiLCJTZWVkcyIsInNlZWRJdGVtIiwiaGFuZGxlZFNlZWREYXRlcyIsIm1heF9lbWFpbF9jb3VudF9oaXRfYXQiLCJsYXN0X3NlbnRfdG9fYXQiLCJsYXN0X2RlbGl2ZXJlZF9hdCIsInVwZGF0ZWRTZWVkc0xpc3QiLCJzZWVkbGlzdCIsIkluYm94UGxhY2VtZW50c0NsaWVudCIsInNlZWRzTGlzdHNDbGllbnQiLCJzZWVkc0xpc3RzIiwicnVuVGVzdCIsInBvc3QiLCJJbmJveFBsYWNlbWVudHNQcm92aWRlcnNDbGllbnQiLCJoYW5kbGVkUHJvdmlkZXJEYXRlcyIsIlJlcXVlc3RfMSIsImRvbWFpbnNDbGllbnRfMSIsIkV2ZW50c18xIiwiU3RhdHNDbGllbnRfMSIsIlN1cHByZXNzaW9uc0NsaWVudF8xIiwiV2ViaG9va3NfMSIsIk1lc3NhZ2VzXzEiLCJSb3V0ZXNfMSIsInZhbGlkYXRlXzEiLCJJUHNfMSIsIklQUG9vbHNfMSIsIm1haWxpbmdMaXN0c18xIiwibWFpbExpc3RNZW1iZXJzXzEiLCJkb21haW5zQ3JlZGVudGlhbHNfMSIsIm11bHRpcGxlVmFsaWRhdGlvbl8xIiwiZG9tYWluc1RlbXBsYXRlc18xIiwiZG9tYWluc1RhZ3NfMSIsIlN1YmFjY291bnRzXzEiLCJTZWVkc0xpc3RzQ2xpZW50XzEiLCJpbmJveFBsYWNlbWVudHNfMSIsIkluYm94UGxhY2VtZW50c1Jlc3VsdHNDbGllbnRfMSIsIkF0dHJpYnV0ZXNDbGllbnRfMSIsIkZpbHRlcnNDbGllbnRfMSIsIkluYm94UGxhY2VtZW50c1Jlc3VsdHNTaGFyaW5nQ2xpZW50XzEiLCJJbmJveFBsYWNlbWVudHNQcm92aWRlcnNfMSIsIk1ldHJpY3NDbGllbnRfMSIsIk1haWxndW5DbGllbnQiLCJmb3JtRGF0YSIsImNvbmZpZyIsInVybCIsInVzZXJuYW1lIiwibWFpbExpc3RzTWVtYmVycyIsIm11bHRpcGxlVmFsaWRhdGlvbkNsaWVudCIsIkluYm94UGxhY2VtZW50c1Jlc3VsdHNTaGFyaW5nQ2xpZW50Iiwic2VlZHNMaXN0c0F0dHJpYnV0ZXMiLCJyZXN1bHRzQXR0cmlidXRlc0NsaWVudCIsInNlZWRzTGlzdHNGaWx0ZXJzQ2xpZW50IiwicmVzdWx0c0ZpbHRlcnNDbGllbnQiLCJpbmJveFBsYWNlbWVudHNSZXN1bHRzQ2xpZW50IiwiaW5ib3hQbGFjZW1lbnRzUHJvdmlkZXJzQ2xpZW50IiwiZG9tYWlucyIsIndlYmhvb2tzIiwiZXZlbnRzIiwibWV0cmljcyIsInN1cHByZXNzaW9ucyIsIm1lc3NhZ2VzIiwicm91dGVzIiwiaXBzIiwiaXBfcG9vbHMiLCJsaXN0cyIsInZhbGlkYXRlIiwic3ViYWNjb3VudHMiLCJpbmJveFBsYWNlbWVudHMiLCJzZXRTdWJhY2NvdW50Iiwic3ViYWNjb3VudElkIiwic2V0U3ViYWNjb3VudEhlYWRlciIsInJlc2V0U3ViYWNjb3VudCIsInJlc2V0U3ViYWNjb3VudEhlYWRlciIsIk1haWxMaXN0c01lbWJlcnMiLCJjaGVja0FuZFVwZGF0ZURhdGEiLCJuZXdEYXRhIiwidmFycyIsIkpTT04iLCJzdHJpbmdpZnkiLCJzdWJzY3JpYmVkIiwibGlzdE1lbWJlcnMiLCJtYWlsTGlzdEFkZHJlc3MiLCJnZXRNZW1iZXIiLCJtYWlsTGlzdE1lbWJlckFkZHJlc3MiLCJtZW1iZXIiLCJjcmVhdGVNZW1iZXIiLCJyZXFEYXRhIiwiY3JlYXRlTWVtYmVycyIsIm1lbWJlcnMiLCJ1cHNlcnQiLCJ1cGRhdGVNZW1iZXIiLCJkZXN0cm95TWVtYmVyIiwiTWFpbGluZ0xpc3RzQ2xpZW50IiwicGFyc2VWYWxpZGF0aW9uUmVzdWx0IiwidmFsaWRhdGlvblJlc3VsdCIsImNhbmNlbFZhbGlkYXRpb24iLCJNZXNzYWdlc0NsaWVudCIsInByZXBhcmVCb29sZWFuVmFsdWVzIiwieWVzTm9Qcm9wZXJ0aWVzIiwiU2V0IiwiaGFzIiwiX3BhcnNlUmVzcG9uc2UiLCJtb2RpZmllZERhdGEiLCJNZXRyaWNzQ2xpZW50IiwidG9VVENTdHJpbmciLCJwcmVwYXJlUXVlcnkiLCJzdGFydERhdGUiLCJlbmREYXRlIiwicVN0YXJ0IiwicUVuZCIsImhhbmRsZVJlc3BvbnNlIiwicmVzQm9keSIsInBhcnNlIiwiZ2V0QWNjb3VudCIsImdldEFjY291bnRVc2FnZSIsIlJvdXRlc0NsaWVudCIsInJvdXRlIiwiU3RhdHNDb250YWluZXJfMSIsIlN0YXRzQ2xpZW50IiwicHJlcGFyZVNlYXJjaFBhcmFtcyIsImVudHJpZXMiLCJhcnJheVdpdGhQYWlycyIsImN1cnJlbnRQYWlyIiwicmVwZWF0ZWRQcm9wZXJ0eSIsIl9fc3ByZWFkQXJyYXkiLCJwYXJzZVN0YXRzIiwiZ2V0RG9tYWluIiwiU3RhdHNDb250YWluZXIiLCJTdWJhY2NvdW50c0NsaWVudCIsImVuYWJsZSIsImRpc2FibGUiLCJTVUJBQ0NPVU5UX0hFQURFUiIsIkVudW1zXzEiLCJCb3VuY2UiLCJTdXBwcmVzc2lvbk1vZGVscyIsIkJPVU5DRVMiLCJhZGRyZXNzIiwiY29kZSIsIkNvbXBsYWludCIsIkNPTVBMQUlOVFMiLCJTdXBwcmVzc2lvbiIsIkJvdW5jZV8xIiwiQ29tcGxhaW50XzEiLCJVbnN1YnNjcmliZV8xIiwiV2hpdGVMaXN0XzEiLCJjcmVhdGVPcHRpb25zIiwiU3VwcHJlc3Npb25DbGllbnQiLCJtb2RlbHMiLCJib3VuY2VzIiwiY29tcGxhaW50cyIsInVuc3Vic2NyaWJlcyIsIndoaXRlbGlzdHMiLCJNb2RlbCIsIl9wYXJzZUl0ZW0iLCJjcmVhdGVXaGl0ZUxpc3QiLCJpc0RhdGFBcnJheSIsInByZXBhcmVSZXNwb25zZSIsImNyZWF0ZVVuc3Vic2NyaWJlIiwic29tZSIsInVuc3Vic2NyaWJlIiwidGFncyIsImdldE1vZGVsIiwibW9kZWwiLCJlbmNvZGVVUklDb21wb25lbnQiLCJwb3N0RGF0YSIsIlVuc3Vic2NyaWJlIiwiVU5TVUJTQ1JJQkVTIiwiV2hpdGVMaXN0IiwiV0hJVEVMSVNUUyIsInJlYXNvbiIsIkF0dGFjaG1lbnRzSGFuZGxlcl8xIiwiTXVsdGlwbGVWYWxpZGF0aW9uSm9iIiwicmVzcG9uc2VTdGF0dXNDb2RlIiwicXVhbnRpdHkiLCJyZWNvcmRzUHJvY2Vzc2VkIiwicmVjb3Jkc19wcm9jZXNzZWQiLCJkb3dubG9hZF91cmwiLCJkb3dubG9hZFVybCIsImNzdiIsImpzb24iLCJzdW1tYXJ5IiwiY2F0Y2hBbGwiLCJjYXRjaF9hbGwiLCJkZWxpdmVyYWJsZSIsImRvTm90U2VuZCIsImRvX25vdF9zZW5kIiwidW5kZWxpdmVyYWJsZSIsInVua25vd24iLCJyaXNrIiwiaGlnaCIsImxvdyIsIm1lZGl1bSIsIk11bHRpcGxlVmFsaWRhdGlvbkNsaWVudCIsImF0dGFjaG1lbnRzSGFuZGxlciIsImpvYiIsInRvdGFsIiwibGlzdElkIiwiY29udmVydFRvRXhwZWN0ZWRTaGFwZSIsImZpbGUiLCJtdWx0aXBsZVZhbGlkYXRpb25GaWxlIiwiaXNTdHJlYW0iLCJtdWx0aXBsZVZhbGlkYXRpb25EYXRhIiwiVmFsaWRhdGVDbGllbnQiLCJtdWx0aXBsZVZhbGlkYXRpb24iLCJXZWJob29rIiwidXJscyIsIldlYmhvb2tzQ2xpZW50IiwiX3BhcnNlV2ViaG9va0xpc3QiLCJfcGFyc2VXZWJob29rV2l0aElEIiwid2ViaG9va1Jlc3BvbnNlIiwid2ViaG9vayIsIl9wYXJzZVdlYmhvb2tUZXN0IiwidGVzdCIsInVybFZhbHVlcyIsIkJsb2JGcm9tU3RyZWFtIiwic3RyZWFtIiwiX3N0cmVhbSIsImRlZmluZVByb3BlcnR5IiwiU3ltYm9sIiwidG9TdHJpbmdUYWciLCJBdHRhY2htZW50c0hhbmRsZXIiLCJnZXRBdHRhY2htZW50T3B0aW9ucyIsImdldEZpbGVJbmZvIiwiZ2V0Q3VzdG9tRmlsZUluZm8iLCJnZXRCdWZmZXJJbmZvIiwiYnVmZmVyIiwiaXNDdXN0b21GaWxlIiwiaXNCcm93c2VyRmlsZSIsIkJsb2IiLCJnZXRBdHRhY2htZW50SW5mbyIsImF0dGFjaG1lbnQiLCJjb252ZXJ0VG9GRGV4cGVjdGVkU2hhcGUiLCJ1c2VyUHJvdmlkZWRWYWx1ZSIsImdldEJsb2JGcm9tU3RyZWFtIiwiQVBJRXJyb3IiLCJzdGF0dXNUZXh0IiwiYm9keU1lc3NhZ2UiLCJzdGFjayIsImRldGFpbHMiLCJGb3JtRGF0YUJ1aWxkZXIiLCJGb3JtRGF0YUNvbnN0cnVjdG9yIiwiZmlsZUtleXMiLCJjcmVhdGVGb3JtRGF0YSIsImZpbHRlciIsImZvcm1EYXRhQWNjIiwiaW5jbHVkZXMiLCJhdHRhY2htZW50VmFsdWUiLCJpc01lc3NhZ2VBdHRhY2htZW50IiwiYWRkRmlsZXNUb0ZEIiwibWVzc2FnZVZhbHVlIiwiaXNNSU1FIiwiYWRkTWltZURhdGFUb0ZEIiwiYWRkQ29tbW9uUHJvcGVydHlUb0ZEIiwiZm9ybURhdGFJbnN0YW5jZSIsImlzRm9ybURhdGFQYWNrYWdlIiwiYnJvd3NlckZvcm1EYXRhIiwiYmxvYkluc3RhbmNlIiwiUmVhZGFibGVTdHJlYW0iLCJGaWxlIiwiZXZlcnkiLCJhcHBlbmRGaWxlVG9GRCIsIm9yaWdpbmFsS2V5Iiwib2JqRGF0YSIsImZkIiwiYmxvYiIsInNldCIsImFkZFZhbHVlQmFzZWRPbkZEIiwiZmRLZXkiLCJmZFZhbHVlIiwiTmF2aWdhdGlvblRocnVQYWdlcyIsInBhcnNlUGFnZSIsInBhZ2VVcmwiLCJ1cmxTZXBhcmF0b3IiLCJpdGVyYXRvck5hbWUiLCJVUkwiLCJwYWdlVmFsdWUiLCJzcGxpdCIsInBvcCIsIml0ZXJhdG9yUG9zaXRpb24iLCJwYWdlIiwicGFnaW5nIiwidXBkYXRlVXJsQW5kUXVlcnkiLCJjbGllbnRVcmwiLCJxdWVyeUNvcHkiLCJ1cGRhdGVkUXVlcnkiLCJiYXNlNjQiLCJfX2ltcG9ydFN0YXIiLCJheGlvc18xIiwiRm9ybURhdGFCdWlsZGVyXzEiLCJSZXF1ZXN0IiwidGltZW91dCIsIm1ha2VIZWFkZXJzRnJvbU9iamVjdCIsImZvcm1EYXRhQnVpbGRlciIsIm1heEJvZHlMZW5ndGgiLCJwcm94eSIsIm9uQ2FsbE9wdGlvbnMiLCJyZXF1ZXN0SGVhZGVycyIsImpvaW5BbmRUcmFuc2Zvcm1IZWFkZXJzIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsIlVSTFNlYXJjaFBhcmFtcyIsInVybFZhbHVlIiwidG9Mb2NhbGVVcHBlckNhc2UiLCJfZCIsImVycm9yUmVzcG9uc2UiLCJlcnJfMSIsIl9jIiwiZ2V0UmVzcG9uc2VCb2R5IiwiQXhpb3NIZWFkZXJzIiwiYmFzaWMiLCJlbmNvZGUiLCJzZXRBdXRob3JpemF0aW9uIiwicmVjZWl2ZWRPbkNhbGxIZWFkZXJzIiwib25DYWxsSGVhZGVycyIsImhlYWRlcnNPYmplY3QiLCJoZWFkZXJzQWNjdW11bGF0b3IiLCJjb21tYW5kIiwiYWRkRGVmYXVsdEhlYWRlcnMiLCJyZXF1ZXN0T3B0aW9ucyIsIlJlc29sdXRpb24iLCJXZWJob29rc0lkcyIsIlllc05vIiwiX19leHBvcnRTdGFyIiwiTWFpbGd1bkNsaWVudF8xIiwiTWFpbGd1biIsImZyZWVFeHBvcnRzIiwiZnJlZUdsb2JhbCIsImdsb2JhbCIsIndpbmRvdyIsIkludmFsaWRDaGFyYWN0ZXJFcnJvciIsIlRBQkxFIiwiUkVHRVhfU1BBQ0VfQ0hBUkFDVEVSUyIsImlucHV0IiwiU3RyaW5nIiwiYyIsInBhZGRpbmciLCJwb3NpdGlvbiIsImNoYXJDb2RlQXQiLCJjaGFyQXQiLCJiaXRTdG9yYWdlIiwiYml0Q291bnRlciIsImluZGV4T2YiLCJmcm9tQ2hhckNvZGUiLCJEZWxheWVkU3RyZWFtIiwid3JpdGFibGUiLCJkYXRhU2l6ZSIsIm1heERhdGFTaXplIiwicGF1c2VTdHJlYW1zIiwiX3JlbGVhc2VkIiwiX2N1cnJlbnRTdHJlYW0iLCJfaW5zaWRlTG9vcCIsIl9wZW5kaW5nTmV4dCIsImNvbWJpbmVkU3RyZWFtIiwiaXNTdHJlYW1MaWtlIiwibmV3U3RyZWFtIiwicGF1c2VTdHJlYW0iLCJfY2hlY2tEYXRhU2l6ZSIsIl9oYW5kbGVFcnJvcnMiLCJkZXN0IiwiX2dldE5leHQiLCJfcmVhbEdldE5leHQiLCJzaGlmdCIsIl9waXBlTmV4dCIsIndyaXRlIiwiX2VtaXRFcnJvciIsIl9yZXNldCIsIl91cGRhdGVEYXRhU2l6ZSIsImZvcm1hdEFyZ3MiLCJhcmdzIiwidXNlQ29sb3JzIiwibmFtZXNwYWNlIiwiaHVtYW5pemUiLCJkaWZmIiwiY29sb3IiLCJzcGxpY2UiLCJsYXN0QyIsIm1hdGNoIiwic2F2ZSIsIm5hbWVzcGFjZXMiLCJzdG9yYWdlIiwic2V0SXRlbSIsInJlbW92ZUl0ZW0iLCJsb2FkIiwiciIsImdldEl0ZW0iLCJlbnYiLCJERUJVRyIsIl9fbndqcyIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsImRvY3VtZW50IiwiZG9jdW1lbnRFbGVtZW50Iiwic3R5bGUiLCJXZWJraXRBcHBlYXJhbmNlIiwiZmlyZWJ1ZyIsImV4Y2VwdGlvbiIsInRhYmxlIiwicGFyc2VJbnQiLCJSZWdFeHAiLCIkMSIsImxvY2FsU3RvcmFnZSIsImxvY2Fsc3RvcmFnZSIsIndhcm5lZCIsImNvbG9ycyIsImxvZyIsImRlYnVnIiwiZm9ybWF0dGVycyIsImoiLCJ2IiwiY3JlYXRlRGVidWciLCJwcmV2VGltZSIsIm5hbWVzcGFjZXNDYWNoZSIsImVuYWJsZWRDYWNoZSIsImVuYWJsZU92ZXJyaWRlIiwiY3VyciIsIk51bWJlciIsIm1zIiwicHJldiIsImNvZXJjZSIsInVuc2hpZnQiLCJmb3JtYXQiLCJmb3JtYXR0ZXIiLCJ2YWwiLCJhcHBseSIsInNlbGVjdENvbG9yIiwiZXh0ZW5kIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsImluaXQiLCJkZWxpbWl0ZXIiLCJuZXdEZWJ1ZyIsInRvTmFtZXNwYWNlIiwicmVnZXhwIiwibmFtZXMiLCJza2lwcyIsInNsaWNlIiwiaGFzaCIsImFicyIsImJyb3dzZXIiLCJ0dHkiLCJpbnNwZWN0T3B0cyIsInN0ZGVyciIsImZvcm1hdFdpdGhPcHRpb25zIiwiY29sb3JDb2RlIiwicHJlZml4IiwiaGlkZURhdGUiLCJnZXREYXRlIiwiQm9vbGVhbiIsImlzYXR0eSIsImRlcHJlY2F0ZSIsInN1cHBvcnRzQ29sb3IiLCJsZXZlbCIsIl8iLCJrIiwidG9VcHBlckNhc2UiLCJvIiwiaW5zcGVjdCIsInN0ciIsInRyaW0iLCJPIiwic291cmNlIiwiX21heERhdGFTaXplRXhjZWVkZWQiLCJfYnVmZmVyZWRFdmVudHMiLCJkZWxheWVkU3RyZWFtIiwicmVhbEVtaXQiLCJfaGFuZGxlRW1pdCIsImFyZ3VtZW50cyIsInNldEVuY29kaW5nIiwicmVsZWFzZSIsIl9jaGVja0lmTWF4RGF0YVNpemVFeGNlZWRlZCIsIldyaXRhYmxlIiwiYXNzZXJ0IiwidXNlTmF0aXZlVVJMIiwicHJlc2VydmVkVXJsRmllbGRzIiwiZXZlbnRIYW5kbGVycyIsImV2ZW50IiwiYXJnMSIsImFyZzIiLCJhcmczIiwiX3JlZGlyZWN0YWJsZSIsIkludmFsaWRVcmxFcnJvciIsImNyZWF0ZUVycm9yVHlwZSIsIlR5cGVFcnJvciIsIlJlZGlyZWN0aW9uRXJyb3IiLCJUb29NYW55UmVkaXJlY3RzRXJyb3IiLCJNYXhCb2R5TGVuZ3RoRXhjZWVkZWRFcnJvciIsIldyaXRlQWZ0ZXJFbmRFcnJvciIsIm5vb3AiLCJSZWRpcmVjdGFibGVSZXF1ZXN0IiwicmVzcG9uc2VDYWxsYmFjayIsIl9zYW5pdGl6ZU9wdGlvbnMiLCJfb3B0aW9ucyIsIl9lbmRlZCIsIl9lbmRpbmciLCJfcmVkaXJlY3RDb3VudCIsIl9yZWRpcmVjdHMiLCJfcmVxdWVzdEJvZHlMZW5ndGgiLCJfcmVxdWVzdEJvZHlCdWZmZXJzIiwiX29uTmF0aXZlUmVzcG9uc2UiLCJfcHJvY2Vzc1Jlc3BvbnNlIiwiY2F1c2UiLCJfcGVyZm9ybVJlcXVlc3QiLCJ3cmFwIiwicHJvdG9jb2xzIiwibWF4UmVkaXJlY3RzIiwibmF0aXZlUHJvdG9jb2xzIiwic2NoZW1lIiwibmF0aXZlUHJvdG9jb2wiLCJ3cmFwcGVkUHJvdG9jb2wiLCJkZWZpbmVQcm9wZXJ0aWVzIiwic3ByZWFkVXJsT2JqZWN0IiwiaXNTdHJpbmciLCJ2YWxpZGF0ZVVybCIsImlzRnVuY3Rpb24iLCJlcXVhbCIsIndyYXBwZWRSZXF1ZXN0IiwicGFyc2VkIiwiaHJlZiIsInVybE9iamVjdCIsInRhcmdldCIsInNwcmVhZCIsInN0YXJ0c1dpdGgiLCJzZWFyY2giLCJyZW1vdmVNYXRjaGluZ0hlYWRlcnMiLCJyZWdleCIsImxhc3RWYWx1ZSIsImJhc2VDbGFzcyIsIkN1c3RvbUVycm9yIiwicHJvcGVydGllcyIsImNhcHR1cmVTdGFja1RyYWNlIiwiY29uc3RydWN0b3IiLCJkZXN0cm95UmVxdWVzdCIsIl9jdXJyZW50UmVxdWVzdCIsImVuY29kaW5nIiwiY3VycmVudFJlcXVlc3QiLCJyZW1vdmVIZWFkZXIiLCJtc2VjcyIsImRlc3Ryb3lPblRpbWVvdXQiLCJzb2NrZXQiLCJhZGRMaXN0ZW5lciIsInN0YXJ0VGltZXIiLCJfdGltZW91dCIsImNsZWFyVGltZW91dCIsImNsZWFyVGltZXIiLCJvbmNlIiwicHJvcGVydHkiLCJzZWFyY2hQb3MiLCJhZ2VudHMiLCJhZ2VudCIsIl9jdXJyZW50VXJsIiwiX2lzUmVkaXJlY3QiLCJidWZmZXJzIiwid3JpdGVOZXh0IiwiZmluaXNoZWQiLCJzdGF0dXNDb2RlIiwidHJhY2tSZWRpcmVjdHMiLCJsb2NhdGlvbiIsImZvbGxvd1JlZGlyZWN0cyIsInJlc3BvbnNlVXJsIiwicmVkaXJlY3RzIiwiYmVmb3JlUmVkaXJlY3QiLCJIb3N0IiwicmVxIiwiZ2V0SGVhZGVyIiwicmVsYXRpdmUiLCJiYXNlIiwiY3VycmVudEhvc3RIZWFkZXIiLCJjdXJyZW50VXJsUGFydHMiLCJjdXJyZW50SG9zdCIsImN1cnJlbnRVcmwiLCJyZWRpcmVjdFVybCIsInJlc29sdmUiLCJzdWJkb21haW4iLCJkb3QiLCJlbmRzV2l0aCIsImlzU3ViZG9tYWluIiwicmVzcG9uc2VEZXRhaWxzIiwicmVxdWVzdERldGFpbHMiLCJmbGFnIiwiYXJndiIsInBvcyIsInRlcm1pbmF0b3JQb3MiLCJleHRlbnNpb25zIiwidHlwZXMiLCJwcmVmZXJlbmNlIiwiZGIiLCJleHRuYW1lIiwiRVhUUkFDVF9UWVBFX1JFR0VYUCIsIlRFWFRfVFlQRV9SRUdFWFAiLCJjaGFyc2V0IiwiZXhlYyIsImNoYXJzZXRzIiwiZXh0ZW5zaW9uIiwiZXh0cyIsInN1YnN0ciIsInRvIiwicyIsIm0iLCJoIiwidyIsInkiLCJwbHVyYWwiLCJtc0FicyIsIm4iLCJpc1BsdXJhbCIsInJvdW5kIiwicGFyc2VGbG9hdCIsImlzRmluaXRlIiwibG9uZyIsImZtdExvbmciLCJmbXRTaG9ydCIsIkRFRkFVTFRfUE9SVFMiLCJmdHAiLCJnb3BoZXIiLCJ3cyIsIndzcyIsInN0cmluZ0VuZHNXaXRoIiwiZ2V0RW52IiwiZ2V0UHJveHlGb3JVcmwiLCJwYXJzZWRVcmwiLCJwcm90byIsIk5PX1BST1hZIiwicGFyc2VkUHJveHkiLCJwYXJzZWRQcm94eUhvc3RuYW1lIiwicGFyc2VkUHJveHlQb3J0Iiwic2hvdWxkUHJveHkiLCJvcyIsImhhc0ZsYWciLCJmb3JjZUNvbG9yIiwiZ2V0U3VwcG9ydExldmVsIiwiaXNUVFkiLCJtaW4iLCJwbGF0Zm9ybSIsIm9zUmVsZWFzZSIsIm5vZGUiLCJzaWduIiwiQ0lfTkFNRSIsIlRFQU1DSVRZX1ZFUlNJT04iLCJDT0xPUlRFUk0iLCJURVJNX1BST0dSQU1fVkVSU0lPTiIsIlRFUk1fUFJPR1JBTSIsIlRFUk0iLCJoYXNCYXNpYyIsImhhczI1NiIsImhhczE2bSIsInRyYW5zbGF0ZUxldmVsIiwiRk9SQ0VfQ09MT1IiLCJzdGRvdXQiLCJzdHJBcnJheSIsInJlc3VsdEFycmF5IiwiZmlyc3QiLCJjb21wb25lbnQiLCJwYXJ0cyIsImRlZmluaXRpb24iLCJGb3JtRGF0YSQxIiwicHJveHlGcm9tRW52IiwiemxpYiIsIl9pbnRlcm9wRGVmYXVsdExlZ2FjeSIsImUiLCJGb3JtRGF0YV9fZGVmYXVsdCIsInVybF9fZGVmYXVsdCIsImh0dHBfX2RlZmF1bHQiLCJodHRwc19fZGVmYXVsdCIsInV0aWxfX2RlZmF1bHQiLCJmb2xsb3dSZWRpcmVjdHNfX2RlZmF1bHQiLCJ6bGliX19kZWZhdWx0Iiwic3RyZWFtX19kZWZhdWx0IiwidGhpc0FyZyIsImdldFByb3RvdHlwZU9mIiwia2luZE9mIiwiY2FjaGUiLCJ0aGluZyIsImtpbmRPZlRlc3QiLCJ0eXBlT2ZUZXN0IiwiaXNVbmRlZmluZWQiLCJpc0FycmF5QnVmZmVyIiwiaXNOdW1iZXIiLCJpc09iamVjdCIsImlzUGxhaW5PYmplY3QiLCJpc0RhdGUiLCJpc0ZpbGUiLCJpc0Jsb2IiLCJpc0ZpbGVMaXN0IiwiaXNVUkxTZWFyY2hQYXJhbXMiLCJpc1JlYWRhYmxlU3RyZWFtIiwiaXNSZXF1ZXN0IiwiaXNSZXNwb25zZSIsImlzSGVhZGVycyIsImFsbE93bktleXMiLCJsIiwiZmluZEtleSIsIl9rZXkiLCJfZ2xvYmFsIiwiZ2xvYmFsVGhpcyIsImlzQ29udGV4dERlZmluZWQiLCJjb250ZXh0IiwiaXNUeXBlZEFycmF5IiwiVHlwZWRBcnJheSIsIlVpbnQ4QXJyYXkiLCJpc0hUTUxGb3JtIiwiaXNSZWdFeHAiLCJyZWR1Y2VEZXNjcmlwdG9ycyIsInJlZHVjZXIiLCJkZXNjcmlwdG9ycyIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJyZWR1Y2VkRGVzY3JpcHRvcnMiLCJkZXNjcmlwdG9yIiwicmV0IiwiQUxQSEEiLCJESUdJVCIsIkFMUEhBQkVUIiwiQUxQSEFfRElHSVQiLCJpc0FzeW5jRm4iLCJfc2V0SW1tZWRpYXRlIiwic2V0SW1tZWRpYXRlU3VwcG9ydGVkIiwicG9zdE1lc3NhZ2VTdXBwb3J0ZWQiLCJwb3N0TWVzc2FnZSIsInRva2VuIiwiY2FsbGJhY2tzIiwiYWRkRXZlbnRMaXN0ZW5lciIsImFzYXAiLCJxdWV1ZU1pY3JvdGFzayIsInV0aWxzJDEiLCJpc0Zvcm1EYXRhIiwia2luZCIsImlzQXJyYXlCdWZmZXJWaWV3IiwiQXJyYXlCdWZmZXIiLCJpc1ZpZXciLCJpc0Jvb2xlYW4iLCJtZXJnZSIsImNhc2VsZXNzIiwiYXNzaWduVmFsdWUiLCJ0YXJnZXRLZXkiLCJzdHJpcEJPTSIsImNvbnRlbnQiLCJzdXBlckNvbnN0cnVjdG9yIiwicHJvcHMiLCJ0b0ZsYXRPYmplY3QiLCJzb3VyY2VPYmoiLCJkZXN0T2JqIiwicHJvcEZpbHRlciIsIm1lcmdlZCIsInNlYXJjaFN0cmluZyIsImxhc3RJbmRleCIsInRvQXJyYXkiLCJhcnIiLCJmb3JFYWNoRW50cnkiLCJkb25lIiwicGFpciIsIm1hdGNoQWxsIiwicmVnRXhwIiwibWF0Y2hlcyIsImhhc093blByb3AiLCJmcmVlemVNZXRob2RzIiwidG9PYmplY3RTZXQiLCJhcnJheU9yU3RyaW5nIiwidG9DYW1lbENhc2UiLCJwMSIsInAyIiwidG9GaW5pdGVOdW1iZXIiLCJkZWZhdWx0VmFsdWUiLCJnZW5lcmF0ZVN0cmluZyIsImFscGhhYmV0IiwiaXNTcGVjQ29tcGxpYW50Rm9ybSIsInRvSlNPTk9iamVjdCIsInZpc2l0IiwicmVkdWNlZFZhbHVlIiwiaXNUaGVuYWJsZSIsImNhdGNoIiwiQXhpb3NFcnJvciIsInRvSlNPTiIsIm51bWJlciIsImZpbGVOYW1lIiwibGluZU51bWJlciIsImNvbHVtbk51bWJlciIsInByb3RvdHlwZSQxIiwiaXNWaXNpdGFibGUiLCJyZW1vdmVCcmFja2V0cyIsInJlbmRlcktleSIsImRvdHMiLCJjdXN0b21Qcm9wcyIsImF4aW9zRXJyb3IiLCJwcmVkaWNhdGVzIiwidG9Gb3JtRGF0YSIsIm1ldGFUb2tlbnMiLCJpbmRleGVzIiwidmlzaXRvciIsImRlZmF1bHRWaXNpdG9yIiwidXNlQmxvYiIsImNvbnZlcnRWYWx1ZSIsImlzRmxhdEFycmF5IiwiZWwiLCJleHBvc2VkSGVscGVycyIsImJ1aWxkIiwiZW5jb2RlJDEiLCJjaGFyTWFwIiwiQXhpb3NVUkxTZWFyY2hQYXJhbXMiLCJfcGFpcnMiLCJidWlsZFVSTCIsIl9lbmNvZGUiLCJzZXJpYWxpemVGbiIsInNlcmlhbGl6ZSIsInNlcmlhbGl6ZWRQYXJhbXMiLCJoYXNobWFya0luZGV4IiwiZW5jb2RlciIsIkludGVyY2VwdG9yTWFuYWdlciQxIiwiSW50ZXJjZXB0b3JNYW5hZ2VyIiwiaGFuZGxlcnMiLCJ1c2UiLCJmdWxmaWxsZWQiLCJyZWplY3RlZCIsInN5bmNocm9ub3VzIiwicnVuV2hlbiIsImVqZWN0IiwiY2xlYXIiLCJ0cmFuc2l0aW9uYWxEZWZhdWx0cyIsInNpbGVudEpTT05QYXJzaW5nIiwiZm9yY2VkSlNPTlBhcnNpbmciLCJjbGFyaWZ5VGltZW91dEVycm9yIiwicGxhdGZvcm0kMSIsImlzTm9kZSIsImNsYXNzZXMiLCJoYXNCcm93c2VyRW52IiwiaGFzU3RhbmRhcmRCcm93c2VyRW52IiwicHJvZHVjdCIsImhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudiIsIldvcmtlckdsb2JhbFNjb3BlIiwiaW1wb3J0U2NyaXB0cyIsIm9yaWdpbiIsImZyZWV6ZSIsIl9fcHJvdG9fXyIsImZvcm1EYXRhVG9KU09OIiwiYnVpbGRQYXRoIiwiaXNOdW1lcmljS2V5IiwiaXNMYXN0IiwiYXJyYXlUb09iamVjdCIsInBhcnNlUHJvcFBhdGgiLCJ0cmFuc2l0aW9uYWwiLCJhZGFwdGVyIiwidHJhbnNmb3JtUmVxdWVzdCIsImdldENvbnRlbnRUeXBlIiwiaGFzSlNPTkNvbnRlbnRUeXBlIiwiaXNPYmplY3RQYXlsb2FkIiwic2V0Q29udGVudFR5cGUiLCJoZWxwZXJzIiwidG9VUkxFbmNvZGVkRm9ybSIsImZvcm1TZXJpYWxpemVyIiwiX0Zvcm1EYXRhIiwicmF3VmFsdWUiLCJwYXJzZXIiLCJzdHJpbmdpZnlTYWZlbHkiLCJ0cmFuc2Zvcm1SZXNwb25zZSIsIkpTT05SZXF1ZXN0ZWQiLCJyZXNwb25zZVR5cGUiLCJzdHJpY3RKU09OUGFyc2luZyIsIkVSUl9CQURfUkVTUE9OU0UiLCJ4c3JmQ29va2llTmFtZSIsInhzcmZIZWFkZXJOYW1lIiwibWF4Q29udGVudExlbmd0aCIsInZhbGlkYXRlU3RhdHVzIiwiY29tbW9uIiwiZGVmYXVsdHMkMSIsImlnbm9yZUR1cGxpY2F0ZU9mIiwiJGludGVybmFscyIsIm5vcm1hbGl6ZUhlYWRlciIsIm5vcm1hbGl6ZVZhbHVlIiwibWF0Y2hIZWFkZXJWYWx1ZSIsImlzSGVhZGVyTmFtZUZpbHRlciIsInZhbHVlT3JSZXdyaXRlIiwicmV3cml0ZSIsIl92YWx1ZSIsIl9oZWFkZXIiLCJfcmV3cml0ZSIsImxIZWFkZXIiLCJzZXRIZWFkZXJzIiwicmF3SGVhZGVycyIsImxpbmUiLCJwYXJzZUhlYWRlcnMiLCJ0b2tlbnMiLCJ0b2tlbnNSRSIsInBhcnNlVG9rZW5zIiwibWF0Y2hlciIsImRlbGV0ZWQiLCJkZWxldGVIZWFkZXIiLCJub3JtYWxpemVkIiwiY2hhciIsImZvcm1hdEhlYWRlciIsInRhcmdldHMiLCJhc1N0cmluZ3MiLCJjb21wdXRlZCIsImFjY2Vzc29yIiwiYWNjZXNzb3JzIiwiZGVmaW5lQWNjZXNzb3IiLCJhY2Nlc3Nvck5hbWUiLCJtZXRob2ROYW1lIiwiYnVpbGRBY2Nlc3NvcnMiLCJtYXBwZWQiLCJoZWFkZXJWYWx1ZSIsIkF4aW9zSGVhZGVycyQxIiwidHJhbnNmb3JtRGF0YSIsImZucyIsImlzQ2FuY2VsIiwiX19DQU5DRUxfXyIsIkNhbmNlbGVkRXJyb3IiLCJFUlJfQ0FOQ0VMRUQiLCJzZXR0bGUiLCJyZWplY3QiLCJFUlJfQkFEX1JFUVVFU1QiLCJidWlsZEZ1bGxQYXRoIiwiYmFzZVVSTCIsInJlcXVlc3RlZFVSTCIsImlzQWJzb2x1dGVVUkwiLCJyZWxhdGl2ZVVSTCIsImNvbWJpbmVVUkxzIiwiVkVSU0lPTiIsInBhcnNlUHJvdG9jb2wiLCJEQVRBX1VSTF9QQVRURVJOIiwia0ludGVybmFscyIsIkF4aW9zVHJhbnNmb3JtU3RyZWFtIiwiVHJhbnNmb3JtIiwic3VwZXIiLCJyZWFkYWJsZUhpZ2hXYXRlck1hcmsiLCJtYXhSYXRlIiwiY2h1bmtTaXplIiwibWluQ2h1bmtTaXplIiwidGltZVdpbmRvdyIsInRpY2tzUmF0ZSIsInNhbXBsZXNDb3VudCIsImludGVybmFscyIsImJ5dGVzU2VlbiIsImlzQ2FwdHVyZWQiLCJub3RpZmllZEJ5dGVzTG9hZGVkIiwidHMiLCJub3ciLCJieXRlcyIsIm9uUmVhZENhbGxiYWNrIiwiX3JlYWQiLCJfdHJhbnNmb3JtIiwiY2h1bmsiLCJieXRlc1RocmVzaG9sZCIsIm1heCIsInB1c2hDaHVuayIsIl9jaHVuayIsIl9jYWxsYmFjayIsInRyYW5zZm9ybUNodW5rIiwiYnl0ZXNMZWZ0IiwiY2h1bmtSZW1haW5kZXIiLCJtYXhDaHVua1NpemUiLCJwYXNzZWQiLCJzdWJhcnJheSIsInRyYW5zZm9ybU5leHRDaHVuayIsIkF4aW9zVHJhbnNmb3JtU3RyZWFtJDEiLCJhc3luY0l0ZXJhdG9yIiwicmVhZEJsb2IkMSIsImFycmF5QnVmZmVyIiwiQk9VTkRBUllfQUxQSEFCRVQiLCJ0ZXh0RW5jb2RlciIsIlRleHRFbmNvZGVyIiwiQ1JMRiIsIkNSTEZfQllURVMiLCJGb3JtRGF0YVBhcnQiLCJlc2NhcGVOYW1lIiwiaXNTdHJpbmdWYWx1ZSIsImNvbnRlbnRMZW5ndGgiLCJmb3JtRGF0YVRvU3RyZWFtJDEiLCJmb3JtIiwiaGVhZGVyc0hhbmRsZXIiLCJib3VuZGFyeUJ5dGVzIiwiZm9vdGVyQnl0ZXMiLCJwYXJ0IiwiY29tcHV0ZWRIZWFkZXJzIiwiUmVhZGFibGUiLCJabGliSGVhZGVyVHJhbnNmb3JtU3RyZWFtIiwiX190cmFuc2Zvcm0iLCJabGliSGVhZGVyVHJhbnNmb3JtU3RyZWFtJDEiLCJjYWxsYmFja2lmeSQxIiwicHJvZ3Jlc3NFdmVudFJlZHVjZXIiLCJsaXN0ZW5lciIsImlzRG93bmxvYWRTdHJlYW0iLCJmcmVxIiwiYnl0ZXNOb3RpZmllZCIsIl9zcGVlZG9tZXRlciIsInRpbWVzdGFtcHMiLCJmaXJzdFNhbXBsZVRTIiwiaGVhZCIsInRhaWwiLCJjaHVua0xlbmd0aCIsInN0YXJ0ZWRBdCIsImJ5dGVzQ291bnQiLCJzcGVlZG9tZXRlciIsImxhc3RBcmdzIiwidGltZXIiLCJ0aW1lc3RhbXAiLCJ0aHJlc2hvbGQiLCJpbnZva2UiLCJ0aHJvdHRsZSIsImxvYWRlZCIsImxlbmd0aENvbXB1dGFibGUiLCJwcm9ncmVzc0J5dGVzIiwicmF0ZSIsInByb2dyZXNzIiwiZXN0aW1hdGVkIiwicHJvZ3Jlc3NFdmVudERlY29yYXRvciIsInRocm90dGxlZCIsImFzeW5jRGVjb3JhdG9yIiwiemxpYk9wdGlvbnMiLCJmbHVzaCIsImNvbnN0YW50cyIsIlpfU1lOQ19GTFVTSCIsImZpbmlzaEZsdXNoIiwiYnJvdGxpT3B0aW9ucyIsIkJST1RMSV9PUEVSQVRJT05fRkxVU0giLCJpc0Jyb3RsaVN1cHBvcnRlZCIsImNyZWF0ZUJyb3RsaURlY29tcHJlc3MiLCJodHRwRm9sbG93IiwiaHR0cHNGb2xsb3ciLCJpc0h0dHBzIiwic3VwcG9ydGVkUHJvdG9jb2xzIiwiZmx1c2hPbkZpbmlzaCIsImRpc3BhdGNoQmVmb3JlUmVkaXJlY3QiLCJiZWZvcmVSZWRpcmVjdHMiLCJzZXRQcm94eSIsImNvbmZpZ1Byb3h5IiwicHJveHlVcmwiLCJhdXRoIiwicGFzc3dvcmQiLCJwcm94eUhvc3QiLCJyZWRpcmVjdE9wdGlvbnMiLCJpc0h0dHBBZGFwdGVyU3VwcG9ydGVkIiwiYnVpbGRBZGRyZXNzRW50cnkiLCJmYW1pbHkiLCJyZXNvbHZlRmFtaWx5IiwiaHR0cEFkYXB0ZXIiLCJhc3luY0V4ZWN1dG9yIiwib25Eb25lIiwicmVzcG9uc2VFbmNvZGluZyIsImlzRG9uZSIsIl9sb29rdXAiLCJvcHQiLCJhcmcwIiwiYWRkcmVzc2VzIiwiYWRkciIsImFsbCIsImVtaXR0ZXIiLCJFdmVudEVtaXR0ZXIiLCJvbkZpbmlzaGVkIiwiY2FuY2VsVG9rZW4iLCJzaWduYWwiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwiaXNSZWplY3RlZCIsInN1YnNjcmliZSIsImFib3J0ZWQiLCJmdWxsUGF0aCIsImNvbnZlcnRlZERhdGEiLCJ1cmkiLCJhc0Jsb2IiLCJfQmxvYiIsIkVSUl9JTlZBTElEX1VSTCIsImlzQmFzZTY0IiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiRVJSX05PVF9TVVBQT1JUIiwiZnJvbURhdGFVUkkiLCJvblVwbG9hZFByb2dyZXNzIiwib25Eb3dubG9hZFByb2dyZXNzIiwibWF4VXBsb2FkUmF0ZSIsIm1heERvd25sb2FkUmF0ZSIsInVzZXJCb3VuZGFyeSIsImhhc0NvbnRlbnRMZW5ndGgiLCJwcm9taXNpZnkiLCJzZXRDb250ZW50TGVuZ3RoIiwiZ2V0Q29udGVudExlbmd0aCIsIm9iamVjdE1vZGUiLCJwaXBlbGluZSIsInBhcmFtc1NlcmlhbGl6ZXIiLCJjdXN0b21FcnIiLCJleGlzdHMiLCJodHRwQWdlbnQiLCJodHRwc0FnZW50IiwidHJhbnNwb3J0Iiwic29ja2V0UGF0aCIsImlzSHR0cHNSZXF1ZXN0IiwiaW5zZWN1cmVIVFRQUGFyc2VyIiwiZGVzdHJveWVkIiwic3RyZWFtcyIsInJlc3BvbnNlTGVuZ3RoIiwidHJhbnNmb3JtU3RyZWFtIiwicmVzcG9uc2VTdHJlYW0iLCJsYXN0UmVxdWVzdCIsImRlY29tcHJlc3MiLCJjcmVhdGVVbnppcCIsIm9mZkxpc3RlbmVycyIsInN0YXR1c01lc3NhZ2UiLCJyZXNwb25zZUJ1ZmZlciIsInRvdGFsUmVzcG9uc2VCeXRlcyIsInJlc3BvbnNlRGF0YSIsInNldEtlZXBBbGl2ZSIsImlzTmFOIiwiRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJ0aW1lb3V0RXJyb3JNZXNzYWdlIiwiRVRJTUVET1VUIiwiRUNPTk5BQk9SVEVEIiwiZW5kZWQiLCJlcnJvcmVkIiwiUHJvbWlzZSIsIl9yZWplY3QiLCJvbkRvbmVIYW5kbGVyIiwiaXNVUkxTYW1lT3JpZ2luIiwibXNpZSIsInVybFBhcnNpbmdOb2RlIiwiY3JlYXRlRWxlbWVudCIsIm9yaWdpblVSTCIsInJlc29sdmVVUkwiLCJzZXRBdHRyaWJ1dGUiLCJyZXF1ZXN0VVJMIiwiY29va2llcyIsImV4cGlyZXMiLCJzZWN1cmUiLCJjb29raWUiLCJ0b0dNVFN0cmluZyIsInJlYWQiLCJyZW1vdmUiLCJoZWFkZXJzVG9PYmplY3QiLCJtZXJnZUNvbmZpZyIsImNvbmZpZzEiLCJjb25maWcyIiwiZ2V0TWVyZ2VkVmFsdWUiLCJtZXJnZURlZXBQcm9wZXJ0aWVzIiwidmFsdWVGcm9tQ29uZmlnMiIsImRlZmF1bHRUb0NvbmZpZzIiLCJtZXJnZURpcmVjdEtleXMiLCJtZXJnZU1hcCIsInRpbWVvdXRNZXNzYWdlIiwid2l0aENyZWRlbnRpYWxzIiwid2l0aFhTUkZUb2tlbiIsImNvbmZpZ1ZhbHVlIiwicmVzb2x2ZUNvbmZpZyIsIm5ld0NvbmZpZyIsImJ0b2EiLCJ1bmVzY2FwZSIsInhzcmZWYWx1ZSIsInhockFkYXB0ZXIiLCJYTUxIdHRwUmVxdWVzdCIsIl9jb25maWciLCJyZXF1ZXN0RGF0YSIsIm9uQ2FuY2VsZWQiLCJ1cGxvYWRUaHJvdHRsZWQiLCJkb3dubG9hZFRocm90dGxlZCIsImZsdXNoVXBsb2FkIiwiZmx1c2hEb3dubG9hZCIsIm9ubG9hZGVuZCIsInJlc3BvbnNlSGVhZGVycyIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsInJlc3BvbnNlVGV4dCIsIm9wZW4iLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwicmVzcG9uc2VVUkwiLCJvbmFib3J0Iiwib25lcnJvciIsIkVSUl9ORVRXT1JLIiwib250aW1lb3V0Iiwic2V0UmVxdWVzdEhlYWRlciIsInVwbG9hZCIsImNhbmNlbCIsInNlbmQiLCJjb21wb3NlU2lnbmFscyQxIiwic2lnbmFscyIsImNvbnRyb2xsZXIiLCJBYm9ydENvbnRyb2xsZXIiLCJzdHJlYW1DaHVuayIsInRyYWNrU3RyZWFtIiwib25Qcm9ncmVzcyIsIm9uRmluaXNoIiwiaXRlcmFibGUiLCJyZWFkQnl0ZXMiLCJfb25GaW5pc2giLCJwdWxsIiwiY2xvc2UiLCJsb2FkZWRCeXRlcyIsImVucXVldWUiLCJyZXR1cm4iLCJoaWdoV2F0ZXJNYXJrIiwiaXNGZXRjaFN1cHBvcnRlZCIsImZldGNoIiwiUmVzcG9uc2UiLCJpc1JlYWRhYmxlU3RyZWFtU3VwcG9ydGVkIiwiZW5jb2RlVGV4dCIsInN1cHBvcnRzUmVxdWVzdFN0cmVhbSIsImR1cGxleEFjY2Vzc2VkIiwiaGFzQ29udGVudFR5cGUiLCJkdXBsZXgiLCJzdXBwb3J0c1Jlc3BvbnNlU3RyZWFtIiwicmVzb2x2ZXJzIiwicmVzb2x2ZUJvZHlMZW5ndGgiLCJnZXRCb2R5TGVuZ3RoIiwiZmV0Y2hBZGFwdGVyIiwiZmV0Y2hPcHRpb25zIiwiY29tcG9zZWRTaWduYWwiLCJzdG9wVGltZW91dCIsInJlcXVlc3RDb250ZW50TGVuZ3RoIiwiY29udGVudFR5cGVIZWFkZXIiLCJfcmVxdWVzdCIsImNyZWRlbnRpYWxzIiwiaXNTdHJlYW1SZXNwb25zZSIsInJlc3BvbnNlQ29udGVudExlbmd0aCIsImtub3duQWRhcHRlcnMiLCJ4aHIiLCJyZW5kZXJSZWFzb24iLCJpc1Jlc29sdmVkSGFuZGxlIiwiYWRhcHRlcnMiLCJuYW1lT3JBZGFwdGVyIiwicmVqZWN0ZWRSZWFzb25zIiwicmVhc29ucyIsInRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQiLCJ0aHJvd0lmUmVxdWVzdGVkIiwiZGlzcGF0Y2hSZXF1ZXN0IiwidmFsaWRhdG9ycyQxIiwiZGVwcmVjYXRlZFdhcm5pbmdzIiwidmFsaWRhdG9yIiwiZm9ybWF0TWVzc2FnZSIsImRlc2MiLCJvcHRzIiwiRVJSX0RFUFJFQ0FURUQiLCJhc3NlcnRPcHRpb25zIiwic2NoZW1hIiwiYWxsb3dVbmtub3duIiwiRVJSX0JBRF9PUFRJT04iLCJ2YWxpZGF0b3JzIiwiQXhpb3MiLCJpbnN0YW5jZUNvbmZpZyIsImludGVyY2VwdG9ycyIsImNvbmZpZ09yVXJsIiwiZHVtbXkiLCJib29sZWFuIiwiZnVuY3Rpb24iLCJjb250ZXh0SGVhZGVycyIsInJlcXVlc3RJbnRlcmNlcHRvckNoYWluIiwic3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzIiwiaW50ZXJjZXB0b3IiLCJyZXNwb25zZUludGVyY2VwdG9yQ2hhaW4iLCJwcm9taXNlIiwiY2hhaW4iLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJnZXRVcmkiLCJnZW5lcmF0ZUhUVFBNZXRob2QiLCJpc0Zvcm0iLCJBeGlvcyQxIiwiQ2FuY2VsVG9rZW4iLCJleGVjdXRvciIsInJlc29sdmVQcm9taXNlIiwiX2xpc3RlbmVycyIsIm9uZnVsZmlsbGVkIiwiX3Jlc29sdmUiLCJDYW5jZWxUb2tlbiQxIiwiSHR0cFN0YXR1c0NvZGUiLCJDb250aW51ZSIsIlN3aXRjaGluZ1Byb3RvY29scyIsIlByb2Nlc3NpbmciLCJFYXJseUhpbnRzIiwiT2siLCJDcmVhdGVkIiwiQWNjZXB0ZWQiLCJOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb24iLCJOb0NvbnRlbnQiLCJSZXNldENvbnRlbnQiLCJQYXJ0aWFsQ29udGVudCIsIk11bHRpU3RhdHVzIiwiQWxyZWFkeVJlcG9ydGVkIiwiSW1Vc2VkIiwiTXVsdGlwbGVDaG9pY2VzIiwiTW92ZWRQZXJtYW5lbnRseSIsIkZvdW5kIiwiU2VlT3RoZXIiLCJOb3RNb2RpZmllZCIsIlVzZVByb3h5IiwiVW51c2VkIiwiVGVtcG9yYXJ5UmVkaXJlY3QiLCJQZXJtYW5lbnRSZWRpcmVjdCIsIkJhZFJlcXVlc3QiLCJVbmF1dGhvcml6ZWQiLCJQYXltZW50UmVxdWlyZWQiLCJGb3JiaWRkZW4iLCJOb3RGb3VuZCIsIk1ldGhvZE5vdEFsbG93ZWQiLCJOb3RBY2NlcHRhYmxlIiwiUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkIiwiUmVxdWVzdFRpbWVvdXQiLCJDb25mbGljdCIsIkdvbmUiLCJMZW5ndGhSZXF1aXJlZCIsIlByZWNvbmRpdGlvbkZhaWxlZCIsIlBheWxvYWRUb29MYXJnZSIsIlVyaVRvb0xvbmciLCJVbnN1cHBvcnRlZE1lZGlhVHlwZSIsIlJhbmdlTm90U2F0aXNmaWFibGUiLCJFeHBlY3RhdGlvbkZhaWxlZCIsIkltQVRlYXBvdCIsIk1pc2RpcmVjdGVkUmVxdWVzdCIsIlVucHJvY2Vzc2FibGVFbnRpdHkiLCJMb2NrZWQiLCJGYWlsZWREZXBlbmRlbmN5IiwiVG9vRWFybHkiLCJVcGdyYWRlUmVxdWlyZWQiLCJQcmVjb25kaXRpb25SZXF1aXJlZCIsIlRvb01hbnlSZXF1ZXN0cyIsIlJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZSIsIlVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zIiwiSW50ZXJuYWxTZXJ2ZXJFcnJvciIsIk5vdEltcGxlbWVudGVkIiwiQmFkR2F0ZXdheSIsIlNlcnZpY2VVbmF2YWlsYWJsZSIsIkdhdGV3YXlUaW1lb3V0IiwiSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQiLCJWYXJpYW50QWxzb05lZ290aWF0ZXMiLCJJbnN1ZmZpY2llbnRTdG9yYWdlIiwiTG9vcERldGVjdGVkIiwiTm90RXh0ZW5kZWQiLCJOZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZCIsIkh0dHBTdGF0dXNDb2RlJDEiLCJheGlvcyIsImNyZWF0ZUluc3RhbmNlIiwiZGVmYXVsdENvbmZpZyIsImluc3RhbmNlIiwiQ2FuY2VsIiwicHJvbWlzZXMiLCJpc0F4aW9zRXJyb3IiLCJwYXlsb2FkIiwiZm9ybVRvSlNPTiIsImdldEFkYXB0ZXIiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwibm1kIiwicGF0aHMiLCJjaGlsZHJlbiIsIl9fd2VicGFja19leHBvcnRzX18iXSwic291cmNlUm9vdCI6IiJ9
|