@lambda-kata/cdk 0.1.5 → 0.1.6

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.
@@ -1,5 +1,3 @@
1
- "use strict";var h=Object.defineProperty;var $=Object.getOwnPropertyDescriptor;var v=Object.getOwnPropertyNames;var F=Object.prototype.hasOwnProperty;var y=(t,e)=>{for(var p in e)h(t,p,{get:e[p],enumerable:!0})},C=(t,e,p,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let c of v(e))!F.call(t,c)&&c!==p&&h(t,c,{get:()=>e[c],enumerable:!(a=$(e,c))||a.enumerable});return t};var I=t=>C(h({},"__esModule",{value:!0}),t);var U={};y(U,{_testable:()=>m,activateSnapStart:()=>E,handler:()=>T});module.exports=I(U);var n=require("@aws-sdk/client-lambda"),d=5,N=15e3,P=3e3,D={snapshotTimeoutSeconds:180,pollingIntervalSeconds:2,aliasName:"kata",_prePublishDelayMs:P,_retryDelayMs:N},m={sleep(t){return new Promise(e=>setTimeout(e,t))}};function A(t){if(t instanceof n.ResourceNotFoundException)return!0;if(t instanceof Error){if(t.name==="ResourceNotFoundException")return!0;let e=t.cause;if(e instanceof n.ResourceNotFoundException||e instanceof Error&&e.name==="ResourceNotFoundException")return!0}return!1}var R=["lambda:GetFunction","lambda:GetFunctionConfiguration","lambda:UpdateFunctionConfiguration","lambda:PublishVersion","lambda:GetAlias","lambda:CreateAlias","lambda:UpdateAlias"];function w(t){if(t instanceof Error){if(t.name==="AccessDeniedException")return!0;let e=t.cause;if(e instanceof Error&&e.name==="AccessDeniedException")return!0}return!1}async function E(t,e,p){let a={...D,...p},c=Math.ceil(a.snapshotTimeoutSeconds/a.pollingIntervalSeconds);console.log("=".repeat(60)),console.log("SNAPSTART ACTIVATION CYCLE"),console.log("=".repeat(60)),console.log(`Function: ${e}`),console.log(`Timeout: ${a.snapshotTimeoutSeconds}s, Polling: ${a.pollingIntervalSeconds}s`),console.log(`Max publish retries: ${d}`);try{console.log(`
2
- [0/5] Ensuring function is Active...`);try{await(0,n.waitUntilFunctionActiveV2)({client:t,maxWaitTime:60},{FunctionName:e})}catch(o){throw A(o)?new Error(`Lambda function '${e}' does not exist. Verify the function name or ARN is correct.`):w(o)?new Error(`Insufficient permissions to activate SnapStart on '${e}'. Ensure the execution role has the following permissions: ${R.join(", ")}`):o}console.log(" Function is Active"),console.log(`
3
- [1/5] Enabling SnapStart (ApplyOn: PublishedVersions)...`),await t.send(new n.UpdateFunctionConfigurationCommand({FunctionName:e,SnapStart:{ApplyOn:"PublishedVersions"}})),console.log(" SnapStart configuration sent"),console.log("[2/5] Waiting for configuration update...");try{await(0,n.waitUntilFunctionUpdatedV2)({client:t,maxWaitTime:120},{FunctionName:e})}catch(o){throw A(o)?new Error(`Lambda function '${e}' does not exist. Verify the function name or ARN is correct.`):w(o)?new Error(`Insufficient permissions to activate SnapStart on '${e}'. Ensure the execution role has the following permissions: ${R.join(", ")}`):o}console.log(" Configuration updated successfully"),console.log(` Waiting ${a._prePublishDelayMs/1e3}s for configuration propagation...`),await m.sleep(a._prePublishDelayMs);let i="",u="Unknown",s="Unknown",S="";for(let o=1;o<=d;o++){console.log(`[3/5] Publishing new version (attempt ${o}/${d})...`),o>1&&(console.log(` Waiting ${a._retryDelayMs/1e3}s before retry...`),await m.sleep(a._retryDelayMs),console.log(" Ensuring function is Active before re-publish..."),await(0,n.waitUntilFunctionActiveV2)({client:t,maxWaitTime:60},{FunctionName:e}),console.log(" Re-applying SnapStart config to force new version..."),await t.send(new n.UpdateFunctionConfigurationCommand({FunctionName:e,SnapStart:{ApplyOn:"PublishedVersions"}})),await(0,n.waitUntilFunctionUpdatedV2)({client:t,maxWaitTime:120},{FunctionName:e}),console.log(` Waiting ${a._prePublishDelayMs/1e3}s for configuration propagation...`),await m.sleep(a._prePublishDelayMs)),i=(await t.send(new n.PublishVersionCommand({FunctionName:e,Description:`SnapStart enabled - ${new Date().toISOString()} (attempt ${o})`}))).Version,console.log(` Published version: ${i}`),console.log("[4/5] Waiting for SnapStart snapshot creation..."),s="Unknown";for(let g=0;g<c;g++){let f=await t.send(new n.GetFunctionConfigurationCommand({FunctionName:e,Qualifier:i}));if(u=(f.SnapStart??{}).OptimizationStatus??"Unknown",s=f.State??"Unknown",s==="Active"){console.log(" SnapStart snapshot ready!"),console.log(` OptimizationStatus: ${u}`),console.log(` State: ${s}`);break}else if(s==="Failed"){S=f.StateReason??"Unknown",console.log(` Snapshot creation failed: ${S}`);break}else if(g%10===0||g<5){let b=g*a.pollingIntervalSeconds;console.log(` Creating snapshot... Status: ${u}, State: ${s} (${b}s elapsed)`)}await m.sleep(a.pollingIntervalSeconds*1e3)}if(s==="Active"||s!=="Failed")break;o<d&&(console.log(` Snapshot failed on attempt ${o}, will retry with new version...`),console.log(` Reason: ${S}`))}s==="Failed"&&(console.log(` All ${d} snapshot attempts failed.`),console.log(` Reason: ${S}`),console.log(""),console.log(" [Lambda Kata] SnapStart optimization failed. Alias will be created pointing"),console.log(" to the latest version. Function remains operational without SnapStart."),console.log(" Review CloudWatch logs for initialization errors.")),s!=="Active"&&s!=="Failed"&&(console.log(` Warning: Snapshot creation timeout after ${a.snapshotTimeoutSeconds}s`),console.log(` Final status: OptimizationStatus=${u}, State=${s}`)),console.log(`[5/5] Creating/updating alias '${a.aliasName}' -> version ${i}...`);let r;try{await t.send(new n.GetAliasCommand({FunctionName:e,Name:a.aliasName})),r=(await t.send(new n.UpdateAliasCommand({FunctionName:e,Name:a.aliasName,FunctionVersion:i,Description:"Lambda Kata SnapStart-enabled version"}))).AliasArn,console.log(` Updated existing alias: ${r}`)}catch(o){if(o instanceof n.ResourceNotFoundException||o instanceof Error&&o.name==="ResourceNotFoundException")r=(await t.send(new n.CreateAliasCommand({FunctionName:e,Name:a.aliasName,FunctionVersion:i,Description:"Lambda Kata SnapStart-enabled version"}))).AliasArn,console.log(` Created new alias: ${r}`);else throw o}return console.log(`
4
- `+"=".repeat(60)),console.log("SNAPSTART ACTIVATION COMPLETE"),console.log("=".repeat(60)),console.log(`Version: ${i}`),console.log(`Alias: ${a.aliasName} -> ${r}`),console.log(`OptimizationStatus: ${u}`),{version:i,aliasName:a.aliasName,aliasArn:r,optimizationStatus:u}}catch(i){throw w(i)?new Error(`Insufficient permissions to activate SnapStart on '${e}'. Ensure the execution role has the following permissions: ${R.join(", ")}`):i}}async function T(t){console.log("Custom Resource Event:",JSON.stringify(t,null,2));let{RequestType:e,StackId:p,RequestId:a,LogicalResourceId:c,ResourceProperties:i}=t,u=i.FunctionName,s=i.AliasName??"kata",r={PhysicalResourceId:t.PhysicalResourceId??`${u}:snapstart:${s}`,StackId:p,RequestId:a,LogicalResourceId:c};try{if(e==="Delete")return console.log("Delete request - no action needed (Lambda will be deleted by CloudFormation)"),{...r,Status:"SUCCESS"};let o=new n.LambdaClient({}),l=await E(o,u,{aliasName:s});return{...r,Status:"SUCCESS",Data:{Version:l.version,AliasName:l.aliasName,AliasArn:l.aliasArn,OptimizationStatus:l.optimizationStatus}}}catch(o){let l=o instanceof Error?o.message:String(o);return console.error("SnapStart activation failed:",l),e==="Update"?(console.log("Returning SUCCESS for Update request to prevent rollback deadlock."),console.log("The function will continue with its previous SnapStart configuration."),{...r,Status:"SUCCESS",Reason:`SnapStart activation failed (non-blocking): ${l}`}):{...r,Status:"FAILED",Reason:`SnapStart activation failed: ${l}`}}}0&&(module.exports={_testable,activateSnapStart,handler});
5
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3NuYXBzdGFydC1hY3RpdmF0b3IudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qXG4gKiBBcGFjaGUtMi4wXG4gKiBDb3B5cmlnaHQgKEMpIDIwMjVcdTIwMTNwcmVzZW50IFJhbWFuIE1hcm96YXUsIFdvcmsgVGFyZ2V0IEluc2lnaHQgRnVuY3Rpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBDb250YWN0OiByYW1hbkB3b3JrdGlmLmNvbVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMaWNlbnNlZCBXb3JrOiBsYW1iZGFfa2F0YV9ucG1fY2RrLCA8d29ya3RpZl9sYW1iZGFfa2F0YV9ucG1fY2RrPi5cbiAqIFVzZSBvZiB0aGlzIHNvZnR3YXJlIGlzIGdvdmVybmVkIGJ5IHRoZSBBcGFjaGUtMi4wOyBzZWUgdGhlIExJQ0VOU0UgZmlsZVxuICogb3IgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCBmb3IgZGV0YWlscy5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuICovXG5cbi8qKlxuICogU25hcFN0YXJ0IEFjdGl2YXRvciAtIEN1c3RvbSBSZXNvdXJjZSBIYW5kbGVyXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdGhlIExhbWJkYSBoYW5kbGVyIGZvciBhIENsb3VkRm9ybWF0aW9uIEN1c3RvbSBSZXNvdXJjZVxuICogdGhhdCBlbmFibGVzIFNuYXBTdGFydCBvbiBMYW1iZGEgZnVuY3Rpb25zIGFmdGVyIGRlcGxveW1lbnQuIFNuYXBTdGFydCByZXF1aXJlc1xuICogYXN5bmNocm9ub3VzIHdhaXRpbmcgZm9yIHNuYXBzaG90IGNyZWF0aW9uLCB3aGljaCBjYW5ub3QgYmUgZG9uZSBkdXJpbmcgQ0RLIHN5bnRoZXNpcy5cbiAqXG4gKiBUaGUgYWN0aXZhdGlvbiBwcm9jZXNzOlxuICogMS4gV2FpdCBmb3IgZnVuY3Rpb24gdG8gYmUgQWN0aXZlXG4gKiAyLiBFbmFibGUgU25hcFN0YXJ0IGNvbmZpZ3VyYXRpb25cbiAqIDMuIFdhaXQgZm9yIGNvbmZpZ3VyYXRpb24gdXBkYXRlXG4gKiA0LiBQdWJsaXNoIG5ldyB2ZXJzaW9uICh0cmlnZ2VycyBzbmFwc2hvdCBjcmVhdGlvbilcbiAqIDUuIFdhaXQgZm9yIHNuYXBzaG90IHRvIGJlIHJlYWR5ICh1cCB0byAzIG1pbnV0ZXMpXG4gKiA2LiBDcmVhdGUvdXBkYXRlICdrYXRhJyBhbGlhcyBwb2ludGluZyB0byB0aGUgbmV3IHZlcnNpb25cbiAqXG4gKiBAbW9kdWxlIHNuYXBzdGFydC1hY3RpdmF0b3JcbiAqL1xuXG5pbXBvcnQge1xuICAgIExhbWJkYUNsaWVudCxcbiAgICBVcGRhdGVGdW5jdGlvbkNvbmZpZ3VyYXRpb25Db21tYW5kLFxuICAgIFB1Ymxpc2hWZXJzaW9uQ29tbWFuZCxcbiAgICBHZXRGdW5jdGlvbkNvbmZpZ3VyYXRpb25Db21tYW5kLFxuICAgIENyZWF0ZUFsaWFzQ29tbWFuZCxcbiAgICBVcGRhdGVBbGlhc0NvbW1hbmQsXG4gICAgR2V0QWxpYXNDb21tYW5kLFxuICAgIFJlc291cmNlTm90Rm91bmRFeGNlcHRpb24sXG4gICAgd2FpdFVudGlsRnVuY3Rpb25VcGRhdGVkVjIsXG4gICAgd2FpdFVudGlsRnVuY3Rpb25BY3RpdmVWMixcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWxhbWJkYSc7XG5cbi8qKlxuICogQ3VzdG9tIFJlc291cmNlIGV2ZW50IGZyb20gQ2xvdWRGb3JtYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tUmVzb3VyY2VFdmVudCB7XG4gICAgUmVxdWVzdFR5cGU6ICdDcmVhdGUnIHwgJ1VwZGF0ZScgfCAnRGVsZXRlJztcbiAgICBTZXJ2aWNlVG9rZW46IHN0cmluZztcbiAgICBSZXNwb25zZVVSTDogc3RyaW5nO1xuICAgIFN0YWNrSWQ6IHN0cmluZztcbiAgICBSZXF1ZXN0SWQ6IHN0cmluZztcbiAgICBSZXNvdXJjZVR5cGU6IHN0cmluZztcbiAgICBMb2dpY2FsUmVzb3VyY2VJZDogc3RyaW5nO1xuICAgIFBoeXNpY2FsUmVzb3VyY2VJZD86IHN0cmluZztcbiAgICBSZXNvdXJjZVByb3BlcnRpZXM6IHtcbiAgICAgICAgU2VydmljZVRva2VuOiBzdHJpbmc7XG4gICAgICAgIEZ1bmN0aW9uTmFtZTogc3RyaW5nO1xuICAgICAgICBBbGlhc05hbWU/OiBzdHJpbmc7XG4gICAgfTtcbiAgICBPbGRSZXNvdXJjZVByb3BlcnRpZXM/OiB7XG4gICAgICAgIEZ1bmN0aW9uTmFtZTogc3RyaW5nO1xuICAgICAgICBBbGlhc05hbWU/OiBzdHJpbmc7XG4gICAgfTtcbn1cblxuLyoqXG4gKiBDdXN0b20gUmVzb3VyY2UgcmVzcG9uc2UgdG8gQ2xvdWRGb3JtYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tUmVzb3VyY2VSZXNwb25zZSB7XG4gICAgU3RhdHVzOiAnU1VDQ0VTUycgfCAnRkFJTEVEJztcbiAgICBSZWFzb24/OiBzdHJpbmc7XG4gICAgUGh5c2ljYWxSZXNvdXJjZUlkOiBzdHJpbmc7XG4gICAgU3RhY2tJZDogc3RyaW5nO1xuICAgIFJlcXVlc3RJZDogc3RyaW5nO1xuICAgIExvZ2ljYWxSZXNvdXJjZUlkOiBzdHJpbmc7XG4gICAgRGF0YT86IHtcbiAgICAgICAgVmVyc2lvbj86IHN0cmluZztcbiAgICAgICAgQWxpYXNOYW1lPzogc3RyaW5nO1xuICAgICAgICBBbGlhc0Fybj86IHN0cmluZztcbiAgICAgICAgT3B0aW1pemF0aW9uU3RhdHVzPzogc3RyaW5nO1xuICAgIH07XG59XG5cbi8qKlxuICogUmVzdWx0IG9mIGEgc3VjY2Vzc2Z1bCBTbmFwU3RhcnQgYWN0aXZhdGlvbiBjeWNsZS5cbiAqXG4gKiBSZXR1cm5lZCBieSB7QGxpbmsgYWN0aXZhdGVTbmFwU3RhcnR9IGFmdGVyIGVuYWJsaW5nIFNuYXBTdGFydCxcbiAqIHB1Ymxpc2hpbmcgYSB2ZXJzaW9uLCB3YWl0aW5nIGZvciBzbmFwc2hvdCByZWFkaW5lc3MsIGFuZCBjcmVhdGluZy91cGRhdGluZyBhbiBhbGlhcy5cbiAqXG4gKiBAc2VlIHtAbGluayBTbmFwU3RhcnRBY3RpdmF0b3JDb25maWd9IGZvciBjb25maWd1cmF0aW9uIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTbmFwU3RhcnRBY3RpdmF0aW9uUmVzdWx0IHtcbiAgICAvKiogVGhlIHB1Ymxpc2hlZCBMYW1iZGEgdmVyc2lvbiBudW1iZXIgKGUuZy4gXCI0MlwiKS4gKi9cbiAgICB2ZXJzaW9uOiBzdHJpbmc7XG4gICAgLyoqIFRoZSBhbGlhcyBuYW1lIHRoYXQgd2FzIGNyZWF0ZWQgb3IgdXBkYXRlZCAoZS5nLiBcImthdGFcIikuICovXG4gICAgYWxpYXNOYW1lOiBzdHJpbmc7XG4gICAgLyoqIFRoZSBmdWxsIEFSTiBvZiB0aGUgYWxpYXMgKGUuZy4gXCJhcm46YXdzOmxhbWJkYTp1cy1lYXN0LTE6MTIzNDU2Nzg5MDEyOmZ1bmN0aW9uOm15LWZuOmthdGFcIikuICovXG4gICAgYWxpYXNBcm46IHN0cmluZztcbiAgICAvKiogVGhlIFNuYXBTdGFydCBvcHRpbWl6YXRpb24gc3RhdHVzIG9mIHRoZSBwdWJsaXNoZWQgdmVyc2lvbiAoXCJPblwiLCBcIk9mZlwiLCBvciBcIlVua25vd25cIikuICovXG4gICAgb3B0aW1pemF0aW9uU3RhdHVzOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgU25hcFN0YXJ0IGFjdGl2YXRpb24gY3ljbGUuXG4gKlxuICogQWxsIHByb3BlcnRpZXMgYXJlIG9wdGlvbmFsIGFuZCBmYWxsIGJhY2sgdG8gc2Vuc2libGUgZGVmYXVsdHMuXG4gKlxuICogQHNlZSB7QGxpbmsgYWN0aXZhdGVTbmFwU3RhcnR9IGZvciB0aGUgZnVuY3Rpb24gdGhhdCBjb25zdW1lcyB0aGlzIGNvbmZpZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNuYXBTdGFydEFjdGl2YXRvckNvbmZpZyB7XG4gICAgLyoqXG4gICAgICogTWF4aW11bSB0aW1lIGluIHNlY29uZHMgdG8gd2FpdCBmb3Igc25hcHNob3QgY3JlYXRpb24gYmVmb3JlIHByb2NlZWRpbmcuXG4gICAgICogSWYgZXhjZWVkZWQsIGEgd2FybmluZyBpcyBsb2dnZWQgYW5kIGFsaWFzIGNyZWF0aW9uIGNvbnRpbnVlcy5cbiAgICAgKiBAZGVmYXVsdCAxODBcbiAgICAgKi9cbiAgICBzbmFwc2hvdFRpbWVvdXRTZWNvbmRzPzogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIEludGVydmFsIGluIHNlY29uZHMgYmV0d2VlbiBwb2xsaW5nIGF0dGVtcHRzIGZvciBzbmFwc2hvdCByZWFkaW5lc3MuXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIHBvbGxpbmdJbnRlcnZhbFNlY29uZHM/OiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogVGhlIExhbWJkYSBhbGlhcyBuYW1lIHRvIGNyZWF0ZSBvciB1cGRhdGUgYWZ0ZXIgcHVibGlzaGluZyBhIHZlcnNpb24uXG4gICAgICogQGRlZmF1bHQgJ2thdGEnXG4gICAgICovXG4gICAgYWxpYXNOYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbCBPdmVycmlkZSBwcmUtcHVibGlzaCBkZWxheSBpbiBtaWxsaXNlY29uZHMgKGZvciB0ZXN0aW5nIG9ubHkpLlxuICAgICAqIEBkZWZhdWx0IDMwMDBcbiAgICAgKi9cbiAgICBfcHJlUHVibGlzaERlbGF5TXM/OiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogQGludGVybmFsIE92ZXJyaWRlIHJldHJ5IGRlbGF5IGluIG1pbGxpc2Vjb25kcyAoZm9yIHRlc3Rpbmcgb25seSkuXG4gICAgICogQGRlZmF1bHQgNTAwMFxuICAgICAqL1xuICAgIF9yZXRyeURlbGF5TXM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogTWF4aW11bSBudW1iZXIgb2YgUHVibGlzaFZlcnNpb24gKyBzbmFwc2hvdCBwb2xsaW5nIGF0dGVtcHRzLlxuICogRWFjaCByZXRyeSBwdWJsaXNoZXMgYSBORVcgdmVyc2lvbiAobmV3IHNuYXBzaG90IGF0dGVtcHQpLlxuICogQm91bmRlZCB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzOyB0b3RhbCB3b3JzdC1jYXNlIHRpbWU6XG4gKiA1ICogKDE1cyBkZWxheSArIHB1Ymxpc2ggKyAxODBzIHBvbGwpIFx1MjI0OCAxNm1pbiwgd2l0aGluIExhbWJkYSAxNW1pbiBsaW1pdFxuICogKGJ1dCBzbmFwc2hvdCB0aW1lb3V0IGlzIHR5cGljYWxseSBtdWNoIHNob3J0ZXIgdGhhbiAxODBzIHBlciBhdHRlbXB0KS5cbiAqL1xuY29uc3QgTUFYX1BVQkxJU0hfUkVUUklFUyA9IDU7XG5cbi8qKlxuICogRGVsYXkgaW4gbWlsbGlzZWNvbmRzIGJlZm9yZSByZXRyeWluZyBhIGZhaWxlZCBzbmFwc2hvdCBjcmVhdGlvbi5cbiAqIFNldCB0byAxNXMgdG8gZ2l2ZSB0cmFuc2llbnQgTGFtYmRhIGluaXQgZmFpbHVyZXMgdGltZSB0byBjbGVhci5cbiAqL1xuY29uc3QgUkVUUllfREVMQVlfTVMgPSAxNTAwMDtcblxuLyoqXG4gKiBEZWxheSBpbiBtaWxsaXNlY29uZHMgYWZ0ZXIgd2FpdFVudGlsRnVuY3Rpb25VcGRhdGVkVjIgY29tcGxldGVzLFxuICogYmVmb3JlIHRoZSBmaXJzdCBQdWJsaXNoVmVyc2lvbiBjYWxsLiBNaXRpZ2F0ZXMgZXZlbnR1YWwgY29uc2lzdGVuY3lcbiAqIGJldHdlZW4gTGFtYmRhIGNvbmZpZyB1cGRhdGUgcHJvcGFnYXRpb24gYW5kIFB1Ymxpc2hWZXJzaW9uIGluaXQgcGhhc2UuXG4gKi9cbmNvbnN0IFBSRV9QVUJMSVNIX0RFTEFZX01TID0gMzAwMDtcblxuY29uc3QgREVGQVVMVF9DT05GSUc6IFJlcXVpcmVkPFNuYXBTdGFydEFjdGl2YXRvckNvbmZpZz4gPSB7XG4gICAgc25hcHNob3RUaW1lb3V0U2Vjb25kczogMTgwLFxuICAgIHBvbGxpbmdJbnRlcnZhbFNlY29uZHM6IDIsXG4gICAgYWxpYXNOYW1lOiAna2F0YScsXG4gICAgX3ByZVB1Ymxpc2hEZWxheU1zOiBQUkVfUFVCTElTSF9ERUxBWV9NUyxcbiAgICBfcmV0cnlEZWxheU1zOiBSRVRSWV9ERUxBWV9NUyxcbn07XG5cbi8qKlxuICogU2xlZXAgZm9yIHNwZWNpZmllZCBtaWxsaXNlY29uZHMuXG4gKiBAaW50ZXJuYWwgRXhwb3J0ZWQgZm9yIHRlc3RhYmlsaXR5IFx1MjAxNCB0ZXN0cyBjYW4gamVzdC5zcHlPbiB0byBhdm9pZCByZWFsIGRlbGF5cy5cbiAqL1xuZXhwb3J0IGNvbnN0IF90ZXN0YWJsZSA9IHtcbiAgICBzbGVlcChtczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbiAgICB9LFxufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhbiBlcnJvciAob3IgaXRzIGNhdXNlIGNoYWluKSBpcyBhIFJlc291cmNlTm90Rm91bmRFeGNlcHRpb24uXG4gKlxuICogQVdTIFNESyB2MyB3YWl0ZXJzIG1heSB0aHJvdyB0aGUgdW5kZXJseWluZyBzZXJ2aWNlIGV4Y2VwdGlvbiBkaXJlY3RseSxcbiAqIG9yIHdyYXAgaXQgaW4gYSB3YWl0ZXItc3RhdGUgZXJyb3IuIFRoaXMgaGVscGVyIGluc3BlY3RzIGJvdGggdGhlIGVycm9yXG4gKiBpdHNlbGYgYW5kIGl0cyBgY2F1c2VgIHByb3BlcnR5IHRvIGRldGVjdCBlaXRoZXIgY2FzZS5cbiAqL1xuZnVuY3Rpb24gaXNSZXNvdXJjZU5vdEZvdW5kRXJyb3IoZXJyb3I6IHVua25vd24pOiBib29sZWFuIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBSZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IubmFtZSA9PT0gJ1Jlc291cmNlTm90Rm91bmRFeGNlcHRpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBXYWl0ZXJzIG1heSB3cmFwIHRoZSBzZXJ2aWNlIGV4Y2VwdGlvbiBpbiBhIGNhdXNlIGNoYWluXG4gICAgICAgIGNvbnN0IGNhdXNlID0gKGVycm9yIGFzIEVycm9yICYgeyBjYXVzZT86IHVua25vd24gfSkuY2F1c2U7XG4gICAgICAgIGlmIChjYXVzZSBpbnN0YW5jZW9mIFJlc291cmNlTm90Rm91bmRFeGNlcHRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYXVzZSBpbnN0YW5jZW9mIEVycm9yICYmIGNhdXNlLm5hbWUgPT09ICdSZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIFJlcXVpcmVkIElBTSBwZXJtaXNzaW9ucyBmb3IgU25hcFN0YXJ0IGFjdGl2YXRpb24uXG4gKiBVc2VkIGluIGVycm9yIG1lc3NhZ2VzIHRvIGd1aWRlIHVzZXJzIHdoZW4gQWNjZXNzRGVuaWVkRXhjZXB0aW9uIG9jY3Vycy5cbiAqL1xuY29uc3QgUkVRVUlSRURfUEVSTUlTU0lPTlM6IHJlYWRvbmx5IHN0cmluZ1tdID0gW1xuICAgICdsYW1iZGE6R2V0RnVuY3Rpb24nLFxuICAgICdsYW1iZGE6R2V0RnVuY3Rpb25Db25maWd1cmF0aW9uJyxcbiAgICAnbGFtYmRhOlVwZGF0ZUZ1bmN0aW9uQ29uZmlndXJhdGlvbicsXG4gICAgJ2xhbWJkYTpQdWJsaXNoVmVyc2lvbicsXG4gICAgJ2xhbWJkYTpHZXRBbGlhcycsXG4gICAgJ2xhbWJkYTpDcmVhdGVBbGlhcycsXG4gICAgJ2xhbWJkYTpVcGRhdGVBbGlhcycsXG5dO1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGFuIGVycm9yIGlzIGFuIEFjY2Vzc0RlbmllZEV4Y2VwdGlvbi5cbiAqXG4gKiBBV1MgU0RLIHYzIG1heSB0aHJvdyBBY2Nlc3NEZW5pZWRFeGNlcHRpb24gZGlyZWN0bHkgb3Igd3JhcCBpdC5cbiAqIFRoaXMgaGVscGVyIGluc3BlY3RzIGJvdGggdGhlIGVycm9yIGl0c2VsZiBhbmQgaXRzIGBjYXVzZWAgcHJvcGVydHkuXG4gKi9cbmZ1bmN0aW9uIGlzQWNjZXNzRGVuaWVkRXJyb3IoZXJyb3I6IHVua25vd24pOiBib29sZWFuIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IubmFtZSA9PT0gJ0FjY2Vzc0RlbmllZEV4Y2VwdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNhdXNlID0gKGVycm9yIGFzIEVycm9yICYgeyBjYXVzZT86IHVua25vd24gfSkuY2F1c2U7XG4gICAgICAgIGlmIChjYXVzZSBpbnN0YW5jZW9mIEVycm9yICYmIGNhdXNlLm5hbWUgPT09ICdBY2Nlc3NEZW5pZWRFeGNlcHRpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cblxuLyoqXG4gKiBBY3RpdmF0ZXMgU25hcFN0YXJ0IG9uIGEgTGFtYmRhIGZ1bmN0aW9uLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgdGhlIGZ1bGwgU25hcFN0YXJ0IGFjdGl2YXRpb24gY3ljbGU6XG4gKiAxLiBFbnN1cmVzIGZ1bmN0aW9uIGlzIEFjdGl2ZVxuICogMi4gRW5hYmxlcyBTbmFwU3RhcnQgY29uZmlndXJhdGlvblxuICogMy4gV2FpdHMgZm9yIGNvbmZpZ3VyYXRpb24gdXBkYXRlXG4gKiA0LiBQdWJsaXNoZXMgbmV3IHZlcnNpb24gKHdpdGggcmV0cnkgb24gc25hcHNob3QgZmFpbHVyZSlcbiAqIDUuIFdhaXRzIGZvciBzbmFwc2hvdCBjcmVhdGlvblxuICogNi4gQ3JlYXRlcy91cGRhdGVzIGFsaWFzXG4gKlxuICogU3RlcHMgMys0IGFyZSB3cmFwcGVkIGluIGEgcmV0cnkgbG9vcDogb24gU3RhdGU6IEZhaWxlZCwgYSBuZXcgdmVyc2lvblxuICogaXMgcHVibGlzaGVkICh1cCB0byBNQVhfUFVCTElTSF9SRVRSSUVTIGF0dGVtcHRzKSB0byBoYW5kbGUgdHJhbnNpZW50XG4gKiBpbml0aWFsaXphdGlvbiBmYWlsdXJlcyBkdXJpbmcgc25hcHNob3QgY3JlYXRpb24uXG4gKlxuICogQHBhcmFtIGxhbWJkYUNsaWVudCAtIEFXUyBMYW1iZGEgY2xpZW50XG4gKiBAcGFyYW0gZnVuY3Rpb25OYW1lIC0gTmFtZSBvciBBUk4gb2YgdGhlIExhbWJkYSBmdW5jdGlvblxuICogQHBhcmFtIGNvbmZpZyAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb25cbiAqIEByZXR1cm5zIEFjdGl2YXRpb24gcmVzdWx0IHdpdGggdmVyc2lvbiBhbmQgYWxpYXMgaW5mb3JtYXRpb25cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjdGl2YXRlU25hcFN0YXJ0KFxuICAgIGxhbWJkYUNsaWVudDogTGFtYmRhQ2xpZW50LFxuICAgIGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuICAgIGNvbmZpZz86IFNuYXBTdGFydEFjdGl2YXRvckNvbmZpZyxcbik6IFByb21pc2U8U25hcFN0YXJ0QWN0aXZhdGlvblJlc3VsdD4ge1xuICAgIGNvbnN0IGNmZyA9IHsgLi4uREVGQVVMVF9DT05GSUcsIC4uLmNvbmZpZyB9O1xuICAgIGNvbnN0IG1heEF0dGVtcHRzID0gTWF0aC5jZWlsKGNmZy5zbmFwc2hvdFRpbWVvdXRTZWNvbmRzIC8gY2ZnLnBvbGxpbmdJbnRlcnZhbFNlY29uZHMpO1xuXG4gICAgY29uc29sZS5sb2coJz0nLnJlcGVhdCg2MCkpO1xuICAgIGNvbnNvbGUubG9nKCdTTkFQU1RBUlQgQUNUSVZBVElPTiBDWUNMRScpO1xuICAgIGNvbnNvbGUubG9nKCc9Jy5yZXBlYXQoNjApKTtcbiAgICBjb25zb2xlLmxvZyhgRnVuY3Rpb246ICR7ZnVuY3Rpb25OYW1lfWApO1xuICAgIGNvbnNvbGUubG9nKGBUaW1lb3V0OiAke2NmZy5zbmFwc2hvdFRpbWVvdXRTZWNvbmRzfXMsIFBvbGxpbmc6ICR7Y2ZnLnBvbGxpbmdJbnRlcnZhbFNlY29uZHN9c2ApO1xuICAgIGNvbnNvbGUubG9nKGBNYXggcHVibGlzaCByZXRyaWVzOiAke01BWF9QVUJMSVNIX1JFVFJJRVN9YCk7XG5cbiAgICB0cnkge1xuICAgICAgICAvLyBTdGVwIDA6IEVuc3VyZSBmdW5jdGlvbiBpcyBBY3RpdmUgYmVmb3JlIHN0YXJ0aW5nXG4gICAgICAgIGNvbnNvbGUubG9nKCdcXG5bMC81XSBFbnN1cmluZyBmdW5jdGlvbiBpcyBBY3RpdmUuLi4nKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IHdhaXRVbnRpbEZ1bmN0aW9uQWN0aXZlVjIoXG4gICAgICAgICAgICAgICAgeyBjbGllbnQ6IGxhbWJkYUNsaWVudCwgbWF4V2FpdFRpbWU6IDYwIH0sXG4gICAgICAgICAgICAgICAgeyBGdW5jdGlvbk5hbWU6IGZ1bmN0aW9uTmFtZSB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgaWYgKGlzUmVzb3VyY2VOb3RGb3VuZEVycm9yKGVycm9yKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTGFtYmRhIGZ1bmN0aW9uICcke2Z1bmN0aW9uTmFtZX0nIGRvZXMgbm90IGV4aXN0LiBWZXJpZnkgdGhlIGZ1bmN0aW9uIG5hbWUgb3IgQVJOIGlzIGNvcnJlY3QuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNBY2Nlc3NEZW5pZWRFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGBJbnN1ZmZpY2llbnQgcGVybWlzc2lvbnMgdG8gYWN0aXZhdGUgU25hcFN0YXJ0IG9uICcke2Z1bmN0aW9uTmFtZX0nLiBgICtcbiAgICAgICAgICAgICAgICAgICAgYEVuc3VyZSB0aGUgZXhlY3V0aW9uIHJvbGUgaGFzIHRoZSBmb2xsb3dpbmcgcGVybWlzc2lvbnM6ICR7UkVRVUlSRURfUEVSTUlTU0lPTlMuam9pbignLCAnKX1gXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUubG9nKCcgICAgICBGdW5jdGlvbiBpcyBBY3RpdmUnKTtcblxuICAgICAgICAvLyBTdGVwIDE6IEVuYWJsZSBTbmFwU3RhcnQgb24gdGhlIGZ1bmN0aW9uXG4gICAgICAgIGNvbnNvbGUubG9nKCdcXG5bMS81XSBFbmFibGluZyBTbmFwU3RhcnQgKEFwcGx5T246IFB1Ymxpc2hlZFZlcnNpb25zKS4uLicpO1xuICAgICAgICBhd2FpdCBsYW1iZGFDbGllbnQuc2VuZChuZXcgVXBkYXRlRnVuY3Rpb25Db25maWd1cmF0aW9uQ29tbWFuZCh7XG4gICAgICAgICAgICBGdW5jdGlvbk5hbWU6IGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgIFNuYXBTdGFydDogeyBBcHBseU9uOiAnUHVibGlzaGVkVmVyc2lvbnMnIH0sXG4gICAgICAgIH0pKTtcbiAgICAgICAgY29uc29sZS5sb2coJyAgICAgIFNuYXBTdGFydCBjb25maWd1cmF0aW9uIHNlbnQnKTtcblxuICAgICAgICAvLyBTdGVwIDI6IFdhaXQgZm9yIGNvbmZpZ3VyYXRpb24gdXBkYXRlIHRvIGNvbXBsZXRlXG4gICAgICAgIGNvbnNvbGUubG9nKCdbMi81XSBXYWl0aW5nIGZvciBjb25maWd1cmF0aW9uIHVwZGF0ZS4uLicpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgd2FpdFVudGlsRnVuY3Rpb25VcGRhdGVkVjIoXG4gICAgICAgICAgICAgICAgeyBjbGllbnQ6IGxhbWJkYUNsaWVudCwgbWF4V2FpdFRpbWU6IDEyMCB9LFxuICAgICAgICAgICAgICAgIHsgRnVuY3Rpb25OYW1lOiBmdW5jdGlvbk5hbWUgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChpc1Jlc291cmNlTm90Rm91bmRFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYExhbWJkYSBmdW5jdGlvbiAnJHtmdW5jdGlvbk5hbWV9JyBkb2VzIG5vdCBleGlzdC4gVmVyaWZ5IHRoZSBmdW5jdGlvbiBuYW1lIG9yIEFSTiBpcyBjb3JyZWN0LmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzQWNjZXNzRGVuaWVkRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICBgSW5zdWZmaWNpZW50IHBlcm1pc3Npb25zIHRvIGFjdGl2YXRlIFNuYXBTdGFydCBvbiAnJHtmdW5jdGlvbk5hbWV9Jy4gYCArXG4gICAgICAgICAgICAgICAgICAgIGBFbnN1cmUgdGhlIGV4ZWN1dGlvbiByb2xlIGhhcyB0aGUgZm9sbG93aW5nIHBlcm1pc3Npb25zOiAke1JFUVVJUkVEX1BFUk1JU1NJT05TLmpvaW4oJywgJyl9YFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZygnICAgICAgQ29uZmlndXJhdGlvbiB1cGRhdGVkIHN1Y2Nlc3NmdWxseScpO1xuXG4gICAgICAgIC8vIFByZS1wdWJsaXNoIGRlbGF5OiBtaXRpZ2F0ZSBldmVudHVhbCBjb25zaXN0ZW5jeSBiZXR3ZWVuXG4gICAgICAgIC8vIExhbWJkYSBjb25maWcgdXBkYXRlIHByb3BhZ2F0aW9uIGFuZCBQdWJsaXNoVmVyc2lvbiBpbml0IHBoYXNlXG4gICAgICAgIGNvbnNvbGUubG9nKGAgICAgICBXYWl0aW5nICR7Y2ZnLl9wcmVQdWJsaXNoRGVsYXlNcyAvIDEwMDB9cyBmb3IgY29uZmlndXJhdGlvbiBwcm9wYWdhdGlvbi4uLmApO1xuICAgICAgICBhd2FpdCBfdGVzdGFibGUuc2xlZXAoY2ZnLl9wcmVQdWJsaXNoRGVsYXlNcyk7XG5cbiAgICAgICAgLy8gU3RlcHMgMys0OiBQdWJsaXNoIHZlcnNpb24gYW5kIHdhaXQgZm9yIHNuYXBzaG90IChXSVRIIFJFVFJZKVxuICAgICAgICBsZXQgdmVyc2lvbjogc3RyaW5nID0gJyc7XG4gICAgICAgIGxldCBvcHRpbWl6YXRpb25TdGF0dXMgPSAnVW5rbm93bic7XG4gICAgICAgIGxldCBzdGF0ZSA9ICdVbmtub3duJztcbiAgICAgICAgbGV0IGxhc3RGYWlsUmVhc29uID0gJyc7XG5cbiAgICAgICAgZm9yIChsZXQgcHVibGlzaEF0dGVtcHQgPSAxOyBwdWJsaXNoQXR0ZW1wdCA8PSBNQVhfUFVCTElTSF9SRVRSSUVTOyBwdWJsaXNoQXR0ZW1wdCsrKSB7XG4gICAgICAgICAgICAvLyBTdGVwIDM6IFB1Ymxpc2ggbmV3IHZlcnNpb24gdG8gY3JlYXRlIHNuYXBzaG90XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgWzMvNV0gUHVibGlzaGluZyBuZXcgdmVyc2lvbiAoYXR0ZW1wdCAke3B1Ymxpc2hBdHRlbXB0fS8ke01BWF9QVUJMSVNIX1JFVFJJRVN9KS4uLmApO1xuXG4gICAgICAgICAgICAvLyBCZWZvcmUgcmUtcHVibGlzaCAoYXR0ZW1wdCA+IDEpLCB3YWl0IGFuZCBlbnN1cmUgZnVuY3Rpb24gaXMgcmVhZHlcbiAgICAgICAgICAgIGlmIChwdWJsaXNoQXR0ZW1wdCA+IDEpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgICAgICAgV2FpdGluZyAke2NmZy5fcmV0cnlEZWxheU1zIC8gMTAwMH1zIGJlZm9yZSByZXRyeS4uLmApO1xuICAgICAgICAgICAgICAgIGF3YWl0IF90ZXN0YWJsZS5zbGVlcChjZmcuX3JldHJ5RGVsYXlNcyk7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJyAgICAgIEVuc3VyaW5nIGZ1bmN0aW9uIGlzIEFjdGl2ZSBiZWZvcmUgcmUtcHVibGlzaC4uLicpO1xuICAgICAgICAgICAgICAgIGF3YWl0IHdhaXRVbnRpbEZ1bmN0aW9uQWN0aXZlVjIoXG4gICAgICAgICAgICAgICAgICAgIHsgY2xpZW50OiBsYW1iZGFDbGllbnQsIG1heFdhaXRUaW1lOiA2MCB9LFxuICAgICAgICAgICAgICAgICAgICB7IEZ1bmN0aW9uTmFtZTogZnVuY3Rpb25OYW1lIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIC8vIEZvcmNlIGEgY29uZmlnIHVwZGF0ZSBzbyBQdWJsaXNoVmVyc2lvbiBjcmVhdGVzIGEgZ2VudWluZWx5IG5ldyB2ZXJzaW9uLlxuICAgICAgICAgICAgICAgIC8vIFdpdGhvdXQgdGhpcywgUHVibGlzaFZlcnNpb24gcmV0dXJucyB0aGUgc2FtZSAoRmFpbGVkKSB2ZXJzaW9uIG51bWJlclxuICAgICAgICAgICAgICAgIC8vIGJlY2F1c2UgTGFtYmRhIGRlZHVwbGljYXRlcyBpZGVudGljYWwgY29uZmlndXJhdGlvbnMuXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJyAgICAgIFJlLWFwcGx5aW5nIFNuYXBTdGFydCBjb25maWcgdG8gZm9yY2UgbmV3IHZlcnNpb24uLi4nKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBsYW1iZGFDbGllbnQuc2VuZChuZXcgVXBkYXRlRnVuY3Rpb25Db25maWd1cmF0aW9uQ29tbWFuZCh7XG4gICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uTmFtZTogZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICBTbmFwU3RhcnQ6IHsgQXBwbHlPbjogJ1B1Ymxpc2hlZFZlcnNpb25zJyB9LFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICBhd2FpdCB3YWl0VW50aWxGdW5jdGlvblVwZGF0ZWRWMihcbiAgICAgICAgICAgICAgICAgICAgeyBjbGllbnQ6IGxhbWJkYUNsaWVudCwgbWF4V2FpdFRpbWU6IDEyMCB9LFxuICAgICAgICAgICAgICAgICAgICB7IEZ1bmN0aW9uTmFtZTogZnVuY3Rpb25OYW1lIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGAgICAgICBXYWl0aW5nICR7Y2ZnLl9wcmVQdWJsaXNoRGVsYXlNcyAvIDEwMDB9cyBmb3IgY29uZmlndXJhdGlvbiBwcm9wYWdhdGlvbi4uLmApO1xuICAgICAgICAgICAgICAgIGF3YWl0IF90ZXN0YWJsZS5zbGVlcChjZmcuX3ByZVB1Ymxpc2hEZWxheU1zKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcHVibGlzaFJlc3BvbnNlID0gYXdhaXQgbGFtYmRhQ2xpZW50LnNlbmQobmV3IFB1Ymxpc2hWZXJzaW9uQ29tbWFuZCh7XG4gICAgICAgICAgICAgICAgRnVuY3Rpb25OYW1lOiBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgRGVzY3JpcHRpb246IGBTbmFwU3RhcnQgZW5hYmxlZCAtICR7bmV3IERhdGUoKS50b0lTT1N0cmluZygpfSAoYXR0ZW1wdCAke3B1Ymxpc2hBdHRlbXB0fSlgLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgdmVyc2lvbiA9IHB1Ymxpc2hSZXNwb25zZS5WZXJzaW9uITtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGAgICAgICBQdWJsaXNoZWQgdmVyc2lvbjogJHt2ZXJzaW9ufWApO1xuXG4gICAgICAgICAgICAvLyBTdGVwIDQ6IFdhaXQgZm9yIHNuYXBzaG90IG9wdGltaXphdGlvbiBhbmQgdmVyaWZ5IHN0YXR1c1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1s0LzVdIFdhaXRpbmcgZm9yIFNuYXBTdGFydCBzbmFwc2hvdCBjcmVhdGlvbi4uLicpO1xuICAgICAgICAgICAgc3RhdGUgPSAnVW5rbm93bic7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGF0dGVtcHQgPSAwOyBhdHRlbXB0IDwgbWF4QXR0ZW1wdHM7IGF0dGVtcHQrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZlcnNpb25Db25maWcgPSBhd2FpdCBsYW1iZGFDbGllbnQuc2VuZChuZXcgR2V0RnVuY3Rpb25Db25maWd1cmF0aW9uQ29tbWFuZCh7XG4gICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uTmFtZTogZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICBRdWFsaWZpZXI6IHZlcnNpb24sXG4gICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgY29uc3Qgc25hcFN0YXJ0U3RhdHVzID0gdmVyc2lvbkNvbmZpZy5TbmFwU3RhcnQgPz8ge307XG4gICAgICAgICAgICAgICAgb3B0aW1pemF0aW9uU3RhdHVzID0gc25hcFN0YXJ0U3RhdHVzLk9wdGltaXphdGlvblN0YXR1cyA/PyAnVW5rbm93bic7XG4gICAgICAgICAgICAgICAgc3RhdGUgPSB2ZXJzaW9uQ29uZmlnLlN0YXRlID8/ICdVbmtub3duJztcblxuICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA9PT0gJ0FjdGl2ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJyAgICAgIFNuYXBTdGFydCBzbmFwc2hvdCByZWFkeSEnKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYCAgICAgIE9wdGltaXphdGlvblN0YXR1czogJHtvcHRpbWl6YXRpb25TdGF0dXN9YCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGAgICAgICBTdGF0ZTogJHtzdGF0ZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PT0gJ0ZhaWxlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgbGFzdEZhaWxSZWFzb24gPSB2ZXJzaW9uQ29uZmlnLlN0YXRlUmVhc29uID8/ICdVbmtub3duJztcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYCAgICAgIFNuYXBzaG90IGNyZWF0aW9uIGZhaWxlZDogJHtsYXN0RmFpbFJlYXNvbn1gKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gU2hvdyBwcm9ncmVzcyBldmVyeSAxMCBhdHRlbXB0cyBvciBmaXJzdCA1XG4gICAgICAgICAgICAgICAgICAgIGlmIChhdHRlbXB0ICUgMTAgPT09IDAgfHwgYXR0ZW1wdCA8IDUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVsYXBzZWQgPSBhdHRlbXB0ICogY2ZnLnBvbGxpbmdJbnRlcnZhbFNlY29uZHM7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgICAgICAgQ3JlYXRpbmcgc25hcHNob3QuLi4gU3RhdHVzOiAke29wdGltaXphdGlvblN0YXR1c30sIFN0YXRlOiAke3N0YXRlfSAoJHtlbGFwc2VkfXMgZWxhcHNlZClgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGF3YWl0IF90ZXN0YWJsZS5zbGVlcChjZmcucG9sbGluZ0ludGVydmFsU2Vjb25kcyAqIDEwMDApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJZiBzbmFwc2hvdCBzdWNjZWVkZWQsIGJyZWFrIG91dCBvZiByZXRyeSBsb29wXG4gICAgICAgICAgICBpZiAoc3RhdGUgPT09ICdBY3RpdmUnKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE9ubHkgcmV0cnkgb24gRmFpbGVkIHN0YXRlIFx1MjAxNCB0aW1lb3V0IChQZW5kaW5nKSBzaG91bGQgbm90IHJldHJ5XG4gICAgICAgICAgICBpZiAoc3RhdGUgIT09ICdGYWlsZWQnKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIElmIGZhaWxlZCBhbmQgd2UgaGF2ZSByZXRyaWVzIGxlZnQsIGxvZyBhbmQgY29udGludWVcbiAgICAgICAgICAgIGlmIChwdWJsaXNoQXR0ZW1wdCA8IE1BWF9QVUJMSVNIX1JFVFJJRVMpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgICAgICAgU25hcHNob3QgZmFpbGVkIG9uIGF0dGVtcHQgJHtwdWJsaXNoQXR0ZW1wdH0sIHdpbGwgcmV0cnkgd2l0aCBuZXcgdmVyc2lvbi4uLmApO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGAgICAgICBSZWFzb246ICR7bGFzdEZhaWxSZWFzb259YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBZnRlciBhbGwgcmV0cmllcywgY2hlY2sgZmluYWwgc3RhdGVcbiAgICAgICAgaWYgKHN0YXRlID09PSAnRmFpbGVkJykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYCAgICAgIEFsbCAke01BWF9QVUJMSVNIX1JFVFJJRVN9IHNuYXBzaG90IGF0dGVtcHRzIGZhaWxlZC5gKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGAgICAgICBSZWFzb246ICR7bGFzdEZhaWxSZWFzb259YCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnICAgICAgW0xhbWJkYSBLYXRhXSBTbmFwU3RhcnQgb3B0aW1pemF0aW9uIGZhaWxlZC4gQWxpYXMgd2lsbCBiZSBjcmVhdGVkIHBvaW50aW5nJyk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnICAgICAgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uLiBGdW5jdGlvbiByZW1haW5zIG9wZXJhdGlvbmFsIHdpdGhvdXQgU25hcFN0YXJ0LicpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coJyAgICAgIFJldmlldyBDbG91ZFdhdGNoIGxvZ3MgZm9yIGluaXRpYWxpemF0aW9uIGVycm9ycy4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIGlmIHdlIHRpbWVkIG91dFxuICAgICAgICBpZiAoc3RhdGUgIT09ICdBY3RpdmUnICYmIHN0YXRlICE9PSAnRmFpbGVkJykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYCAgICAgIFdhcm5pbmc6IFNuYXBzaG90IGNyZWF0aW9uIHRpbWVvdXQgYWZ0ZXIgJHtjZmcuc25hcHNob3RUaW1lb3V0U2Vjb25kc31zYCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgICAgICAgRmluYWwgc3RhdHVzOiBPcHRpbWl6YXRpb25TdGF0dXM9JHtvcHRpbWl6YXRpb25TdGF0dXN9LCBTdGF0ZT0ke3N0YXRlfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3RlcCA1OiBDcmVhdGUgb3IgdXBkYXRlIGFsaWFzXG4gICAgICAgIGNvbnNvbGUubG9nKGBbNS81XSBDcmVhdGluZy91cGRhdGluZyBhbGlhcyAnJHtjZmcuYWxpYXNOYW1lfScgLT4gdmVyc2lvbiAke3ZlcnNpb259Li4uYCk7XG4gICAgICAgIGxldCBhbGlhc0Fybjogc3RyaW5nO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBUcnkgdG8gZ2V0IGV4aXN0aW5nIGFsaWFzXG4gICAgICAgICAgICBhd2FpdCBsYW1iZGFDbGllbnQuc2VuZChuZXcgR2V0QWxpYXNDb21tYW5kKHtcbiAgICAgICAgICAgICAgICBGdW5jdGlvbk5hbWU6IGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICBOYW1lOiBjZmcuYWxpYXNOYW1lLFxuICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAvLyBBbGlhcyBleGlzdHMsIHVwZGF0ZSBpdFxuICAgICAgICAgICAgY29uc3QgdXBkYXRlUmVzcG9uc2UgPSBhd2FpdCBsYW1iZGFDbGllbnQuc2VuZChuZXcgVXBkYXRlQWxpYXNDb21tYW5kKHtcbiAgICAgICAgICAgICAgICBGdW5jdGlvbk5hbWU6IGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICBOYW1lOiBjZmcuYWxpYXNOYW1lLFxuICAgICAgICAgICAgICAgIEZ1bmN0aW9uVmVyc2lvbjogdmVyc2lvbixcbiAgICAgICAgICAgICAgICBEZXNjcmlwdGlvbjogJ0xhbWJkYSBLYXRhIFNuYXBTdGFydC1lbmFibGVkIHZlcnNpb24nLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgYWxpYXNBcm4gPSB1cGRhdGVSZXNwb25zZS5BbGlhc0FybiE7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgICAgICAgVXBkYXRlZCBleGlzdGluZyBhbGlhczogJHthbGlhc0Fybn1gKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIC8vIENoZWNrIGJ5IGVycm9yIG5hbWUgZm9yIGJldHRlciB0ZXN0YWJpbGl0eVxuICAgICAgICAgICAgY29uc3QgaXNSZXNvdXJjZU5vdEZvdW5kID0gZXJyb3IgaW5zdGFuY2VvZiBSZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uIHx8XG4gICAgICAgICAgICAgICAgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgZXJyb3IubmFtZSA9PT0gJ1Jlc291cmNlTm90Rm91bmRFeGNlcHRpb24nKTtcblxuICAgICAgICAgICAgaWYgKGlzUmVzb3VyY2VOb3RGb3VuZCkge1xuICAgICAgICAgICAgICAgIC8vIEFsaWFzIGRvZXNuJ3QgZXhpc3QsIGNyZWF0ZSBpdFxuICAgICAgICAgICAgICAgIGNvbnN0IGNyZWF0ZVJlc3BvbnNlID0gYXdhaXQgbGFtYmRhQ2xpZW50LnNlbmQobmV3IENyZWF0ZUFsaWFzQ29tbWFuZCh7XG4gICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uTmFtZTogZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICBOYW1lOiBjZmcuYWxpYXNOYW1lLFxuICAgICAgICAgICAgICAgICAgICBGdW5jdGlvblZlcnNpb246IHZlcnNpb24sXG4gICAgICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uOiAnTGFtYmRhIEthdGEgU25hcFN0YXJ0LWVuYWJsZWQgdmVyc2lvbicsXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIGFsaWFzQXJuID0gY3JlYXRlUmVzcG9uc2UuQWxpYXNBcm4hO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGAgICAgICBDcmVhdGVkIG5ldyBhbGlhczogJHthbGlhc0Fybn1gKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zb2xlLmxvZygnXFxuJyArICc9Jy5yZXBlYXQoNjApKTtcbiAgICAgICAgY29uc29sZS5sb2coJ1NOQVBTVEFSVCBBQ1RJVkFUSU9OIENPTVBMRVRFJyk7XG4gICAgICAgIGNvbnNvbGUubG9nKCc9Jy5yZXBlYXQoNjApKTtcbiAgICAgICAgY29uc29sZS5sb2coYFZlcnNpb246ICR7dmVyc2lvbn1gKTtcbiAgICAgICAgY29uc29sZS5sb2coYEFsaWFzOiAke2NmZy5hbGlhc05hbWV9IC0+ICR7YWxpYXNBcm59YCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGBPcHRpbWl6YXRpb25TdGF0dXM6ICR7b3B0aW1pemF0aW9uU3RhdHVzfWApO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2ZXJzaW9uLFxuICAgICAgICAgICAgYWxpYXNOYW1lOiBjZmcuYWxpYXNOYW1lLFxuICAgICAgICAgICAgYWxpYXNBcm4sXG4gICAgICAgICAgICBvcHRpbWl6YXRpb25TdGF0dXMsXG4gICAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gQ2F0Y2ggQWNjZXNzRGVuaWVkRXhjZXB0aW9uIGZyb20gYW55IExhbWJkYSBBUEkgY2FsbCAoc2VuZCBjYWxscylcbiAgICAgICAgLy8gdGhhdCBpc24ndCBhbHJlYWR5IGhhbmRsZWQgYnkgdGhlIHdhaXRlciB0cnktY2F0Y2ggYmxvY2tzXG4gICAgICAgIGlmIChpc0FjY2Vzc0RlbmllZEVycm9yKGVycm9yKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIGBJbnN1ZmZpY2llbnQgcGVybWlzc2lvbnMgdG8gYWN0aXZhdGUgU25hcFN0YXJ0IG9uICcke2Z1bmN0aW9uTmFtZX0nLiBgICtcbiAgICAgICAgICAgICAgICBgRW5zdXJlIHRoZSBleGVjdXRpb24gcm9sZSBoYXMgdGhlIGZvbGxvd2luZyBwZXJtaXNzaW9uczogJHtSRVFVSVJFRF9QRVJNSVNTSU9OUy5qb2luKCcsICcpfWBcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxufVxuXG4vKipcbiAqIExhbWJkYSBoYW5kbGVyIGZvciBDbG91ZEZvcm1hdGlvbiBDdXN0b20gUmVzb3VyY2UuXG4gKlxuICogVGhpcyBoYW5kbGVyIGlzIGludm9rZWQgYnkgQ2xvdWRGb3JtYXRpb24gd2hlbiB0aGUgY3VzdG9tIHJlc291cmNlXG4gKiBpcyBjcmVhdGVkLCB1cGRhdGVkLCBvciBkZWxldGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaGFuZGxlcihldmVudDogQ3VzdG9tUmVzb3VyY2VFdmVudCk6IFByb21pc2U8Q3VzdG9tUmVzb3VyY2VSZXNwb25zZT4ge1xuICAgIGNvbnNvbGUubG9nKCdDdXN0b20gUmVzb3VyY2UgRXZlbnQ6JywgSlNPTi5zdHJpbmdpZnkoZXZlbnQsIG51bGwsIDIpKTtcblxuICAgIGNvbnN0IHsgUmVxdWVzdFR5cGUsIFN0YWNrSWQsIFJlcXVlc3RJZCwgTG9naWNhbFJlc291cmNlSWQsIFJlc291cmNlUHJvcGVydGllcyB9ID0gZXZlbnQ7XG4gICAgY29uc3QgZnVuY3Rpb25OYW1lID0gUmVzb3VyY2VQcm9wZXJ0aWVzLkZ1bmN0aW9uTmFtZTtcbiAgICBjb25zdCBhbGlhc05hbWUgPSBSZXNvdXJjZVByb3BlcnRpZXMuQWxpYXNOYW1lID8/ICdrYXRhJztcblxuICAgIC8vIFBoeXNpY2FsIHJlc291cmNlIElEIGZvcm1hdDoge2Z1bmN0aW9uTmFtZX06c25hcHN0YXJ0OnthbGlhc05hbWV9XG4gICAgY29uc3QgcGh5c2ljYWxSZXNvdXJjZUlkID0gZXZlbnQuUGh5c2ljYWxSZXNvdXJjZUlkID8/IGAke2Z1bmN0aW9uTmFtZX06c25hcHN0YXJ0OiR7YWxpYXNOYW1lfWA7XG5cbiAgICBjb25zdCBiYXNlUmVzcG9uc2U6IE9taXQ8Q3VzdG9tUmVzb3VyY2VSZXNwb25zZSwgJ1N0YXR1cycgfCAnUmVhc29uJyB8ICdEYXRhJz4gPSB7XG4gICAgICAgIFBoeXNpY2FsUmVzb3VyY2VJZDogcGh5c2ljYWxSZXNvdXJjZUlkLFxuICAgICAgICBTdGFja0lkLFxuICAgICAgICBSZXF1ZXN0SWQsXG4gICAgICAgIExvZ2ljYWxSZXNvdXJjZUlkLFxuICAgIH07XG5cbiAgICB0cnkge1xuICAgICAgICBpZiAoUmVxdWVzdFR5cGUgPT09ICdEZWxldGUnKSB7XG4gICAgICAgICAgICAvLyBPbiBkZWxldGUsIHdlIGRvbid0IHJlbW92ZSBTbmFwU3RhcnQgb3IgdGhlIGFsaWFzXG4gICAgICAgICAgICAvLyBUaGUgTGFtYmRhIGZ1bmN0aW9uIGl0c2VsZiB3aWxsIGJlIGRlbGV0ZWQgYnkgQ2xvdWRGb3JtYXRpb25cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdEZWxldGUgcmVxdWVzdCAtIG5vIGFjdGlvbiBuZWVkZWQgKExhbWJkYSB3aWxsIGJlIGRlbGV0ZWQgYnkgQ2xvdWRGb3JtYXRpb24pJyk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLmJhc2VSZXNwb25zZSxcbiAgICAgICAgICAgICAgICBTdGF0dXM6ICdTVUNDRVNTJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDcmVhdGUgb3IgVXBkYXRlIC0gYWN0aXZhdGUgU25hcFN0YXJ0XG4gICAgICAgIGNvbnN0IGxhbWJkYUNsaWVudCA9IG5ldyBMYW1iZGFDbGllbnQoe30pO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFjdGl2YXRlU25hcFN0YXJ0KGxhbWJkYUNsaWVudCwgZnVuY3Rpb25OYW1lLCB7IGFsaWFzTmFtZSB9KTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uYmFzZVJlc3BvbnNlLFxuICAgICAgICAgICAgU3RhdHVzOiAnU1VDQ0VTUycsXG4gICAgICAgICAgICBEYXRhOiB7XG4gICAgICAgICAgICAgICAgVmVyc2lvbjogcmVzdWx0LnZlcnNpb24sXG4gICAgICAgICAgICAgICAgQWxpYXNOYW1lOiByZXN1bHQuYWxpYXNOYW1lLFxuICAgICAgICAgICAgICAgIEFsaWFzQXJuOiByZXN1bHQuYWxpYXNBcm4sXG4gICAgICAgICAgICAgICAgT3B0aW1pemF0aW9uU3RhdHVzOiByZXN1bHQub3B0aW1pemF0aW9uU3RhdHVzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1NuYXBTdGFydCBhY3RpdmF0aW9uIGZhaWxlZDonLCBlcnJvck1lc3NhZ2UpO1xuXG4gICAgICAgIC8vIE9uIFVwZGF0ZSByZXF1ZXN0cywgcmV0dXJuIFNVQ0NFU1MgZXZlbiBvbiBmYWlsdXJlIHRvIHByZXZlbnRcbiAgICAgICAgLy8gQ2xvdWRGb3JtYXRpb24gcm9sbGJhY2sgZnJvbSBnZXR0aW5nIHN0dWNrIGluIFVQREFURV9ST0xMQkFDS19GQUlMRUQuXG4gICAgICAgIC8vIFJldHVybmluZyBGQUlMRUQgZnJvbSBhbiBVcGRhdGUgZHVyaW5nIHJvbGxiYWNrIGJsb2NrcyB0aGUgZW50aXJlIHN0YWNrLlxuICAgICAgICAvLyBUaGUgZnVuY3Rpb24gcmVtYWlucyBvcGVyYXRpb25hbCB3aXRoIGl0cyBwcmV2aW91cyBjb25maWd1cmF0aW9uLlxuICAgICAgICBpZiAoUmVxdWVzdFR5cGUgPT09ICdVcGRhdGUnKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnUmV0dXJuaW5nIFNVQ0NFU1MgZm9yIFVwZGF0ZSByZXF1ZXN0IHRvIHByZXZlbnQgcm9sbGJhY2sgZGVhZGxvY2suJyk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnVGhlIGZ1bmN0aW9uIHdpbGwgY29udGludWUgd2l0aCBpdHMgcHJldmlvdXMgU25hcFN0YXJ0IGNvbmZpZ3VyYXRpb24uJyk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLmJhc2VSZXNwb25zZSxcbiAgICAgICAgICAgICAgICBTdGF0dXM6ICdTVUNDRVNTJyxcbiAgICAgICAgICAgICAgICBSZWFzb246IGBTbmFwU3RhcnQgYWN0aXZhdGlvbiBmYWlsZWQgKG5vbi1ibG9ja2luZyk6ICR7ZXJyb3JNZXNzYWdlfWAsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmJhc2VSZXNwb25zZSxcbiAgICAgICAgICAgIFN0YXR1czogJ0ZBSUxFRCcsXG4gICAgICAgICAgICBSZWFzb246IGBTbmFwU3RhcnQgYWN0aXZhdGlvbiBmYWlsZWQ6ICR7ZXJyb3JNZXNzYWdlfWAsXG4gICAgICAgIH07XG4gICAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogInlhQUFBLElBQUFBLEVBQUEsR0FBQUMsRUFBQUQsRUFBQSxlQUFBRSxFQUFBLHNCQUFBQyxFQUFBLFlBQUFDLElBQUEsZUFBQUMsRUFBQUwsR0E4QkEsSUFBQU0sRUFXTyxrQ0F5R0RDLEVBQXNCLEVBTXRCQyxFQUFpQixLQU9qQkMsRUFBdUIs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OiBbInNuYXBzdGFydF9hY3RpdmF0b3JfZXhwb3J0cyIsICJfX2V4cG9ydCIsICJfdGVzdGFibGUiLCAiYWN0aXZhdGVTbmFwU3RhcnQiLCAiaGFuZGxlciIsICJfX3RvQ29tbW9uSlMiLCAiaW1wb3J0X2NsaWVudF9sYW1iZGEiLCAiTUFYX1BVQkxJU0hfUkVUUklFUyIsICJSRVRSWV9ERUxBWV9NUyIsICJQUkVfUFVCTElTSF9ERUxBWV9NUyIsICJERUZBVUxUX0NPTkZJRyIsICJtcyIsICJyZXNvbHZlIiwgImlzUmVzb3VyY2VOb3RGb3VuZEVycm9yIiwgImVycm9yIiwgImNhdXNlIiwgIlJFUVVJUkVEX1BFUk1JU1NJT05TIiwgImlzQWNjZXNzRGVuaWVkRXJyb3IiLCAibGFtYmRhQ2xpZW50IiwgImZ1bmN0aW9uTmFtZSIsICJjb25maWciLCAiY2ZnIiwgIm1heEF0dGVtcHRzIiwgInZlcnNpb24iLCAib3B0aW1pemF0aW9uU3RhdHVzIiwgInN0YXRlIiwgImxhc3RGYWlsUmVhc29uIiwgInB1Ymxpc2hBdHRlbXB0IiwgImF0dGVtcHQiLCAidmVyc2lvbkNvbmZpZyIsICJlbGFwc2VkIiwgImFsaWFzQXJuIiwgImV2ZW50IiwgIlJlcXVlc3RUeXBlIiwgIlN0YWNrSWQiLCAiUmVxdWVzdElkIiwgIkxvZ2ljYWxSZXNvdXJjZUlkIiwgIlJlc291cmNlUHJvcGVydGllcyIsICJhbGlhc05hbWUiLCAiYmFzZVJlc3BvbnNlIiwgInJlc3VsdCIsICJlcnJvck1lc3NhZ2UiXQp9Cg==
1
+ "use strict";var R=Object.defineProperty;var F=Object.getOwnPropertyDescriptor;var $=Object.getOwnPropertyNames;var y=Object.prototype.hasOwnProperty;var v=(t,e)=>{for(var u in e)R(t,u,{get:e[u],enumerable:!0})},C=(t,e,u,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let c of $(e))!y.call(t,c)&&c!==u&&R(t,c,{get:()=>e[c],enumerable:!(a=F(e,c))||a.enumerable});return t};var I=t=>C(R({},"__esModule",{value:!0}),t);var x={};v(x,{_testable:()=>g,activateSnapStart:()=>A,handler:()=>P});module.exports=I(x);var o=require("@aws-sdk/client-lambda"),S=5,N=15e3,L=3e3,D={snapshotTimeoutSeconds:180,pollingIntervalSeconds:2,aliasName:"kata",_prePublishDelayMs:L,_retryDelayMs:N},g={sleep(t){return new Promise(e=>setTimeout(e,t))}};function b(t){if(t instanceof o.ResourceNotFoundException)return!0;if(t instanceof Error){if(t.name==="ResourceNotFoundException")return!0;let e=t.cause;if(e instanceof o.ResourceNotFoundException||e instanceof Error&&e.name==="ResourceNotFoundException")return!0}return!1}var h=["lambda:GetFunction","lambda:GetFunctionConfiguration","lambda:UpdateFunctionConfiguration","lambda:PublishVersion","lambda:GetAlias","lambda:CreateAlias","lambda:UpdateAlias"];function w(t){if(t instanceof Error){if(t.name==="AccessDeniedException")return!0;let e=t.cause;if(e instanceof Error&&e.name==="AccessDeniedException")return!0}return!1}async function A(t,e,u){let a={...D,...u},c=Math.ceil(a.snapshotTimeoutSeconds/a.pollingIntervalSeconds);console.log("[Lambda Kata] Deterministic initialization"),console.log(`Function: ${e}`),console.log(`Timeout: ${a.snapshotTimeoutSeconds}s, Polling: ${a.pollingIntervalSeconds}s`),console.log(`Max publish retries: ${S}`);try{try{await(0,o.waitUntilFunctionActiveV2)({client:t,maxWaitTime:60},{FunctionName:e})}catch(n){throw b(n)?new Error(`Lambda function '${e}' does not exist. Verify the function name or ARN is correct.`):w(n)?new Error(`Insufficient permissions to activate SnapStart on '${e}'. Ensure the execution role has the following permissions: ${h.join(", ")}`):n}console.log(`
2
+ [Lambda Kata] Preparing low-latency cold-start runtime...`),await t.send(new o.UpdateFunctionConfigurationCommand({FunctionName:e,SnapStart:{ApplyOn:"PublishedVersions"}}));try{await(0,o.waitUntilFunctionUpdatedV2)({client:t,maxWaitTime:120},{FunctionName:e})}catch(n){throw b(n)?new Error(`Lambda function '${e}' does not exist. Verify the function name or ARN is correct.`):w(n)?new Error(`Insufficient permissions to activate SnapStart on '${e}'. Ensure the execution role has the following permissions: ${h.join(", ")}`):n}await g.sleep(a._prePublishDelayMs);let i="",p="Unknown",s="Unknown",m="";for(let n=1;n<=S;n++){console.log(`[Lambda Kata] Publishing optimized runtime version (attempt ${n}/${S})...`),n>1&&(console.log(` Waiting ${a._retryDelayMs/1e3}s before retry...`),await g.sleep(a._retryDelayMs),console.log(" Ensuring function is Active before re-publish..."),await(0,o.waitUntilFunctionActiveV2)({client:t,maxWaitTime:60},{FunctionName:e}),console.log(" Re-applying SnapStart config to force new version..."),await t.send(new o.UpdateFunctionConfigurationCommand({FunctionName:e,SnapStart:{ApplyOn:"PublishedVersions"}})),await(0,o.waitUntilFunctionUpdatedV2)({client:t,maxWaitTime:120},{FunctionName:e}),await g.sleep(a._prePublishDelayMs)),i=(await t.send(new o.PublishVersionCommand({FunctionName:e,Description:`SnapStart enabled - ${new Date().toISOString()} (attempt ${n})`}))).Version,console.log(` Published version: ${i}`),console.log("[Lambda Kata] Preparing pre-initialized runtime image..."),s="Unknown";for(let d=0;d<c;d++){let f=await t.send(new o.GetFunctionConfigurationCommand({FunctionName:e,Qualifier:i}));if(p=(f.SnapStart??{}).OptimizationStatus??"Unknown",s=f.State??"Unknown",s==="Active"){console.log(" SnapStart snapshot ready!"),console.log(` OptimizationStatus: ${p}`),console.log(` State: ${s}`);break}else if(s==="Failed"){m=f.StateReason??"Unknown",console.log(` Snapshot creation failed: ${m}`),console.log(` Snapshot creation failed: ${f.StateReasonCode}`);break}else if(d%10===0||d<5){let E=d*a.pollingIntervalSeconds;console.log(` Creating snapshot... Status: ${p}, State: ${s} (${E}s elapsed)`)}await g.sleep(a.pollingIntervalSeconds*1e3)}if(s==="Active"||s!=="Failed")break;n<S&&(console.log(` Snapshot failed on attempt ${n}, will retry with new version...`),console.log(` Reason: ${m}`))}if(s==="Failed")throw console.log(` All ${S} snapshot attempts failed.`),console.log(` Reason: ${m}`),console.log(""),console.log(" [Lambda Kata] SnapStart optimization failed. Cannot create alias on Failed version."),console.log(" Review CloudWatch logs for initialization errors."),console.log(" Common causes: missing Lambda layers, import errors, or runtime issues."),new Error(`SnapStart activation failed: All ${S} snapshot attempts failed. Reason: ${m}. Cannot create alias on a Failed version. Check CloudWatch logs for the Lambda function to diagnose initialization errors.`);s!=="Active"&&s!=="Failed"&&(console.log(` Warning: Snapshot creation timeout after ${a.snapshotTimeoutSeconds}s`),console.log(` Final status: OptimizationStatus=${p}, State=${s}`));let r;try{await t.send(new o.GetAliasCommand({FunctionName:e,Name:a.aliasName})),r=(await t.send(new o.UpdateAliasCommand({FunctionName:e,Name:a.aliasName,FunctionVersion:i,Description:"Lambda Kata SnapStart-enabled version"}))).AliasArn,console.log(` Updated existing alias: ${r}`)}catch(n){if(n instanceof o.ResourceNotFoundException||n instanceof Error&&n.name==="ResourceNotFoundException")r=(await t.send(new o.CreateAliasCommand({FunctionName:e,Name:a.aliasName,FunctionVersion:i,Description:"Lambda Kata SnapStart-enabled version"}))).AliasArn,console.log(` Created new alias: ${r}`);else throw n}return console.log(`[Lambda Kata] Version: ${i}`),console.log(`[Lambda Kata] Alias: ${a.aliasName} | ${r}`),{version:i,aliasName:a.aliasName,aliasArn:r,optimizationStatus:p}}catch(i){throw w(i)?new Error(`Insufficient permissions to activate SnapStart on '${e}'. Ensure the execution role has the following permissions: ${h.join(", ")}`):i}}async function P(t){console.log("[Lambda Kata] Custom Resource Event:",JSON.stringify(t,null,2));let{RequestType:e,StackId:u,RequestId:a,LogicalResourceId:c,ResourceProperties:i}=t,p=i.FunctionName,s=i.AliasName??"kata",r={PhysicalResourceId:t.PhysicalResourceId??`${p}:snapstart:${s}`,StackId:u,RequestId:a,LogicalResourceId:c};try{if(e==="Delete")return console.log("Delete request - no action needed (Lambda will be deleted by CloudFormation)"),{...r,Status:"SUCCESS"};let n=new o.LambdaClient({}),l=await A(n,p,{aliasName:s});return{...r,Status:"SUCCESS",Data:{Version:l.version,AliasName:l.aliasName,AliasArn:l.aliasArn,OptimizationStatus:l.optimizationStatus}}}catch(n){let l=n instanceof Error?n.message:String(n);return console.error("[Lambda Kata] Optimization error:",l),e==="Update"?{...r,Status:"SUCCESS",Reason:`SnapStart activation failed (non-blocking): ${l}`}:{...r,Status:"FAILED",Reason:`SnapStart activation failed: ${l}`}}}0&&(module.exports={_testable,activateSnapStart,handler});
3
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3NuYXBzdGFydC1hY3RpdmF0b3IudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qXG4gKiBBcGFjaGUtMi4wXG4gKiBDb3B5cmlnaHQgKEMpIDIwMjVcdTIwMTNwcmVzZW50IFJhbWFuIE1hcm96YXUsIFdvcmsgVGFyZ2V0IEluc2lnaHQgRnVuY3Rpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBDb250YWN0OiByYW1hbkB3b3JrdGlmLmNvbVxuICpcbiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMaWNlbnNlZCBXb3JrOiBsYW1iZGFfa2F0YV9ucG1fY2RrLCA8d29ya3RpZl9sYW1iZGFfa2F0YV9ucG1fY2RrPi5cbiAqIFVzZSBvZiB0aGlzIHNvZnR3YXJlIGlzIGdvdmVybmVkIGJ5IHRoZSBBcGFjaGUtMi4wOyBzZWUgdGhlIExJQ0VOU0UgZmlsZVxuICogb3IgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCBmb3IgZGV0YWlscy5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuICovXG5cbi8qKlxuICogU25hcFN0YXJ0IEFjdGl2YXRvciAtIEN1c3RvbSBSZXNvdXJjZSBIYW5kbGVyXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdGhlIExhbWJkYSBoYW5kbGVyIGZvciBhIENsb3VkRm9ybWF0aW9uIEN1c3RvbSBSZXNvdXJjZVxuICogdGhhdCBlbmFibGVzIFNuYXBTdGFydCBvbiBMYW1iZGEgZnVuY3Rpb25zIGFmdGVyIGRlcGxveW1lbnQuIFNuYXBTdGFydCByZXF1aXJlc1xuICogYXN5bmNocm9ub3VzIHdhaXRpbmcgZm9yIHNuYXBzaG90IGNyZWF0aW9uLCB3aGljaCBjYW5ub3QgYmUgZG9uZSBkdXJpbmcgQ0RLIHN5bnRoZXNpcy5cbiAqXG4gKiBUaGUgYWN0aXZhdGlvbiBwcm9jZXNzOlxuICogMS4gV2FpdCBmb3IgZnVuY3Rpb24gdG8gYmUgQWN0aXZlXG4gKiAyLiBFbmFibGUgU25hcFN0YXJ0IGNvbmZpZ3VyYXRpb25cbiAqIDMuIFdhaXQgZm9yIGNvbmZpZ3VyYXRpb24gdXBkYXRlXG4gKiA0LiBQdWJsaXNoIG5ldyB2ZXJzaW9uICh0cmlnZ2VycyBzbmFwc2hvdCBjcmVhdGlvbilcbiAqIDUuIFdhaXQgZm9yIHNuYXBzaG90IHRvIGJlIHJlYWR5ICh1cCB0byAzIG1pbnV0ZXMpXG4gKiA2LiBDcmVhdGUvdXBkYXRlICdrYXRhJyBhbGlhcyBwb2ludGluZyB0byB0aGUgbmV3IHZlcnNpb25cbiAqXG4gKiBAbW9kdWxlIHNuYXBzdGFydC1hY3RpdmF0b3JcbiAqL1xuXG5pbXBvcnQge1xuICAgIExhbWJkYUNsaWVudCxcbiAgICBVcGRhdGVGdW5jdGlvbkNvbmZpZ3VyYXRpb25Db21tYW5kLFxuICAgIFB1Ymxpc2hWZXJzaW9uQ29tbWFuZCxcbiAgICBHZXRGdW5jdGlvbkNvbmZpZ3VyYXRpb25Db21tYW5kLFxuICAgIENyZWF0ZUFsaWFzQ29tbWFuZCxcbiAgICBVcGRhdGVBbGlhc0NvbW1hbmQsXG4gICAgR2V0QWxpYXNDb21tYW5kLFxuICAgIFJlc291cmNlTm90Rm91bmRFeGNlcHRpb24sXG4gICAgd2FpdFVudGlsRnVuY3Rpb25VcGRhdGVkVjIsXG4gICAgd2FpdFVudGlsRnVuY3Rpb25BY3RpdmVWMixcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWxhbWJkYSc7XG5cbi8qKlxuICogQ3VzdG9tIFJlc291cmNlIGV2ZW50IGZyb20gQ2xvdWRGb3JtYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tUmVzb3VyY2VFdmVudCB7XG4gICAgUmVxdWVzdFR5cGU6ICdDcmVhdGUnIHwgJ1VwZGF0ZScgfCAnRGVsZXRlJztcbiAgICBTZXJ2aWNlVG9rZW46IHN0cmluZztcbiAgICBSZXNwb25zZVVSTDogc3RyaW5nO1xuICAgIFN0YWNrSWQ6IHN0cmluZztcbiAgICBSZXF1ZXN0SWQ6IHN0cmluZztcbiAgICBSZXNvdXJjZVR5cGU6IHN0cmluZztcbiAgICBMb2dpY2FsUmVzb3VyY2VJZDogc3RyaW5nO1xuICAgIFBoeXNpY2FsUmVzb3VyY2VJZD86IHN0cmluZztcbiAgICBSZXNvdXJjZVByb3BlcnRpZXM6IHtcbiAgICAgICAgU2VydmljZVRva2VuOiBzdHJpbmc7XG4gICAgICAgIEZ1bmN0aW9uTmFtZTogc3RyaW5nO1xuICAgICAgICBBbGlhc05hbWU/OiBzdHJpbmc7XG4gICAgfTtcbiAgICBPbGRSZXNvdXJjZVByb3BlcnRpZXM/OiB7XG4gICAgICAgIEZ1bmN0aW9uTmFtZTogc3RyaW5nO1xuICAgICAgICBBbGlhc05hbWU/OiBzdHJpbmc7XG4gICAgfTtcbn1cblxuLyoqXG4gKiBDdXN0b20gUmVzb3VyY2UgcmVzcG9uc2UgdG8gQ2xvdWRGb3JtYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tUmVzb3VyY2VSZXNwb25zZSB7XG4gICAgU3RhdHVzOiAnU1VDQ0VTUycgfCAnRkFJTEVEJztcbiAgICBSZWFzb24/OiBzdHJpbmc7XG4gICAgUGh5c2ljYWxSZXNvdXJjZUlkOiBzdHJpbmc7XG4gICAgU3RhY2tJZDogc3RyaW5nO1xuICAgIFJlcXVlc3RJZDogc3RyaW5nO1xuICAgIExvZ2ljYWxSZXNvdXJjZUlkOiBzdHJpbmc7XG4gICAgRGF0YT86IHtcbiAgICAgICAgVmVyc2lvbj86IHN0cmluZztcbiAgICAgICAgQWxpYXNOYW1lPzogc3RyaW5nO1xuICAgICAgICBBbGlhc0Fybj86IHN0cmluZztcbiAgICAgICAgT3B0aW1pemF0aW9uU3RhdHVzPzogc3RyaW5nO1xuICAgIH07XG59XG5cbi8qKlxuICogUmVzdWx0IG9mIGEgc3VjY2Vzc2Z1bCBTbmFwU3RhcnQgYWN0aXZhdGlvbiBjeWNsZS5cbiAqXG4gKiBSZXR1cm5lZCBieSB7QGxpbmsgYWN0aXZhdGVTbmFwU3RhcnR9IGFmdGVyIGVuYWJsaW5nIFNuYXBTdGFydCxcbiAqIHB1Ymxpc2hpbmcgYSB2ZXJzaW9uLCB3YWl0aW5nIGZvciBzbmFwc2hvdCByZWFkaW5lc3MsIGFuZCBjcmVhdGluZy91cGRhdGluZyBhbiBhbGlhcy5cbiAqXG4gKiBAc2VlIHtAbGluayBTbmFwU3RhcnRBY3RpdmF0b3JDb25maWd9IGZvciBjb25maWd1cmF0aW9uIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTbmFwU3RhcnRBY3RpdmF0aW9uUmVzdWx0IHtcbiAgICAvKiogVGhlIHB1Ymxpc2hlZCBMYW1iZGEgdmVyc2lvbiBudW1iZXIgKGUuZy4gXCI0MlwiKS4gKi9cbiAgICB2ZXJzaW9uOiBzdHJpbmc7XG4gICAgLyoqIFRoZSBhbGlhcyBuYW1lIHRoYXQgd2FzIGNyZWF0ZWQgb3IgdXBkYXRlZCAoZS5nLiBcImthdGFcIikuICovXG4gICAgYWxpYXNOYW1lOiBzdHJpbmc7XG4gICAgLyoqIFRoZSBmdWxsIEFSTiBvZiB0aGUgYWxpYXMgKGUuZy4gXCJhcm46YXdzOmxhbWJkYTp1cy1lYXN0LTE6MTIzNDU2Nzg5MDEyOmZ1bmN0aW9uOm15LWZuOmthdGFcIikuICovXG4gICAgYWxpYXNBcm46IHN0cmluZztcbiAgICAvKiogVGhlIFNuYXBTdGFydCBvcHRpbWl6YXRpb24gc3RhdHVzIG9mIHRoZSBwdWJsaXNoZWQgdmVyc2lvbiAoXCJPblwiLCBcIk9mZlwiLCBvciBcIlVua25vd25cIikuICovXG4gICAgb3B0aW1pemF0aW9uU3RhdHVzOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgU25hcFN0YXJ0IGFjdGl2YXRpb24gY3ljbGUuXG4gKlxuICogQWxsIHByb3BlcnRpZXMgYXJlIG9wdGlvbmFsIGFuZCBmYWxsIGJhY2sgdG8gc2Vuc2libGUgZGVmYXVsdHMuXG4gKlxuICogQHNlZSB7QGxpbmsgYWN0aXZhdGVTbmFwU3RhcnR9IGZvciB0aGUgZnVuY3Rpb24gdGhhdCBjb25zdW1lcyB0aGlzIGNvbmZpZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNuYXBTdGFydEFjdGl2YXRvckNvbmZpZyB7XG4gICAgLyoqXG4gICAgICogTWF4aW11bSB0aW1lIGluIHNlY29uZHMgdG8gd2FpdCBmb3Igc25hcHNob3QgY3JlYXRpb24gYmVmb3JlIHByb2NlZWRpbmcuXG4gICAgICogSWYgZXhjZWVkZWQsIGEgd2FybmluZyBpcyBsb2dnZWQgYW5kIGFsaWFzIGNyZWF0aW9uIGNvbnRpbnVlcy5cbiAgICAgKiBAZGVmYXVsdCAxODBcbiAgICAgKi9cbiAgICBzbmFwc2hvdFRpbWVvdXRTZWNvbmRzPzogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIEludGVydmFsIGluIHNlY29uZHMgYmV0d2VlbiBwb2xsaW5nIGF0dGVtcHRzIGZvciBzbmFwc2hvdCByZWFkaW5lc3MuXG4gICAgICogQGRlZmF1bHQgMlxuICAgICAqL1xuICAgIHBvbGxpbmdJbnRlcnZhbFNlY29uZHM/OiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogVGhlIExhbWJkYSBhbGlhcyBuYW1lIHRvIGNyZWF0ZSBvciB1cGRhdGUgYWZ0ZXIgcHVibGlzaGluZyBhIHZlcnNpb24uXG4gICAgICogQGRlZmF1bHQgJ2thdGEnXG4gICAgICovXG4gICAgYWxpYXNOYW1lPzogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbCBPdmVycmlkZSBwcmUtcHVibGlzaCBkZWxheSBpbiBtaWxsaXNlY29uZHMgKGZvciB0ZXN0aW5nIG9ubHkpLlxuICAgICAqIEBkZWZhdWx0IDMwMDBcbiAgICAgKi9cbiAgICBfcHJlUHVibGlzaERlbGF5TXM/OiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogQGludGVybmFsIE92ZXJyaWRlIHJldHJ5IGRlbGF5IGluIG1pbGxpc2Vjb25kcyAoZm9yIHRlc3Rpbmcgb25seSkuXG4gICAgICogQGRlZmF1bHQgNTAwMFxuICAgICAqL1xuICAgIF9yZXRyeURlbGF5TXM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogTWF4aW11bSBudW1iZXIgb2YgUHVibGlzaFZlcnNpb24gKyBzbmFwc2hvdCBwb2xsaW5nIGF0dGVtcHRzLlxuICogRWFjaCByZXRyeSBwdWJsaXNoZXMgYSBORVcgdmVyc2lvbiAobmV3IHNuYXBzaG90IGF0dGVtcHQpLlxuICogQm91bmRlZCB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzOyB0b3RhbCB3b3JzdC1jYXNlIHRpbWU6XG4gKiA1ICogKDE1cyBkZWxheSArIHB1Ymxpc2ggKyAxODBzIHBvbGwpIFx1MjI0OCAxNm1pbiwgd2l0aGluIExhbWJkYSAxNW1pbiBsaW1pdFxuICogKGJ1dCBzbmFwc2hvdCB0aW1lb3V0IGlzIHR5cGljYWxseSBtdWNoIHNob3J0ZXIgdGhhbiAxODBzIHBlciBhdHRlbXB0KS5cbiAqL1xuY29uc3QgTUFYX1BVQkxJU0hfUkVUUklFUyA9IDU7XG5cbi8qKlxuICogRGVsYXkgaW4gbWlsbGlzZWNvbmRzIGJlZm9yZSByZXRyeWluZyBhIGZhaWxlZCBzbmFwc2hvdCBjcmVhdGlvbi5cbiAqIFNldCB0byAxNXMgdG8gZ2l2ZSB0cmFuc2llbnQgTGFtYmRhIGluaXQgZmFpbHVyZXMgdGltZSB0byBjbGVhci5cbiAqL1xuY29uc3QgUkVUUllfREVMQVlfTVMgPSAxNTAwMDtcblxuLyoqXG4gKiBEZWxheSBpbiBtaWxsaXNlY29uZHMgYWZ0ZXIgd2FpdFVudGlsRnVuY3Rpb25VcGRhdGVkVjIgY29tcGxldGVzLFxuICogYmVmb3JlIHRoZSBmaXJzdCBQdWJsaXNoVmVyc2lvbiBjYWxsLiBNaXRpZ2F0ZXMgZXZlbnR1YWwgY29uc2lzdGVuY3lcbiAqIGJldHdlZW4gTGFtYmRhIGNvbmZpZyB1cGRhdGUgcHJvcGFnYXRpb24gYW5kIFB1Ymxpc2hWZXJzaW9uIGluaXQgcGhhc2UuXG4gKi9cbmNvbnN0IFBSRV9QVUJMSVNIX0RFTEFZX01TID0gMzAwMDtcblxuY29uc3QgREVGQVVMVF9DT05GSUc6IFJlcXVpcmVkPFNuYXBTdGFydEFjdGl2YXRvckNvbmZpZz4gPSB7XG4gICAgc25hcHNob3RUaW1lb3V0U2Vjb25kczogMTgwLFxuICAgIHBvbGxpbmdJbnRlcnZhbFNlY29uZHM6IDIsXG4gICAgYWxpYXNOYW1lOiAna2F0YScsXG4gICAgX3ByZVB1Ymxpc2hEZWxheU1zOiBQUkVfUFVCTElTSF9ERUxBWV9NUyxcbiAgICBfcmV0cnlEZWxheU1zOiBSRVRSWV9ERUxBWV9NUyxcbn07XG5cbi8qKlxuICogU2xlZXAgZm9yIHNwZWNpZmllZCBtaWxsaXNlY29uZHMuXG4gKiBAaW50ZXJuYWwgRXhwb3J0ZWQgZm9yIHRlc3RhYmlsaXR5IFx1MjAxNCB0ZXN0cyBjYW4gamVzdC5zcHlPbiB0byBhdm9pZCByZWFsIGRlbGF5cy5cbiAqL1xuZXhwb3J0IGNvbnN0IF90ZXN0YWJsZSA9IHtcbiAgICBzbGVlcChtczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpKTtcbiAgICB9LFxufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhbiBlcnJvciAob3IgaXRzIGNhdXNlIGNoYWluKSBpcyBhIFJlc291cmNlTm90Rm91bmRFeGNlcHRpb24uXG4gKlxuICogQVdTIFNESyB2MyB3YWl0ZXJzIG1heSB0aHJvdyB0aGUgdW5kZXJseWluZyBzZXJ2aWNlIGV4Y2VwdGlvbiBkaXJlY3RseSxcbiAqIG9yIHdyYXAgaXQgaW4gYSB3YWl0ZXItc3RhdGUgZXJyb3IuIFRoaXMgaGVscGVyIGluc3BlY3RzIGJvdGggdGhlIGVycm9yXG4gKiBpdHNlbGYgYW5kIGl0cyBgY2F1c2VgIHByb3BlcnR5IHRvIGRldGVjdCBlaXRoZXIgY2FzZS5cbiAqL1xuZnVuY3Rpb24gaXNSZXNvdXJjZU5vdEZvdW5kRXJyb3IoZXJyb3I6IHVua25vd24pOiBib29sZWFuIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBSZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IubmFtZSA9PT0gJ1Jlc291cmNlTm90Rm91bmRFeGNlcHRpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBXYWl0ZXJzIG1heSB3cmFwIHRoZSBzZXJ2aWNlIGV4Y2VwdGlvbiBpbiBhIGNhdXNlIGNoYWluXG4gICAgICAgIGNvbnN0IGNhdXNlID0gKGVycm9yIGFzIEVycm9yICYgeyBjYXVzZT86IHVua25vd24gfSkuY2F1c2U7XG4gICAgICAgIGlmIChjYXVzZSBpbnN0YW5jZW9mIFJlc291cmNlTm90Rm91bmRFeGNlcHRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYXVzZSBpbnN0YW5jZW9mIEVycm9yICYmIGNhdXNlLm5hbWUgPT09ICdSZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIFJlcXVpcmVkIElBTSBwZXJtaXNzaW9ucyBmb3IgU25hcFN0YXJ0IGFjdGl2YXRpb24uXG4gKiBVc2VkIGluIGVycm9yIG1lc3NhZ2VzIHRvIGd1aWRlIHVzZXJzIHdoZW4gQWNjZXNzRGVuaWVkRXhjZXB0aW9uIG9jY3Vycy5cbiAqL1xuY29uc3QgUkVRVUlSRURfUEVSTUlTU0lPTlM6IHJlYWRvbmx5IHN0cmluZ1tdID0gW1xuICAgICdsYW1iZGE6R2V0RnVuY3Rpb24nLFxuICAgICdsYW1iZGE6R2V0RnVuY3Rpb25Db25maWd1cmF0aW9uJyxcbiAgICAnbGFtYmRhOlVwZGF0ZUZ1bmN0aW9uQ29uZmlndXJhdGlvbicsXG4gICAgJ2xhbWJkYTpQdWJsaXNoVmVyc2lvbicsXG4gICAgJ2xhbWJkYTpHZXRBbGlhcycsXG4gICAgJ2xhbWJkYTpDcmVhdGVBbGlhcycsXG4gICAgJ2xhbWJkYTpVcGRhdGVBbGlhcycsXG5dO1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGFuIGVycm9yIGlzIGFuIEFjY2Vzc0RlbmllZEV4Y2VwdGlvbi5cbiAqXG4gKiBBV1MgU0RLIHYzIG1heSB0aHJvdyBBY2Nlc3NEZW5pZWRFeGNlcHRpb24gZGlyZWN0bHkgb3Igd3JhcCBpdC5cbiAqIFRoaXMgaGVscGVyIGluc3BlY3RzIGJvdGggdGhlIGVycm9yIGl0c2VsZiBhbmQgaXRzIGBjYXVzZWAgcHJvcGVydHkuXG4gKi9cbmZ1bmN0aW9uIGlzQWNjZXNzRGVuaWVkRXJyb3IoZXJyb3I6IHVua25vd24pOiBib29sZWFuIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IubmFtZSA9PT0gJ0FjY2Vzc0RlbmllZEV4Y2VwdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNhdXNlID0gKGVycm9yIGFzIEVycm9yICYgeyBjYXVzZT86IHVua25vd24gfSkuY2F1c2U7XG4gICAgICAgIGlmIChjYXVzZSBpbnN0YW5jZW9mIEVycm9yICYmIGNhdXNlLm5hbWUgPT09ICdBY2Nlc3NEZW5pZWRFeGNlcHRpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cblxuLyoqXG4gKiBBY3RpdmF0ZXMgU25hcFN0YXJ0IG9uIGEgTGFtYmRhIGZ1bmN0aW9uLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gcGVyZm9ybXMgdGhlIGZ1bGwgU25hcFN0YXJ0IGFjdGl2YXRpb24gY3ljbGU6XG4gKiAxLiBFbnN1cmVzIGZ1bmN0aW9uIGlzIEFjdGl2ZVxuICogMi4gRW5hYmxlcyBTbmFwU3RhcnQgY29uZmlndXJhdGlvblxuICogMy4gV2FpdHMgZm9yIGNvbmZpZ3VyYXRpb24gdXBkYXRlXG4gKiA0LiBQdWJsaXNoZXMgbmV3IHZlcnNpb24gKHdpdGggcmV0cnkgb24gc25hcHNob3QgZmFpbHVyZSlcbiAqIDUuIFdhaXRzIGZvciBzbmFwc2hvdCBjcmVhdGlvblxuICogNi4gQ3JlYXRlcy91cGRhdGVzIGFsaWFzXG4gKlxuICogU3RlcHMgMys0IGFyZSB3cmFwcGVkIGluIGEgcmV0cnkgbG9vcDogb24gU3RhdGU6IEZhaWxlZCwgYSBuZXcgdmVyc2lvblxuICogaXMgcHVibGlzaGVkICh1cCB0byBNQVhfUFVCTElTSF9SRVRSSUVTIGF0dGVtcHRzKSB0byBoYW5kbGUgdHJhbnNpZW50XG4gKiBpbml0aWFsaXphdGlvbiBmYWlsdXJlcyBkdXJpbmcgc25hcHNob3QgY3JlYXRpb24uXG4gKlxuICogQHBhcmFtIGxhbWJkYUNsaWVudCAtIEFXUyBMYW1iZGEgY2xpZW50XG4gKiBAcGFyYW0gZnVuY3Rpb25OYW1lIC0gTmFtZSBvciBBUk4gb2YgdGhlIExhbWJkYSBmdW5jdGlvblxuICogQHBhcmFtIGNvbmZpZyAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb25cbiAqIEByZXR1cm5zIEFjdGl2YXRpb24gcmVzdWx0IHdpdGggdmVyc2lvbiBhbmQgYWxpYXMgaW5mb3JtYXRpb25cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFjdGl2YXRlU25hcFN0YXJ0KFxuICAgIGxhbWJkYUNsaWVudDogTGFtYmRhQ2xpZW50LFxuICAgIGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuICAgIGNvbmZpZz86IFNuYXBTdGFydEFjdGl2YXRvckNvbmZpZyxcbik6IFByb21pc2U8U25hcFN0YXJ0QWN0aXZhdGlvblJlc3VsdD4ge1xuICAgIGNvbnN0IGNmZyA9IHsgLi4uREVGQVVMVF9DT05GSUcsIC4uLmNvbmZpZyB9O1xuICAgIGNvbnN0IG1heEF0dGVtcHRzID0gTWF0aC5jZWlsKGNmZy5zbmFwc2hvdFRpbWVvdXRTZWNvbmRzIC8gY2ZnLnBvbGxpbmdJbnRlcnZhbFNlY29uZHMpO1xuXG4gICAgY29uc29sZS5sb2coJ1tMYW1iZGEgS2F0YV0gRGV0ZXJtaW5pc3RpYyBpbml0aWFsaXphdGlvbicpO1xuICAgIGNvbnNvbGUubG9nKGBGdW5jdGlvbjogJHtmdW5jdGlvbk5hbWV9YCk7XG4gICAgY29uc29sZS5sb2coYFRpbWVvdXQ6ICR7Y2ZnLnNuYXBzaG90VGltZW91dFNlY29uZHN9cywgUG9sbGluZzogJHtjZmcucG9sbGluZ0ludGVydmFsU2Vjb25kc31zYCk7XG4gICAgY29uc29sZS5sb2coYE1heCBwdWJsaXNoIHJldHJpZXM6ICR7TUFYX1BVQkxJU0hfUkVUUklFU31gKTtcblxuICAgIHRyeSB7XG4gICAgICAgIC8vIFN0ZXAgMDogRW5zdXJlIGZ1bmN0aW9uIGlzIEFjdGl2ZSBiZWZvcmUgc3RhcnRpbmdcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ1xcblswLzVdIEVuc3VyaW5nIGZ1bmN0aW9uIGlzIEFjdGl2ZS4uLicpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgd2FpdFVudGlsRnVuY3Rpb25BY3RpdmVWMihcbiAgICAgICAgICAgICAgICB7IGNsaWVudDogbGFtYmRhQ2xpZW50LCBtYXhXYWl0VGltZTogNjAgfSxcbiAgICAgICAgICAgICAgICB7IEZ1bmN0aW9uTmFtZTogZnVuY3Rpb25OYW1lIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAoaXNSZXNvdXJjZU5vdEZvdW5kRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBMYW1iZGEgZnVuY3Rpb24gJyR7ZnVuY3Rpb25OYW1lfScgZG9lcyBub3QgZXhpc3QuIFZlcmlmeSB0aGUgZnVuY3Rpb24gbmFtZSBvciBBUk4gaXMgY29ycmVjdC5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc0FjY2Vzc0RlbmllZEVycm9yKGVycm9yKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgYEluc3VmZmljaWVudCBwZXJtaXNzaW9ucyB0byBhY3RpdmF0ZSBTbmFwU3RhcnQgb24gJyR7ZnVuY3Rpb25OYW1lfScuIGAgK1xuICAgICAgICAgICAgICAgICAgICBgRW5zdXJlIHRoZSBleGVjdXRpb24gcm9sZSBoYXMgdGhlIGZvbGxvd2luZyBwZXJtaXNzaW9uczogJHtSRVFVSVJFRF9QRVJNSVNTSU9OUy5qb2luKCcsICcpfWBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc29sZS5sb2coJyAgICAgIEZ1bmN0aW9uIGlzIEFjdGl2ZScpO1xuXG4gICAgICAgIC8vIFN0ZXAgMTogRW5hYmxlIFNuYXBTdGFydCBvbiB0aGUgZnVuY3Rpb25cbiAgICAgICAgY29uc29sZS5sb2coJ1xcbltMYW1iZGEgS2F0YV0gUHJlcGFyaW5nIGxvdy1sYXRlbmN5IGNvbGQtc3RhcnQgcnVudGltZS4uLicpO1xuICAgICAgICBhd2FpdCBsYW1iZGFDbGllbnQuc2VuZChuZXcgVXBkYXRlRnVuY3Rpb25Db25maWd1cmF0aW9uQ29tbWFuZCh7XG4gICAgICAgICAgICBGdW5jdGlvbk5hbWU6IGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgIFNuYXBTdGFydDogeyBBcHBseU9uOiAnUHVibGlzaGVkVmVyc2lvbnMnIH0sXG4gICAgICAgIH0pKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJyAgICAgIFNuYXBTdGFydCBjb25maWd1cmF0aW9uIHNlbnQnKTtcblxuICAgICAgICAvLyBTdGVwIDI6IFdhaXQgZm9yIGNvbmZpZ3VyYXRpb24gdXBkYXRlIHRvIGNvbXBsZXRlXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdbMi81XSBXYWl0aW5nIGZvciBjb25maWd1cmF0aW9uIHVwZGF0ZS4uLicpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgd2FpdFVudGlsRnVuY3Rpb25VcGRhdGVkVjIoXG4gICAgICAgICAgICAgICAgeyBjbGllbnQ6IGxhbWJkYUNsaWVudCwgbWF4V2FpdFRpbWU6IDEyMCB9LFxuICAgICAgICAgICAgICAgIHsgRnVuY3Rpb25OYW1lOiBmdW5jdGlvbk5hbWUgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChpc1Jlc291cmNlTm90Rm91bmRFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYExhbWJkYSBmdW5jdGlvbiAnJHtmdW5jdGlvbk5hbWV9JyBkb2VzIG5vdCBleGlzdC4gVmVyaWZ5IHRoZSBmdW5jdGlvbiBuYW1lIG9yIEFSTiBpcyBjb3JyZWN0LmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzQWNjZXNzRGVuaWVkRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICBgSW5zdWZmaWNpZW50IHBlcm1pc3Npb25zIHRvIGFjdGl2YXRlIFNuYXBTdGFydCBvbiAnJHtmdW5jdGlvbk5hbWV9Jy4gYCArXG4gICAgICAgICAgICAgICAgICAgIGBFbnN1cmUgdGhlIGV4ZWN1dGlvbiByb2xlIGhhcyB0aGUgZm9sbG93aW5nIHBlcm1pc3Npb25zOiAke1JFUVVJUkVEX1BFUk1JU1NJT05TLmpvaW4oJywgJyl9YFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb25zb2xlLmxvZygnICAgICAgQ29uZmlndXJhdGlvbiB1cGRhdGVkIHN1Y2Nlc3NmdWxseScpO1xuXG4gICAgICAgIC8vIFByZS1wdWJsaXNoIGRlbGF5OiBtaXRpZ2F0ZSBldmVudHVhbCBjb25zaXN0ZW5jeSBiZXR3ZWVuXG4gICAgICAgIC8vIExhbWJkYSBjb25maWcgdXBkYXRlIHByb3BhZ2F0aW9uIGFuZCBQdWJsaXNoVmVyc2lvbiBpbml0IHBoYXNlXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGAgICAgICBXYWl0aW5nICR7Y2ZnLl9wcmVQdWJsaXNoRGVsYXlNcyAvIDEwMDB9cyBmb3IgY29uZmlndXJhdGlvbiBwcm9wYWdhdGlvbi4uLmApO1xuICAgICAgICBhd2FpdCBfdGVzdGFibGUuc2xlZXAoY2ZnLl9wcmVQdWJsaXNoRGVsYXlNcyk7XG5cbiAgICAgICAgLy8gU3RlcHMgMys0OiBQdWJsaXNoIHZlcnNpb24gYW5kIHdhaXQgZm9yIHNuYXBzaG90IChXSVRIIFJFVFJZKVxuICAgICAgICBsZXQgdmVyc2lvbjogc3RyaW5nID0gJyc7XG4gICAgICAgIGxldCBvcHRpbWl6YXRpb25TdGF0dXMgPSAnVW5rbm93bic7XG4gICAgICAgIGxldCBzdGF0ZSA9ICdVbmtub3duJztcbiAgICAgICAgbGV0IGxhc3RGYWlsUmVhc29uID0gJyc7XG5cbiAgICAgICAgZm9yIChsZXQgcHVibGlzaEF0dGVtcHQgPSAxOyBwdWJsaXNoQXR0ZW1wdCA8PSBNQVhfUFVCTElTSF9SRVRSSUVTOyBwdWJsaXNoQXR0ZW1wdCsrKSB7XG4gICAgICAgICAgICAvLyBTdGVwIDM6IFB1Ymxpc2ggbmV3IHZlcnNpb24gdG8gY3JlYXRlIHNuYXBzaG90XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgW0xhbWJkYSBLYXRhXSBQdWJsaXNoaW5nIG9wdGltaXplZCBydW50aW1lIHZlcnNpb24gKGF0dGVtcHQgJHtwdWJsaXNoQXR0ZW1wdH0vJHtNQVhfUFVCTElTSF9SRVRSSUVTfSkuLi5gKTtcblxuICAgICAgICAgICAgLy8gQmVmb3JlIHJlLXB1Ymxpc2ggKGF0dGVtcHQgPiAxKSwgd2FpdCBhbmQgZW5zdXJlIGZ1bmN0aW9uIGlzIHJlYWR5XG4gICAgICAgICAgICBpZiAocHVibGlzaEF0dGVtcHQgPiAxKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYCAgICAgIFdhaXRpbmcgJHtjZmcuX3JldHJ5RGVsYXlNcyAvIDEwMDB9cyBiZWZvcmUgcmV0cnkuLi5gKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBfdGVzdGFibGUuc2xlZXAoY2ZnLl9yZXRyeURlbGF5TXMpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCcgICAgICBFbnN1cmluZyBmdW5jdGlvbiBpcyBBY3RpdmUgYmVmb3JlIHJlLXB1Ymxpc2guLi4nKTtcbiAgICAgICAgICAgICAgICBhd2FpdCB3YWl0VW50aWxGdW5jdGlvbkFjdGl2ZVYyKFxuICAgICAgICAgICAgICAgICAgICB7IGNsaWVudDogbGFtYmRhQ2xpZW50LCBtYXhXYWl0VGltZTogNjAgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBGdW5jdGlvbk5hbWU6IGZ1bmN0aW9uTmFtZSB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAvLyBGb3JjZSBhIGNvbmZpZyB1cGRhdGUgc28gUHVibGlzaFZlcnNpb24gY3JlYXRlcyBhIGdlbnVpbmVseSBuZXcgdmVyc2lvbi5cbiAgICAgICAgICAgICAgICAvLyBXaXRob3V0IHRoaXMsIFB1Ymxpc2hWZXJzaW9uIHJldHVybnMgdGhlIHNhbWUgKEZhaWxlZCkgdmVyc2lvbiBudW1iZXJcbiAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIExhbWJkYSBkZWR1cGxpY2F0ZXMgaWRlbnRpY2FsIGNvbmZpZ3VyYXRpb25zLlxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCcgICAgICBSZS1hcHBseWluZyBTbmFwU3RhcnQgY29uZmlnIHRvIGZvcmNlIG5ldyB2ZXJzaW9uLi4uJyk7XG4gICAgICAgICAgICAgICAgYXdhaXQgbGFtYmRhQ2xpZW50LnNlbmQobmV3IFVwZGF0ZUZ1bmN0aW9uQ29uZmlndXJhdGlvbkNvbW1hbmQoe1xuICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbk5hbWU6IGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgU25hcFN0YXJ0OiB7IEFwcGx5T246ICdQdWJsaXNoZWRWZXJzaW9ucycgfSxcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgYXdhaXQgd2FpdFVudGlsRnVuY3Rpb25VcGRhdGVkVjIoXG4gICAgICAgICAgICAgICAgICAgIHsgY2xpZW50OiBsYW1iZGFDbGllbnQsIG1heFdhaXRUaW1lOiAxMjAgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBGdW5jdGlvbk5hbWU6IGZ1bmN0aW9uTmFtZSB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhgICAgICAgV2FpdGluZyAke2NmZy5fcHJlUHVibGlzaERlbGF5TXMgLyAxMDAwfXMgZm9yIGNvbmZpZ3VyYXRpb24gcHJvcGFnYXRpb24uLi5gKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBfdGVzdGFibGUuc2xlZXAoY2ZnLl9wcmVQdWJsaXNoRGVsYXlNcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHB1Ymxpc2hSZXNwb25zZSA9IGF3YWl0IGxhbWJkYUNsaWVudC5zZW5kKG5ldyBQdWJsaXNoVmVyc2lvbkNvbW1hbmQoe1xuICAgICAgICAgICAgICAgIEZ1bmN0aW9uTmFtZTogZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uOiBgU25hcFN0YXJ0IGVuYWJsZWQgLSAke25ldyBEYXRlKCkudG9JU09TdHJpbmcoKX0gKGF0dGVtcHQgJHtwdWJsaXNoQXR0ZW1wdH0pYCxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHZlcnNpb24gPSBwdWJsaXNoUmVzcG9uc2UuVmVyc2lvbiE7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgICAgICAgUHVibGlzaGVkIHZlcnNpb246ICR7dmVyc2lvbn1gKTtcblxuICAgICAgICAgICAgLy8gU3RlcCA0OiBXYWl0IGZvciBzbmFwc2hvdCBvcHRpbWl6YXRpb24gYW5kIHZlcmlmeSBzdGF0dXNcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbTGFtYmRhIEthdGFdICAgUHJlcGFyaW5nIHByZS1pbml0aWFsaXplZCBydW50aW1lIGltYWdlLi4uJyk7XG4gICAgICAgICAgICBzdGF0ZSA9ICdVbmtub3duJztcblxuICAgICAgICAgICAgZm9yIChsZXQgYXR0ZW1wdCA9IDA7IGF0dGVtcHQgPCBtYXhBdHRlbXB0czsgYXR0ZW1wdCsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmVyc2lvbkNvbmZpZyA9IGF3YWl0IGxhbWJkYUNsaWVudC5zZW5kKG5ldyBHZXRGdW5jdGlvbkNvbmZpZ3VyYXRpb25Db21tYW5kKHtcbiAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25OYW1lOiBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgIFF1YWxpZmllcjogdmVyc2lvbixcbiAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBzbmFwU3RhcnRTdGF0dXMgPSB2ZXJzaW9uQ29uZmlnLlNuYXBTdGFydCA/PyB7fTtcbiAgICAgICAgICAgICAgICBvcHRpbWl6YXRpb25TdGF0dXMgPSBzbmFwU3RhcnRTdGF0dXMuT3B0aW1pemF0aW9uU3RhdHVzID8/ICdVbmtub3duJztcbiAgICAgICAgICAgICAgICBzdGF0ZSA9IHZlcnNpb25Db25maWcuU3RhdGUgPz8gJ1Vua25vd24nO1xuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlID09PSAnQWN0aXZlJykge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnICAgICAgU25hcFN0YXJ0IHNuYXBzaG90IHJlYWR5IScpO1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgICAgICAgT3B0aW1pemF0aW9uU3RhdHVzOiAke29wdGltaXphdGlvblN0YXR1c31gKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYCAgICAgIFN0YXRlOiAke3N0YXRlfWApO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSAnRmFpbGVkJykge1xuICAgICAgICAgICAgICAgICAgICBsYXN0RmFpbFJlYXNvbiA9IHZlcnNpb25Db25maWcuU3RhdGVSZWFzb24gPz8gJ1Vua25vd24nO1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgICAgICAgU25hcHNob3QgY3JlYXRpb24gZmFpbGVkOiAke2xhc3RGYWlsUmVhc29ufWApO1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgICAgICAgU25hcHNob3QgY3JlYXRpb24gZmFpbGVkOiAke3ZlcnNpb25Db25maWcuU3RhdGVSZWFzb25Db2RlfWApO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBTaG93IHByb2dyZXNzIGV2ZXJ5IDEwIGF0dGVtcHRzIG9yIGZpcnN0IDVcbiAgICAgICAgICAgICAgICAgICAgaWYgKGF0dGVtcHQgJSAxMCA9PT0gMCB8fCBhdHRlbXB0IDwgNSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWxhcHNlZCA9IGF0dGVtcHQgKiBjZmcucG9sbGluZ0ludGVydmFsU2Vjb25kcztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGAgICAgICBDcmVhdGluZyBzbmFwc2hvdC4uLiBTdGF0dXM6ICR7b3B0aW1pemF0aW9uU3RhdHVzfSwgU3RhdGU6ICR7c3RhdGV9ICgke2VsYXBzZWR9cyBlbGFwc2VkKWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYXdhaXQgX3Rlc3RhYmxlLnNsZWVwKGNmZy5wb2xsaW5nSW50ZXJ2YWxTZWNvbmRzICogMTAwMCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIElmIHNuYXBzaG90IHN1Y2NlZWRlZCwgYnJlYWsgb3V0IG9mIHJldHJ5IGxvb3BcbiAgICAgICAgICAgIGlmIChzdGF0ZSA9PT0gJ0FjdGl2ZScpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gT25seSByZXRyeSBvbiBGYWlsZWQgc3RhdGUgXHUyMDE0IHRpbWVvdXQgKFBlbmRpbmcpIHNob3VsZCBub3QgcmV0cnlcbiAgICAgICAgICAgIGlmIChzdGF0ZSAhPT0gJ0ZhaWxlZCcpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSWYgZmFpbGVkIGFuZCB3ZSBoYXZlIHJldHJpZXMgbGVmdCwgbG9nIGFuZCBjb250aW51ZVxuICAgICAgICAgICAgaWYgKHB1Ymxpc2hBdHRlbXB0IDwgTUFYX1BVQkxJU0hfUkVUUklFUykge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGAgICAgICBTbmFwc2hvdCBmYWlsZWQgb24gYXR0ZW1wdCAke3B1Ymxpc2hBdHRlbXB0fSwgd2lsbCByZXRyeSB3aXRoIG5ldyB2ZXJzaW9uLi4uYCk7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYCAgICAgIFJlYXNvbjogJHtsYXN0RmFpbFJlYXNvbn1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEFmdGVyIGFsbCByZXRyaWVzLCBjaGVjayBmaW5hbCBzdGF0ZVxuICAgICAgICBpZiAoc3RhdGUgPT09ICdGYWlsZWQnKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgICAgICAgQWxsICR7TUFYX1BVQkxJU0hfUkVUUklFU30gc25hcHNob3QgYXR0ZW1wdHMgZmFpbGVkLmApO1xuICAgICAgICAgICAgY29uc29sZS5sb2coYCAgICAgIFJlYXNvbjogJHtsYXN0RmFpbFJlYXNvbn1gKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCcgICAgICBbTGFtYmRhIEthdGFdIFNuYXBTdGFydCBvcHRpbWl6YXRpb24gZmFpbGVkLiBDYW5ub3QgY3JlYXRlIGFsaWFzIG9uIEZhaWxlZCB2ZXJzaW9uLicpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coJyAgICAgIFJldmlldyBDbG91ZFdhdGNoIGxvZ3MgZm9yIGluaXRpYWxpemF0aW9uIGVycm9ycy4nKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCcgICAgICBDb21tb24gY2F1c2VzOiBtaXNzaW5nIExhbWJkYSBsYXllcnMsIGltcG9ydCBlcnJvcnMsIG9yIHJ1bnRpbWUgaXNzdWVzLicpO1xuXG4gICAgICAgICAgICAvLyBDYW5ub3QgY3JlYXRlIGFsaWFzIG9uIEZhaWxlZCB2ZXJzaW9uIC0gQVdTIExhbWJkYSByZWplY3RzIHRoaXMgb3BlcmF0aW9uLlxuICAgICAgICAgICAgLy8gVGhyb3cgZXJyb3IgdG8gc2lnbmFsIHRoZSBmYWlsdXJlIGNsZWFybHkuXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgYFNuYXBTdGFydCBhY3RpdmF0aW9uIGZhaWxlZDogQWxsICR7TUFYX1BVQkxJU0hfUkVUUklFU30gc25hcHNob3QgYXR0ZW1wdHMgZmFpbGVkLiBgICtcbiAgICAgICAgICAgICAgICBgUmVhc29uOiAke2xhc3RGYWlsUmVhc29ufS4gYCArXG4gICAgICAgICAgICAgICAgYENhbm5vdCBjcmVhdGUgYWxpYXMgb24gYSBGYWlsZWQgdmVyc2lvbi4gYCArXG4gICAgICAgICAgICAgICAgYENoZWNrIENsb3VkV2F0Y2ggbG9ncyBmb3IgdGhlIExhbWJkYSBmdW5jdGlvbiB0byBkaWFnbm9zZSBpbml0aWFsaXphdGlvbiBlcnJvcnMuYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIGlmIHdlIHRpbWVkIG91dFxuICAgICAgICBpZiAoc3RhdGUgIT09ICdBY3RpdmUnICYmIHN0YXRlICE9PSAnRmFpbGVkJykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYCAgICAgIFdhcm5pbmc6IFNuYXBzaG90IGNyZWF0aW9uIHRpbWVvdXQgYWZ0ZXIgJHtjZmcuc25hcHNob3RUaW1lb3V0U2Vjb25kc31zYCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgICAgICAgRmluYWwgc3RhdHVzOiBPcHRpbWl6YXRpb25TdGF0dXM9JHtvcHRpbWl6YXRpb25TdGF0dXN9LCBTdGF0ZT0ke3N0YXRlfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3RlcCA1OiBDcmVhdGUgb3IgdXBkYXRlIGFsaWFzIChvbmx5IGlmIHZlcnNpb24gaXMgQWN0aXZlIG9yIFBlbmRpbmcpXG4gICAgICAgIC8vIE5vdGU6IEFXUyBMYW1iZGEgZG9lcyBub3QgYWxsb3cgY3JlYXRpbmcgYWxpYXNlcyBvbiBGYWlsZWQgdmVyc2lvbnNcbiAgICAgICAgLy8gY29uc29sZS5sb2coYFtMYW1iZGEgS2F0YV0gIENyZWF0aW5nL3VwZGF0aW5nIGFsaWFzICcke2NmZy5hbGlhc05hbWV9JyAtPiB2ZXJzaW9uICR7dmVyc2lvbn0uLi5gKTtcbiAgICAgICAgbGV0IGFsaWFzQXJuOiBzdHJpbmc7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFRyeSB0byBnZXQgZXhpc3RpbmcgYWxpYXNcbiAgICAgICAgICAgIGF3YWl0IGxhbWJkYUNsaWVudC5zZW5kKG5ldyBHZXRBbGlhc0NvbW1hbmQoe1xuICAgICAgICAgICAgICAgIEZ1bmN0aW9uTmFtZTogZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgIE5hbWU6IGNmZy5hbGlhc05hbWUsXG4gICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgIC8vIEFsaWFzIGV4aXN0cywgdXBkYXRlIGl0XG4gICAgICAgICAgICBjb25zdCB1cGRhdGVSZXNwb25zZSA9IGF3YWl0IGxhbWJkYUNsaWVudC5zZW5kKG5ldyBVcGRhdGVBbGlhc0NvbW1hbmQoe1xuICAgICAgICAgICAgICAgIEZ1bmN0aW9uTmFtZTogZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgIE5hbWU6IGNmZy5hbGlhc05hbWUsXG4gICAgICAgICAgICAgICAgRnVuY3Rpb25WZXJzaW9uOiB2ZXJzaW9uLFxuICAgICAgICAgICAgICAgIERlc2NyaXB0aW9uOiAnTGFtYmRhIEthdGEgU25hcFN0YXJ0LWVuYWJsZWQgdmVyc2lvbicsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICBhbGlhc0FybiA9IHVwZGF0ZVJlc3BvbnNlLkFsaWFzQXJuITtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGAgICAgICBVcGRhdGVkIGV4aXN0aW5nIGFsaWFzOiAke2FsaWFzQXJufWApO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgLy8gQ2hlY2sgYnkgZXJyb3IgbmFtZSBmb3IgYmV0dGVyIHRlc3RhYmlsaXR5XG4gICAgICAgICAgICBjb25zdCBpc1Jlc291cmNlTm90Rm91bmQgPSBlcnJvciBpbnN0YW5jZW9mIFJlc291cmNlTm90Rm91bmRFeGNlcHRpb24gfHxcbiAgICAgICAgICAgICAgICAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiBlcnJvci5uYW1lID09PSAnUmVzb3VyY2VOb3RGb3VuZEV4Y2VwdGlvbicpO1xuXG4gICAgICAgICAgICBpZiAoaXNSZXNvdXJjZU5vdEZvdW5kKSB7XG4gICAgICAgICAgICAgICAgLy8gQWxpYXMgZG9lc24ndCBleGlzdCwgY3JlYXRlIGl0XG4gICAgICAgICAgICAgICAgY29uc3QgY3JlYXRlUmVzcG9uc2UgPSBhd2FpdCBsYW1iZGFDbGllbnQuc2VuZChuZXcgQ3JlYXRlQWxpYXNDb21tYW5kKHtcbiAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25OYW1lOiBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgIE5hbWU6IGNmZy5hbGlhc05hbWUsXG4gICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uVmVyc2lvbjogdmVyc2lvbixcbiAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRpb246ICdMYW1iZGEgS2F0YSBTbmFwU3RhcnQtZW5hYmxlZCB2ZXJzaW9uJyxcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgYWxpYXNBcm4gPSBjcmVhdGVSZXNwb25zZS5BbGlhc0FybiE7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYCAgICAgIENyZWF0ZWQgbmV3IGFsaWFzOiAke2FsaWFzQXJufWApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdcXG4nICsgJz0nLnJlcGVhdCg2MCkpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnU05BUFNUQVJUIEFDVElWQVRJT04gQ09NUExFVEUnKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJz0nLnJlcGVhdCg2MCkpO1xuICAgICAgICBjb25zb2xlLmxvZyhgW0xhbWJkYSBLYXRhXSBWZXJzaW9uOiAke3ZlcnNpb259YCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGBbTGFtYmRhIEthdGFdIEFsaWFzOiAke2NmZy5hbGlhc05hbWV9IHwgJHthbGlhc0Fybn1gKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYFtMYW1iZGEgS2F0YV0gT3B0aW1pemF0aW9uU3RhdHVzOiAke29wdGltaXphdGlvblN0YXR1c31gKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmVyc2lvbixcbiAgICAgICAgICAgIGFsaWFzTmFtZTogY2ZnLmFsaWFzTmFtZSxcbiAgICAgICAgICAgIGFsaWFzQXJuLFxuICAgICAgICAgICAgb3B0aW1pemF0aW9uU3RhdHVzLFxuICAgICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIENhdGNoIEFjY2Vzc0RlbmllZEV4Y2VwdGlvbiBmcm9tIGFueSBMYW1iZGEgQVBJIGNhbGwgKHNlbmQgY2FsbHMpXG4gICAgICAgIC8vIHRoYXQgaXNuJ3QgYWxyZWFkeSBoYW5kbGVkIGJ5IHRoZSB3YWl0ZXIgdHJ5LWNhdGNoIGJsb2Nrc1xuICAgICAgICBpZiAoaXNBY2Nlc3NEZW5pZWRFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBgSW5zdWZmaWNpZW50IHBlcm1pc3Npb25zIHRvIGFjdGl2YXRlIFNuYXBTdGFydCBvbiAnJHtmdW5jdGlvbk5hbWV9Jy4gYCArXG4gICAgICAgICAgICAgICAgYEVuc3VyZSB0aGUgZXhlY3V0aW9uIHJvbGUgaGFzIHRoZSBmb2xsb3dpbmcgcGVybWlzc2lvbnM6ICR7UkVRVUlSRURfUEVSTUlTU0lPTlMuam9pbignLCAnKX1gXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbn1cblxuLyoqXG4gKiBMYW1iZGEgaGFuZGxlciBmb3IgQ2xvdWRGb3JtYXRpb24gQ3VzdG9tIFJlc291cmNlLlxuICpcbiAqIFRoaXMgaGFuZGxlciBpcyBpbnZva2VkIGJ5IENsb3VkRm9ybWF0aW9uIHdoZW4gdGhlIGN1c3RvbSByZXNvdXJjZVxuICogaXMgY3JlYXRlZCwgdXBkYXRlZCwgb3IgZGVsZXRlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhhbmRsZXIoZXZlbnQ6IEN1c3RvbVJlc291cmNlRXZlbnQpOiBQcm9taXNlPEN1c3RvbVJlc291cmNlUmVzcG9uc2U+IHtcbiAgICBjb25zb2xlLmxvZygnW0xhbWJkYSBLYXRhXSBDdXN0b20gUmVzb3VyY2UgRXZlbnQ6JywgSlNPTi5zdHJpbmdpZnkoZXZlbnQsIG51bGwsIDIpKTtcblxuICAgIGNvbnN0IHsgUmVxdWVzdFR5cGUsIFN0YWNrSWQsIFJlcXVlc3RJZCwgTG9naWNhbFJlc291cmNlSWQsIFJlc291cmNlUHJvcGVydGllcyB9ID0gZXZlbnQ7XG4gICAgY29uc3QgZnVuY3Rpb25OYW1lID0gUmVzb3VyY2VQcm9wZXJ0aWVzLkZ1bmN0aW9uTmFtZTtcbiAgICBjb25zdCBhbGlhc05hbWUgPSBSZXNvdXJjZVByb3BlcnRpZXMuQWxpYXNOYW1lID8/ICdrYXRhJztcblxuICAgIC8vIFBoeXNpY2FsIHJlc291cmNlIElEIGZvcm1hdDoge2Z1bmN0aW9uTmFtZX06c25hcHN0YXJ0OnthbGlhc05hbWV9XG4gICAgY29uc3QgcGh5c2ljYWxSZXNvdXJjZUlkID0gZXZlbnQuUGh5c2ljYWxSZXNvdXJjZUlkID8/IGAke2Z1bmN0aW9uTmFtZX06c25hcHN0YXJ0OiR7YWxpYXNOYW1lfWA7XG5cbiAgICBjb25zdCBiYXNlUmVzcG9uc2U6IE9taXQ8Q3VzdG9tUmVzb3VyY2VSZXNwb25zZSwgJ1N0YXR1cycgfCAnUmVhc29uJyB8ICdEYXRhJz4gPSB7XG4gICAgICAgIFBoeXNpY2FsUmVzb3VyY2VJZDogcGh5c2ljYWxSZXNvdXJjZUlkLFxuICAgICAgICBTdGFja0lkLFxuICAgICAgICBSZXF1ZXN0SWQsXG4gICAgICAgIExvZ2ljYWxSZXNvdXJjZUlkLFxuICAgIH07XG5cbiAgICB0cnkge1xuICAgICAgICBpZiAoUmVxdWVzdFR5cGUgPT09ICdEZWxldGUnKSB7XG4gICAgICAgICAgICAvLyBPbiBkZWxldGUsIHdlIGRvbid0IHJlbW92ZSBTbmFwU3RhcnQgb3IgdGhlIGFsaWFzXG4gICAgICAgICAgICAvLyBUaGUgTGFtYmRhIGZ1bmN0aW9uIGl0c2VsZiB3aWxsIGJlIGRlbGV0ZWQgYnkgQ2xvdWRGb3JtYXRpb25cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdEZWxldGUgcmVxdWVzdCAtIG5vIGFjdGlvbiBuZWVkZWQgKExhbWJkYSB3aWxsIGJlIGRlbGV0ZWQgYnkgQ2xvdWRGb3JtYXRpb24pJyk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLmJhc2VSZXNwb25zZSxcbiAgICAgICAgICAgICAgICBTdGF0dXM6ICdTVUNDRVNTJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDcmVhdGUgb3IgVXBkYXRlIC0gYWN0aXZhdGUgU25hcFN0YXJ0XG4gICAgICAgIGNvbnN0IGxhbWJkYUNsaWVudCA9IG5ldyBMYW1iZGFDbGllbnQoe30pO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFjdGl2YXRlU25hcFN0YXJ0KGxhbWJkYUNsaWVudCwgZnVuY3Rpb25OYW1lLCB7IGFsaWFzTmFtZSB9KTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uYmFzZVJlc3BvbnNlLFxuICAgICAgICAgICAgU3RhdHVzOiAnU1VDQ0VTUycsXG4gICAgICAgICAgICBEYXRhOiB7XG4gICAgICAgICAgICAgICAgVmVyc2lvbjogcmVzdWx0LnZlcnNpb24sXG4gICAgICAgICAgICAgICAgQWxpYXNOYW1lOiByZXN1bHQuYWxpYXNOYW1lLFxuICAgICAgICAgICAgICAgIEFsaWFzQXJuOiByZXN1bHQuYWxpYXNBcm4sXG4gICAgICAgICAgICAgICAgT3B0aW1pemF0aW9uU3RhdHVzOiByZXN1bHQub3B0aW1pemF0aW9uU3RhdHVzLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tMYW1iZGEgS2F0YV0gT3B0aW1pemF0aW9uIGVycm9yOicsIGVycm9yTWVzc2FnZSk7XG5cbiAgICAgICAgLy8gT24gVXBkYXRlIHJlcXVlc3RzLCByZXR1cm4gU1VDQ0VTUyBldmVuIG9uIGZhaWx1cmUgdG8gcHJldmVudFxuICAgICAgICAvLyBDbG91ZEZvcm1hdGlvbiByb2xsYmFjayBmcm9tIGdldHRpbmcgc3R1Y2sgaW4gVVBEQVRFX1JPTExCQUNLX0ZBSUxFRC5cbiAgICAgICAgLy8gUmV0dXJuaW5nIEZBSUxFRCBmcm9tIGFuIFVwZGF0ZSBkdXJpbmcgcm9sbGJhY2sgYmxvY2tzIHRoZSBlbnRpcmUgc3RhY2suXG4gICAgICAgIC8vIFRoZSBmdW5jdGlvbiByZW1haW5zIG9wZXJhdGlvbmFsIHdpdGggaXRzIHByZXZpb3VzIGNvbmZpZ3VyYXRpb24uXG4gICAgICAgIGlmIChSZXF1ZXN0VHlwZSA9PT0gJ1VwZGF0ZScpIHtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdSZXR1cm5pbmcgU1VDQ0VTUyBmb3IgVXBkYXRlIHJlcXVlc3QgdG8gcHJldmVudCByb2xsYmFjayBkZWFkbG9jay4nKTtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdUaGUgZnVuY3Rpb24gd2lsbCBjb250aW51ZSB3aXRoIGl0cyBwcmV2aW91cyBTbmFwU3RhcnQgY29uZmlndXJhdGlvbi4nKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLi4uYmFzZVJlc3BvbnNlLFxuICAgICAgICAgICAgICAgIFN0YXR1czogJ1NVQ0NFU1MnLFxuICAgICAgICAgICAgICAgIFJlYXNvbjogYFNuYXBTdGFydCBhY3RpdmF0aW9uIGZhaWxlZCAobm9uLWJsb2NraW5nKTogJHtlcnJvck1lc3NhZ2V9YCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uYmFzZVJlc3BvbnNlLFxuICAgICAgICAgICAgU3RhdHVzOiAnRkFJTEVEJyxcbiAgICAgICAgICAgIFJlYXNvbjogYFNuYXBTdGFydCBhY3RpdmF0aW9uIGZhaWxlZDogJHtlcnJvck1lc3NhZ2V9YCxcbiAgICAgICAgfTtcbiAgICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAieWFBQUEsSUFBQUEsRUFBQSxHQUFBQyxFQUFBRCxFQUFBLGVBQUFFLEVBQUEsc0JBQUFDLEVBQUEsWUFBQUMsSUFBQSxlQUFBQyxFQUFBTCxHQThCQSxJQUFBTSxFQVdPLGtDQXlHREMsRUFBc0IsRUFNdEJDLEVBQWlCLEtBT2pCQyxFQUF1QixJQUV2QkMsRUFBcUQsQ0FDdkQsdUJBQXdCLElBQ3hCLHVCQUF3QixFQUN4QixVQUFXLE9BQ1gsbUJBQW9CRCxF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QmUsRUFBY0MsRUFBYyxDQUFFLFVBQUFtQixDQUFVLENBQUMsRUFFaEYsTUFBTyxDQUNILEdBQUdDLEVBQ0gsT0FBUSxVQUNSLEtBQU0sQ0FDRixRQUFTQyxFQUFPLFFBQ2hCLFVBQVdBLEVBQU8sVUFDbEIsU0FBVUEsRUFBTyxTQUNqQixtQkFBb0JBLEVBQU8sa0JBQy9CLENBQ0osQ0FDSixPQUFTMUIsRUFBTyxDQUNaLElBQU0yQixFQUFlM0IsYUFBaUIsTUFBUUEsRUFBTSxRQUFVLE9BQU9BLENBQUssRUFPMUUsT0FOQSxRQUFRLE1BQU0sb0NBQXFDMkIsQ0FBWSxFQU0zRFIsSUFBZ0IsU0FHVCxDQUNILEdBQUdNLEVBQ0gsT0FBUSxVQUNSLE9BQVEsK0NBQStDRSxDQUFZLEVBQ3ZFLEVBR0csQ0FDSCxHQUFHRixFQUNILE9BQVEsU0FDUixPQUFRLGdDQUFnQ0UsQ0FBWSxFQUN4RCxDQUNKLENBQ0oiLAogICJuYW1lcyI6IFsic25hcHN0YXJ0X2FjdGl2YXRvcl9leHBvcnRzIiwgIl9fZXhwb3J0IiwgIl90ZXN0YWJsZSIsICJhY3RpdmF0ZVNuYXBTdGFydCIsICJoYW5kbGVyIiwgIl9fdG9Db21tb25KUyIsICJpbXBvcnRfY2xpZW50X2xhbWJkYSIsICJNQVhfUFVCTElTSF9SRVRSSUVTIiwgIlJFVFJZX0RFTEFZX01TIiwgIlBSRV9QVUJMSVNIX0RFTEFZX01TIiwgIkRFRkFVTFRfQ09ORklHIiwgIm1zIiwgInJlc29sdmUiLCAiaXNSZXNvdXJjZU5vdEZvdW5kRXJyb3IiLCAiZXJyb3IiLCAiY2F1c2UiLCAiUkVRVUlSRURfUEVSTUlTU0lPTlMiLCAiaXNBY2Nlc3NEZW5pZWRFcnJvciIsICJsYW1iZGFDbGllbnQiLCAiZnVuY3Rpb25OYW1lIiwgImNvbmZpZyIsICJjZmciLCAibWF4QXR0ZW1wdHMiLCAidmVyc2lvbiIsICJvcHRpbWl6YXRpb25TdGF0dXMiLCAic3RhdGUiLCAibGFzdEZhaWxSZWFzb24iLCAicHVibGlzaEF0dGVtcHQiLCAiYXR0ZW1wdCIsICJ2ZXJzaW9uQ29uZmlnIiwgImVsYXBzZWQiLCAiYWxpYXNBcm4iLCAiZXZlbnQiLCAiUmVxdWVzdFR5cGUiLCAiU3RhY2tJZCIsICJSZXF1ZXN0SWQiLCAiTG9naWNhbFJlc291cmNlSWQiLCAiUmVzb3VyY2VQcm9wZXJ0aWVzIiwgImFsaWFzTmFtZSIsICJiYXNlUmVzcG9uc2UiLCAicmVzdWx0IiwgImVycm9yTWVzc2FnZSJdCn0K
@@ -119,6 +119,8 @@ export declare function kata<T extends NodejsFunction | LambdaFunction>(lambda:
119
119
  * @param props - Optional configuration for the transformation
120
120
  * @returns Promise resolving to the transformation result
121
121
  *
122
+ * @deprecated
123
+ *
122
124
  * @internal
123
125
  */
124
126
  export declare function kataWithAccountId<T extends NodejsFunction | LambdaFunction>(lambda: T, accountId: string, region: string, props?: KataWrapperOptions): Promise<KataResult>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lambda-kata/cdk",
3
- "version": "0.1.5",
3
+ "version": "0.1.6",
4
4
  "description": "AWS CDK integration for Lambda Kata - Node.js Lambdas running via Lambda Kata runtime",
5
5
  "main": "out/dist/index.js",
6
6
  "types": "out/tsc/src/index.d.ts",