piclist 1.8.12 → 1.9.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/CHANGELOG.md +10 -0
- package/dist/core/Lifecycle.d.ts +3 -7
- package/dist/i18n/zh-CN.d.ts +19 -0
- package/dist/index.cjs.js +2 -2
- package/dist/index.esm.js +2 -2
- package/dist/lib/LifecyclePlugins.d.ts +10 -1
- package/dist/plugins/commander/utils.d.ts +2 -0
- package/dist/plugins/transformer/index.d.ts +4 -2
- package/dist/plugins/uploader/alist.d.ts +2 -0
- package/dist/plugins/uploader/index.d.ts +4 -2
- package/dist/types/index.d.ts +10 -0
- package/package.json +1 -1
- package/rollup.config.js +1 -0
package/dist/index.esm.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{EventEmitter as e}from"events";import t,{readFile as r,readJSONSync as n,ensureDirSync as a,createFileSync as i,emptyDirSync as s,removeSync as E,moveSync as o,remove as l,pathExistsSync as I,ensureFileSync as S}from"fs-extra";import{cloneDeep as _,merge as u,get as P,set as c,unset as p}from"lodash";import C,{homedir as A}from"os";import T from"path";import{Command as g}from"commander";import d from"inquirer";import{imageSize as D}from"image-size";import m,{URL as L}from"url";import f from"text-to-svg";import h from"sharp";import B from"crypto";import{v4 as N}from"uuid";import U from"chalk";import R from"download-git-repo";import{sync as O}from"rimraf";import M from"minimatch";import y from"globby";import{render as G}from"ejs";import b from"dayjs";import x from"util";import{spawn as w}from"cross-spawn";import{sync as W}from"resolve";import K from"axios";import F from"form-data";import H from"https";import{httpsOverHttp as $}from"tunnel";import v from"heic-convert";import{lookup as Y}from"mime-types";import k from"qiniu";import{AuthType as q,createClient as V}from"webdav";import{NodeSSH as j}from"node-ssh-no-cpu-features";import{S3Client as z,PutObjectCommand as X,GetObjectCommand as Q}from"@aws-sdk/client-s3";import{getSignedUrl as Z}from"@aws-sdk/s3-request-presigner";import{NodeHttpHandler as J}from"@smithy/node-http-handler";import ee from"file-type";import te from"mime";import{HttpsProxyAgent as re,HttpProxyAgent as ne}from"hpagent";import{spawn as ae}from"child_process";import ie from"is-wsl";import{JSONStore as se}from"@picgo/store";import Ee from"js-yaml";import{ObjectAdapter as oe,I18n as le}from"@picgo/i18n";const Ie=(e,t,r,n,a,i)=>{let s=e.program.command(t).description(r).alias(n);(null==i?void 0:i.proxy)&&(s=s.option("-p, --proxy <proxy>","Add proxy for installing plugins")),(null==i?void 0:i.registry)&&(s=s.option("-r, --registry <registry>","Choose a registry for installing plugins")),s.action(a)},Se={handle:e=>{const t=e.cmd;Ie(t,"install <plugins...>","install picgo plugin","add",((t,r)=>{const{proxy:n,registry:a}=r,i={proxy:n,registry:a};e.pluginHandler.install(t,i).catch((t=>{e.log.error(t)}))}),{proxy:!0,registry:!0}),Ie(t,"uninstall <plugins...>","uninstall picgo plugin","rm",(t=>{e.pluginHandler.uninstall(t).catch((t=>{e.log.error(t)}))})),Ie(t,"update <plugins...>","update picgo plugin","up",((t,r)=>{const{proxy:n,registry:a}=r,i={proxy:n,registry:a};e.pluginHandler.update(t,i).catch((t=>{e.log.error(t)}))}),{proxy:!0,registry:!0})}},_e={handle:e=>{e.cmd.program.option("-c, --config <path>","set config path")}};function ue(e){const t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";return Array.from({length:e}).map((()=>t.charAt(Math.floor(Math.random()*t.length)))).join("")}function Pe(e){return 1===e.toString().length?`0${e}`:e.toString()}function ce(e){return B.createHash("md5").update(e).digest("hex")}function pe(e,t,r,n){const a=new Date,i=a.getFullYear().toString(),s=T.basename(e,T.extname(e)),E={"{Y}":()=>i,"{y}":()=>i.slice(2),"{m}":()=>Pe(a.getMonth()+1),"{d}":()=>Pe(a.getDate()),"{h}":()=>Pe(a.getHours()),"{i}":()=>Pe(a.getMinutes()),"{s}":()=>Pe(a.getSeconds()),"{ms}":()=>a.getMilliseconds().toString().padStart(3,"0"),"{md5}":()=>ce(n||s),"{md5-16}":()=>ce(n||s).slice(0,16),"{filename}":()=>r?T.basename(r,T.extname(r)):s,"{uuid}":()=>N().replace(/-/g,""),"{timestamp}":()=>a.getTime().toString()};if(void 0===t||!Object.keys(E).some((e=>t.includes(e)))&&!t.includes("localFolder:")&&!t.includes("str-"))return e;const o=T.extname(e);let l=Object.keys(E).reduce(((e,t)=>e.replace(new RegExp(t,"g"),E[t]())),t)+o;return l=l.replace(/{str-(\d+)}/gi,((e,t)=>ue(parseInt(t,10)))),l=l.replace(/{(localFolder:?(\d+)?)}/gi,((t,r,n)=>{n=Math.max(1,n||0);return T.dirname(e).split(T.sep).slice(0-n).reduce(((e,t)=>`${e}/${t}`)).replace(/:/g,"")})),l}const Ce=e=>/^https?:\/\//.test(e),Ae=e=>{e=e||"";try{return e!==decodeURI(e)}catch(e){return!1}},Te=e=>(Ae(e)||(e=encodeURI(e)),e),ge=e=>{try{const{width:t=0,height:r=0,type:n}=D(e);return{real:!0,width:t,height:r,extname:n?`.${n}`:".png"}}catch(e){return{real:!1,width:200,height:200,extname:".png"}}},de=async e=>{try{return{extname:T.extname(e),fileName:T.basename(e),buffer:await r(e),success:!0}}catch(t){return{reason:`read file ${e} error`,success:!1}}},De=async(e,t)=>{let r;e=Te(e);const n=new Promise(((n,a)=>{(async()=>{var a;try{const a=await t.request({method:"get",url:e,resolveWithFullResponse:!0,responseType:"arraybuffer"}).then((e=>e.data));clearTimeout(r);const i=new L(e).pathname;let s="";try{s=new L(e).searchParams.get("wx_fmt")||T.extname(i)||""}catch(e){s=T.extname(i)||""}!s.startsWith(".")&&s&&(s=`.${s}`),n({buffer:a,fileName:T.basename(i),extname:s,success:!0})}catch(t){clearTimeout(r),n({success:!1,reason:`request ${e} error, ${null!==(a=null==t?void 0:t.message)&&void 0!==a?a:""}`})}})().catch(a)})),a=new Promise((t=>{r=setTimeout((()=>{t({success:!1,reason:`request ${e} timeout`})}),3e4)}));return Promise.race([n,a])},me=e=>/^@[^/]+\/picgo-plugin-/.test(e)?"scope":e.startsWith("picgo-plugin-")?"normal":Le(e)?"simple":"unknown",Le=e=>{if(T.isAbsolute(e))return!1;const r=T.join(process.cwd(),e);return!t.existsSync(r)&&(!e.includes("/")&&!e.includes("\\"))},fe=(e,t="")=>t?`@${t}/picgo-plugin-${e}`:`picgo-plugin-${e}`,he=(e,r=console)=>{switch(me(e)){case"normal":case"scope":return e;case"simple":return fe(e);default:{let n=e;return T.isAbsolute(e)&&t.existsSync(e)?Ne(n):(n=T.join(process.cwd(),e),t.existsSync(n)?Ne(n):(r.warn(`Can't find plugin ${e}`),""))}}},Be=(e,r=console)=>{var a;switch(me(e)){case"normal":return Ue(e);case"scope":return Ue(e,!0);case"simple":return Ue(fe(e));default:{if(!t.existsSync(e))return r.warn(`Can't find plugin: ${e}`),"";const i=T.posix.join(e,"package.json");if(t.existsSync(i)){const e=n(i)||{};return(null===(a=e.name)||void 0===a?void 0:a.includes("picgo-plugin-"))?e.name:(r.warn(`The plugin package.json's name filed is ${e.name||"empty"}, need to include the prefix: picgo-plugin-`),"")}return r.warn(`Can't find plugin: ${e}`),""}}},Ne=e=>e.split(T.sep).join("/"),Ue=(e,t=!1)=>{if(e.includes("@")){let r=/(.+\/)?(picgo-plugin-\w+)(@.+)*/;t&&(r=/(.+\/)?(^@[^/]+\/picgo-plugin-\w+)(@.+)*/);const n=e.match(r);return n?n[2]:(console.warn("can not remove plugin version"),e)}return e},Re=[],Oe=e=>Re.some((t=>e.startsWith(t))),Me=e=>"object"==typeof e&&!Array.isArray(e)&&Object.keys(e).length>0;function ye(e){try{return JSON.parse(e)}catch(t){return e}}const Ge=(e=0)=>isNaN(Number(e))?0:Number(e),be=()=>"development"===process.env.NODE_ENV;const xe=T.join(__dirname,"assets","piclist.png");async function we(e,t,r,n,a,i,s,E,o,l,I){E=!E||E<0||E>1?.15:E;const S=h(e,{animated:!0}),{width:_=200}=await S.metadata(),u=await async function(e,t,r,n,a,i,s,E=200,o=0){let l;"image"===e?(s=s||xe,l=await h(s).toBuffer()):l=await async function(e,t,r,n){t=t||"测试",n=n||e;const a={anchor:"top",attributes:{fill:r=r||"rgba(204, 204, 204, 0.45)"}},i=f.loadSync(n).getSVG(t,a);return Buffer.from(i)}(t,r,i,n||t);const{width:I,height:S}=await async function(e){const{width:t,height:r}=await h(e).metadata();return{width:t||200,height:r||200}}(l),_=Math.floor(E*Ge(a)),u=Math.floor(_*S/I);return await h(l).resize(_,u,{fit:"inside"}).rotate(o,{background:{r:255,g:255,b:255,alpha:0}}).toBuffer()}(t,r,i,s,E,o,l,_,a);return await S.composite([{input:u,gravity:I||"southeast",tile:n}]).toBuffer()}const We=(...e)=>e.every((e=>null!=e&&("string"==typeof e?""!==e:"number"==typeof e?e>0:"object"!=typeof e||Object.keys(e).length>0))),Ke=["avif","dz","fits","gif","heif","input","jpeg","jpg","jp2","jxl","magick","openslide","pdf","png","ppm","raw","svg","tiff","tif","v","webp"],Fe=["jpg","jpeg","png","webp","bmp","tiff","tif","svg","ico","avif","heif","heic","gif"],He=e=>Ke.includes(e);async function $e(e,t,r,n){try{let n=h(e,{animated:!0});return n=h(await we(e,t.watermarkType||"text",r,t.isFullScreenWatermark,Ge(t.watermarkDegree),t.watermarkText,t.watermarkFontPath,Ge(t.watermarkScaleRatio),t.watermarkColor,t.watermarkImagePath,t.watermarkPosition),{animated:!0}),await n.toBuffer()}catch(t){return n.error(`Image add watermark error: ${t}`),e}}function ve(e){const t="string"==typeof e.formatConvertObj?ye(e.formatConvertObj):e.formatConvertObj;return{quality:Ge(e.quality),isConvert:e.isConvert||!1,convertFormat:e.convertFormat||"jpg",isReSize:e.isReSize||!1,reSizeHeight:Ge(e.reSizeHeight),reSizeWidth:Ge(e.reSizeWidth),skipReSizeOfSmallImg:e.skipReSizeOfSmallImg||!1,isReSizeByPercent:e.isReSizeByPercent||!1,reSizePercent:Ge(e.reSizePercent),isRotate:e.isRotate||!1,isFlip:e.isFlip||!1,isFlop:e.isFlop||!1,rotateDegree:Ge(e.rotateDegree),picBed:e.picBed||"smms",formatConvertObj:t||{}}}async function Ye(e,t,r,n){t=ve(t);try{if(r=ke(r),!Fe.includes(r)||"gif"===r)return e;let n=h(e,{animated:!0}),a=100;if(We(t.quality)&&t.quality<100&&(a=t.quality),t.isReSizeByPercent){if(We(t.reSizePercent)){const e=await n.metadata().then((e=>e.width)),r=await n.metadata().then((e=>e.height));e&&r&&(n=n.resize(Math.round(e*t.reSizePercent/100),Math.round(r*t.reSizePercent/100),{fit:"inside"}))}}else if(t.isReSize)if("number"==typeof t.reSizeHeight&&t.reSizeHeight>0&&"number"==typeof t.reSizeWidth&&t.reSizeWidth>0)n=n.resize(t.reSizeWidth,t.reSizeHeight,{fit:"fill"});else if("number"==typeof t.reSizeHeight&&t.reSizeHeight>0&&("number"!=typeof t.reSizeWidth||0===t.reSizeWidth)){const e=await n.metadata().then((e=>e.width)),r=await n.metadata().then((e=>e.height));if(e&&r&&(!t.skipReSizeOfSmallImg||t.skipReSizeOfSmallImg&&t.reSizeHeight<r)){const a=t.reSizeHeight/r;n=n.resize(Math.round(e*a),t.reSizeHeight,{fit:"inside"})}}else if("number"==typeof t.reSizeWidth&&t.reSizeWidth>0&&("number"!=typeof t.reSizeHeight||0===t.reSizeHeight)){const e=await n.metadata().then((e=>e.width)),r=await n.metadata().then((e=>e.height));if(e&&r&&(!t.skipReSizeOfSmallImg||t.skipReSizeOfSmallImg&&t.reSizeWidth<e)){const a=t.reSizeWidth/e;n=n.resize(t.reSizeWidth,Math.round(r*a),{fit:"inside"})}}if(t.isRotate&&t.rotateDegree&&(n=n.rotate(t.rotateDegree,{background:{r:255,g:255,b:255,alpha:0}})),t.isFlip&&(n=n.flip()),t.isFlop&&(n=n.flop()),t.isConvert){const e=qe(t,r);e!==r&&(n=n.toFormat(e,{quality:a,mozjpeg:!0}))}else n=r&&He(r)?n.toFormat(r,{quality:a,mozjpeg:!0}):n.toFormat("jpg",{quality:a,mozjpeg:!0});return await n.toBuffer()}catch(t){return n.error(`Image process error: ${t}`),e}}const ke=e=>e.toLowerCase().replace(".","");function qe(e,t){if(e=ve(e||{}),"gif"===(t=ke(t)))return"gif";let r=(null==e?void 0:e.convertFormat)||"jpg";if((null==e?void 0:e.formatConvertObj)&&Object.keys(e.formatConvertObj).length>0){const n=e.formatConvertObj;Object.keys(n).includes(t)&&(r=n[t],He(r)||(r="jpg"))}return"imgur"===(null==e?void 0:e.picBed)&&"webp"===r&&(r="jpg"),r}const Ve=(e,t)=>(t=ke(t),!!e&&!!e.isAddWatermark&&Fe.includes(t)&&"svg"!==t),je=(e,t)=>{if(!Fe.includes(ke(t))||!e)return!1;const{quality:r,isReSizeByPercent:n,reSizePercent:a,isReSize:i,reSizeHeight:s,reSizeWidth:E,isRotate:o,rotateDegree:l,isConvert:I,convertFormat:S,isFlip:_,isFlop:u}=ve(e);if(We(r)&&r<100)return!0;if(n&&We(a))return!0;if(i&&("number"==typeof s&&s>0||"number"==typeof E&&E>0))return!0;if(o&&l)return!0;if(_||u)return!0;if(I){return t!==(S||"jpg")}return!1},ze=async(e,t)=>(t=ke(t),Fe.includes(t)&&"svg"!==t?await h(e,{animated:!0}).toBuffer():e);var Xe=Object.freeze({__proto__:null,randomStringGenerator:ue,renameFileNameWithTimestamp:function(e){return`${Math.floor(Date.now()/1e3)}${ue(5)}${T.extname(e)}`},renameFileNameWithRandomString:function(e,t=5){return`${ue(t)}${T.extname(e)}`},renameFileNameWithCustomString:pe,isUrl:Ce,isUrlEncode:Ae,handleUrlEncode:Te,getImageSize:ge,getFSFile:de,getURLFile:De,getPluginNameType:me,isSimpleName:Le,handleStreamlinePluginName:e=>/^@[^/]+\/picgo-plugin-/.test(e)?e.replace(/^@[^/]+\/picgo-plugin-/,""):e.replace(/picgo-plugin-/,""),handleCompletePluginName:fe,getProcessPluginName:he,getNormalPluginName:Be,handleUnixStylePath:Ne,removePluginVersion:Ue,configBlackList:Re,isConfigKeyInBlackList:Oe,isInputConfigValid:Me,safeParse:ye,forceNumber:Ge,isDev:be,AddWatermark:we,imageAddWaterMark:$e,imageCompress:Ye,getConvertedFormat:qe,isNeedAddWatermark:Ve,isNeedCompress:je,removeExif:ze});const Qe={handle:e=>{e.cmd.program.command("upload").description("upload, go go go").arguments("[input...]").alias("u").action((r=>{(async()=>{const n=r.map((e=>Ce(e)?e:T.resolve(e))).filter((r=>{const n=t.existsSync(r)||Ce(r);return n||e.log.warn(`${r} does not exist.`),n}));await e.upload(n)})().catch((t=>{e.log.error(t)}))}))}};var Ze=e=>{const t=e.getConfig("buildIn.compress")||{};return[{name:"quality",type:"input",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_QUALITY")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_QUALITY")},required:!1,default:t.quality||100},{name:"isConvert",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ISCONVERT")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISCONVERT")},required:!1,default:t.isConvert||!1},{name:"convertFormat",type:"list",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_CONVERTFORMAT")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_CONVERTFORMAT")},required:!1,choices:["avif","dz","fits","gif","heif","input","jpeg","jpg","jp2","jxl","magick","openslide","pdf","png","ppm","raw","svg","tiff","tif","v","webp"],default:"jpg"},{name:"isReSize",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ISRESIZE")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISRESIZE")},required:!1,default:t.isReSize||!1},{name:"reSizeWidth",type:"input",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEWIDTH")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEWIDTH")},required:!1,default:t.reSizeWidth||500},{name:"reSizeHeight",type:"input",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEHEIGHT")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEHEIGHT")},required:!1,default:t.reSizeHeight||500},{name:"skipReSizeOfSmallImg",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_SKIPRESIZEOFSMALLIMG")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_SKIPRESIZEOFSMALLIMG")},required:!1,default:t.skipReSizeOfSmallImg||!1},{name:"isReSizeByPercent",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ISRESIZEBYPERCENT")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISRESIZEBYPERCENT")},required:!1,default:t.isReSizeByPercent||!1},{name:"reSizePercent",type:"input",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEPERCENT")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEPERCENT")},required:!1,default:t.reSizePercent||50},{name:"isFlip",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ISFLIP")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISFLIP")},required:!1,default:t.isFlip||!1},{name:"isFlop",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ISFLOP")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISFLOP")},required:!1,default:t.isFlop||!1},{name:"isRotate",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ISROTATE")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISROTATE")},required:!1,default:t.isRotate||!1},{name:"rotateDegree",type:"input",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ROTATEDEGREE")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ROTATEDEGREE")},required:!1,default:t.rotateDegree||90},{name:"isRemoveExif",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ISREMOVEEXIF")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISREMOVEEXIF")},required:!1,default:t.isRemoveExif||!1}]};var Je=e=>{const t=e.getConfig("buildIn.watermark")||{};return[{name:"isAddWatermark",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_ISADDWATERMARK")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_ISADDWATERMARK")},required:!1,default:t.isAddWatermark||!1},{name:"watermarkType",type:"list",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTYPE")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTYPE")},required:!1,choices:["text","image"],default:t.watermarkType||"text"},{name:"isFullScreenWatermark",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_ISFULLSCREENWATERMARK")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_ISFULLSCREENWATERMARK")},required:!1,default:t.isFullScreenWatermark||!1},{name:"watermarkDegree",type:"input",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKDEGREE")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKDEGREE")},required:!1,default:t.watermarkDegree||0},{name:"watermarkText",type:"input",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTEXT")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTEXT")},required:!1,default:t.watermarkText||""},{name:"watermarkFontPath",type:"input",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH")},required:!1,default:t.watermarkFontPath||""},{name:"watermarkScaleRatio",type:"input",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKFONTRATIO")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKFONTRATIO")},required:!1,default:t.watermarkScaleRatio||.15},{name:"watermarkColor",type:"input",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKFONTCOLOR")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKFONTCOLOR")},required:!1,default:t.watermarkColor||"rgba(204, 204, 204, 0.45)"},{name:"watermarkImagePath",type:"input",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKIMAGEPATH")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKIMAGEPATH")},required:!1,default:t.watermarkImagePath||""},{name:"watermarkPosition",type:"list",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKPOSITION")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKPOSITION")},required:!1,choices:["north","northeast","southeast","south","southwest","northwest","west","east","center","centre"],default:t.watermarkPosition||"southeast"}]};var et=e=>{const t=e.getConfig("buildIn.rename")||{};return[{name:"format",type:"input",get prefix(){return e.i18n.translate("BUILDIN_RENAME_FORMAT")},get alias(){return e.i18n.translate("BUILDIN_RENAME_FORMAT")},required:!1,default:t.format||"{filename}"},{name:"enable",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_RENAME_ENABLE")},get alias(){return e.i18n.translate("BUILDIN_RENAME_ENABLE")},required:!1,default:t.enable||!1}]};const tt=async(e,t,r,n)=>{const a=await e.cmd.inquirer.prompt(t),i="uploader"===r?`picBed.${n}`:"transformer"===r?`transformer.${n}`:"buildin"===r?`buildIn.${n}`:n;e.saveConfig({[i]:a}),"uploader"===r?e.saveConfig({"picBed.current":n,"picBed.uploader":n}):"transformer"===r&&e.saveConfig({"picBed.transformer":n})},rt={handle:e=>{e.cmd.program.command("set").alias("config").arguments("<module> [name]").description("configure config of picgo modules, uploader|transformer|plugin|buildin").action(((t,r)=>{(async()=>{var n,a;try{switch(t){case"buildin":if("compress"===r)await tt(e,Ze(e),t,r);else if("watermark"===r)await tt(e,Je(e),t,r);else if("rename"===r)await tt(e,et(e),t,r);else{const r=[{type:"list",name:"buildin",choices:["compress","watermark","rename"],message:"Choose a buildin module"}],n=await e.cmd.inquirer.prompt(r);"compress"===n.buildin?await tt(e,Ze(e),t,n.buildin):"watermark"===n.buildin?await tt(e,Je(e),t,n.buildin):"rename"===n.buildin&&await tt(e,et(e),t,n.buildin)}break;case"uploader":case"transformer":if(r){const n=e.helper[t].get(r);if(!n)return void e.log.error(`No ${t} named ${r}`);n.config&&await tt(e,n.config(e),t,r)}else{const r=[{type:"list",name:`${t}`,choices:e.helper[t].getIdList(),message:`Choose a(n) ${t}`}],n=await e.cmd.inquirer.prompt(r),a=e.helper[t].get(n[t]);(null==a?void 0:a.config)&&await tt(e,a.config(e),t,n[t])}break;case"plugin":if(r){if(r.includes("picgo-plugin-")||(r=`picgo-plugin-${r}`),!Object.keys(e.getConfig("picgoPlugins")).includes(r))return void e.log.error(`No plugin named ${r}`);(null===(n=e.pluginLoader.getPlugin(r))||void 0===n?void 0:n.config)&&await tt(e,e.pluginLoader.getPlugin(r).config(e),"plugin",r)}else{const t=[{type:"list",name:"plugin",choices:e.pluginLoader.getFullList(),message:"Choose a plugin"}],r=await e.cmd.inquirer.prompt(t);(null===(a=e.pluginLoader.getPlugin(r.plugin))||void 0===a?void 0:a.config)&&await tt(e,e.pluginLoader.getPlugin(r.plugin).config(e),"plugin",r.plugin)}break;default:return e.log.warn(`No module named ${t}`),void e.log.warn("Available modules are uploader|transformer|plugin|buildin")}e.log.success("Configure config successfully!"),"plugin"===t&&e.log.info("If you want to use this config, please run 'picgo use plugins'")}catch(t){if(e.log.error(t),process.argv.includes("--debug"))throw t}})().catch((t=>{e.log.error(t)}))}))}},nt={handle:async e=>{const t=e.cmd;t.program.command("use").arguments("[module]").description("use modules of picgo").action((r=>{(async()=>{try{let n=[];const a={uploader:{type:"list",name:"uploader",message:"Use an uploader",choices:e.helper.uploader.getIdList(),default:e.getConfig("picBed.uploader")||e.getConfig("picBed.current")||"smms"},transformer:{type:"list",name:"transformer",message:"Use a transformer",choices:e.helper.transformer.getIdList(),default:e.getConfig("picBed.transformer")||"path"},plugins:{type:"checkbox",name:"plugins",message:"Use plugins",choices:e.pluginLoader.getFullList(),default:Object.keys(e.getConfig("picgoPlugins")).filter((t=>e.getConfig(`picgoPlugins.${t}`)))}};if(r){if(!a[r])return e.log.warn(`No module named ${r}`),void e.log.warn("Available modules are uploader|transformer|plugins");n.push(a[r])}else n=Object.keys(a).map((e=>a[e]));const i=await t.inquirer.prompt(n);if(i.plugins){const t=e.getConfig("picgoPlugins");Object.keys(t).forEach((e=>{i.plugins.includes(e)?t[e]=!0:t[e]=!1})),e.saveConfig({picgoPlugins:t})}e.saveConfig({"picBed.current":i.uploader||e.getConfig("picBed.current"),"picBed.uploader":i.uploader||e.getConfig("picBed.current"),"picBed.transformer":i.transformer||"path"}),e.log.success("Configure saved successfully!")}catch(t){if(e.log.error(t),process.argv.includes("--debug"))throw t}})().catch((t=>{e.log.error(t)}))}))}},at={handle:e=>{e.cmd.program.option("-p, --proxy <url>","set proxy for uploading",(t=>{e.setConfig({"picBed.proxy":t})}))}},it=async(e,t)=>{try{const r=Et(t.tmp),n=T.join(t.tmp,"template");let a={};r.prompts&&r.prompts.length>0&&(a=await e.cmd.inquirer.prompt(r.prompts));let i=await y(["**/*"],{cwd:n,dot:!0});if(i=i.filter((t=>{let n="";return Object.keys(r.filters).forEach((e=>{M(t,e,{dot:!0})&&(n=t)})),!n||st(e,r.filters[n],a)})),0===i.length)return void e.log.warn("Template files not found!");const s=ot(i,n,a);lt(t.dest,s),"function"==typeof r.complete&&r.complete({answers:a,options:t,files:i,ctx:e}),r.completeMessage&&e.log.success(r.completeMessage),e.log.success("Done!")}catch(t){e.log.error(t)}},st=(e,t,r)=>{const n=new Function("data","with (data) { return "+t+"}");try{return n(r)}catch(r){return e.log.error(`Error when evaluating filter condition: ${JSON.stringify(t)}`),!1}},Et=e=>{const r=T.join(e,"index.js");if(t.existsSync(r)){return require(r)}return{}},ot=(e,r,n)=>{const a={};return e.forEach((e=>{const i=t.readFileSync(T.join(r,e),"utf8"),s=G(i,n);(Buffer.isBuffer(s)||/[^\s]/.test(s))&&(a[e]=s)})),a},lt=(e,r)=>{Object.keys(r).forEach((n=>{const i=T.join(e,n);a(T.dirname(i)),t.writeFileSync(i,r[n])}))},It=(e,r)=>{r.offline?t.existsSync(r.template)?it(e,r).catch((t=>{e.log.error(t)})):e.log.error(`Local template ${r.template} not found`):(r.template=r.hasSlash?r.template:"PicGo/picgo-template-"+r.template,St(e,r))},St=(e,r)=>{t.existsSync(r.tmp)&&O(r.tmp),e.log.info("Template files are downloading..."),R(r.template,r.tmp,{clone:r.clone},(t=>{t?e.log.error(t):(e.log.success("Template files are downloaded!"),it(e,r).catch((t=>{e.log.error(t)})))}))},_t={handle:async e=>{e.cmd.program.command("init").arguments("<template> [project]").option("--clone","use git clone").option("--offline","use cached template").description("create picgo plugin's development templates").action(((r,n,a)=>{(async()=>{try{const i=r.includes("/"),s=!n||"."===n,E=T.resolve(n||"."),o=a.clone||!1,l=a.offline||!1,I=T.join(A(),".piclist/templates",r.replace(/[/:]/g,"-"));a.offline&&(r=I);const S={template:r,project:n,hasSlash:i,inPlace:s,dest:E,clone:o,tmp:I,offline:l};s||t.existsSync(E)?await e.cmd.inquirer.prompt([{type:"confirm",message:s?"Generate project in current directory?":"Target directory exists. Continue?",name:"ok"}]).then((t=>{t.ok&&It(e,S)})):It(e,S)}catch(t){if(e.log.error(t),process.argv.includes("--debug"))throw t}})().catch((t=>{e.log.error(t)}))})).on("--help",(()=>{console.log(),console.log("Examples:"),console.log(),console.log(U.gray(" # create a new project with an official template")),console.log(" $ picgo init plugin my-project"),console.log(),console.log(U.gray(" # create a new project straight from a github template")),console.log(" $ picgo init username/repo my-project"),console.log()}))}},ut={handle:e=>{e.cmd.program.command("i18n").arguments("[lang]").description("change language, zh-CN, zh-TW, en").action((async(t="")=>{const r=e.i18n.getLanguageList();if(!t){const n=[{type:"list",name:"i18n",choices:r,message:"Choose a language",default:e.getConfig("settings.language")||"zh-CN"}];t=(await e.cmd.inquirer.prompt(n)).i18n}r.includes(t)?(e.i18n.setLanguage(t),e.log.success(`Language set to ${t}`)):e.log.warn("No such language")}))}};class Pt{constructor(e){this.name=e,this.list=new Map,this.pluginIdMap=new Map}register(e,t){var r;if(!e)throw new TypeError("id is required!");if("function"!=typeof t.handle)throw new TypeError("plugin.handle must be a function!");if(this.list.has(e))throw new TypeError(`${this.name} duplicate id: ${e}!`);this.list.set(e,t),Pt.currentPlugin&&(this.pluginIdMap.has(Pt.currentPlugin)?null===(r=this.pluginIdMap.get(Pt.currentPlugin))||void 0===r||r.push(e):this.pluginIdMap.set(Pt.currentPlugin,[e]))}unregister(e){if(this.pluginIdMap.has(e)){const t=this.pluginIdMap.get(e);null==t||t.forEach((e=>{this.list.delete(e)}))}}getName(){return this.name}get(e){return this.list.get(e)}getList(){return[...this.list.values()]}getIdList(){return[...this.list.keys()]}}const ct=(e=null)=>{Pt.currentPlugin=e};class pt{constructor(e){this.name="commander",this.list=new Map,this.pluginIdMap=new Map,this.program=new g,this.inquirer=d,this.ctx=e}getName(){return this.name}init(){var e;this.program.version("1.8.12","-v, --version").option("-d, --debug","debug mode",(()=>{this.ctx.setConfig({debug:!0})})).option("-s, --silent","silent mode",(()=>{this.ctx.setConfig({silent:!0})})).on("command:*",(()=>{this.ctx.log.error(`Invalid command: ${this.program.args.join(" ")}\nSee --help for a list of available commands.`),process.exit(1)})),(e=this.ctx).cmd.register("pluginHandler",Se),e.cmd.register("config",_e),e.cmd.register("setting",rt),e.cmd.register("upload",Qe),e.cmd.register("use",nt),e.cmd.register("proxy",at),e.cmd.register("init",_t),e.cmd.register("i18n",ut)}register(e,t){var r;if(!e)throw new TypeError("name is required!");if("function"!=typeof t.handle)throw new TypeError("plugin.handle must be a function!");if(this.list.has(e))throw new TypeError(`${this.name} plugin duplicate id: ${e}!`);this.list.set(e,t);const n=Pt.currentPlugin;null!==n&&(this.pluginIdMap.has(n)?null===(r=this.pluginIdMap.get(n))||void 0===r||r.push(e):this.pluginIdMap.set(n,[e]))}unregister(e){if(this.pluginIdMap.has(e)){const t=this.pluginIdMap.get(e);null==t||t.forEach((e=>{this.list.delete(e)}))}}loadCommands(){this.getList().forEach((e=>{try{e.handle(this.ctx)}catch(e){this.ctx.log.error(e)}}))}get(e){return this.list.get(e)}getList(){return[...this.list.values()]}getIdList(){return[...this.list.keys()]}}var Ct,At,Tt;!function(e){e.success="success",e.info="info",e.warn="warn",e.error="error"}(Ct||(Ct={})),function(e){e.UPLOAD_PROGRESS="uploadProgress",e.FAILED="failed",e.BEFORE_TRANSFORM="beforeTransform",e.BEFORE_UPLOAD="beforeUpload",e.AFTER_UPLOAD="afterUpload",e.FINISHED="finished",e.INSTALL="install",e.UNINSTALL="uninstall",e.UPDATE="update",e.NOTIFICATION="notification"}(At||(At={})),function(e){e.CONFIG_CHANGE="CONFIG_CHANGE"}(Tt||(Tt={}));class gt{constructor(e){this.level={[Ct.success]:"green",[Ct.info]:"blue",[Ct.warn]:"yellow",[Ct.error]:"red"},this.ctx=e}handleLog(e,...t){if(this.logLevel=this.ctx.getConfig("settings.logLevel"),!this.ctx.getConfig("silent")&&this.checkLogLevel(e,this.logLevel)){const r=U[this.level[e]](`[PicList ${e.toUpperCase()}]:`);console.log(r,...t),this.logPath=this.ctx.getConfig("settings.logPath")||T.join(this.ctx.baseDir,"./piclist.log"),setTimeout((()=>{try{const r=this.checkLogFileIsLarge(this.logPath);if(r.isLarge){const e=`Log file is too large (> ${r.logFileSizeLimit/1024/1024||"10"} MB), recreate log file`;console.log(U.yellow("[PicList WARN]:"),e),this.recreateLogFile(this.logPath),t.unshift(e)}this.handleWriteLog(this.logPath,e,...t)}catch(e){console.error("[PicList Error] on checking log file size",e)}}),0)}}checkLogFileIsLarge(e){if(t.existsSync(e)){const r=t.statSync(e).size,n=1024*Ge(this.ctx.getConfig("settings.logFileSizeLimit")||10)*1024;return{isLarge:r>n,logFileSize:r,logFileSizeLimit:n}}return{isLarge:!1}}recreateLogFile(e){t.existsSync(e)&&(t.unlinkSync(e),i(e))}handleWriteLog(e,r,...n){try{let a=`${b().format("YYYY-MM-DD HH:mm:ss")} [PicList ${r.toUpperCase()}] `;n.forEach((e=>{e instanceof Error&&"error"===r?a+=`\n------Error Stack Begin------\n${x.format(null==e?void 0:e.stack)}\n-------Error Stack End------- `:("object"==typeof e&&(e=JSON.stringify(e,null,2)),a+=`${e} `)})),a+="\n",t.appendFileSync(e,a)}catch(e){console.error("[PicList Error] on writing log file",e)}}checkLogLevel(e,t){return void 0===t||"all"===t||(Array.isArray(t)?t.some((t=>t===e||"all"===t)):e===t)}success(...e){this.handleLog(Ct.success,...e)}info(...e){this.handleLog(Ct.info,...e)}error(...e){this.handleLog(Ct.error,...e)}warn(...e){this.handleLog(Ct.warn,...e)}debug(...e){be()&&this.handleLog(Ct.info,...e)}}class dt{constructor(e){this.ctx=e}async install(e,t={},r){const n=[],a=e.map((e=>Dt(this.ctx,e))).filter((e=>this.ctx.pluginLoader.hasPlugin(e.pkgName)?(n.push(e.pkgName),this.ctx.log.success(`PicList has already installed ${e.pkgName}`),!1):!!e.success)),i=a.map((e=>e.fullName)),s=a.map((e=>e.pkgName));if(i.length>0){const e=await this.execCommand("install",i,this.ctx.baseDir,t,r);if(e.code){const t=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_REASON",{code:`${e.code}`,data:e.data});this.ctx.log.error(t),this.ctx.emit("installFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED"),body:t});return{success:!1,body:t}}s.forEach((e=>{this.ctx.pluginLoader.registerPlugin(e)})),this.ctx.log.success(this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS")),this.ctx.emit("installSuccess",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS"),body:[...s,...n]});return{success:!0,body:[...s,...n]}}if(0===n.length){const e=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID");this.ctx.log.error(e),this.ctx.emit("installFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED"),body:e});return{success:!1,body:e}}this.ctx.log.success(this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS")),this.ctx.emit("installSuccess",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS"),body:[...s,...n]});return{success:!0,body:[...s,...n]}}async uninstall(e){const t=e.map((e=>Dt(this.ctx,e))).filter((e=>e.success)).map((e=>e.pkgName));if(t.length>0){const e=await this.execCommand("uninstall",t,this.ctx.baseDir);if(e.code){const t=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_REASON",{code:`${e.code}`,data:e.data});this.ctx.log.error(t),this.ctx.emit("uninstallFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED"),body:t});return{success:!1,body:t}}t.forEach((e=>{this.ctx.pluginLoader.unregisterPlugin(e)})),this.ctx.log.success(this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS")),this.ctx.emit("uninstallSuccess",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS"),body:t});return{success:!0,body:t}}{const e=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID");this.ctx.log.error(e),this.ctx.emit("uninstallFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED"),body:e});return{success:!1,body:e}}}async update(e,t={},r){const n=e.map((e=>Dt(this.ctx,e))).filter((e=>e.success)).map((e=>e.pkgName));if(n.length>0){const e=await this.execCommand("update",n,this.ctx.baseDir,t,r);if(e.code){const t=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_REASON",{code:`${e.code}`,data:e.data});this.ctx.log.error(t),this.ctx.emit("updateFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED"),body:t});return{success:!1,body:t}}this.ctx.log.success(this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS")),this.ctx.emit("updateSuccess",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS"),body:n});return{success:!0,body:n}}{const e=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_VALID");this.ctx.log.error(e),this.ctx.emit("updateFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED"),body:e});return{success:!1,body:e}}}async execCommand(e,t,r,n={},a={}){const i=n.registry||this.ctx.getConfig("settings.registry"),s=n.proxy||this.ctx.getConfig("settings.proxy");return await new Promise((n=>{var E,o;let l=[e].concat(t).concat("--color=always").concat("--save");i&&(l=l.concat(`--registry=${i}`)),s&&(l=l.concat(`--proxy=${s}`));try{const e=w("npm",l,{cwd:r,env:Object.assign({},process.env,a)});let t="";null===(E=e.stdout)||void 0===E||E.on("data",(e=>{t+=e})).pipe(process.stdout),null===(o=e.stderr)||void 0===o||o.on("data",(e=>{t+=e})).pipe(process.stderr),e.on("close",(e=>{n(e?{code:e,data:t}:{code:0,data:t})})),e.on("error",(e=>{this.ctx.log.error(e),this.ctx.log.error("NPM is not installed"),this.ctx.emit(At.FAILED,"NPM is not installed")}))}catch(e){this.ctx.log.error(e),this.ctx.emit(At.FAILED,e)}}))}}const Dt=(e,t)=>{const r={success:!1,fullName:"",pkgName:""},n=he(t,e.log);if(!n)return r;const a=Be(n,e.log);return a?{success:!0,fullName:n,pkgName:a}:r};class mt{constructor(e){this.list=[],this.fullList=new Set,this.pluginMap=new Map,this.ctx=e,this.init()}init(){const e=T.join(this.ctx.baseDir,"package.json");if(!t.existsSync(e)){const r={name:"picgo-plugins",description:"picgo-plugins",repository:"https://github.com/Kuingsmile/PicList-Core",license:"MIT"};t.writeFileSync(e,JSON.stringify(r),"utf8")}}resolvePlugin(e,t){try{return W(t,{basedir:e.baseDir})}catch(r){return T.join(e.baseDir,"node_modules",t)}}load(){const e=T.join(this.ctx.baseDir,"package.json"),r=T.join(this.ctx.baseDir,"node_modules/");if(!t.existsSync(r))return!1;const a=n(e),i=Object.keys(a.dependencies||{}),s=Object.keys(a.devDependencies||{}),E=i.concat(s).filter((e=>{if(!/^picgo-plugin-|^@[^/]+\/picgo-plugin-/.test(e))return!1;const r=this.resolvePlugin(this.ctx,e);return t.existsSync(r)}));for(const e of E)this.registerPlugin(e);return!0}registerPlugin(e,t){if(e&&"string"==typeof e){this.fullList.add(e);try{if(t){this.list.push(e),ct(e);const r=t(this.ctx);this.pluginMap.set(e,r),r.register(this.ctx)}else if(!0===this.ctx.getConfig(`picgoPlugins.${e}`)||void 0===this.ctx.getConfig(`picgoPlugins.${e}`)){this.list.push(e),ct(e),this.getPlugin(e).register(this.ctx);const t=`picgoPlugins[${e}]`;this.ctx.saveConfig({[t]:!0})}}catch(t){this.pluginMap.delete(e),this.list=this.list.filter((t=>t!==e)),this.fullList.delete(e),this.ctx.log.error(t),this.ctx.emit(At.NOTIFICATION,{title:`Plugin ${e} Load Error`,body:t})}}else this.ctx.log.warn("Please provide valid plugin")}unregisterPlugin(e){this.list=this.list.filter((t=>t!==e)),this.fullList.delete(e),this.pluginMap.delete(e),ct(e),this.ctx.helper.uploader.unregister(e),this.ctx.helper.transformer.unregister(e),this.ctx.helper.beforeTransformPlugins.unregister(e),this.ctx.helper.beforeUploadPlugins.unregister(e),this.ctx.helper.afterUploadPlugins.unregister(e),this.ctx.cmd.unregister(e),this.ctx.removeConfig("picgoPlugins",e)}getPlugin(e){if(this.pluginMap.has(e))return this.pluginMap.get(e);const t=T.join(this.ctx.baseDir,"node_modules/"),r=require(t+e)(this.ctx);return this.pluginMap.set(e,r),r}getList(){return this.list}hasPlugin(e){return this.fullList.has(e)}getFullList(){return[...this.fullList]}}const Lt=new e,ft=new H.Agent({maxVersion:"TLSv1.2",minVersion:"TLSv1.2",rejectUnauthorized:!1});function ht(e,t,r){"object"==typeof r&&"value"in r&&"options"in r?e.append(t,r.value,r.options):e.append(t,r)}function Bt(e){return Object.assign(Object.assign({},e),{statusCode:e.status,body:e.data})}function Nt(e){var t,r,n,a,i,s,E;const o={method:(null===(r=null===(t=null==e?void 0:e.config)||void 0===t?void 0:t.method)||void 0===r?void 0:r.toUpperCase())||"",url:(null===(n=null==e?void 0:e.config)||void 0===n?void 0:n.url)||"",statusCode:(null===(a=null==e?void 0:e.response)||void 0===a?void 0:a.status)||0,message:(null==e?void 0:e.message)||"",stack:(null==e?void 0:e.stack)||{},response:{status:(null===(i=null==e?void 0:e.response)||void 0===i?void 0:i.status)||0,statusCode:(null===(s=null==e?void 0:e.response)||void 0===s?void 0:s.status)||0,body:(null===(E=null==e?void 0:e.response)||void 0===E?void 0:E.data)||""}};return Promise.reject(o)}class Ut{constructor(e){this.proxy="",this.options={},this.ctx=e,this.init(),Lt.on(Tt.CONFIG_CHANGE,(e=>{var t;switch(e.configName){case"picBed":(null===(t=e.value)||void 0===t?void 0:t.proxy)&&(this.proxy=e.value.proxy);break;case"picBed.proxy":this.proxy=e.value}}))}init(){const e=this.ctx.getConfig("picBed.proxy");e&&(this.proxy=e)}handleProxy(){if(this.proxy)try{const e=new L(this.proxy);return{host:e.hostname,port:parseInt(e.port||"0",10),protocol:e.protocol}}catch(e){}return!1}request(e){var t;this.options.proxy=this.handleProxy(),this.options.headers=e.headers||{},this.options.maxBodyLength=1/0,this.options.maxContentLength=1/0,this.options.proxy&&(null===(t=e.url)||void 0===t?void 0:t.startsWith("https://"))?(this.options.httpsAgent=$({proxy:{host:this.options.proxy.host,port:this.options.proxy.port}}),this.options.proxy=!1):this.options.httpsAgent=ft;const r=K.create(this.options);r.interceptors.response.use(Bt,Nt);const n=function(e){var t;let r=!1;const n=Object.assign(Object.assign({},e),{url:e.url||"",headers:e.headers||{}});if(e.proxy){let a=e.proxy;if("string"==typeof a){try{a=new L(e.proxy)}catch(e){a=!1,n.proxy=!1,console.error(e)}r=!0}a&&((null===(t=e.url)||void 0===t?void 0:t.startsWith("https://"))?(n.proxy=!1,n.httpsAgent=$({proxy:{host:null==a?void 0:a.hostname,port:parseInt(null==a?void 0:a.port,10)}})):n.proxy={host:a.hostname,port:parseInt(a.port,10),protocol:"http"})}if("formData"in e){const t=new F;for(const r in e.formData)ht(t,r,e.formData[r]);n.data=t,n.headers=Object.assign(n.headers||{},t.getHeaders()),r=!0,delete n.formData}return"body"in e&&(n.data=e.body,r=!0,delete n.body),"qs"in e&&(n.params=e.qs,r=!0),n.__isOldOptions=r,n}(e);return r.interceptors.request.use((function(e){var t,r,n;let a="";return(null===(t=null==e?void 0:e.headers)||void 0===t?void 0:t.contentType)?(a=e.headers.contentType,delete e.headers.contentType):(null===(r=null==e?void 0:e.headers)||void 0===r?void 0:r.ContentType)?(a=e.headers.ContentType,delete e.headers.ContentType):(null===(n=null==e?void 0:e.headers)||void 0===n?void 0:n["content-type"])&&(a=e.headers["content-type"],delete e.headers["content-type"]),""!==a&&e.headers&&(e.headers["Content-Type"]=a),e})),"resolveWithFullResponse"in e&&e.resolveWithFullResponse?r.request(n):r.request(n).then((t=>n.__isOldOptions?"json"in e?e.json?t.data:void 0:JSON.stringify(t.data):t.data))}}class Rt extends e{constructor(e){super(),this.ttfLink="https://release.piclist.cn/simhei.ttf",this.ctx=e;const t=T.join(e.baseDir,"piclistTemp"),r=T.join(e.baseDir,"imgTemp");this.ttfPath=T.join(e.baseDir,"assets","simhei.ttf"),a(r),s(t)}async downloadTTF(){if(a(T.dirname(this.ttfPath)),t.existsSync(this.ttfPath))return!0;this.ctx.log.info("Download ttf file.");try{const e=await K.get(this.ttfLink,{responseType:"arraybuffer"});return t.writeFileSync(this.ttfPath,e.data),this.ctx.log.info("Download ttf file success."),!0}catch(e){return this.ctx.log.error("Download ttf file failed."),!1}}helpGetOption(e){const t=e.getConfig("buildIn.compress"),r=e.getConfig("buildIn.watermark"),n=e.getConfig("picBed.uploader")||e.getConfig("picBed.current")||"smms";return!e.helper.uploader.get(n)&&t?t.picBed="smms":t&&(t.picBed=n),{compressOptions:t,watermarkOptions:r}}async start(e){const r=(e=>({configPath:e.configPath,baseDir:e.baseDir,log:e.log,cmd:e.cmd,output:[],input:[],rawInput:[],pluginLoader:e.pluginLoader,pluginHandler:e.pluginHandler,Request:e.Request,helper:e.helper,VERSION:e.VERSION,GUI_VERSION:e.GUI_VERSION,request:e.request,i18n:e.i18n,getConfig:e.getConfig.bind(e),saveConfig:e.saveConfig.bind(e),removeConfig:e.removeConfig.bind(e),setConfig:e.setConfig.bind(e),unsetConfig:e.unsetConfig.bind(e),upload:e.upload.bind(e),addListener:e.addListener.bind(e),on:e.on.bind(e),once:e.once.bind(e),removeListener:e.removeListener.bind(e),off:e.off.bind(e),removeAllListeners:e.removeAllListeners.bind(e),setMaxListeners:e.setMaxListeners.bind(e),getMaxListeners:e.getMaxListeners.bind(e),listeners:e.listeners.bind(e),rawListeners:e.rawListeners.bind(e),emit:e.emit.bind(e),listenerCount:e.listenerCount.bind(e),prependListener:e.prependListener.bind(e),prependOnceListener:e.prependOnceListener.bind(e),eventNames:e.eventNames.bind(e)}))(this.ctx);try{if(!Array.isArray(e))throw new Error("Input must be an array.");r.input=e,r.rawInputPath=[],r.rawInput=_(e),r.output=[];const{compressOptions:n,watermarkOptions:a}=this.helpGetOption(r);if(r.emit(At.UPLOAD_PROGRESS,0),r.emit(At.BEFORE_TRANSFORM,r),r.log.info("Before transform"),n||a){const e=T.join(r.baseDir,"piclistTemp");await Promise.allSettled(r.input.map((async(i,s)=>{const E=Ce(i),o=E?await De(i,r):{success:!1};if(E&&(!o.success||!o.buffer))return;let l,I=!1;r.rawInputPath[s]=i;const S=E?o.extname||"":T.extname(i),_=E?o.buffer:t.readFileSync(i);if(Ve(a,S)){if(!(null==a?void 0:a.watermarkFontPath)&&"image"!==(null==a?void 0:a.watermarkType)){await this.downloadTTF()||(this.ctx.log.warn("Download ttf file failed, skip add watermark."),I=!0)}I||(r.log.info("Add watermark to image"),l=await $e(_,a,this.ttfPath,r.log))}if(je(n,S))if(r.log.info("Compress or convert image"),E||".heic"!==S&&".heif"!==S)l=await Ye(null!=l?l:_,n,S,r.log);else{const a=await v({buffer:_,format:"JPEG",quality:1}),s=T.join(e,`${T.basename(i,S)}.jpg`);t.writeFileSync(s,Buffer.from(a)),l=await Ye(t.readFileSync(s),n,".jpg",r.log)}if(!l&&(null==n?void 0:n.isRemoveExif)&&(r.log.info("Remove exif info."),l=await ze(_,S)),l){let a=(null==n?void 0:n.isConvert)?qe(n,S):S;a=a.startsWith(".")?a:`.${a}`;const I=E?T.join(e,`${o.fileName?`${T.basename(o.fileName,T.extname(o.fileName))}`:(new Date).getTime()}${a}`):T.join(e,`${T.basename(i,S)}${a}`);r.rawInputPath[s]=T.join(T.dirname(i),E?T.basename(I):`${T.basename(i,S)}${a}`),t.writeFileSync(I,l),r.input[s]=I}})))}else for(const e of r.input)r.rawInputPath.push(e);await this.beforeTransform(r),await this.doTransform(r);const i=r.getConfig("buildIn.rename")||{};if(i.enable){const e=i.format||"{filename}";r.output=r.output.map(((t,n)=>{let a=t.fileName;return e&&(a=pe(r.rawInputPath[n],e,void 0,t.base64Image?t.base64Image:t.buffer),a=a.replace(/\/+/g,"/"),"/"===a.slice(-1)&&(a+=n.toString())),t.fileName=a,t}))}return await this.beforeUpload(r),await this.doUpload(r),r.input=r.rawInput,await this.afterUpload(r),r}catch(e){if(r.log.warn(At.FAILED),r.emit(At.UPLOAD_PROGRESS,-1),r.emit(At.FAILED,e),r.log.error(e),r.getConfig("debug"))throw e;return r}}async beforeTransform(e){return await this.handlePlugins(e.helper.beforeTransformPlugins,e),e}async doTransform(e){e.emit(At.UPLOAD_PROGRESS,30);const t=e.getConfig("picBed.transformer")||"path";let r=t,n=e.helper.transformer.get(t);return n||(n=e.helper.transformer.get("path"),r="path",e.log.warn(`Can't find transformer - ${t}, switch to default transformer - path`)),e.log.info(`Transforming... Current transformer is [${r}]`),await(null==n?void 0:n.handle(e)),e}async beforeUpload(e){return e.emit(At.UPLOAD_PROGRESS,60),e.log.info("Before upload"),e.emit(At.BEFORE_UPLOAD,e),await this.handlePlugins(e.helper.beforeUploadPlugins,e),e}async doUpload(e){let t=e.getConfig("picBed.uploader")||e.getConfig("picBed.current")||"smms",r=e.helper.uploader.get(t),n=t;r||(e.log.warn(`Can't find uploader - ${t}, switch to default uploader - smms`),t="smms",n="smms",r=e.helper.uploader.get("smms")),e.log.info(`Uploading... Current uploader is [${n}]`),await(null==r?void 0:r.handle(e));for(const r of e.output)r.type=t;return e}async afterUpload(e){e.emit(At.AFTER_UPLOAD,e),e.emit(At.UPLOAD_PROGRESS,100),await this.handlePlugins(e.helper.afterUploadPlugins,e);let t="";const r=e.output.length,n=!0===e.getConfig("settings.encodeOutputURL");for(let a=0;a<r;a++)void 0!==e.output[a].imgUrl&&(t+=n?Te(e.output[a].imgUrl):e.output[a].imgUrl,a!==r-1&&(t+="\n")),delete e.output[a].base64Image,delete e.output[a].buffer;return e.emit(At.FINISHED,e),e.log.success(`\n${t}`),e}async handlePlugins(e,t){const r=e.getList(),n=e.getIdList(),a=e.getName();return await Promise.all(r.map((async(e,r)=>{try{t.log.info(`${a}: ${n[r]} running`),await e.handle(t)}catch(e){throw t.log.error(`${a}: ${n[r]} error`),e}}))),t}}const Ot=(e,t,r,n="")=>{let a=n||"sm.ms";return a=a.replace(/^https?:\/\//,"").replace(/\/$/,""),{method:"POST",url:`https://${a}/api/v2/upload`,headers:{contentType:"multipart/form-data","User-Agent":"PicList",Authorization:r},formData:{smfile:{value:t,options:{filename:e}},ssl:"true"}}},Mt=async e=>{const t=e.getConfig("picBed.smms");if(!t)throw new Error("Can not find smms config!");const r=e.output;for(const n of r)if(n.fileName&&n.buffer){let r=n.buffer;!r&&n.base64Image&&(r=Buffer.from(n.base64Image,"base64"));const a=Ot(n.fileName,r,null==t?void 0:t.token,null==t?void 0:t.backupDomain);try{const r=await e.request(a),i=JSON.parse(r);if("success"===i.code)delete n.base64Image,delete n.buffer,n.imgUrl=i.data.url,n.hash=i.data.hash;else{if("image_repeated"!==i.code||"string"!=typeof i.images)throw e.emit(At.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:i.message}),new Error(i.message);{delete n.base64Image,delete n.buffer,n.imgUrl=i.images;const e=await K.get("https://sm.ms/api/v2/upload_history",{headers:{Authorization:t.token}});if("success"===e.data.code){const t=e.data.data;for(const e of t)if(e.url===i.images){n.hash=e.hash;break}}}}}catch(t){throw e.log.error(t),t}}return e},yt=e=>{const t=e.getConfig("picBed.smms")||{};return[{name:"token",message:"api token",type:"input",get prefix(){return e.i18n.translate("PICBED_SMMS_TOKEN")},get alias(){return e.i18n.translate("PICBED_SMMS_TOKEN")},default:t.token||"",required:!0},{name:"backupDomain",type:"input",get prefix(){return e.i18n.translate("PICBED_SMMS_BACKUP_DOMAIN")},get message(){return e.i18n.translate("PICBED_SMMS_MESSAGE_BACKUP_DOMAIN")},get alias(){return e.i18n.translate("PICBED_SMMS_BACKUP_DOMAIN")},default:t.backupDomain||"",required:!1}]};function Gt({path:e,startSlash:t=!1,endSlash:r=!0,rootToEmpty:n=!0}){const a=null==e?void 0:e.replace(/^\/+|\/+$/g,"").replace(/\/{2,}/g,"/");return a?`${t?"/":""}${a}${r?"/":""}`:n?"":"/"}function bt(e){return e.replace(/\/{2,}/g,"/").split("/").map((e=>encodeURIComponent(e))).join("/")}const xt=(e,t)=>{const r=e.secretId,n=e.secretKey,a=e.appId,i=e.bucket;let s,E="";if(e.version&&"v4"!==e.version){const r=Math.floor((new Date).getTime()/1e3);E=`${r};${r+86400}`;const a=B.createHmac("sha1",n).update(E).digest("hex"),i=e.endpoint?e.endpoint:`cos.${e.area}.myqcloud.com`,o=`put\n/${e.path}${t}\n\nhost=${e.bucket}.${i}\n`,l=`sha1\n${E}\n${B.createHash("sha1").update(o).digest("hex")}\n`;s=B.createHmac("sha1",a).update(l).digest("hex")}else{const e=Math.floor(1e10*Math.random()),t=Math.floor((new Date).getTime()/1e3)-1,E=`a=${a}&b=${i}&k=${r}&e=${t+3600}&t=${t}&r=${e}&f=`,o=B.createHmac("sha1",n).update(E).digest(),l=Buffer.concat([o,Buffer.from(E)]);s=Buffer.from(l).toString("base64")}return{signature:s,appId:a,bucket:i,signTime:E}},wt=(e,t,r,n,a)=>{const i=e.area,s=e.path;if(e.version&&"v4"!==e.version){const i=e.endpoint?e.endpoint:`cos.${e.area}.myqcloud.com`;return{method:"PUT",url:`http://${e.bucket}.${i}/${bt(`${s}${t}`)}`,headers:{Host:`${e.bucket}.${i}`,Authorization:`q-sign-algorithm=sha1&q-ak=${e.secretId}&q-sign-time=${r.signTime}&q-key-time=${r.signTime}&q-header-list=host&q-url-param-list=&q-signature=${r.signature}`,contentType:Y(t)||"application/octet-stream","User-Agent":`PicGo;${a};null;null`},body:n,resolveWithFullResponse:!0}}return{method:"POST",url:`http://${i}.file.myqcloud.com/files/v2/${r.appId}/${r.bucket}/${encodeURI(s)}${t}`,headers:{Host:`${i}.file.myqcloud.com`,Authorization:r.signature,contentType:"multipart/form-data","User-Agent":`PicGo;${a};null;null`},formData:{op:"upload",filecontent:n},resolveWithFullResponse:!0}},Wt=async e=>{var t,r,n;const a=e.getConfig("picBed.tcyun");if(!a)throw new Error("Can't find tencent COS config");try{const i=e.output,s=(a.customUrl||"").replace(/\/$/,""),E=Gt({path:a.path});a.path=E;const o=!a.version||"v4"===a.version;for(const l of i)if(l.fileName&&l.buffer){const i=xt(a,l.fileName);if(!i)return!1;let I=l.buffer;!I&&l.base64Image&&(I=Buffer.from(l.base64Image,"base64"));const S=wt(a,l.fileName,i,I,e.GUI_VERSION||e.VERSION),_=await e.request(S).then((e=>e)).catch((t=>({statusCode:400,body:{msg:e.i18n.translate("AUTH_FAILED"),err:t}})));let u;if(u=o&&"string"==typeof _?JSON.parse(_):_,400===u.statusCode)throw(null===(t=null==u?void 0:u.body)||void 0===t?void 0:t.err)?u.body.err:new Error((null===(r=null==u?void 0:u.body)||void 0===r?void 0:r.msg)||(null===(n=null==u?void 0:u.body)||void 0===n?void 0:n.message));const P=a.options||"",c=void 0!==a.slim&&!!a.slim;if(o&&"SUCCESS"===u.message)delete l.base64Image,delete l.buffer,l.imgUrl=s?`${s}/${bt(`${E}${l.fileName}`)}${P}`:`${u.data.source_url}${P}`;else{if(o||!u||200!==u.statusCode)throw new Error(_.body.msg);if(delete l.base64Image,delete l.buffer,s)l.imgUrl=`${s}/${bt(`${E}${l.fileName}`)}${P}`;else{const e=a.endpoint?a.endpoint:`cos.${a.area}.myqcloud.com`;l.imgUrl=`https://${a.bucket}.${e}/${bt(`${E}${l.fileName}`)}${P}`}}c&&(l.imgUrl+=P?"&imageSlim":"?imageSlim")}return e}catch(t){if(!a.version||"v4"===a.version)try{const r=JSON.parse(t.error);e.emit(At.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("UPLOAD_FAILED_REASON",{code:r.code}),text:"https://cloud.tencent.com/document/product/436/8432"})}catch(e){}throw t}},Kt=e=>{const t=e.getConfig("picBed.tcyun")||{};return[{name:"version",type:"list",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_VERSION")},alias:e.i18n.translate("PICBED_TENCENTCLOUD_VERSION"),choices:["v4","v5"],default:"v5",required:!1},{name:"secretId",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_SECRETID")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_SECRETID")},default:t.secretId||"",required:!0},{name:"secretKey",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_SECRETKEY")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_SECRETKEY")},default:t.secretKey||"",required:!0},{name:"bucket",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_BUCKET")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_BUCKET")},default:t.bucket||"",required:!0},{name:"appId",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_APPID")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_APPID")},default:t.appId||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_APPID")},required:!0},{name:"area",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_AREA")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_AREA")},default:t.area||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_AREA")},required:!0},{name:"endpoint",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_ENDPOINT")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_ENDPOINT")},default:t.endpoint||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_ENDPOINT")},required:!1},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_PATH")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_PATH")},default:t.path||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_PATH")},required:!1},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_CUSTOMURL")},default:t.customUrl||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_CUSTOMURL")},required:!1},{name:"options",type:"input",default:t.options||"",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_OPTIONS")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_OPTIONS")},get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_OPTIONS")},required:!1},{name:"slim",type:"confirm",default:void 0!==t.slim&&!!t.slim,get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_SLIM")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_SLIM")},required:!1,get confirmText(){return e.i18n.translate("PICBED_TENCENTCLOUD_SLIM_CONFIRM")},get cancelText(){return e.i18n.translate("PICBED_TENCENTCLOUD_SLIM_CANCEL")},get tips(){return e.i18n.translate("PICBED_TENCENTCLOUD_SLIM_TIP")}}]};function Ft(e,t,r,n=""){return`https://api.github.com/repos/${e}/contents/${bt(`${t}${r}`)}${n}`}const Ht=(e,t,r)=>{const{token:n,repo:a}=t,i=Y(e)||"application/octet-stream";return{method:"PUT",url:Ft(a,t.path,e),headers:{Authorization:`token ${n}`,"User-Agent":"PicList","Content-Type":i},body:r,json:!0}},$t=(e,t)=>{const{token:r,repo:n,branch:a}=t;return{method:"GET",url:Ft(n,t.path,e,`?ref=${a}`),headers:{Authorization:`token ${r}`,"User-Agent":"PicList"},json:!0}},vt=async e=>{const t=e.getConfig("picBed.github");if(!t)throw new Error("Can't find github config");const r=Gt({path:t.path});t.path=r,t.customUrl=(t.customUrl||"").replace(/\/$/,"");try{const n=e.output;for(const a of n)if(a.fileName&&a.buffer){const n=a.base64Image||Buffer.from(a.buffer).toString("base64"),i={message:"Upload by PicList",branch:t.branch,content:n,path:r+encodeURI(a.fileName)},s=Ht(a.fileName,t,i);try{const n=await e.request(s);if(!n)throw new Error("Server error, please try again");delete a.base64Image,delete a.buffer,a.imgUrl=t.customUrl?`${t.customUrl}/${bt(`${r}${a.fileName}`)}`:n.content.download_url,a.hash=n.content.sha}catch(n){if(422!==n.statusCode)throw n;{delete a.base64Image,delete a.buffer;const i=await e.request($t(a.fileName,t));if(!Object.keys(i).length)throw n;a.hash=i.sha,a.imgUrl=t.customUrl?`${t.customUrl}/${bt(`${r}${a.fileName}`)}`:i.download_url}}}return e}catch(t){throw e.emit(At.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS_AND_NETWORK")}),t}},Yt=e=>{const t=e.getConfig("picBed.github")||{};return[{name:"repo",type:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_REPO")},get alias(){return e.i18n.translate("PICBED_GITHUB_REPO")},get message(){return e.i18n.translate("PICBED_GITHUB_MESSAGE_REPO")},default:t.repo||"",required:!0},{name:"branch",type:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_BRANCH")},get alias(){return e.i18n.translate("PICBED_GITHUB_BRANCH")},get message(){return e.i18n.translate("PICBED_GITHUB_MESSAGE_BRANCH")},default:t.branch||"master",required:!0},{name:"token",type:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_TOKEN")},get alias(){return e.i18n.translate("PICBED_GITHUB_TOKEN")},default:t.token||"",required:!0},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_PATH")},get alias(){return e.i18n.translate("PICBED_GITHUB_PATH")},get message(){return e.i18n.translate("PICBED_GITHUB_MESSAGE_PATH")},default:t.path||"",required:!1},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_GITHUB_CUSTOMURL")},get message(){return e.i18n.translate("PICBED_GITHUB_MESSAGE_CUSTOMURL")},default:t.customUrl||"",required:!1}]};function kt(e,t,r,n){const a=function(e){return"z0"===e?"":"-"+e}(e.area||"z0"),i=e.path||"";return{method:"POST",url:`http://upload${a}.qiniup.com/putb64/-1/key/${Buffer.from(i+t,"utf-8").toString("base64").replace(/\+/g,"-").replace(/\//g,"_")}`,headers:{Authorization:`UpToken ${r}`,"Content-Type":Y(t)||"application/octet-stream"},body:n}}function qt(e){const t=e.accessKey,r=e.secretKey,n=new k.auth.digest.Mac(t,r),a={scope:e.bucket};return new k.rs.PutPolicy(a).uploadToken(n)}const Vt=async e=>{const t=e.getConfig("picBed.qiniu");if(!t)throw new Error("Can't find qiniu config");try{const r=e.output;for(const n of r)if(n.fileName&&n.buffer){const r=n.base64Image||Buffer.from(n.buffer).toString("base64"),a=kt(t,n.fileName,qt(t),r),i=await e.request(a),s=JSON.parse(i);if(!(null==s?void 0:s.key))throw e.emit(At.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:s.msg}),e.log.error("qiniu error",s),new Error("Upload failed");{delete n.base64Image,delete n.buffer;const e=t.url,r=t.options||"";n.imgUrl=`${e}/${s.key}${r}`}}return e}catch(t){if("Upload failed"!==t.message&&t.response){const r=t.response.body;e.emit(At.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:r.error})}throw t}},jt=e=>{const t=e.getConfig("picBed.qiniu")||{};return[{name:"accessKey",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_ACCESSKEY")},get alias(){return e.i18n.translate("PICBED_QINIU_ACCESSKEY")},default:t.accessKey||"",required:!0},{name:"secretKey",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_SECRETKEY")},get alias(){return e.i18n.translate("PICBED_QINIU_SECRETKEY")},default:t.secretKey||"",required:!0},{name:"bucket",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_BUCKET")},get alias(){return e.i18n.translate("PICBED_QINIU_BUCKET")},default:t.bucket||"",required:!0},{name:"url",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_URL")},get alias(){return e.i18n.translate("PICBED_QINIU_URL")},get message(){return e.i18n.translate("PICBED_QINIU_MESSAGE_URL")},default:t.url||"",required:!0},{name:"area",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_AREA")},get alias(){return e.i18n.translate("PICBED_QINIU_AREA")},get message(){return e.i18n.translate("PICBED_QINIU_MESSAGE_AREA")},default:t.area||"",required:!0},{name:"options",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_OPTIONS")},get alias(){return e.i18n.translate("PICBED_QINIU_OPTIONS")},get message(){return e.i18n.translate("PICBED_QINIU_MESSAGE_OPTIONS")},default:t.options||"",required:!1},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_PATH")},get alias(){return e.i18n.translate("PICBED_QINIU_PATH")},get message(){return e.i18n.translate("PICBED_QINIU_MESSAGE_PATH")},default:t.path||"",required:!1}]};const zt=async(e,t,r,n)=>{const a=t.clientId||"",i=t.username||"",s=(e=>e?e.startsWith("Bearer")?e:`Bearer ${e}`:"")(t.accessToken||""),E=t.album||"";let o;if(i&&s)o=s;else{if(!a)throw new Error("clientId or accessToken is required");o=`Client-ID ${a}`}const l={method:"POST",url:"https://api.imgur.com/3/image",headers:{Authorization:o,"content-type":"multipart/form-data",Host:"api.imgur.com","User-Agent":"PicList"},formData:{image:n,type:"base64",name:r,description:"Uploaded with PicList"}};if(i&&s&&E){let r,n=0,a="";do{const s={method:"GET",url:`https://api.imgur.com/3/account/${i}/albums/${n}`,headers:{Authorization:o},json:!0,resolveWithFullResponse:!0,timeout:1e4};if(t.proxy&&(s.proxy=t.proxy),r=await e.request(s),200!==r.statusCode||!r.body.success)throw new Error("Server error, please try again");const l=r.body.data;for(const e of l)if(e.title===E){a=e.id;break}n++}while(r.body.data.length>0);a&&l.formData&&(l.formData.album=a)}return t.proxy&&(l.proxy=t.proxy),l},Xt=async e=>{var t;const r=e.getConfig("picBed.imgur");if(!r)throw new Error("Can't find imgur config");try{const t=e.output;for(const n of t)if(n.fileName&&n.buffer){const t=n.base64Image||Buffer.from(n.buffer).toString("base64"),a=await zt(e,r,n.fileName,t),i=await e.request(a),s="string"==typeof i?JSON.parse(i):i;if(!s.success)throw new Error("Server error, please try again");delete n.base64Image,delete n.buffer,n.imgUrl=s.data.link,n.hash=s.data.deletehash}return e}catch(r){throw e.emit(At.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS_AND_NETWORK"),text:"http://docs.imgur.com/api/errno/"}),(null===(t=null==r?void 0:r.response)||void 0===t?void 0:t.data)||r}},Qt=e=>{const t=e.getConfig("picBed.imgur")||{};return[{name:"clientId",type:"input",get prefix(){return e.i18n.translate("PICBED_IMGUR_CLIENTID")},get alias(){return e.i18n.translate("PICBED_IMGUR_CLIENTID")},get message(){return e.i18n.translate("PICBED_IMGUR_MESSAGE_CLIENTID")},default:t.clientId||"",required:!1},{name:"username",type:"input",get prefix(){return e.i18n.translate("PICBED_IMGUR_USERNAME")},get alias(){return e.i18n.translate("PICBED_IMGUR_USERNAME")},get message(){return e.i18n.translate("PICBED_IMGUR_MESSAGE_USERNAME")},default:t.username||"",required:!1},{name:"accessToken",type:"input",get prefix(){return e.i18n.translate("PICBED_IMGUR_ACCESS_TOKEN")},get alias(){return e.i18n.translate("PICBED_IMGUR_ACCESS_TOKEN")},get message(){return e.i18n.translate("PICBED_IMGUR_MESSAGE_ACCESS_TOKEN")},default:t.accessToken||"",required:!1},{name:"album",type:"input",get prefix(){return e.i18n.translate("PICBED_IMGUR_ALBUM")},get alias(){return e.i18n.translate("PICBED_IMGUR_ALBUM")},get message(){return e.i18n.translate("PICBED_IMGUR_MESSAGE_ALBUM")},default:t.album||"",required:!1},{name:"proxy",type:"input",get prefix(){return e.i18n.translate("PICBED_IMGUR_PROXY")},get alias(){return e.i18n.translate("PICBED_IMGUR_PROXY")},get message(){return e.i18n.translate("PICBED_IMGUR_MESSAGE_PROXY")},default:t.proxy||"",required:!1}]};const Zt=()=>(new Date).toUTCString(),Jt=(e,t)=>{const r=Zt(),n=`PUT\n\n${Y(t)||"application/octet-stream"}\n${r}\n/${e.bucket}/${e.path}${t}`,a=B.createHmac("sha1",e.accessKeySecret).update(n).digest("base64");return`OSS ${e.accessKeyId}:${a}`},er=(e,t,r,n)=>({method:"PUT",url:`https://${e.bucket}.${e.area}.aliyuncs.com/${bt(`${e.path}${t}`)}`,headers:{Host:`${e.bucket}.${e.area}.aliyuncs.com`,Authorization:r,Date:Zt(),"Content-Type":Y(t)||"application/octet-stream"},body:n,resolveWithFullResponse:!0}),tr=async e=>{const t=e.getConfig("picBed.aliyun");if(!t)throw new Error("Can't find aliYun OSS config");t.path=Gt({path:t.path});try{const r=e.output,n=(t.customUrl||"").replace(/\/$/,""),a=t.path;for(const i of r)if(i.fileName&&i.buffer){const r=Jt(t,i.fileName);let s=i.buffer;!s&&i.base64Image&&(s=Buffer.from(i.base64Image,"base64"));const E=er(t,i.fileName,r,s);if(200!==(await e.request(E)).statusCode)throw new Error("Upload failed");{delete i.base64Image,delete i.buffer;const e=t.options||"";i.imgUrl=n?`${n}/${bt(`${a}${i.fileName}`)}${e}`:`https://${t.bucket}.${t.area}.aliyuncs.com/${bt(`${a}${i.fileName}`)}${e}`}}return e}catch(t){throw e.emit(At.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},rr=e=>{const t=e.getConfig("picBed.aliyun")||{};return[{name:"accessKeyId",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_ACCESSKEYID")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_ACCESSKEYID")},default:t.accessKeyId||"",required:!0},{name:"accessKeySecret",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_ACCESSKEYSECRET")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_ACCESSKEYSECRET")},default:t.accessKeySecret||"",required:!0},{name:"bucket",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_BUCKET")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_BUCKET")},default:t.bucket||"",required:!0},{name:"area",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_AREA")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_AREA")},default:t.area||"",get message(){return e.i18n.translate("PICBED_ALICLOUD_MESSAGE_AREA")},required:!0},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_PATH")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_PATH")},get message(){return e.i18n.translate("PICBED_ALICLOUD_MESSAGE_PATH")},default:t.path||"",required:!1},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_CUSTOMURL")},get message(){return e.i18n.translate("PICBED_ALICLOUD_MESSAGE_CUSTOMURL")},default:t.customUrl||"",required:!1},{name:"options",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_OPTIONS")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_OPTIONS")},get message(){return e.i18n.translate("PICBED_ALICLOUD_MESSAGE_OPTIONS")},default:t.options||"",required:!1}]};const nr=(e,t)=>{const r=e.path||"",n=e.operator,a=ir(e.password),i=(new Date).toUTCString(),s=`PUT&${`/${e.bucket}/${bt(`${r}${t}`)}`}&${i}`;return`UPYUN ${n}:${B.createHmac("sha1",a).update(s).digest("base64")}`},ar=(e,t,r,n)=>{const a=e.bucket,i=e.path;let s=(e.endpoint||"https://v0.api.upyun.com").replace(/\/+$/g,"");return s.startsWith("http")||(s=`https://${s}`),{method:"PUT",url:`${s}/${a}/${bt(`${i}${t}`)}`,headers:{Authorization:r,Date:(new Date).toUTCString(),"Content-Type":Y(t)||"application/octet-stream"},body:n,resolveWithFullResponse:!0}};function ir(e){return B.createHash("md5").update(e).digest("hex")}const sr=(e,t,r,n)=>{const a=`/${r.path||""}${n}`.replace(/%2F/g,"/").replace(/^\/+/g,"/"),i=Math.round((new Date).getTime()/1e3),s=t?i+parseInt(t.toString(),10):i+1800;return`_upt=${`${ir(`${e}&${s}&${a}`).substring(12,20)}${s}`}`},Er=async e=>{const t=e.getConfig("picBed.upyun");if(!t)throw new Error("Can't find upYun config");try{const r=e.output,n=Gt({path:t.path});t.path=n;for(const a of r)if(a.fileName&&a.buffer){let r=a.buffer;!r&&a.base64Image&&(r=Buffer.from(a.base64Image,"base64"));const i=nr(t,a.fileName),s=ar(t,a.fileName,i,r),E=t.options||"";if(200!==(await e.request(s)).statusCode)throw new Error("Upload failed");if(delete a.base64Image,delete a.buffer,a.imgUrl=`${t.url}/${bt(`${n}${a.fileName}`)}${E}`,t.antiLeechToken){const e=sr(t.antiLeechToken,t.expireTime,t,a.fileName);a.imgUrl=a.imgUrl.includes("?")?`${a.imgUrl}&${e}`:`${a.imgUrl}?${e}`}}return e}catch(t){if("Upload failed"===t.message)e.emit(At.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")});else{const r=ye(t.error);e.emit(At.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("UPLOAD_FAILED_REASON",{code:"object"==typeof r?r.code:r}),text:"http://docs.upyun.com/api/errno/"})}throw t}},or=e=>{const t=e.getConfig("picBed.upyun")||{};return[{name:"bucket",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_BUCKET")},get alias(){return e.i18n.translate("PICBED_UPYUN_BUCKET")},default:t.bucket||"",required:!0},{name:"operator",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_OPERATOR")},get alias(){return e.i18n.translate("PICBED_UPYUN_OPERATOR")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_OPERATOR")},default:t.operator||"",required:!0},{name:"password",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_PASSWORD")},get alias(){return e.i18n.translate("PICBED_UPYUN_PASSWORD")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_PASSWORD")},default:t.password||"",required:!0},{name:"url",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_URL")},get alias(){return e.i18n.translate("PICBED_UPYUN_URL")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_URL")},default:t.url||"",required:!0},{name:"options",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_OPTIONS")},get alias(){return e.i18n.translate("PICBED_UPYUN_OPTIONS")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_OPTIONS")},default:t.options||"",required:!1},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_PATH")},get alias(){return e.i18n.translate("PICBED_UPYUN_PATH")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_PATH")},default:t.path||"",required:!1},{name:"antiLeechToken",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_ANTI_LEECH_TOKEN")},get alias(){return e.i18n.translate("PICBED_UPYUN_ANTI_LEECH_TOKEN")},get message(){return e.i18n.translate("PICBED_UPYUN_ANTI_LEECH_TOKEN")},default:t.antiLeechToken||"",required:!1},{name:"expireTime",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_EXPIRE_TIME")},get alias(){return e.i18n.translate("PICBED_UPYUN_EXPIRE_TIME")},get message(){return e.i18n.translate("PICBED_UPYUN_EXPIRE_TIME")},default:t.expireTime||"",required:!1},{name:"endpoint",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_ENDPOINT")},get alias(){return e.i18n.translate("PICBED_UPYUN_ENDPOINT")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_ENDPOINT")},default:t.endpoint||"https://v0.api.upyun.com",required:!1}]};const lr=async e=>{const r=e.getConfig("picBed.webdavplist");if(!r)throw new Error("Can't find webdavplist config");r.host=r.host.replace(/^https?:\/\/|\/+$/g,""),r.host=(r.sslEnabled?"https://":"http://")+r.host,r.path=Gt({path:r.path,rootToEmpty:!1});const n=r.authType||"basic",i=Gt({path:r.webpath,rootToEmpty:!1}),s=r.options||"";try{const E=e.output,o=r.customUrl,l=r.path;for(const I of E)if(I.fileName&&I.buffer){let E=I.buffer;!E&&I.base64Image&&(E=Buffer.from(I.base64Image,"base64"));const S={username:r.username,password:r.password,maxBodyLength:4294967296,maxContentLength:4294967296};"digest"===n&&(S.authType=q.Digest);const _=V(r.host,S),u="/"===l?"":l;u&&await _.createDirectory(u,{recursive:!0});if(!await _.putFileContents(`${l}${I.fileName}`.replace(/^\/+|\/+$/g,""),E,{overwrite:!0}))throw new Error("Upload failed");{const n=T.join(e.baseDir,"imgTemp","webdavplist"),S=T.join(n,I.fileName);a(T.dirname(S)),t.writeFileSync(S,E),delete I.base64Image,delete I.buffer;const _=o||r.host;r.webpath?I.imgUrl=`${_}/${bt(`${i}${I.fileName}`)}${s}`:I.imgUrl=`${_}/${bt(`${l}${I.fileName}`)}${s}`,I.galleryPath=`http://localhost:36699/webdavplist/${encodeURIComponent(I.fileName)}`}}return e}catch(t){throw e.emit(At.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},Ir=e=>{var t;const r=e.getConfig("picBed.webdavplist")||{};return[{name:"host",type:"input",get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_HOST")},default:r.host||"",required:!0},{name:"sslEnabled",type:"confirm",get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_SSLENABLED")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_SSLENABLED")},required:!1,default:null!==(t=r.sslEnabled)&&void 0!==t&&t,get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_SSLENABLED")}},{name:"username",type:"input",get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_USERNAME")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_USERNAME")},default:r.username||"",required:!0,get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_USERNAME")}},{name:"password",type:"input",get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_PASSWORD")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_PASSWORD")},default:r.password||"",required:!0,get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_PASSWORD")}},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_PATH")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_PATH")},default:r.path||"",required:!1,get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_PATH")}},{name:"webpath",type:"input",get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_WEBSITE_PATH")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_WEBSITE_PATH")},default:r.path||"",required:!1,get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_WEBSITE_PATH")}},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_CUSTOMURL")},default:r.customUrl||"",required:!1,get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_CUSTOMURL")}},{name:"authType",type:"list",get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_AUTHTYPE")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_AUTHTYPE")},choices:["basic","digest"],default:r.authType||"basic",required:!1},{name:"options",type:"input",get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_OPTIONS")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_OPTIONS")},get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_OPTIONS")},default:r.options||"",required:!1}]};const Sr=async e=>{var r;const n=e.getConfig("picBed.local");if(!n)throw new Error("Can not find local config!");const i=n.path||"",s=(n.customUrl||"").replace(/\/$/,""),E=Gt({path:null===(r=n.webPath)||void 0===r?void 0:r.replace(/\\/g,"/")}),o=e.output;for(const r of o)if(r.fileName&&r.buffer){let n=r.buffer;!n&&r.base64Image&&(n=Buffer.from(r.base64Image,"base64"));try{try{const o=T.join(e.baseDir,"imgTemp","local"),l=T.join(o,r.fileName),I=T.join(i,r.fileName);a(T.dirname(I)),a(T.dirname(l)),t.writeFileSync(I,n),t.copyFileSync(I,l),delete r.base64Image,delete r.buffer,r.imgUrl=s?`${s}/${bt(`${E}${r.fileName}`)}`:T.join(i,r.fileName),r.hash=T.join(i,r.fileName),r.galleryPath=`http://localhost:36699/local/${encodeURIComponent(r.fileName)}`}catch(t){throw e.emit(At.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:"failed to upload image"}),new Error("failed to upload image")}}catch(t){throw e.log.error(t),t}}return e},_r=e=>{const t=e.getConfig("picBed.local")||{};return[{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_LOCAL_PATH")},get alias(){return e.i18n.translate("PICBED_LOCAL_PATH")},default:t.path||"",get message(){return e.i18n.translate("PICBED_LOCAL_MESSAGE_PATH")},required:!0},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_LOCAL_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_LOCAL_CUSTOMURL")},default:t.customUrl||"",get message(){return e.i18n.translate("PICBED_LOCAL_MESSAGE_CUSTOMURL")},required:!1},{name:"webPath",type:"input",get prefix(){return e.i18n.translate("PICBED_LOCAL_WEBPATH")},get alias(){return e.i18n.translate("PICBED_LOCAL_WEBPATH")},default:t.webPath||"",required:!1,get message(){return e.i18n.translate("PICBED_LOCAL_MESSAGE_WEBPATH")}}]};class ur{constructor(){this.client=new j,this.isConnected=!1}static getInstance(){return ur.instance||(ur.instance=new ur),ur.instance}static changeWinStylePathToUnix(e){return e.replace(/\\/g,"/")}async connect(e){const{host:t,port:r,username:n,password:a,privateKey:i,passphrase:s}=e,E=i?{username:n,privateKeyPath:i,passphrase:s||void 0}:{username:n,password:a};try{await this.client.connect(Object.assign({host:t,port:Number(r)||22},E)),this.isConnected=!0}catch(e){throw new Error(e)}}async upload(e,t,r){if(!this.isConnected)throw new Error("SSH client is not connected");try{t=ur.changeWinStylePathToUnix(t),await this.mkdir(T.dirname(t).replace(/^\/+|\/+$/g,""),r),await this.client.putFile(e,t);const n=r.fileMode||"0644";"0644"!==n&&await this.exec(`chmod ${n} "${t}"`)}catch(e){throw new Error(e)}}async mkdir(e,t){if(!this.client.isConnected())throw new Error("sftp client is not connected");const r=t.dirMode||"0755";if("0755"!==r){const t=e.split("/");let n="";for(const e of t)if(e){n+=`/${e}`;const t=`mkdir "${n}" && chmod ${r} "${n}"`;await this.exec(t)}}else{const t=`cd / && mkdir -p "${e}"`;await this.exec(t)}}async chown(e,t,r){e=ur.changeWinStylePathToUnix(e);const[n,a]=r?[t,r]:t.includes(":")?t.split(":"):[t,t];await this.exec(`chown ${n}:${a} "${e}"`)}async exec(e){return 0===(await this.client.execCommand(e)).code}close(){this.client.dispose(),this.isConnected=!1}}const Pr=async e=>{const r=e.getConfig("picBed.sftpplist");if(!r)throw new Error("Can not find sftpplist config!");r.port=Number(r.port)||22,(r.port<0||r.port>65535)&&(r.port=22),r.uploadPath=Gt({path:r.uploadPath,rootToEmpty:!1});const n=Gt({path:r.webPath,rootToEmpty:!1});try{const i=e.output;for(const s of i)if(s.fileName&&s.buffer){let i=s.buffer;!i&&s.base64Image&&(i=Buffer.from(s.base64Image,"base64"));const l=T.join(e.baseDir,"uploadTemp"),I=T.join(e.baseDir,"imgTemp","sftpplist");a(I);const S=T.join(l,s.fileName);a(T.dirname(S)),t.writeFileSync(S,i);const _=ur.getInstance();await _.connect(r);const u=T.join(`/${r.uploadPath}`.replace(/\/\/+/g,"/"),s.fileName);await _.upload(S,u,r),r.fileUser&&await _.chown(u,r.fileUser),delete s.base64Image,delete s.buffer;const P=r.customUrl||r.host;r.webPath?s.imgUrl=`${P}/${bt(`${"/"===n?"":n}${s.fileName}`)}`:s.imgUrl=`${P}/${bt(`${"/"===r.uploadPath?"":r.uploadPath}${s.fileName}`)}`;const c=T.join(I,s.fileName);a(T.dirname(c)),E(c),o(S,T.join(I,s.fileName)),s.galleryPath=`http://localhost:36699/sftpplist/${encodeURIComponent(s.fileName)}`,_.close()}return e}catch(t){throw e.emit(At.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},cr=e=>{const t=e.getConfig("picBed.sftpplist")||{};return[{name:"host",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_HOST")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_HOST")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_HOST")},default:t.host||"",required:!0},{name:"port",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_PORT")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_PORT")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_PORT")},default:t.port||22,required:!1},{name:"username",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_USERNAME")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_USERNAME")},default:t.username||"",required:!0},{name:"password",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_PASSWORD")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_PASSWORD")},default:t.password||"",required:!1},{name:"privateKey",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_PRIVATEKEY")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_PRIVATEKEY")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY")},default:t.privateKey||"",required:!1},{name:"passphrase",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_PRIVATEKEY_PASSPHRASE")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_PRIVATEKEY_PASSPHRASE")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY_PASSPHRASE")},default:t.passphrase||"",required:!1},{name:"uploadPath",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_UPLOADPATH")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_UPLOADPATH")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_UPLOADPATH")},default:t.uploadPath||"",required:!1},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_CUSTOMURL")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_CUSTOMURL")},default:t.customUrl||"",required:!1},{name:"webPath",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_WEBSITE_PATH")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_WEBSITE_PATH")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_WEBSITE_PATH")},default:t.webPath||"",required:!1},{name:"fileUser",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_FILE_USER")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_FILE_USER")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_FILE_USER")},default:t.fileUser||"",required:!1},{name:"fileMode",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_FILE_MODE")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_FILE_MODE")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_FILE_MODE")},default:t.fileMode||"",required:!1},{name:"dirMode",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_DIR_MODE")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_DIR_MODE")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_DIR_MODE")},default:t.dirMode||"",required:!1}]};const pr=async(e,t)=>{const r={method:"POST",url:"https://telegra.ph/upload",headers:{"content-type":"multipart/form-data"},formData:{file:t}};return e.proxy&&(r.proxy=e.proxy),r},Cr=async e=>{var r,n;let i=e.getConfig("picBed.telegraphplist");i||(i={});try{const n=e.output;for(const s of n)if(s.fileName&&s.buffer){let n=s.buffer;!n&&s.base64Image&&(n=Buffer.from(s.base64Image,"base64"));const E=T.join(e.baseDir,"uploadTemp");a(E);const o=T.join(E,s.fileName);t.writeFileSync(o,n);const I=await pr(i,t.createReadStream(o)),S=await e.request(I),_="string"==typeof S?JSON.parse(S):S;if(l(o),!(null===(r=null==_?void 0:_[0])||void 0===r?void 0:r.src))throw new Error("Server error, please try again");delete s.base64Image,delete s.buffer,s.imgUrl=`https://telegra.ph${_[0].src}`}return e}catch(t){throw e.emit(At.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS_AND_NETWORK"),text:""}),(null===(n=null==t?void 0:t.response)||void 0===n?void 0:n.data)||t}},Ar=e=>[{name:"proxy",type:"input",get prefix(){return e.i18n.translate("PICBED_IMGUR_PROXY")},get alias(){return e.i18n.translate("PICBED_IMGUR_PROXY")},get message(){return e.i18n.translate("PICBED_IMGUR_MESSAGE_PROXY")},default:(e.getConfig("picBed.telegraphplist")||{}).proxy||"",required:!1}];const Tr=(e,t,r)=>{const n=e.host||"127.0.0.1",a=e.port||36677,i=e.picbed||"",s=e.configName||"Default",E=e.serverKey||"";let o=`http://${n}:${a}/upload?configName=${s}`;return i&&(o+=`&picbed=${i}`),E&&(o+=`&key=${E}`),{method:"POST",url:o,headers:{"content-type":"multipart/form-data"},formData:{file:{value:r,options:{filename:t,contentType:Y(t)}}},resolveWithFullResponse:!0}},gr=async e=>{var t;const r=e.getConfig("picBed.piclist");if(!r)throw new Error("Can't find PicList config");try{const n=e.output;for(const a of n)if(a.fileName&&a.buffer){let n=a.buffer;!n&&a.base64Image&&(n=Buffer.from(a.base64Image,"base64"));const i=Tr(r,a.fileName,n),s=await e.request(i).then((e=>e)).catch((t=>({statusCode:400,body:{msg:e.i18n.translate("AUTH_FAILED"),err:t}})));if(200!==s.statusCode||!(null===(t=s.body)||void 0===t?void 0:t.success))throw new Error(s.body.message);delete a.base64Image,delete a.buffer,a.imgUrl=s.body.result[0],a.fullResult=s.body.fullResult[0]}return e}catch(t){throw e.emit(At.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},dr=e=>{const t=e.getConfig("picBed.piclist")||{};return[{name:"host",type:"input",get prefix(){return e.i18n.translate("PICBED_PICLIST_HOST")},get alias(){return e.i18n.translate("PICBED_PICLIST_HOST")},default:t.host||"127.0.0.1",required:!0},{name:"port",type:"input",get prefix(){return e.i18n.translate("PICBED_PICLIST_PORT")},get alias(){return e.i18n.translate("PICBED_PICLIST_PORT")},default:t.port||36677,required:!1},{name:"picbed",type:"input",get prefix(){return e.i18n.translate("PICBED_PICLIST_PICBED")},get alias(){return e.i18n.translate("PICBED_PICLIST_PICBED")},default:t.picbed||"",required:!1},{name:"configName",type:"input",get prefix(){return e.i18n.translate("PICBED_PICLIST_CONFIGNAME")},get alias(){return e.i18n.translate("PICBED_PICLIST_CONFIGNAME")},default:t.configName||"",required:!1},{name:"serverKey",type:"input",get prefix(){return e.i18n.translate("PICBED_PICLIST_KEY")},get alias(){return e.i18n.translate("PICBED_PICLIST_KEY")},default:t.serverKey||"",required:!1}]};const Dr=(e,t,r)=>{let n=e.host;n=n.replace(/\/$/,"");const a="V2"===e.version,i=e.token,s={"Content-Type":"multipart/form-data","User-Agent":"PicList",Connection:"keep-alive",token:i||void 0},E={image:{value:r,options:{filename:t}},ssl:"true"},o={"Content-Type":"multipart/form-data","User-Agent":"PicList",Connection:"keep-alive",Accept:"application/json",Authorization:i||void 0},l=e.strategyId,I=e.albumId;let S=e.permission.value;void 0===S&&(S=e.permission);const _={file:{value:r,options:{filename:t}},ssl:"true",strategy_id:l,album_id:I,permission:S};l||delete _.strategy_id,I||delete _.album_id,0!==S&&1!==S&&delete _.permission;return{method:"POST",url:a?`${n}/api/v1/upload`:`${n}/api/upload`,agent:new H.Agent({rejectUnauthorized:!1}),headers:a?o:s,formData:a?_:E}},mr=async e=>{const t=e.getConfig("picBed.lskyplist");if(!t)throw new Error("Can't find lsky uploader config");try{const r=e.output;for(const n of r){let r=n.buffer;!r&&n.base64Image&&(r=Buffer.from(n.base64Image,"base64"));const a=Dr(t,n.fileName,r);let i=await e.Request.request(a);i="string"==typeof i?JSON.parse(i):i;const s="V2"===t.version;if(!(s?!0===i.status:200===i.code))throw e.emit("notification",{title:"upload failed",body:i.message}),new Error(i.message);delete n.base64Image,delete n.buffer,n.imgUrl=s?i.data.links.url:i.data.url,s&&(n.hash=i.data.key)}return e}catch(t){throw e.emit(At.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},Lr=e=>{const t=e.getConfig("picBed.lskyplist")||{};return[{name:"version",type:"list",default:t.version||"V1",get prefix(){return e.i18n.translate("PICBED_LSKY_VERSION")},get alias(){return e.i18n.translate("PICBED_LSKY_VERSION")},get message(){return e.i18n.translate("PICBED_LSKY_MESSAGE_VERSION")},choices:["V1","V2"],required:!0},{name:"host",type:"input",get prefix(){return e.i18n.translate("PICBED_LSKY_HOST")},get alias(){return e.i18n.translate("PICBED_LSKY_HOST")},get message(){return e.i18n.translate("PICBED_LSKY_MESSAGE_HOST")},default:t.host||"",required:!0},{name:"token",type:"input",get prefix(){return e.i18n.translate("PICBED_LSKY_TOKEN")},get alias(){return e.i18n.translate("PICBED_LSKY_TOKEN")},get message(){return e.i18n.translate("PICBED_LSKY_MESSAGE_TOKEN")},default:t.token,required:!0},{name:"strategyId",type:"input",default:t.strategyId,required:!1,get prefix(){return e.i18n.translate("PICBED_LSKY_STRATEGY_ID")},get alias(){return e.i18n.translate("PICBED_LSKY_STRATEGY_ID")},get message(){return e.i18n.translate("PICBED_LSKY_MESSAGE_STRATEGY_ID")}},{name:"albumId",type:"input",default:t.albumId,required:!1,get prefix(){return e.i18n.translate("PICBED_LSKY_ALBUM_ID")},get alias(){return e.i18n.translate("PICBED_LSKY_ALBUM_ID")},get message(){return e.i18n.translate("PICBED_LSKY_MESSAGE_ALBUM_ID")}},{name:"permission",type:"list",default:t.permission||"private(default)",choices:[{name:"private(default)",value:0},{name:"public",value:1}],required:!1,get prefix(){return e.i18n.translate("PICBED_LSKY_PERMISSION")},get alias(){return e.i18n.translate("PICBED_LSKY_PERMISSION")},get message(){return e.i18n.translate("PICBED_LSKY_MESSAGE_PERMISSION")}}]};class fr{constructor(e){this.date=new Date,this.info=e}year(){return`${this.date.getFullYear()}`}month(){return(this.date.getMonth()+1).toString().padStart(2,"0")}day(){return this.date.getDate().toString().padStart(2,"0")}fullName(){return this.info.fileName}fileName(){var e,t;return(null!==(e=this.info.fileName)&&void 0!==e?e:"").replace(null!==(t=this.info.extname)&&void 0!==t?t:"","")}extName(){var e;return(null!==(e=this.info.extname)&&void 0!==e?e:"").replace(".","")}md5(){return B.createHash("md5").update(this.imgBuffer()).digest("hex")}md5B64(){return B.createHash("md5").update(this.imgBuffer()).digest("base64").replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}md5B64Short(){return B.createHash("md5").update(this.imgBuffer()).digest("base64").replace(/\+/g,"-").replace(/\//g,"_").slice(0,7)}sha1(){return B.createHash("sha1").update(this.imgBuffer()).digest("hex")}sha256(){return B.createHash("sha256").update(this.imgBuffer()).digest("hex")}timestamp(){return Math.floor(Date.now()/1e3).toString()}timestampMS(){return Date.now().toString()}imgBuffer(){return this.info.base64Image?this.info.base64Image:this.info.buffer}}function hr(e,t){if(!t)return e.fileName;const r=new fr(e);let n=t;for(const e of fr.fields){const t=new RegExp(`{${e}}`,"g");n=n.replace(t,r[e]())}return n}function Br(e,t,r){const n=function(e=""){if(!e)return"";if(!/^https?:\/\//.test(e)){const[t,r]=e.split(":");return`http://${t.replace("127.0.0.1","localhost")}:${r}`}try{const{protocol:t,hostname:r,port:n}=new L(e);return`${t}//${r.replace("127.0.0.1","localhost")}:${n}`}catch(e){return""}}(e);if(!n)return;return new(t?re:ne)({keepAlive:!0,keepAliveMsecs:1e3,scheduling:"lifo",rejectUnauthorized:r,proxy:n})}async function Nr(e,t,r){try{const n=await Z(e.client,new Q({Bucket:e.bucketName,Key:e.path,IfMatch:t,VersionId:r}),{expiresIn:3600}),a=new m.URL(n);return a.search="",a.href}catch(e){return Promise.reject(e)}}fr.fields=["year","month","day","fullName","fileName","extName","md5","md5B64","md5B64Short","sha1","sha256","timestamp","timestampMS"];var Ur={createS3Client:function(e){var t,r;let n=!0;try{n="https:"===new m.URL(e.endpoint).protocol}catch(e){}const a={};n?a.httpsAgent=Br(e.proxy,!0,null!==(t=e.rejectUnauthorized)&&void 0!==t&&t):a.httpAgent=Br(e.proxy,!1,null!==(r=e.rejectUnauthorized)&&void 0!==r&&r);const i={region:e.region||"auto",endpoint:e.endpoint||void 0,credentials:{accessKeyId:e.accessKeyID,secretAccessKey:e.secretAccessKey},tls:n,forcePathStyle:e.pathStyleAccess,requestHandler:new J(a)};return new z(i)},createUploadTask:async function(e){if(!e.item.buffer&&!e.item.base64Image)return Promise.reject(new Error("undefined image"));let t,r,n;try{({body:t,contentType:r,contentEncoding:n}=await async function(e){var t;const r={};if(e.base64Image){const n=e.base64Image.replace(/^data:[/\w]+;base64,/,"");r.contentType=null===(t=e.base64Image.match(/[^:]\w+\/[\w-+\d.]+(?=;|,)/))||void 0===t?void 0:t[0],r.body=Buffer.from(n,"base64"),r.contentEncoding="base64"}else e.extname&&(r.contentType=te.getType(e.extname)),r.body=e.buffer;if(!r.contentType){const e=await ee.fromBuffer(r.body);r.contentType=null==e?void 0:e.mime}return r}(e.item))}catch(e){return Promise.reject(e)}const a=new X({Bucket:e.bucketName,Key:e.path,ACL:e.acl,Body:t,ContentType:r,ContentEncoding:n});let i,s;try{i=await e.client.send(a)}catch(e){return Promise.reject(e)}if(e.urlPrefix)s=`${e.urlPrefix}/${e.path}`;else try{s=await Nr(e,i.ETag,i.VersionId)}catch(e){return Promise.reject(e)}return{index:e.index,key:e.path,url:s,imgURL:s,versionId:i.VersionId,eTag:i.ETag}},getFileURL:Nr};function Rr(e){return"string"==typeof e?"true"===e.toLowerCase():Boolean(e)}const Or=async e=>{const t=e.getConfig("picBed.aws-s3-plist");if(!t)throw new Error("Can't find amazon s3 uploader config");const r=Rr(t.disableBucketPrefixToURL);let n=t.urlPrefix;n&&(n=n.replace(/\/?$/,""),t.pathStyleAccess&&!r&&(n+="/"+t.bucketName));const a=Ur.createS3Client(t),i=e.output,s=i.map((async(e,r)=>Ur.createUploadTask({client:a,index:r,bucketName:t.bucketName,path:hr(e,t.uploadPath),item:e,acl:t.acl||"public-read",urlPrefix:n})));let E;try{E=await Promise.all(s)}catch(t){throw e.log.error("上传到 S3 存储发生错误,请检查网络连接和配置是否正确"),e.log.error(t),e.emit("notification",{title:"S3 存储上传错误",body:"请检查配置是否正确",text:""}),t}for(const e of E){const{index:t,url:r,imgURL:n}=e;delete i[t].buffer,delete i[t].base64Image,i[t].imgUrl=n,i[t].url=r}return e},Mr=e=>{let t=e.getConfig("picBed.aws-s3-plist")||{};t=Object.assign(Object.assign({},{accessKeyID:"",secretAccessKey:"",bucketName:"",uploadPath:"{year}/{month}/{md5}.{extName}",pathStyleAccess:!1,rejectUnauthorized:!1,acl:"public-read"}),t);return[{name:"accessKeyID",type:"input",default:t.accessKeyID,required:!0,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_ACCESSKEYID")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_ACCESSKEYID")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_ACCESSKEYID")}},{name:"secretAccessKey",type:"input",default:t.secretAccessKey,required:!0,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_SECRET_ACCESSKEY")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_SECRET_ACCESSKEY")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_SECRET_ACCESSKEY")}},{name:"bucketName",type:"input",default:t.bucketName,required:!0,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_BUCKET")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_BUCKET")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_BUCKET")}},{name:"uploadPath",type:"input",default:t.uploadPath,required:!0,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_UPLOADPATH")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_UPLOADPATH")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_UPLOADPATH")}},{name:"region",type:"input",default:t.region,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_REGION")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_REGION")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_REGION")}},{name:"endpoint",type:"input",default:t.endpoint,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_ENDPOINT")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_ENDPOINT")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_ENDPOINT")}},{name:"proxy",type:"input",default:t.proxy,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_PROXY")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_PROXY")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_PROXY")}},{name:"urlPrefix",type:"input",default:t.urlPrefix,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_URLPREFIX")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_URLPREFIX")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_URLPREFIX")}},{name:"pathStyleAccess",type:"confirm",default:t.pathStyleAccess||!1,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_PATHSTYLEACCESS")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_PATHSTYLEACCESS")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_PATHSTYLEACCESS")}},{name:"rejectUnauthorized",type:"confirm",default:t.rejectUnauthorized||!1,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_REJECTUNAUTHORIZED")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_REJECTUNAUTHORIZED")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_REJECTUNAUTHORIZED")}},{name:"acl",type:"list",default:t.acl||"public-read",choices:["private","public-read","public-read-write","authenticated-read","aws-exec-read","bucket-owner-read","bucket-owner-full-control"],required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_ACL")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_ACL")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_ACL")}},{name:"disableBucketPrefixToURL",type:"confirm",default:Rr(t.disableBucketPrefixToURL)||!1,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_DISABLEBUCKETPREFIXTOURL")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_DISABLEBUCKETPREFIXTOURL")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_DISABLEBUCKETPREFIXTOURL")}}]};const yr=()=>({register(e){!function(e){e.helper.uploader.register("aliyun",{get name(){return e.i18n.translate("PICBED_ALICLOUD")},handle:tr,config:rr})}(e),function(e){e.helper.uploader.register("aws-s3-plist",{get name(){return e.i18n.translate("PICBED_AWSS3PLIST")},handle:Or,config:Mr})}(e),function(e){e.helper.uploader.register("github",{get name(){return e.i18n.translate("PICBED_GITHUB")},handle:vt,config:Yt})}(e),function(e){e.helper.uploader.register("imgur",{get name(){return e.i18n.translate("PICBED_IMGUR")},handle:Xt,config:Qt})}(e),function(e){e.helper.uploader.register("local",{get name(){return e.i18n.translate("PICBED_LOCAL")},handle:Sr,config:_r})}(e),function(e){e.helper.uploader.register("lskyplist",{get name(){return e.i18n.translate("PICBED_LSKY_PLIST")},handle:mr,config:Lr})}(e),function(e){e.helper.uploader.register("piclist",{get name(){return e.i18n.translate("PICBED_PICLIST")},handle:gr,config:dr})}(e),function(e){e.helper.uploader.register("qiniu",{get name(){return e.i18n.translate("PICBED_QINIU")},handle:Vt,config:jt})}(e),function(e){e.helper.uploader.register("sftpplist",{get name(){return e.i18n.translate("PICBED_SFTPPLIST")},handle:Pr,config:cr})}(e),function(e){e.helper.uploader.register("smms",{get name(){return e.i18n.translate("PICBED_SMMS")},handle:Mt,config:yt})}(e),function(e){e.helper.uploader.register("tcyun",{get name(){return e.i18n.translate("PICBED_TENCENTCLOUD")},handle:Wt,config:Kt})}(e),function(e){e.helper.uploader.register("telegraphplist",{get name(){return e.i18n.translate("PICBED_TELEGRAPH")},handle:Cr,config:Ar})}(e),function(e){e.helper.uploader.register("upyun",{get name(){return e.i18n.translate("PICBED_UPYUN")},handle:Er,config:or})}(e),function(e){e.helper.uploader.register("webdavplist",{get name(){return e.i18n.translate("PICBED_WEBDAVPLIST")},handle:lr,config:Ir})}(e)}}),Gr=(e,t,r)=>{const n=ge(t);return n.real||("string"==typeof r?e.log.warn(`can't get ${r}'s image size`):e.log.warn("can't get image size"),e.log.warn("fallback to 200 * 200")),n};var br={handle:async e=>{const t=e.output;return await Promise.all(e.input.map((async(r,n)=>{let a;if(a=Buffer.isBuffer(r)?{success:!0,buffer:r,fileName:"",extname:""}:Ce(r)?await De(r,e):await de(r),a.success&&a.buffer){const i=Gr(e,a.buffer,r),s=a.extname||i.extname||".png";t[n]={buffer:a.buffer,fileName:a.fileName||`${b().format("YYYYMMDDHHmmss")}${s}`,width:i.width,height:i.height,extname:a.extname}}else e.log.error(a.reason)}))),e.output=t.filter((e=>e)),e}};var xr={handle:async e=>(e.output.push(...e.input),e)};const wr={darwin:'-- From https://github.com/mushanshitiancai/vscode-paste-image\r\nproperty fileTypes : {{«class PNGf», ".png"}}\r\n\r\non run argv\r\n\tif argv is {} then\r\n\t\treturn ""\r\n\tend if\r\n\r\n\tif ((clipboard info) as string) contains "«class furl»" then\r\n\t\treturn POSIX path of (the clipboard as «class furl»)\r\n\telse\r\n\t\tset imagePath to (item 1 of argv)\r\n\t\tset theType to getType()\r\n\r\n\t\tif theType is not missing value then\r\n\t\t\ttry\r\n\t\t\t\tset myFile to (open for access imagePath with write permission)\r\n\t\t\t\tset eof myFile to 0\r\n\t\t\t\twrite (the clipboard as (first item of theType)) to myFile\r\n\t\t\t\tclose access myFile\r\n\t\t\t\treturn (POSIX path of imagePath)\r\n\t\t\ton error\r\n\t\t\t\ttry\r\n\t\t\t\t\tclose access myFile\r\n\t\t\t\tend try\r\n\t\t\t\treturn "no image"\r\n\t\t\tend try\r\n\t\telse\r\n\t\t\treturn "no image"\r\n\t\tend if\r\n\tend if\r\nend run\r\n\r\non getType()\r\n\trepeat with aType in fileTypes\r\n\t\trepeat with theInfo in (clipboard info)\r\n\t\t\tif (first item of theInfo) is equal to (first item of aType) then return aType\r\n\t\tend repeat\r\n\tend repeat\r\n\treturn missing value\r\nend getType\r\n',win32:'\r\nparam($imagePath)\r\n\r\n# Adapted from https://github.com/octan3/img-clipboard-dump/blob/master/dump-clipboard-png.ps1\r\n\r\nAdd-Type -Assembly PresentationCore\r\n$img = [Windows.Clipboard]::GetImage()\r\n\r\nif ($img -eq $null) {\r\n "no image"\r\n Exit 1\r\n}\r\n\r\nif (-not $imagePath) {\r\n "no image"\r\n Exit 1\r\n}\r\n\r\n$fcb = new-object Windows.Media.Imaging.FormatConvertedBitmap($img, [Windows.Media.PixelFormats]::Rgb24, $null, 0)\r\n$stream = [IO.File]::Open($imagePath, "OpenOrCreate")\r\n$encoder = New-Object Windows.Media.Imaging.PngBitmapEncoder\r\n$encoder.Frames.Add([Windows.Media.Imaging.BitmapFrame]::Create($fcb)) | out-null\r\n$encoder.Save($stream) | out-null\r\n$stream.Dispose() | out-null\r\n\r\n$imagePath\r\n',win10:'# Adapted from https://github.com/octan3/img-clipboard-dump/blob/master/dump-clipboard-png.ps1\r\nparam($imagePath)\r\n\r\n# https://github.com/PowerShell/PowerShell/issues/7233\r\n# fix the output encoding bug\r\n[console]::InputEncoding = [console]::OutputEncoding = New-Object System.Text.UTF8Encoding\r\n\r\nAdd-Type -Assembly PresentationCore\r\nfunction main {\r\n $img = [Windows.Clipboard]::GetImage()\r\n\r\n if ($img -eq $null) {\r\n "no image"\r\n Exit 1\r\n }\r\n\r\n if (-not $imagePath) {\r\n "no image"\r\n Exit 1\r\n }\r\n\r\n $fcb = new-object Windows.Media.Imaging.FormatConvertedBitmap($img, [Windows.Media.PixelFormats]::Rgb24, $null, 0)\r\n $stream = [IO.File]::Open($imagePath, "OpenOrCreate")\r\n $encoder = New-Object Windows.Media.Imaging.PngBitmapEncoder\r\n $encoder.Frames.Add([Windows.Media.Imaging.BitmapFrame]::Create($fcb)) | out-null\r\n $encoder.Save($stream) | out-null\r\n $stream.Dispose() | out-null\r\n\r\n $imagePath\r\n # fix windows 10 native cmd crash bug when "picgo upload"\r\n # https://github.com/PicGo/PicGo-Core/issues/32\r\n Exit 1\r\n}\r\n\r\ntry {\r\n # For WIN10\r\n $file = Get-Clipboard -Format FileDropList\r\n if ($file -ne $null) {\r\n Convert-Path $file\r\n Exit 1\r\n }\r\n} catch {\r\n # For WIN7 WIN8 WIN10\r\n main\r\n}\r\n\r\nmain',linux:'#!/bin/sh\r\n\r\nif [ -z "$DISPLAY" ]; then\r\n echo "no support" >&2\r\n exit 1\r\nfi\r\n\r\ncase "$XDG_SESSION_TYPE" in\r\nwayland)\r\n command -v wl-copy >/dev/null 2>&1 || {\r\n echo >&2 "no wl-clipboard"\r\n exit 1\r\n }\r\n filePath=$(wl-copy -o 2>/dev/null | grep ^file:// | cut -c8-)\r\n if [ -z "$filePath" ]; then\r\n if\r\n wl-copy -t image/png image/png -o >"$1" 2>/dev/null\r\n then\r\n echo "$1"\r\n else\r\n rm -f "$1"\r\n echo "no image"\r\n fi\r\n else\r\n echo "$filePath"\r\n fi\r\n ;;\r\nx11 | tty)\r\n # require xclip(see http://stackoverflow.com/questions/592620/check-if-a-program-exists-from-a-bash-script/677212#677212)\r\n command -v xclip >/dev/null 2>&1 || {\r\n echo >&2 "no xclip"\r\n exit 1\r\n }\r\n # write image in clipboard to file (see http://unix.stackexchange.com/questions/145131/copy-image-from-clipboard-to-file)\r\n filePath=$(xclip -selection clipboard -o 2>/dev/null | grep ^file:// | cut -c8-)\r\n if [ -z "$filePath" ]; then\r\n if\r\n xclip -selection clipboard -target image/png -o >"$1" 2>/dev/null\r\n then\r\n echo "$1"\r\n else\r\n rm -f "$1"\r\n echo "no image"\r\n fi\r\n else\r\n echo "$filePath"\r\n fi\r\n ;;\r\nesac\r\n',wsl:'#!/bin/sh\r\n# grab the paths\r\nscriptPath=$(echo $0 | awk \'{ print substr( $0, 1, length($0)-6 ) }\')"windows10.ps1"\r\nimagePath=$(echo $1 | awk \'{ print substr( $0, 1, length($0)-18 ) }\')\r\nimageName=$(echo $1 | awk \'{ print substr( $0, length($0)-17, length($0) ) }\')\r\n\r\n# run the powershell script\r\nres=$(powershell.exe -noprofile -noninteractive -nologo -sta -executionpolicy unrestricted -file $(wslpath -w $scriptPath) $(wslpath -w $imagePath)"\\\\"$imageName)\r\n\r\n# note that there is a return symbol in powershell result\r\nnoImage=$(echo "no image\\r")\r\n\r\n# check whether image exists\r\nif [ "$res" = "$noImage" ] ;then\r\n echo "no image"\r\nelse\r\n echo $(wslpath -u -a "${res}")\r\nfi\r\n'},Wr={darwin:"mac.applescript",win32:"windows.ps1",win10:"windows10.ps1",linux:"linux.sh",wsl:"wsl.sh"};const Kr=async e=>{!function(e){const t=T.join(e.baseDir,"piclist-clipboard-images");a(t)}(e);const r=T.join(e.baseDir,"piclist-clipboard-images",`${b().format("YYYYMMDDHHmmss")}.png`);return await new Promise(((n,a)=>{const i=(()=>{const e=process.platform;return ie?"wsl":"win32"===e?"10"===C.release().split(".")[0]?"win10":"win32":"darwin"===e?"darwin":"linux"})(),s=T.join(e.baseDir,Wr[i]);let E;t.existsSync(s)||t.writeFileSync(s,wr[i],"utf8"),E="darwin"===i?ae("osascript",[s,r]):"win32"===i||"win10"===i?ae("powershell",["-noprofile","-noninteractive","-nologo","-sta","-executionpolicy","unrestricted","-file",s,r]):ae("sh",[s,r]),E.stdout.on("data",(s=>{if("linux"===i&&"no xclip or wl-clipboard"===s.toString().trim())return e.emit(At.NOTIFICATION,{title:"xclip or wl-clipboard not found",body:"Please install xclip(for x11) or wl-clipboard(for wayland) before run picgo"}),a(new Error("Please install xclip(for x11) or wl-clipboard(for wayland) before run picgo"));const E=s.toString().trim();let o=!1;if(T.basename(E)!==T.basename(r)&&t.existsSync(E)&&(o=!0),"no image"!==E&&!t.existsSync(E))return a(new Error(`Can't find ${E}`));n({imgPath:E,shouldKeepAfterUploading:o})}))}))};class Fr{constructor(e){if(this.ctx=e,this.db=new se(this.ctx.configPath),!this.db.has("picBed"))try{this.db.set("picBed",{uploader:"smms",current:"smms",smms:{token:""}})}catch(e){throw this.ctx.log.error(e),e}if(!this.db.has("picgoPlugins"))try{this.db.set("picgoPlugins",{})}catch(e){throw this.ctx.log.error(e),e}}read(e){return this.db.read(e)}get(e=""){return this.read(!0),this.db.get(e)}set(e,t){this.read(!0),this.db.set(e,t)}has(e){return this.read(!0),this.db.has(e)}unset(e,t){return this.read(!0),this.db.unset(e,t)}saveConfig(e){Object.keys(e).forEach((t=>{this.set(t,e[t])}))}removeConfig(e){Object.keys(e).forEach((t=>{this.unset(t,e[t])}))}}const Hr={"zh-CN":{UPLOAD_FAILED:"上传失败",CHECK_SETTINGS:"请检查你的配置项是否正确",CHECK_SETTINGS_AND_NETWORK:"请检查你的配置项以及网络",UPLOAD_FAILED_REASON:"错误码:${code},请打开浏览器粘贴地址查看相关原因",SERVER_ERROR:"服务端出错,请重试",AUTH_FAILED:"认证失败",PICBED_SMMS:"SM.MS",PICBED_SMMS_TOKEN:"设定Token",PICBED_SMMS_BACKUP_DOMAIN:"备用上传域名",PICBED_SMMS_MESSAGE_BACKUP_DOMAIN:"例如 smms.app",PICBED_LOCAL:"本地上传",PICBED_LOCAL_PATH:"设定路径",PICBED_LOCAL_MESSAGE_PATH:"例如 /usr/local/images/",PICBED_LOCAL_CUSTOMURL:"设定自定义域名",PICBED_LOCAL_MESSAGE_CUSTOMURL:"例如 https://test.com",PICBED_LOCAL_WEBPATH:"设定网站路径",PICBED_LOCAL_MESSAGE_WEBPATH:"用于拼接网址路径",PICBED_ALICLOUD:"阿里云OSS",PICBED_ALICLOUD_ACCESSKEYID:"设定accessKeyId",PICBED_ALICLOUD_ACCESSKEYSECRET:"设定accessKeySecret",PICBED_ALICLOUD_BUCKET:"设定Bucket",PICBED_ALICLOUD_AREA:"设定存储区域",PICBED_ALICLOUD_PATH:"设定存储路径",PICBED_ALICLOUD_CUSTOMURL:"设定自定义域名",PICBED_ALICLOUD_OPTIONS:"设定网址后缀",PICBED_ALICLOUD_MESSAGE_AREA:"例如:oss-cn-beijing",PICBED_ALICLOUD_MESSAGE_PATH:"例如:test/",PICBED_ALICLOUD_MESSAGE_OPTIONS:"例如:?x-oss-process=xxx",PICBED_ALICLOUD_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_TENCENTCLOUD:"腾讯云COS",PICBED_TENCENTCLOUD_VERSION:"COS版本",PICBED_TENCENTCLOUD_SECRETID:"设定SecretId",PICBED_TENCENTCLOUD_SECRETKEY:"设定SecretKey",PICBED_TENCENTCLOUD_APPID:"设定AppId",PICBED_TENCENTCLOUD_BUCKET:"设定Bucket",PICBED_TENCENTCLOUD_AREA:"设定存储区域",PICBED_TENCENTCLOUD_ENDPOINT:"设定接入点",PICBED_TENCENTCLOUD_PATH:"设定存储路径",PICBED_TENCENTCLOUD_OPTIONS:"设定网址后缀",PICBED_TENCENTCLOUD_CUSTOMURL:"设定自定义域名",PICBED_TENCENTCLOUD_MESSAGE_APPID:"例如:1234567890",PICBED_TENCENTCLOUD_MESSAGE_AREA:"例如:ap-beijing",PICBED_TENCENTCLOUD_MESSAGE_PATH:"例如:test/",PICBED_TENCENTCLOUD_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_TENCENTCLOUD_MESSAGE_OPTIONS:"例如:?imageMogr2",PICBED_TENCENTCLOUD_MESSAGE_ENDPOINT:"例如:cos-internal.accelerate.tencentcos.cn",PICBED_TENCENTCLOUD_SLIM:"极智压缩",PICBED_TENCENTCLOUD_SLIM_TIP:"图片极智压缩,详情请参考[文档说明](https://cloud.tencent.com/document/product/436/86438)",PICBED_TENCENTCLOUD_SLIM_CONFIRM:"开启",PICBED_TENCENTCLOUD_SLIM_CANCEL:"关闭",PICBED_GITHUB:"GitHub",PICBED_GITHUB_TOKEN:"设定Token",PICBED_GITHUB_REPO:"设定仓库名",PICBED_GITHUB_PATH:"设定存储路径",PICBED_GITHUB_BRANCH:"设定分支名",PICBED_GITHUB_CUSTOMURL:"设定自定义域名",PICBED_GITHUB_MESSAGE_REPO:"格式:username/repo",PICBED_GITHUB_MESSAGE_BRANCH:"例如:main",PICBED_GITHUB_MESSAGE_PATH:"例如:test/",PICBED_GITHUB_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_QINIU:"七牛云",PICBED_QINIU_ACCESSKEY:"设定AccessKey",PICBED_QINIU_SECRETKEY:"设定SecretKey",PICBED_QINIU_BUCKET:"设定Bucket",PICBED_QINIU_PATH:"设定存储路径",PICBED_QINIU_URL:"设定访问网址",PICBED_QINIU_OPTIONS:"设定网址后缀",PICBED_QINIU_AREA:"设定存储区域",PICBED_QINIU_MESSAGE_PATH:"例如:test/",PICBED_QINIU_MESSAGE_AREA:"例如:z0",PICBED_QINIU_MESSAGE_OPTIONS:"例如:?imageslim",PICBED_QINIU_MESSAGE_URL:"例如:https://xxx.yyy.glb.clouddn.com",PICBED_TELEGRAPH:"Telegraph",PICBED_IMGUR:"Imgur",PICBED_IMGUR_CLIENTID:"设定ClientId",PICBED_IMGUR_USERNAME:"设定用户名",PICBED_IMGUR_ACCESS_TOKEN:"设定accessToken",PICBED_IMGUR_ALBUM:"设定相册名",PICBED_IMGUR_PROXY:"设定代理",PICBED_IMGUR_MESSAGE_CLIENTID:"匿名上传时填写",PICBED_IMGUR_MESSAGE_USERNAME:"需要上传到账户时填写",PICBED_IMGUR_MESSAGE_ACCESS_TOKEN:"需要上传到账户时填写",PICBED_IMGUR_MESSAGE_ALBUM:"例如:test",PICBED_IMGUR_MESSAGE_PROXY:"例如:http://127.0.0.1:1080",PICBED_UPYUN:"又拍云",PICBED_UPYUN_BUCKET:"设定Bucket",PICBED_UPYUN_OPERATOR:"设定操作员",PICBED_UPYUN_PASSWORD:"设定操作员密码",PICBED_UPYUN_PATH:"设定存储路径",PICBED_UPYUN_URL:"设定加速域名",PICBED_UPYUN_OPTIONS:"设定网址后缀",PICBED_UPYUN_ENDPOINT:"设定自定义API接入点",PICBED_UPYUN_ANTI_LEECH_TOKEN:"设定防盗链Token",PICBED_UPYUN_EXPIRE_TIME:"设定过期时间(秒)",PICBED_UPYUN_MESSAGE_OPERATOR:"例如:me",PICBED_UPYUN_MESSAGE_PASSWORD:"输入操作员密码",PICBED_UPYUN_MESSAGE_URL:"例如:http://xxx.test.upcdn.net",PICBED_UPYUN_MESSAGE_OPTIONS:"例如:!imgslim",PICBED_UPYUN_MESSAGE_PATH:"例如:test/",PICBED_UPYUN_MESSAGE_ENDPOINT:"例如:https://v0.api.upyun.com",PICBED_WEBDAVPLIST:"WebDAV",PICBED_WEBDAVPLIST_HOST:"设定接口网址",PICBED_WEBDAVPLIST_SSLENABLED:"启用SSL",PICBED_WEBDAVPLIST_USERNAME:"设定用户名",PICBED_WEBDAVPLIST_PASSWORD:"设定密码",PICBED_WEBDAVPLIST_PATH:"设定存储路径",PICBED_WEBDAVPLIST_WEBSITE_PATH:"设定网址路径",PICBED_WEBDAVPLIST_CUSTOMURL:"设定自定义域名",PICBED_WEBDAVPLIST_AUTHTYPE:"设定认证方式",PICBED_WEBDAVPLIST_OPTIONS:"设定网址后缀",PICBED_WEBDAVPLIST_MESSAGE_HOST:"例如:https://example.com/webdav",PICBED_WEBDAVPLIST_MESSAGE_SSLENABLED:"需要HTTPS时启用",PICBED_WEBDAVPLIST_MESSAGE_USERNAME:"例如:me",PICBED_WEBDAVPLIST_MESSAGE_PASSWORD:"输入密码",PICBED_WEBDAVPLIST_MESSAGE_PATH:"例如:test/",PICBED_WEBDAVPLIST_MESSAGE_WEBSITE_PATH:"拼接网址时使用",PICBED_WEBDAVPLIST_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_WEBDAVPLIST_MESSAGE_OPTIONS:"例如:?key=123456",PICBED_SFTPPLIST:"内置SFTP",PICBED_SFTPPLIST_HOST:"设定主机",PICBED_SFTPPLIST_PORT:"设定端口",PICBED_SFTPPLIST_USERNAME:"设定用户名",PICBED_SFTPPLIST_PASSWORD:"设定密码",PICBED_SFTPPLIST_PRIVATEKEY:"设定私钥",PICBED_SFTPPLIST_PRIVATEKEY_PASSPHRASE:"设定私钥密码",PICBED_SFTPPLIST_UPLOADPATH:"设定上传路径",PICBED_SFTPPLIST_CUSTOMURL:"设定自定义域名",PICBED_SFTPPLIST_WEBSITE_PATH:"设定网站路径",PICBED_SFTPPLIST_FILE_USER:"设定文件用户:组",PICBED_SFTPPLIST_FILE_MODE:"设定文件权限",PICBED_SFTPPLIST_DIR_MODE:"设定文件夹权限",PICBED_SFTPPLIST_MESSAGE_HOST:"例如:1.1.1.3",PICBED_SFTPPLIST_MESSAGE_PORT:"默认22",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY:"例如:/Users/xxx/.ssh/id_rsa",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY_PASSPHRASE:"输入私钥密码",PICBED_SFTPPLIST_MESSAGE_UPLOADPATH:"例如:test/",PICBED_SFTPPLIST_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_SFTPPLIST_MESSAGE_WEBSITE_PATH:"拼接网址时使用",PICBED_SFTPPLIST_MESSAGE_FILE_USER:"例如:www:data",PICBED_SFTPPLIST_MESSAGE_FILE_MODE:"例如:0664",PICBED_SFTPPLIST_MESSAGE_DIR_MODE:"例如:0775",PICBED_PICLIST:"PicList",PICBED_PICLIST_HOST:"设定主机",PICBED_PICLIST_PORT:"设定端口",PICBED_PICLIST_PICBED:"设定图床",PICBED_PICLIST_CONFIGNAME:"设定配置名",PICBED_PICLIST_KEY:"设定鉴权Key",PICBED_LSKY_PLIST:"Lsky",PICBED_LSKY_VERSION:"设定版本",PICBED_LSKY_MESSAGE_VERSION:"例如V1",PICBED_LSKY_HOST:"设定主机",PICBED_LSKY_MESSAGE_HOST:"例如:https://example.com",PICBED_LSKY_TOKEN:"设定Token",PICBED_LSKY_MESSAGE_TOKEN:"例如:1234567890",PICBED_LSKY_STRATEGY_ID:"设定策略ID",PICBED_LSKY_MESSAGE_STRATEGY_ID:"例如:1",PICBED_LSKY_ALBUM_ID:"设定相册ID",PICBED_LSKY_MESSAGE_ALBUM_ID:"选填,V2版本限定",PICBED_LSKY_PERMISSION:"设定权限",PICBED_LSKY_MESSAGE_PERMISSION:"例如:public",PICBED_AWSS3PLIST:"AWS S3",PICBED_AWSS3PLIST_ACCESSKEYID:"设定AccessKeyId",PICBED_AWSS3PLIST_SECRET_ACCESSKEY:"设定SecretAccessKey",PICBED_AWSS3PLIST_BUCKET:"设定Bucket",PICBED_AWSS3PLIST_REGION:"设定Region",PICBED_AWSS3PLIST_UPLOADPATH:"设定上传路径",PICBED_AWSS3PLIST_ENDPOINT:"设定自定义节点",PICBED_AWSS3PLIST_PROXY:"设定代理",PICBED_AWSS3PLIST_URLPREFIX:"设定自定义域名",PICBED_AWSS3PLIST_PATHSTYLEACCESS:"启用s3ForcePathStyle",PICBED_AWSS3PLIST_REJECTUNAUTHORIZED:"拒绝无效TLS证书连接",PICBED_AWSS3PLIST_ACL:"设定上传资源的访问策略",PICBED_AWSS3PLIST_DISABLEBUCKETPREFIXTOURL:"开启 `pathStyleAccess` 时,是否要禁用最终生成URL中添加 bucket 前缀",PICBED_AWSS3PLIST_MESSAGE_ACCESSKEYID:"例如:AKIAxxxxxxxxxxxxx",PICBED_AWSS3PLIST_MESSAGE_SECRET_ACCESSKEY:"例如:xxxxxxxxxx",PICBED_AWSS3PLIST_MESSAGE_BUCKET:"例如:test",PICBED_AWSS3PLIST_MESSAGE_REGION:"例如:us-east-1",PICBED_AWSS3PLIST_MESSAGE_UPLOADPATH:"例如:test/{fullName}",PICBED_AWSS3PLIST_MESSAGE_ENDPOINT:"例如:https://s3.us-east-1.amazonaws.com",PICBED_AWSS3PLIST_MESSAGE_PROXY:"例如:http://127.0.0.1:1080",PICBED_AWSS3PLIST_MESSAGE_URLPREFIX:"例如:https://test.com",PICBED_AWSS3PLIST_MESSAGE_PATHSTYLEACCESS:"需要时启用",PICBED_AWSS3PLIST_MESSAGE_REJECTUNAUTHORIZED:"需要时启用",PICBED_AWSS3PLIST_MESSAGE_ACL:"例如:public-read",PICBED_AWSS3PLIST_MESSAGE_DISABLEBUCKETPREFIXTOURL:"需要时启用",BUILDIN_WATERMARK_ISADDWATERMARK:"是否添加水印",BUILDIN_WATERMARK_MESSAGE_ISADDWATERMARK:"需要添加水印时启用",BUILDIN_WATERMARK_WATERMARKTYPE:"设定水印类型",BUILDIN_WATERMARK_MESSAGE_WATERMARKTYPE:"请选择水印类型",BUILDIN_WATERMARK_ISFULLSCREENWATERMARK:"是否全屏水印",BUILDIN_WATERMARK_MESSAGE_ISFULLSCREENWATERMARK:"需要全屏水印时启用",BUILDIN_WATERMARK_WATERMARKDEGREE:"设定水印角度",BUILDIN_WATERMARK_MESSAGE_WATERMARKDEGREE:"请输入数字",BUILDIN_WATERMARK_WATERMARKTEXT:"设定水印文字",BUILDIN_WATERMARK_MESSAGE_WATERMARKTEXT:"请输入水印文字",BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH:"设定水印字体文件路径",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTPATH:"请输入水印字体文件路径",BUILDIN_WATERMARK_WATERMARKFONTRATIO:"设定水印相对于图片的比例",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTRATIO:"请输入0-1的小数",BUILDIN_WATERMARK_WATERMARKFONTCOLOR:"设定水印字体颜色",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTCOLOR:"请输入rgb颜色值",BUILDIN_WATERMARK_WATERMARKIMAGEPATH:"设定水印图片路径",BUILDIN_WATERMARK_MESSAGE_WATERMARKIMAGEPATH:"请输入水印图片路径",BUILDIN_WATERMARK_WATERMARKPOSITION:"设定水印位置",BUILDIN_WATERMARK_MESSAGE_WATERMARKPOSITION:"请选择水印位置",BUILDIN_RENAME_FORMAT:"设定重命名格式",BUILDIN_RENAME_ENABLE:"是否启用重命名",BUILDIN_COMPRESS_QUALITY:"设定图片质量",BUILDIN_COMPRESS_MESSAGE_QUALITY:"请输入0-100的整数",BUILDIN_COMPRESS_ISCONVERT:"是否进行格式转换",BUILDIN_COMPRESS_MESSAGE_ISCONVERT:"需要转换时启用",BUILDIN_COMPRESS_CONVERTFORMAT:"设定转换格式",BUILDIN_COMPRESS_MESSAGE_CONVERTFORMAT:"请选择转换格式",BUILDIN_COMPRESS_ISRESIZE:"是否进行图片缩放",BUILDIN_COMPRESS_MESSAGE_ISRESIZE:"需要缩放时启用",BUILDIN_COMPRESS_RESIZEWIDTH:"设定缩放宽度",BUILDIN_COMPRESS_MESSAGE_RESIZEWIDTH:"请输入数字",BUILDIN_COMPRESS_RESIZEHEIGHT:"设定缩放高度",BUILDIN_COMPRESS_MESSAGE_RESIZEHEIGHT:"请输入数字",BUILDIN_COMPRESS_ISRESIZEBYPERCENT:"是否按百分比进行缩放",BUILDIN_COMPRESS_MESSAGE_ISRESIZEBYPERCENT:"需要按百分比缩放时启用",BUILDIN_COMPRESS_ISFLIP:"是否垂直翻转图片",BUILDIN_COMPRESS_ISFLOP:"是否水平翻转图片",BUILDIN_COMPRESS_RESIZEPERCENT:"设定缩放百分比",BUILDIN_COMPRESS_MESSAGE_RESIZEPERCENT:"请输入数字",BUILDIN_COMPRESS_SKIPRESIZEOFSMALLIMG:"是否跳过小图缩放",BUILDIN_COMPRESS_ISROTATE:"是否进行图片旋转",BUILDIN_COMPRESS_MESSAGE_ISROTATE:"需要旋转时启用",BUILDIN_COMPRESS_ROTATEDEGREE:"设定旋转角度",BUILDIN_COMPRESS_MESSAGE_ROTATEDEGREE:"请输入数字,可为负数",BUILDIN_COMPRESS_ISREMOVEEXIF:"是否移除EXIF信息",BUILDIN_COMPRESS_MESSAGE_ISREMOVEEXIF:"需要移除EXIF信息时启用",PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS:"插件安装成功",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED:"插件安装失败",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_REASON:"插件安装失败,失败码为${code},错误日志为 \n ${data}",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_PATH:"插件安装失败,请输入合法插件名或合法安装路径",PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS:"插件卸载成功",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED:"插件卸载失败",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_REASON:"插件卸载失败,失败码为${code},错误日志为 \n ${data}",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID:"插件卸载失败,请输入合法插件名",PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS:"插件更新成功",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED:"插件更新失败",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_REASON:"插件更新失败,失败码为${code},错误日志为 \n ${data}",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_VALID:"插件更新失败,请输入合法插件名"},"zh-TW":{UPLOAD_FAILED:"上傳失敗",CHECK_SETTINGS:"請檢查你的設定是否正確",CHECK_SETTINGS_AND_NETWORK:"請檢查你的設定及網路",UPLOAD_FAILED_REASON:"錯誤碼:${code},請打開瀏覽器貼上地址查看相關原因",SERVER_ERROR:"伺服器出錯,請重試",AUTH_FAILED:"認證失敗",PICBED_SMMS:"SM.MS",PICBED_SMMS_TOKEN:"設定Token",PICBED_SMMS_BACKUP_DOMAIN:"備用上傳網址",PICBED_SMMS_MESSAGE_BACKUP_DOMAIN:"例如 smms.app",PICBED_LOCAL:"本地",PICBED_LOCAL_PATH:"設定儲存路徑",PICBED_LOCAL_MESSAGE_PATH:"例如 /usr/local/images/",PICBED_LOCAL_CUSTOMURL:"設定自訂網址",PICBED_LOCAL_MESSAGE_CUSTOMURL:"例如 https://test.com",PICBED_LOCAL_WEBPATH:"設定網址路徑",PICBED_LOCAL_MESSAGE_WEBPATH:"用于網頁顯示的路徑",PICBED_ALICLOUD:"阿里云OSS",PICBED_ALICLOUD_ACCESSKEYID:"設定accessKeyId",PICBED_ALICLOUD_ACCESSKEYSECRET:"設定accessKeySecret",PICBED_ALICLOUD_BUCKET:"設定Bucket",PICBED_ALICLOUD_AREA:"設定儲存區域",PICBED_ALICLOUD_PATH:"設定儲存路徑",PICBED_ALICLOUD_CUSTOMURL:"設定自訂網址",PICBED_ALICLOUD_OPTIONS:"設定網址後綴",PICBED_ALICLOUD_MESSAGE_AREA:"例如:oss-cn-beijing",PICBED_ALICLOUD_MESSAGE_PATH:"例如:test/",PICBED_ALICLOUD_MESSAGE_OPTIONS:"例如:?x-oss-process=xxx",PICBED_ALICLOUD_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_TENCENTCLOUD:"騰訊云COS",PICBED_TENCENTCLOUD_VERSION:"COS版本",PICBED_TENCENTCLOUD_SECRETID:"設定SecretId",PICBED_TENCENTCLOUD_SECRETKEY:"設定SecretKey",PICBED_TENCENTCLOUD_APPID:"設定AppId",PICBED_TENCENTCLOUD_BUCKET:"設定Bucket",PICBED_TENCENTCLOUD_AREA:"設定儲存區域",PICBED_TENCENTCLOUD_ENDPOINT:"設定接入點",PICBED_TENCENTCLOUD_PATH:"設定儲存路徑",PICBED_TENCENTCLOUD_OPTIONS:"設定網址後綴",PICBED_TENCENTCLOUD_CUSTOMURL:"設定自訂網址",PICBED_TENCENTCLOUD_MESSAGE_APPID:"例如:1234567890",PICBED_TENCENTCLOUD_MESSAGE_AREA:"例如:ap-beijing",PICBED_TENCENTCLOUD_MESSAGE_PATH:"例如:test/",PICBED_TENCENTCLOUD_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_TENCENTCLOUD_MESSAGE_OPTIONS:"例如:?imageMogr2",PICBED_TENCENTCLOUD_MESSAGE_ENDPOINT:"例如:cos-internal.accelerate.tencentcos.cn",PICBED_TENCENTCLOUD_SLIM:"極智壓縮",PICBED_TENCENTCLOUD_SLIM_CANCEL:"關閉",PICBED_TENCENTCLOUD_SLIM_CONFIRM:"開啓",PICBED_TENCENTCLOUD_SLIM_TIP:"圖片極智壓縮,詳情請參考[文檔說明](https://cloud.tencent.com/document/product/436/49259)",PICBED_GITHUB:"GitHub",PICBED_GITHUB_TOKEN:"設定Token",PICBED_GITHUB_REPO:"設定倉庫名稱",PICBED_GITHUB_PATH:"設定儲存路徑",PICBED_GITHUB_BRANCH:"設定分支名稱",PICBED_GITHUB_CUSTOMURL:"設定自訂網址",PICBED_GITHUB_MESSAGE_REPO:"格式:username/repo",PICBED_GITHUB_MESSAGE_BRANCH:"例如:main",PICBED_GITHUB_MESSAGE_PATH:"例如:test/",PICBED_GITHUB_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_QINIU:"七牛云",PICBED_QINIU_ACCESSKEY:"設定AccessKey",PICBED_QINIU_SECRETKEY:"設定SecretKey",PICBED_QINIU_BUCKET:"設定Bucket",PICBED_QINIU_PATH:"設定儲存路徑",PICBED_QINIU_URL:"設定訪問網址",PICBED_QINIU_OPTIONS:"設定網址後綴",PICBED_QINIU_AREA:"設定儲存區域",PICBED_QINIU_MESSAGE_PATH:"例如:test/",PICBED_QINIU_MESSAGE_AREA:"例如:z0",PICBED_QINIU_MESSAGE_OPTIONS:"例如:?imageslim",PICBED_QINIU_MESSAGE_URL:"例如:https://xxx.yyy.glb.clouddn.com",PICBED_TELEGRAPH:"Telegraph",PICBED_IMGUR:"Imgur",PICBED_IMGUR_CLIENTID:"設定ClientId",PICBED_IMGUR_USERNAME:"設定用戶名",PICBED_IMGUR_ACCESS_TOKEN:"設定accessToken",PICBED_IMGUR_ALBUM:"設定相簿名",PICBED_IMGUR_PROXY:"設定PROXY",PICBED_IMGUR_MESSAGE_CLIENTID:"匿名上傳時填寫",PICBED_IMGUR_MESSAGE_USERNAME:"需要上傳到賬戶時填寫",PICBED_IMGUR_MESSAGE_ACCESS_TOKEN:"需要上傳到賬戶時填寫",PICBED_IMGUR_MESSAGE_ALBUM:"例如:test",PICBED_IMGUR_MESSAGE_PROXY:"例如:http://127.0.0.1:1080",PICBED_UPYUN:"又拍云",PICBED_UPYUN_BUCKET:"設定Bucket",PICBED_UPYUN_ENDPOINT:"設定接入點",PICBED_UPYUN_OPERATOR:"設定操作員",PICBED_UPYUN_PASSWORD:"設定操作員密碼",PICBED_UPYUN_PATH:"設定儲存路徑",PICBED_UPYUN_URL:"設定加速網址",PICBED_UPYUN_OPTIONS:"設定網址後綴",PICBED_UPYUN_ANTI_LEECH_TOKEN:"設定防盜鏈Token",PICBED_UPYUN_EXPIRE_TIME:"設定過期時間(秒)",PICBED_UPYUN_MESSAGE_OPERATOR:"例如:me",PICBED_UPYUN_MESSAGE_PASSWORD:"輸入操作員密碼",PICBED_UPYUN_MESSAGE_URL:"例如:http://xxx.test.upcdn.net",PICBED_UPYUN_MESSAGE_OPTIONS:"例如:!imgslim",PICBED_UPYUN_MESSAGE_PATH:"例如:test/",PICBED_UPYUN_MESSAGE_ENDPOINT:"例如:https://v0.api.upyun.com",PICBED_WEBDAVPLIST:"WebDAV",PICBED_WEBDAVPLIST_HOST:"設定API主機",PICBED_WEBDAVPLIST_SSLENABLED:"需要HTTPS時啟用",PICBED_WEBDAVPLIST_USERNAME:"設定用戶名",PICBED_WEBDAVPLIST_PASSWORD:"設定密碼",PICBED_WEBDAVPLIST_PATH:"設定儲存路徑",PICBED_WEBDAVPLIST_CUSTOMURL:"設定自訂網址",PICBED_WEBDAVPLIST_AUTHTYPE:"設定認證方式",PICBED_WEBDAVPLIST_OPTIONS:"設定網址後綴",PICBED_WEBDAVPLIST_WEBSITE_PATH:"設定網站路徑",PICBED_WEBDAVPLIST_MESSAGE_HOST:"例如:https://example.com/webdav",PICBED_WEBDAVPLIST_MESSAGE_SSLENABLED:"需要HTTPS時啟用",PICBED_WEBDAVPLIST_MESSAGE_USERNAME:"例如:me",PICBED_WEBDAVPLIST_MESSAGE_PASSWORD:"輸入用戶密碼",PICBED_WEBDAVPLIST_MESSAGE_PATH:"例如:test/",PICBED_WEBDAVPLIST_MESSAGE_WEBSITE_PATH:"拼接網址時使用",PICBED_WEBDAVPLIST_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_WEBDAVPLIST_MESSAGE_OPTIONS:"例如:?key=value",PICBED_SFTPPLIST:"內置SFTP",PICBED_SFTPPLIST_HOST:"設定主機",PICBED_SFTPPLIST_PORT:"設定端口",PICBED_SFTPPLIST_USERNAME:"設定用戶名",PICBED_SFTPPLIST_PASSWORD:"設定密碼",PICBED_SFTPPLIST_PRIVATEKEY:"設定私鑰",PICBED_SFTPPLIST_PRIVATEKEY_PASSPHRASE:"設定私鑰密碼",PICBED_SFTPPLIST_UPLOADPATH:"設定上傳路徑",PICBED_SFTPPLIST_CUSTOMURL:"設定自訂網址",PICBED_SFTPPLIST_WEBSITE_PATH:"設定網站路徑",PICBED_SFTPPLIST_FILE_USER:"設定文件用戶:組",PICBED_SFTPPLIST_FILE_MODE:"設定文件權限",PICBED_SFTPPLIST_DIR_MODE:"設定文件夾權限",PICBED_SFTPPLIST_MESSAGE_HOST:"例如:1.1.1.3",PICBED_SFTPPLIST_MESSAGE_PORT:"默認22",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY:"例如:/Users/xxx/.ssh/id_rsa",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY_PASSPHRASE:"輸入私鑰密碼",PICBED_SFTPPLIST_MESSAGE_UPLOADPATH:"例如:test/",PICBED_SFTPPLIST_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_SFTPPLIST_MESSAGE_WEBSITE_PATH:"拼接網址時使用",PICBED_SFTPPLIST_MESSAGE_FILE_USER:"例如:www:data",PICBED_SFTPPLIST_MESSAGE_FILE_MODE:"例如:0664",PICBED_SFTPPLIST_MESSAGE_DIR_MODE:"例如:0775",PICBED_PICLIST:"PicList",PICBED_PICLIST_HOST:"設定主機",PICBED_PICLIST_PORT:"設定端口",PICBED_PICLIST_PICBED:"設定圖床",PICBED_PICLIST_CONFIGNAME:"設定配置名",PICBED_PICLIST_KEY:"設定鑒權Key",PICBED_LSKY_PLIST:"Lsky",PICBED_LSKY_VERSION:"設定版本",PICBED_LSKY_MESSAGE_VERSION:"請選擇版本",PICBED_LSKY_HOST:"設定主機",PICBED_LSKY_MESSAGE_HOST:"例如:https://example.com",PICBED_LSKY_TOKEN:"設定Token",PICBED_LSKY_MESSAGE_TOKEN:"請輸入Token",PICBED_LSKY_STRATEGY_ID:"設定策略ID",PICBED_LSKY_MESSAGE_STRATEGY_ID:"例如1",PICBED_LSKY_ALBUM_ID:"設定相冊ID",PICBED_LSKY_MESSAGE_ALBUM_ID:"例如1",PICBED_LSKY_PERMISSION:"設定上傳權限",PICBED_LSKY_MESSAGE_PERMISSION:"請選擇上傳權限",PICBED_AWSS3PLIST:"AWS S3",PICBED_AWSS3PLIST_ACCESSKEYID:"設定AccessKeyId",PICBED_AWSS3PLIST_SECRET_ACCESSKEY:"設定SecretAccessKey",PICBED_AWSS3PLIST_BUCKET:"設定Bucket",PICBED_AWSS3PLIST_REGION:"設定Region",PICBED_AWSS3PLIST_UPLOADPATH:"設定上傳路徑",PICBED_AWSS3PLIST_ENDPOINT:"設定自定義節點",PICBED_AWSS3PLIST_PROXY:"設定代理",PICBED_AWSS3PLIST_URLPREFIX:"設定自定義網址",PICBED_AWSS3PLIST_PATHSTYLEACCESS:"開啟 `pathStyleAccess`",PICBED_AWSS3PLIST_REJECTUNAUTHORIZED:"開啟 `rejectUnauthorized`",PICBED_AWSS3PLIST_ACL:"設定ACL",PICBED_AWSS3PLIST_DISABLEBUCKETPREFIXTOURL:"開啟 `pathStyleAccess` 時,是否要禁用最終生成URL中添加 bucket 前綴",PICBED_AWSS3PLIST_MESSAGE_ACCESSKEYID:"例如:AKIAxxxxxxxxxxxxx",PICBED_AWSS3PLIST_MESSAGE_SECRET_ACCESSKEY:"例如:xxxxxxxxxx",PICBED_AWSS3PLIST_MESSAGE_BUCKET:"例如:test/{fullName}",PICBED_AWSS3PLIST_MESSAGE_REGION:"例如:us-east-1",PICBED_AWSS3PLIST_MESSAGE_UPLOADPATH:"例如:test/",PICBED_AWSS3PLIST_MESSAGE_ENDPOINT:"例如:https://s3.us-east-1.amazonaws.com",PICBED_AWSS3PLIST_MESSAGE_PROXY:"例如:http://127.0.0.1:1080",PICBED_AWSS3PLIST_MESSAGE_URLPREFIX:"例如:https://test.com",PICBED_AWSS3PLIST_MESSAGE_PATHSTYLEACCESS:"需要時啟用",PICBED_AWSS3PLIST_MESSAGE_REJECTUNAUTHORIZED:"需要時啟用",PICBED_AWSS3PLIST_MESSAGE_ACL:"例如:public-read",PICBED_AWSS3PLIST_MESSAGE_DISABLEBUCKETPREFIXTOURL:"需要時啟用",BUILDIN_WATERMARK_ISADDWATERMARK:"是否添加水印",BUILDIN_WATERMARK_MESSAGE_ISADDWATERMARK:"需要添加水印時啟用",BUILDIN_WATERMARK_WATERMARKTYPE:"設定水印類型",BUILDIN_WATERMARK_MESSAGE_WATERMARKTYPE:"請選擇水印類型",BUILDIN_WATERMARK_ISFULLSCREENWATERMARK:"是否全屏水印",BUILDIN_WATERMARK_MESSAGE_ISFULLSCREENWATERMARK:"需要全屏水印時啟用",BUILDIN_WATERMARK_WATERMARKDEGREE:"設定水印角度",BUILDIN_WATERMARK_MESSAGE_WATERMARKDEGREE:"請輸入數字",BUILDIN_WATERMARK_WATERMARKTEXT:"設定水印文字",BUILDIN_WATERMARK_MESSAGE_WATERMARKTEXT:"請輸入水印文字",BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH:"設定水印字體",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTPATH:"請輸入水印字體文件路徑",BUILDIN_WATERMARK_WATERMARKFONTRATIO:"設定水印圖片比例",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTRATIO:"請輸入0-1的數字",BUILDIN_WATERMARK_WATERMARKFONTCOLOR:"設定水印字體顏色",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTCOLOR:"請輸入rgb顏色值",BUILDIN_WATERMARK_WATERMARKIMAGEPATH:"設定水印圖片路徑",BUILDIN_WATERMARK_MESSAGE_WATERMARKIMAGEPATH:"請輸入水印圖片路徑",BUILDIN_WATERMARK_WATERMARKPOSITION:"設定水印位置",BUILDIN_WATERMARK_MESSAGE_WATERMARKPOSITION:"請選擇水印位置",BUILDIN_RENAME_FORMAT:"設定重命名格式",BUILDIN_RENAME_ENABLE:"是否啟用重命名",BUILDIN_COMPRESS_QUALITY:"設定圖片質量",BUILDIN_COMPRESS_MESSAGE_QUALITY:"請輸入0-100的整數",BUILDIN_COMPRESS_ISCONVERT:"是否進行格式轉換",BUILDIN_COMPRESS_MESSAGE_ISCONVERT:"需要轉換時啟用",BUILDIN_COMPRESS_CONVERTFORMAT:"設定轉換格式",BUILDIN_COMPRESS_MESSAGE_CONVERTFORMAT:"請選擇轉換格式",BUILDIN_COMPRESS_ISRESIZE:"是否進行圖片縮放",BUILDIN_COMPRESS_MESSAGE_ISRESIZE:"需要縮放時啟用",BUILDIN_COMPRESS_RESIZEWIDTH:"設定縮放寬度",BUILDIN_COMPRESS_MESSAGE_RESIZEWIDTH:"請輸入數字",BUILDIN_COMPRESS_RESIZEHEIGHT:"設定縮放高度",BUILDIN_COMPRESS_MESSAGE_RESIZEHEIGHT:"請輸入數字",BUILDIN_COMPRESS_ISRESIZEBYPERCENT:"是否按百分比進行縮放",BUILDIN_COMPRESS_MESSAGE_ISRESIZEBYPERCENT:"需要按百分比縮放時啟用",BUILDIN_COMPRESS_ISFLIP:"是否垂直翻轉圖片",BUILDIN_COMPRESS_ISFLOP:"是否水平翻轉圖片",BUILDIN_COMPRESS_RESIZEPERCENT:"設定縮放百分比",BUILDIN_COMPRESS_MESSAGE_RESIZEPERCENT:"請輸入数字",BUILDIN_COMPRESS_SKIPRESIZEOFSMALLIMG:"是否跳過小圖縮放",BUILDIN_COMPRESS_ISROTATE:"是否進行圖片旋轉",BUILDIN_COMPRESS_MESSAGE_ISROTATE:"需要旋轉時啟用",BUILDIN_COMPRESS_ROTATEDEGREE:"設定旋轉角度",BUILDIN_COMPRESS_MESSAGE_ROTATEDEGREE:"請輸入數字,可為負數",BUILDIN_COMPRESS_ISREMOVEEXIF:"是否移除EXIF資訊",BUILDIN_COMPRESS_MESSAGE_ISREMOVEEXIF:"需要移除EXIF資訊時啟用",PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS:"插件安裝成功",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED:"插件安裝失敗",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_REASON:"插件安裝失敗,失敗碼為${code},錯誤紀錄為 \n ${data}",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_PATH:"插件安裝失敗,請輸入正確的插件名稱或正確的安裝路徑",PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS:"插件卸載成功",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED:"插件卸載失敗",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_REASON:"插件卸載失敗,失敗碼為${code},錯誤紀錄為 \n ${data}",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID:"插件卸載失敗,請輸入正確的插件名稱",PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS:"插件更新成功",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED:"插件更新失敗",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_REASON:"插件更新失敗,失敗碼為${code},錯誤紀錄為 \n ${data}",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_VALID:"插件更新失敗,請輸入正確的插件名稱"},en:{UPLOAD_FAILED:"Upload failed",CHECK_SETTINGS:"Please check your settings",CHECK_SETTINGS_AND_NETWORK:"Please check your settings and network",UPLOAD_FAILED_REASON:"Error code: ${code}, please open the browser and paste the address to see the reason",SERVER_ERROR:"Server error, please try again later",AUTH_FAILED:"Authentication failed",PICBED_SMMS:"SM.MS",PICBED_SMMS_TOKEN:"Set Token",PICBED_SMMS_BACKUP_DOMAIN:"Set Backup Upload Domain",PICBED_SMMS_MESSAGE_BACKUP_DOMAIN:"Ex. smms.app",PICBED_LOCAL:"Local",PICBED_LOCAL_PATH:"Set Path",PICBED_LOCAL_MESSAGE_PATH:"Ex. /Users/name/Pictures/",PICBED_LOCAL_CUSTOMURL:"Set Custom URL",PICBED_LOCAL_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_LOCAL_WEBPATH:"Set Web Path",PICBED_LOCAL_MESSAGE_WEBPATH:"Used to generate url path",PICBED_ALICLOUD:"Ali Cloud",PICBED_ALICLOUD_ACCESSKEYID:"Set accessKeyId",PICBED_ALICLOUD_ACCESSKEYSECRET:"Set accessKeySecret",PICBED_ALICLOUD_BUCKET:"Set Bucket",PICBED_ALICLOUD_AREA:"Set Area",PICBED_ALICLOUD_PATH:"Set Path",PICBED_ALICLOUD_CUSTOMURL:"Set Custom URL",PICBED_ALICLOUD_OPTIONS:"Set URL Suffix",PICBED_ALICLOUD_MESSAGE_AREA:"Ex. oss-cn-beijing",PICBED_ALICLOUD_MESSAGE_PATH:"Ex. test/",PICBED_ALICLOUD_MESSAGE_OPTIONS:"Ex. ?x-oss-process=xxx",PICBED_ALICLOUD_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_TENCENTCLOUD:"Tencent Cloud",PICBED_TENCENTCLOUD_VERSION:"Choose COS version",PICBED_TENCENTCLOUD_SECRETID:"Set SecretId",PICBED_TENCENTCLOUD_SECRETKEY:"Set SecretKey",PICBED_TENCENTCLOUD_APPID:"Set AppId",PICBED_TENCENTCLOUD_BUCKET:"Set Bucket",PICBED_TENCENTCLOUD_AREA:"Set Area",PICBED_TENCENTCLOUD_ENDPOINT:"Set Endpoint",PICBED_TENCENTCLOUD_PATH:"Set Path",PICBED_TENCENTCLOUD_OPTIONS:"Set URL Suffix",PICBED_TENCENTCLOUD_CUSTOMURL:"Set Custom URL",PICBED_TENCENTCLOUD_MESSAGE_APPID:"Ex. 1234567890",PICBED_TENCENTCLOUD_MESSAGE_AREA:"Ex. ap-beijing",PICBED_TENCENTCLOUD_MESSAGE_PATH:"Ex. test/",PICBED_TENCENTCLOUD_MESSAGE_CUSTOMURL:"Ex. http://test.com",PICBED_TENCENTCLOUD_MESSAGE_OPTIONS:"Ex. ?imageMogr2",PICBED_TENCENTCLOUD_MESSAGE_ENDPOINT:"Ex. cos-internal.accelerate.tencentcos.cn",PICBED_TENCENTCLOUD_SLIM:"Set ImageSlim",PICBED_TENCENTCLOUD_SLIM_TIP:"Image extremely intelligent compression, please refer to the [document description](https://cloud.tencent.com/document/product/436/86438)",PICBED_TENCENTCLOUD_SLIM_CONFIRM:"OPEN",PICBED_TENCENTCLOUD_SLIM_CANCEL:"CLOSE",PICBED_GITHUB:"GitHub",PICBED_GITHUB_TOKEN:"Set Token",PICBED_GITHUB_REPO:"Set Repo Name",PICBED_GITHUB_PATH:"Set Path",PICBED_GITHUB_BRANCH:"Set Branch",PICBED_GITHUB_CUSTOMURL:"Set Custom URL",PICBED_GITHUB_MESSAGE_REPO:"Ex. username/repo",PICBED_GITHUB_MESSAGE_BRANCH:"Ex. main",PICBED_GITHUB_MESSAGE_PATH:"Ex. test/",PICBED_GITHUB_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_QINIU:"Qiniu",PICBED_QINIU_ACCESSKEY:"Set AccessKey",PICBED_QINIU_SECRETKEY:"Set SecretKey",PICBED_QINIU_BUCKET:"Set Bucket",PICBED_QINIU_PATH:"Set Path",PICBED_QINIU_URL:"Set URL",PICBED_QINIU_OPTIONS:"Set URL Suffix",PICBED_QINIU_AREA:"Set Area",PICBED_QINIU_MESSAGE_PATH:"Ex. test/",PICBED_QINIU_MESSAGE_AREA:"Ex. z0",PICBED_QINIU_MESSAGE_OPTIONS:"Ex. ?imageslim",PICBED_QINIU_MESSAGE_URL:"Ex. https://xxx.yyy.glb.clouddn.com",PICBED_TELEGRAPH:"Telegraph",PICBED_IMGUR:"Imgur",PICBED_IMGUR_CLIENTID:"Set ClientId",PICBED_IMGUR_USERNAME:"Set Username",PICBED_IMGUR_ACCESS_TOKEN:"Set Access Token",PICBED_IMGUR_ALBUM:"Set Album Name",PICBED_IMGUR_PROXY:"Set Proxy",PICBED_IMGUR_MESSAGE_CLIENTID:"Fill in when you need to upload as anonymous",PICBED_IMGUR_MESSAGE_USERNAME:"Fill in when you need to upload to the account",PICBED_IMGUR_MESSAGE_ACCESS_TOKEN:"Fill in when you need to upload to the account",PICBED_IMGUR_MESSAGE_ALBUM:"Ex. test",PICBED_IMGUR_MESSAGE_PROXY:"Ex. http://127.0.0.1:1080",PICBED_UPYUN:"Upyun",PICBED_UPYUN_BUCKET:"Set Bucket",PICBED_UPYUN_ENDPOINT:"Set Endpoint",PICBED_UPYUN_OPERATOR:"Set Operator",PICBED_UPYUN_PASSWORD:"Set Operator Password",PICBED_UPYUN_PATH:"Set Path",PICBED_UPYUN_URL:"Set URL",PICBED_UPYUN_OPTIONS:"Set URL Suffix",PICBED_UPYUN_ANTI_LEECH_TOKEN:"Set Anti-Leech Token",PICBED_UPYUN_EXPIRE_TIME:"Set Expire Time(seconds)",PICBED_UPYUN_MESSAGE_OPERATOR:"Ex. me",PICBED_UPYUN_MESSAGE_PASSWORD:"Please type the operator password",PICBED_UPYUN_MESSAGE_URL:"Ex. http://xxx.test.upcdn.net",PICBED_UPYUN_MESSAGE_OPTIONS:"Ex. !imgslim",PICBED_UPYUN_MESSAGE_PATH:"Ex. test/",PICBED_UPYUN_MESSAGE_ENDPOINT:"Ex. https://v0.api.upyun.com",PICBED_WEBDAVPLIST:"WebDAV",PICBED_WEBDAVPLIST_HOST:"Set Host",PICBED_WEBDAVPLIST_SSLENABLED:"Enable HTTPS",PICBED_WEBDAVPLIST_USERNAME:"Set Username",PICBED_WEBDAVPLIST_PASSWORD:"Set Password",PICBED_WEBDAVPLIST_PATH:"Set Path",PICBED_WEBDAVPLIST_WEBSITE_PATH:"Set Website Path",PICBED_WEBDAVPLIST_CUSTOMURL:"Set Custom URL",PICBED_WEBDAVPLIST_AUTHTYPE:"Set Auth Type",PICBED_WEBDAVPLIST_OPTIONS:"Set URL Suffix",PICBED_WEBDAVPLIST_MESSAGE_HOST:"Ex. https://example.com/webdav",PICBED_WEBDAVPLIST_MESSAGE_SSLENABLED:"Enable HTTPS",PICBED_WEBDAVPLIST_MESSAGE_USERNAME:"Ex. me",PICBED_WEBDAVPLIST_MESSAGE_PASSWORD:"Please type the password",PICBED_WEBDAVPLIST_MESSAGE_PATH:"Ex. test/",PICBED_WEBDAVPLIST_MESSAGE_WEBSITE_PATH:"Used to generate the URL of the image",PICBED_WEBDAVPLIST_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_WEBDAVPLIST_MESSAGE_OPTIONS:"Ex. ?key=value",PICBED_SFTPPLIST:"SFTP Buildin",PICBED_SFTPPLIST_HOST:"Set Host",PICBED_SFTPPLIST_PORT:"Set Port",PICBED_SFTPPLIST_USERNAME:"Set Username",PICBED_SFTPPLIST_PASSWORD:"Set Password",PICBED_SFTPPLIST_PRIVATEKEY:"Set Private Key",PICBED_SFTPPLIST_PRIVATEKEY_PASSPHRASE:"Set Private Key Passphrase",PICBED_SFTPPLIST_UPLOADPATH:"Set Upload Path",PICBED_SFTPPLIST_CUSTOMURL:"Set Custom URL",PICBED_SFTPPLIST_WEBSITE_PATH:"Set Website Path",PICBED_SFTPPLIST_FILE_USER:"Set File User:Group",PICBED_SFTPPLIST_FILE_MODE:"Set File Mode",PICBED_SFTPPLIST_DIR_MODE:"Set Directory Mode",PICBED_SFTPPLIST_MESSAGE_HOST:"Ex. 1.1.1.3",PICBED_SFTPPLIST_MESSAGE_PORT:"Default 22",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY:"Ex. /Users/xxx/.ssh/id_rsa",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY_PASSPHRASE:"Please type the private key passphrase",PICBED_SFTPPLIST_MESSAGE_UPLOADPATH:"Ex. test/",PICBED_SFTPPLIST_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_SFTPPLIST_MESSAGE_WEBSITE_PATH:"Used to generate the URL of the image",PICBED_SFTPPLIST_MESSAGE_FILE_USER:"Ex. www:data",PICBED_SFTPPLIST_MESSAGE_FILE_MODE:"Ex. 0664",PICBED_SFTPPLIST_MESSAGE_DIR_MODE:"Ex. 0775",PICBED_PICLIST:"PicList",PICBED_PICLIST_HOST:"Set Host",PICBED_PICLIST_PORT:"Set Port",PICBED_PICLIST_PICBED:"Set PicBed",PICBED_PICLIST_CONFIGNAME:"Set Config Name",PICBED_PICLIST_KEY:"Set Key",PICBED_LSKY_PLIST:"Lsky",PICBED_LSKY_VERSION:"Set Version",PICBED_LSKY_MESSAGE_VERSION:"Ex. v1",PICBED_LSKY_HOST:"Set Host",PICBED_LSKY_MESSAGE_HOST:"Ex. https://lsky.co",PICBED_LSKY_TOKEN:"Set Token",PICBED_LSKY_MESSAGE_TOKEN:"Ex. xxx",PICBED_LSKY_STRATEGY_ID:"Set Strategy ID",PICBED_LSKY_MESSAGE_STRATEGY_ID:"Ex. 1",PICBED_LSKY_ALBUM_ID:"Set Album ID",PICBED_LSKY_MESSAGE_ALBUM_ID:"Optional, only for V2",PICBED_LSKY_PERMISSION:"Set Permisson",PICBED_LSKY_MESSAGE_PERMISSION:"Ex. public",PICBED_AWSS3PLIST:"AWS S3",PICBED_AWSS3PLIST_ACCESSKEYID:"Set AccessKeyId",PICBED_AWSS3PLIST_SECRET_ACCESSKEY:"Set SecretAccessKey",PICBED_AWSS3PLIST_BUCKET:"Set Bucket",PICBED_AWSS3PLIST_REGION:"Set Region",PICBED_AWSS3PLIST_UPLOADPATH:"Set Upload Path",PICBED_AWSS3PLIST_ENDPOINT:"Set Endpoint",PICBED_AWSS3PLIST_PROXY:"Set Proxy",PICBED_AWSS3PLIST_URLPREFIX:"Set Custom URL",PICBED_AWSS3PLIST_PATHSTYLEACCESS:"Set PathStyleAccess",PICBED_AWSS3PLIST_REJECTUNAUTHORIZED:"Set RejectUnauthorized",PICBED_AWSS3PLIST_ACL:"Set ACL",PICBED_AWSS3PLIST_DISABLEBUCKETPREFIXTOURL:"when `pathStyleAccess` is enabled, whether to disable adding bucket prefix to url",PICBED_AWSS3PLIST_MESSAGE_ACCESSKEYID:"Ex. xxx",PICBED_AWSS3PLIST_MESSAGE_SECRET_ACCESSKEY:"Ex. xxx",PICBED_AWSS3PLIST_MESSAGE_BUCKET:"Ex. test",PICBED_AWSS3PLIST_MESSAGE_REGION:"Ex. us-east-1",PICBED_AWSS3PLIST_MESSAGE_UPLOADPATH:"Ex. test/{fullName}",PICBED_AWSS3PLIST_MESSAGE_ENDPOINT:"Ex. https://s3.us-east-1.amazonaws.com",PICBED_AWSS3PLIST_MESSAGE_PROXY:"Ex. http://127.0.0.1:1080",PICBED_AWSS3PLIST_MESSAGE_URLPREFIX:"Ex. https://test.com",PICBED_AWSS3PLIST_MESSAGE_PATHSTYLEACCESS:"Enable when `pathStyleAccess` is required",PICBED_AWSS3PLIST_MESSAGE_REJECTUNAUTHORIZED:"Enable when rejecting invalid TLS certificate connection is required",PICBED_AWSS3PLIST_MESSAGE_ACL:"Ex. public-read",PICBED_AWSS3PLIST_MESSAGE_DISABLEBUCKETPREFIXTOURL:"Enable when `pathStyleAccess` is enabled",BUILDIN_RENAME_FORMAT:"Set rename format",BUILDIN_RENAME_ENABLE:"Enable rename",BUILDIN_WATERMARK_ISADDWATERMARK:"Whether to add watermark",BUILDIN_WATERMARK_MESSAGE_ISADDWATERMARK:"Enable when watermark is required",BUILDIN_WATERMARK_WATERMARKTYPE:"Set watermark type",BUILDIN_WATERMARK_MESSAGE_WATERMARKTYPE:"Please select watermark type",BUILDIN_WATERMARK_ISFULLSCREENWATERMARK:"Whether to use full-screen watermark",BUILDIN_WATERMARK_MESSAGE_ISFULLSCREENWATERMARK:"Enable when full-screen watermark is required",BUILDIN_WATERMARK_WATERMARKDEGREE:"Set watermark angle",BUILDIN_WATERMARK_MESSAGE_WATERMARKDEGREE:"Please enter a number",BUILDIN_WATERMARK_WATERMARKTEXT:"Set watermark text",BUILDIN_WATERMARK_MESSAGE_WATERMARKTEXT:"Please enter watermark text",BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH:"Set watermark font",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTPATH:"Please enter the watermark font file path",BUILDIN_WATERMARK_WATERMARKFONTRATIO:"Set the ratio of the watermark to the image",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTRATIO:"Please enter a number between 0-1",BUILDIN_WATERMARK_WATERMARKFONTCOLOR:"Set watermark font color",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTCOLOR:"Please enter the RGB color value",BUILDIN_WATERMARK_WATERMARKIMAGEPATH:"Set watermark image path",BUILDIN_WATERMARK_MESSAGE_WATERMARKIMAGEPATH:"Please enter the watermark image path",BUILDIN_WATERMARK_WATERMARKPOSITION:"Set watermark position",BUILDIN_WATERMARK_MESSAGE_WATERMARKPOSITION:"Please select watermark position",BUILDIN_COMPRESS_QUALITY:"Set image quality",BUILDIN_COMPRESS_MESSAGE_QUALITY:"Please enter an integer between 0-100",BUILDIN_COMPRESS_ISCONVERT:"Whether to perform format conversion",BUILDIN_COMPRESS_MESSAGE_ISCONVERT:"Enable when format conversion is required",BUILDIN_COMPRESS_CONVERTFORMAT:"Set conversion format",BUILDIN_COMPRESS_MESSAGE_CONVERTFORMAT:"Please select conversion format",BUILDIN_COMPRESS_ISRESIZE:"Whether to resize the image",BUILDIN_COMPRESS_MESSAGE_ISRESIZE:"Enable when image resizing is required",BUILDIN_COMPRESS_RESIZEWIDTH:"Set resizing width",BUILDIN_COMPRESS_MESSAGE_RESIZEWIDTH:"Please enter a number",BUILDIN_COMPRESS_RESIZEHEIGHT:"Set resizing height",BUILDIN_COMPRESS_MESSAGE_RESIZEHEIGHT:"Please enter a number",BUILDIN_COMPRESS_ISRESIZEBYPERCENT:"Whether to resize the image by percentage",BUILDIN_COMPRESS_MESSAGE_ISRESIZEBYPERCENT:"Enable when resizing by percentage is required",BUILDIN_COMPRESS_ISFLIP:"Whether to flip the image vertically",BUILDIN_COMPRESS_ISFLOP:"Whether to flip the image horizontally",BUILDIN_COMPRESS_RESIZEPERCENT:"Set resizing percentage",BUILDIN_COMPRESS_MESSAGE_RESIZEPERCENT:"Please enter a number",BUILDIN_COMPRESS_SKIPRESIZEOFSMALLIMG:"Whether to skip resizing of small images",BUILDIN_COMPRESS_ISROTATE:"Whether to rotate the image",BUILDIN_COMPRESS_MESSAGE_ISROTATE:"Enable when image rotation is required",BUILDIN_COMPRESS_ROTATEDEGREE:"Set rotation angle",BUILDIN_COMPRESS_MESSAGE_ROTATEDEGREE:"Please enter a number, can be negative",BUILDIN_COMPRESS_ISREMOVEEXIF:"Whether to remove EXIF information",BUILDIN_COMPRESS_MESSAGE_ISREMOVEEXIF:"Enable when removing EXIF information is required",PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS:"Plugin installed successfully",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED:"Plugin installation failed",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_REASON:"Plugin installation failed, error code is ${code}, error log is \n ${data}",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_PATH:"Plugin installation failed, please enter a valid plugin name or valid installation path",PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS:"Plugin uninstalled successfully",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED:"Plugin uninstall failed",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_REASON:"Plugin uninstall failed, error code is ${code}, error log is \n ${data}",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID:"Plugin uninstall failed, please enter a valid plugin name",PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS:"Plugin updated successfully",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED:"Plugin update failed",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_REASON:"Plugin update failed, error code is ${code}, error log is \n ${data}",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_VALID:"Plugin update failed, please enter a valid plugin name"}};class $r{constructor(e){this.ctx=e,this.objectAdapter=new oe(Hr);let t=this.ctx.getConfig("settings.language")||"zh-CN";Hr[t]||(t="zh-CN"),this.i18n=new le({adapter:this.objectAdapter,defaultLanguage:t}),this.loadOutterI18n()}loadOutterI18n(){const e=this.getOutterI18nFolder();t.readdirSync(e,{withFileTypes:!0}).forEach((r=>{if(r.isFile()&&r.name.endsWith(".yml")){const n=T.join(e,r.name),a=t.readFileSync(n,"utf8");try{const e=Ee.load(a);Hr[r.name.replace(/\.yml$/,"")]=e}catch(e){console.error(e)}}}))}getOutterI18nFolder(){const e=T.join(this.ctx.baseDir,"i18n-cli");return I(e)||a(e),e}translate(e,t){return this.i18n.translate(e,t)||e}setLanguage(e){this.i18n.setLanguage(e),this.ctx.saveConfig({"settings.language":e})}addLocale(e,t){const r=this.objectAdapter.getLocale(e);if(!r)return!1;const n=u(r,t);return this.objectAdapter.setLocale(e,n),!0}addLanguage(e,t){return!this.objectAdapter.getLocale(e)&&(this.objectAdapter.setLocale(e,t),Hr[e]=t,!0)}getLanguageList(){return Object.keys(Hr)}}class vr extends e{get pluginLoader(){return this._pluginLoader}constructor(e=""){super(),this.VERSION="1.8.12",this.configPath=e,this.input=[],this.rawInput=[],this.output=[],this.helper={transformer:new Pt("transformer"),uploader:new Pt("uploader"),beforeTransformPlugins:new Pt("beforeTransformPlugins"),beforeUploadPlugins:new Pt("beforeUploadPlugins"),afterUploadPlugins:new Pt("afterUploadPlugins")},this.initConfigPath(),this.log=new gt(this),this.cmd=new pt(this),this.pluginHandler=new dt(this),this.initConfig(),this.init()}initConfigPath(){if(this.configPath=this.configPath||T.join(A(),".piclist/config.json"),".JSON"!==T.extname(this.configPath).toUpperCase())throw this.configPath="",Error("The configuration file only supports JSON format.");this.baseDir=T.dirname(this.configPath),I(this.configPath)||S(`${this.configPath}`)}initConfig(){this.db=new Fr(this),this._config=this.db.read(!0)}init(){try{this.i18n=new $r(this),this.Request=new Ut(this),this._pluginLoader=new mt(this),ct("picgo"),yr().register(this),{register(e){e.helper.transformer.register("path",br),e.helper.transformer.register("base64",xr)}}.register(this),ct(""),this._pluginLoader.load(),this.lifecycle=new Rt(this)}catch(e){throw this.emit(At.UPLOAD_PROGRESS,-1),this.log.error(e),e}}use(e,t){if(t)return this.pluginLoader.registerPlugin(t,e),this.pluginLoader.getPlugin(t);return e(this)}registerCommands(){""!==this.configPath&&(this.cmd.init(),this.cmd.loadCommands())}getConfig(e){return e?P(this._config,e):(this._config=this.db.read(!0),this._config)}saveConfig(e){Me(e)?(this.setConfig(e),this.db.saveConfig(e)):this.log.warn("the format of config is invalid, please provide object")}removeConfig(e,t){e&&t&&(Oe(e)?this.log.warn(`the config.${e} can't be removed`):(this.unsetConfig(e,t),this.db.unset(e,t)))}setConfig(e){Me(e)?Object.keys(e).forEach((t=>{Oe(t)&&(this.log.warn(`the config.${t} can't be modified`),delete e[t]),c(this._config,t,e[t]),Lt.emit(Tt.CONFIG_CHANGE,{configName:t,value:e[t]})})):this.log.warn("the format of config is invalid, please provide object")}unsetConfig(e,t){e&&t&&(Oe(e)?this.log.warn(`the config.${e} can't be unset`):p(this.getConfig(e),t))}get request(){return this.Request.request.bind(this.Request)}async upload(e){if(""===this.configPath)return this.log.error("No config file found, please check your config file path"),[];if(void 0!==e&&0!==e.length){const{output:t}=await this.lifecycle.start(e);return t}try{const{imgPath:e,shouldKeepAfterUploading:t}=await Kr(this),r=()=>{t||l(e).catch((e=>{this.log.error(e)}))};if("no image"===e)throw new Error("image not found in clipboard");{this.once(At.FAILED,r),this.once(At.FINISHED,r);const{output:t}=await this.lifecycle.start([e]);return t}}catch(e){throw this.emit(At.FAILED,e),e}}}export{pt as Commander,Rt as Lifecycle,Pt as LifecyclePlugins,gt as Logger,vr as PicGo,Xe as PicGoUtils,dt as PluginHandler,mt as PluginLoader,Ut as Request};
|
|
2
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZXNtLmpzIiwic291cmNlcyI6WyIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvcGx1Z2luSGFuZGxlci50cyIsIi4uL3NyYy9wbHVnaW5zL2NvbW1hbmRlci9jb25maWcudHMiLCIuLi9zcmMvdXRpbHMvY29tbW9uLnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL3VwbG9hZC50cyIsIi4uL3NyYy9wbHVnaW5zL2JlZm9yZXRyYW5zZm9ybWVyL2NvbXByZXNzLnRzIiwiLi4vc3JjL3BsdWdpbnMvYmVmb3JldHJhbnNmb3JtZXIvd2F0ZXJtYXJrLnRzIiwiLi4vc3JjL3BsdWdpbnMvYmVmb3JldXBsb2FkL2J1aWxkSW5SZW5hbWUudHMiLCIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvc2V0dGluZy50cyIsIi4uL3NyYy9wbHVnaW5zL2NvbW1hbmRlci91c2UudHMiLCIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvcHJveHkudHMiLCIuLi9zcmMvdXRpbHMvaW5pdFV0aWxzLnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL2luaXQudHMiLCIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvaTE4bi50cyIsIi4uL3NyYy9saWIvTGlmZWN5Y2xlUGx1Z2lucy50cyIsIi4uL3NyYy9saWIvQ29tbWFuZGVyLnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL2luZGV4LnRzIiwiLi4vc3JjL3V0aWxzL2VudW0udHMiLCIuLi9zcmMvbGliL0xvZ2dlci50cyIsIi4uL3NyYy9saWIvUGx1Z2luSGFuZGxlci50cyIsIi4uL3NyYy9saWIvUGx1Z2luTG9hZGVyLnRzIiwiLi4vc3JjL3V0aWxzL2V2ZW50QnVzLnRzIiwiLi4vc3JjL2xpYi9SZXF1ZXN0LnRzIiwiLi4vc3JjL2NvcmUvTGlmZWN5Y2xlLnRzIiwiLi4vc3JjL3V0aWxzL2NyZWF0ZUNvbnRleHQudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci9zbW1zLnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvdXRpbHMudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci90Y3l1bi50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL2dpdGh1Yi50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3Fpbml1LnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvaW1ndXIudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci9hbGl5dW4udHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci91cHl1bi50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3dlYmRhdi50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL2xvY2FsLnRzIiwiLi4vc3JjL3V0aWxzL3NzaENsaWVudC50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3NmdHAudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci90ZWxlZ3JhcGgudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci9waWNsaXN0LnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvbHNreS50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3MzL3V0aWxzLnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvczMvdXBsb2FkZXIudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci9hd3NzM3BsaXN0LnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvaW5kZXgudHMiLCIuLi9zcmMvcGx1Z2lucy90cmFuc2Zvcm1lci9wYXRoLnRzIiwiLi4vc3JjL3BsdWdpbnMvdHJhbnNmb3JtZXIvYmFzZTY0LnRzIiwiLi4vc3JjL3V0aWxzL3N0YXRpYy50cyIsIi4uL3NyYy91dGlscy9nZXRDbGlwYm9hcmRJbWFnZS50cyIsIi4uL3NyYy91dGlscy9kYi50cyIsIi4uL3NyYy9pMThuL3poLUNOLnRzIiwiLi4vc3JjL2kxOG4vaW5kZXgudHMiLCIuLi9zcmMvaTE4bi96aC1UVy50cyIsIi4uL3NyYy9pMThuL2VuLnRzIiwiLi4vc3JjL2NvcmUvUGljR28udHMiLCIuLi9zcmMvcGx1Z2lucy90cmFuc2Zvcm1lci9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJUGljR28sIElQbHVnaW4gfSBmcm9tICcuLi8uLi90eXBlcydcblxudHlwZSBhY3Rpb25GdW5jID0gKHBsdWdpbnM6IHN0cmluZ1tdLCBwcm9ncmFtOiBhbnkpID0+IHZvaWRcblxuY29uc3QgY3JlYXRlQ29tbWFuZCA9IChcbiAgY21kOiBhbnksXG4gIGNvbW1hbmQ6IHN0cmluZyxcbiAgZGVzY3JpcHRpb246IHN0cmluZyxcbiAgYWxpYXM6IHN0cmluZyxcbiAgYWN0aW9uOiBhY3Rpb25GdW5jLFxuICBvcHRpb25zPzogeyBwcm94eTogYm9vbGVhbjsgcmVnaXN0cnk6IGJvb2xlYW4gfVxuKTogdm9pZCA9PiB7XG4gIGxldCBwcm9ncmFtID0gY21kLnByb2dyYW0uY29tbWFuZChjb21tYW5kKS5kZXNjcmlwdGlvbihkZXNjcmlwdGlvbikuYWxpYXMoYWxpYXMpXG4gIGlmIChvcHRpb25zPy5wcm94eSkge1xuICAgIHByb2dyYW0gPSBwcm9ncmFtLm9wdGlvbignLXAsIC0tcHJveHkgPHByb3h5PicsICdBZGQgcHJveHkgZm9yIGluc3RhbGxpbmcgcGx1Z2lucycpXG4gIH1cbiAgaWYgKG9wdGlvbnM/LnJlZ2lzdHJ5KSB7XG4gICAgcHJvZ3JhbSA9IHByb2dyYW0ub3B0aW9uKCctciwgLS1yZWdpc3RyeSA8cmVnaXN0cnk+JywgJ0Nob29zZSBhIHJlZ2lzdHJ5IGZvciBpbnN0YWxsaW5nIHBsdWdpbnMnKVxuICB9XG4gIHByb2dyYW0uYWN0aW9uKGFjdGlvbilcbn1cblxuY29uc3QgcGx1Z2luSGFuZGxlcjogSVBsdWdpbiA9IHtcbiAgaGFuZGxlOiAoY3R4OiBJUGljR28pID0+IHtcbiAgICBjb25zdCBjbWQgPSBjdHguY21kXG4gICAgY3JlYXRlQ29tbWFuZChcbiAgICAgIGNtZCxcbiAgICAgICdpbnN0YWxsIDxwbHVnaW5zLi4uPicsXG4gICAgICAnaW5zdGFsbCBwaWNnbyBwbHVnaW4nLFxuICAgICAgJ2FkZCcsXG4gICAgICAocGx1Z2luczogc3RyaW5nW10sIHByb2dyYW06IGFueSkgPT4ge1xuICAgICAgICBjb25zdCB7IHByb3h5LCByZWdpc3RyeSB9ID0gcHJvZ3JhbVxuICAgICAgICBjb25zdCBvcHRpb25zID0geyBwcm94eSwgcmVnaXN0cnkgfVxuICAgICAgICBjdHgucGx1Z2luSGFuZGxlci5pbnN0YWxsKHBsdWdpbnMsIG9wdGlvbnMpLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIGN0eC5sb2cuZXJyb3IoZSlcbiAgICAgICAgfSlcbiAgICAgIH0sXG4gICAgICB7IHByb3h5OiB0cnVlLCByZWdpc3RyeTogdHJ1ZSB9XG4gICAgKVxuICAgIGNyZWF0ZUNvbW1hbmQoY21kLCAndW5pbnN0YWxsIDxwbHVnaW5zLi4uPicsICd1bmluc3RhbGwgcGljZ28gcGx1Z2luJywgJ3JtJywgKHBsdWdpbnM6IHN0cmluZ1tdKSA9PiB7XG4gICAgICBjdHgucGx1Z2luSGFuZGxlci51bmluc3RhbGwocGx1Z2lucykuY2F0Y2goZSA9PiB7XG4gICAgICAgIGN0eC5sb2cuZXJyb3IoZSlcbiAgICAgIH0pXG4gICAgfSlcbiAgICBjcmVhdGVDb21tYW5kKFxuICAgICAgY21kLFxuICAgICAgJ3VwZGF0ZSA8cGx1Z2lucy4uLj4nLFxuICAgICAgJ3VwZGF0ZSBwaWNnbyBwbHVnaW4nLFxuICAgICAgJ3VwJyxcbiAgICAgIChwbHVnaW5zOiBzdHJpbmdbXSwgcHJvZ3JhbTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcHJveHksIHJlZ2lzdHJ5IH0gPSBwcm9ncmFtXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7IHByb3h5LCByZWdpc3RyeSB9XG4gICAgICAgIGN0eC5wbHVnaW5IYW5kbGVyLnVwZGF0ZShwbHVnaW5zLCBvcHRpb25zKS5jYXRjaCgoZTogRXJyb3IpID0+IHtcbiAgICAgICAgICBjdHgubG9nLmVycm9yKGUpXG4gICAgICAgIH0pXG4gICAgICB9LFxuICAgICAgeyBwcm94eTogdHJ1ZSwgcmVnaXN0cnk6IHRydWUgfVxuICAgIClcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBwbHVnaW5IYW5kbGVyXG4iLCJpbXBvcnQgeyBJUGljR28sIElQbHVnaW4gfSBmcm9tICcuLi8uLi90eXBlcydcblxuY29uc3QgY29uZmlnOiBJUGx1Z2luID0ge1xuICBoYW5kbGU6IChjdHg6IElQaWNHbykgPT4ge1xuICAgIGNvbnN0IGNtZCA9IGN0eC5jbWRcbiAgICBjbWQucHJvZ3JhbS5vcHRpb24oJy1jLCAtLWNvbmZpZyA8cGF0aD4nLCAnc2V0IGNvbmZpZyBwYXRoJylcbiAgICAvLyB3aWxsIGhhbmRsZSBpbiBgYmluL3BpY2dvYFxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvbmZpZ1xuIiwiaW1wb3J0IGZzLCB7IHJlYWRGaWxlLCByZWFkSlNPTlN5bmMgfSBmcm9tICdmcy1leHRyYSdcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5pbXBvcnQgeyBpbWFnZVNpemUgfSBmcm9tICdpbWFnZS1zaXplJ1xuaW1wb3J0IHsgVVJMIH0gZnJvbSAndXJsJ1xuaW1wb3J0IFRleHRUb1NWRyBmcm9tICd0ZXh0LXRvLXN2ZydcbmltcG9ydCBzaGFycCBmcm9tICdzaGFycCdcbmltcG9ydCBjcnlwdG8gZnJvbSAnY3J5cHRvJ1xuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSAndXVpZCdcblxuaW1wb3J0IHtcbiAgSUltZ1NpemUsXG4gIElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvLFxuICBJUGx1Z2luTmFtZVR5cGUsXG4gIElMb2dnZXIsXG4gIElQaWNHbyxcbiAgSUJ1aWxkSW5Db21wcmVzc09wdGlvbnMsXG4gIElCdWlsZEluV2F0ZXJNYXJrT3B0aW9uc1xufSBmcm9tICcuLi90eXBlcydcblxuZXhwb3J0IGZ1bmN0aW9uIHJhbmRvbVN0cmluZ0dlbmVyYXRvcihsZW5ndGg6IG51bWJlcik6IHN0cmluZyB7XG4gIGNvbnN0IGNoYXJzID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5J1xuICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aCB9KVxuICAgIC5tYXAoKCkgPT4gY2hhcnMuY2hhckF0KE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGNoYXJzLmxlbmd0aCkpKVxuICAgIC5qb2luKCcnKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVuYW1lRmlsZU5hbWVXaXRoVGltZXN0YW1wKG9sZE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgJHtNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKX0ke3JhbmRvbVN0cmluZ0dlbmVyYXRvcig1KX0ke3BhdGguZXh0bmFtZShvbGROYW1lKX1gXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW5hbWVGaWxlTmFtZVdpdGhSYW5kb21TdHJpbmcob2xkTmFtZTogc3RyaW5nLCBsZW5ndGg6IG51bWJlciA9IDUpOiBzdHJpbmcge1xuICByZXR1cm4gYCR7cmFuZG9tU3RyaW5nR2VuZXJhdG9yKGxlbmd0aCl9JHtwYXRoLmV4dG5hbWUob2xkTmFtZSl9YFxufVxuXG5mdW5jdGlvbiBmb3JtYXRIZWxwZXIobnVtOiBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gbnVtLnRvU3RyaW5nKCkubGVuZ3RoID09PSAxID8gYDAke251bX1gIDogbnVtLnRvU3RyaW5nKClcbn1cblxuZnVuY3Rpb24gZ2V0TWQ1KGlucHV0OiBjcnlwdG8uQmluYXJ5TGlrZSk6IHN0cmluZyB7XG4gIHJldHVybiBjcnlwdG8uY3JlYXRlSGFzaCgnbWQ1JykudXBkYXRlKGlucHV0KS5kaWdlc3QoJ2hleCcpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW5hbWVGaWxlTmFtZVdpdGhDdXN0b21TdHJpbmcoXG4gIG9sZE5hbWU6IHN0cmluZyxcbiAgY3VzdG9tRm9ybWF0OiBzdHJpbmcsXG4gIGFmZml4RmlsZU5hbWU/OiBzdHJpbmcsXG4gIGZpbGVCdWZmZXI/OiBjcnlwdG8uQmluYXJ5TGlrZVxuKTogc3RyaW5nIHtcbiAgY29uc3Qgbm93ID0gbmV3IERhdGUoKVxuICBjb25zdCB5ZWFyID0gbm93LmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKVxuICBjb25zdCBmaWxlYmFzZW5hbWUgPSBwYXRoLmJhc2VuYW1lKG9sZE5hbWUsIHBhdGguZXh0bmFtZShvbGROYW1lKSlcbiAgY29uc3QgY29udmVyc2lvbk1hcDogUmVjb3JkPHN0cmluZywgKCkgPT4gc3RyaW5nPiA9IHtcbiAgICAne1l9JzogKCkgPT4geWVhcixcbiAgICAne3l9JzogKCkgPT4geWVhci5zbGljZSgyKSxcbiAgICAne219JzogKCkgPT4gZm9ybWF0SGVscGVyKG5vdy5nZXRNb250aCgpICsgMSksXG4gICAgJ3tkfSc6ICgpID0+IGZvcm1hdEhlbHBlcihub3cuZ2V0RGF0ZSgpKSxcbiAgICAne2h9JzogKCkgPT4gZm9ybWF0SGVscGVyKG5vdy5nZXRIb3VycygpKSxcbiAgICAne2l9JzogKCkgPT4gZm9ybWF0SGVscGVyKG5vdy5nZXRNaW51dGVzKCkpLFxuICAgICd7c30nOiAoKSA9PiBmb3JtYXRIZWxwZXIobm93LmdldFNlY29uZHMoKSksXG4gICAgJ3ttc30nOiAoKSA9PiBub3cuZ2V0TWlsbGlzZWNvbmRzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgzLCAnMCcpLFxuICAgICd7bWQ1fSc6ICgpID0+IGdldE1kNShmaWxlQnVmZmVyIHx8IGZpbGViYXNlbmFtZSksXG4gICAgJ3ttZDUtMTZ9JzogKCkgPT4gZ2V0TWQ1KGZpbGVCdWZmZXIgfHwgZmlsZWJhc2VuYW1lKS5zbGljZSgwLCAxNiksXG4gICAgJ3tmaWxlbmFtZX0nOiAoKSA9PiAoYWZmaXhGaWxlTmFtZSA/IHBhdGguYmFzZW5hbWUoYWZmaXhGaWxlTmFtZSwgcGF0aC5leHRuYW1lKGFmZml4RmlsZU5hbWUpKSA6IGZpbGViYXNlbmFtZSksXG4gICAgJ3t1dWlkfSc6ICgpID0+IHV1aWR2NCgpLnJlcGxhY2UoLy0vZywgJycpLFxuICAgICd7dGltZXN0YW1wfSc6ICgpID0+IG5vdy5nZXRUaW1lKCkudG9TdHJpbmcoKVxuICB9XG4gIGlmIChcbiAgICBjdXN0b21Gb3JtYXQgPT09IHVuZGVmaW5lZCB8fFxuICAgICghT2JqZWN0LmtleXMoY29udmVyc2lvbk1hcCkuc29tZShpdGVtID0+IGN1c3RvbUZvcm1hdC5pbmNsdWRlcyhpdGVtKSkgJiZcbiAgICAgICFjdXN0b21Gb3JtYXQuaW5jbHVkZXMoJ2xvY2FsRm9sZGVyOicpICYmXG4gICAgICAhY3VzdG9tRm9ybWF0LmluY2x1ZGVzKCdzdHItJykpXG4gICkge1xuICAgIHJldHVybiBvbGROYW1lXG4gIH1cbiAgY29uc3QgZXh0ID0gcGF0aC5leHRuYW1lKG9sZE5hbWUpXG4gIGxldCBuZXdOYW1lID1cbiAgICBPYmplY3Qua2V5cyhjb252ZXJzaW9uTWFwKS5yZWR1Y2UoKGFjYywgY3VyKSA9PiB7XG4gICAgICByZXR1cm4gYWNjLnJlcGxhY2UobmV3IFJlZ0V4cChjdXIsICdnJyksIGNvbnZlcnNpb25NYXBbY3VyXSgpKVxuICAgIH0sIGN1c3RvbUZvcm1hdCkgKyBleHRcbiAgY29uc3Qgc3RyUmVnZXggPSAve3N0ci0oXFxkKyl9L2dpXG4gIG5ld05hbWUgPSBuZXdOYW1lLnJlcGxhY2Uoc3RyUmVnZXgsIChfLCBncm91cDEpID0+IHtcbiAgICBjb25zdCBsZW5ndGggPSBwYXJzZUludChncm91cDEsIDEwKVxuICAgIHJldHVybiByYW5kb21TdHJpbmdHZW5lcmF0b3IobGVuZ3RoKVxuICB9KVxuICBuZXdOYW1lID0gbmV3TmFtZS5yZXBsYWNlKC97KGxvY2FsRm9sZGVyOj8oXFxkKyk/KX0vZ2ksIChfcmVzdWx0LCBrZXksIGNvdW50KSA9PiB7XG4gICAgY291bnQgPSBNYXRoLm1heCgxLCBjb3VudCB8fCAwKVxuICAgIGNvbnN0IHBhdGhzID0gcGF0aC5kaXJuYW1lKG9sZE5hbWUpLnNwbGl0KHBhdGguc2VwKVxuICAgIGtleSA9IHBhdGhzLnNsaWNlKDAgLSBjb3VudCkucmVkdWNlKChhLCBiKSA9PiBgJHthfS8ke2J9YClcbiAgICByZXR1cm4ga2V5LnJlcGxhY2UoLzovZywgJycpXG4gIH0pXG4gIHJldHVybiBuZXdOYW1lXG59XG5cbmV4cG9ydCBjb25zdCBpc1VybCA9ICh1cmw6IHN0cmluZyk6IGJvb2xlYW4gPT4gL15odHRwcz86XFwvXFwvLy50ZXN0KHVybClcblxuZXhwb3J0IGNvbnN0IGlzVXJsRW5jb2RlID0gKHVybDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gIHVybCA9IHVybCB8fCAnJ1xuICB0cnkge1xuICAgIC8vIHRoZSB3aG9sZSB1cmwgZW5jb2RlIG9yIGRlY29kZSBzaG9sZCBub3QgdXNlIGVuY29kZVVSSUNvbXBvbmVudCBvciBkZWNvZGVVUklDb21wb25lbnRcbiAgICByZXR1cm4gdXJsICE9PSBkZWNvZGVVUkkodXJsKVxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cbmV4cG9ydCBjb25zdCBoYW5kbGVVcmxFbmNvZGUgPSAodXJsOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBpZiAoIWlzVXJsRW5jb2RlKHVybCkpIHtcbiAgICB1cmwgPSBlbmNvZGVVUkkodXJsKVxuICB9XG4gIHJldHVybiB1cmxcbn1cblxuZXhwb3J0IGNvbnN0IGdldEltYWdlU2l6ZSA9IChmaWxlOiBCdWZmZXIpOiBJSW1nU2l6ZSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgeyB3aWR0aCA9IDAsIGhlaWdodCA9IDAsIHR5cGUgfSA9IGltYWdlU2l6ZShmaWxlKVxuICAgIGNvbnN0IGV4dG5hbWUgPSB0eXBlID8gYC4ke3R5cGV9YCA6ICcucG5nJ1xuICAgIHJldHVybiB7XG4gICAgICByZWFsOiB0cnVlLFxuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHQsXG4gICAgICBleHRuYW1lXG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gZmFsbGJhY2sgdG8gMjAwICogMjAwXG4gICAgcmV0dXJuIHtcbiAgICAgIHJlYWw6IGZhbHNlLFxuICAgICAgd2lkdGg6IDIwMCxcbiAgICAgIGhlaWdodDogMjAwLFxuICAgICAgZXh0bmFtZTogJy5wbmcnXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjb25zdCBnZXRGU0ZpbGUgPSBhc3luYyAoZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8SVBhdGhUcmFuc2Zvcm1lZEltZ0luZm8+ID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4ge1xuICAgICAgZXh0bmFtZTogcGF0aC5leHRuYW1lKGZpbGVQYXRoKSxcbiAgICAgIGZpbGVOYW1lOiBwYXRoLmJhc2VuYW1lKGZpbGVQYXRoKSxcbiAgICAgIGJ1ZmZlcjogYXdhaXQgcmVhZEZpbGUoZmlsZVBhdGgpLFxuICAgICAgc3VjY2VzczogdHJ1ZVxuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlYXNvbjogYHJlYWQgZmlsZSAke2ZpbGVQYXRofSBlcnJvcmAsXG4gICAgICBzdWNjZXNzOiBmYWxzZVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZ2V0VVJMRmlsZSA9IGFzeW5jICh1cmw6IHN0cmluZywgY3R4OiBJUGljR28pOiBQcm9taXNlPElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvPiA9PiB7XG4gIHVybCA9IGhhbmRsZVVybEVuY29kZSh1cmwpXG4gIGxldCB0aW1lb3V0SWQ6IE5vZGVKUy5UaW1lb3V0XG4gIGNvbnN0IHJlcXVlc3RGbiA9IG5ldyBQcm9taXNlPElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgOyhhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBjdHhcbiAgICAgICAgICAucmVxdWVzdCh7XG4gICAgICAgICAgICBtZXRob2Q6ICdnZXQnLFxuICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgcmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2U6IHRydWUsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcidcbiAgICAgICAgICB9KVxuICAgICAgICAgIC50aGVuKHJlc3AgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3AuZGF0YSBhcyBCdWZmZXJcbiAgICAgICAgICB9KVxuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKVxuICAgICAgICBjb25zdCB1cmxQYXRoID0gbmV3IFVSTCh1cmwpLnBhdGhuYW1lXG4gICAgICAgIGxldCBleHRuYW1lID0gJydcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB1cmxQYXJhbXMgPSBuZXcgVVJMKHVybCkuc2VhcmNoUGFyYW1zXG4gICAgICAgICAgZXh0bmFtZSA9IHVybFBhcmFtcy5nZXQoJ3d4X2ZtdCcpIHx8IHBhdGguZXh0bmFtZSh1cmxQYXRoKSB8fCAnJ1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGV4dG5hbWUgPSBwYXRoLmV4dG5hbWUodXJsUGF0aCkgfHwgJydcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWV4dG5hbWUuc3RhcnRzV2l0aCgnLicpICYmIGV4dG5hbWUpIHtcbiAgICAgICAgICBleHRuYW1lID0gYC4ke2V4dG5hbWV9YFxuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgIGJ1ZmZlcjogcmVzLFxuICAgICAgICAgIGZpbGVOYW1lOiBwYXRoLmJhc2VuYW1lKHVybFBhdGgpLFxuICAgICAgICAgIGV4dG5hbWUsXG4gICAgICAgICAgc3VjY2VzczogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKVxuICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgICAgICAgcmVhc29uOiBgcmVxdWVzdCAke3VybH0gZXJyb3IsICR7ZXJyb3I/Lm1lc3NhZ2UgPz8gJyd9YFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0pKCkuY2F0Y2gocmVqZWN0KVxuICB9KVxuICBjb25zdCB0aW1lb3V0UHJvbWlzZSA9IG5ldyBQcm9taXNlPElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvPigocmVzb2x2ZSk6IHZvaWQgPT4ge1xuICAgIHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgcmVzb2x2ZSh7XG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICByZWFzb246IGByZXF1ZXN0ICR7dXJsfSB0aW1lb3V0YFxuICAgICAgfSlcbiAgICB9LCAzMDAwMClcbiAgfSlcbiAgcmV0dXJuIFByb21pc2UucmFjZShbcmVxdWVzdEZuLCB0aW1lb3V0UHJvbWlzZV0pXG59XG5cbi8qKlxuICogZGV0ZWN0IHRoZSBpbnB1dCBzdHJpbmcncyB0eXBlXG4gKiBmb3IgZXhhbXBsZVxuICogMS4gQHh4eC9waWNnby1wbHVnaW4teHh4IC0+IHNjb3BlXG4gKiAyLiBwaWNnby1wbHVnaW4teHh4IC0+IG5vcm1hbFxuICogMy4geHh4IC0+IHNpbXBsZVxuICogNC4gbm90IGV4aXN0cyBvciBpcyBhIHBhdGggLT4gdW5rbm93blxuICogQHBhcmFtIG5hbWVcbiAqL1xuZXhwb3J0IGNvbnN0IGdldFBsdWdpbk5hbWVUeXBlID0gKG5hbWU6IHN0cmluZyk6IElQbHVnaW5OYW1lVHlwZSA9PiB7XG4gIGlmICgvXkBbXi9dK1xcL3BpY2dvLXBsdWdpbi0vLnRlc3QobmFtZSkpIHtcbiAgICByZXR1cm4gJ3Njb3BlJ1xuICB9IGVsc2UgaWYgKG5hbWUuc3RhcnRzV2l0aCgncGljZ28tcGx1Z2luLScpKSB7XG4gICAgcmV0dXJuICdub3JtYWwnXG4gIH0gZWxzZSBpZiAoaXNTaW1wbGVOYW1lKG5hbWUpKSB7XG4gICAgcmV0dXJuICdzaW1wbGUnXG4gIH1cbiAgcmV0dXJuICd1bmtub3duJ1xufVxuXG4vKipcbiAqIGRldGVjdCB0aGUgaW5wdXQgc3RyaW5nIGlzIGEgc2ltcGxlIHBsdWdpbiBuYW1lIG9yIG5vdFxuICogZm9yIGV4YW1wbGVcbiAqIDEuIHh4eCAtPiB0cnVlXG4gKiAyLiAvVXNyL3h4L3h4eHgvcGljZ28tcGx1Z2luLXh4eCAtPiBmYWxzZVxuICogQHBhcmFtIG5hbWUgcGx1Z2luTmFtZU9yUGF0aFxuICovXG5leHBvcnQgY29uc3QgaXNTaW1wbGVOYW1lID0gKG5hbWVPclBhdGg6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICBpZiAocGF0aC5pc0Fic29sdXRlKG5hbWVPclBhdGgpKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgY29uc3QgcGx1Z2luUGF0aCA9IHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBuYW1lT3JQYXRoKVxuICBpZiAoZnMuZXhpc3RzU3luYyhwbHVnaW5QYXRoKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGlmIChuYW1lT3JQYXRoLmluY2x1ZGVzKCcvJykgfHwgbmFtZU9yUGF0aC5pbmNsdWRlcygnXFxcXCcpKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuLyoqXG4gKiBzdHJlYW1saW5lIHRoZSBmdWxsIHBsdWdpbiBuYW1lIHRvIGEgc2ltcGxlIG9uZVxuICogZm9yIGV4YW1wbGU6XG4gKiAxLiBwaWNnby1wbHVnaW4teHh4IC0+IHh4eFxuICogMi4gQHh4eC9waWNnby1wbHVnaW4teXl5IC0+IHl5eVxuICogQHBhcmFtIG5hbWUgcGx1Z2luRnVsbE5hbWVcbiAqL1xuZXhwb3J0IGNvbnN0IGhhbmRsZVN0cmVhbWxpbmVQbHVnaW5OYW1lID0gKG5hbWU6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGlmICgvXkBbXi9dK1xcL3BpY2dvLXBsdWdpbi0vLnRlc3QobmFtZSkpIHtcbiAgICByZXR1cm4gbmFtZS5yZXBsYWNlKC9eQFteL10rXFwvcGljZ28tcGx1Z2luLS8sICcnKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBuYW1lLnJlcGxhY2UoL3BpY2dvLXBsdWdpbi0vLCAnJylcbiAgfVxufVxuXG4vKipcbiAqIGNvbXBsZXRlIHBsdWdpbiBuYW1lIHRvIGZ1bGwgbmFtZVxuICogZm9yIGV4YW1wbGU6XG4gKiAxLiB4eHggLT4gcGljZ28tcGx1Z2luLXh4eFxuICogMi4gcGljZ28tcGx1Z2luLXh4eCAtPiBwaWNnby1wbHVnaW4teHh4XG4gKiBAcGFyYW0gbmFtZSBwbHVnaW5TaW1wbGVOYW1lXG4gKiBAcGFyYW0gc2NvcGUgcGx1Z2luU2NvcGVcbiAqL1xuZXhwb3J0IGNvbnN0IGhhbmRsZUNvbXBsZXRlUGx1Z2luTmFtZSA9IChuYW1lOiBzdHJpbmcsIHNjb3BlID0gJycpOiBzdHJpbmcgPT5cbiAgc2NvcGUgPyBgQCR7c2NvcGV9L3BpY2dvLXBsdWdpbi0ke25hbWV9YCA6IGBwaWNnby1wbHVnaW4tJHtuYW1lfWBcblxuLyoqXG4gKiBoYW5kbGUgaW5zdGFsbC91bmluc3RhbGwvdXBkYXRlIHBsdWdpbiBuYW1lIG9yIHBhdGhcbiAqIGZvciBleGFtcGxlXG4gKiAxLiBwaWNnby1wbHVnaW4teHh4IC0+IHBpY2dvLXBsdWdpbi14eHhcbiAqIDIuIEB4eHgvcGljZ28tcGx1Z2luLXh4eCAtPiBAeHh4L3BpY2dvLXBsdWdpbi14eHhcbiAqIDMuIHh4eCAtPiBwaWNnby1wbHVnaW4teHh4XG4gKiA0LiAuL3h4eHgvcGljZ28tcGx1Z2luLXh4eCAtPiAvYWJzb2x1dGVQYXRoLy4uLi94eHh4L3BpY2dvLXBsdWdpbi14eHhcbiAqIDUuIC9hYnNvbHV0ZVBhdGgvLi4uL3BpY2dvLXBsdWdpbi14eHggLT4gL2Fic29sdXRlUGF0aC8uLi4vcGljZ28tcGx1Z2luLXh4eFxuICogQHBhcmFtIG5hbWVPclBhdGggcGx1Z2luTmFtZSBvciBwbHVnaW5QYXRoXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRQcm9jZXNzUGx1Z2luTmFtZSA9IChuYW1lT3JQYXRoOiBzdHJpbmcsIGxvZ2dlcjogSUxvZ2dlciB8IENvbnNvbGUgPSBjb25zb2xlKTogc3RyaW5nID0+IHtcbiAgY29uc3QgcGx1Z2luTmFtZVR5cGUgPSBnZXRQbHVnaW5OYW1lVHlwZShuYW1lT3JQYXRoKVxuICBzd2l0Y2ggKHBsdWdpbk5hbWVUeXBlKSB7XG4gICAgY2FzZSAnbm9ybWFsJzpcbiAgICBjYXNlICdzY29wZSc6XG4gICAgICByZXR1cm4gbmFtZU9yUGF0aFxuICAgIGNhc2UgJ3NpbXBsZSc6XG4gICAgICByZXR1cm4gaGFuZGxlQ29tcGxldGVQbHVnaW5OYW1lKG5hbWVPclBhdGgpXG4gICAgZGVmYXVsdDoge1xuICAgICAgLy8gbm93LCB0aGUgcGx1Z2luTmFtZVR5cGUgaXMgdW5rbm93IGhlcmVcbiAgICAgIC8vIDEuIGNoZWNrIGlmIGlzIGFuIGFic29sdXRlIHBhdGhcbiAgICAgIGxldCBwbHVnaW5QYXRoID0gbmFtZU9yUGF0aFxuICAgICAgaWYgKHBhdGguaXNBYnNvbHV0ZShuYW1lT3JQYXRoKSAmJiBmcy5leGlzdHNTeW5jKG5hbWVPclBhdGgpKSB7XG4gICAgICAgIHJldHVybiBoYW5kbGVVbml4U3R5bGVQYXRoKHBsdWdpblBhdGgpXG4gICAgICB9XG4gICAgICAvLyAyLiBjaGVjayBpZiBpcyBhIHJlbGF0aXZlIHBhdGhcbiAgICAgIHBsdWdpblBhdGggPSBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgbmFtZU9yUGF0aClcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKHBsdWdpblBhdGgpKSB7XG4gICAgICAgIHJldHVybiBoYW5kbGVVbml4U3R5bGVQYXRoKHBsdWdpblBhdGgpXG4gICAgICB9XG4gICAgICAvLyAzLiBpbnZhbGlkIG5hbWVPclBhdGhcbiAgICAgIGxvZ2dlci53YXJuKGBDYW4ndCBmaW5kIHBsdWdpbiAke25hbWVPclBhdGh9YClcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIGdldCB0aGUgbm9ybWFsIHBsdWdpbiBuYW1lXG4gKiBmb3IgZXhhbXBsZTpcbiAqIDEuIHBpY2dvLXBsdWdpbi14eHggLT4gcGljZ28tcGx1Z2luLXh4eFxuICogMi4gQHh4eC9waWNnby1wbHVnaW4teHh4IC0+IEB4eHgvcGljZ28tcGx1Z2luLXh4eFxuICogMy4gLi94eHh4L3BpY2dvLXBsdWdpbi14eHggLT4gcGljZ28tcGx1Z2luLXh4eFxuICogNC4gL2Fic29sdXRlUGF0aC8uLi4vcGljZ28tcGx1Z2luLXh4eCAtPiBwaWNnby1wbHVnaW4teHh4XG4gKiA1LiBhbiBleGNlcHRpb246IFtwYWNrYWdlLmpzb24ncyBuYW1lXSAhPT0gW2ZvbGRlciBuYW1lXVxuICogdGhlbiB1c2UgW3BhY2thZ2UuanNvbidzIG5hbWVdLCB1c3VhbGx5IG1hdGNoIHRoZSBzY29wZSBwYWNrYWdlLlxuICogNi4gaWYgcGx1Z2luIG5hbWUgaGFzIHZlcnNpb246IHBpY2dvLXBsdWdpbi14eHhAeC54LnggdGhlbiByZW1vdmUgdGhlIHZlcnNpb25cbiAqIEBwYXJhbSBuYW1lT3JQYXRoXG4gKi9cbmV4cG9ydCBjb25zdCBnZXROb3JtYWxQbHVnaW5OYW1lID0gKG5hbWVPclBhdGg6IHN0cmluZywgbG9nZ2VyOiBJTG9nZ2VyIHwgQ29uc29sZSA9IGNvbnNvbGUpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBwbHVnaW5OYW1lVHlwZSA9IGdldFBsdWdpbk5hbWVUeXBlKG5hbWVPclBhdGgpXG4gIHN3aXRjaCAocGx1Z2luTmFtZVR5cGUpIHtcbiAgICBjYXNlICdub3JtYWwnOlxuICAgICAgcmV0dXJuIHJlbW92ZVBsdWdpblZlcnNpb24obmFtZU9yUGF0aClcbiAgICBjYXNlICdzY29wZSc6XG4gICAgICByZXR1cm4gcmVtb3ZlUGx1Z2luVmVyc2lvbihuYW1lT3JQYXRoLCB0cnVlKVxuICAgIGNhc2UgJ3NpbXBsZSc6XG4gICAgICByZXR1cm4gcmVtb3ZlUGx1Z2luVmVyc2lvbihoYW5kbGVDb21wbGV0ZVBsdWdpbk5hbWUobmFtZU9yUGF0aCkpXG4gICAgZGVmYXVsdDoge1xuICAgICAgLy8gbm93LCB0aGUgbmFtZU9yUGF0aCBtdXN0IGJlIHBhdGhcbiAgICAgIC8vIHRoZSBuYW1lT3JQYXRoIGhlcmUgd2lsbCBiZSBlbnN1cmVkIHdpdGggdW5peCBzdHlsZVxuICAgICAgLy8gd2UgbmVlZCB0byBmaW5kIHRoZSBwYWNrYWdlLmpzb24ncyBuYW1lIGNhdXNlIG5wbSB1c2luZyB0aGUgbmFtZSBpbiBwYWNrYWdlLmpzb24ncyBuYW1lIGZpbGVkXG4gICAgICBpZiAoIWZzLmV4aXN0c1N5bmMobmFtZU9yUGF0aCkpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oYENhbid0IGZpbmQgcGx1Z2luOiAke25hbWVPclBhdGh9YClcbiAgICAgICAgcmV0dXJuICcnXG4gICAgICB9XG4gICAgICBjb25zdCBwYWNrYWdlSlNPTlBhdGggPSBwYXRoLnBvc2l4LmpvaW4obmFtZU9yUGF0aCwgJ3BhY2thZ2UuanNvbicpXG4gICAgICBpZiAoIWZzLmV4aXN0c1N5bmMocGFja2FnZUpTT05QYXRoKSkge1xuICAgICAgICBsb2dnZXIud2FybihgQ2FuJ3QgZmluZCBwbHVnaW46ICR7bmFtZU9yUGF0aH1gKVxuICAgICAgICByZXR1cm4gJydcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHBrZyA9IHJlYWRKU09OU3luYyhwYWNrYWdlSlNPTlBhdGgpIHx8IHt9XG4gICAgICAgIGlmICghcGtnLm5hbWU/LmluY2x1ZGVzKCdwaWNnby1wbHVnaW4tJykpIHtcbiAgICAgICAgICBsb2dnZXIud2FybihcbiAgICAgICAgICAgIGBUaGUgcGx1Z2luIHBhY2thZ2UuanNvbidzIG5hbWUgZmlsZWQgaXMgJHsocGtnLm5hbWUgYXMgc3RyaW5nKSB8fCAnZW1wdHknfSwgbmVlZCB0byBpbmNsdWRlIHRoZSBwcmVmaXg6IHBpY2dvLXBsdWdpbi1gXG4gICAgICAgICAgKVxuICAgICAgICAgIHJldHVybiAnJ1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwa2cubmFtZVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIGhhbmRsZSB0cmFuc2Zvcm0gdGhlIHBhdGggdG8gdW5peCBzdHlsZVxuICogZm9yIGV4YW1wbGVcbiAqIDEuIEM6XFxcXHh4eFxcXFx4eHggLT4gQzoveHh4L3h4eFxuICogMi4gL3h4eC94eHggLT4gL3h4eC94eHhcbiAqIEBwYXJhbSBwYXRoXG4gKi9cbmV4cG9ydCBjb25zdCBoYW5kbGVVbml4U3R5bGVQYXRoID0gKHBhdGhTdHI6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHBhdGhBcnIgPSBwYXRoU3RyLnNwbGl0KHBhdGguc2VwKVxuICByZXR1cm4gcGF0aEFyci5qb2luKCcvJylcbn1cblxuLyoqXG4gKiByZW1vdmUgcGx1Z2luIHZlcnNpb24gd2hlbiByZWdpc3RlciBwbHVnaW4gbmFtZVxuICogMS4gcGljZ28tcGx1Z2luLXh4eEAxLjAuMCAtPiBwaWNnby1wbHVnaW4teHh4XG4gKiAyLiBAeHh4L3BpY2dvLXBsdWdpbi14eHhAMS4wLjAgLT4gQHh4eC9waWNnby1wbHVnaW4teHh4XG4gKiBAcGFyYW0gbmFtZU9yUGF0aFxuICogQHBhcmFtIHNjb3BlXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVQbHVnaW5WZXJzaW9uID0gKG5hbWVPclBhdGg6IHN0cmluZywgc2NvcGU6IGJvb2xlYW4gPSBmYWxzZSk6IHN0cmluZyA9PiB7XG4gIGlmICghbmFtZU9yUGF0aC5pbmNsdWRlcygnQCcpKSB7XG4gICAgcmV0dXJuIG5hbWVPclBhdGhcbiAgfSBlbHNlIHtcbiAgICBsZXQgcmVnID0gLyguK1xcLyk/KHBpY2dvLXBsdWdpbi1cXHcrKShALispKi9cbiAgICAvLyBpZiBpcyBhIHNjb3BlIHBrZ1xuICAgIGlmIChzY29wZSkge1xuICAgICAgcmVnID0gLyguK1xcLyk/KF5AW14vXStcXC9waWNnby1wbHVnaW4tXFx3KykoQC4rKSovXG4gICAgfVxuICAgIGNvbnN0IG1hdGNoQXJyID0gbmFtZU9yUGF0aC5tYXRjaChyZWcpXG4gICAgaWYgKCFtYXRjaEFycikge1xuICAgICAgY29uc29sZS53YXJuKCdjYW4gbm90IHJlbW92ZSBwbHVnaW4gdmVyc2lvbicpXG4gICAgICByZXR1cm4gbmFtZU9yUGF0aFxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbWF0Y2hBcnJbMl1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiB0aGUgY29uZmlnIGJsYWNrIGl0ZW0gbGlzdCB3aGljaCB3b24ndCBiZSBzZXR0ZWRcbiAqIG9ubHkgY2FuIGJlIGdvdFxuICovXG5leHBvcnQgY29uc3QgY29uZmlnQmxhY2tMaXN0ID0gW11cblxuLyoqXG4gKiBjaGVjayBzb21lIGNvbmZpZyBrZXkgaXMgaW4gYmxhY2tMaXN0XG4gKiBAcGFyYW0ga2V5XG4gKi9cbmV4cG9ydCBjb25zdCBpc0NvbmZpZ0tleUluQmxhY2tMaXN0ID0gKGtleTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gIHJldHVybiBjb25maWdCbGFja0xpc3Quc29tZShibGFja0l0ZW0gPT4ga2V5LnN0YXJ0c1dpdGgoYmxhY2tJdGVtKSlcbn1cblxuLyoqXG4gKiBjaGVjayB0aGUgaW5wdXQgY29uZmlnIGlzIHZhbGlkXG4gKiBjb25maWcgbXVzdCBiZSBvYmplY3Qgc3VjaCBhcyB7IHh4eDogJ3h4eCcgfVxuICogJiYgY2FuJ3QgYmUgYXJyYXlcbiAqIEBwYXJhbSBjb25maWdcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBpc0lucHV0Q29uZmlnVmFsaWQgPSAoY29uZmlnOiBhbnkpOiBib29sZWFuID0+IHtcbiAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGNvbmZpZykgJiYgT2JqZWN0LmtleXMoY29uZmlnKS5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNhZmVQYXJzZTxUPihzdHI6IHN0cmluZyk6IFQgfCBzdHJpbmcge1xuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKHN0cilcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gc3RyXG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGZvcmNlTnVtYmVyID0gKG51bTogc3RyaW5nIHwgbnVtYmVyID0gMCk6IG51bWJlciA9PiB7XG4gIHJldHVybiBpc05hTihOdW1iZXIobnVtKSkgPyAwIDogTnVtYmVyKG51bSlcbn1cblxuZXhwb3J0IGNvbnN0IGlzRGV2ID0gKCk6IGJvb2xlYW4gPT4gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCdcblxuYXN5bmMgZnVuY3Rpb24gdGV4dDJTVkcoXG4gIGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aDogc3RyaW5nLFxuICB0ZXh0Pzogc3RyaW5nLFxuICBjb2xvcj86IHN0cmluZyxcbiAgZm9udEZhbWlseT86IHN0cmluZ1xuKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgdGV4dCA9ICF0ZXh0ID8gJ+a1i+ivlScgOiB0ZXh0XG4gIGZvbnRGYW1pbHkgPSAhZm9udEZhbWlseSA/IGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aCA6IGZvbnRGYW1pbHlcbiAgY29sb3IgPSAhY29sb3IgPyAncmdiYSgyMDQsIDIwNCwgMjA0LCAwLjQ1KScgOiBjb2xvclxuICBjb25zdCB0ZXh0MlNWRyA9IFRleHRUb1NWRy5sb2FkU3luYyhmb250RmFtaWx5KVxuICBjb25zdCBvcHRpb25zOiBUZXh0VG9TVkcuR2VuZXJhdGlvbk9wdGlvbnMgPSB7XG4gICAgYW5jaG9yOiAndG9wJyxcbiAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICBmaWxsOiBjb2xvclxuICAgIH1cbiAgfVxuICBjb25zdCB0ZXh0U1ZHID0gdGV4dDJTVkcuZ2V0U1ZHKHRleHQsIG9wdGlvbnMpXG4gIHJldHVybiBCdWZmZXIuZnJvbSh0ZXh0U1ZHKVxufVxuXG5jb25zdCBkZWZhdWx0V2F0ZXJtYXJrSW1hZ2VQYXRoID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJ2Fzc2V0cycsICdwaWNsaXN0LnBuZycpXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBBZGRXYXRlcm1hcmsoXG4gIGltZzogQnVmZmVyLFxuICB3YXRlcm1hcmtUeXBlOiAndGV4dCcgfCAnaW1hZ2UnLFxuICBkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGg6IHN0cmluZyxcbiAgaXNGdWxsU2NyZWVuV2F0ZXJtYXJrPzogYm9vbGVhbixcbiAgd2F0ZXJtYXJrRGVncmVlPzogbnVtYmVyLFxuICB0ZXh0Pzogc3RyaW5nLFxuICB3YXRlcm1hcmtGb250UGF0aD86IHN0cmluZyxcbiAgd2F0ZXJtYXJrU2NhbGVSYXRpbz86IG51bWJlcixcbiAgd2F0ZXJtYXJrQ29sb3I/OiBzdHJpbmcsXG4gIHdhdGVybWFya0ltYWdlUGF0aD86IHN0cmluZyxcbiAgcG9zaXRpb24/OiBzaGFycC5HcmF2aXR5XG4pOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICB3YXRlcm1hcmtTY2FsZVJhdGlvID1cbiAgICAhd2F0ZXJtYXJrU2NhbGVSYXRpbyB8fCB3YXRlcm1hcmtTY2FsZVJhdGlvIDwgMCB8fCB3YXRlcm1hcmtTY2FsZVJhdGlvID4gMSA/IDAuMTUgOiB3YXRlcm1hcmtTY2FsZVJhdGlvXG4gIGNvbnN0IGltYWdlID0gc2hhcnAoaW1nLCB7IGFuaW1hdGVkOiB0cnVlIH0pXG4gIGNvbnN0IHsgd2lkdGg6IGltZ1dpZHRoID0gMjAwIH0gPSBhd2FpdCBpbWFnZS5tZXRhZGF0YSgpXG4gIGNvbnN0IHdhdGVybWFyayA9IGF3YWl0IGNyZWF0ZVdhdGVybWFyayhcbiAgICB3YXRlcm1hcmtUeXBlLFxuICAgIGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aCxcbiAgICB0ZXh0LFxuICAgIHdhdGVybWFya0ZvbnRQYXRoLFxuICAgIHdhdGVybWFya1NjYWxlUmF0aW8sXG4gICAgd2F0ZXJtYXJrQ29sb3IsXG4gICAgd2F0ZXJtYXJrSW1hZ2VQYXRoLFxuICAgIGltZ1dpZHRoLFxuICAgIHdhdGVybWFya0RlZ3JlZVxuICApXG4gIHJldHVybiBhd2FpdCBpbWFnZVxuICAgIC5jb21wb3NpdGUoW1xuICAgICAge1xuICAgICAgICBpbnB1dDogd2F0ZXJtYXJrLFxuICAgICAgICBncmF2aXR5OiBwb3NpdGlvbiB8fCAnc291dGhlYXN0JyxcbiAgICAgICAgdGlsZTogaXNGdWxsU2NyZWVuV2F0ZXJtYXJrXG4gICAgICB9XG4gICAgXSlcbiAgICAudG9CdWZmZXIoKVxufVxuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVXYXRlcm1hcmsoXG4gIHdhdGVybWFya1R5cGU6ICd0ZXh0JyB8ICdpbWFnZScsXG4gIGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aDogc3RyaW5nLFxuICB0ZXh0Pzogc3RyaW5nLFxuICB3YXRlcm1hcmtGb250UGF0aD86IHN0cmluZyxcbiAgd2F0ZXJtYXJrU2NhbGVSYXRpbz86IG51bWJlcixcbiAgd2F0ZXJtYXJrQ29sb3I/OiBzdHJpbmcsXG4gIHdhdGVybWFya0ltYWdlUGF0aD86IHN0cmluZyxcbiAgaW1nV2lkdGg6IG51bWJlciA9IDIwMCxcbiAgd2F0ZXJtYXJrRGVncmVlOiBudW1iZXIgPSAwXG4pOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICBsZXQgd2F0ZXJtYXJrOiBhbnlcbiAgaWYgKHdhdGVybWFya1R5cGUgPT09ICdpbWFnZScpIHtcbiAgICB3YXRlcm1hcmtJbWFnZVBhdGggPSB3YXRlcm1hcmtJbWFnZVBhdGggfHwgZGVmYXVsdFdhdGVybWFya0ltYWdlUGF0aFxuICAgIHdhdGVybWFyayA9IGF3YWl0IHNoYXJwKHdhdGVybWFya0ltYWdlUGF0aCkudG9CdWZmZXIoKVxuICB9IGVsc2Uge1xuICAgIHdhdGVybWFyayA9IGF3YWl0IHRleHQyU1ZHKFxuICAgICAgZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoLFxuICAgICAgdGV4dCxcbiAgICAgIHdhdGVybWFya0NvbG9yLFxuICAgICAgd2F0ZXJtYXJrRm9udFBhdGggfHwgZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoXG4gICAgKVxuICB9XG4gIGNvbnN0IHsgd2lkdGg6IHdhdGVybWFya1dpZHRoLCBoZWlnaHQ6IHdhdGVybWFya0hlaWdodCB9ID0gYXdhaXQgZ2V0U2l6ZSh3YXRlcm1hcmspXG4gIGNvbnN0IHdhdGVybWFya1Jlc2l6ZVdpZHRoID0gTWF0aC5mbG9vcihpbWdXaWR0aCAqIGZvcmNlTnVtYmVyKHdhdGVybWFya1NjYWxlUmF0aW8pKVxuICBjb25zdCB3YXRlcm1hcmtSZXNpemVIZWlnaHQgPSBNYXRoLmZsb29yKCh3YXRlcm1hcmtSZXNpemVXaWR0aCAqIHdhdGVybWFya0hlaWdodCkgLyB3YXRlcm1hcmtXaWR0aClcbiAgcmV0dXJuIGF3YWl0IHNoYXJwKHdhdGVybWFyaylcbiAgICAucmVzaXplKHdhdGVybWFya1Jlc2l6ZVdpZHRoLCB3YXRlcm1hcmtSZXNpemVIZWlnaHQsIHtcbiAgICAgIGZpdDogJ2luc2lkZSdcbiAgICB9KVxuICAgIC5yb3RhdGUod2F0ZXJtYXJrRGVncmVlLCB7XG4gICAgICBiYWNrZ3JvdW5kOiB7IHI6IDI1NSwgZzogMjU1LCBiOiAyNTUsIGFscGhhOiAwIH1cbiAgICB9KVxuICAgIC50b0J1ZmZlcigpXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFNpemUoaW1hZ2U6IEJ1ZmZlcik6IFByb21pc2U8eyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9PiB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gYXdhaXQgc2hhcnAoaW1hZ2UpLm1ldGFkYXRhKClcbiAgcmV0dXJuIHsgd2lkdGg6IHdpZHRoIHx8IDIwMCwgaGVpZ2h0OiBoZWlnaHQgfHwgMjAwIH1cbn1cblxuY29uc3QgdmFsaWRQYXJhbSA9ICguLi5wYXJhbXM6IGFueVtdKTogYm9vbGVhbiA9PiB7XG4gIHJldHVybiBwYXJhbXMuZXZlcnkocGFyYW0gPT4ge1xuICAgIGlmIChwYXJhbSA9PT0gdW5kZWZpbmVkIHx8IHBhcmFtID09PSBudWxsKSByZXR1cm4gZmFsc2VcbiAgICBpZiAodHlwZW9mIHBhcmFtID09PSAnc3RyaW5nJykgcmV0dXJuIHBhcmFtICE9PSAnJ1xuICAgIGlmICh0eXBlb2YgcGFyYW0gPT09ICdudW1iZXInKSByZXR1cm4gcGFyYW0gPiAwXG4gICAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ29iamVjdCcpIHJldHVybiBPYmplY3Qua2V5cyhwYXJhbSkubGVuZ3RoID4gMFxuICAgIHJldHVybiB0cnVlXG4gIH0pXG59XG5cbi8qKlxuICog6L2s5o2i5ZCO5Y+v5Lul6L6T5Ye655qE5qC85byP5YiX6KGoXG4gKi9cbmNvbnN0IGF2YWlsYWJsZUNvbnZlcnRGb3JtYXRMaXN0ID0gW1xuICAnYXZpZicsXG4gICdkeicsXG4gICdmaXRzJyxcbiAgJ2dpZicsXG4gICdoZWlmJyxcbiAgJ2lucHV0JyxcbiAgJ2pwZWcnLFxuICAnanBnJyxcbiAgJ2pwMicsXG4gICdqeGwnLFxuICAnbWFnaWNrJyxcbiAgJ29wZW5zbGlkZScsXG4gICdwZGYnLFxuICAncG5nJyxcbiAgJ3BwbScsXG4gICdyYXcnLFxuICAnc3ZnJyxcbiAgJ3RpZmYnLFxuICAndGlmJyxcbiAgJ3YnLFxuICAnd2VicCdcbl1cblxuLyoqXG4gKiDlj6/ku6XlpITnkIbnmoTlm77niYfmoLzlvI/liJfooahcbiAqL1xuY29uc3QgaW1hZ2VGb3JtYXRMaXN0ID0gW1xuICAnanBnJyxcbiAgJ2pwZWcnLFxuICAncG5nJyxcbiAgJ3dlYnAnLFxuICAnYm1wJyxcbiAgJ3RpZmYnLFxuICAndGlmJyxcbiAgJ3N2ZycsXG4gICdpY28nLFxuICAnYXZpZicsXG4gICdoZWlmJyxcbiAgJ2hlaWMnLFxuICAnZ2lmJ1xuXVxuXG5jb25zdCB2YWxpZE91dHB1dEZvcm1hdCA9IChmb3JtYXQ6IHN0cmluZyk6IGJvb2xlYW4gPT4gYXZhaWxhYmxlQ29udmVydEZvcm1hdExpc3QuaW5jbHVkZXMoZm9ybWF0KVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW1hZ2VBZGRXYXRlck1hcmsoXG4gIGltZzogQnVmZmVyLFxuICBvcHRpb25zOiBJQnVpbGRJbldhdGVyTWFya09wdGlvbnMsXG4gIGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aDogc3RyaW5nLFxuICBsb2dnZXI6IElMb2dnZXJcbik6IFByb21pc2U8QnVmZmVyPiB7XG4gIHRyeSB7XG4gICAgbGV0IGltYWdlOiBzaGFycC5TaGFycCA9IHNoYXJwKGltZywgeyBhbmltYXRlZDogdHJ1ZSB9KVxuICAgIGltYWdlID0gc2hhcnAoXG4gICAgICBhd2FpdCBBZGRXYXRlcm1hcmsoXG4gICAgICAgIGltZyxcbiAgICAgICAgb3B0aW9ucy53YXRlcm1hcmtUeXBlIHx8ICd0ZXh0JyxcbiAgICAgICAgZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoLFxuICAgICAgICBvcHRpb25zLmlzRnVsbFNjcmVlbldhdGVybWFyayxcbiAgICAgICAgZm9yY2VOdW1iZXIob3B0aW9ucy53YXRlcm1hcmtEZWdyZWUpLFxuICAgICAgICBvcHRpb25zLndhdGVybWFya1RleHQsXG4gICAgICAgIG9wdGlvbnMud2F0ZXJtYXJrRm9udFBhdGgsXG4gICAgICAgIGZvcmNlTnVtYmVyKG9wdGlvbnMud2F0ZXJtYXJrU2NhbGVSYXRpbyksXG4gICAgICAgIG9wdGlvbnMud2F0ZXJtYXJrQ29sb3IsXG4gICAgICAgIG9wdGlvbnMud2F0ZXJtYXJrSW1hZ2VQYXRoLFxuICAgICAgICBvcHRpb25zLndhdGVybWFya1Bvc2l0aW9uXG4gICAgICApLFxuICAgICAgeyBhbmltYXRlZDogdHJ1ZSB9XG4gICAgKVxuICAgIHJldHVybiBhd2FpdCBpbWFnZS50b0J1ZmZlcigpXG4gIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICBsb2dnZXIuZXJyb3IoYEltYWdlIGFkZCB3YXRlcm1hcmsgZXJyb3I6ICR7ZXJyb3J9YClcbiAgICByZXR1cm4gaW1nXG4gIH1cbn1cblxuZnVuY3Rpb24gZm9ybWF0T3B0aW9ucyhvcHRpb25zOiBJQnVpbGRJbkNvbXByZXNzT3B0aW9ucyk6IElCdWlsZEluQ29tcHJlc3NPcHRpb25zIHtcbiAgY29uc3QgZm9ybWF0Q29udmVydE9iaiA9XG4gICAgdHlwZW9mIG9wdGlvbnMuZm9ybWF0Q29udmVydE9iaiA9PT0gJ3N0cmluZycgPyBzYWZlUGFyc2Uob3B0aW9ucy5mb3JtYXRDb252ZXJ0T2JqKSA6IG9wdGlvbnMuZm9ybWF0Q29udmVydE9ialxuICByZXR1cm4ge1xuICAgIHF1YWxpdHk6IGZvcmNlTnVtYmVyKG9wdGlvbnMucXVhbGl0eSksXG4gICAgaXNDb252ZXJ0OiBvcHRpb25zLmlzQ29udmVydCB8fCBmYWxzZSxcbiAgICBjb252ZXJ0Rm9ybWF0OiBvcHRpb25zLmNvbnZlcnRGb3JtYXQgfHwgJ2pwZycsXG4gICAgaXNSZVNpemU6IG9wdGlvbnMuaXNSZVNpemUgfHwgZmFsc2UsXG4gICAgcmVTaXplSGVpZ2h0OiBmb3JjZU51bWJlcihvcHRpb25zLnJlU2l6ZUhlaWdodCksXG4gICAgcmVTaXplV2lkdGg6IGZvcmNlTnVtYmVyKG9wdGlvbnMucmVTaXplV2lkdGgpLFxuICAgIHNraXBSZVNpemVPZlNtYWxsSW1nOiBvcHRpb25zLnNraXBSZVNpemVPZlNtYWxsSW1nIHx8IGZhbHNlLFxuICAgIGlzUmVTaXplQnlQZXJjZW50OiBvcHRpb25zLmlzUmVTaXplQnlQZXJjZW50IHx8IGZhbHNlLFxuICAgIHJlU2l6ZVBlcmNlbnQ6IGZvcmNlTnVtYmVyKG9wdGlvbnMucmVTaXplUGVyY2VudCksXG4gICAgaXNSb3RhdGU6IG9wdGlvbnMuaXNSb3RhdGUgfHwgZmFsc2UsXG4gICAgaXNGbGlwOiBvcHRpb25zLmlzRmxpcCB8fCBmYWxzZSxcbiAgICBpc0Zsb3A6IG9wdGlvbnMuaXNGbG9wIHx8IGZhbHNlLFxuICAgIHJvdGF0ZURlZ3JlZTogZm9yY2VOdW1iZXIob3B0aW9ucy5yb3RhdGVEZWdyZWUpLFxuICAgIHBpY0JlZDogb3B0aW9ucy5waWNCZWQgfHwgJ3NtbXMnLFxuICAgIGZvcm1hdENvbnZlcnRPYmo6IGZvcm1hdENvbnZlcnRPYmogfHwge31cbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW1hZ2VDb21wcmVzcyhcbiAgaW1nOiBCdWZmZXIsXG4gIG9wdGlvbnM6IElCdWlsZEluQ29tcHJlc3NPcHRpb25zLFxuICByYXdGb3JtYXQ6IHN0cmluZyxcbiAgbG9nZ2VyOiBJTG9nZ2VyXG4pOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICBvcHRpb25zID0gZm9ybWF0T3B0aW9ucyhvcHRpb25zKVxuICB0cnkge1xuICAgIHJhd0Zvcm1hdCA9IG5vcm1hbGl6ZUltYWdlRXh0KHJhd0Zvcm1hdClcbiAgICBpZiAoIWltYWdlRm9ybWF0TGlzdC5pbmNsdWRlcyhyYXdGb3JtYXQpIHx8IHJhd0Zvcm1hdCA9PT0gJ2dpZicpIHJldHVybiBpbWdcbiAgICBsZXQgaW1hZ2U6IHNoYXJwLlNoYXJwID0gc2hhcnAoaW1nLCB7IGFuaW1hdGVkOiB0cnVlIH0pXG4gICAgbGV0IHF1YWxpdHkgPSAxMDBcbiAgICBpZiAodmFsaWRQYXJhbShvcHRpb25zLnF1YWxpdHkpICYmIG9wdGlvbnMucXVhbGl0eSEgPCAxMDApIHtcbiAgICAgIHF1YWxpdHkgPSBvcHRpb25zLnF1YWxpdHkhXG4gICAgfVxuICAgIGlmIChvcHRpb25zLmlzUmVTaXplQnlQZXJjZW50KSB7XG4gICAgICBpZiAodmFsaWRQYXJhbShvcHRpb25zLnJlU2l6ZVBlcmNlbnQpKSB7XG4gICAgICAgIGNvbnN0IGltYWdlV2lkdGggPSBhd2FpdCBpbWFnZS5tZXRhZGF0YSgpLnRoZW4obWV0YWRhdGEgPT4gbWV0YWRhdGEud2lkdGgpXG4gICAgICAgIGNvbnN0IGltYWdlSGVpZ2h0ID0gYXdhaXQgaW1hZ2UubWV0YWRhdGEoKS50aGVuKG1ldGFkYXRhID0+IG1ldGFkYXRhLmhlaWdodClcbiAgICAgICAgaWYgKGltYWdlV2lkdGggJiYgaW1hZ2VIZWlnaHQpIHtcbiAgICAgICAgICBpbWFnZSA9IGltYWdlLnJlc2l6ZShcbiAgICAgICAgICAgIE1hdGgucm91bmQoKGltYWdlV2lkdGggKiBvcHRpb25zLnJlU2l6ZVBlcmNlbnQhKSAvIDEwMCksXG4gICAgICAgICAgICBNYXRoLnJvdW5kKChpbWFnZUhlaWdodCAqIG9wdGlvbnMucmVTaXplUGVyY2VudCEpIC8gMTAwKSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZml0OiAnaW5zaWRlJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5pc1JlU2l6ZSkge1xuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2Ygb3B0aW9ucy5yZVNpemVIZWlnaHQgPT09ICdudW1iZXInICYmXG4gICAgICAgIG9wdGlvbnMucmVTaXplSGVpZ2h0ID4gMCAmJlxuICAgICAgICB0eXBlb2Ygb3B0aW9ucy5yZVNpemVXaWR0aCA9PT0gJ251bWJlcicgJiZcbiAgICAgICAgb3B0aW9ucy5yZVNpemVXaWR0aCA+IDBcbiAgICAgICkge1xuICAgICAgICBpbWFnZSA9IGltYWdlLnJlc2l6ZShvcHRpb25zLnJlU2l6ZVdpZHRoLCBvcHRpb25zLnJlU2l6ZUhlaWdodCwge1xuICAgICAgICAgIGZpdDogJ2ZpbGwnXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICB0eXBlb2Ygb3B0aW9ucy5yZVNpemVIZWlnaHQgPT09ICdudW1iZXInICYmXG4gICAgICAgIG9wdGlvbnMucmVTaXplSGVpZ2h0ID4gMCAmJlxuICAgICAgICAodHlwZW9mIG9wdGlvbnMucmVTaXplV2lkdGggIT09ICdudW1iZXInIHx8IG9wdGlvbnMucmVTaXplV2lkdGggPT09IDApXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgaW1hZ2VXaWR0aCA9IGF3YWl0IGltYWdlLm1ldGFkYXRhKCkudGhlbihtZXRhZGF0YSA9PiBtZXRhZGF0YS53aWR0aClcbiAgICAgICAgY29uc3QgaW1hZ2VIZWlnaHQgPSBhd2FpdCBpbWFnZS5tZXRhZGF0YSgpLnRoZW4obWV0YWRhdGEgPT4gbWV0YWRhdGEuaGVpZ2h0KVxuICAgICAgICBpZiAoaW1hZ2VXaWR0aCAmJiBpbWFnZUhlaWdodCkge1xuICAgICAgICAgIGlmICghb3B0aW9ucy5za2lwUmVTaXplT2ZTbWFsbEltZyB8fCAob3B0aW9ucy5za2lwUmVTaXplT2ZTbWFsbEltZyAmJiBvcHRpb25zLnJlU2l6ZUhlaWdodCA8IGltYWdlSGVpZ2h0KSkge1xuICAgICAgICAgICAgY29uc3Qgc2NhbGVSYXRpbyA9IG9wdGlvbnMucmVTaXplSGVpZ2h0IC8gaW1hZ2VIZWlnaHRcbiAgICAgICAgICAgIGltYWdlID0gaW1hZ2UucmVzaXplKE1hdGgucm91bmQoaW1hZ2VXaWR0aCAqIHNjYWxlUmF0aW8pLCBvcHRpb25zLnJlU2l6ZUhlaWdodCwge1xuICAgICAgICAgICAgICBmaXQ6ICdpbnNpZGUnXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdHlwZW9mIG9wdGlvbnMucmVTaXplV2lkdGggPT09ICdudW1iZXInICYmXG4gICAgICAgIG9wdGlvbnMucmVTaXplV2lkdGggPiAwICYmXG4gICAgICAgICh0eXBlb2Ygb3B0aW9ucy5yZVNpemVIZWlnaHQgIT09ICdudW1iZXInIHx8IG9wdGlvbnMucmVTaXplSGVpZ2h0ID09PSAwKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGltYWdlV2lkdGggPSBhd2FpdCBpbWFnZS5tZXRhZGF0YSgpLnRoZW4obWV0YWRhdGEgPT4gbWV0YWRhdGEud2lkdGgpXG4gICAgICAgIGNvbnN0IGltYWdlSGVpZ2h0ID0gYXdhaXQgaW1hZ2UubWV0YWRhdGEoKS50aGVuKG1ldGFkYXRhID0+IG1ldGFkYXRhLmhlaWdodClcbiAgICAgICAgaWYgKGltYWdlV2lkdGggJiYgaW1hZ2VIZWlnaHQpIHtcbiAgICAgICAgICBpZiAoIW9wdGlvbnMuc2tpcFJlU2l6ZU9mU21hbGxJbWcgfHwgKG9wdGlvbnMuc2tpcFJlU2l6ZU9mU21hbGxJbWcgJiYgb3B0aW9ucy5yZVNpemVXaWR0aCA8IGltYWdlV2lkdGgpKSB7XG4gICAgICAgICAgICBjb25zdCBzY2FsZVJhdGlvID0gb3B0aW9ucy5yZVNpemVXaWR0aCAvIGltYWdlV2lkdGhcbiAgICAgICAgICAgIGltYWdlID0gaW1hZ2UucmVzaXplKG9wdGlvbnMucmVTaXplV2lkdGgsIE1hdGgucm91bmQoaW1hZ2VIZWlnaHQgKiBzY2FsZVJhdGlvKSwge1xuICAgICAgICAgICAgICBmaXQ6ICdpbnNpZGUnXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAob3B0aW9ucy5pc1JvdGF0ZSAmJiBvcHRpb25zLnJvdGF0ZURlZ3JlZSkge1xuICAgICAgaW1hZ2UgPSBpbWFnZS5yb3RhdGUob3B0aW9ucy5yb3RhdGVEZWdyZWUsIHtcbiAgICAgICAgYmFja2dyb3VuZDogeyByOiAyNTUsIGc6IDI1NSwgYjogMjU1LCBhbHBoYTogMCB9XG4gICAgICB9KVxuICAgIH1cbiAgICBpZiAob3B0aW9ucy5pc0ZsaXApIHtcbiAgICAgIGltYWdlID0gaW1hZ2UuZmxpcCgpXG4gICAgfVxuICAgIGlmIChvcHRpb25zLmlzRmxvcCkge1xuICAgICAgaW1hZ2UgPSBpbWFnZS5mbG9wKClcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuaXNDb252ZXJ0KSB7XG4gICAgICBjb25zdCBuZXdGb3JtYXQgPSBnZXRDb252ZXJ0ZWRGb3JtYXQob3B0aW9ucywgcmF3Rm9ybWF0KSBhcyBhbnlcbiAgICAgIGlmIChuZXdGb3JtYXQgIT09IHJhd0Zvcm1hdCkge1xuICAgICAgICBpbWFnZSA9IGltYWdlLnRvRm9ybWF0KG5ld0Zvcm1hdCwge1xuICAgICAgICAgIHF1YWxpdHksXG4gICAgICAgICAgbW96anBlZzogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocmF3Rm9ybWF0ICYmIHZhbGlkT3V0cHV0Rm9ybWF0KHJhd0Zvcm1hdCkpIHtcbiAgICAgICAgaW1hZ2UgPSBpbWFnZS50b0Zvcm1hdChyYXdGb3JtYXQgYXMgYW55LCB7XG4gICAgICAgICAgcXVhbGl0eSxcbiAgICAgICAgICBtb3pqcGVnOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbWFnZSA9IGltYWdlLnRvRm9ybWF0KCdqcGcnLCB7XG4gICAgICAgICAgcXVhbGl0eSxcbiAgICAgICAgICBtb3pqcGVnOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCBpbWFnZS50b0J1ZmZlcigpXG4gIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICBsb2dnZXIuZXJyb3IoYEltYWdlIHByb2Nlc3MgZXJyb3I6ICR7ZXJyb3J9YClcbiAgICByZXR1cm4gaW1nXG4gIH1cbn1cblxuY29uc3Qgbm9ybWFsaXplSW1hZ2VFeHQgPSAoZXh0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICByZXR1cm4gZXh0LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgnLicsICcnKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29udmVydGVkRm9ybWF0KG9wdGlvbnM6IElCdWlsZEluQ29tcHJlc3NPcHRpb25zIHwgdW5kZWZpbmVkLCByYXdGb3JtYXQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIG9wdGlvbnMgPSBmb3JtYXRPcHRpb25zKG9wdGlvbnMgfHwge30pXG4gIHJhd0Zvcm1hdCA9IG5vcm1hbGl6ZUltYWdlRXh0KHJhd0Zvcm1hdClcbiAgaWYgKHJhd0Zvcm1hdCA9PT0gJ2dpZicpIHJldHVybiAnZ2lmJ1xuICBsZXQgbmV3Rm9ybWF0ID0gb3B0aW9ucz8uY29udmVydEZvcm1hdCB8fCAnanBnJ1xuICBpZiAob3B0aW9ucz8uZm9ybWF0Q29udmVydE9iaiAmJiBPYmplY3Qua2V5cyhvcHRpb25zLmZvcm1hdENvbnZlcnRPYmopLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBmb3JtYXRDb252ZXJ0T2JqID0gb3B0aW9ucy5mb3JtYXRDb252ZXJ0T2JqXG4gICAgY29uc3QgZm9ybWF0Q29udmVydE9iaktleXMgPSBPYmplY3Qua2V5cyhmb3JtYXRDb252ZXJ0T2JqKVxuICAgIGlmIChmb3JtYXRDb252ZXJ0T2JqS2V5cy5pbmNsdWRlcyhyYXdGb3JtYXQpKSB7XG4gICAgICBuZXdGb3JtYXQgPSBmb3JtYXRDb252ZXJ0T2JqW3Jhd0Zvcm1hdF1cbiAgICAgIGlmICghdmFsaWRPdXRwdXRGb3JtYXQobmV3Rm9ybWF0KSkge1xuICAgICAgICBuZXdGb3JtYXQgPSAnanBnJ1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAob3B0aW9ucz8ucGljQmVkID09PSAnaW1ndXInICYmIG5ld0Zvcm1hdCA9PT0gJ3dlYnAnKSB7XG4gICAgbmV3Rm9ybWF0ID0gJ2pwZydcbiAgfVxuICByZXR1cm4gbmV3Rm9ybWF0XG59XG5cbmV4cG9ydCBjb25zdCBpc05lZWRBZGRXYXRlcm1hcmsgPSAoXG4gIHdhdGVybWFya09wdGlvbnM6IElCdWlsZEluV2F0ZXJNYXJrT3B0aW9ucyB8IHVuZGVmaW5lZCxcbiAgZmlsZUV4dDogc3RyaW5nXG4pOiBib29sZWFuID0+IHtcbiAgZmlsZUV4dCA9IG5vcm1hbGl6ZUltYWdlRXh0KGZpbGVFeHQpXG4gIHJldHVybiAoXG4gICAgISF3YXRlcm1hcmtPcHRpb25zICYmICEhd2F0ZXJtYXJrT3B0aW9ucy5pc0FkZFdhdGVybWFyayAmJiBpbWFnZUZvcm1hdExpc3QuaW5jbHVkZXMoZmlsZUV4dCkgJiYgZmlsZUV4dCAhPT0gJ3N2ZydcbiAgKVxufVxuXG5leHBvcnQgY29uc3QgaXNOZWVkQ29tcHJlc3MgPSAoY29tcHJlc3NPcHRpb25zOiBJQnVpbGRJbkNvbXByZXNzT3B0aW9ucyB8IHVuZGVmaW5lZCwgZmlsZUV4dDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gIGlmICghaW1hZ2VGb3JtYXRMaXN0LmluY2x1ZGVzKG5vcm1hbGl6ZUltYWdlRXh0KGZpbGVFeHQpKSB8fCAhY29tcHJlc3NPcHRpb25zKSByZXR1cm4gZmFsc2VcblxuICBjb25zdCB7XG4gICAgcXVhbGl0eSxcbiAgICBpc1JlU2l6ZUJ5UGVyY2VudCxcbiAgICByZVNpemVQZXJjZW50LFxuICAgIGlzUmVTaXplLFxuICAgIHJlU2l6ZUhlaWdodCxcbiAgICByZVNpemVXaWR0aCxcbiAgICBpc1JvdGF0ZSxcbiAgICByb3RhdGVEZWdyZWUsXG4gICAgaXNDb252ZXJ0LFxuICAgIGNvbnZlcnRGb3JtYXQsXG4gICAgaXNGbGlwLFxuICAgIGlzRmxvcFxuICB9ID0gZm9ybWF0T3B0aW9ucyhjb21wcmVzc09wdGlvbnMpXG5cbiAgaWYgKHZhbGlkUGFyYW0ocXVhbGl0eSkgJiYgcXVhbGl0eSEgPCAxMDApIHJldHVybiB0cnVlXG4gIGlmIChpc1JlU2l6ZUJ5UGVyY2VudCAmJiB2YWxpZFBhcmFtKHJlU2l6ZVBlcmNlbnQpKSByZXR1cm4gdHJ1ZVxuICBpZiAoXG4gICAgaXNSZVNpemUgJiZcbiAgICAoKHR5cGVvZiByZVNpemVIZWlnaHQgPT09ICdudW1iZXInICYmIHJlU2l6ZUhlaWdodCA+IDApIHx8ICh0eXBlb2YgcmVTaXplV2lkdGggPT09ICdudW1iZXInICYmIHJlU2l6ZVdpZHRoID4gMCkpXG4gICkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgaWYgKGlzUm90YXRlICYmIHJvdGF0ZURlZ3JlZSkgcmV0dXJuIHRydWVcbiAgaWYgKGlzRmxpcCB8fCBpc0Zsb3ApIHJldHVybiB0cnVlXG4gIGlmIChpc0NvbnZlcnQpIHtcbiAgICBjb25zdCBuZXdGb3JtYXQgPSBjb252ZXJ0Rm9ybWF0IHx8ICdqcGcnXG4gICAgcmV0dXJuIGZpbGVFeHQgIT09IG5ld0Zvcm1hdFxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5leHBvcnQgY29uc3QgcmVtb3ZlRXhpZiA9IGFzeW5jIChpbWc6IEJ1ZmZlciwgZmlsZUV4dDogc3RyaW5nKTogUHJvbWlzZTxCdWZmZXI+ID0+IHtcbiAgZmlsZUV4dCA9IG5vcm1hbGl6ZUltYWdlRXh0KGZpbGVFeHQpXG4gIGlmICghaW1hZ2VGb3JtYXRMaXN0LmluY2x1ZGVzKGZpbGVFeHQpIHx8IGZpbGVFeHQgPT09ICdzdmcnKSByZXR1cm4gaW1nXG4gIHJldHVybiBhd2FpdCBzaGFycChpbWcsIHtcbiAgICBhbmltYXRlZDogdHJ1ZVxuICB9KS50b0J1ZmZlcigpXG59XG4iLCJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xuaW1wb3J0IHsgaXNVcmwgfSBmcm9tICcuLi8uLi91dGlscy9jb21tb24nXG5pbXBvcnQgeyBJUGljR28sIElQbHVnaW4gfSBmcm9tICcuLi8uLi90eXBlcydcblxuY29uc3QgdXBsb2FkOiBJUGx1Z2luID0ge1xuICBoYW5kbGU6IChjdHg6IElQaWNHbykgPT4ge1xuICAgIGNvbnN0IGNtZCA9IGN0eC5jbWRcbiAgICBjbWQucHJvZ3JhbVxuICAgICAgLmNvbW1hbmQoJ3VwbG9hZCcpXG4gICAgICAuZGVzY3JpcHRpb24oJ3VwbG9hZCwgZ28gZ28gZ28nKVxuICAgICAgLmFyZ3VtZW50cygnW2lucHV0Li4uXScpXG4gICAgICAuYWxpYXMoJ3UnKVxuICAgICAgLmFjdGlvbigoaW5wdXQ6IHN0cmluZ1tdKSA9PiB7XG4gICAgICAgIDsoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlucHV0TGlzdCA9IGlucHV0XG4gICAgICAgICAgICAubWFwKChpdGVtOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGlzVXJsKGl0ZW0pID8gaXRlbSA6IHBhdGgucmVzb2x2ZShpdGVtKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5maWx0ZXIoKGl0ZW06IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBleGlzdCA9IGZzLmV4aXN0c1N5bmMoaXRlbSkgfHwgaXNVcmwoaXRlbSlcbiAgICAgICAgICAgICAgaWYgKCFleGlzdCkge1xuICAgICAgICAgICAgICAgIGN0eC5sb2cud2FybihgJHtpdGVtfSBkb2VzIG5vdCBleGlzdC5gKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBleGlzdFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICBhd2FpdCBjdHgudXBsb2FkKGlucHV0TGlzdClcbiAgICAgICAgfSkoKS5jYXRjaChlID0+IHtcbiAgICAgICAgICBjdHgubG9nLmVycm9yKGUpXG4gICAgICAgIH0pXG4gICAgICB9KVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHVwbG9hZFxuIiwiaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJQnVpbGRJbkNvbXByZXNzT3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xuXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJQnVpbGRJbkNvbXByZXNzT3B0aW9ucz4oJ2J1aWxkSW4uY29tcHJlc3MnKSB8fCB7fVxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAncXVhbGl0eScsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfUVVBTElUWScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19RVUFMSVRZJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnF1YWxpdHkgfHwgMTAwXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnaXNDb252ZXJ0JyxcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTQ09OVkVSVCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19JU0NPTlZFUlQnKVxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuaXNDb252ZXJ0IHx8IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnY29udmVydEZvcm1hdCcsXG4gICAgICB0eXBlOiAnbGlzdCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19DT05WRVJURk9STUFUJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0NPTlZFUlRGT1JNQVQnKVxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgJ2F2aWYnLFxuICAgICAgICAnZHonLFxuICAgICAgICAnZml0cycsXG4gICAgICAgICdnaWYnLFxuICAgICAgICAnaGVpZicsXG4gICAgICAgICdpbnB1dCcsXG4gICAgICAgICdqcGVnJyxcbiAgICAgICAgJ2pwZycsXG4gICAgICAgICdqcDInLFxuICAgICAgICAnanhsJyxcbiAgICAgICAgJ21hZ2ljaycsXG4gICAgICAgICdvcGVuc2xpZGUnLFxuICAgICAgICAncGRmJyxcbiAgICAgICAgJ3BuZycsXG4gICAgICAgICdwcG0nLFxuICAgICAgICAncmF3JyxcbiAgICAgICAgJ3N2ZycsXG4gICAgICAgICd0aWZmJyxcbiAgICAgICAgJ3RpZicsXG4gICAgICAgICd2JyxcbiAgICAgICAgJ3dlYnAnXG4gICAgICBdLFxuICAgICAgZGVmYXVsdDogJ2pwZydcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdpc1JlU2l6ZScsXG4gICAgICB0eXBlOiAnY29uZmlybScsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19JU1JFU0laRScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19JU1JFU0laRScpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5pc1JlU2l6ZSB8fCBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3JlU2l6ZVdpZHRoJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19SRVNJWkVXSURUSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19SRVNJWkVXSURUSCcpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5yZVNpemVXaWR0aCB8fCA1MDBcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdyZVNpemVIZWlnaHQnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX1JFU0laRUhFSUdIVCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19SRVNJWkVIRUlHSFQnKVxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucmVTaXplSGVpZ2h0IHx8IDUwMFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3NraXBSZVNpemVPZlNtYWxsSW1nJyxcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX1NLSVBSRVNJWkVPRlNNQUxMSU1HJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX1NLSVBSRVNJWkVPRlNNQUxMSU1HJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnNraXBSZVNpemVPZlNtYWxsSW1nIHx8IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnaXNSZVNpemVCeVBlcmNlbnQnLFxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkVCWVBFUkNFTlQnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkVCWVBFUkNFTlQnKVxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuaXNSZVNpemVCeVBlcmNlbnQgfHwgZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdyZVNpemVQZXJjZW50JyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19SRVNJWkVQRVJDRU5UJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX1JFU0laRVBFUkNFTlQnKVxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucmVTaXplUGVyY2VudCB8fCA1MFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2lzRmxpcCcsXG4gICAgICB0eXBlOiAnY29uZmlybScsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19JU0ZMSVAnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfSVNGTElQJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmlzRmxpcCB8fCBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2lzRmxvcCcsXG4gICAgICB0eXBlOiAnY29uZmlybScsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19JU0ZMT1AnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfSVNGTE9QJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmlzRmxvcCB8fCBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2lzUm90YXRlJyxcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTUk9UQVRFJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTUk9UQVRFJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmlzUm90YXRlIHx8IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAncm90YXRlRGVncmVlJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19ST1RBVEVERUdSRUUnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfUk9UQVRFREVHUkVFJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnJvdGF0ZURlZ3JlZSB8fCA5MFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2lzUmVtb3ZlRXhpZicsXG4gICAgICB0eXBlOiAnY29uZmlybScsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19JU1JFTU9WRUVYSUYnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfSVNSRU1PVkVFWElGJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmlzUmVtb3ZlRXhpZiB8fCBmYWxzZVxuICAgIH1cbiAgXVxuICByZXR1cm4gY29uZmlnXG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29uZmlnXG59XG4iLCJpbXBvcnQgeyBJUGljR28sIElQbHVnaW5Db25maWcsIElCdWlsZEluV2F0ZXJNYXJrT3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xuXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJQnVpbGRJbldhdGVyTWFya09wdGlvbnM+KCdidWlsZEluLndhdGVybWFyaycpIHx8IHt9XG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICdpc0FkZFdhdGVybWFyaycsXG4gICAgICB0eXBlOiAnY29uZmlybScsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfSVNBRERXQVRFUk1BUksnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX0lTQUREV0FURVJNQVJLJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmlzQWRkV2F0ZXJtYXJrIHx8IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnd2F0ZXJtYXJrVHlwZScsXG4gICAgICB0eXBlOiAnbGlzdCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVFlQRScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVFlQRScpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgY2hvaWNlczogWyd0ZXh0JywgJ2ltYWdlJ10sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndhdGVybWFya1R5cGUgfHwgJ3RleHQnXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnaXNGdWxsU2NyZWVuV2F0ZXJtYXJrJyxcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19JU0ZVTExTQ1JFRU5XQVRFUk1BUksnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX0lTRlVMTFNDUkVFTldBVEVSTUFSSycpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5pc0Z1bGxTY3JlZW5XYXRlcm1hcmsgfHwgZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICd3YXRlcm1hcmtEZWdyZWUnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktERUdSRUUnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0RFR1JFRScpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy53YXRlcm1hcmtEZWdyZWUgfHwgMFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3dhdGVybWFya1RleHQnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhUJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhUJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndhdGVybWFya1RleHQgfHwgJydcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICd3YXRlcm1hcmtGb250UGF0aCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFRGT05UUEFUSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVEZPTlRQQVRIJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndhdGVybWFya0ZvbnRQYXRoIHx8ICcnXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnd2F0ZXJtYXJrU2NhbGVSYXRpbycsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRSQVRJTycpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVFJBVElPJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndhdGVybWFya1NjYWxlUmF0aW8gfHwgMC4xNVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3dhdGVybWFya0NvbG9yJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVENPTE9SJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktGT05UQ09MT1InKVxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcud2F0ZXJtYXJrQ29sb3IgfHwgJ3JnYmEoMjA0LCAyMDQsIDIwNCwgMC40NSknXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnd2F0ZXJtYXJrSW1hZ2VQYXRoJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLSU1BR0VQQVRIJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktJTUFHRVBBVEgnKVxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcud2F0ZXJtYXJrSW1hZ2VQYXRoIHx8ICcnXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnd2F0ZXJtYXJrUG9zaXRpb24nLFxuICAgICAgdHlwZTogJ2xpc3QnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1BPU0lUSU9OJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktQT1NJVElPTicpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgY2hvaWNlczogW1xuICAgICAgICAnbm9ydGgnLFxuICAgICAgICAnbm9ydGhlYXN0JyxcbiAgICAgICAgJ3NvdXRoZWFzdCcsXG4gICAgICAgICdzb3V0aCcsXG4gICAgICAgICdzb3V0aHdlc3QnLFxuICAgICAgICAnbm9ydGh3ZXN0JyxcbiAgICAgICAgJ3dlc3QnLFxuICAgICAgICAnZWFzdCcsXG4gICAgICAgICdjZW50ZXInLFxuICAgICAgICAnY2VudHJlJ1xuICAgICAgXSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcud2F0ZXJtYXJrUG9zaXRpb24gfHwgJ3NvdXRoZWFzdCdcbiAgICB9XG4gIF1cbiAgcmV0dXJuIGNvbmZpZ1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbmZpZ1xufVxuIiwiaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5pbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXG5cbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPGFueT4oJ2J1aWxkSW4ucmVuYW1lJykgfHwge31cbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXG4gICAge1xuICAgICAgbmFtZTogJ2Zvcm1hdCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fUkVOQU1FX0ZPUk1BVCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9SRU5BTUVfRk9STUFUJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmZvcm1hdCB8fCAne2ZpbGVuYW1lfSdcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdlbmFibGUnLFxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fUkVOQU1FX0VOQUJMRScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9SRU5BTUVfRU5BQkxFJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmVuYWJsZSB8fCBmYWxzZVxuICAgIH1cbiAgXVxuICByZXR1cm4gY29uZmlnXG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29uZmlnXG59XG4iLCJpbXBvcnQgeyBJUGljR28sIElQbHVnaW5Db25maWcsIElTdHJpbmdLZXlNYXAgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCBjb21wcmVzcyBmcm9tICcuLi9iZWZvcmV0cmFuc2Zvcm1lci9jb21wcmVzcydcbmltcG9ydCB3YXRlcm1hcmsgZnJvbSAnLi4vYmVmb3JldHJhbnNmb3JtZXIvd2F0ZXJtYXJrJ1xuaW1wb3J0IHJlbmFtZSBmcm9tICcuLi9iZWZvcmV1cGxvYWQvYnVpbGRJblJlbmFtZSdcblxuLy8gaGFuZGxlIG1vZHVsZXMgY29uZmlnIC0+IHNhdmUgdG8gcGljZ28gY29uZmlnIGZpbGVcbmNvbnN0IGhhbmRsZUNvbmZpZyA9IGFzeW5jIChjdHg6IElQaWNHbywgcHJvbXB0czogSVBsdWdpbkNvbmZpZ1tdLCBtb2R1bGU6IHN0cmluZywgbmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IGFuc3dlciA9IGF3YWl0IGN0eC5jbWQuaW5xdWlyZXIucHJvbXB0KHByb21wdHMpXG4gIGNvbnN0IGNvbmZpZ05hbWUgPVxuICAgIG1vZHVsZSA9PT0gJ3VwbG9hZGVyJ1xuICAgICAgPyBgcGljQmVkLiR7bmFtZX1gXG4gICAgICA6IG1vZHVsZSA9PT0gJ3RyYW5zZm9ybWVyJ1xuICAgICAgICA/IGB0cmFuc2Zvcm1lci4ke25hbWV9YFxuICAgICAgICA6IG1vZHVsZSA9PT0gJ2J1aWxkaW4nXG4gICAgICAgICAgPyBgYnVpbGRJbi4ke25hbWV9YFxuICAgICAgICAgIDogbmFtZVxuICBjdHguc2F2ZUNvbmZpZyh7XG4gICAgW2NvbmZpZ05hbWVdOiBhbnN3ZXJcbiAgfSlcbiAgaWYgKG1vZHVsZSA9PT0gJ3VwbG9hZGVyJykge1xuICAgIGN0eC5zYXZlQ29uZmlnKHtcbiAgICAgICdwaWNCZWQuY3VycmVudCc6IG5hbWUsXG4gICAgICAncGljQmVkLnVwbG9hZGVyJzogbmFtZVxuICAgIH0pXG4gIH0gZWxzZSBpZiAobW9kdWxlID09PSAndHJhbnNmb3JtZXInKSB7XG4gICAgY3R4LnNhdmVDb25maWcoe1xuICAgICAgJ3BpY0JlZC50cmFuc2Zvcm1lcic6IG5hbWVcbiAgICB9KVxuICB9XG59XG5cbmNvbnN0IHNldHRpbmcgPSB7XG4gIGhhbmRsZTogKGN0eDogSVBpY0dvKSA9PiB7XG4gICAgY29uc3QgY21kID0gY3R4LmNtZFxuICAgIGNtZC5wcm9ncmFtXG4gICAgICAuY29tbWFuZCgnc2V0JylcbiAgICAgIC5hbGlhcygnY29uZmlnJylcbiAgICAgIC5hcmd1bWVudHMoJzxtb2R1bGU+IFtuYW1lXScpXG4gICAgICAuZGVzY3JpcHRpb24oJ2NvbmZpZ3VyZSBjb25maWcgb2YgcGljZ28gbW9kdWxlcywgdXBsb2FkZXJ8dHJhbnNmb3JtZXJ8cGx1Z2lufGJ1aWxkaW4nKVxuICAgICAgLmFjdGlvbigobW9kdWxlOiBzdHJpbmcsIG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICA7KGFzeW5jICgpID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gLy8gbG9hZCB0aGlyZC1wYXJ0eSBwbHVnaW5zXG4gICAgICAgICAgICAvLyBhd2FpdCBjdHgucGx1Z2luTG9hZGVyLmxvYWQoKVxuICAgICAgICAgICAgLy8gaWYgYSBtb2R1bGUgaXMgc3BlY2lmaWMsIHRoZW4ganVzdCBzZXQgdGhpcyBvcHRpb24gaW4gY29uZmlnXG4gICAgICAgICAgICBzd2l0Y2ggKG1vZHVsZSkge1xuICAgICAgICAgICAgICBjYXNlICdidWlsZGluJzpcbiAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gJ2NvbXByZXNzJykge1xuICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ29uZmlnKGN0eCwgY29tcHJlc3MuY29uZmlnKGN0eCksIG1vZHVsZSwgbmFtZSlcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICd3YXRlcm1hcmsnKSB7XG4gICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCB3YXRlcm1hcmsuY29uZmlnKGN0eCksIG1vZHVsZSwgbmFtZSlcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdyZW5hbWUnKSB7XG4gICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCByZW5hbWUuY29uZmlnKGN0eCksIG1vZHVsZSwgbmFtZSlcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcHJvbXB0cyA9IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdsaXN0JyxcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnYnVpbGRpbicsXG4gICAgICAgICAgICAgICAgICAgICAgY2hvaWNlczogWydjb21wcmVzcycsICd3YXRlcm1hcmsnLCAncmVuYW1lJ10sXG4gICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ0Nob29zZSBhIGJ1aWxkaW4gbW9kdWxlJ1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICBjb25zdCBhbnN3ZXIgPSBhd2FpdCBjdHguY21kLmlucXVpcmVyLnByb21wdDxJU3RyaW5nS2V5TWFwPGFueT4+KHByb21wdHMpXG4gICAgICAgICAgICAgICAgICBpZiAoYW5zd2VyLmJ1aWxkaW4gPT09ICdjb21wcmVzcycpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ29uZmlnKGN0eCwgY29tcHJlc3MuY29uZmlnKGN0eCksIG1vZHVsZSwgYW5zd2VyLmJ1aWxkaW4pXG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFuc3dlci5idWlsZGluID09PSAnd2F0ZXJtYXJrJykge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCB3YXRlcm1hcmsuY29uZmlnKGN0eCksIG1vZHVsZSwgYW5zd2VyLmJ1aWxkaW4pXG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFuc3dlci5idWlsZGluID09PSAncmVuYW1lJykge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCByZW5hbWUuY29uZmlnKGN0eCksIG1vZHVsZSwgYW5zd2VyLmJ1aWxkaW4pXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgJ3VwbG9hZGVyJzpcbiAgICAgICAgICAgICAgY2FzZSAndHJhbnNmb3JtZXInOlxuICAgICAgICAgICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gY3R4LmhlbHBlclttb2R1bGVdLmdldChuYW1lKVxuICAgICAgICAgICAgICAgICAgaWYgKCFpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eC5sb2cuZXJyb3IoYE5vICR7bW9kdWxlfSBuYW1lZCAke25hbWV9YClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpZiAoaXRlbS5jb25maWcpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ29uZmlnKGN0eCwgaXRlbS5jb25maWcoY3R4KSwgbW9kdWxlLCBuYW1lKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBwcm9tcHRzID0gW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2xpc3QnLFxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGAke21vZHVsZX1gLFxuICAgICAgICAgICAgICAgICAgICAgIGNob2ljZXM6IGN0eC5oZWxwZXJbbW9kdWxlXS5nZXRJZExpc3QoKSxcbiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgQ2hvb3NlIGEobikgJHttb2R1bGV9YFxuICAgICAgICAgICAgICAgICAgICAgIC8vIGRlZmF1bHQ6IGN0eC5nZXRDb25maWcoJ3BpY0JlZC51cGxvYWRlcicpIHx8IGN0eC5nZXRDb25maWcoJ3BpY0JlZC5jdXJyZW50JylcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgY29uc3QgYW5zd2VyID0gYXdhaXQgY3R4LmNtZC5pbnF1aXJlci5wcm9tcHQ8SVN0cmluZ0tleU1hcDxhbnk+Pihwcm9tcHRzKVxuICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGN0eC5oZWxwZXJbbW9kdWxlXS5nZXQoYW5zd2VyW21vZHVsZV0pXG4gICAgICAgICAgICAgICAgICBpZiAoaXRlbT8uY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNvbmZpZyhjdHgsIGl0ZW0uY29uZmlnKGN0eCksIG1vZHVsZSwgYW5zd2VyW21vZHVsZV0pXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIGNhc2UgJ3BsdWdpbic6XG4gICAgICAgICAgICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgIGlmICghbmFtZS5pbmNsdWRlcygncGljZ28tcGx1Z2luLScpKSB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWUgPSBgcGljZ28tcGx1Z2luLSR7bmFtZX1gXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoY3R4LmdldENvbmZpZygncGljZ29QbHVnaW5zJykpLmluY2x1ZGVzKG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjdHgucGx1Z2luTG9hZGVyLmdldFBsdWdpbihuYW1lKT8uY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ29uZmlnKGN0eCwgY3R4LnBsdWdpbkxvYWRlci5nZXRQbHVnaW4obmFtZSkhLmNvbmZpZyEoY3R4KSwgJ3BsdWdpbicsIG5hbWUpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eC5sb2cuZXJyb3IoYE5vIHBsdWdpbiBuYW1lZCAke25hbWV9YClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHByb21wdHMgPSBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnbGlzdCcsXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3BsdWdpbicsXG4gICAgICAgICAgICAgICAgICAgICAgY2hvaWNlczogY3R4LnBsdWdpbkxvYWRlci5nZXRGdWxsTGlzdCgpLFxuICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdDaG9vc2UgYSBwbHVnaW4nXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgIGNvbnN0IGFuc3dlciA9IGF3YWl0IGN0eC5jbWQuaW5xdWlyZXIucHJvbXB0PGFueT4ocHJvbXB0cylcbiAgICAgICAgICAgICAgICAgIGlmIChjdHgucGx1Z2luTG9hZGVyLmdldFBsdWdpbihhbnN3ZXIucGx1Z2luKT8uY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNvbmZpZyhcbiAgICAgICAgICAgICAgICAgICAgICBjdHgsXG4gICAgICAgICAgICAgICAgICAgICAgY3R4LnBsdWdpbkxvYWRlci5nZXRQbHVnaW4oYW5zd2VyLnBsdWdpbikhLmNvbmZpZyEoY3R4KSxcbiAgICAgICAgICAgICAgICAgICAgICAncGx1Z2luJyxcbiAgICAgICAgICAgICAgICAgICAgICBhbnN3ZXIucGx1Z2luXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBjdHgubG9nLndhcm4oYE5vIG1vZHVsZSBuYW1lZCAke21vZHVsZX1gKVxuICAgICAgICAgICAgICAgIGN0eC5sb2cud2FybignQXZhaWxhYmxlIG1vZHVsZXMgYXJlIHVwbG9hZGVyfHRyYW5zZm9ybWVyfHBsdWdpbnxidWlsZGluJylcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN0eC5sb2cuc3VjY2VzcygnQ29uZmlndXJlIGNvbmZpZyBzdWNjZXNzZnVsbHkhJylcbiAgICAgICAgICAgIGlmIChtb2R1bGUgPT09ICdwbHVnaW4nKSB7XG4gICAgICAgICAgICAgIGN0eC5sb2cuaW5mbyhcIklmIHlvdSB3YW50IHRvIHVzZSB0aGlzIGNvbmZpZywgcGxlYXNlIHJ1biAncGljZ28gdXNlIHBsdWdpbnMnXCIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgICBjdHgubG9nLmVycm9yKGUpXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5hcmd2LmluY2x1ZGVzKCctLWRlYnVnJykpIHtcbiAgICAgICAgICAgICAgdGhyb3cgZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSkoKS5jYXRjaChlID0+IHtcbiAgICAgICAgICBjdHgubG9nLmVycm9yKGUpXG4gICAgICAgIH0pXG4gICAgICB9KVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNldHRpbmdcbiIsImltcG9ydCB7IElQaWNHbywgSVBsdWdpbiwgVW5kZWZpbmFibGUsIElDTElDb25maWdzLCBJU3RyaW5nS2V5TWFwIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5cbmNvbnN0IHVzZTogSVBsdWdpbiA9IHtcbiAgaGFuZGxlOiBhc3luYyAoY3R4OiBJUGljR28pID0+IHtcbiAgICBjb25zdCBjbWQgPSBjdHguY21kXG4gICAgY21kLnByb2dyYW1cbiAgICAgIC5jb21tYW5kKCd1c2UnKVxuICAgICAgLmFyZ3VtZW50cygnW21vZHVsZV0nKVxuICAgICAgLmRlc2NyaXB0aW9uKCd1c2UgbW9kdWxlcyBvZiBwaWNnbycpXG4gICAgICAuYWN0aW9uKChtb2R1bGU6IHN0cmluZykgPT4ge1xuICAgICAgICA7KGFzeW5jICgpID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IHByb21wdHM6IGFueVtdID0gW11cbiAgICAgICAgICAgIGNvbnN0IGNvbmZpZzogSUNMSUNvbmZpZ3MgPSB7XG4gICAgICAgICAgICAgIHVwbG9hZGVyOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2xpc3QnLFxuICAgICAgICAgICAgICAgIG5hbWU6ICd1cGxvYWRlcicsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1VzZSBhbiB1cGxvYWRlcicsXG4gICAgICAgICAgICAgICAgY2hvaWNlczogY3R4LmhlbHBlci51cGxvYWRlci5nZXRJZExpc3QoKSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBjdHguZ2V0Q29uZmlnKCdwaWNCZWQudXBsb2FkZXInKSB8fCBjdHguZ2V0Q29uZmlnKCdwaWNCZWQuY3VycmVudCcpIHx8ICdzbW1zJ1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB0cmFuc2Zvcm1lcjoge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdsaXN0JyxcbiAgICAgICAgICAgICAgICBuYW1lOiAndHJhbnNmb3JtZXInLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdVc2UgYSB0cmFuc2Zvcm1lcicsXG4gICAgICAgICAgICAgICAgY2hvaWNlczogY3R4LmhlbHBlci50cmFuc2Zvcm1lci5nZXRJZExpc3QoKSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdwaWNCZWQudHJhbnNmb3JtZXInKSB8fCAncGF0aCdcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgcGx1Z2luczoge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdjaGVja2JveCcsXG4gICAgICAgICAgICAgICAgbmFtZTogJ3BsdWdpbnMnLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdVc2UgcGx1Z2lucycsXG4gICAgICAgICAgICAgICAgY2hvaWNlczogY3R4LnBsdWdpbkxvYWRlci5nZXRGdWxsTGlzdCgpLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IE9iamVjdC5rZXlzKGN0eC5nZXRDb25maWcoJ3BpY2dvUGx1Z2lucycpKS5maWx0ZXIoKGl0ZW06IHN0cmluZykgPT5cbiAgICAgICAgICAgICAgICAgIGN0eC5nZXRDb25maWcoYHBpY2dvUGx1Z2lucy4ke2l0ZW19YClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGlmIGFuIG9wdGlvbiBpcyBzcGVjaWZpYywgdGhlbiBqdXN0IHNldCB0aGlzIG9wdGlvbiBpbiBjb25maWdcbiAgICAgICAgICAgIGlmIChtb2R1bGUpIHtcbiAgICAgICAgICAgICAgaWYgKGNvbmZpZ1ttb2R1bGVdKSB7XG4gICAgICAgICAgICAgICAgcHJvbXB0cy5wdXNoKGNvbmZpZ1ttb2R1bGVdKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGN0eC5sb2cud2FybihgTm8gbW9kdWxlIG5hbWVkICR7bW9kdWxlfWApXG4gICAgICAgICAgICAgICAgY3R4LmxvZy53YXJuKCdBdmFpbGFibGUgbW9kdWxlcyBhcmUgdXBsb2FkZXJ8dHJhbnNmb3JtZXJ8cGx1Z2lucycpXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHByb21wdHMgPSBPYmplY3Qua2V5cyhjb25maWcpLm1hcCgoaXRlbTogc3RyaW5nKSA9PiBjb25maWdbaXRlbV0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhbnN3ZXIgPSBhd2FpdCBjbWQuaW5xdWlyZXIucHJvbXB0PGFueT4ocHJvbXB0cylcblxuICAgICAgICAgICAgLy8gaGFuZGxlIGZvciBwbHVnaW5zIG9wdGlvbiBmcm9tIEFycmF5IHRvIG9iamVjdFxuICAgICAgICAgICAgaWYgKGFuc3dlci5wbHVnaW5zKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHBsdWdpbnMgPSBjdHguZ2V0Q29uZmlnPElTdHJpbmdLZXlNYXA8Ym9vbGVhbj4+KCdwaWNnb1BsdWdpbnMnKVxuICAgICAgICAgICAgICBPYmplY3Qua2V5cyhwbHVnaW5zKS5mb3JFYWNoKChpdGVtOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoYW5zd2VyLnBsdWdpbnMuaW5jbHVkZXMoaXRlbSkpIHtcbiAgICAgICAgICAgICAgICAgIHBsdWdpbnNbaXRlbV0gPSB0cnVlXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHBsdWdpbnNbaXRlbV0gPSBmYWxzZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLy8gc2F2ZSBjb25maWcgZm9yIHBsdWdpbnNcbiAgICAgICAgICAgICAgY3R4LnNhdmVDb25maWcoe1xuICAgICAgICAgICAgICAgIHBpY2dvUGx1Z2luczogcGx1Z2luc1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gc2F2ZSBjb25maWcgZm9yIHVwbG9hZGVyICYgdHJhbnNmb3JtZXJcbiAgICAgICAgICAgIGN0eC5zYXZlQ29uZmlnKHtcbiAgICAgICAgICAgICAgJ3BpY0JlZC5jdXJyZW50JzogYW5zd2VyLnVwbG9hZGVyIHx8IGN0eC5nZXRDb25maWc8c3RyaW5nPigncGljQmVkLmN1cnJlbnQnKSxcbiAgICAgICAgICAgICAgJ3BpY0JlZC51cGxvYWRlcic6IGFuc3dlci51cGxvYWRlciB8fCBjdHguZ2V0Q29uZmlnPHN0cmluZz4oJ3BpY0JlZC5jdXJyZW50JyksXG4gICAgICAgICAgICAgICdwaWNCZWQudHJhbnNmb3JtZXInOiBhbnN3ZXIudHJhbnNmb3JtZXIgfHwgJ3BhdGgnXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgY3R4LmxvZy5zdWNjZXNzKCdDb25maWd1cmUgc2F2ZWQgc3VjY2Vzc2Z1bGx5IScpXG4gICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgICBjdHgubG9nLmVycm9yKGUpXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5hcmd2LmluY2x1ZGVzKCctLWRlYnVnJykpIHtcbiAgICAgICAgICAgICAgdGhyb3cgZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSkoKS5jYXRjaChlID0+IHtcbiAgICAgICAgICBjdHgubG9nLmVycm9yKGUpXG4gICAgICAgIH0pXG4gICAgICB9KVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHVzZVxuIiwiaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5cbmNvbnN0IHByb3h5OiBJUGx1Z2luID0ge1xuICBoYW5kbGU6IChjdHg6IElQaWNHbykgPT4ge1xuICAgIGNvbnN0IGNtZCA9IGN0eC5jbWRcbiAgICBjbWQucHJvZ3JhbS5vcHRpb24oJy1wLCAtLXByb3h5IDx1cmw+JywgJ3NldCBwcm94eSBmb3IgdXBsb2FkaW5nJywgKHByb3h5OiBzdHJpbmcpID0+IHtcbiAgICAgIGN0eC5zZXRDb25maWcoe1xuICAgICAgICAncGljQmVkLnByb3h5JzogcHJveHlcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBwcm94eVxuIiwiaW1wb3J0IG1hdGNoIGZyb20gJ21pbmltYXRjaCdcblxuaW1wb3J0IGZzLCB7IGVuc3VyZURpclN5bmMgfSBmcm9tICdmcy1leHRyYSdcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5pbXBvcnQgZ2xvYmJ5IGZyb20gJ2dsb2JieSdcbmltcG9ydCB7IHJlbmRlciBhcyBlanNSZW5kZXIgfSBmcm9tICdlanMnXG5cbmltcG9ydCB7IElQaWNHbywgSU9wdGlvbnMsIElGaWxlVHJlZSB9IGZyb20gJy4uL3R5cGVzJ1xuXG4vKipcbiAqIEdlbmVyYXRlIHRlbXBsYXRlIGZpbGVzIHRvIGRlc3RpbmF0aW9uIGZpbGVzLlxuICogQHBhcmFtIHtQaWNHb30gY3R4XG4gKiBAcGFyYW0ge0lPcHRpb25zfSBvcHRpb25zXG4gKi9cbmNvbnN0IGdlbmVyYXRlID0gYXN5bmMgKGN0eDogSVBpY0dvLCBvcHRpb25zOiBJT3B0aW9ucyk6IFByb21pc2U8YW55PiA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3Qgb3B0cyA9IGdldE9wdGlvbnMob3B0aW9ucy50bXApXG4gICAgY29uc3Qgc291cmNlID0gcGF0aC5qb2luKG9wdGlvbnMudG1wLCAndGVtcGxhdGUnKVxuICAgIGxldCBhbnN3ZXJzID0ge31cbiAgICBpZiAob3B0cy5wcm9tcHRzICYmIG9wdHMucHJvbXB0cy5sZW5ndGggPiAwKSB7XG4gICAgICBhbnN3ZXJzID0gYXdhaXQgY3R4LmNtZC5pbnF1aXJlci5wcm9tcHQob3B0cy5wcm9tcHRzKVxuICAgIH1cbiAgICBsZXQgX2ZpbGVzOiBzdHJpbmdbXSA9IGF3YWl0IGdsb2JieShbJyoqLyonXSwgeyBjd2Q6IHNvdXJjZSwgZG90OiB0cnVlIH0pIC8vIGdldCBmaWxlcycgbmFtZSBhcnJheVxuICAgIF9maWxlcyA9IF9maWxlcy5maWx0ZXIoKGl0ZW06IHN0cmluZykgPT4ge1xuICAgICAgbGV0IGdsb2IgPSAnJ1xuICAgICAgT2JqZWN0LmtleXMob3B0cy5maWx0ZXJzKS5mb3JFYWNoKChrZXk6IHN0cmluZykgPT4ge1xuICAgICAgICBpZiAobWF0Y2goaXRlbSwga2V5LCB7IGRvdDogdHJ1ZSB9KSkge1xuICAgICAgICAgIGdsb2IgPSBpdGVtXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICBpZiAoZ2xvYikge1xuICAgICAgICAvLyBmaW5kIGEgZmlsdGVyIGV4cHJlc3Npb25cbiAgICAgICAgcmV0dXJuIGZpbHRlcnMoY3R4LCBvcHRzLmZpbHRlcnNbZ2xvYl0sIGFuc3dlcnMpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH0pXG4gICAgaWYgKF9maWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGN0eC5sb2cud2FybignVGVtcGxhdGUgZmlsZXMgbm90IGZvdW5kIScpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY29uc3QgZmlsZXMgPSByZW5kZXIoX2ZpbGVzLCBzb3VyY2UsIGFuc3dlcnMpXG4gICAgd3JpdGVGaWxlVHJlZShvcHRpb25zLmRlc3QsIGZpbGVzKVxuICAgIGlmICh0eXBlb2Ygb3B0cy5jb21wbGV0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgb3B0cy5jb21wbGV0ZSh7IGFuc3dlcnMsIG9wdGlvbnMsIGZpbGVzOiBfZmlsZXMsIGN0eCB9KVxuICAgIH1cbiAgICBpZiAob3B0cy5jb21wbGV0ZU1lc3NhZ2UpIHtcbiAgICAgIGN0eC5sb2cuc3VjY2VzcyhvcHRzLmNvbXBsZXRlTWVzc2FnZSlcbiAgICB9XG4gICAgY3R4LmxvZy5zdWNjZXNzKCdEb25lIScpXG4gIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgIGN0eC5sb2cuZXJyb3IoZSlcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybiB0aGUgZmlsdGVycycgcmVzdWx0XG4gKiBAcGFyYW0gY3R4IFBpY0dvXG4gKiBAcGFyYW0gZXhwIGNvbmRpdGlvbiBleHByZXNzaW9uXG4gKiBAcGFyYW0gZGF0YSBvcHRpb25zIGRhdGFcbiAqL1xuY29uc3QgZmlsdGVycyA9IChjdHg6IElQaWNHbywgZXhwOiBhbnksIGRhdGE6IGFueSk6IGJvb2xlYW4gPT4ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXBsdXMtb3BlcmFuZHMsIG5vLW5ldy1mdW5jLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8taW1wbGllZC1ldmFsXG4gIGNvbnN0IGZuID0gbmV3IEZ1bmN0aW9uKCdkYXRhJywgJ3dpdGggKGRhdGEpIHsgcmV0dXJuICcgKyBleHAgKyAnfScpXG4gIHRyeSB7XG4gICAgcmV0dXJuIGZuKGRhdGEpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjdHgubG9nLmVycm9yKGBFcnJvciB3aGVuIGV2YWx1YXRpbmcgZmlsdGVyIGNvbmRpdGlvbjogJHtKU09OLnN0cmluZ2lmeShleHApfWApXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuLyoqXG4gKiBHZXQgdGVtcGxhdGUgb3B0aW9uc1xuICogQHBhcmFtIHtzdHJpbmd9IHRlbXBsYXRlUGF0aFxuICovXG5jb25zdCBnZXRPcHRpb25zID0gKHRlbXBsYXRlUGF0aDogc3RyaW5nKTogYW55ID0+IHtcbiAgY29uc3Qgb3B0aW9uc1BhdGggPSBwYXRoLmpvaW4odGVtcGxhdGVQYXRoLCAnaW5kZXguanMnKVxuICBpZiAoZnMuZXhpc3RzU3luYyhvcHRpb25zUGF0aCkpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xuICAgIGNvbnN0IG9wdGlvbnMgPSByZXF1aXJlKG9wdGlvbnNQYXRoKVxuICAgIHJldHVybiBvcHRpb25zXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHt9XG4gIH1cbn1cblxuLyoqXG4gKiBSZW5kZXIgZmlsZXMgdG8gYSB2aXJ0dWFsIHRyZWUgb2JqZWN0XG4gKiBAcGFyYW0ge2FycmF5fSBmaWxlc1xuICovXG5jb25zdCByZW5kZXIgPSAoZmlsZXM6IHN0cmluZ1tdLCBzb3VyY2U6IHN0cmluZywgb3B0aW9uczogYW55KTogYW55ID0+IHtcbiAgY29uc3QgZmlsZVRyZWU6IElGaWxlVHJlZSA9IHt9XG4gIGZpbGVzLmZvckVhY2goKGZpbGVQYXRoOiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgICBjb25zdCBmaWxlID0gZnMucmVhZEZpbGVTeW5jKHBhdGguam9pbihzb3VyY2UsIGZpbGVQYXRoKSwgJ3V0ZjgnKVxuICAgIGNvbnN0IGNvbnRlbnQgPSBlanNSZW5kZXIoZmlsZSwgb3B0aW9ucylcbiAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKGNvbnRlbnQpIHx8IC9bXlxcc10vLnRlc3QoY29udGVudCkpIHtcbiAgICAgIGZpbGVUcmVlW2ZpbGVQYXRoXSA9IGNvbnRlbnRcbiAgICB9XG4gIH0pXG4gIHJldHVybiBmaWxlVHJlZVxufVxuXG4vKipcbiAqIFdyaXRlIHJlbmRlcmVkIGZpbGVzJyBjb250ZW50IHRvIHJlYWwgZmlsZVxuICogQHBhcmFtIHtzdHJpbmd9IGRpclxuICogQHBhcmFtIHtvYmplY3R9IGZpbGVzXG4gKi9cbmNvbnN0IHdyaXRlRmlsZVRyZWUgPSAoZGlyOiBzdHJpbmcsIGZpbGVzOiBhbnkpOiB2b2lkID0+IHtcbiAgT2JqZWN0LmtleXMoZmlsZXMpLmZvckVhY2goKG5hbWU6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKGRpciwgbmFtZSlcbiAgICBlbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZShmaWxlUGF0aCkpXG4gICAgZnMud3JpdGVGaWxlU3luYyhmaWxlUGF0aCwgZmlsZXNbbmFtZV0pXG4gIH0pXG59XG5cbmV4cG9ydCB7IGZpbHRlcnMsIGdlbmVyYXRlLCByZW5kZXIsIHdyaXRlRmlsZVRyZWUgfVxuIiwiaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJ1xuaW1wb3J0IGRvd25sb2FkIGZyb20gJ2Rvd25sb2FkLWdpdC1yZXBvJ1xuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ29zJ1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcbmltcG9ydCB7IHN5bmMgfSBmcm9tICdyaW1yYWYnXG5cbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5pdFV0aWxzJ1xuaW1wb3J0IHsgSU9wdGlvbnMsIElQbHVnaW4sIElQaWNHbyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuXG5jb25zdCBydW4gPSAoY3R4OiBJUGljR28sIG9wdGlvbnM6IElPcHRpb25zKTogdm9pZCA9PiB7XG4gIC8vIGNvbnN0IG5hbWUgPSBvcHRpb25zLmluUGxhY2UgPyBwYXRoLnJlbGF0aXZlKCcuLi8nLCBwcm9jZXNzLmN3ZCgpKSA6IG9wdGlvbnMucHJvamVjdFxuICBpZiAob3B0aW9ucy5vZmZsaW5lKSB7XG4gICAgLy8gb2ZmbGluZSBtb2RlXG4gICAgaWYgKGZzLmV4aXN0c1N5bmMob3B0aW9ucy50ZW1wbGF0ZSkpIHtcbiAgICAgIGdlbmVyYXRlKGN0eCwgb3B0aW9ucykuY2F0Y2goZSA9PiB7XG4gICAgICAgIGN0eC5sb2cuZXJyb3IoZSlcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGN0eC5sb2cuZXJyb3IoYExvY2FsIHRlbXBsYXRlICR7b3B0aW9ucy50ZW1wbGF0ZX0gbm90IGZvdW5kYClcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gb25saW5lIG1vZGVcbiAgICBvcHRpb25zLnRlbXBsYXRlID0gIW9wdGlvbnMuaGFzU2xhc2hcbiAgICAgID8gJ1BpY0dvL3BpY2dvLXRlbXBsYXRlLScgKyBvcHRpb25zLnRlbXBsYXRlIC8vIG9mZmljaWFsIHRlbXBsYXRlXG4gICAgICA6IG9wdGlvbnMudGVtcGxhdGVcbiAgICBkb3dubG9hZEFuZEdlbmVyYXRlKGN0eCwgb3B0aW9ucylcbiAgfVxufVxuXG4vKipcbiAqIGRvd25sb2FkIHRlbXBsYXRlICYgZ2VuZXJhdGVcbiAqIEBwYXJhbSB7IFBpY0dvIH0gY3R4XG4gKiBAcGFyYW0geyBJT3B0aW9ucyB9IG9wdGlvbnNcbiAqL1xuY29uc3QgZG93bmxvYWRBbmRHZW5lcmF0ZSA9IChjdHg6IElQaWNHbywgb3B0aW9uczogSU9wdGlvbnMpOiB2b2lkID0+IHtcbiAgaWYgKGZzLmV4aXN0c1N5bmMob3B0aW9ucy50bXApKSB7XG4gICAgc3luYyhvcHRpb25zLnRtcClcbiAgfVxuICBjdHgubG9nLmluZm8oJ1RlbXBsYXRlIGZpbGVzIGFyZSBkb3dubG9hZGluZy4uLicpXG4gIGRvd25sb2FkKG9wdGlvbnMudGVtcGxhdGUsIG9wdGlvbnMudG1wLCB7IGNsb25lOiBvcHRpb25zLmNsb25lIH0sIChlcnI6IEVycm9yKSA9PiB7XG4gICAgaWYgKGVycikge1xuICAgICAgY3R4LmxvZy5lcnJvcihlcnIpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY3R4LmxvZy5zdWNjZXNzKCdUZW1wbGF0ZSBmaWxlcyBhcmUgZG93bmxvYWRlZCEnKVxuICAgIGdlbmVyYXRlKGN0eCwgb3B0aW9ucykuY2F0Y2goZSA9PiB7XG4gICAgICBjdHgubG9nLmVycm9yKGUpXG4gICAgfSlcbiAgfSlcbn1cblxuY29uc3QgaW5pdDogSVBsdWdpbiA9IHtcbiAgaGFuZGxlOiBhc3luYyAoY3R4OiBJUGljR28pID0+IHtcbiAgICBjb25zdCBjbWQgPSBjdHguY21kXG4gICAgY21kLnByb2dyYW1cbiAgICAgIC5jb21tYW5kKCdpbml0JylcbiAgICAgIC5hcmd1bWVudHMoJzx0ZW1wbGF0ZT4gW3Byb2plY3RdJylcbiAgICAgIC5vcHRpb24oJy0tY2xvbmUnLCAndXNlIGdpdCBjbG9uZScpXG4gICAgICAub3B0aW9uKCctLW9mZmxpbmUnLCAndXNlIGNhY2hlZCB0ZW1wbGF0ZScpXG4gICAgICAuZGVzY3JpcHRpb24oXCJjcmVhdGUgcGljZ28gcGx1Z2luJ3MgZGV2ZWxvcG1lbnQgdGVtcGxhdGVzXCIpXG4gICAgICAuYWN0aW9uKCh0ZW1wbGF0ZTogc3RyaW5nLCBwcm9qZWN0OiBzdHJpbmcsIHByb2dyYW06IGFueSkgPT4ge1xuICAgICAgICA7KGFzeW5jICgpID0+IHtcbiAgICAgICAgICAvLyBUaGFua3MgdG8gdnVlLWNsaSBpbml0OiBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLWNsaS9ibG9iL21hc3Rlci9iaW4vdnVlLWluaXRcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgaGFzU2xhc2ggPSB0ZW1wbGF0ZS5pbmNsdWRlcygnLycpXG4gICAgICAgICAgICBjb25zdCBpblBsYWNlID0gIXByb2plY3QgfHwgcHJvamVjdCA9PT0gJy4nXG4gICAgICAgICAgICBjb25zdCBkZXN0ID0gcGF0aC5yZXNvbHZlKHByb2plY3QgfHwgJy4nKVxuICAgICAgICAgICAgY29uc3QgY2xvbmUgPSBwcm9ncmFtLmNsb25lIHx8IGZhbHNlXG4gICAgICAgICAgICBjb25zdCBvZmZsaW5lID0gcHJvZ3JhbS5vZmZsaW5lIHx8IGZhbHNlXG4gICAgICAgICAgICBjb25zdCB0bXAgPSBwYXRoLmpvaW4oaG9tZWRpcigpLCAnLnBpY2xpc3QvdGVtcGxhdGVzJywgdGVtcGxhdGUucmVwbGFjZSgvWy86XS9nLCAnLScpKSAvLyBmb3IgY2FjaGluZyB0ZW1wbGF0ZVxuXG4gICAgICAgICAgICBpZiAocHJvZ3JhbS5vZmZsaW5lKSB7XG4gICAgICAgICAgICAgIHRlbXBsYXRlID0gdG1wXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgIHRlbXBsYXRlLFxuICAgICAgICAgICAgICBwcm9qZWN0LFxuICAgICAgICAgICAgICBoYXNTbGFzaCxcbiAgICAgICAgICAgICAgaW5QbGFjZSxcbiAgICAgICAgICAgICAgZGVzdCxcbiAgICAgICAgICAgICAgY2xvbmUsXG4gICAgICAgICAgICAgIHRtcCxcbiAgICAgICAgICAgICAgb2ZmbGluZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBjaGVjayBpZiBwcm9qZWN0IGlzIGVtcHR5IG9yIGV4aXN0XG4gICAgICAgICAgICBpZiAoaW5QbGFjZSB8fCBmcy5leGlzdHNTeW5jKGRlc3QpKSB7XG4gICAgICAgICAgICAgIGF3YWl0IGN0eC5jbWQuaW5xdWlyZXJcbiAgICAgICAgICAgICAgICAucHJvbXB0KFtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBpblBsYWNlID8gJ0dlbmVyYXRlIHByb2plY3QgaW4gY3VycmVudCBkaXJlY3Rvcnk/JyA6ICdUYXJnZXQgZGlyZWN0b3J5IGV4aXN0cy4gQ29udGludWU/JyxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ29rJ1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgLnRoZW4oKGFuc3dlcjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoYW5zd2VyLm9rKSB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bihjdHgsIG9wdGlvbnMpXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIHByb2plY3QgaXMgZ2l2ZW5cbiAgICAgICAgICAgICAgcnVuKGN0eCwgb3B0aW9ucylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICAgIGN0eC5sb2cuZXJyb3IoZSlcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmFyZ3YuaW5jbHVkZXMoJy0tZGVidWcnKSkge1xuICAgICAgICAgICAgICB0aHJvdyBlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KSgpLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIGN0eC5sb2cuZXJyb3IoZSlcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgICAub24oJy0taGVscCcsICgpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coKVxuICAgICAgICBjb25zb2xlLmxvZygnRXhhbXBsZXM6JylcbiAgICAgICAgY29uc29sZS5sb2coKVxuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgICMgY3JlYXRlIGEgbmV3IHByb2plY3Qgd2l0aCBhbiBvZmZpY2lhbCB0ZW1wbGF0ZScpKVxuICAgICAgICBjb25zb2xlLmxvZygnICAkIHBpY2dvIGluaXQgcGx1Z2luIG15LXByb2plY3QnKVxuICAgICAgICBjb25zb2xlLmxvZygpXG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJyAgIyBjcmVhdGUgYSBuZXcgcHJvamVjdCBzdHJhaWdodCBmcm9tIGEgZ2l0aHViIHRlbXBsYXRlJykpXG4gICAgICAgIGNvbnNvbGUubG9nKCcgICQgcGljZ28gaW5pdCB1c2VybmFtZS9yZXBvIG15LXByb2plY3QnKVxuICAgICAgICBjb25zb2xlLmxvZygpXG4gICAgICB9KVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGluaXRcbiIsImltcG9ydCB7IElQbHVnaW4sIElQaWNHbywgSVN0cmluZ0tleU1hcCB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuXG5jb25zdCBpMThuOiBJUGx1Z2luID0ge1xuICBoYW5kbGU6IChjdHg6IElQaWNHbykgPT4ge1xuICAgIGNvbnN0IGNtZCA9IGN0eC5jbWRcbiAgICBjbWQucHJvZ3JhbVxuICAgICAgLmNvbW1hbmQoJ2kxOG4nKVxuICAgICAgLmFyZ3VtZW50cygnW2xhbmddJylcbiAgICAgIC5kZXNjcmlwdGlvbignY2hhbmdlIGxhbmd1YWdlLCB6aC1DTiwgemgtVFcsIGVuJylcbiAgICAgIC5hY3Rpb24oYXN5bmMgKGxhbmc6IHN0cmluZyA9ICcnKSA9PiB7XG4gICAgICAgIGNvbnN0IGxpc3QgPSBjdHguaTE4bi5nZXRMYW5ndWFnZUxpc3QoKVxuICAgICAgICBpZiAoIWxhbmcpIHtcbiAgICAgICAgICBjb25zdCBwcm9tcHRzID0gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiAnbGlzdCcsXG4gICAgICAgICAgICAgIG5hbWU6ICdpMThuJyxcbiAgICAgICAgICAgICAgY2hvaWNlczogbGlzdCxcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ0Nob29zZSBhIGxhbmd1YWdlJyxcbiAgICAgICAgICAgICAgZGVmYXVsdDogY3R4LmdldENvbmZpZygnc2V0dGluZ3MubGFuZ3VhZ2UnKSB8fCAnemgtQ04nXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICAgIGNvbnN0IGFuc3dlciA9IGF3YWl0IGN0eC5jbWQuaW5xdWlyZXIucHJvbXB0PElTdHJpbmdLZXlNYXA8c3RyaW5nPj4ocHJvbXB0cylcbiAgICAgICAgICBsYW5nID0gYW5zd2VyLmkxOG5cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWxpc3QuaW5jbHVkZXMobGFuZykpIHtcbiAgICAgICAgICBjdHgubG9nLndhcm4oJ05vIHN1Y2ggbGFuZ3VhZ2UnKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGN0eC5pMThuLnNldExhbmd1YWdlKGxhbmcpXG4gICAgICAgICAgY3R4LmxvZy5zdWNjZXNzKGBMYW5ndWFnZSBzZXQgdG8gJHtsYW5nfWApXG4gICAgICAgIH1cbiAgICAgIH0pXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgaTE4blxuIiwiaW1wb3J0IHsgSVBsdWdpbiwgSUxpZmVjeWNsZVBsdWdpbnMgfSBmcm9tICcuLi90eXBlcydcblxuZXhwb3J0IGNsYXNzIExpZmVjeWNsZVBsdWdpbnMgaW1wbGVtZW50cyBJTGlmZWN5Y2xlUGx1Z2lucyB7XG4gIHN0YXRpYyBjdXJyZW50UGx1Z2luOiBzdHJpbmcgfCBudWxsXG4gIHByaXZhdGUgcmVhZG9ubHkgbGlzdDogTWFwPHN0cmluZywgSVBsdWdpbj5cbiAgcHJpdmF0ZSByZWFkb25seSBwbHVnaW5JZE1hcDogTWFwPHN0cmluZywgc3RyaW5nW10+XG4gIHByaXZhdGUgcmVhZG9ubHkgbmFtZTogc3RyaW5nXG5cbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5uYW1lID0gbmFtZVxuICAgIHRoaXMubGlzdCA9IG5ldyBNYXAoKVxuICAgIHRoaXMucGx1Z2luSWRNYXAgPSBuZXcgTWFwKClcbiAgfVxuXG4gIHJlZ2lzdGVyKGlkOiBzdHJpbmcsIHBsdWdpbjogSVBsdWdpbik6IHZvaWQge1xuICAgIGlmICghaWQpIHRocm93IG5ldyBUeXBlRXJyb3IoJ2lkIGlzIHJlcXVpcmVkIScpXG4gICAgaWYgKHR5cGVvZiBwbHVnaW4uaGFuZGxlICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdwbHVnaW4uaGFuZGxlIG11c3QgYmUgYSBmdW5jdGlvbiEnKVxuICAgIGlmICh0aGlzLmxpc3QuaGFzKGlkKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0aGlzLm5hbWV9IGR1cGxpY2F0ZSBpZDogJHtpZH0hYClcbiAgICB0aGlzLmxpc3Quc2V0KGlkLCBwbHVnaW4pXG4gICAgaWYgKExpZmVjeWNsZVBsdWdpbnMuY3VycmVudFBsdWdpbikge1xuICAgICAgaWYgKHRoaXMucGx1Z2luSWRNYXAuaGFzKExpZmVjeWNsZVBsdWdpbnMuY3VycmVudFBsdWdpbikpIHtcbiAgICAgICAgdGhpcy5wbHVnaW5JZE1hcC5nZXQoTGlmZWN5Y2xlUGx1Z2lucy5jdXJyZW50UGx1Z2luKT8ucHVzaChpZClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucGx1Z2luSWRNYXAuc2V0KExpZmVjeWNsZVBsdWdpbnMuY3VycmVudFBsdWdpbiwgW2lkXSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB1bnJlZ2lzdGVyKHBsdWdpbk5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLnBsdWdpbklkTWFwLmhhcyhwbHVnaW5OYW1lKSkge1xuICAgICAgY29uc3QgcGx1Z2luTGlzdCA9IHRoaXMucGx1Z2luSWRNYXAuZ2V0KHBsdWdpbk5hbWUpXG4gICAgICBwbHVnaW5MaXN0Py5mb3JFYWNoKChwbHVnaW46IHN0cmluZykgPT4ge1xuICAgICAgICB0aGlzLmxpc3QuZGVsZXRlKHBsdWdpbilcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZ2V0TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm5hbWVcbiAgfVxuXG4gIGdldChpZDogc3RyaW5nKTogSVBsdWdpbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMubGlzdC5nZXQoaWQpXG4gIH1cblxuICBnZXRMaXN0KCk6IElQbHVnaW5bXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLmxpc3QudmFsdWVzKCldXG4gIH1cblxuICBnZXRJZExpc3QoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5saXN0LmtleXMoKV1cbiAgfVxufVxuXG5leHBvcnQgY29uc3Qgc2V0Q3VycmVudFBsdWdpbk5hbWUgPSAobmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGwpOiB2b2lkID0+IHtcbiAgTGlmZWN5Y2xlUGx1Z2lucy5jdXJyZW50UGx1Z2luID0gbmFtZVxufVxuXG5leHBvcnQgY29uc3QgZ2V0Q3VycmVudFBsdWdpbk5hbWUgPSAoKTogc3RyaW5nIHwgbnVsbCA9PiB7XG4gIHJldHVybiBMaWZlY3ljbGVQbHVnaW5zLmN1cnJlbnRQbHVnaW5cbn1cblxuZXhwb3J0IGRlZmF1bHQgTGlmZWN5Y2xlUGx1Z2luc1xuIiwiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW1pc3VzZWQtcHJvbWlzZXMgKi9cbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInXG5pbXBvcnQgaW5xdWlyZXIsIHsgSW5xdWlyZXIgfSBmcm9tICdpbnF1aXJlcidcblxuaW1wb3J0IGNvbW1hbmRlcnMgZnJvbSAnLi4vcGx1Z2lucy9jb21tYW5kZXInXG5pbXBvcnQgeyBnZXRDdXJyZW50UGx1Z2luTmFtZSB9IGZyb20gJy4vTGlmZWN5Y2xlUGx1Z2lucydcblxuaW1wb3J0IHsgSVBsdWdpbiwgSUNvbW1hbmRlciwgSVBpY0dvIH0gZnJvbSAnLi4vdHlwZXMnXG5cbmV4cG9ydCBjbGFzcyBDb21tYW5kZXIgaW1wbGVtZW50cyBJQ29tbWFuZGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBuYW1lID0gJ2NvbW1hbmRlcidcbiAgc3RhdGljIGN1cnJlbnRQbHVnaW46IHN0cmluZyB8IG51bGxcbiAgcHJpdmF0ZSByZWFkb25seSBsaXN0ID0gbmV3IE1hcDxzdHJpbmcsIElQbHVnaW4+KClcbiAgcHJpdmF0ZSByZWFkb25seSBwbHVnaW5JZE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmdbXT4oKVxuICBwcml2YXRlIHJlYWRvbmx5IGN0eDogSVBpY0dvXG5cbiAgcHJvZ3JhbTogQ29tbWFuZFxuICBpbnF1aXJlcjogSW5xdWlyZXJcblxuICBjb25zdHJ1Y3RvcihjdHg6IElQaWNHbykge1xuICAgIHRoaXMucHJvZ3JhbSA9IG5ldyBDb21tYW5kKClcbiAgICB0aGlzLmlucXVpcmVyID0gaW5xdWlyZXJcbiAgICB0aGlzLmN0eCA9IGN0eFxuICB9XG5cbiAgZ2V0TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm5hbWVcbiAgfVxuXG4gIGluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5wcm9ncmFtXG4gICAgICAudmVyc2lvbihwcm9jZXNzLmVudi5QSUNHT19WRVJTSU9OLCAnLXYsIC0tdmVyc2lvbicpXG4gICAgICAub3B0aW9uKCctZCwgLS1kZWJ1ZycsICdkZWJ1ZyBtb2RlJywgKCkgPT4ge1xuICAgICAgICB0aGlzLmN0eC5zZXRDb25maWcoe1xuICAgICAgICAgIGRlYnVnOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgICAgLm9wdGlvbignLXMsIC0tc2lsZW50JywgJ3NpbGVudCBtb2RlJywgKCkgPT4ge1xuICAgICAgICB0aGlzLmN0eC5zZXRDb25maWcoe1xuICAgICAgICAgIHNpbGVudDogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICAgIC5vbignY29tbWFuZDoqJywgKCkgPT4ge1xuICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoXG4gICAgICAgICAgYEludmFsaWQgY29tbWFuZDogJHt0aGlzLnByb2dyYW0uYXJncy5qb2luKCcgJyl9XFxuU2VlIC0taGVscCBmb3IgYSBsaXN0IG9mIGF2YWlsYWJsZSBjb21tYW5kcy5gXG4gICAgICAgIClcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpXG4gICAgICB9KVxuXG4gICAgLy8gYnVpbHQtaW4gY29tbWFuZHNcbiAgICBjb21tYW5kZXJzKHRoaXMuY3R4KVxuICB9XG5cbiAgcmVnaXN0ZXIoaWQ6IHN0cmluZywgcGx1Z2luOiBJUGx1Z2luKTogdm9pZCB7XG4gICAgaWYgKCFpZCkgdGhyb3cgbmV3IFR5cGVFcnJvcignbmFtZSBpcyByZXF1aXJlZCEnKVxuICAgIGlmICh0eXBlb2YgcGx1Z2luLmhhbmRsZSAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgbmV3IFR5cGVFcnJvcigncGx1Z2luLmhhbmRsZSBtdXN0IGJlIGEgZnVuY3Rpb24hJylcbiAgICBpZiAodGhpcy5saXN0LmhhcyhpZCkpIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7dGhpcy5uYW1lfSBwbHVnaW4gZHVwbGljYXRlIGlkOiAke2lkfSFgKVxuICAgIHRoaXMubGlzdC5zZXQoaWQsIHBsdWdpbilcbiAgICBjb25zdCBjdXJyZW50UGx1Z2luTmFtZSA9IGdldEN1cnJlbnRQbHVnaW5OYW1lKClcbiAgICBpZiAoY3VycmVudFBsdWdpbk5hbWUgIT09IG51bGwpIHtcbiAgICAgIGlmICh0aGlzLnBsdWdpbklkTWFwLmhhcyhjdXJyZW50UGx1Z2luTmFtZSkpIHtcbiAgICAgICAgdGhpcy5wbHVnaW5JZE1hcC5nZXQoY3VycmVudFBsdWdpbk5hbWUpPy5wdXNoKGlkKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wbHVnaW5JZE1hcC5zZXQoY3VycmVudFBsdWdpbk5hbWUsIFtpZF0pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdW5yZWdpc3RlcihwbHVnaW5OYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wbHVnaW5JZE1hcC5oYXMocGx1Z2luTmFtZSkpIHtcbiAgICAgIGNvbnN0IHBsdWdpbkxpc3QgPSB0aGlzLnBsdWdpbklkTWFwLmdldChwbHVnaW5OYW1lKVxuICAgICAgcGx1Z2luTGlzdD8uZm9yRWFjaCgocGx1Z2luOiBzdHJpbmcpID0+IHtcbiAgICAgICAgdGhpcy5saXN0LmRlbGV0ZShwbHVnaW4pXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGxvYWRDb21tYW5kcygpOiB2b2lkIHtcbiAgICB0aGlzLmdldExpc3QoKS5mb3JFYWNoKChpdGVtOiBJUGx1Z2luKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBpdGVtLmhhbmRsZSh0aGlzLmN0eClcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZSlcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZ2V0KGlkOiBzdHJpbmcpOiBJUGx1Z2luIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5saXN0LmdldChpZClcbiAgfVxuXG4gIGdldExpc3QoKTogSVBsdWdpbltdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMubGlzdC52YWx1ZXMoKV1cbiAgfVxuXG4gIGdldElkTGlzdCgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLmxpc3Qua2V5cygpXVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbW1hbmRlclxuIiwiaW1wb3J0IHBsdWdpbkhhbmRsZXIgZnJvbSAnLi9wbHVnaW5IYW5kbGVyJ1xuaW1wb3J0IGNvbmZpZyBmcm9tICcuL2NvbmZpZydcbmltcG9ydCB1cGxvYWQgZnJvbSAnLi91cGxvYWQnXG5pbXBvcnQgc2V0dGluZyBmcm9tICcuL3NldHRpbmcnXG5pbXBvcnQgdXNlIGZyb20gJy4vdXNlJ1xuaW1wb3J0IHByb3h5IGZyb20gJy4vcHJveHknXG5pbXBvcnQgaW5pdCBmcm9tICcuL2luaXQnXG5pbXBvcnQgaTE4biBmcm9tICcuL2kxOG4nXG5cbmltcG9ydCB7IElQaWNHbyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuXG5leHBvcnQgZGVmYXVsdCAoY3R4OiBJUGljR28pOiB2b2lkID0+IHtcbiAgY3R4LmNtZC5yZWdpc3RlcigncGx1Z2luSGFuZGxlcicsIHBsdWdpbkhhbmRsZXIpXG4gIGN0eC5jbWQucmVnaXN0ZXIoJ2NvbmZpZycsIGNvbmZpZylcbiAgY3R4LmNtZC5yZWdpc3Rlcignc2V0dGluZycsIHNldHRpbmcpXG4gIGN0eC5jbWQucmVnaXN0ZXIoJ3VwbG9hZCcsIHVwbG9hZClcbiAgY3R4LmNtZC5yZWdpc3RlcigndXNlJywgdXNlKVxuICBjdHguY21kLnJlZ2lzdGVyKCdwcm94eScsIHByb3h5KVxuICBjdHguY21kLnJlZ2lzdGVyKCdpbml0JywgaW5pdClcbiAgY3R4LmNtZC5yZWdpc3RlcignaTE4bicsIGkxOG4pXG59XG4iLCJleHBvcnQgZW51bSBJTG9nVHlwZSB7XG4gIHN1Y2Nlc3MgPSAnc3VjY2VzcycsXG4gIGluZm8gPSAnaW5mbycsXG4gIHdhcm4gPSAnd2FybicsXG4gIGVycm9yID0gJ2Vycm9yJ1xufVxuXG4vKipcbiAqIHRoZXNlIGV2ZW50cyB3aWxsIGJlIGNhdGNoZWQgYnkgdXNlcnNcbiAqL1xuZXhwb3J0IGVudW0gSUJ1aWxkSW5FdmVudCB7XG4gIFVQTE9BRF9QUk9HUkVTUyA9ICd1cGxvYWRQcm9ncmVzcycsXG4gIEZBSUxFRCA9ICdmYWlsZWQnLFxuICBCRUZPUkVfVFJBTlNGT1JNID0gJ2JlZm9yZVRyYW5zZm9ybScsXG4gIEJFRk9SRV9VUExPQUQgPSAnYmVmb3JlVXBsb2FkJyxcbiAgQUZURVJfVVBMT0FEID0gJ2FmdGVyVXBsb2FkJyxcbiAgRklOSVNIRUQgPSAnZmluaXNoZWQnLFxuICBJTlNUQUxMID0gJ2luc3RhbGwnLFxuICBVTklOU1RBTEwgPSAndW5pbnN0YWxsJyxcbiAgVVBEQVRFID0gJ3VwZGF0ZScsXG4gIE5PVElGSUNBVElPTiA9ICdub3RpZmljYXRpb24nXG59XG5cbi8qKlxuICogdGhlc2UgZXZlbnRzIHdpbGwgYmUgY2F0Y2hlZCBvbmx5IGJ5IHBpY2dvXG4gKi9cbmV4cG9ydCBlbnVtIElCdXNFdmVudCB7XG4gIENPTkZJR19DSEFOR0UgPSAnQ09ORklHX0NIQU5HRSdcbn1cbiIsImltcG9ydCBjaGFsayBmcm9tICdjaGFsaydcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcydcbmltcG9ydCBmcywgeyBjcmVhdGVGaWxlU3luYyB9IGZyb20gJ2ZzLWV4dHJhJ1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcbmltcG9ydCB1dGlsIGZyb20gJ3V0aWwnXG5cbmltcG9ydCB7IElMb2dUeXBlIH0gZnJvbSAnLi4vdXRpbHMvZW51bSdcbmltcG9ydCB7IElMb2dBcmd2VHlwZSwgSUxvZ0FyZ3ZUeXBlV2l0aEVycm9yLCBVbmRlZmluYWJsZSwgSUxvZ0NvbG9yLCBJTG9nZ2VyLCBJUGljR28gfSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB7IGZvcmNlTnVtYmVyLCBpc0RldiB9IGZyb20gJy4uL3V0aWxzL2NvbW1vbidcblxuZXhwb3J0IGNsYXNzIExvZ2dlciBpbXBsZW1lbnRzIElMb2dnZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGxldmVsID0ge1xuICAgIFtJTG9nVHlwZS5zdWNjZXNzXTogJ2dyZWVuJyxcbiAgICBbSUxvZ1R5cGUuaW5mb106ICdibHVlJyxcbiAgICBbSUxvZ1R5cGUud2Fybl06ICd5ZWxsb3cnLFxuICAgIFtJTG9nVHlwZS5lcnJvcl06ICdyZWQnXG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IGN0eDogSVBpY0dvXG4gIHByaXZhdGUgbG9nTGV2ZWwhOiBzdHJpbmcgfCBzdHJpbmdbXVxuICBwcml2YXRlIGxvZ1BhdGghOiBzdHJpbmdcbiAgY29uc3RydWN0b3IoY3R4OiBJUGljR28pIHtcbiAgICB0aGlzLmN0eCA9IGN0eFxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVMb2codHlwZTogSUxvZ1R5cGUsIC4uLm1zZzogSUxvZ0FyZ3ZUeXBlV2l0aEVycm9yW10pOiB2b2lkIHtcbiAgICAvLyBjaGVjayBjb25maWcuc2lsZW50XG4gICAgdGhpcy5sb2dMZXZlbCA9IHRoaXMuY3R4LmdldENvbmZpZygnc2V0dGluZ3MubG9nTGV2ZWwnKVxuICAgIGlmICghdGhpcy5jdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdzaWxlbnQnKSAmJiB0aGlzLmNoZWNrTG9nTGV2ZWwodHlwZSwgdGhpcy5sb2dMZXZlbCkpIHtcbiAgICAgIGNvbnN0IGxvZ0hlYWRlciA9IGNoYWxrW3RoaXMubGV2ZWxbdHlwZV0gYXMgSUxvZ0NvbG9yXShgW1BpY0xpc3QgJHt0eXBlLnRvVXBwZXJDYXNlKCl9XTpgKVxuICAgICAgY29uc29sZS5sb2cobG9nSGVhZGVyLCAuLi5tc2cpXG4gICAgICB0aGlzLmxvZ1BhdGggPVxuICAgICAgICB0aGlzLmN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3NldHRpbmdzLmxvZ1BhdGgnKSB8fCBwYXRoLmpvaW4odGhpcy5jdHguYmFzZURpciwgJy4vcGljbGlzdC5sb2cnKVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIC8vIGZpeCBsb2cgZmlsZSBpcyB0b28gbGFyZ2UsIG5vdyB0aGUgbG9nIGZpbGUncyBkZWZhdWx0IHNpemUgaXMgMTAgTUJcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmNoZWNrTG9nRmlsZUlzTGFyZ2UodGhpcy5sb2dQYXRoKVxuICAgICAgICAgIGlmIChyZXN1bHQuaXNMYXJnZSkge1xuICAgICAgICAgICAgY29uc3Qgd2FybmluZ01zZyA9IGBMb2cgZmlsZSBpcyB0b28gbGFyZ2UgKD4gJHtyZXN1bHQubG9nRmlsZVNpemVMaW1pdCEgLyAxMDI0IC8gMTAyNCB8fCAnMTAnfSBNQiksIHJlY3JlYXRlIGxvZyBmaWxlYFxuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KCdbUGljTGlzdCBXQVJOXTonKSwgd2FybmluZ01zZylcbiAgICAgICAgICAgIHRoaXMucmVjcmVhdGVMb2dGaWxlKHRoaXMubG9nUGF0aClcbiAgICAgICAgICAgIG1zZy51bnNoaWZ0KHdhcm5pbmdNc2cpXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuaGFuZGxlV3JpdGVMb2codGhpcy5sb2dQYXRoLCB0eXBlLCAuLi5tc2cpXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAvLyB3aHk/Pz9cbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdbUGljTGlzdCBFcnJvcl0gb24gY2hlY2tpbmcgbG9nIGZpbGUgc2l6ZScsIGUpXG4gICAgICAgIH1cbiAgICAgIH0sIDApXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0xvZ0ZpbGVJc0xhcmdlKGxvZ1BhdGg6IHN0cmluZyk6IHtcbiAgICBpc0xhcmdlOiBib29sZWFuXG4gICAgbG9nRmlsZVNpemU/OiBudW1iZXJcbiAgICBsb2dGaWxlU2l6ZUxpbWl0PzogbnVtYmVyXG4gIH0ge1xuICAgIGlmIChmcy5leGlzdHNTeW5jKGxvZ1BhdGgpKSB7XG4gICAgICBjb25zdCBsb2dGaWxlU2l6ZSA9IGZzLnN0YXRTeW5jKGxvZ1BhdGgpLnNpemVcbiAgICAgIGNvbnN0IGxvZ0ZpbGVTaXplTGltaXQgPVxuICAgICAgICBmb3JjZU51bWJlcih0aGlzLmN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8bnVtYmVyPj4oJ3NldHRpbmdzLmxvZ0ZpbGVTaXplTGltaXQnKSB8fCAxMCkgKiAxMDI0ICogMTAyNCAvLyAxMCBNQiBkZWZhdWx0XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc0xhcmdlOiBsb2dGaWxlU2l6ZSA+IGxvZ0ZpbGVTaXplTGltaXQsXG4gICAgICAgIGxvZ0ZpbGVTaXplLFxuICAgICAgICBsb2dGaWxlU2l6ZUxpbWl0XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBpc0xhcmdlOiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVjcmVhdGVMb2dGaWxlKGxvZ1BhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChmcy5leGlzdHNTeW5jKGxvZ1BhdGgpKSB7XG4gICAgICBmcy51bmxpbmtTeW5jKGxvZ1BhdGgpXG4gICAgICBjcmVhdGVGaWxlU3luYyhsb2dQYXRoKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlV3JpdGVMb2cobG9nUGF0aDogc3RyaW5nLCB0eXBlOiBzdHJpbmcsIC4uLm1zZzogSUxvZ0FyZ3ZUeXBlV2l0aEVycm9yW10pOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgbGV0IGxvZyA9IGAke2RheWpzKCkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tOnNzJyl9IFtQaWNMaXN0ICR7dHlwZS50b1VwcGVyQ2FzZSgpfV0gYFxuICAgICAgbXNnLmZvckVhY2goKGl0ZW06IElMb2dBcmd2VHlwZVdpdGhFcnJvcikgPT4ge1xuICAgICAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIEVycm9yICYmIHR5cGUgPT09ICdlcnJvcicpIHtcbiAgICAgICAgICBsb2cgKz0gYFxcbi0tLS0tLUVycm9yIFN0YWNrIEJlZ2luLS0tLS0tXFxuJHt1dGlsLmZvcm1hdChpdGVtPy5zdGFjayl9XFxuLS0tLS0tLUVycm9yIFN0YWNrIEVuZC0tLS0tLS0gYFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGl0ZW0gPSBKU09OLnN0cmluZ2lmeShpdGVtLCBudWxsLCAyKVxuICAgICAgICAgIH1cbiAgICAgICAgICBsb2cgKz0gYCR7aXRlbSBhcyBzdHJpbmd9IGBcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIGxvZyArPSAnXFxuJ1xuICAgICAgLy8gQSBzeW5jaHJvbml6ZWQgYXBwcm9hY2ggdG8gYXZvaWQgbG9nIG1zZyBzZXF1ZW5jZSBlcnJvcnNcbiAgICAgIGZzLmFwcGVuZEZpbGVTeW5jKGxvZ1BhdGgsIGxvZylcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbUGljTGlzdCBFcnJvcl0gb24gd3JpdGluZyBsb2cgZmlsZScsIGUpXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0xvZ0xldmVsKHR5cGU6IHN0cmluZywgbGV2ZWw6IHVuZGVmaW5lZCB8IHN0cmluZyB8IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gICAgaWYgKGxldmVsID09PSB1bmRlZmluZWQgfHwgbGV2ZWwgPT09ICdhbGwnKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShsZXZlbCkpIHtcbiAgICAgIHJldHVybiBsZXZlbC5zb21lKChpdGVtOiBzdHJpbmcpID0+IGl0ZW0gPT09IHR5cGUgfHwgaXRlbSA9PT0gJ2FsbCcpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0eXBlID09PSBsZXZlbFxuICAgIH1cbiAgfVxuXG4gIHN1Y2Nlc3MoLi4ubXNnOiBJTG9nQXJndlR5cGVbXSk6IHZvaWQge1xuICAgIHRoaXMuaGFuZGxlTG9nKElMb2dUeXBlLnN1Y2Nlc3MsIC4uLm1zZylcbiAgfVxuXG4gIGluZm8oLi4ubXNnOiBJTG9nQXJndlR5cGVbXSk6IHZvaWQge1xuICAgIHRoaXMuaGFuZGxlTG9nKElMb2dUeXBlLmluZm8sIC4uLm1zZylcbiAgfVxuXG4gIGVycm9yKC4uLm1zZzogSUxvZ0FyZ3ZUeXBlV2l0aEVycm9yW10pOiB2b2lkIHtcbiAgICB0aGlzLmhhbmRsZUxvZyhJTG9nVHlwZS5lcnJvciwgLi4ubXNnKVxuICB9XG5cbiAgd2FybiguLi5tc2c6IElMb2dBcmd2VHlwZVtdKTogdm9pZCB7XG4gICAgdGhpcy5oYW5kbGVMb2coSUxvZ1R5cGUud2FybiwgLi4ubXNnKVxuICB9XG5cbiAgZGVidWcoLi4ubXNnOiBJTG9nQXJndlR5cGVbXSk6IHZvaWQge1xuICAgIGlmIChpc0RldigpKSB7XG4gICAgICB0aGlzLmhhbmRsZUxvZyhJTG9nVHlwZS5pbmZvLCAuLi5tc2cpXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IExvZ2dlclxuIiwiaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdjcm9zcy1zcGF3bidcbmltcG9ydCB7XG4gIElSZXN1bHQsXG4gIElQcm9jZXNzRW52LFxuICBJUGx1Z2luUHJvY2Vzc1Jlc3VsdCxcbiAgSVBsdWdpbkhhbmRsZXIsXG4gIElQbHVnaW5IYW5kbGVyT3B0aW9ucyxcbiAgVW5kZWZpbmFibGUsXG4gIElQaWNHbyxcbiAgSVBsdWdpbkhhbmRsZXJSZXN1bHRcbn0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vdXRpbHMvZW51bSdcbmltcG9ydCB7IGdldFByb2Nlc3NQbHVnaW5OYW1lLCBnZXROb3JtYWxQbHVnaW5OYW1lIH0gZnJvbSAnLi4vdXRpbHMvY29tbW9uJ1xuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi9pMThuL3poLUNOJ1xuXG5leHBvcnQgY2xhc3MgUGx1Z2luSGFuZGxlciBpbXBsZW1lbnRzIElQbHVnaW5IYW5kbGVyIHtcbiAgLy8gVGhhbmtzIHRvIGZlZmxvdyAtPiBodHRwczovL2dpdGh1Yi5jb20vZmVmbG93L2ZlZmxvdy9ibG9iL21hc3Rlci9saWIvaW50ZXJuYWwvaW5zdGFsbC9wbHVnaW4uanNcbiAgcHJpdmF0ZSByZWFkb25seSBjdHg6IElQaWNHb1xuICBjb25zdHJ1Y3RvcihjdHg6IElQaWNHbykge1xuICAgIHRoaXMuY3R4ID0gY3R4XG4gIH1cblxuICBhc3luYyBpbnN0YWxsKFxuICAgIHBsdWdpbnM6IHN0cmluZ1tdLFxuICAgIG9wdGlvbnM6IElQbHVnaW5IYW5kbGVyT3B0aW9ucyA9IHt9LFxuICAgIGVudj86IElQcm9jZXNzRW52XG4gICk6IFByb21pc2U8SVBsdWdpbkhhbmRsZXJSZXN1bHQ8Ym9vbGVhbj4+IHtcbiAgICBjb25zdCBpbnN0YWxsZWRQbHVnaW5zOiBzdHJpbmdbXSA9IFtdXG4gICAgY29uc3QgcHJvY2Vzc1BsdWdpbnMgPSBwbHVnaW5zXG4gICAgICAubWFwKChpdGVtOiBzdHJpbmcpID0+IGhhbmRsZVBsdWdpbk5hbWVQcm9jZXNzKHRoaXMuY3R4LCBpdGVtKSlcbiAgICAgIC5maWx0ZXIoaXRlbSA9PiB7XG4gICAgICAgIC8vIGRldGVjdCBpZiBoYXMgYWxyZWFkeSBpbnN0YWxsZWRcbiAgICAgICAgLy8gb3Igd2lsbCBjYXVzZSBlcnJvclxuICAgICAgICBpZiAodGhpcy5jdHgucGx1Z2luTG9hZGVyLmhhc1BsdWdpbihpdGVtLnBrZ05hbWUpKSB7XG4gICAgICAgICAgaW5zdGFsbGVkUGx1Z2lucy5wdXNoKGl0ZW0ucGtnTmFtZSlcbiAgICAgICAgICB0aGlzLmN0eC5sb2cuc3VjY2VzcyhgUGljTGlzdCBoYXMgYWxyZWFkeSBpbnN0YWxsZWQgJHtpdGVtLnBrZ05hbWV9YClcbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiBzb21ldGhpbmcgd3JvbmcsIGZpbHRlciBpdCBvdXRcbiAgICAgICAgaWYgKCFpdGVtLnN1Y2Nlc3MpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfSlcbiAgICBjb25zdCBmdWxsTmFtZUxpc3QgPSBwcm9jZXNzUGx1Z2lucy5tYXAoaXRlbSA9PiBpdGVtLmZ1bGxOYW1lKVxuICAgIGNvbnN0IHBrZ05hbWVMaXN0ID0gcHJvY2Vzc1BsdWdpbnMubWFwKGl0ZW0gPT4gaXRlbS5wa2dOYW1lKVxuICAgIGlmIChmdWxsTmFtZUxpc3QubGVuZ3RoID4gMCkge1xuICAgICAgLy8gaW5zdGFsbCBwbHVnaW5zIG11c3QgdXNlIGZ1bGxOYW1lTGlzdDpcbiAgICAgIC8vIDEuIGluc3RhbGwgcmVtb3RlIHBhY2FnZVxuICAgICAgLy8gMi4gaW5zdGFsbCBsb2NhbCBwYWNhZ2VcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhlY0NvbW1hbmQoJ2luc3RhbGwnLCBmdWxsTmFtZUxpc3QsIHRoaXMuY3R4LmJhc2VEaXIsIG9wdGlvbnMsIGVudilcbiAgICAgIGlmICghcmVzdWx0LmNvZGUpIHtcbiAgICAgICAgcGtnTmFtZUxpc3QuZm9yRWFjaCgocGx1Z2luTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgdGhpcy5jdHgucGx1Z2luTG9hZGVyLnJlZ2lzdGVyUGx1Z2luKHBsdWdpbk5hbWUpXG4gICAgICAgIH0pXG4gICAgICAgIHRoaXMuY3R4LmxvZy5zdWNjZXNzKHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfU1VDQ0VTUycpKVxuICAgICAgICB0aGlzLmN0eC5lbWl0KCdpbnN0YWxsU3VjY2VzcycsIHtcbiAgICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9TVUNDRVNTJyksXG4gICAgICAgICAgYm9keTogWy4uLnBrZ05hbWVMaXN0LCAuLi5pbnN0YWxsZWRQbHVnaW5zXVxuICAgICAgICB9KVxuICAgICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PHRydWU+ID0ge1xuICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgYm9keTogWy4uLnBrZ05hbWVMaXN0LCAuLi5pbnN0YWxsZWRQbHVnaW5zXVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGVyciA9IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEX1JFQVNPTicsIHtcbiAgICAgICAgICBjb2RlOiBgJHtyZXN1bHQuY29kZX1gLFxuICAgICAgICAgIGRhdGE6IHJlc3VsdC5kYXRhXG4gICAgICAgIH0pXG4gICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlcnIpXG4gICAgICAgIHRoaXMuY3R4LmVtaXQoJ2luc3RhbGxGYWlsZWQnLCB7XG4gICAgICAgICAgdGl0bGU6IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEJyksXG4gICAgICAgICAgYm9keTogZXJyXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8ZmFsc2U+ID0ge1xuICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgIGJvZHk6IGVyclxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGluc3RhbGxlZFBsdWdpbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zdCBlcnIgPSB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1ZBTElEJylcbiAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlcnIpXG4gICAgICB0aGlzLmN0eC5lbWl0KCdpbnN0YWxsRmFpbGVkJywge1xuICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRUQnKSxcbiAgICAgICAgYm9keTogZXJyXG4gICAgICB9KVxuICAgICAgY29uc3QgcmVzOiBJUGx1Z2luSGFuZGxlclJlc3VsdDxmYWxzZT4gPSB7XG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICBib2R5OiBlcnJcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdHgubG9nLnN1Y2Nlc3ModGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9TVUNDRVNTJykpXG4gICAgICB0aGlzLmN0eC5lbWl0KCdpbnN0YWxsU3VjY2VzcycsIHtcbiAgICAgICAgdGl0bGU6IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfU1VDQ0VTUycpLFxuICAgICAgICBib2R5OiBbLi4ucGtnTmFtZUxpc3QsIC4uLmluc3RhbGxlZFBsdWdpbnNdXG4gICAgICB9KVxuICAgICAgY29uc3QgcmVzOiBJUGx1Z2luSGFuZGxlclJlc3VsdDx0cnVlPiA9IHtcbiAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgYm9keTogWy4uLnBrZ05hbWVMaXN0LCAuLi5pbnN0YWxsZWRQbHVnaW5zXVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVuaW5zdGFsbChwbHVnaW5zOiBzdHJpbmdbXSk6IFByb21pc2U8SVBsdWdpbkhhbmRsZXJSZXN1bHQ8Ym9vbGVhbj4+IHtcbiAgICBjb25zdCBwcm9jZXNzUGx1Z2lucyA9IHBsdWdpbnNcbiAgICAgIC5tYXAoKGl0ZW06IHN0cmluZykgPT4gaGFuZGxlUGx1Z2luTmFtZVByb2Nlc3ModGhpcy5jdHgsIGl0ZW0pKVxuICAgICAgLmZpbHRlcihpdGVtID0+IGl0ZW0uc3VjY2VzcylcbiAgICBjb25zdCBwa2dOYW1lTGlzdCA9IHByb2Nlc3NQbHVnaW5zLm1hcChpdGVtID0+IGl0ZW0ucGtnTmFtZSlcbiAgICBpZiAocGtnTmFtZUxpc3QubGVuZ3RoID4gMCkge1xuICAgICAgLy8gdW5pbnN0YWxsIHBsdWdpbnMgbXVzdCB1c2UgcGtnTmFtZUxpc3Q6XG4gICAgICAvLyBucG0gdW5pbnN0YWxsIHdpbGwgdXNlIHRoZSBwYWNrYWdlLmpzb24ncyBuYW1lXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWNDb21tYW5kKCd1bmluc3RhbGwnLCBwa2dOYW1lTGlzdCwgdGhpcy5jdHguYmFzZURpcilcbiAgICAgIGlmICghcmVzdWx0LmNvZGUpIHtcbiAgICAgICAgcGtnTmFtZUxpc3QuZm9yRWFjaCgocGx1Z2luTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgdGhpcy5jdHgucGx1Z2luTG9hZGVyLnVucmVnaXN0ZXJQbHVnaW4ocGx1Z2luTmFtZSlcbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy5jdHgubG9nLnN1Y2Nlc3ModGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX1NVQ0NFU1MnKSlcbiAgICAgICAgdGhpcy5jdHguZW1pdCgndW5pbnN0YWxsU3VjY2VzcycsIHtcbiAgICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX1NVQ0NFU1MnKSxcbiAgICAgICAgICBib2R5OiBwa2dOYW1lTGlzdFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PHRydWU+ID0ge1xuICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgYm9keTogcGtnTmFtZUxpc3RcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBlcnIgPSB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1JFQVNPTicsIHtcbiAgICAgICAgICBjb2RlOiBgJHtyZXN1bHQuY29kZX1gLFxuICAgICAgICAgIGRhdGE6IHJlc3VsdC5kYXRhXG4gICAgICAgIH0pXG4gICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlcnIpXG4gICAgICAgIHRoaXMuY3R4LmVtaXQoJ3VuaW5zdGFsbEZhaWxlZCcsIHtcbiAgICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRCcpLFxuICAgICAgICAgIGJvZHk6IGVyclxuICAgICAgICB9KVxuICAgICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PGZhbHNlPiA9IHtcbiAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICBib2R5OiBlcnJcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGVyciA9IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfVkFMSUQnKVxuICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGVycilcbiAgICAgIHRoaXMuY3R4LmVtaXQoJ3VuaW5zdGFsbEZhaWxlZCcsIHtcbiAgICAgICAgdGl0bGU6IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRUQnKSxcbiAgICAgICAgYm9keTogZXJyXG4gICAgICB9KVxuICAgICAgY29uc3QgcmVzOiBJUGx1Z2luSGFuZGxlclJlc3VsdDxmYWxzZT4gPSB7XG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICBib2R5OiBlcnJcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNcbiAgICB9XG4gIH1cblxuICBhc3luYyB1cGRhdGUoXG4gICAgcGx1Z2luczogc3RyaW5nW10sXG4gICAgb3B0aW9uczogSVBsdWdpbkhhbmRsZXJPcHRpb25zID0ge30sXG4gICAgZW52PzogSVByb2Nlc3NFbnZcbiAgKTogUHJvbWlzZTxJUGx1Z2luSGFuZGxlclJlc3VsdDxib29sZWFuPj4ge1xuICAgIGNvbnN0IHByb2Nlc3NQbHVnaW5zID0gcGx1Z2luc1xuICAgICAgLm1hcCgoaXRlbTogc3RyaW5nKSA9PiBoYW5kbGVQbHVnaW5OYW1lUHJvY2Vzcyh0aGlzLmN0eCwgaXRlbSkpXG4gICAgICAuZmlsdGVyKGl0ZW0gPT4gaXRlbS5zdWNjZXNzKVxuICAgIGNvbnN0IHBrZ05hbWVMaXN0ID0gcHJvY2Vzc1BsdWdpbnMubWFwKGl0ZW0gPT4gaXRlbS5wa2dOYW1lKVxuICAgIGlmIChwa2dOYW1lTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAvLyB1cGRhdGUgcGx1Z2lucyBtdXN0IHVzZSBwa2dOYW1lTGlzdDpcbiAgICAgIC8vIG5wbSB1cGRhdGUgd2lsbCB1c2UgdGhlIHBhY2thZ2UuanNvbidzIG5hbWVcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhlY0NvbW1hbmQoJ3VwZGF0ZScsIHBrZ05hbWVMaXN0LCB0aGlzLmN0eC5iYXNlRGlyLCBvcHRpb25zLCBlbnYpXG4gICAgICBpZiAoIXJlc3VsdC5jb2RlKSB7XG4gICAgICAgIHRoaXMuY3R4LmxvZy5zdWNjZXNzKHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9TVUNDRVNTJykpXG4gICAgICAgIHRoaXMuY3R4LmVtaXQoJ3VwZGF0ZVN1Y2Nlc3MnLCB7XG4gICAgICAgICAgdGl0bGU6IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9TVUNDRVNTJyksXG4gICAgICAgICAgYm9keTogcGtnTmFtZUxpc3RcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgcmVzOiBJUGx1Z2luSGFuZGxlclJlc3VsdDx0cnVlPiA9IHtcbiAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgIGJvZHk6IHBrZ05hbWVMaXN0XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZXJyID0gdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9SRUFTT04nLCB7XG4gICAgICAgICAgY29kZTogYCR7cmVzdWx0LmNvZGV9YCxcbiAgICAgICAgICBkYXRhOiByZXN1bHQuZGF0YVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZXJyKVxuICAgICAgICB0aGlzLmN0eC5lbWl0KCd1cGRhdGVGYWlsZWQnLCB7XG4gICAgICAgICAgdGl0bGU6IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRUQnKSxcbiAgICAgICAgICBib2R5OiBlcnJcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgcmVzOiBJUGx1Z2luSGFuZGxlclJlc3VsdDxmYWxzZT4gPSB7XG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgYm9keTogZXJyXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBlcnIgPSB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1ZBTElEJylcbiAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlcnIpXG4gICAgICB0aGlzLmN0eC5lbWl0KCd1cGRhdGVGYWlsZWQnLCB7XG4gICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEJyksXG4gICAgICAgIGJvZHk6IGVyclxuICAgICAgfSlcbiAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8ZmFsc2U+ID0ge1xuICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgYm9keTogZXJyXG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBleGVjQ29tbWFuZChcbiAgICBjbWQ6IHN0cmluZyxcbiAgICBtb2R1bGVzOiBzdHJpbmdbXSxcbiAgICB3aGVyZTogc3RyaW5nLFxuICAgIG9wdGlvbnM6IElQbHVnaW5IYW5kbGVyT3B0aW9ucyA9IHt9LFxuICAgIGVudjogSVByb2Nlc3NFbnYgPSB7fVxuICApOiBQcm9taXNlPElSZXN1bHQ+IHtcbiAgICAvLyBvcHRpb25zIGZpcnN0XG4gICAgY29uc3QgcmVnaXN0cnkgPSBvcHRpb25zLnJlZ2lzdHJ5IHx8IHRoaXMuY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+Pignc2V0dGluZ3MucmVnaXN0cnknKVxuICAgIGNvbnN0IHByb3h5ID0gb3B0aW9ucy5wcm94eSB8fCB0aGlzLmN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3NldHRpbmdzLnByb3h5JylcbiAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmU6IGFueSk6IHZvaWQgPT4ge1xuICAgICAgbGV0IGFyZ3MgPSBbY21kXS5jb25jYXQobW9kdWxlcykuY29uY2F0KCctLWNvbG9yPWFsd2F5cycpLmNvbmNhdCgnLS1zYXZlJylcbiAgICAgIGlmIChyZWdpc3RyeSkge1xuICAgICAgICBhcmdzID0gYXJncy5jb25jYXQoYC0tcmVnaXN0cnk9JHtyZWdpc3RyeX1gKVxuICAgICAgfVxuICAgICAgaWYgKHByb3h5KSB7XG4gICAgICAgIGFyZ3MgPSBhcmdzLmNvbmNhdChgLS1wcm94eT0ke3Byb3h5fWApXG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBucG0gPSBzcGF3bignbnBtJywgYXJncywge1xuICAgICAgICAgIGN3ZDogd2hlcmUsXG4gICAgICAgICAgZW52OiBPYmplY3QuYXNzaWduKHt9LCBwcm9jZXNzLmVudiwgZW52KVxuICAgICAgICB9KVxuXG4gICAgICAgIGxldCBvdXRwdXQgPSAnJ1xuICAgICAgICBucG0uc3Rkb3V0XG4gICAgICAgICAgPy5vbignZGF0YScsIChkYXRhOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIG91dHB1dCArPSBkYXRhXG4gICAgICAgICAgfSlcbiAgICAgICAgICAucGlwZShwcm9jZXNzLnN0ZG91dClcblxuICAgICAgICBucG0uc3RkZXJyXG4gICAgICAgICAgPy5vbignZGF0YScsIChkYXRhOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIG91dHB1dCArPSBkYXRhXG4gICAgICAgICAgfSlcbiAgICAgICAgICAucGlwZShwcm9jZXNzLnN0ZGVycilcblxuICAgICAgICBucG0ub24oJ2Nsb3NlJywgKGNvZGU6IG51bWJlcikgPT4ge1xuICAgICAgICAgIGlmICghY29kZSkge1xuICAgICAgICAgICAgcmVzb2x2ZSh7IGNvZGU6IDAsIGRhdGE6IG91dHB1dCB9KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNvbHZlKHsgY29kZSwgZGF0YTogb3V0cHV0IH0pXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAvLyBmb3IgdXNlcnMgd2hvIGhhdmVuJ3QgaW5zdGFsbGVkIG5vZGUuanNcbiAgICAgICAgbnBtLm9uKCdlcnJvcicsIChlcnI6IEVycm9yKSA9PiB7XG4gICAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGVycilcbiAgICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoJ05QTSBpcyBub3QgaW5zdGFsbGVkJylcbiAgICAgICAgICB0aGlzLmN0eC5lbWl0KElCdWlsZEluRXZlbnQuRkFJTEVELCAnTlBNIGlzIG5vdCBpbnN0YWxsZWQnKVxuICAgICAgICB9KVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZSBhcyBFcnJvcilcbiAgICAgICAgdGhpcy5jdHguZW1pdChJQnVpbGRJbkV2ZW50LkZBSUxFRCwgZSlcbiAgICAgIH1cbiAgICB9KVxuICB9XG59XG5cbi8qKlxuICogdHJhbnNmb3JtIHRoZSBpbnB1dCBwbHVnaW4gbmFtZSBvciBwYXRoIHN0cmluZyB0byB2YWxpZCByZXN1bHRcbiAqIEBwYXJhbSBjdHhcbiAqIEBwYXJhbSBuYW1lT3JQYXRoXG4gKi9cbmNvbnN0IGhhbmRsZVBsdWdpbk5hbWVQcm9jZXNzID0gKGN0eDogSVBpY0dvLCBuYW1lT3JQYXRoOiBzdHJpbmcpOiBJUGx1Z2luUHJvY2Vzc1Jlc3VsdCA9PiB7XG4gIGNvbnN0IHJlcyA9IHtcbiAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICBmdWxsTmFtZTogJycsXG4gICAgcGtnTmFtZTogJydcbiAgfVxuICBjb25zdCByZXN1bHQgPSBnZXRQcm9jZXNzUGx1Z2luTmFtZShuYW1lT3JQYXRoLCBjdHgubG9nKVxuICBpZiAoIXJlc3VsdCkge1xuICAgIHJldHVybiByZXNcbiAgfVxuICAvLyBmaXJzdCBnZXQgcmVzdWx0IHRoZW4gZG8gdGhpcyBwcm9jZXNzXG4gIC8vIG9yIHNvbWUgZXJyb3Igd2lsbCBsb2cgdHdpY2VcbiAgY29uc3QgcGtnTmFtZSA9IGdldE5vcm1hbFBsdWdpbk5hbWUocmVzdWx0LCBjdHgubG9nKVxuICBpZiAoIXBrZ05hbWUpIHtcbiAgICByZXR1cm4gcmVzXG4gIH1cbiAgcmV0dXJuIHtcbiAgICBzdWNjZXNzOiB0cnVlLFxuICAgIGZ1bGxOYW1lOiByZXN1bHQsXG4gICAgcGtnTmFtZVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFBsdWdpbkhhbmRsZXJcbiIsImltcG9ydCBmcywgeyByZWFkSlNPTlN5bmMgfSBmcm9tICdmcy1leHRyYSdcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5pbXBvcnQgeyBzeW5jIH0gZnJvbSAncmVzb2x2ZSdcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi91dGlscy9lbnVtJ1xuaW1wb3J0IHsgSVBpY0dvLCBJUGljR29QbHVnaW4sIElQbHVnaW5Mb2FkZXIsIElQaWNHb1BsdWdpbkludGVyZmFjZSB9IGZyb20gJy4uL3R5cGVzL2luZGV4J1xuaW1wb3J0IHsgc2V0Q3VycmVudFBsdWdpbk5hbWUgfSBmcm9tICcuL0xpZmVjeWNsZVBsdWdpbnMnXG5cbi8qKlxuICogTG9jYWwgcGx1Z2luIGxvYWRlciwgZmlsZSBzeXN0ZW0gaXMgcmVxdWlyZWRcbiAqL1xuZXhwb3J0IGNsYXNzIFBsdWdpbkxvYWRlciBpbXBsZW1lbnRzIElQbHVnaW5Mb2FkZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGN0eDogSVBpY0dvXG4gIHByaXZhdGUgbGlzdDogc3RyaW5nW10gPSBbXVxuICBwcml2YXRlIHJlYWRvbmx5IGZ1bGxMaXN0ID0gbmV3IFNldDxzdHJpbmc+KClcbiAgcHJpdmF0ZSByZWFkb25seSBwbHVnaW5NYXAgPSBuZXcgTWFwPHN0cmluZywgSVBpY0dvUGx1Z2luSW50ZXJmYWNlPigpXG4gIGNvbnN0cnVjdG9yKGN0eDogSVBpY0dvKSB7XG4gICAgdGhpcy5jdHggPSBjdHhcbiAgICB0aGlzLmluaXQoKVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IHBhY2thZ2VQYXRoID0gcGF0aC5qb2luKHRoaXMuY3R4LmJhc2VEaXIsICdwYWNrYWdlLmpzb24nKVxuICAgIGlmICghZnMuZXhpc3RzU3luYyhwYWNrYWdlUGF0aCkpIHtcbiAgICAgIGNvbnN0IHBrZyA9IHtcbiAgICAgICAgbmFtZTogJ3BpY2dvLXBsdWdpbnMnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ3BpY2dvLXBsdWdpbnMnLFxuICAgICAgICByZXBvc2l0b3J5OiAnaHR0cHM6Ly9naXRodWIuY29tL0t1aW5nc21pbGUvUGljTGlzdC1Db3JlJyxcbiAgICAgICAgbGljZW5zZTogJ01JVCdcbiAgICAgIH1cbiAgICAgIGZzLndyaXRlRmlsZVN5bmMocGFja2FnZVBhdGgsIEpTT04uc3RyaW5naWZ5KHBrZyksICd1dGY4JylcbiAgICB9XG4gIH1cblxuICAvLyBnZXQgcGx1Z2luIGVudHJ5XG4gIHByaXZhdGUgcmVzb2x2ZVBsdWdpbihjdHg6IElQaWNHbywgbmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHN5bmMobmFtZSwgeyBiYXNlZGlyOiBjdHguYmFzZURpciB9KVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHBhdGguam9pbihjdHguYmFzZURpciwgJ25vZGVfbW9kdWxlcycsIG5hbWUpXG4gICAgfVxuICB9XG5cbiAgLy8gbG9hZCBhbGwgdGhpcmQgcGFydHkgcGx1Z2luXG4gIGxvYWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcGFja2FnZVBhdGggPSBwYXRoLmpvaW4odGhpcy5jdHguYmFzZURpciwgJ3BhY2thZ2UuanNvbicpXG4gICAgY29uc3QgcGx1Z2luRGlyID0gcGF0aC5qb2luKHRoaXMuY3R4LmJhc2VEaXIsICdub2RlX21vZHVsZXMvJylcbiAgICAvLyBUaGFua3MgdG8gaGV4byAtPiBodHRwczovL2dpdGh1Yi5jb20vaGV4b2pzL2hleG8vYmxvYi9tYXN0ZXIvbGliL2hleG8vbG9hZF9wbHVnaW5zLmpzXG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHBsdWdpbkRpcikpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICBjb25zdCBqc29uID0gcmVhZEpTT05TeW5jKHBhY2thZ2VQYXRoKVxuICAgIGNvbnN0IGRlcHMgPSBPYmplY3Qua2V5cyhqc29uLmRlcGVuZGVuY2llcyB8fCB7fSlcbiAgICBjb25zdCBkZXZEZXBzID0gT2JqZWN0LmtleXMoanNvbi5kZXZEZXBlbmRlbmNpZXMgfHwge30pXG4gICAgY29uc3QgbW9kdWxlcyA9IGRlcHMuY29uY2F0KGRldkRlcHMpLmZpbHRlcigobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoIS9ecGljZ28tcGx1Z2luLXxeQFteL10rXFwvcGljZ28tcGx1Z2luLS8udGVzdChuYW1lKSkgcmV0dXJuIGZhbHNlXG4gICAgICBjb25zdCBwYXRoID0gdGhpcy5yZXNvbHZlUGx1Z2luKHRoaXMuY3R4LCBuYW1lKVxuICAgICAgcmV0dXJuIGZzLmV4aXN0c1N5bmMocGF0aClcbiAgICB9KVxuICAgIGZvciAoY29uc3QgbW9kdWxlIG9mIG1vZHVsZXMpIHtcbiAgICAgIHRoaXMucmVnaXN0ZXJQbHVnaW4obW9kdWxlKVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgcmVnaXN0ZXJQbHVnaW4obmFtZTogc3RyaW5nLCBwbHVnaW4/OiBJUGljR29QbHVnaW4pOiB2b2lkIHtcbiAgICBpZiAoIW5hbWUgfHwgdHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLmN0eC5sb2cud2FybignUGxlYXNlIHByb3ZpZGUgdmFsaWQgcGx1Z2luJylcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB0aGlzLmZ1bGxMaXN0LmFkZChuYW1lKVxuICAgIHRyeSB7XG4gICAgICAvLyByZWdpc3RlciBsb2NhbCBwbHVnaW5cbiAgICAgIGlmICghcGx1Z2luKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLmN0eC5nZXRDb25maWcoYHBpY2dvUGx1Z2lucy4ke25hbWV9YCkgPT09IHRydWUgfHxcbiAgICAgICAgICB0aGlzLmN0eC5nZXRDb25maWcoYHBpY2dvUGx1Z2lucy4ke25hbWV9YCkgPT09IHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmxpc3QucHVzaChuYW1lKVxuICAgICAgICAgIHNldEN1cnJlbnRQbHVnaW5OYW1lKG5hbWUpXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgICB0aGlzLmdldFBsdWdpbihuYW1lKSEucmVnaXN0ZXIodGhpcy5jdHgpXG4gICAgICAgICAgY29uc3QgcGx1Z2luID0gYHBpY2dvUGx1Z2luc1ske25hbWV9XWBcbiAgICAgICAgICB0aGlzLmN0eC5zYXZlQ29uZmlnKHtcbiAgICAgICAgICAgIFtwbHVnaW5dOiB0cnVlXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gcmVnaXN0ZXIgcHJvdmlkZWQgcGx1Z2luXG4gICAgICAgIC8vICYmIHdvbid0IHdyaXRlIGNvbmZpZyB0byBmaWxlc1xuICAgICAgICB0aGlzLmxpc3QucHVzaChuYW1lKVxuICAgICAgICBzZXRDdXJyZW50UGx1Z2luTmFtZShuYW1lKVxuICAgICAgICBjb25zdCBwbHVnaW5JbnRlcmZhY2UgPSBwbHVnaW4odGhpcy5jdHgpXG4gICAgICAgIHRoaXMucGx1Z2luTWFwLnNldChuYW1lLCBwbHVnaW5JbnRlcmZhY2UpXG4gICAgICAgIHBsdWdpbkludGVyZmFjZS5yZWdpc3Rlcih0aGlzLmN0eClcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLnBsdWdpbk1hcC5kZWxldGUobmFtZSlcbiAgICAgIHRoaXMubGlzdCA9IHRoaXMubGlzdC5maWx0ZXIoKGl0ZW06IHN0cmluZykgPT4gaXRlbSAhPT0gbmFtZSlcbiAgICAgIHRoaXMuZnVsbExpc3QuZGVsZXRlKG5hbWUpXG4gICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZSBhcyBFcnJvcilcbiAgICAgIHRoaXMuY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcbiAgICAgICAgdGl0bGU6IGBQbHVnaW4gJHtuYW1lfSBMb2FkIEVycm9yYCxcbiAgICAgICAgYm9keTogZVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICB1bnJlZ2lzdGVyUGx1Z2luKG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMubGlzdCA9IHRoaXMubGlzdC5maWx0ZXIoKGl0ZW06IHN0cmluZykgPT4gaXRlbSAhPT0gbmFtZSlcbiAgICB0aGlzLmZ1bGxMaXN0LmRlbGV0ZShuYW1lKVxuICAgIHRoaXMucGx1Z2luTWFwLmRlbGV0ZShuYW1lKVxuICAgIHNldEN1cnJlbnRQbHVnaW5OYW1lKG5hbWUpXG4gICAgdGhpcy5jdHguaGVscGVyLnVwbG9hZGVyLnVucmVnaXN0ZXIobmFtZSlcbiAgICB0aGlzLmN0eC5oZWxwZXIudHJhbnNmb3JtZXIudW5yZWdpc3RlcihuYW1lKVxuICAgIHRoaXMuY3R4LmhlbHBlci5iZWZvcmVUcmFuc2Zvcm1QbHVnaW5zLnVucmVnaXN0ZXIobmFtZSlcbiAgICB0aGlzLmN0eC5oZWxwZXIuYmVmb3JlVXBsb2FkUGx1Z2lucy51bnJlZ2lzdGVyKG5hbWUpXG4gICAgdGhpcy5jdHguaGVscGVyLmFmdGVyVXBsb2FkUGx1Z2lucy51bnJlZ2lzdGVyKG5hbWUpXG4gICAgdGhpcy5jdHguY21kLnVucmVnaXN0ZXIobmFtZSlcbiAgICB0aGlzLmN0eC5yZW1vdmVDb25maWcoJ3BpY2dvUGx1Z2lucycsIG5hbWUpXG4gIH1cblxuICAvLyBnZXQgcGx1Z2luIGJ5IG5hbWVcbiAgZ2V0UGx1Z2luKG5hbWU6IHN0cmluZyk6IElQaWNHb1BsdWdpbkludGVyZmFjZSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHRoaXMucGx1Z2luTWFwLmhhcyhuYW1lKSkge1xuICAgICAgcmV0dXJuIHRoaXMucGx1Z2luTWFwLmdldChuYW1lKVxuICAgIH1cbiAgICBjb25zdCBwbHVnaW5EaXIgPSBwYXRoLmpvaW4odGhpcy5jdHguYmFzZURpciwgJ25vZGVfbW9kdWxlcy8nKVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXG4gICAgY29uc3QgcGx1Z2luID0gcmVxdWlyZShwbHVnaW5EaXIgKyBuYW1lKSh0aGlzLmN0eClcbiAgICB0aGlzLnBsdWdpbk1hcC5zZXQobmFtZSwgcGx1Z2luKVxuICAgIHJldHVybiBwbHVnaW5cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGxpc3Qgb2YgZW5hYmxlZCBwbHVnaW5zXG4gICAqL1xuICBnZXRMaXN0KCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5saXN0XG4gIH1cblxuICBoYXNQbHVnaW4obmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZnVsbExpc3QuaGFzKG5hbWUpXG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBmdWxsIGxpc3Qgb2YgcGx1Z2lucywgd2hldGhlciBpdCBpcyBlbmFibGVkIG9yIG5vdFxuICAgKi9cbiAgZ2V0RnVsbExpc3QoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5mdWxsTGlzdF1cbiAgfVxufVxuZXhwb3J0IGRlZmF1bHQgUGx1Z2luTG9hZGVyXG4iLCJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnXG5cbmNvbnN0IGV2ZW50QnVzID0gbmV3IEV2ZW50RW1pdHRlcigpXG5cbmV4cG9ydCB7IGV2ZW50QnVzIH1cbiIsIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1mdW5jdGlvbi1yZXR1cm4tdHlwZSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L3Byb21pc2UtZnVuY3Rpb24tYXN5bmMgKi9cbmltcG9ydCBheGlvcyBmcm9tICdheGlvcydcbmltcG9ydCB0eXBlIHsgQXhpb3NSZXF1ZXN0Q29uZmlnLCBBeGlvc1Jlc3BvbnNlIH0gZnJvbSAnYXhpb3MnXG5pbXBvcnQgRm9ybURhdGEgZnJvbSAnZm9ybS1kYXRhJ1xuaW1wb3J0IGh0dHBzIGZyb20gJ2h0dHBzJ1xuaW1wb3J0IHsgaHR0cHNPdmVySHR0cCB9IGZyb20gJ3R1bm5lbCdcbmltcG9ydCB7IFVSTCB9IGZyb20gJ3VybCdcblxuaW1wb3J0IHR5cGUge1xuICBJUGljR28sXG4gIFVuZGVmaW5hYmxlLFxuICBJQ29uZmlnQ2hhbmdlUGF5bG9hZCxcbiAgSUNvbmZpZyxcbiAgSVJlcXVlc3RDb25maWcsXG4gIElPbGRSZXFPcHRpb25zLFxuICBJUmVzcG9uc2UsXG4gIElGdWxsUmVzcG9uc2UsXG4gIElSZXF1ZXN0XG59IGZyb20gJy4uL3R5cGVzJ1xuaW1wb3J0IHsgSUJ1c0V2ZW50IH0gZnJvbSAnLi4vdXRpbHMvZW51bSdcbmltcG9ydCB7IGV2ZW50QnVzIH0gZnJvbSAnLi4vdXRpbHMvZXZlbnRCdXMnXG5cbmNvbnN0IGh0dHBzQWdlbnQgPSBuZXcgaHR0cHMuQWdlbnQoe1xuICBtYXhWZXJzaW9uOiAnVExTdjEuMicsXG4gIG1pblZlcnNpb246ICdUTFN2MS4yJyxcbiAgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZVxufSlcblxuLy8gdGhhbmtzIGZvciBodHRwczovL2dpdGh1Yi5kZXYvcmVxdWVzdC9yZXF1ZXN0L2Jsb2IvbWFzdGVyL2luZGV4LmpzXG5mdW5jdGlvbiBhcHBlbmRGb3JtRGF0YShmb3JtOiBGb3JtRGF0YSwga2V5OiBzdHJpbmcsIGRhdGE6IGFueSk6IHZvaWQge1xuICBpZiAodHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmICd2YWx1ZScgaW4gZGF0YSAmJiAnb3B0aW9ucycgaW4gZGF0YSkge1xuICAgIGZvcm0uYXBwZW5kKGtleSwgZGF0YS52YWx1ZSwgZGF0YS5vcHRpb25zKVxuICB9IGVsc2Uge1xuICAgIGZvcm0uYXBwZW5kKGtleSwgZGF0YSlcbiAgfVxufVxuXG5mdW5jdGlvbiByZXF1ZXN0SW50ZXJjZXB0b3Iob3B0aW9uczogSU9sZFJlcU9wdGlvbnMgfCBBeGlvc1JlcXVlc3RDb25maWcpOiBBeGlvc1JlcXVlc3RDb25maWcgJiB7XG4gIF9faXNPbGRPcHRpb25zPzogYm9vbGVhblxufSB7XG4gIGxldCBfX2lzT2xkT3B0aW9ucyA9IGZhbHNlXG4gIGNvbnN0IG9wdDogQXhpb3NSZXF1ZXN0Q29uZmlnPGFueT4gJiB7XG4gICAgX19pc09sZE9wdGlvbnM/OiBib29sZWFuXG4gIH0gPSB7XG4gICAgLi4ub3B0aW9ucyxcbiAgICB1cmw6IChvcHRpb25zLnVybCBhcyBzdHJpbmcpIHx8ICcnLFxuICAgIGhlYWRlcnM6IG9wdGlvbnMuaGVhZGVycyB8fCB7fVxuICB9XG4gIC8vIHVzZXIgcmVxdWVzdCBjb25maWcgcHJveHlcbiAgaWYgKG9wdGlvbnMucHJveHkpIHtcbiAgICBsZXQgcHJveHlPcHRpb25zID0gb3B0aW9ucy5wcm94eVxuICAgIGlmICh0eXBlb2YgcHJveHlPcHRpb25zID09PSAnc3RyaW5nJykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcHJveHlPcHRpb25zID0gbmV3IFVSTChvcHRpb25zLnByb3h5KVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBwcm94eU9wdGlvbnMgPSBmYWxzZVxuICAgICAgICBvcHQucHJveHkgPSBmYWxzZVxuICAgICAgICBjb25zb2xlLmVycm9yKGUpXG4gICAgICB9XG4gICAgICBfX2lzT2xkT3B0aW9ucyA9IHRydWVcbiAgICB9XG4gICAgaWYgKHByb3h5T3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbnMudXJsPy5zdGFydHNXaXRoKCdodHRwczovLycpKSB7XG4gICAgICAgIG9wdC5wcm94eSA9IGZhbHNlXG4gICAgICAgIG9wdC5odHRwc0FnZW50ID0gaHR0cHNPdmVySHR0cCh7XG4gICAgICAgICAgcHJveHk6IHtcbiAgICAgICAgICAgIGhvc3Q6IHByb3h5T3B0aW9ucz8uaG9zdG5hbWUsXG4gICAgICAgICAgICBwb3J0OiBwYXJzZUludChwcm94eU9wdGlvbnM/LnBvcnQsIDEwKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wdC5wcm94eSA9IHtcbiAgICAgICAgICBob3N0OiBwcm94eU9wdGlvbnMuaG9zdG5hbWUsXG4gICAgICAgICAgcG9ydDogcGFyc2VJbnQocHJveHlPcHRpb25zLnBvcnQsIDEwKSxcbiAgICAgICAgICBwcm90b2NvbDogJ2h0dHAnXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKCdmb3JtRGF0YScgaW4gb3B0aW9ucykge1xuICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuICAgIGZvciAoY29uc3Qga2V5IGluIG9wdGlvbnMuZm9ybURhdGEpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBvcHRpb25zLmZvcm1EYXRhW2tleV1cbiAgICAgIGFwcGVuZEZvcm1EYXRhKGZvcm0sIGtleSwgZGF0YSlcbiAgICB9XG4gICAgb3B0LmRhdGEgPSBmb3JtXG4gICAgb3B0LmhlYWRlcnMgPSBPYmplY3QuYXNzaWduKG9wdC5oZWFkZXJzIHx8IHt9LCBmb3JtLmdldEhlYWRlcnMoKSlcbiAgICBfX2lzT2xkT3B0aW9ucyA9IHRydWVcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIHRoaXMgaXMgb2xkIG9wdGlvblxuICAgIGRlbGV0ZSBvcHQuZm9ybURhdGFcbiAgfVxuICBpZiAoJ2JvZHknIGluIG9wdGlvbnMpIHtcbiAgICBvcHQuZGF0YSA9IG9wdGlvbnMuYm9keVxuICAgIF9faXNPbGRPcHRpb25zID0gdHJ1ZVxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgdGhpcyBpcyBvbGQgb3B0aW9uc1xuICAgIGRlbGV0ZSBvcHQuYm9keVxuICB9XG4gIGlmICgncXMnIGluIG9wdGlvbnMpIHtcbiAgICBvcHQucGFyYW1zID0gb3B0aW9ucy5xc1xuICAgIF9faXNPbGRPcHRpb25zID0gdHJ1ZVxuICB9XG4gIG9wdC5fX2lzT2xkT3B0aW9ucyA9IF9faXNPbGRPcHRpb25zXG4gIHJldHVybiBvcHRcbn1cblxuZnVuY3Rpb24gcmVzcG9uc2VJbnRlcmNlcHRvcihyZXNwb25zZTogQXhpb3NSZXNwb25zZSk6IElGdWxsUmVzcG9uc2Uge1xuICByZXR1cm4ge1xuICAgIC4uLnJlc3BvbnNlLFxuICAgIHN0YXR1c0NvZGU6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICBib2R5OiByZXNwb25zZS5kYXRhXG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzcG9uc2VFcnJvckhhbmRsZXIoZXJyb3I6IGFueSkge1xuICBjb25zdCBlcnJvck9iaiA9IHtcbiAgICBtZXRob2Q6IGVycm9yPy5jb25maWc/Lm1ldGhvZD8udG9VcHBlckNhc2UoKSB8fCAnJyxcbiAgICB1cmw6IGVycm9yPy5jb25maWc/LnVybCB8fCAnJyxcbiAgICBzdGF0dXNDb2RlOiBlcnJvcj8ucmVzcG9uc2U/LnN0YXR1cyB8fCAwLFxuICAgIG1lc3NhZ2U6IGVycm9yPy5tZXNzYWdlIHx8ICcnLFxuICAgIHN0YWNrOiBlcnJvcj8uc3RhY2sgfHwge30sXG4gICAgcmVzcG9uc2U6IHtcbiAgICAgIHN0YXR1czogZXJyb3I/LnJlc3BvbnNlPy5zdGF0dXMgfHwgMCxcbiAgICAgIHN0YXR1c0NvZGU6IGVycm9yPy5yZXNwb25zZT8uc3RhdHVzIHx8IDAsXG4gICAgICBib2R5OiBlcnJvcj8ucmVzcG9uc2U/LmRhdGEgfHwgJydcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yT2JqKVxufVxuXG5leHBvcnQgY2xhc3MgUmVxdWVzdCBpbXBsZW1lbnRzIElSZXF1ZXN0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBjdHg6IElQaWNHb1xuICBwcml2YXRlIHByb3h5OiBVbmRlZmluYWJsZTxzdHJpbmc+ID0gJydcbiAgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnPGFueT4gPSB7fVxuICBjb25zdHJ1Y3RvcihjdHg6IElQaWNHbykge1xuICAgIHRoaXMuY3R4ID0gY3R4XG4gICAgdGhpcy5pbml0KClcbiAgICBldmVudEJ1cy5vbihJQnVzRXZlbnQuQ09ORklHX0NIQU5HRSwgKGRhdGE6IElDb25maWdDaGFuZ2VQYXlsb2FkPHN0cmluZyB8IElDb25maWdbJ3BpY0JlZCddPikgPT4ge1xuICAgICAgc3dpdGNoIChkYXRhLmNvbmZpZ05hbWUpIHtcbiAgICAgICAgY2FzZSAncGljQmVkJzpcbiAgICAgICAgICBpZiAoKGRhdGEudmFsdWUgYXMgSUNvbmZpZ1sncGljQmVkJ10pPy5wcm94eSkge1xuICAgICAgICAgICAgdGhpcy5wcm94eSA9IChkYXRhLnZhbHVlIGFzIElDb25maWdbJ3BpY0JlZCddKS5wcm94eVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdwaWNCZWQucHJveHknOlxuICAgICAgICAgIHRoaXMucHJveHkgPSBkYXRhLnZhbHVlIGFzIHN0cmluZ1xuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHByaXZhdGUgaW5pdCgpOiB2b2lkIHtcbiAgICBjb25zdCBwcm94eSA9IHRoaXMuY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+PigncGljQmVkLnByb3h5JylcbiAgICBpZiAocHJveHkpIHtcbiAgICAgIHRoaXMucHJveHkgPSBwcm94eVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlUHJveHkoKTogQXhpb3NSZXF1ZXN0Q29uZmlnWydwcm94eSddIHwgZmFsc2Uge1xuICAgIGlmICh0aGlzLnByb3h5KSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwcm94eU9wdGlvbnMgPSBuZXcgVVJMKHRoaXMucHJveHkpXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaG9zdDogcHJveHlPcHRpb25zLmhvc3RuYW1lLFxuICAgICAgICAgIHBvcnQ6IHBhcnNlSW50KHByb3h5T3B0aW9ucy5wb3J0IHx8ICcwJywgMTApLFxuICAgICAgICAgIHByb3RvY29sOiBwcm94eU9wdGlvbnMucHJvdG9jb2xcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvKiBlbXB0eSAqL1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vICM2NCBkeW5hbWljIGdldCBwcm94eSB2YWx1ZVxuICByZXF1ZXN0PFxuICAgIFQsXG4gICAgVSBleHRlbmRzIElSZXF1ZXN0Q29uZmlnPFU+IGV4dGVuZHMgSU9sZFJlcU9wdGlvbnNcbiAgICAgID8gSU9sZFJlcU9wdGlvbnNcbiAgICAgIDogSVJlcXVlc3RDb25maWc8VT4gZXh0ZW5kcyBBeGlvc1JlcXVlc3RDb25maWdcbiAgICAgICAgPyBBeGlvc1JlcXVlc3RDb25maWdcbiAgICAgICAgOiBuZXZlclxuICA+KG9wdGlvbnM6IFUpOiBQcm9taXNlPElSZXNwb25zZTxULCBVPj4ge1xuICAgIHRoaXMub3B0aW9ucy5wcm94eSA9IHRoaXMuaGFuZGxlUHJveHkoKVxuICAgIHRoaXMub3B0aW9ucy5oZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzIHx8IHt9XG4gICAgdGhpcy5vcHRpb25zLm1heEJvZHlMZW5ndGggPSBJbmZpbml0eVxuICAgIHRoaXMub3B0aW9ucy5tYXhDb250ZW50TGVuZ3RoID0gSW5maW5pdHlcbiAgICBpZiAodGhpcy5vcHRpb25zLnByb3h5ICYmIG9wdGlvbnMudXJsPy5zdGFydHNXaXRoKCdodHRwczovLycpKSB7XG4gICAgICB0aGlzLm9wdGlvbnMuaHR0cHNBZ2VudCA9IGh0dHBzT3Zlckh0dHAoe1xuICAgICAgICBwcm94eToge1xuICAgICAgICAgIGhvc3Q6IHRoaXMub3B0aW9ucy5wcm94eS5ob3N0LFxuICAgICAgICAgIHBvcnQ6IHRoaXMub3B0aW9ucy5wcm94eS5wb3J0XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICB0aGlzLm9wdGlvbnMucHJveHkgPSBmYWxzZVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9wdGlvbnMuaHR0cHNBZ2VudCA9IGh0dHBzQWdlbnRcbiAgICB9XG4gICAgLy8gIU5PVElDRSB0aGlzLm9wdGlvbnMgIT09IG9wdGlvbnNcbiAgICAvLyB0aGlzLm9wdGlvbnMgaXMgdGhlIGRlZmF1bHQgb3B0aW9uc1xuICAgIGNvbnN0IGluc3RhbmNlID0gYXhpb3MuY3JlYXRlKHRoaXMub3B0aW9ucylcbiAgICBpbnN0YW5jZS5pbnRlcmNlcHRvcnMucmVzcG9uc2UudXNlKHJlc3BvbnNlSW50ZXJjZXB0b3IsIHJlc3BvbnNlRXJyb3JIYW5kbGVyKVxuXG4gICAgLy8gY29tcGF0aWJsZSB3aXRoIG9sZCByZXF1ZXN0IG9wdGlvbnMgdG8gbmV3IG9wdGlvbnNcbiAgICBjb25zdCBvcHQgPSByZXF1ZXN0SW50ZXJjZXB0b3Iob3B0aW9ucylcblxuICAgIGluc3RhbmNlLmludGVyY2VwdG9ycy5yZXF1ZXN0LnVzZShmdW5jdGlvbiAob2JqKSB7XG4gICAgICAvLyBoYW5kbGUgQ29udGVudC1UeXBlXG4gICAgICBsZXQgY29udGVudFR5cGUgPSAnJ1xuICAgICAgaWYgKG9iaj8uaGVhZGVycz8uY29udGVudFR5cGUpIHtcbiAgICAgICAgY29udGVudFR5cGUgPSBvYmouaGVhZGVycy5jb250ZW50VHlwZSBhcyBzdHJpbmdcbiAgICAgICAgZGVsZXRlIG9iai5oZWFkZXJzLmNvbnRlbnRUeXBlXG4gICAgICB9IGVsc2UgaWYgKG9iaj8uaGVhZGVycz8uQ29udGVudFR5cGUpIHtcbiAgICAgICAgY29udGVudFR5cGUgPSBvYmouaGVhZGVycy5Db250ZW50VHlwZSBhcyBzdHJpbmdcbiAgICAgICAgZGVsZXRlIG9iai5oZWFkZXJzLkNvbnRlbnRUeXBlXG4gICAgICB9IGVsc2UgaWYgKG9iaj8uaGVhZGVycz8uWydjb250ZW50LXR5cGUnXSkge1xuICAgICAgICBjb250ZW50VHlwZSA9IG9iai5oZWFkZXJzWydjb250ZW50LXR5cGUnXSBhcyBzdHJpbmdcbiAgICAgICAgZGVsZXRlIG9iai5oZWFkZXJzWydjb250ZW50LXR5cGUnXVxuICAgICAgfVxuICAgICAgaWYgKGNvbnRlbnRUeXBlICE9PSAnJyAmJiBvYmouaGVhZGVycykge1xuICAgICAgICBvYmouaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSBjb250ZW50VHlwZVxuICAgICAgfVxuICAgICAgcmV0dXJuIG9ialxuICAgIH0pXG4gICAgaWYgKCdyZXNvbHZlV2l0aEZ1bGxSZXNwb25zZScgaW4gb3B0aW9ucyAmJiBvcHRpb25zLnJlc29sdmVXaXRoRnVsbFJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gaW5zdGFuY2UucmVxdWVzdChvcHQpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBpbnN0YW5jZS5yZXF1ZXN0KG9wdCkudGhlbihyZXMgPT4ge1xuICAgICAgICAvLyB1c2Ugb2xkIHJlcXVlc3Qgb3B0aW9uIGZvcm1hdFxuICAgICAgICBpZiAob3B0Ll9faXNPbGRPcHRpb25zKSB7XG4gICAgICAgICAgaWYgKCdqc29uJyBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5qc29uKSB7XG4gICAgICAgICAgICAgIHJldHVybiByZXMuZGF0YVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkocmVzLmRhdGEpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiByZXMuZGF0YVxuICAgICAgICB9XG4gICAgICB9KSBhcyBQcm9taXNlPElSZXNwb25zZTxULCBVPj5cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUmVxdWVzdFxuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJ1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJ1xuaW1wb3J0IGZzLCB7IGVtcHR5RGlyU3luYywgZW5zdXJlRGlyU3luYyB9IGZyb20gJ2ZzLWV4dHJhJ1xuaW1wb3J0IGhlaWNDb252ZXJ0IGZyb20gJ2hlaWMtY29udmVydCdcbmltcG9ydCB7IGNsb25lRGVlcCB9IGZyb20gJ2xvZGFzaCdcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5cbmltcG9ydCB7XG4gIElCdWlsZEluV2F0ZXJNYXJrT3B0aW9ucyxcbiAgSUJ1aWxkSW5Db21wcmVzc09wdGlvbnMsXG4gIElMaWZlY3ljbGVQbHVnaW5zLFxuICBJUGF0aFRyYW5zZm9ybWVkSW1nSW5mbyxcbiAgSVBpY0dvLFxuICBJUGx1Z2luLFxuICBVbmRlZmluYWJsZSxcbiAgSUltZ0luZm9cbn0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQge1xuICBnZXRVUkxGaWxlLFxuICBoYW5kbGVVcmxFbmNvZGUsXG4gIGltYWdlQ29tcHJlc3MsXG4gIGlzVXJsLFxuICBpc05lZWRDb21wcmVzcyxcbiAgaXNOZWVkQWRkV2F0ZXJtYXJrLFxuICBpbWFnZUFkZFdhdGVyTWFyayxcbiAgcmVtb3ZlRXhpZixcbiAgcmVuYW1lRmlsZU5hbWVXaXRoQ3VzdG9tU3RyaW5nLFxuICBnZXRDb252ZXJ0ZWRGb3JtYXRcbn0gZnJvbSAnLi4vdXRpbHMvY29tbW9uJ1xuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uL3V0aWxzL2VudW0nXG5pbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAnLi4vdXRpbHMvY3JlYXRlQ29udGV4dCdcblxuY29uc3Qgd2F0ZXJtYXJrTXNnID0gJ0FkZCB3YXRlcm1hcmsgdG8gaW1hZ2UnXG5jb25zdCBjb21wcmVzc01zZyA9ICdDb21wcmVzcyBvciBjb252ZXJ0IGltYWdlJ1xuZXhwb3J0IGNsYXNzIExpZmVjeWNsZSBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY3R4OiBJUGljR29cbiAgcHJpdmF0ZSByZWFkb25seSB0dGZMaW5rOiBzdHJpbmcgPSAnaHR0cHM6Ly9yZWxlYXNlLnBpY2xpc3QuY24vc2ltaGVpLnR0ZidcbiAgdHRmUGF0aDogc3RyaW5nXG5cbiAgY29uc3RydWN0b3IoY3R4OiBJUGljR28pIHtcbiAgICBzdXBlcigpXG4gICAgdGhpcy5jdHggPSBjdHhcbiAgICBjb25zdCB0ZW1wRmlsZVBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICdwaWNsaXN0VGVtcCcpXG4gICAgY29uc3QgaW1nRmlsZVBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICdpbWdUZW1wJylcbiAgICB0aGlzLnR0ZlBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICdhc3NldHMnLCAnc2ltaGVpLnR0ZicpXG4gICAgZW5zdXJlRGlyU3luYyhpbWdGaWxlUGF0aClcbiAgICBlbXB0eURpclN5bmModGVtcEZpbGVQYXRoKVxuICB9XG5cbiAgYXN5bmMgZG93bmxvYWRUVEYoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUodGhpcy50dGZQYXRoKSlcbiAgICBpZiAoZnMuZXhpc3RzU3luYyh0aGlzLnR0ZlBhdGgpKSByZXR1cm4gdHJ1ZVxuICAgIHRoaXMuY3R4LmxvZy5pbmZvKCdEb3dubG9hZCB0dGYgZmlsZS4nKVxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBheGlvcy5nZXQodGhpcy50dGZMaW5rLCB7XG4gICAgICAgIHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJ1xuICAgICAgfSlcbiAgICAgIGZzLndyaXRlRmlsZVN5bmModGhpcy50dGZQYXRoLCByZXMuZGF0YSlcbiAgICAgIHRoaXMuY3R4LmxvZy5pbmZvKCdEb3dubG9hZCB0dGYgZmlsZSBzdWNjZXNzLicpXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgdGhpcy5jdHgubG9nLmVycm9yKCdEb3dubG9hZCB0dGYgZmlsZSBmYWlsZWQuJylcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIGhlbHBHZXRPcHRpb24oY3R4OiBJUGljR28pOiB7XG4gICAgY29tcHJlc3NPcHRpb25zOiBVbmRlZmluYWJsZTxJQnVpbGRJbkNvbXByZXNzT3B0aW9ucz5cbiAgICB3YXRlcm1hcmtPcHRpb25zOiBVbmRlZmluYWJsZTxJQnVpbGRJbldhdGVyTWFya09wdGlvbnM+XG4gIH0ge1xuICAgIGNvbnN0IGNvbXByZXNzT3B0aW9ucyA9IGN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8SUJ1aWxkSW5Db21wcmVzc09wdGlvbnM+PignYnVpbGRJbi5jb21wcmVzcycpXG4gICAgY29uc3Qgd2F0ZXJtYXJrT3B0aW9ucyA9IGN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8SUJ1aWxkSW5XYXRlck1hcmtPcHRpb25zPj4oJ2J1aWxkSW4ud2F0ZXJtYXJrJylcbiAgICBjb25zdCB0eXBlID1cbiAgICAgIGN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3BpY0JlZC51cGxvYWRlcicpIHx8XG4gICAgICBjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdwaWNCZWQuY3VycmVudCcpIHx8XG4gICAgICAnc21tcydcbiAgICBjb25zdCB1cGxvYWRlciA9IGN0eC5oZWxwZXIudXBsb2FkZXIuZ2V0KHR5cGUpXG4gICAgaWYgKCF1cGxvYWRlciAmJiBjb21wcmVzc09wdGlvbnMpIHtcbiAgICAgIGNvbXByZXNzT3B0aW9ucy5waWNCZWQgPSAnc21tcydcbiAgICB9IGVsc2UgaWYgKGNvbXByZXNzT3B0aW9ucykge1xuICAgICAgY29tcHJlc3NPcHRpb25zLnBpY0JlZCA9IHR5cGVcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbXByZXNzT3B0aW9ucyxcbiAgICAgIHdhdGVybWFya09wdGlvbnNcbiAgICB9XG4gIH1cblxuICBhc3luYyBzdGFydChpbnB1dDogYW55W10pOiBQcm9taXNlPElQaWNHbz4ge1xuICAgIC8vIGVuc3VyZSBldmVyeSB1cGxvYWQgcHJvY2VzcyBoYXMgYW4gdW5pcXVlIGNvbnRleHRcbiAgICBjb25zdCBjdHggPSBjcmVhdGVDb250ZXh0KHRoaXMuY3R4KVxuICAgIHRyeSB7XG4gICAgICAvLyBpbWFnZXMgaW5wdXRcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnB1dCBtdXN0IGJlIGFuIGFycmF5LicpXG4gICAgICB9XG4gICAgICBjdHguaW5wdXQgPSBpbnB1dFxuICAgICAgY3R4LnJhd0lucHV0UGF0aCA9IFtdIGFzIHN0cmluZ1tdXG4gICAgICBjdHgucmF3SW5wdXQgPSBjbG9uZURlZXAoaW5wdXQpXG4gICAgICBjdHgub3V0cHV0ID0gW10gYXMgSUltZ0luZm9bXVxuICAgICAgY29uc3QgeyBjb21wcmVzc09wdGlvbnMsIHdhdGVybWFya09wdGlvbnMgfSA9IHRoaXMuaGVscEdldE9wdGlvbihjdHgpXG4gICAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50LlVQTE9BRF9QUk9HUkVTUywgMClcbiAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuQkVGT1JFX1RSQU5TRk9STSwgY3R4KVxuICAgICAgY3R4LmxvZy5pbmZvKCdCZWZvcmUgdHJhbnNmb3JtJylcbiAgICAgIGlmIChjb21wcmVzc09wdGlvbnMgfHwgd2F0ZXJtYXJrT3B0aW9ucykge1xuICAgICAgICBjb25zdCB0ZW1wRmlsZVBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICdwaWNsaXN0VGVtcCcpXG5cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFxuICAgICAgICAgIGN0eC5pbnB1dC5tYXAoYXN5bmMgKGl0ZW06IHN0cmluZywgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXRlbUlzVXJsID0gaXNVcmwoaXRlbSlcbiAgICAgICAgICAgIGNvbnN0IGluZm86IElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvID0gaXRlbUlzVXJsID8gYXdhaXQgZ2V0VVJMRmlsZShpdGVtLCBjdHgpIDogeyBzdWNjZXNzOiBmYWxzZSB9XG4gICAgICAgICAgICBpZiAoaXRlbUlzVXJsICYmICghaW5mby5zdWNjZXNzIHx8ICFpbmZvLmJ1ZmZlcikpIHJldHVyblxuXG4gICAgICAgICAgICBsZXQgdHJhbnNmb3JtZWRCdWZmZXI6IFVuZGVmaW5hYmxlPEJ1ZmZlcj5cbiAgICAgICAgICAgIGxldCBpc1NraXAgPSBmYWxzZVxuICAgICAgICAgICAgY3R4LnJhd0lucHV0UGF0aCFbaW5kZXhdID0gaXRlbVxuICAgICAgICAgICAgY29uc3QgZXh0ZW50aW9uID0gaXRlbUlzVXJsID8gaW5mby5leHRuYW1lIHx8ICcnIDogcGF0aC5leHRuYW1lKGl0ZW0pXG4gICAgICAgICAgICBjb25zdCBmaWxlQnVmZmVyOiBCdWZmZXIgPSBpdGVtSXNVcmwgPyBpbmZvLmJ1ZmZlciEgOiBmcy5yZWFkRmlsZVN5bmMoaXRlbSlcbiAgICAgICAgICAgIGlmIChpc05lZWRBZGRXYXRlcm1hcmsod2F0ZXJtYXJrT3B0aW9ucywgZXh0ZW50aW9uKSkge1xuICAgICAgICAgICAgICBpZiAoISh3YXRlcm1hcmtPcHRpb25zPy53YXRlcm1hcmtGb250UGF0aCB8fCB3YXRlcm1hcmtPcHRpb25zPy53YXRlcm1hcmtUeXBlID09PSAnaW1hZ2UnKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRvd25sb2FkVFRGUmV0ID0gYXdhaXQgdGhpcy5kb3dubG9hZFRURigpXG4gICAgICAgICAgICAgICAgaWYgKCFkb3dubG9hZFRURlJldCkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5jdHgubG9nLndhcm4oJ0Rvd25sb2FkIHR0ZiBmaWxlIGZhaWxlZCwgc2tpcCBhZGQgd2F0ZXJtYXJrLicpXG4gICAgICAgICAgICAgICAgICBpc1NraXAgPSB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmICghaXNTa2lwKSB7XG4gICAgICAgICAgICAgICAgY3R4LmxvZy5pbmZvKHdhdGVybWFya01zZylcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZEJ1ZmZlciA9IGF3YWl0IGltYWdlQWRkV2F0ZXJNYXJrKGZpbGVCdWZmZXIsIHdhdGVybWFya09wdGlvbnMhLCB0aGlzLnR0ZlBhdGgsIGN0eC5sb2cpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc05lZWRDb21wcmVzcyhjb21wcmVzc09wdGlvbnMsIGV4dGVudGlvbikpIHtcbiAgICAgICAgICAgICAgY3R4LmxvZy5pbmZvKGNvbXByZXNzTXNnKVxuICAgICAgICAgICAgICBpZiAoIWl0ZW1Jc1VybCAmJiAoZXh0ZW50aW9uID09PSAnLmhlaWMnIHx8IGV4dGVudGlvbiA9PT0gJy5oZWlmJykpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBoZWljUmVzdWx0ID0gYXdhaXQgaGVpY0NvbnZlcnQoe1xuICAgICAgICAgICAgICAgICAgYnVmZmVyOiBmaWxlQnVmZmVyLFxuICAgICAgICAgICAgICAgICAgZm9ybWF0OiAnSlBFRycsXG4gICAgICAgICAgICAgICAgICBxdWFsaXR5OiAxXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICBjb25zdCB0ZW1wSGVpY0NvbnZlcnRGaWxlID0gcGF0aC5qb2luKHRlbXBGaWxlUGF0aCwgYCR7cGF0aC5iYXNlbmFtZShpdGVtLCBleHRlbnRpb24pfS5qcGdgKVxuICAgICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmModGVtcEhlaWNDb252ZXJ0RmlsZSwgQnVmZmVyLmZyb20oaGVpY1Jlc3VsdCkpXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRCdWZmZXIgPSBhd2FpdCBpbWFnZUNvbXByZXNzKFxuICAgICAgICAgICAgICAgICAgZnMucmVhZEZpbGVTeW5jKHRlbXBIZWljQ29udmVydEZpbGUpLFxuICAgICAgICAgICAgICAgICAgY29tcHJlc3NPcHRpb25zISxcbiAgICAgICAgICAgICAgICAgICcuanBnJyxcbiAgICAgICAgICAgICAgICAgIGN0eC5sb2dcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRCdWZmZXIgPSBhd2FpdCBpbWFnZUNvbXByZXNzKFxuICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRCdWZmZXIgPz8gZmlsZUJ1ZmZlcixcbiAgICAgICAgICAgICAgICAgIGNvbXByZXNzT3B0aW9ucyEsXG4gICAgICAgICAgICAgICAgICBleHRlbnRpb24sXG4gICAgICAgICAgICAgICAgICBjdHgubG9nXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRyYW5zZm9ybWVkQnVmZmVyICYmIGNvbXByZXNzT3B0aW9ucz8uaXNSZW1vdmVFeGlmKSB7XG4gICAgICAgICAgICAgIGN0eC5sb2cuaW5mbygnUmVtb3ZlIGV4aWYgaW5mby4nKVxuICAgICAgICAgICAgICB0cmFuc2Zvcm1lZEJ1ZmZlciA9IGF3YWl0IHJlbW92ZUV4aWYoZmlsZUJ1ZmZlciwgZXh0ZW50aW9uKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRyYW5zZm9ybWVkQnVmZmVyKSB7XG4gICAgICAgICAgICAgIGxldCBuZXdFeHQgPSBjb21wcmVzc09wdGlvbnM/LmlzQ29udmVydCA/IGdldENvbnZlcnRlZEZvcm1hdChjb21wcmVzc09wdGlvbnMsIGV4dGVudGlvbikgOiBleHRlbnRpb25cbiAgICAgICAgICAgICAgbmV3RXh0ID0gbmV3RXh0LnN0YXJ0c1dpdGgoJy4nKSA/IG5ld0V4dCA6IGAuJHtuZXdFeHR9YFxuICAgICAgICAgICAgICBjb25zdCB0ZW1wRmlsZSA9IGl0ZW1Jc1VybFxuICAgICAgICAgICAgICAgID8gcGF0aC5qb2luKFxuICAgICAgICAgICAgICAgICAgICB0ZW1wRmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgICAgIGAke1xuICAgICAgICAgICAgICAgICAgICAgIGluZm8uZmlsZU5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgID8gYCR7cGF0aC5iYXNlbmFtZShpbmZvLmZpbGVOYW1lLCBwYXRoLmV4dG5hbWUoaW5mby5maWxlTmFtZSkpfWBcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbmV3IERhdGUoKS5nZXRUaW1lKClcbiAgICAgICAgICAgICAgICAgICAgfSR7bmV3RXh0fWBcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICA6IHBhdGguam9pbih0ZW1wRmlsZVBhdGgsIGAke3BhdGguYmFzZW5hbWUoaXRlbSwgZXh0ZW50aW9uKX0ke25ld0V4dH1gKVxuICAgICAgICAgICAgICBjdHgucmF3SW5wdXRQYXRoIVtpbmRleF0gPSBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgcGF0aC5kaXJuYW1lKGl0ZW0pLFxuICAgICAgICAgICAgICAgIGl0ZW1Jc1VybCA/IHBhdGguYmFzZW5hbWUodGVtcEZpbGUpIDogYCR7cGF0aC5iYXNlbmFtZShpdGVtLCBleHRlbnRpb24pfSR7bmV3RXh0fWBcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRlbXBGaWxlLCB0cmFuc2Zvcm1lZEJ1ZmZlcilcbiAgICAgICAgICAgICAgY3R4LmlucHV0W2luZGV4XSA9IHRlbXBGaWxlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGN0eC5pbnB1dCkge1xuICAgICAgICAgIGN0eC5yYXdJbnB1dFBhdGgucHVzaChpdGVtKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBsaWZlY3ljbGUgbWFpblxuICAgICAgYXdhaXQgdGhpcy5iZWZvcmVUcmFuc2Zvcm0oY3R4KVxuICAgICAgYXdhaXQgdGhpcy5kb1RyYW5zZm9ybShjdHgpXG4gICAgICBjb25zdCByZW5hbWVDb25maWcgPSBjdHguZ2V0Q29uZmlnPGFueT4oJ2J1aWxkSW4ucmVuYW1lJykgfHwge31cbiAgICAgIGlmIChyZW5hbWVDb25maWcuZW5hYmxlKSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdCA9IHJlbmFtZUNvbmZpZy5mb3JtYXQgfHwgJ3tmaWxlbmFtZX0nXG4gICAgICAgIGN0eC5vdXRwdXQgPSBjdHgub3V0cHV0Lm1hcCgoaXRlbTogSUltZ0luZm8sIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICBsZXQgZmlsZU5hbWUgPSBpdGVtLmZpbGVOYW1lXG4gICAgICAgICAgaWYgKGZvcm1hdCkge1xuICAgICAgICAgICAgZmlsZU5hbWUgPSByZW5hbWVGaWxlTmFtZVdpdGhDdXN0b21TdHJpbmcoXG4gICAgICAgICAgICAgIGN0eC5yYXdJbnB1dFBhdGghW2luZGV4XSxcbiAgICAgICAgICAgICAgZm9ybWF0LFxuICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIGl0ZW0uYmFzZTY0SW1hZ2UgPyBpdGVtLmJhc2U2NEltYWdlIDogaXRlbS5idWZmZXJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGZpbGVOYW1lID0gZmlsZU5hbWUucmVwbGFjZSgvXFwvKy9nLCAnLycpXG4gICAgICAgICAgICBpZiAoZmlsZU5hbWUuc2xpY2UoLTEpID09PSAnLycpIHtcbiAgICAgICAgICAgICAgZmlsZU5hbWUgPSBmaWxlTmFtZSArIGluZGV4LnRvU3RyaW5nKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaXRlbS5maWxlTmFtZSA9IGZpbGVOYW1lXG4gICAgICAgICAgcmV0dXJuIGl0ZW1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRoaXMuYmVmb3JlVXBsb2FkKGN0eClcbiAgICAgIGF3YWl0IHRoaXMuZG9VcGxvYWQoY3R4KVxuICAgICAgY3R4LmlucHV0ID0gY3R4LnJhd0lucHV0XG4gICAgICBhd2FpdCB0aGlzLmFmdGVyVXBsb2FkKGN0eClcbiAgICAgIHJldHVybiBjdHhcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIGN0eC5sb2cud2FybihJQnVpbGRJbkV2ZW50LkZBSUxFRClcbiAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuVVBMT0FEX1BST0dSRVNTLCAtMSlcbiAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuRkFJTEVELCBlKVxuICAgICAgY3R4LmxvZy5lcnJvcihlKVxuICAgICAgaWYgKGN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ2RlYnVnJykpIHtcbiAgICAgICAgdGhyb3cgZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGN0eFxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYmVmb3JlVHJhbnNmb3JtKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+IHtcbiAgICBhd2FpdCB0aGlzLmhhbmRsZVBsdWdpbnMoY3R4LmhlbHBlci5iZWZvcmVUcmFuc2Zvcm1QbHVnaW5zLCBjdHgpXG4gICAgcmV0dXJuIGN0eFxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkb1RyYW5zZm9ybShjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiB7XG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5VUExPQURfUFJPR1JFU1MsIDMwKVxuICAgIGNvbnN0IHR5cGUgPSBjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdwaWNCZWQudHJhbnNmb3JtZXInKSB8fCAncGF0aCdcbiAgICBsZXQgY3VycmVudFRyYW5zZm9ybWVyID0gdHlwZVxuICAgIGxldCB0cmFuc2Zvcm1lciA9IGN0eC5oZWxwZXIudHJhbnNmb3JtZXIuZ2V0KHR5cGUpXG4gICAgaWYgKCF0cmFuc2Zvcm1lcikge1xuICAgICAgdHJhbnNmb3JtZXIgPSBjdHguaGVscGVyLnRyYW5zZm9ybWVyLmdldCgncGF0aCcpXG4gICAgICBjdXJyZW50VHJhbnNmb3JtZXIgPSAncGF0aCdcbiAgICAgIGN0eC5sb2cud2FybihgQ2FuJ3QgZmluZCB0cmFuc2Zvcm1lciAtICR7dHlwZX0sIHN3aXRjaCB0byBkZWZhdWx0IHRyYW5zZm9ybWVyIC0gcGF0aGApXG4gICAgfVxuICAgIGN0eC5sb2cuaW5mbyhgVHJhbnNmb3JtaW5nLi4uIEN1cnJlbnQgdHJhbnNmb3JtZXIgaXMgWyR7Y3VycmVudFRyYW5zZm9ybWVyfV1gKVxuICAgIGF3YWl0IHRyYW5zZm9ybWVyPy5oYW5kbGUoY3R4KVxuICAgIHJldHVybiBjdHhcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYmVmb3JlVXBsb2FkKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+IHtcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50LlVQTE9BRF9QUk9HUkVTUywgNjApXG4gICAgY3R4LmxvZy5pbmZvKCdCZWZvcmUgdXBsb2FkJylcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50LkJFRk9SRV9VUExPQUQsIGN0eClcbiAgICBhd2FpdCB0aGlzLmhhbmRsZVBsdWdpbnMoY3R4LmhlbHBlci5iZWZvcmVVcGxvYWRQbHVnaW5zLCBjdHgpXG4gICAgcmV0dXJuIGN0eFxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkb1VwbG9hZChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiB7XG4gICAgbGV0IHR5cGUgPVxuICAgICAgY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+PigncGljQmVkLnVwbG9hZGVyJykgfHxcbiAgICAgIGN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3BpY0JlZC5jdXJyZW50JykgfHxcbiAgICAgICdzbW1zJ1xuICAgIGxldCB1cGxvYWRlciA9IGN0eC5oZWxwZXIudXBsb2FkZXIuZ2V0KHR5cGUpXG4gICAgbGV0IGN1cnJlbnRUcmFuc2Zvcm1lciA9IHR5cGVcbiAgICBpZiAoIXVwbG9hZGVyKSB7XG4gICAgICBjdHgubG9nLndhcm4oYENhbid0IGZpbmQgdXBsb2FkZXIgLSAke3R5cGV9LCBzd2l0Y2ggdG8gZGVmYXVsdCB1cGxvYWRlciAtIHNtbXNgKVxuICAgICAgdHlwZSA9ICdzbW1zJ1xuICAgICAgY3VycmVudFRyYW5zZm9ybWVyID0gJ3NtbXMnXG4gICAgICB1cGxvYWRlciA9IGN0eC5oZWxwZXIudXBsb2FkZXIuZ2V0KCdzbW1zJylcbiAgICB9XG4gICAgY3R4LmxvZy5pbmZvKGBVcGxvYWRpbmcuLi4gQ3VycmVudCB1cGxvYWRlciBpcyBbJHtjdXJyZW50VHJhbnNmb3JtZXJ9XWApXG4gICAgYXdhaXQgdXBsb2FkZXI/LmhhbmRsZShjdHgpXG4gICAgZm9yIChjb25zdCBvdXRwdXRJbWcgb2YgY3R4Lm91dHB1dCkge1xuICAgICAgb3V0cHV0SW1nLnR5cGUgPSB0eXBlXG4gICAgfVxuICAgIHJldHVybiBjdHhcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYWZ0ZXJVcGxvYWQoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4ge1xuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuQUZURVJfVVBMT0FELCBjdHgpXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5VUExPQURfUFJPR1JFU1MsIDEwMClcbiAgICBhd2FpdCB0aGlzLmhhbmRsZVBsdWdpbnMoY3R4LmhlbHBlci5hZnRlclVwbG9hZFBsdWdpbnMsIGN0eClcbiAgICBsZXQgbXNnID0gJydcbiAgICBjb25zdCBsZW5ndGggPSBjdHgub3V0cHV0Lmxlbmd0aFxuICAgIGNvbnN0IGlzRW5jb2RlT3V0cHV0VVJMID0gY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxib29sZWFuPj4oJ3NldHRpbmdzLmVuY29kZU91dHB1dFVSTCcpID09PSB0cnVlXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHR5cGVvZiBjdHgub3V0cHV0W2ldLmltZ1VybCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgbXNnICs9IGlzRW5jb2RlT3V0cHV0VVJMID8gaGFuZGxlVXJsRW5jb2RlKGN0eC5vdXRwdXRbaV0uaW1nVXJsISkgOiBjdHgub3V0cHV0W2ldLmltZ1VybCFcbiAgICAgICAgaWYgKGkgIT09IGxlbmd0aCAtIDEpIHtcbiAgICAgICAgICBtc2cgKz0gJ1xcbidcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZGVsZXRlIGN0eC5vdXRwdXRbaV0uYmFzZTY0SW1hZ2VcbiAgICAgIGRlbGV0ZSBjdHgub3V0cHV0W2ldLmJ1ZmZlclxuICAgIH1cbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50LkZJTklTSEVELCBjdHgpXG4gICAgY3R4LmxvZy5zdWNjZXNzKGBcXG4ke21zZ31gKVxuICAgIHJldHVybiBjdHhcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlUGx1Z2lucyhsaWZlQ3ljbGVQbHVnaW5zOiBJTGlmZWN5Y2xlUGx1Z2lucywgY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4ge1xuICAgIGNvbnN0IHBsdWdpbnMgPSBsaWZlQ3ljbGVQbHVnaW5zLmdldExpc3QoKVxuICAgIGNvbnN0IHBsdWdpbk5hbWVzID0gbGlmZUN5Y2xlUGx1Z2lucy5nZXRJZExpc3QoKVxuICAgIGNvbnN0IGxpZmVDeWNsZU5hbWUgPSBsaWZlQ3ljbGVQbHVnaW5zLmdldE5hbWUoKVxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgcGx1Z2lucy5tYXAoYXN5bmMgKHBsdWdpbjogSVBsdWdpbiwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGN0eC5sb2cuaW5mbyhgJHtsaWZlQ3ljbGVOYW1lfTogJHtwbHVnaW5OYW1lc1tpbmRleF19IHJ1bm5pbmdgKVxuICAgICAgICAgIGF3YWl0IHBsdWdpbi5oYW5kbGUoY3R4KVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgY3R4LmxvZy5lcnJvcihgJHtsaWZlQ3ljbGVOYW1lfTogJHtwbHVnaW5OYW1lc1tpbmRleF19IGVycm9yYClcbiAgICAgICAgICB0aHJvdyBlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKVxuICAgIHJldHVybiBjdHhcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBMaWZlY3ljbGVcbiIsImltcG9ydCB7IElQaWNHbyB9IGZyb20gJy4uL3R5cGVzJ1xuXG4vKipcbiAqIGNyZWF0ZSBhbiB1bmlxdWUgY29udGV4dCBmb3IgZWFjaCB1cGxvYWQgcHJvY2Vzc1xuICogQHBhcmFtIGN0eFxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlQ29udGV4dCA9IChjdHg6IElQaWNHbyk6IElQaWNHbyA9PiB7XG4gIHJldHVybiB7XG4gICAgY29uZmlnUGF0aDogY3R4LmNvbmZpZ1BhdGgsXG4gICAgYmFzZURpcjogY3R4LmJhc2VEaXIsXG4gICAgbG9nOiBjdHgubG9nLFxuICAgIGNtZDogY3R4LmNtZCxcbiAgICBvdXRwdXQ6IFtdLFxuICAgIGlucHV0OiBbXSxcbiAgICByYXdJbnB1dDogW10sXG4gICAgcGx1Z2luTG9hZGVyOiBjdHgucGx1Z2luTG9hZGVyLFxuICAgIHBsdWdpbkhhbmRsZXI6IGN0eC5wbHVnaW5IYW5kbGVyLFxuICAgIFJlcXVlc3Q6IGN0eC5SZXF1ZXN0LFxuICAgIGhlbHBlcjogY3R4LmhlbHBlcixcbiAgICBWRVJTSU9OOiBjdHguVkVSU0lPTixcbiAgICBHVUlfVkVSU0lPTjogY3R4LkdVSV9WRVJTSU9OLFxuICAgIHJlcXVlc3Q6IGN0eC5yZXF1ZXN0LFxuICAgIGkxOG46IGN0eC5pMThuLFxuICAgIGdldENvbmZpZzogY3R4LmdldENvbmZpZy5iaW5kKGN0eCksXG4gICAgc2F2ZUNvbmZpZzogY3R4LnNhdmVDb25maWcuYmluZChjdHgpLFxuICAgIHJlbW92ZUNvbmZpZzogY3R4LnJlbW92ZUNvbmZpZy5iaW5kKGN0eCksXG4gICAgc2V0Q29uZmlnOiBjdHguc2V0Q29uZmlnLmJpbmQoY3R4KSxcbiAgICB1bnNldENvbmZpZzogY3R4LnVuc2V0Q29uZmlnLmJpbmQoY3R4KSxcbiAgICB1cGxvYWQ6IGN0eC51cGxvYWQuYmluZChjdHgpLFxuICAgIGFkZExpc3RlbmVyOiBjdHguYWRkTGlzdGVuZXIuYmluZChjdHgpLFxuICAgIG9uOiBjdHgub24uYmluZChjdHgpLFxuICAgIG9uY2U6IGN0eC5vbmNlLmJpbmQoY3R4KSxcbiAgICByZW1vdmVMaXN0ZW5lcjogY3R4LnJlbW92ZUxpc3RlbmVyLmJpbmQoY3R4KSxcbiAgICBvZmY6IGN0eC5vZmYuYmluZChjdHgpLFxuICAgIHJlbW92ZUFsbExpc3RlbmVyczogY3R4LnJlbW92ZUFsbExpc3RlbmVycy5iaW5kKGN0eCksXG4gICAgc2V0TWF4TGlzdGVuZXJzOiBjdHguc2V0TWF4TGlzdGVuZXJzLmJpbmQoY3R4KSxcbiAgICBnZXRNYXhMaXN0ZW5lcnM6IGN0eC5nZXRNYXhMaXN0ZW5lcnMuYmluZChjdHgpLFxuICAgIGxpc3RlbmVyczogY3R4Lmxpc3RlbmVycy5iaW5kKGN0eCksXG4gICAgcmF3TGlzdGVuZXJzOiBjdHgucmF3TGlzdGVuZXJzLmJpbmQoY3R4KSxcbiAgICBlbWl0OiBjdHguZW1pdC5iaW5kKGN0eCksXG4gICAgbGlzdGVuZXJDb3VudDogY3R4Lmxpc3RlbmVyQ291bnQuYmluZChjdHgpLFxuICAgIHByZXBlbmRMaXN0ZW5lcjogY3R4LnByZXBlbmRMaXN0ZW5lci5iaW5kKGN0eCksXG4gICAgcHJlcGVuZE9uY2VMaXN0ZW5lcjogY3R4LnByZXBlbmRPbmNlTGlzdGVuZXIuYmluZChjdHgpLFxuICAgIGV2ZW50TmFtZXM6IGN0eC5ldmVudE5hbWVzLmJpbmQoY3R4KVxuICB9XG59XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnXG5pbXBvcnQgeyBJUGljR28sIElQbHVnaW5Db25maWcsIElTbW1zQ29uZmlnLCBJT2xkUmVxT3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXG5pbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXG5cbmNvbnN0IHBvc3RPcHRpb25zID0gKGZpbGVOYW1lOiBzdHJpbmcsIGltYWdlOiBCdWZmZXIsIGFwaVRva2VuOiBzdHJpbmcsIGJhY2t1cERvbWFpbiA9ICcnKTogSU9sZFJlcU9wdGlvbnMgPT4ge1xuICBsZXQgZG9tYWluID0gYmFja3VwRG9tYWluIHx8ICdzbS5tcydcbiAgZG9tYWluID0gZG9tYWluLnJlcGxhY2UoL15odHRwcz86XFwvXFwvLywgJycpLnJlcGxhY2UoL1xcLyQvLCAnJylcbiAgcmV0dXJuIHtcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICB1cmw6IGBodHRwczovLyR7ZG9tYWlufS9hcGkvdjIvdXBsb2FkYCxcbiAgICBoZWFkZXJzOiB7XG4gICAgICBjb250ZW50VHlwZTogJ211bHRpcGFydC9mb3JtLWRhdGEnLFxuICAgICAgJ1VzZXItQWdlbnQnOiAnUGljTGlzdCcsXG4gICAgICBBdXRob3JpemF0aW9uOiBhcGlUb2tlblxuICAgIH0sXG4gICAgZm9ybURhdGE6IHtcbiAgICAgIHNtZmlsZToge1xuICAgICAgICB2YWx1ZTogaW1hZ2UsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBmaWxlbmFtZTogZmlsZU5hbWVcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNzbDogJ3RydWUnXG4gICAgfVxuICB9XG59XG5cbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XG4gIGNvbnN0IHNtbXNDb25maWcgPSBjdHguZ2V0Q29uZmlnPElTbW1zQ29uZmlnPigncGljQmVkLnNtbXMnKVxuICBpZiAoIXNtbXNDb25maWcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbiBub3QgZmluZCBzbW1zIGNvbmZpZyEnKVxuICB9XG4gIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XG4gIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcbiAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcbiAgICAgIGxldCBpbWFnZSA9IGltZy5idWZmZXJcbiAgICAgIGlmICghaW1hZ2UgJiYgaW1nLmJhc2U2NEltYWdlKSB7XG4gICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBvc3RDb25maWcgPSBwb3N0T3B0aW9ucyhpbWcuZmlsZU5hbWUsIGltYWdlLCBzbW1zQ29uZmlnPy50b2tlbiwgc21tc0NvbmZpZz8uYmFja3VwRG9tYWluKVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzOiBzdHJpbmcgPSBhd2FpdCBjdHgucmVxdWVzdChwb3N0Q29uZmlnKVxuICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5wYXJzZShyZXMpXG4gICAgICAgIGlmIChib2R5LmNvZGUgPT09ICdzdWNjZXNzJykge1xuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxuICAgICAgICAgIGltZy5pbWdVcmwgPSBib2R5LmRhdGEudXJsXG4gICAgICAgICAgaW1nLmhhc2ggPSBib2R5LmRhdGEuaGFzaFxuICAgICAgICB9IGVsc2UgaWYgKGJvZHkuY29kZSA9PT0gJ2ltYWdlX3JlcGVhdGVkJyAmJiB0eXBlb2YgYm9keS5pbWFnZXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgLy8gZG8gZXh0cmEgY2hlY2sgc2luY2UgdGhpcyBlcnJvciByZXR1cm4gaXMgbm90IGRvY3VtZW50ZWQgYXQgaHR0cHM6Ly9kb2Muc20ubXMvI2FwaS1JbWFnZS1VcGxvYWRcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcbiAgICAgICAgICBpbWcuaW1nVXJsID0gYm9keS5pbWFnZXNcbiAgICAgICAgICBjb25zdCB1cGxvYWRIaXN0b3J5ID0gYXdhaXQgYXhpb3MuZ2V0KCdodHRwczovL3NtLm1zL2FwaS92Mi91cGxvYWRfaGlzdG9yeScsIHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgQXV0aG9yaXphdGlvbjogc21tc0NvbmZpZy50b2tlblxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICAgaWYgKHVwbG9hZEhpc3RvcnkuZGF0YS5jb2RlID09PSAnc3VjY2VzcycpIHtcbiAgICAgICAgICAgIGNvbnN0IGltYWdlcyA9IHVwbG9hZEhpc3RvcnkuZGF0YS5kYXRhXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGltYWdlIG9mIGltYWdlcykge1xuICAgICAgICAgICAgICBpZiAoaW1hZ2UudXJsID09PSBib2R5LmltYWdlcykge1xuICAgICAgICAgICAgICAgIGltZy5oYXNoID0gaW1hZ2UuaGFzaFxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcbiAgICAgICAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXG4gICAgICAgICAgICBib2R5OiBib2R5Lm1lc3NhZ2VcbiAgICAgICAgICB9KVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihib2R5Lm1lc3NhZ2UpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICBjdHgubG9nLmVycm9yKGUpXG4gICAgICAgIHRocm93IGVcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGN0eFxufVxuXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJU21tc0NvbmZpZz4oJ3BpY0JlZC5zbW1zJykgfHwge31cbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXG4gICAge1xuICAgICAgbmFtZTogJ3Rva2VuJyxcbiAgICAgIG1lc3NhZ2U6ICdhcGkgdG9rZW4nLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU01NU19UT0tFTicpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NNTVNfVE9LRU4nKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcudG9rZW4gfHwgJycsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2JhY2t1cERvbWFpbicsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TTU1TX0JBQ0tVUF9ET01BSU4nKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NNTVNfTUVTU0FHRV9CQUNLVVBfRE9NQUlOJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU01NU19CQUNLVVBfRE9NQUlOJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmJhY2t1cERvbWFpbiB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH1cbiAgXVxuICByZXR1cm4gY29uZmlnXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyKGN0eDogSVBpY0dvKTogdm9pZCB7XG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ3NtbXMnLCB7XG4gICAgZ2V0IG5hbWUoKSB7XG4gICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NNTVMnKVxuICAgIH0sXG4gICAgaGFuZGxlLFxuICAgIGNvbmZpZ1xuICB9KVxufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFBhdGhIZWxwZXIoe1xuICBwYXRoLFxuICBzdGFydFNsYXNoID0gZmFsc2UsXG4gIGVuZFNsYXNoID0gdHJ1ZSxcbiAgcm9vdFRvRW1wdHkgPSB0cnVlXG59OiB7XG4gIHBhdGg/OiBzdHJpbmdcbiAgc3RhcnRTbGFzaD86IGJvb2xlYW5cbiAgZW5kU2xhc2g/OiBib29sZWFuXG4gIHJvb3RUb0VtcHR5PzogYm9vbGVhblxufSk6IHN0cmluZyB7XG4gIGNvbnN0IGNsZWFuUGF0aCA9IHBhdGg/LnJlcGxhY2UoL15cXC8rfFxcLyskL2csICcnKS5yZXBsYWNlKC9cXC97Mix9L2csICcvJylcbiAgaWYgKCFjbGVhblBhdGgpIHtcbiAgICByZXR1cm4gcm9vdFRvRW1wdHkgPyAnJyA6ICcvJ1xuICB9XG4gIHJldHVybiBgJHtzdGFydFNsYXNoID8gJy8nIDogJyd9JHtjbGVhblBhdGh9JHtlbmRTbGFzaCA/ICcvJyA6ICcnfWBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZVBhdGgocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHBhdGhcbiAgICAucmVwbGFjZSgvXFwvezIsfS9nLCAnLycpXG4gICAgLnNwbGl0KCcvJylcbiAgICAubWFwKHAgPT4gZW5jb2RlVVJJQ29tcG9uZW50KHApKVxuICAgIC5qb2luKCcvJylcbn1cbiIsImltcG9ydCBjcnlwdG8gZnJvbSAnY3J5cHRvJ1xuaW1wb3J0IHsgbG9va3VwIH0gZnJvbSAnbWltZS10eXBlcydcbmltcG9ydCB7IElQaWNHbywgSVBsdWdpbkNvbmZpZywgSVRjeXVuQ29uZmlnLCBJT2xkUmVxT3B0aW9uc1dpdGhGdWxsUmVzcG9uc2UgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xuaW1wb3J0IHsgZW5jb2RlUGF0aCwgZm9ybWF0UGF0aEhlbHBlciB9IGZyb20gJy4vdXRpbHMnXG5cbi8vIGdlbmVyYXRlIENPUyBzaWduYXR1cmUgc3RyaW5nXG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNpZ25hdHVyZSB7XG4gIHNpZ25hdHVyZTogc3RyaW5nXG4gIGFwcElkOiBzdHJpbmdcbiAgYnVja2V0OiBzdHJpbmdcbiAgc2lnblRpbWU6IHN0cmluZ1xufVxuXG5jb25zdCBnZW5lcmF0ZVNpZ25hdHVyZSA9IChvcHRpb25zOiBJVGN5dW5Db25maWcsIGZpbGVOYW1lOiBzdHJpbmcpOiBJU2lnbmF0dXJlID0+IHtcbiAgY29uc3Qgc2VjcmV0SWQgPSBvcHRpb25zLnNlY3JldElkXG4gIGNvbnN0IHNlY3JldEtleSA9IG9wdGlvbnMuc2VjcmV0S2V5XG4gIGNvbnN0IGFwcElkID0gb3B0aW9ucy5hcHBJZFxuICBjb25zdCBidWNrZXQgPSBvcHRpb25zLmJ1Y2tldFxuICBsZXQgc2lnbmF0dXJlXG4gIGxldCBzaWduVGltZTogc3RyaW5nID0gJydcbiAgaWYgKCFvcHRpb25zLnZlcnNpb24gfHwgb3B0aW9ucy52ZXJzaW9uID09PSAndjQnKSB7XG4gICAgY29uc3QgcmFuZG9tID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMDAwMDAwMDApXG4gICAgY29uc3QgY3VycmVudCA9IE1hdGguZmxvb3IobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKSAtIDFcbiAgICBjb25zdCBleHBpcmVkID0gY3VycmVudCArIDM2MDBcblxuICAgIGNvbnN0IG11bHRpU2lnbmF0dXJlID0gYGE9JHthcHBJZH0mYj0ke2J1Y2tldH0maz0ke3NlY3JldElkfSZlPSR7ZXhwaXJlZH0mdD0ke2N1cnJlbnR9JnI9JHtyYW5kb219JmY9YFxuXG4gICAgY29uc3Qgc2lnbkhleEtleSA9IGNyeXB0by5jcmVhdGVIbWFjKCdzaGExJywgc2VjcmV0S2V5KS51cGRhdGUobXVsdGlTaWduYXR1cmUpLmRpZ2VzdCgpXG4gICAgY29uc3QgdGVtcFN0cmluZyA9IEJ1ZmZlci5jb25jYXQoW3NpZ25IZXhLZXksIEJ1ZmZlci5mcm9tKG11bHRpU2lnbmF0dXJlKV0pXG4gICAgc2lnbmF0dXJlID0gQnVmZmVyLmZyb20odGVtcFN0cmluZykudG9TdHJpbmcoJ2Jhc2U2NCcpXG4gIH0gZWxzZSB7XG4gICAgLy8gaHR0cHM6Ly9jbG91ZC50ZW5jZW50LmNvbS9kb2N1bWVudC9wcm9kdWN0LzQzNi83Nzc4I3NpZ25hdHVyZVxuICAgIGNvbnN0IHRvZGF5ID0gTWF0aC5mbG9vcihuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApXG4gICAgY29uc3QgdG9tb3Jyb3cgPSB0b2RheSArIDg2NDAwXG4gICAgc2lnblRpbWUgPSBgJHt0b2RheX07JHt0b21vcnJvd31gXG4gICAgY29uc3Qgc2lnbktleSA9IGNyeXB0by5jcmVhdGVIbWFjKCdzaGExJywgc2VjcmV0S2V5KS51cGRhdGUoc2lnblRpbWUpLmRpZ2VzdCgnaGV4JylcbiAgICBjb25zdCBlbmRwb2ludCA9IG9wdGlvbnMuZW5kcG9pbnQgPyBvcHRpb25zLmVuZHBvaW50IDogYGNvcy4ke29wdGlvbnMuYXJlYX0ubXlxY2xvdWQuY29tYFxuICAgIGNvbnN0IGh0dHBTdHJpbmcgPSBgcHV0XFxuLyR7b3B0aW9ucy5wYXRofSR7ZmlsZU5hbWV9XFxuXFxuaG9zdD0ke29wdGlvbnMuYnVja2V0fS4ke2VuZHBvaW50fVxcbmBcbiAgICBjb25zdCBzaGExZWRIdHRwU3RyaW5nID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTEnKS51cGRhdGUoaHR0cFN0cmluZykuZGlnZXN0KCdoZXgnKVxuICAgIGNvbnN0IHN0cmluZ1RvU2lnbiA9IGBzaGExXFxuJHtzaWduVGltZX1cXG4ke3NoYTFlZEh0dHBTdHJpbmd9XFxuYFxuICAgIHNpZ25hdHVyZSA9IGNyeXB0by5jcmVhdGVIbWFjKCdzaGExJywgc2lnbktleSkudXBkYXRlKHN0cmluZ1RvU2lnbikuZGlnZXN0KCdoZXgnKVxuICB9XG4gIHJldHVybiB7XG4gICAgc2lnbmF0dXJlLFxuICAgIGFwcElkLFxuICAgIGJ1Y2tldCxcbiAgICBzaWduVGltZVxuICB9XG59XG5cbmNvbnN0IHBvc3RPcHRpb25zID0gKFxuICBvcHRpb25zOiBJVGN5dW5Db25maWcsXG4gIGZpbGVOYW1lOiBzdHJpbmcsXG4gIHNpZ25hdHVyZTogSVNpZ25hdHVyZSxcbiAgaW1hZ2U6IEJ1ZmZlcixcbiAgdmVyc2lvbjogc3RyaW5nXG4pOiBJT2xkUmVxT3B0aW9uc1dpdGhGdWxsUmVzcG9uc2UgPT4ge1xuICBjb25zdCBhcmVhID0gb3B0aW9ucy5hcmVhXG4gIGNvbnN0IHBhdGggPSBvcHRpb25zLnBhdGhcbiAgaWYgKCFvcHRpb25zLnZlcnNpb24gfHwgb3B0aW9ucy52ZXJzaW9uID09PSAndjQnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgdXJsOiBgaHR0cDovLyR7YXJlYX0uZmlsZS5teXFjbG91ZC5jb20vZmlsZXMvdjIvJHtzaWduYXR1cmUuYXBwSWR9LyR7c2lnbmF0dXJlLmJ1Y2tldH0vJHtlbmNvZGVVUkkocGF0aCl9JHtmaWxlTmFtZX1gLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBIb3N0OiBgJHthcmVhfS5maWxlLm15cWNsb3VkLmNvbWAsXG4gICAgICAgIEF1dGhvcml6YXRpb246IHNpZ25hdHVyZS5zaWduYXR1cmUsXG4gICAgICAgIGNvbnRlbnRUeXBlOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsXG4gICAgICAgICdVc2VyLUFnZW50JzogYFBpY0dvOyR7dmVyc2lvbn07bnVsbDtudWxsYFxuICAgICAgfSxcbiAgICAgIGZvcm1EYXRhOiB7XG4gICAgICAgIG9wOiAndXBsb2FkJyxcbiAgICAgICAgZmlsZWNvbnRlbnQ6IGltYWdlXG4gICAgICB9LFxuICAgICAgcmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2U6IHRydWVcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZW5kcG9pbnQgPSBvcHRpb25zLmVuZHBvaW50ID8gb3B0aW9ucy5lbmRwb2ludCA6IGBjb3MuJHtvcHRpb25zLmFyZWF9Lm15cWNsb3VkLmNvbWBcbiAgICByZXR1cm4ge1xuICAgICAgbWV0aG9kOiAnUFVUJyxcbiAgICAgIHVybDogYGh0dHA6Ly8ke29wdGlvbnMuYnVja2V0fS4ke2VuZHBvaW50fS8ke2VuY29kZVBhdGgoYCR7cGF0aH0ke2ZpbGVOYW1lfWApfWAsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIEhvc3Q6IGAke29wdGlvbnMuYnVja2V0fS4ke2VuZHBvaW50fWAsXG4gICAgICAgIEF1dGhvcml6YXRpb246IGBxLXNpZ24tYWxnb3JpdGhtPXNoYTEmcS1haz0ke29wdGlvbnMuc2VjcmV0SWR9JnEtc2lnbi10aW1lPSR7c2lnbmF0dXJlLnNpZ25UaW1lfSZxLWtleS10aW1lPSR7c2lnbmF0dXJlLnNpZ25UaW1lfSZxLWhlYWRlci1saXN0PWhvc3QmcS11cmwtcGFyYW0tbGlzdD0mcS1zaWduYXR1cmU9JHtzaWduYXR1cmUuc2lnbmF0dXJlfWAsXG4gICAgICAgIGNvbnRlbnRUeXBlOiBsb29rdXAoZmlsZU5hbWUpIHx8ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLFxuICAgICAgICAnVXNlci1BZ2VudCc6IGBQaWNHbzske3ZlcnNpb259O251bGw7bnVsbGBcbiAgICAgIH0sXG4gICAgICBib2R5OiBpbWFnZSxcbiAgICAgIHJlc29sdmVXaXRoRnVsbFJlc3BvbnNlOiB0cnVlXG4gICAgfVxuICB9XG59XG5cbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvIHwgYm9vbGVhbj4gPT4ge1xuICBjb25zdCB0Y1l1bk9wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElUY3l1bkNvbmZpZz4oJ3BpY0JlZC50Y3l1bicpXG4gIGlmICghdGNZdW5PcHRpb25zKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgZmluZCB0ZW5jZW50IENPUyBjb25maWdcIilcbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XG4gICAgY29uc3QgY3VzdG9tVXJsID0gKHRjWXVuT3B0aW9ucy5jdXN0b21VcmwgfHwgJycpLnJlcGxhY2UoL1xcLyQvLCAnJylcbiAgICBjb25zdCBwYXRoID0gZm9ybWF0UGF0aEhlbHBlcih7XG4gICAgICBwYXRoOiB0Y1l1bk9wdGlvbnMucGF0aFxuICAgIH0pXG4gICAgdGNZdW5PcHRpb25zLnBhdGggPSBwYXRoXG4gICAgY29uc3QgdXNlVjQgPSAhdGNZdW5PcHRpb25zLnZlcnNpb24gfHwgdGNZdW5PcHRpb25zLnZlcnNpb24gPT09ICd2NCdcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gZ2VuZXJhdGVTaWduYXR1cmUodGNZdW5PcHRpb25zLCBpbWcuZmlsZU5hbWUpXG4gICAgICAgIGlmICghc2lnbmF0dXJlKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlclxuICAgICAgICBpZiAoIWltYWdlICYmIGltZy5iYXNlNjRJbWFnZSkge1xuICAgICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHRpb25zID0gcG9zdE9wdGlvbnModGNZdW5PcHRpb25zLCBpbWcuZmlsZU5hbWUsIHNpZ25hdHVyZSwgaW1hZ2UsIGN0eC5HVUlfVkVSU0lPTiB8fCBjdHguVkVSU0lPTilcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgY3R4XG4gICAgICAgICAgLnJlcXVlc3Qob3B0aW9ucylcbiAgICAgICAgICAudGhlbigocmVzOiBhbnkpID0+IHJlcylcbiAgICAgICAgICAuY2F0Y2goKGVycjogRXJyb3IpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN0YXR1c0NvZGU6IDQwMCxcbiAgICAgICAgICAgICAgYm9keToge1xuICAgICAgICAgICAgICAgIG1zZzogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQVVUSF9GQUlMRUQnKSxcbiAgICAgICAgICAgICAgICBlcnJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIGxldCBib2R5XG4gICAgICAgIGlmICh1c2VWNCAmJiB0eXBlb2YgcmVzID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGJvZHkgPSBKU09OLnBhcnNlKHJlcylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBib2R5ID0gcmVzXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gNDAwKSB7XG4gICAgICAgICAgaWYgKGJvZHk/LmJvZHk/LmVycikge1xuICAgICAgICAgICAgdGhyb3cgYm9keS5ib2R5LmVyclxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYm9keT8uYm9keT8ubXNnIHx8IGJvZHk/LmJvZHk/Lm1lc3NhZ2UpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdGlvblVybCA9IHRjWXVuT3B0aW9ucy5vcHRpb25zIHx8ICcnXG4gICAgICAgIGNvbnN0IHNsaW0gPSB0Y1l1bk9wdGlvbnMuc2xpbSA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiAhIXRjWXVuT3B0aW9ucy5zbGltXG4gICAgICAgIGlmICh1c2VWNCAmJiBib2R5Lm1lc3NhZ2UgPT09ICdTVUNDRVNTJykge1xuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxuICAgICAgICAgIGlmIChjdXN0b21VcmwpIHtcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHtjdXN0b21Vcmx9LyR7ZW5jb2RlUGF0aChgJHtwYXRofSR7aW1nLmZpbGVOYW1lfWApfSR7b3B0aW9uVXJsfWBcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW1nLmltZ1VybCA9IGAke2JvZHkuZGF0YS5zb3VyY2VfdXJsIGFzIHN0cmluZ30ke29wdGlvblVybH1gXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCF1c2VWNCAmJiBib2R5ICYmIGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XG4gICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXG4gICAgICAgICAgaWYgKGN1c3RvbVVybCkge1xuICAgICAgICAgICAgaW1nLmltZ1VybCA9IGAke2N1c3RvbVVybH0vJHtlbmNvZGVQYXRoKGAke3BhdGh9JHtpbWcuZmlsZU5hbWV9YCl9JHtvcHRpb25Vcmx9YFxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBlbmRwb2ludCA9IHRjWXVuT3B0aW9ucy5lbmRwb2ludCA/IHRjWXVuT3B0aW9ucy5lbmRwb2ludCA6IGBjb3MuJHt0Y1l1bk9wdGlvbnMuYXJlYX0ubXlxY2xvdWQuY29tYFxuICAgICAgICAgICAgaW1nLmltZ1VybCA9IGBodHRwczovLyR7dGNZdW5PcHRpb25zLmJ1Y2tldH0uJHtlbmRwb2ludH0vJHtlbmNvZGVQYXRoKGAke3BhdGh9JHtpbWcuZmlsZU5hbWV9YCl9JHtvcHRpb25Vcmx9YFxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IocmVzLmJvZHkubXNnKVxuICAgICAgICB9XG4gICAgICAgIGlmIChzbGltKSB7XG4gICAgICAgICAgaWYgKG9wdGlvblVybCkge1xuICAgICAgICAgICAgaW1nLmltZ1VybCArPSAnJmltYWdlU2xpbSdcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW1nLmltZ1VybCArPSAnP2ltYWdlU2xpbSdcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGN0eFxuICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgIGlmICghdGNZdW5PcHRpb25zLnZlcnNpb24gfHwgdGNZdW5PcHRpb25zLnZlcnNpb24gPT09ICd2NCcpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnBhcnNlKGVyci5lcnJvcilcbiAgICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcbiAgICAgICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxuICAgICAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRURfUkVBU09OJywge1xuICAgICAgICAgICAgY29kZTogYm9keS5jb2RlIGFzIHN0cmluZ1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHRleHQ6ICdodHRwczovL2Nsb3VkLnRlbmNlbnQuY29tL2RvY3VtZW50L3Byb2R1Y3QvNDM2Lzg0MzInXG4gICAgICAgIH0pXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8qIGVtcHR5ICovXG4gICAgICB9XG4gICAgfVxuICAgIHRocm93IGVyclxuICB9XG59XG5cbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElUY3l1bkNvbmZpZz4oJ3BpY0JlZC50Y3l1bicpIHx8IHt9XG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICd2ZXJzaW9uJyxcbiAgICAgIHR5cGU6ICdsaXN0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1ZFUlNJT04nKVxuICAgICAgfSxcbiAgICAgIGFsaWFzOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1ZFUlNJT04nKSxcbiAgICAgIGNob2ljZXM6IFsndjQnLCAndjUnXSxcbiAgICAgIGRlZmF1bHQ6ICd2NScsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdzZWNyZXRJZCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUSUQnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUSUQnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuc2VjcmV0SWQgfHwgJycsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3NlY3JldEtleScsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUS0VZJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVEtFWScpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5zZWNyZXRLZXkgfHwgJycsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2J1Y2tldCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfQlVDS0VUJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX0JVQ0tFVCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5idWNrZXQgfHwgJycsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2FwcElkJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9BUFBJRCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9BUFBJRCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hcHBJZCB8fCAnJyxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FQUElEJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2FyZWEnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX0FSRUEnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfQVJFQScpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hcmVhIHx8ICcnLFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQVJFQScpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdlbmRwb2ludCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfRU5EUE9JTlQnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfRU5EUE9JTlQnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuZW5kcG9pbnQgfHwgJycsXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9FTkRQT0lOVCcpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAncGF0aCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9QQVRIJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhdGggfHwgJycsXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9QQVRIJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdjdXN0b21VcmwnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX0NVU1RPTVVSTCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9DVVNUT01VUkwnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuY3VzdG9tVXJsIHx8ICcnLFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQ1VTVE9NVVJMJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdvcHRpb25zJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLm9wdGlvbnMgfHwgJycsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9PUFRJT05TJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX09QVElPTlMnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX09QVElPTlMnKVxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3NsaW0nLFxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5zbGltID09PSB1bmRlZmluZWQgPyBmYWxzZSA6ICEhdXNlckNvbmZpZy5zbGltLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBnZXQgY29uZmlybVRleHQoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fQ09ORklSTScpXG4gICAgICB9LFxuICAgICAgZ2V0IGNhbmNlbFRleHQoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fQ0FOQ0VMJylcbiAgICAgIH0sXG4gICAgICBnZXQgdGlwcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9USVAnKVxuICAgICAgfVxuICAgIH1cbiAgXVxuICByZXR1cm4gY29uZmlnXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyKGN0eDogSVBpY0dvKTogdm9pZCB7XG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ3RjeXVuJywge1xuICAgIGdldCBuYW1lKCkge1xuICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVUQnKVxuICAgIH0sXG4gICAgaGFuZGxlLFxuICAgIGNvbmZpZ1xuICB9KVxufVxuIiwiaW1wb3J0IHsgbG9va3VwIH0gZnJvbSAnbWltZS10eXBlcydcblxuaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJR2l0aHViQ29uZmlnLCBJT2xkUmVxT3B0aW9uc1dpdGhKU09OIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcbmltcG9ydCB7IGVuY29kZVBhdGgsIGZvcm1hdFBhdGhIZWxwZXIgfSBmcm9tICcuL3V0aWxzJ1xuXG5mdW5jdGlvbiBidWlsZEdpdGh1YkFwaVVybChyZXBvOiBzdHJpbmcsIHBhdGg6IHN0cmluZywgZmlsZU5hbWU6IHN0cmluZywgZXh0cmE6IHN0cmluZyA9ICcnKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zLyR7cmVwb30vY29udGVudHMvJHtlbmNvZGVQYXRoKGAke3BhdGh9JHtmaWxlTmFtZX1gKX0ke2V4dHJhfWBcbn1cblxuY29uc3QgcG9zdE9wdGlvbnMgPSAoZmlsZU5hbWU6IHN0cmluZywgb3B0aW9uczogSUdpdGh1YkNvbmZpZywgZGF0YTogYW55KTogSU9sZFJlcU9wdGlvbnNXaXRoSlNPTiA9PiB7XG4gIGNvbnN0IHsgdG9rZW4sIHJlcG8gfSA9IG9wdGlvbnNcbiAgY29uc3QgY29udGVudFR5cGUgPSBsb29rdXAoZmlsZU5hbWUpIHx8ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nXG4gIHJldHVybiB7XG4gICAgbWV0aG9kOiAnUFVUJyxcbiAgICB1cmw6IGJ1aWxkR2l0aHViQXBpVXJsKHJlcG8sIG9wdGlvbnMucGF0aCwgZmlsZU5hbWUpLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIEF1dGhvcml6YXRpb246IGB0b2tlbiAke3Rva2VufWAsXG4gICAgICAnVXNlci1BZ2VudCc6ICdQaWNMaXN0JyxcbiAgICAgICdDb250ZW50LVR5cGUnOiBjb250ZW50VHlwZVxuICAgIH0sXG4gICAgYm9keTogZGF0YSxcbiAgICBqc29uOiB0cnVlXG4gIH0gYXMgY29uc3Rcbn1cblxuY29uc3QgZ2V0T3B0aW9ucyA9IChmaWxlTmFtZTogc3RyaW5nLCBvcHRpb25zOiBJR2l0aHViQ29uZmlnKTogSU9sZFJlcU9wdGlvbnNXaXRoSlNPTiA9PiB7XG4gIGNvbnN0IHsgdG9rZW4sIHJlcG8sIGJyYW5jaCB9ID0gb3B0aW9uc1xuICByZXR1cm4ge1xuICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgdXJsOiBidWlsZEdpdGh1YkFwaVVybChyZXBvLCBvcHRpb25zLnBhdGgsIGZpbGVOYW1lLCBgP3JlZj0ke2JyYW5jaH1gKSxcbiAgICBoZWFkZXJzOiB7XG4gICAgICBBdXRob3JpemF0aW9uOiBgdG9rZW4gJHt0b2tlbn1gLFxuICAgICAgJ1VzZXItQWdlbnQnOiAnUGljTGlzdCdcbiAgICB9LFxuICAgIGpzb246IHRydWVcbiAgfVxufVxuXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xuICBjb25zdCBnaXRodWJPcHRpb25zID0gY3R4LmdldENvbmZpZzxJR2l0aHViQ29uZmlnPigncGljQmVkLmdpdGh1YicpXG4gIGlmICghZ2l0aHViT3B0aW9ucykge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNhbid0IGZpbmQgZ2l0aHViIGNvbmZpZ1wiKVxuICB9XG4gIGNvbnN0IHVwbG9hZFBhdGggPSBmb3JtYXRQYXRoSGVscGVyKHsgcGF0aDogZ2l0aHViT3B0aW9ucy5wYXRoIH0pXG4gIGdpdGh1Yk9wdGlvbnMucGF0aCA9IHVwbG9hZFBhdGhcbiAgZ2l0aHViT3B0aW9ucy5jdXN0b21VcmwgPSAoZ2l0aHViT3B0aW9ucy5jdXN0b21VcmwgfHwgJycpLnJlcGxhY2UoL1xcLyQvLCAnJylcbiAgdHJ5IHtcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxuICAgIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcbiAgICAgIGlmIChpbWcuZmlsZU5hbWUgJiYgaW1nLmJ1ZmZlcikge1xuICAgICAgICBjb25zdCBiYXNlNjRJbWFnZSA9IGltZy5iYXNlNjRJbWFnZSB8fCBCdWZmZXIuZnJvbShpbWcuYnVmZmVyKS50b1N0cmluZygnYmFzZTY0JylcbiAgICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgICBtZXNzYWdlOiAnVXBsb2FkIGJ5IFBpY0xpc3QnLFxuICAgICAgICAgIGJyYW5jaDogZ2l0aHViT3B0aW9ucy5icmFuY2gsXG4gICAgICAgICAgY29udGVudDogYmFzZTY0SW1hZ2UsXG4gICAgICAgICAgcGF0aDogdXBsb2FkUGF0aCArIGVuY29kZVVSSShpbWcuZmlsZU5hbWUpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcG9zdENvbmZpZyA9IHBvc3RPcHRpb25zKGltZy5maWxlTmFtZSwgZ2l0aHViT3B0aW9ucywgZGF0YSlcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBib2R5OiB7XG4gICAgICAgICAgICBjb250ZW50OiB7XG4gICAgICAgICAgICAgIGRvd25sb2FkX3VybDogc3RyaW5nXG4gICAgICAgICAgICAgIHNoYTogc3RyaW5nXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSA9IGF3YWl0IGN0eC5yZXF1ZXN0KHBvc3RDb25maWcpXG4gICAgICAgICAgaWYgKGJvZHkpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcbiAgICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gZ2l0aHViT3B0aW9ucy5jdXN0b21VcmxcbiAgICAgICAgICAgICAgPyBgJHtnaXRodWJPcHRpb25zLmN1c3RvbVVybH0vJHtlbmNvZGVQYXRoKGAke3VwbG9hZFBhdGh9JHtpbWcuZmlsZU5hbWV9YCl9YFxuICAgICAgICAgICAgICA6IGJvZHkuY29udGVudC5kb3dubG9hZF91cmxcbiAgICAgICAgICAgIGltZy5oYXNoID0gYm9keS5jb250ZW50LnNoYVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlcnZlciBlcnJvciwgcGxlYXNlIHRyeSBhZ2FpbicpXG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICAgIGlmIChlcnIuc3RhdHVzQ29kZSA9PT0gNDIyKSB7XG4gICAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXG4gICAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxuICAgICAgICAgICAgY29uc3QgcmVzID0gKGF3YWl0IGN0eC5yZXF1ZXN0KGdldE9wdGlvbnMoaW1nLmZpbGVOYW1lLCBnaXRodWJPcHRpb25zKSkpIGFzIGFueVxuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHJlcykubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGltZy5oYXNoID0gcmVzLnNoYVxuICAgICAgICAgICAgICBpbWcuaW1nVXJsID0gZ2l0aHViT3B0aW9ucy5jdXN0b21VcmxcbiAgICAgICAgICAgICAgICA/IGAke2dpdGh1Yk9wdGlvbnMuY3VzdG9tVXJsfS8ke2VuY29kZVBhdGgoYCR7dXBsb2FkUGF0aH0ke2ltZy5maWxlTmFtZX1gKX1gXG4gICAgICAgICAgICAgICAgOiByZXMuZG93bmxvYWRfdXJsXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aHJvdyBlcnJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgZXJyXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjdHhcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcbiAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXG4gICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdDSEVDS19TRVRUSU5HU19BTkRfTkVUV09SSycpXG4gICAgfSlcbiAgICB0aHJvdyBlcnJcbiAgfVxufVxuXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJR2l0aHViQ29uZmlnPigncGljQmVkLmdpdGh1YicpIHx8IHt9XG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICdyZXBvJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9SRVBPJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX1JFUE8nKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9NRVNTQUdFX1JFUE8nKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucmVwbyB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnYnJhbmNoJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9CUkFOQ0gnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfQlJBTkNIJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfTUVTU0FHRV9CUkFOQ0gnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYnJhbmNoIHx8ICdtYXN0ZXInLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICd0b2tlbicsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfVE9LRU4nKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfVE9LRU4nKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcudG9rZW4gfHwgJycsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3BhdGgnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX01FU1NBR0VfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXRoIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnY3VzdG9tVXJsJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9DVVNUT01VUkwnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfQ1VTVE9NVVJMJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfTUVTU0FHRV9DVVNUT01VUkwnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuY3VzdG9tVXJsIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfVxuICBdXG4gIHJldHVybiBjb25maWdcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIoY3R4OiBJUGljR28pOiB2b2lkIHtcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcignZ2l0aHViJywge1xuICAgIGdldCBuYW1lKCkge1xuICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUInKVxuICAgIH0sXG4gICAgaGFuZGxlLFxuICAgIGNvbmZpZ1xuICB9KVxufVxuIiwiaW1wb3J0IHsgbG9va3VwIH0gZnJvbSAnbWltZS10eXBlcydcbmltcG9ydCBxaW5pdSBmcm9tICdxaW5pdSdcbmltcG9ydCB7IElQbHVnaW5Db25maWcsIElRaW5pdUNvbmZpZywgSVBpY0dvLCBJT2xkUmVxT3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXG5pbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXG5cbmZ1bmN0aW9uIHBvc3RPcHRpb25zKG9wdGlvbnM6IElRaW5pdUNvbmZpZywgZmlsZU5hbWU6IHN0cmluZywgdG9rZW46IHN0cmluZywgaW1nQmFzZTY0OiBzdHJpbmcpOiBJT2xkUmVxT3B0aW9ucyB7XG4gIGNvbnN0IGFyZWEgPSBzZWxlY3RBcmVhKG9wdGlvbnMuYXJlYSB8fCAnejAnKVxuICBjb25zdCBwYXRoID0gb3B0aW9ucy5wYXRoIHx8ICcnXG4gIGNvbnN0IGJhc2U2NEZpbGVOYW1lID0gQnVmZmVyLmZyb20ocGF0aCArIGZpbGVOYW1lLCAndXRmLTgnKVxuICAgIC50b1N0cmluZygnYmFzZTY0JylcbiAgICAucmVwbGFjZSgvXFwrL2csICctJylcbiAgICAucmVwbGFjZSgvXFwvL2csICdfJylcbiAgcmV0dXJuIHtcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICB1cmw6IGBodHRwOi8vdXBsb2FkJHthcmVhfS5xaW5pdXAuY29tL3B1dGI2NC8tMS9rZXkvJHtiYXNlNjRGaWxlTmFtZX1gLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIEF1dGhvcml6YXRpb246IGBVcFRva2VuICR7dG9rZW59YCxcbiAgICAgICdDb250ZW50LVR5cGUnOiBsb29rdXAoZmlsZU5hbWUpIHx8ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nXG4gICAgfSxcbiAgICBib2R5OiBpbWdCYXNlNjRcbiAgfVxufVxuXG5mdW5jdGlvbiBzZWxlY3RBcmVhKGFyZWE6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBhcmVhID09PSAnejAnID8gJycgOiAnLScgKyBhcmVhXG59XG5cbmZ1bmN0aW9uIGdldFRva2VuKHFpbml1T3B0aW9uczogYW55KTogc3RyaW5nIHtcbiAgY29uc3QgYWNjZXNzS2V5ID0gcWluaXVPcHRpb25zLmFjY2Vzc0tleVxuICBjb25zdCBzZWNyZXRLZXkgPSBxaW5pdU9wdGlvbnMuc2VjcmV0S2V5XG4gIGNvbnN0IG1hYyA9IG5ldyBxaW5pdS5hdXRoLmRpZ2VzdC5NYWMoYWNjZXNzS2V5LCBzZWNyZXRLZXkpXG4gIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgc2NvcGU6IHFpbml1T3B0aW9ucy5idWNrZXRcbiAgfVxuICBjb25zdCBwdXRQb2xpY3kgPSBuZXcgcWluaXUucnMuUHV0UG9saWN5KG9wdGlvbnMpXG4gIHJldHVybiBwdXRQb2xpY3kudXBsb2FkVG9rZW4obWFjKVxufVxuXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xuICBjb25zdCBxaW5pdU9wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElRaW5pdUNvbmZpZz4oJ3BpY0JlZC5xaW5pdScpXG4gIGlmICghcWluaXVPcHRpb25zKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgZmluZCBxaW5pdSBjb25maWdcIilcbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xuICAgICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XG4gICAgICAgIGNvbnN0IGJhc2U2NEltYWdlID0gaW1nLmJhc2U2NEltYWdlIHx8IEJ1ZmZlci5mcm9tKGltZy5idWZmZXIpLnRvU3RyaW5nKCdiYXNlNjQnKVxuICAgICAgICBjb25zdCBvcHRpb25zID0gcG9zdE9wdGlvbnMocWluaXVPcHRpb25zLCBpbWcuZmlsZU5hbWUsIGdldFRva2VuKHFpbml1T3B0aW9ucyksIGJhc2U2NEltYWdlKVxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBjdHgucmVxdWVzdChvcHRpb25zKVxuICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5wYXJzZShyZXMpXG4gICAgICAgIGlmIChib2R5Py5rZXkpIHtcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcbiAgICAgICAgICBjb25zdCBiYXNlVXJsID0gcWluaXVPcHRpb25zLnVybFxuICAgICAgICAgIGNvbnN0IHVybE9wdGlvbnMgPSBxaW5pdU9wdGlvbnMub3B0aW9ucyB8fCAnJ1xuICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHtiYXNlVXJsfS8ke2JvZHkua2V5IGFzIHN0cmluZ30ke3VybE9wdGlvbnN9YFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XG4gICAgICAgICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxuICAgICAgICAgICAgYm9keTogYm9keS5tc2dcbiAgICAgICAgICB9KVxuICAgICAgICAgIGN0eC5sb2cuZXJyb3IoJ3Fpbml1IGVycm9yJywgYm9keSlcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VwbG9hZCBmYWlsZWQnKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjdHhcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICBpZiAoZXJyLm1lc3NhZ2UgIT09ICdVcGxvYWQgZmFpbGVkJykge1xuICAgICAgLy8gZXJyLnJlc3BvbnNlIG1heWJlIHVuZGVmaW5lZFxuICAgICAgaWYgKGVyci5yZXNwb25zZSkge1xuICAgICAgICBjb25zdCBlcnJvciA9IGVyci5yZXNwb25zZS5ib2R5XG4gICAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XG4gICAgICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcbiAgICAgICAgICBib2R5OiBlcnJvci5lcnJvclxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBlcnJcbiAgfVxufVxuXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJUWluaXVDb25maWc+KCdwaWNCZWQucWluaXUnKSB8fCB7fVxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAnYWNjZXNzS2V5JyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX0FDQ0VTU0tFWScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX0FDQ0VTU0tFWScpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hY2Nlc3NLZXkgfHwgJycsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3NlY3JldEtleScsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9TRUNSRVRLRVknKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9TRUNSRVRLRVknKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuc2VjcmV0S2V5IHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdidWNrZXQnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfQlVDS0VUJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfQlVDS0VUJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmJ1Y2tldCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAndXJsJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX1VSTCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX1VSTCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfTUVTU0FHRV9VUkwnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcudXJsIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdhcmVhJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX0FSRUEnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9BUkVBJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9NRVNTQUdFX0FSRUEnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYXJlYSB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnb3B0aW9ucycsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9PUFRJT05TJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfT1BUSU9OUycpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfTUVTU0FHRV9PUFRJT05TJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLm9wdGlvbnMgfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdwYXRoJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9QQVRIJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9NRVNTQUdFX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGF0aCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH1cbiAgXVxuICByZXR1cm4gY29uZmlnXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyKGN0eDogSVBpY0dvKTogdm9pZCB7XG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ3Fpbml1Jywge1xuICAgIGdldCBuYW1lKCkge1xuICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVScpXG4gICAgfSxcbiAgICBoYW5kbGUsXG4gICAgY29uZmlnXG4gIH0pXG59XG4iLCJpbXBvcnQgeyBJUGljR28sIElQbHVnaW5Db25maWcsIElJbWd1ckNvbmZpZywgSU9sZFJlcU9wdGlvbnMsIElGdWxsUmVzcG9uc2UgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xuXG5jb25zdCBmb3JtYXRBY2Nlc3NUb2tlbiA9IChhY2Nlc3NUb2tlbjogc3RyaW5nKTogc3RyaW5nID0+XG4gIGFjY2Vzc1Rva2VuID8gKGFjY2Vzc1Rva2VuLnN0YXJ0c1dpdGgoJ0JlYXJlcicpID8gYWNjZXNzVG9rZW4gOiBgQmVhcmVyICR7YWNjZXNzVG9rZW59YCkgOiAnJ1xuXG5jb25zdCBwb3N0T3B0aW9ucyA9IGFzeW5jIChcbiAgY3R4OiBJUGljR28sXG4gIG9wdGlvbnM6IElJbWd1ckNvbmZpZyxcbiAgZmlsZU5hbWU6IHN0cmluZyxcbiAgaW1nQmFzZTY0OiBzdHJpbmdcbik6IFByb21pc2U8SU9sZFJlcU9wdGlvbnM+ID0+IHtcbiAgY29uc3QgY2xpZW50SWQgPSBvcHRpb25zLmNsaWVudElkIHx8ICcnXG4gIGNvbnN0IHVzZXJuYW1lID0gb3B0aW9ucy51c2VybmFtZSB8fCAnJ1xuICBjb25zdCBhY2Nlc3NUb2tlbiA9IGZvcm1hdEFjY2Vzc1Rva2VuKG9wdGlvbnMuYWNjZXNzVG9rZW4gfHwgJycpXG4gIGNvbnN0IGFsYnVtID0gb3B0aW9ucy5hbGJ1bSB8fCAnJ1xuICBsZXQgYXV0aG9yaXphdGlvblxuICBpZiAodXNlcm5hbWUgJiYgYWNjZXNzVG9rZW4pIHtcbiAgICBhdXRob3JpemF0aW9uID0gYWNjZXNzVG9rZW5cbiAgfSBlbHNlIGlmIChjbGllbnRJZCkge1xuICAgIGF1dGhvcml6YXRpb24gPSBgQ2xpZW50LUlEICR7Y2xpZW50SWR9YFxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xpZW50SWQgb3IgYWNjZXNzVG9rZW4gaXMgcmVxdWlyZWQnKVxuICB9XG4gIGNvbnN0IHJlcXVlc3RPcHRpb25zOiBJT2xkUmVxT3B0aW9ucyA9IHtcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICB1cmw6ICdodHRwczovL2FwaS5pbWd1ci5jb20vMy9pbWFnZScsXG4gICAgaGVhZGVyczoge1xuICAgICAgQXV0aG9yaXphdGlvbjogYXV0aG9yaXphdGlvbixcbiAgICAgICdjb250ZW50LXR5cGUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsXG4gICAgICBIb3N0OiAnYXBpLmltZ3VyLmNvbScsXG4gICAgICAnVXNlci1BZ2VudCc6ICdQaWNMaXN0J1xuICAgIH0sXG4gICAgZm9ybURhdGE6IHtcbiAgICAgIGltYWdlOiBpbWdCYXNlNjQsXG4gICAgICB0eXBlOiAnYmFzZTY0JyxcbiAgICAgIG5hbWU6IGZpbGVOYW1lLFxuICAgICAgZGVzY3JpcHRpb246ICdVcGxvYWRlZCB3aXRoIFBpY0xpc3QnXG4gICAgfVxuICB9XG4gIGlmICh1c2VybmFtZSAmJiBhY2Nlc3NUb2tlbiAmJiBhbGJ1bSkge1xuICAgIGxldCBpbml0UGFnZXMgPSAwXG4gICAgbGV0IHJlc1xuICAgIGxldCBhbGJ1bUhhc2ggPSAnJ1xuICAgIGRvIHtcbiAgICAgIGNvbnN0IGdldEFsYnVtSGFzaE9wdGlvbnM6IElPbGRSZXFPcHRpb25zID0ge1xuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICB1cmw6IGBodHRwczovL2FwaS5pbWd1ci5jb20vMy9hY2NvdW50LyR7dXNlcm5hbWV9L2FsYnVtcy8ke2luaXRQYWdlc31gLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgQXV0aG9yaXphdGlvbjogYXV0aG9yaXphdGlvblxuICAgICAgICB9LFxuICAgICAgICBqc29uOiB0cnVlLFxuICAgICAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZSxcbiAgICAgICAgdGltZW91dDogMTAwMDBcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25zLnByb3h5KSB7XG4gICAgICAgIGdldEFsYnVtSGFzaE9wdGlvbnMucHJveHkgPSBvcHRpb25zLnByb3h5XG4gICAgICB9XG4gICAgICByZXMgPSAoYXdhaXQgY3R4LnJlcXVlc3QoZ2V0QWxidW1IYXNoT3B0aW9ucykpIGFzIHVua25vd24gYXMgSUZ1bGxSZXNwb25zZVxuICAgICAgaWYgKCEocmVzLnN0YXR1c0NvZGUgPT09IDIwMCAmJiByZXMuYm9keS5zdWNjZXNzKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlcnZlciBlcnJvciwgcGxlYXNlIHRyeSBhZ2FpbicpXG4gICAgICB9XG4gICAgICBjb25zdCBhbGJ1bUxpc3QgPSByZXMuYm9keS5kYXRhXG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgYWxidW1MaXN0KSB7XG4gICAgICAgIGlmIChpdGVtLnRpdGxlID09PSBhbGJ1bSkge1xuICAgICAgICAgIGFsYnVtSGFzaCA9IGl0ZW0uaWRcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpbml0UGFnZXMrK1xuICAgIH0gd2hpbGUgKHJlcy5ib2R5LmRhdGEubGVuZ3RoID4gMClcbiAgICBpZiAoYWxidW1IYXNoICYmIHJlcXVlc3RPcHRpb25zLmZvcm1EYXRhKSB7XG4gICAgICByZXF1ZXN0T3B0aW9ucy5mb3JtRGF0YS5hbGJ1bSA9IGFsYnVtSGFzaFxuICAgIH1cbiAgfVxuICBpZiAob3B0aW9ucy5wcm94eSkge1xuICAgIHJlcXVlc3RPcHRpb25zLnByb3h5ID0gb3B0aW9ucy5wcm94eVxuICB9XG4gIHJldHVybiByZXF1ZXN0T3B0aW9uc1xufVxuXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xuICBjb25zdCBpbWd1ck9wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElJbWd1ckNvbmZpZz4oJ3BpY0JlZC5pbWd1cicpXG4gIGlmICghaW1ndXJPcHRpb25zKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgZmluZCBpbWd1ciBjb25maWdcIilcbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xuICAgICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XG4gICAgICAgIGNvbnN0IGJhc2U2NEltYWdlID0gaW1nLmJhc2U2NEltYWdlIHx8IEJ1ZmZlci5mcm9tKGltZy5idWZmZXIpLnRvU3RyaW5nKCdiYXNlNjQnKVxuICAgICAgICBjb25zdCBvcHRpb25zID0gYXdhaXQgcG9zdE9wdGlvbnMoY3R4LCBpbWd1ck9wdGlvbnMsIGltZy5maWxlTmFtZSwgYmFzZTY0SW1hZ2UpXG4gICAgICAgIGNvbnN0IHJlczogc3RyaW5nID0gYXdhaXQgY3R4LnJlcXVlc3Qob3B0aW9ucylcbiAgICAgICAgY29uc3QgYm9keSA9IHR5cGVvZiByZXMgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShyZXMpIDogcmVzXG4gICAgICAgIGlmIChib2R5LnN1Y2Nlc3MpIHtcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcbiAgICAgICAgICBpbWcuaW1nVXJsID0gYm9keS5kYXRhLmxpbmtcbiAgICAgICAgICBpbWcuaGFzaCA9IGJvZHkuZGF0YS5kZWxldGVoYXNoXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZXJ2ZXIgZXJyb3IsIHBsZWFzZSB0cnkgYWdhaW4nKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjdHhcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcbiAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXG4gICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdDSEVDS19TRVRUSU5HU19BTkRfTkVUV09SSycpLFxuICAgICAgdGV4dDogJ2h0dHA6Ly9kb2NzLmltZ3VyLmNvbS9hcGkvZXJybm8vJ1xuICAgIH0pXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBzdHJpbmcgfCBJRXJyb3JcbiAgICB0aHJvdyBlcnI/LnJlc3BvbnNlPy5kYXRhIHx8IGVyclxuICB9XG59XG5cbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElJbWd1ckNvbmZpZz4oJ3BpY0JlZC5pbWd1cicpIHx8IHt9XG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICdjbGllbnRJZCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9DTElFTlRJRCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX0NMSUVOVElEJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9NRVNTQUdFX0NMSUVOVElEJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmNsaWVudElkIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAndXNlcm5hbWUnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfVVNFUk5BTUUnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9VU0VSTkFNRScpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfTUVTU0FHRV9VU0VSTkFNRScpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy51c2VybmFtZSB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2FjY2Vzc1Rva2VuJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX0FDQ0VTU19UT0tFTicpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX0FDQ0VTU19UT0tFTicpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfTUVTU0FHRV9BQ0NFU1NfVE9LRU4nKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYWNjZXNzVG9rZW4gfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdhbGJ1bScsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9BTEJVTScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX0FMQlVNJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9NRVNTQUdFX0FMQlVNJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFsYnVtIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAncHJveHknLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfUFJPWFknKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9QUk9YWScpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfTUVTU0FHRV9QUk9YWScpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wcm94eSB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH1cbiAgXVxuICByZXR1cm4gY29uZmlnXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyKGN0eDogSVBpY0dvKTogdm9pZCB7XG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ2ltZ3VyJywge1xuICAgIGdldCBuYW1lKCkge1xuICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUicpXG4gICAgfSxcbiAgICBoYW5kbGUsXG4gICAgY29uZmlnXG4gIH0pXG59XG4iLCJpbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0bydcbmltcG9ydCB7IGxvb2t1cCB9IGZyb20gJ21pbWUtdHlwZXMnXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcbmltcG9ydCB7IGVuY29kZVBhdGgsIGZvcm1hdFBhdGhIZWxwZXIgfSBmcm9tICcuL3V0aWxzJ1xuaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJQWxpeXVuQ29uZmlnLCBJT2xkUmVxT3B0aW9uc1dpdGhGdWxsUmVzcG9uc2UgfSBmcm9tICcuLi8uLi90eXBlcydcblxuY29uc3QgZ2V0Q3VycmVudFVUQ0RhdGUgPSAoKTogc3RyaW5nID0+IG5ldyBEYXRlKCkudG9VVENTdHJpbmcoKVxuXG4vLyBnZW5lcmF0ZSBPU1Mgc2lnbmF0dXJlXG5jb25zdCBnZW5lcmF0ZVNpZ25hdHVyZSA9IChvcHRpb25zOiBJQWxpeXVuQ29uZmlnLCBmaWxlTmFtZTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3QgZGF0ZSA9IGdldEN1cnJlbnRVVENEYXRlKClcbiAgY29uc3QgbWltZVR5cGUgPSBsb29rdXAoZmlsZU5hbWUpIHx8ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nXG4gIGNvbnN0IHNpZ25TdHJpbmcgPSBgUFVUXFxuXFxuJHttaW1lVHlwZX1cXG4ke2RhdGV9XFxuLyR7b3B0aW9ucy5idWNrZXR9LyR7b3B0aW9ucy5wYXRofSR7ZmlsZU5hbWV9YFxuICBjb25zdCBzaWduYXR1cmUgPSBjcnlwdG8uY3JlYXRlSG1hYygnc2hhMScsIG9wdGlvbnMuYWNjZXNzS2V5U2VjcmV0KS51cGRhdGUoc2lnblN0cmluZykuZGlnZXN0KCdiYXNlNjQnKVxuICByZXR1cm4gYE9TUyAke29wdGlvbnMuYWNjZXNzS2V5SWR9OiR7c2lnbmF0dXJlfWBcbn1cblxuY29uc3QgcG9zdE9wdGlvbnMgPSAoXG4gIG9wdGlvbnM6IElBbGl5dW5Db25maWcsXG4gIGZpbGVOYW1lOiBzdHJpbmcsXG4gIHNpZ25hdHVyZTogc3RyaW5nLFxuICBpbWFnZTogQnVmZmVyXG4pOiBJT2xkUmVxT3B0aW9uc1dpdGhGdWxsUmVzcG9uc2UgPT4ge1xuICByZXR1cm4ge1xuICAgIG1ldGhvZDogJ1BVVCcsXG4gICAgdXJsOiBgaHR0cHM6Ly8ke29wdGlvbnMuYnVja2V0fS4ke29wdGlvbnMuYXJlYX0uYWxpeXVuY3MuY29tLyR7ZW5jb2RlUGF0aChgJHtvcHRpb25zLnBhdGh9JHtmaWxlTmFtZX1gKX1gLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIEhvc3Q6IGAke29wdGlvbnMuYnVja2V0fS4ke29wdGlvbnMuYXJlYX0uYWxpeXVuY3MuY29tYCxcbiAgICAgIEF1dGhvcml6YXRpb246IHNpZ25hdHVyZSxcbiAgICAgIERhdGU6IGdldEN1cnJlbnRVVENEYXRlKCksXG4gICAgICAnQ29udGVudC1UeXBlJzogbG9va3VwKGZpbGVOYW1lKSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJ1xuICAgIH0sXG4gICAgYm9keTogaW1hZ2UsXG4gICAgcmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2U6IHRydWVcbiAgfVxufVxuXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xuICBjb25zdCBhbGlZdW5PcHRpb25zID0gY3R4LmdldENvbmZpZzxJQWxpeXVuQ29uZmlnPigncGljQmVkLmFsaXl1bicpXG4gIGlmICghYWxpWXVuT3B0aW9ucykge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNhbid0IGZpbmQgYWxpWXVuIE9TUyBjb25maWdcIilcbiAgfVxuICBhbGlZdW5PcHRpb25zLnBhdGggPSBmb3JtYXRQYXRoSGVscGVyKHsgcGF0aDogYWxpWXVuT3B0aW9ucy5wYXRoIH0pXG4gIHRyeSB7XG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcbiAgICBjb25zdCBjdXN0b21VcmwgPSAoYWxpWXVuT3B0aW9ucy5jdXN0b21VcmwgfHwgJycpLnJlcGxhY2UoL1xcLyQvLCAnJylcbiAgICBjb25zdCBwYXRoID0gYWxpWXVuT3B0aW9ucy5wYXRoXG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xuICAgICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IGdlbmVyYXRlU2lnbmF0dXJlKGFsaVl1bk9wdGlvbnMsIGltZy5maWxlTmFtZSlcbiAgICAgICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlclxuICAgICAgICBpZiAoIWltYWdlICYmIGltZy5iYXNlNjRJbWFnZSkge1xuICAgICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHRpb25zID0gcG9zdE9wdGlvbnMoYWxpWXVuT3B0aW9ucywgaW1nLmZpbGVOYW1lLCBzaWduYXR1cmUsIGltYWdlKVxuICAgICAgICBjb25zdCBib2R5ID0gYXdhaXQgY3R4LnJlcXVlc3Qob3B0aW9ucylcbiAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XG4gICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXG4gICAgICAgICAgY29uc3Qgb3B0aW9uVXJsID0gYWxpWXVuT3B0aW9ucy5vcHRpb25zIHx8ICcnXG4gICAgICAgICAgaWYgKGN1c3RvbVVybCkge1xuICAgICAgICAgICAgaW1nLmltZ1VybCA9IGAke2N1c3RvbVVybH0vJHtlbmNvZGVQYXRoKGAke3BhdGh9JHtpbWcuZmlsZU5hbWV9YCl9JHtvcHRpb25Vcmx9YFxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gYGh0dHBzOi8vJHthbGlZdW5PcHRpb25zLmJ1Y2tldH0uJHthbGlZdW5PcHRpb25zLmFyZWF9LmFsaXl1bmNzLmNvbS8ke2VuY29kZVBhdGgoYCR7cGF0aH0ke2ltZy5maWxlTmFtZX1gKX0ke29wdGlvblVybH1gXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVXBsb2FkIGZhaWxlZCcpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGN0eFxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xuICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcbiAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0NIRUNLX1NFVFRJTkdTJylcbiAgICB9KVxuICAgIHRocm93IGVyclxuICB9XG59XG5cbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElBbGl5dW5Db25maWc+KCdwaWNCZWQuYWxpeXVuJykgfHwge31cbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXG4gICAge1xuICAgICAgbmFtZTogJ2FjY2Vzc0tleUlkJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWUlEJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZSUQnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYWNjZXNzS2V5SWQgfHwgJycsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2FjY2Vzc0tleVNlY3JldCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9BQ0NFU1NLRVlTRUNSRVQnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9BQ0NFU1NLRVlTRUNSRVQnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYWNjZXNzS2V5U2VjcmV0IHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdidWNrZXQnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfQlVDS0VUJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfQlVDS0VUJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmJ1Y2tldCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnYXJlYScsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9BUkVBJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfQVJFQScpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hcmVhIHx8ICcnLFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9BUkVBJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3BhdGgnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXRoIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnY3VzdG9tVXJsJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX0NVU1RPTVVSTCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX0NVU1RPTVVSTCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9DVVNUT01VUkwnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuY3VzdG9tVXJsIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnb3B0aW9ucycsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9PUFRJT05TJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfT1BUSU9OUycpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9PUFRJT05TJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLm9wdGlvbnMgfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9XG4gIF1cbiAgcmV0dXJuIGNvbmZpZ1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlcihjdHg6IElQaWNHbyk6IHZvaWQge1xuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKCdhbGl5dW4nLCB7XG4gICAgZ2V0IG5hbWUoKSB7XG4gICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEJylcbiAgICB9LFxuICAgIGhhbmRsZSxcbiAgICBjb25maWdcbiAgfSlcbn1cbiIsImltcG9ydCBjcnlwdG8gZnJvbSAnY3J5cHRvJ1xuaW1wb3J0IHsgbG9va3VwIH0gZnJvbSAnbWltZS10eXBlcydcblxuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXG5pbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXG5pbXBvcnQgeyBzYWZlUGFyc2UgfSBmcm9tICcuLi8uLi91dGlscy9jb21tb24nXG5cbmltcG9ydCB7IGVuY29kZVBhdGgsIGZvcm1hdFBhdGhIZWxwZXIgfSBmcm9tICcuL3V0aWxzJ1xuaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJVXB5dW5Db25maWcsIElPbGRSZXFPcHRpb25zV2l0aEZ1bGxSZXNwb25zZSB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuXG4vLyBnZW5lcmF0ZSBDT1Mgc2lnbmF0dXJlIHN0cmluZ1xuY29uc3QgZ2VuZXJhdGVTaWduYXR1cmUgPSAob3B0aW9uczogSVVweXVuQ29uZmlnLCBmaWxlTmFtZTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3QgcGF0aCA9IG9wdGlvbnMucGF0aCB8fCAnJ1xuICBjb25zdCBvcGVyYXRvciA9IG9wdGlvbnMub3BlcmF0b3JcbiAgY29uc3QgcGFzc3dvcmQgPSBvcHRpb25zLnBhc3N3b3JkXG4gIGNvbnN0IG1kNVBhc3N3b3JkID0gTUQ1KHBhc3N3b3JkKVxuICBjb25zdCBkYXRlID0gbmV3IERhdGUoKS50b1VUQ1N0cmluZygpXG4gIGNvbnN0IHVyaSA9IGAvJHtvcHRpb25zLmJ1Y2tldH0vJHtlbmNvZGVQYXRoKGAke3BhdGh9JHtmaWxlTmFtZX1gKX1gXG4gIGNvbnN0IHZhbHVlID0gYFBVVCYke3VyaX0mJHtkYXRlfWBcbiAgY29uc3Qgc2lnbiA9IGNyeXB0by5jcmVhdGVIbWFjKCdzaGExJywgbWQ1UGFzc3dvcmQpLnVwZGF0ZSh2YWx1ZSkuZGlnZXN0KCdiYXNlNjQnKVxuICByZXR1cm4gYFVQWVVOICR7b3BlcmF0b3J9OiR7c2lnbn1gXG59XG5cbmNvbnN0IHBvc3RPcHRpb25zID0gKFxuICBvcHRpb25zOiBJVXB5dW5Db25maWcsXG4gIGZpbGVOYW1lOiBzdHJpbmcsXG4gIHNpZ25hdHVyZTogc3RyaW5nLFxuICBpbWFnZTogQnVmZmVyXG4pOiBJT2xkUmVxT3B0aW9uc1dpdGhGdWxsUmVzcG9uc2UgPT4ge1xuICBjb25zdCBidWNrZXQgPSBvcHRpb25zLmJ1Y2tldFxuICBjb25zdCBwYXRoID0gb3B0aW9ucy5wYXRoXG4gIGxldCBlbmRwb2ludCA9IChvcHRpb25zLmVuZHBvaW50IHx8ICdodHRwczovL3YwLmFwaS51cHl1bi5jb20nKS5yZXBsYWNlKC9cXC8rJC9nLCAnJylcbiAgaWYgKCFlbmRwb2ludC5zdGFydHNXaXRoKCdodHRwJykpIHtcbiAgICBlbmRwb2ludCA9IGBodHRwczovLyR7ZW5kcG9pbnR9YFxuICB9XG4gIHJldHVybiB7XG4gICAgbWV0aG9kOiAnUFVUJyxcbiAgICB1cmw6IGAke2VuZHBvaW50fS8ke2J1Y2tldH0vJHtlbmNvZGVQYXRoKGAke3BhdGh9JHtmaWxlTmFtZX1gKX1gLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIEF1dGhvcml6YXRpb246IHNpZ25hdHVyZSxcbiAgICAgIERhdGU6IG5ldyBEYXRlKCkudG9VVENTdHJpbmcoKSxcbiAgICAgICdDb250ZW50LVR5cGUnOiBsb29rdXAoZmlsZU5hbWUpIHx8ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nXG4gICAgfSxcbiAgICBib2R5OiBpbWFnZSxcbiAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZVxuICB9XG59XG5cbmZ1bmN0aW9uIE1ENShjb250ZW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhhc2goJ21kNScpLnVwZGF0ZShjb250ZW50KS5kaWdlc3QoJ2hleCcpXG59XG5cbmNvbnN0IGdldEFudGlMZWVjaFBhcmFtID0gKFxuICBhbnRpTGVlY2hUb2tlbjogc3RyaW5nLFxuICBleHBpcmVUaW1lOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQsXG4gIG9wdGlvbnM6IElVcHl1bkNvbmZpZyxcbiAgZmlsZU5hbWU6IHN0cmluZ1xuKTogc3RyaW5nID0+IHtcbiAgY29uc3QgdXJpID0gYC8ke29wdGlvbnMucGF0aCB8fCAnJ30ke2ZpbGVOYW1lfWAucmVwbGFjZSgvJTJGL2csICcvJykucmVwbGFjZSgvXlxcLysvZywgJy8nKVxuICBjb25zdCBub3cgPSBNYXRoLnJvdW5kKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMClcbiAgY29uc3QgZXhwaXJlID0gZXhwaXJlVGltZSA/IG5vdyArIHBhcnNlSW50KGV4cGlyZVRpbWUudG9TdHJpbmcoKSwgMTApIDogbm93ICsgMTgwMFxuICBjb25zdCBzaWduID0gTUQ1KGAke2FudGlMZWVjaFRva2VufSYke2V4cGlyZX0mJHt1cml9YClcbiAgY29uc3QgdXB0ID0gYCR7c2lnbi5zdWJzdHJpbmcoMTIsIDIwKX0ke2V4cGlyZX1gXG4gIHJldHVybiBgX3VwdD0ke3VwdH1gXG59XG5cbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XG4gIGNvbnN0IHVweXVuT3B0aW9ucyA9IGN0eC5nZXRDb25maWc8SVVweXVuQ29uZmlnPigncGljQmVkLnVweXVuJylcbiAgaWYgKCF1cHl1bk9wdGlvbnMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBmaW5kIHVwWXVuIGNvbmZpZ1wiKVxuICB9XG4gIHRyeSB7XG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcbiAgICBjb25zdCBwYXRoID0gZm9ybWF0UGF0aEhlbHBlcih7IHBhdGg6IHVweXVuT3B0aW9ucy5wYXRoIH0pXG4gICAgdXB5dW5PcHRpb25zLnBhdGggPSBwYXRoXG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xuICAgICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XG4gICAgICAgIGxldCBpbWFnZSA9IGltZy5idWZmZXJcbiAgICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcbiAgICAgICAgICBpbWFnZSA9IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gZ2VuZXJhdGVTaWduYXR1cmUodXB5dW5PcHRpb25zLCBpbWcuZmlsZU5hbWUpXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBwb3N0T3B0aW9ucyh1cHl1bk9wdGlvbnMsIGltZy5maWxlTmFtZSwgc2lnbmF0dXJlLCBpbWFnZSlcbiAgICAgICAgY29uc3Qgc3VmZml4ID0gdXB5dW5PcHRpb25zLm9wdGlvbnMgfHwgJydcbiAgICAgICAgY29uc3QgYm9keSA9IGF3YWl0IGN0eC5yZXF1ZXN0KG9wdGlvbnMpXG4gICAgICAgIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDIwMCkge1xuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxuICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHt1cHl1bk9wdGlvbnMudXJsfS8ke2VuY29kZVBhdGgoYCR7cGF0aH0ke2ltZy5maWxlTmFtZX1gKX0ke3N1ZmZpeH1gXG4gICAgICAgICAgaWYgKHVweXVuT3B0aW9ucy5hbnRpTGVlY2hUb2tlbikge1xuICAgICAgICAgICAgY29uc3QgdXB0ID0gZ2V0QW50aUxlZWNoUGFyYW0oXG4gICAgICAgICAgICAgIHVweXVuT3B0aW9ucy5hbnRpTGVlY2hUb2tlbixcbiAgICAgICAgICAgICAgdXB5dW5PcHRpb25zLmV4cGlyZVRpbWUsXG4gICAgICAgICAgICAgIHVweXVuT3B0aW9ucyxcbiAgICAgICAgICAgICAgaW1nLmZpbGVOYW1lXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gaW1nLmltZ1VybC5pbmNsdWRlcygnPycpID8gYCR7aW1nLmltZ1VybH0mJHt1cHR9YCA6IGAke2ltZy5pbWdVcmx9PyR7dXB0fWBcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVcGxvYWQgZmFpbGVkJylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY3R4XG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgaWYgKGVyci5tZXNzYWdlID09PSAnVXBsb2FkIGZhaWxlZCcpIHtcbiAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XG4gICAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXG4gICAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0NIRUNLX1NFVFRJTkdTJylcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGJvZHkgPSBzYWZlUGFyc2U8eyBjb2RlOiBzdHJpbmcgfT4oZXJyLmVycm9yKVxuICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcbiAgICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcbiAgICAgICAgYm9keTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRF9SRUFTT04nLCB7XG4gICAgICAgICAgY29kZTogdHlwZW9mIGJvZHkgPT09ICdvYmplY3QnID8gYm9keS5jb2RlIDogYm9keVxuICAgICAgICB9KSxcbiAgICAgICAgdGV4dDogJ2h0dHA6Ly9kb2NzLnVweXVuLmNvbS9hcGkvZXJybm8vJ1xuICAgICAgfSlcbiAgICB9XG4gICAgdGhyb3cgZXJyXG4gIH1cbn1cblxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SVVweXVuQ29uZmlnPigncGljQmVkLnVweXVuJykgfHwge31cbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXG4gICAge1xuICAgICAgbmFtZTogJ2J1Y2tldCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9CVUNLRVQnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9CVUNLRVQnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYnVja2V0IHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdvcGVyYXRvcicsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9PUEVSQVRPUicpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX09QRVJBVE9SJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9NRVNTQUdFX09QRVJBVE9SJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLm9wZXJhdG9yIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdwYXNzd29yZCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBU1NXT1JEJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fUEFTU1dPUkQnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX01FU1NBR0VfUEFTU1dPUkQnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGFzc3dvcmQgfHwgJycsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3VybCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9VUkwnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9VUkwnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX01FU1NBR0VfVVJMJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnVybCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnb3B0aW9ucycsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9PUFRJT05TJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fT1BUSU9OUycpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fTUVTU0FHRV9PUFRJT05TJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLm9wdGlvbnMgfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdwYXRoJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9QQVRIJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGF0aCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2FudGlMZWVjaFRva2VuJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX0FOVElfTEVFQ0hfVE9LRU4nKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9BTlRJX0xFRUNIX1RPS0VOJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9BTlRJX0xFRUNIX1RPS0VOJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFudGlMZWVjaFRva2VuIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnZXhwaXJlVGltZScsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9FWFBJUkVfVElNRScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX0VYUElSRV9USU1FJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9FWFBJUkVfVElNRScpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5leHBpcmVUaW1lIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnZW5kcG9pbnQnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fRU5EUE9JTlQnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9FTkRQT0lOVCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fTUVTU0FHRV9FTkRQT0lOVCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5lbmRwb2ludCB8fCAnaHR0cHM6Ly92MC5hcGkudXB5dW4uY29tJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH1cbiAgXVxuICByZXR1cm4gY29uZmlnXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyKGN0eDogSVBpY0dvKTogdm9pZCB7XG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ3VweXVuJywge1xuICAgIGdldCBuYW1lKCkge1xuICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTicpXG4gICAgfSxcbiAgICBoYW5kbGUsXG4gICAgY29uZmlnXG4gIH0pXG59XG4iLCJpbXBvcnQgZnMsIHsgZW5zdXJlRGlyU3luYyB9IGZyb20gJ2ZzLWV4dHJhJ1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcbmltcG9ydCB7IFdlYkRBVkNsaWVudCwgV2ViREFWQ2xpZW50T3B0aW9ucywgQXV0aFR5cGUsIGNyZWF0ZUNsaWVudCB9IGZyb20gJ3dlYmRhdidcblxuaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJV2ViZGF2UGxpc3RDb25maWcgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xuaW1wb3J0IHsgZW5jb2RlUGF0aCwgZm9ybWF0UGF0aEhlbHBlciB9IGZyb20gJy4vdXRpbHMnXG5cbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvIHwgYm9vbGVhbj4gPT4ge1xuICBjb25zdCB3ZWJkYXZwbGlzdE9wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElXZWJkYXZQbGlzdENvbmZpZz4oJ3BpY0JlZC53ZWJkYXZwbGlzdCcpXG4gIGlmICghd2ViZGF2cGxpc3RPcHRpb25zKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgZmluZCB3ZWJkYXZwbGlzdCBjb25maWdcIilcbiAgfVxuICB3ZWJkYXZwbGlzdE9wdGlvbnMuaG9zdCA9IHdlYmRhdnBsaXN0T3B0aW9ucy5ob3N0LnJlcGxhY2UoL15odHRwcz86XFwvXFwvfFxcLyskL2csICcnKVxuICB3ZWJkYXZwbGlzdE9wdGlvbnMuaG9zdCA9ICh3ZWJkYXZwbGlzdE9wdGlvbnMuc3NsRW5hYmxlZCA/ICdodHRwczovLycgOiAnaHR0cDovLycpICsgd2ViZGF2cGxpc3RPcHRpb25zLmhvc3RcbiAgd2ViZGF2cGxpc3RPcHRpb25zLnBhdGggPSBmb3JtYXRQYXRoSGVscGVyKHtcbiAgICBwYXRoOiB3ZWJkYXZwbGlzdE9wdGlvbnMucGF0aCxcbiAgICByb290VG9FbXB0eTogZmFsc2VcbiAgfSlcbiAgY29uc3QgYXV0aFR5cGUgPSB3ZWJkYXZwbGlzdE9wdGlvbnMuYXV0aFR5cGUgfHwgJ2Jhc2ljJ1xuICBjb25zdCB3ZWJwYXRoID0gZm9ybWF0UGF0aEhlbHBlcih7XG4gICAgcGF0aDogd2ViZGF2cGxpc3RPcHRpb25zLndlYnBhdGgsXG4gICAgcm9vdFRvRW1wdHk6IGZhbHNlXG4gIH0pXG4gIGNvbnN0IHN1ZmZpeCA9IHdlYmRhdnBsaXN0T3B0aW9ucy5vcHRpb25zIHx8ICcnXG4gIHRyeSB7XG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcbiAgICBjb25zdCBjdXN0b21VcmwgPSB3ZWJkYXZwbGlzdE9wdGlvbnMuY3VzdG9tVXJsXG4gICAgY29uc3QgdXBsb2FkUGF0aCA9IHdlYmRhdnBsaXN0T3B0aW9ucy5wYXRoXG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xuICAgICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XG4gICAgICAgIGxldCBpbWFnZSA9IGltZy5idWZmZXJcbiAgICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcbiAgICAgICAgICBpbWFnZSA9IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2xpZW50T3B0aW9uczogV2ViREFWQ2xpZW50T3B0aW9ucyA9IHtcbiAgICAgICAgICB1c2VybmFtZTogd2ViZGF2cGxpc3RPcHRpb25zLnVzZXJuYW1lLFxuICAgICAgICAgIHBhc3N3b3JkOiB3ZWJkYXZwbGlzdE9wdGlvbnMucGFzc3dvcmQsXG4gICAgICAgICAgbWF4Qm9keUxlbmd0aDogNCAqIDEwMjQgKiAxMDI0ICogMTAyNCxcbiAgICAgICAgICBtYXhDb250ZW50TGVuZ3RoOiA0ICogMTAyNCAqIDEwMjQgKiAxMDI0XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGF1dGhUeXBlID09PSAnZGlnZXN0Jykge1xuICAgICAgICAgIGNsaWVudE9wdGlvbnMuYXV0aFR5cGUgPSBBdXRoVHlwZS5EaWdlc3RcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjbGllbnQ6IFdlYkRBVkNsaWVudCA9IGNyZWF0ZUNsaWVudCh3ZWJkYXZwbGlzdE9wdGlvbnMuaG9zdCwgY2xpZW50T3B0aW9ucylcbiAgICAgICAgY29uc3QgcGF0aFRvQ3JlYXRlID0gdXBsb2FkUGF0aCA9PT0gJy8nID8gJycgOiB1cGxvYWRQYXRoXG4gICAgICAgIGlmIChwYXRoVG9DcmVhdGUpIHtcbiAgICAgICAgICBhd2FpdCBjbGllbnQuY3JlYXRlRGlyZWN0b3J5KHBhdGhUb0NyZWF0ZSwgeyByZWN1cnNpdmU6IHRydWUgfSlcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBjbGllbnQucHV0RmlsZUNvbnRlbnRzKGAke3VwbG9hZFBhdGh9JHtpbWcuZmlsZU5hbWV9YC5yZXBsYWNlKC9eXFwvK3xcXC8rJC9nLCAnJyksIGltYWdlLCB7XG4gICAgICAgICAgb3ZlcndyaXRlOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICBjb25zdCBpbWdUZW1wUGF0aCA9IHBhdGguam9pbihjdHguYmFzZURpciwgJ2ltZ1RlbXAnLCAnd2ViZGF2cGxpc3QnKVxuICAgICAgICAgIGNvbnN0IGltZ1RlbXBGaWxlUGF0aCA9IHBhdGguam9pbihpbWdUZW1wUGF0aCwgaW1nLmZpbGVOYW1lKVxuICAgICAgICAgIGVuc3VyZURpclN5bmMocGF0aC5kaXJuYW1lKGltZ1RlbXBGaWxlUGF0aCkpXG4gICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhpbWdUZW1wRmlsZVBhdGgsIGltYWdlKVxuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxuICAgICAgICAgIGNvbnN0IGJhc2VVcmwgPSBjdXN0b21VcmwgfHwgd2ViZGF2cGxpc3RPcHRpb25zLmhvc3RcbiAgICAgICAgICBpZiAod2ViZGF2cGxpc3RPcHRpb25zLndlYnBhdGgpIHtcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHtiYXNlVXJsfS8ke2VuY29kZVBhdGgoYCR7d2VicGF0aH0ke2ltZy5maWxlTmFtZX1gKX0ke3N1ZmZpeH1gXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHtiYXNlVXJsfS8ke2VuY29kZVBhdGgoYCR7dXBsb2FkUGF0aH0ke2ltZy5maWxlTmFtZX1gKX0ke3N1ZmZpeH1gXG4gICAgICAgICAgfVxuICAgICAgICAgIGltZy5nYWxsZXJ5UGF0aCA9IGBodHRwOi8vbG9jYWxob3N0OjM2Njk5L3dlYmRhdnBsaXN0LyR7ZW5jb2RlVVJJQ29tcG9uZW50KGltZy5maWxlTmFtZSl9YFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVXBsb2FkIGZhaWxlZCcpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGN0eFxuICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XG4gICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxuICAgICAgYm9keTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQ0hFQ0tfU0VUVElOR1MnKVxuICAgIH0pXG4gICAgdGhyb3cgZXJyXG4gIH1cbn1cblxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SVdlYmRhdlBsaXN0Q29uZmlnPigncGljQmVkLndlYmRhdnBsaXN0JykgfHwge31cbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXG4gICAge1xuICAgICAgbmFtZTogJ2hvc3QnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9IT1NUJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmhvc3QgfHwgJycsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3NzbEVuYWJsZWQnLFxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9TU0xFTkFCTEVEJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfU1NMRU5BQkxFRCcpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5zc2xFbmFibGVkID8/IGZhbHNlLFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9TU0xFTkFCTEVEJylcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICd1c2VybmFtZScsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9VU0VSTkFNRScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1VTRVJOQU1FJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnVzZXJuYW1lIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1VTRVJOQU1FJylcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdwYXNzd29yZCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9QQVNTV09SRCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1BBU1NXT1JEJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhc3N3b3JkIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBU1NXT1JEJylcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdwYXRoJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9QQVRIJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhdGggfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBVEgnKVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3dlYnBhdGgnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfV0VCU0lURV9QQVRIJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfV0VCU0lURV9QQVRIJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhdGggfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSCcpXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnY3VzdG9tVXJsJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX0NVU1RPTVVSTCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX0NVU1RPTVVSTCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5jdXN0b21VcmwgfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX0NVU1RPTVVSTCcpXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnYXV0aFR5cGUnLFxuICAgICAgdHlwZTogJ2xpc3QnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9BVVRIVFlQRScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX0FVVEhUWVBFJylcbiAgICAgIH0sXG4gICAgICBjaG9pY2VzOiBbJ2Jhc2ljJywgJ2RpZ2VzdCddLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hdXRoVHlwZSB8fCAnYmFzaWMnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnb3B0aW9ucycsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9PUFRJT05TJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfT1BUSU9OUycpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9PUFRJT05TJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLm9wdGlvbnMgfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9XG4gIF1cbiAgcmV0dXJuIGNvbmZpZ1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlcihjdHg6IElQaWNHbyk6IHZvaWQge1xuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKCd3ZWJkYXZwbGlzdCcsIHtcbiAgICBnZXQgbmFtZSgpIHtcbiAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1QnKVxuICAgIH0sXG4gICAgaGFuZGxlLFxuICAgIGNvbmZpZ1xuICB9KVxufVxuIiwiaW1wb3J0IGZzLCB7IGVuc3VyZURpclN5bmMgfSBmcm9tICdmcy1leHRyYSdcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5cbmltcG9ydCB7IElQaWNHbywgSVBsdWdpbkNvbmZpZywgSUxvY2FsQ29uZmlnIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcblxuaW1wb3J0IHsgZW5jb2RlUGF0aCwgZm9ybWF0UGF0aEhlbHBlciB9IGZyb20gJy4vdXRpbHMnXG5cbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XG4gIGNvbnN0IGxvY2FsQ29uZmlnID0gY3R4LmdldENvbmZpZzxJTG9jYWxDb25maWc+KCdwaWNCZWQubG9jYWwnKVxuICBpZiAoIWxvY2FsQ29uZmlnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gbm90IGZpbmQgbG9jYWwgY29uZmlnIScpXG4gIH1cbiAgY29uc3QgdXBsb2FkUGF0aCA9IGxvY2FsQ29uZmlnLnBhdGggfHwgJydcbiAgY29uc3QgY3VzdG9tVXJsID0gKGxvY2FsQ29uZmlnLmN1c3RvbVVybCB8fCAnJykucmVwbGFjZSgvXFwvJC8sICcnKVxuICBjb25zdCB3ZWJQYXRoID0gZm9ybWF0UGF0aEhlbHBlcih7XG4gICAgcGF0aDogbG9jYWxDb25maWcud2ViUGF0aD8ucmVwbGFjZSgvXFxcXC9nLCAnLycpXG4gIH0pXG4gIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XG4gIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcbiAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcbiAgICAgIGxldCBpbWFnZSA9IGltZy5idWZmZXJcbiAgICAgIGlmICghaW1hZ2UgJiYgaW1nLmJhc2U2NEltYWdlKSB7XG4gICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgaW1nVGVtcFBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICdpbWdUZW1wJywgJ2xvY2FsJylcbiAgICAgICAgICBjb25zdCBmaWxlSW1nVGVtcFBhdGggPSBwYXRoLmpvaW4oaW1nVGVtcFBhdGgsIGltZy5maWxlTmFtZSlcbiAgICAgICAgICBjb25zdCBmaWxlVXBsb2FkUGF0aCA9IHBhdGguam9pbih1cGxvYWRQYXRoLCBpbWcuZmlsZU5hbWUpXG4gICAgICAgICAgZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUoZmlsZVVwbG9hZFBhdGgpKVxuICAgICAgICAgIGVuc3VyZURpclN5bmMocGF0aC5kaXJuYW1lKGZpbGVJbWdUZW1wUGF0aCkpXG4gICAgICAgICAgZnMud3JpdGVGaWxlU3luYyhmaWxlVXBsb2FkUGF0aCwgaW1hZ2UpXG4gICAgICAgICAgZnMuY29weUZpbGVTeW5jKGZpbGVVcGxvYWRQYXRoLCBmaWxlSW1nVGVtcFBhdGgpXG4gICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXG4gICAgICAgICAgaWYgKGN1c3RvbVVybCkge1xuICAgICAgICAgICAgaW1nLmltZ1VybCA9IGAke2N1c3RvbVVybH0vJHtlbmNvZGVQYXRoKGAke3dlYlBhdGh9JHtpbWcuZmlsZU5hbWV9YCl9YFxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gcGF0aC5qb2luKHVwbG9hZFBhdGgsIGltZy5maWxlTmFtZSlcbiAgICAgICAgICB9XG4gICAgICAgICAgaW1nLmhhc2ggPSBwYXRoLmpvaW4odXBsb2FkUGF0aCwgaW1nLmZpbGVOYW1lKVxuICAgICAgICAgIGltZy5nYWxsZXJ5UGF0aCA9IGBodHRwOi8vbG9jYWxob3N0OjM2Njk5L2xvY2FsLyR7ZW5jb2RlVVJJQ29tcG9uZW50KGltZy5maWxlTmFtZSl9YFxuICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xuICAgICAgICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcbiAgICAgICAgICAgIGJvZHk6ICdmYWlsZWQgdG8gdXBsb2FkIGltYWdlJ1xuICAgICAgICAgIH0pXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdmYWlsZWQgdG8gdXBsb2FkIGltYWdlJylcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgIGN0eC5sb2cuZXJyb3IoZSlcbiAgICAgICAgdGhyb3cgZVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gY3R4XG59XG5cbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElMb2NhbENvbmZpZz4oJ3BpY0JlZC5sb2NhbCcpIHx8IHt9XG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICdwYXRoJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xPQ0FMX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MT0NBTF9QQVRIJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhdGggfHwgJycsXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MT0NBTF9NRVNTQUdFX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnY3VzdG9tVXJsJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xPQ0FMX0NVU1RPTVVSTCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xPQ0FMX0NVU1RPTVVSTCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5jdXN0b21VcmwgfHwgJycsXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MT0NBTF9NRVNTQUdFX0NVU1RPTVVSTCcpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnd2ViUGF0aCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MT0NBTF9XRUJQQVRIJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTE9DQUxfV0VCUEFUSCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy53ZWJQYXRoIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTE9DQUxfTUVTU0FHRV9XRUJQQVRIJylcbiAgICAgIH1cbiAgICB9XG4gIF1cbiAgcmV0dXJuIGNvbmZpZ1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlcihjdHg6IElQaWNHbyk6IHZvaWQge1xuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKCdsb2NhbCcsIHtcbiAgICBnZXQgbmFtZSgpIHtcbiAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTE9DQUwnKVxuICAgIH0sXG4gICAgaGFuZGxlLFxuICAgIGNvbmZpZ1xuICB9KVxufVxuIiwiaW1wb3J0IHsgTm9kZVNTSCwgQ29uZmlnIH0gZnJvbSAnbm9kZS1zc2gtbm8tY3B1LWZlYXR1cmVzJ1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcblxuaW1wb3J0IHsgSVNmdHBQbGlzdENvbmZpZyB9IGZyb20gJy4uL3R5cGVzJ1xuXG5jbGFzcyBTU0hDbGllbnQge1xuICBwcml2YXRlIHN0YXRpYyBpbnN0YW5jZTogU1NIQ2xpZW50XG4gIHByaXZhdGUgY2xpZW50ID0gbmV3IE5vZGVTU0goKVxuICBpc0Nvbm5lY3RlZCA9IGZhbHNlXG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgcHVibGljIHN0YXRpYyBnZXRJbnN0YW5jZSgpOiBTU0hDbGllbnQge1xuICAgIGlmICghU1NIQ2xpZW50Lmluc3RhbmNlKSB7XG4gICAgICBTU0hDbGllbnQuaW5zdGFuY2UgPSBuZXcgU1NIQ2xpZW50KClcbiAgICB9XG4gICAgcmV0dXJuIFNTSENsaWVudC5pbnN0YW5jZVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgY2hhbmdlV2luU3R5bGVQYXRoVG9Vbml4KHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHBhdGgucmVwbGFjZSgvXFxcXC9nLCAnLycpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY29ubmVjdChjb25maWc6IElTZnRwUGxpc3RDb25maWcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGhvc3QsIHBvcnQsIHVzZXJuYW1lLCBwYXNzd29yZCwgcHJpdmF0ZUtleSwgcGFzc3BocmFzZSB9ID0gY29uZmlnXG4gICAgY29uc3QgbG9naW5JbmZvOiBDb25maWcgPSBwcml2YXRlS2V5XG4gICAgICA/IHtcbiAgICAgICAgICB1c2VybmFtZSxcbiAgICAgICAgICBwcml2YXRlS2V5UGF0aDogcHJpdmF0ZUtleSxcbiAgICAgICAgICBwYXNzcGhyYXNlOiBwYXNzcGhyYXNlIHx8IHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICA6IHsgdXNlcm5hbWUsIHBhc3N3b3JkIH1cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5jbGllbnQuY29ubmVjdCh7XG4gICAgICAgIGhvc3Q6IGhvc3QsXG4gICAgICAgIHBvcnQ6IE51bWJlcihwb3J0KSB8fCAyMixcbiAgICAgICAgLi4ubG9naW5JbmZvXG4gICAgICB9KVxuICAgICAgdGhpcy5pc0Nvbm5lY3RlZCA9IHRydWVcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycilcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdXBsb2FkKGxvY2FsOiBzdHJpbmcsIHJlbW90ZTogc3RyaW5nLCBjb25maWc6IElTZnRwUGxpc3RDb25maWcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuaXNDb25uZWN0ZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU1NIIGNsaWVudCBpcyBub3QgY29ubmVjdGVkJylcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHJlbW90ZSA9IFNTSENsaWVudC5jaGFuZ2VXaW5TdHlsZVBhdGhUb1VuaXgocmVtb3RlKVxuICAgICAgYXdhaXQgdGhpcy5ta2RpcihwYXRoLmRpcm5hbWUocmVtb3RlKS5yZXBsYWNlKC9eXFwvK3xcXC8rJC9nLCAnJyksIGNvbmZpZylcbiAgICAgIGF3YWl0IHRoaXMuY2xpZW50LnB1dEZpbGUobG9jYWwsIHJlbW90ZSlcbiAgICAgIGNvbnN0IGZpbGVNb2RlID0gY29uZmlnLmZpbGVNb2RlIHx8ICcwNjQ0J1xuICAgICAgaWYgKGZpbGVNb2RlICE9PSAnMDY0NCcpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5leGVjKGBjaG1vZCAke2ZpbGVNb2RlfSBcIiR7cmVtb3RlfVwiYClcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGVycilcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIG1rZGlyKGRpclBhdGg6IHN0cmluZywgY29uZmlnOiBJU2Z0cFBsaXN0Q29uZmlnKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmNsaWVudC5pc0Nvbm5lY3RlZCgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NmdHAgY2xpZW50IGlzIG5vdCBjb25uZWN0ZWQnKVxuICAgIH1cbiAgICBjb25zdCBkaXJlY3RvcnlNb2RlID0gY29uZmlnLmRpck1vZGUgfHwgJzA3NTUnXG4gICAgaWYgKGRpcmVjdG9yeU1vZGUgIT09ICcwNzU1Jykge1xuICAgICAgY29uc3QgZGlycyA9IGRpclBhdGguc3BsaXQoJy8nKVxuICAgICAgbGV0IGN1cnJlbnRQYXRoID0gJydcbiAgICAgIGZvciAoY29uc3QgZGlyIG9mIGRpcnMpIHtcbiAgICAgICAgaWYgKGRpcikge1xuICAgICAgICAgIGN1cnJlbnRQYXRoICs9IGAvJHtkaXJ9YFxuICAgICAgICAgIGNvbnN0IHNjcmlwdCA9IGBta2RpciBcIiR7Y3VycmVudFBhdGh9XCIgJiYgY2htb2QgJHtkaXJlY3RvcnlNb2RlfSBcIiR7Y3VycmVudFBhdGh9XCJgXG4gICAgICAgICAgYXdhaXQgdGhpcy5leGVjKHNjcmlwdClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzY3JpcHQgPSBgY2QgLyAmJiBta2RpciAtcCBcIiR7ZGlyUGF0aH1cImBcbiAgICAgIGF3YWl0IHRoaXMuZXhlYyhzY3JpcHQpXG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGNob3duKHJlbW90ZTogc3RyaW5nLCB1c2VyOiBzdHJpbmcsIGdyb3VwPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmVtb3RlID0gU1NIQ2xpZW50LmNoYW5nZVdpblN0eWxlUGF0aFRvVW5peChyZW1vdGUpXG4gICAgY29uc3QgW191c2VyLCBfZ3JvdXBdID0gZ3JvdXAgPyBbdXNlciwgZ3JvdXBdIDogdXNlci5pbmNsdWRlcygnOicpID8gdXNlci5zcGxpdCgnOicpIDogW3VzZXIsIHVzZXJdXG5cbiAgICBhd2FpdCB0aGlzLmV4ZWMoYGNob3duICR7X3VzZXJ9OiR7X2dyb3VwfSBcIiR7cmVtb3RlfVwiYClcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZXhlYyhzY3JpcHQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGV4ZWNSZXN1bHQgPSBhd2FpdCB0aGlzLmNsaWVudC5leGVjQ29tbWFuZChzY3JpcHQpXG4gICAgcmV0dXJuIGV4ZWNSZXN1bHQuY29kZSA9PT0gMFxuICB9XG5cbiAgcHVibGljIGNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuY2xpZW50LmRpc3Bvc2UoKVxuICAgIHRoaXMuaXNDb25uZWN0ZWQgPSBmYWxzZVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNTSENsaWVudFxuIiwiaW1wb3J0IGZzLCB7IGVuc3VyZURpclN5bmMsIG1vdmVTeW5jLCByZW1vdmVTeW5jIH0gZnJvbSAnZnMtZXh0cmEnXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuXG5pbXBvcnQgeyBJUGljR28sIElQbHVnaW5Db25maWcsIElTZnRwUGxpc3RDb25maWcgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xuaW1wb3J0IFNTSENsaWVudCBmcm9tICcuLi8uLi91dGlscy9zc2hDbGllbnQnXG5pbXBvcnQgeyBlbmNvZGVQYXRoLCBmb3JtYXRQYXRoSGVscGVyIH0gZnJvbSAnLi91dGlscydcblxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcbiAgY29uc3Qgc2Z0cHBsaXN0Q29uZmlnID0gY3R4LmdldENvbmZpZzxJU2Z0cFBsaXN0Q29uZmlnPigncGljQmVkLnNmdHBwbGlzdCcpXG4gIGlmICghc2Z0cHBsaXN0Q29uZmlnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gbm90IGZpbmQgc2Z0cHBsaXN0IGNvbmZpZyEnKVxuICB9XG4gIHNmdHBwbGlzdENvbmZpZy5wb3J0ID0gTnVtYmVyKHNmdHBwbGlzdENvbmZpZy5wb3J0KSB8fCAyMlxuICBpZiAoc2Z0cHBsaXN0Q29uZmlnLnBvcnQgPCAwIHx8IHNmdHBwbGlzdENvbmZpZy5wb3J0ID4gNjU1MzUpIHtcbiAgICBzZnRwcGxpc3RDb25maWcucG9ydCA9IDIyXG4gIH1cbiAgc2Z0cHBsaXN0Q29uZmlnLnVwbG9hZFBhdGggPSBmb3JtYXRQYXRoSGVscGVyKHtcbiAgICBwYXRoOiBzZnRwcGxpc3RDb25maWcudXBsb2FkUGF0aCxcbiAgICByb290VG9FbXB0eTogZmFsc2VcbiAgfSlcbiAgY29uc3Qgd2ViUGF0aCA9IGZvcm1hdFBhdGhIZWxwZXIoe1xuICAgIHBhdGg6IHNmdHBwbGlzdENvbmZpZy53ZWJQYXRoLFxuICAgIHJvb3RUb0VtcHR5OiBmYWxzZVxuICB9KVxuICB0cnkge1xuICAgIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xuICAgICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XG4gICAgICAgIGxldCBpbWFnZSA9IGltZy5idWZmZXJcbiAgICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcbiAgICAgICAgICBpbWFnZSA9IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXBsb2FkVGVtcFBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICd1cGxvYWRUZW1wJylcbiAgICAgICAgY29uc3QgaW1nVGVtcFBhdGggPSBwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICdpbWdUZW1wJywgJ3NmdHBwbGlzdCcpXG4gICAgICAgIGVuc3VyZURpclN5bmMoaW1nVGVtcFBhdGgpXG4gICAgICAgIGNvbnN0IHRlbXBGaWxlUGF0aCA9IHBhdGguam9pbih1cGxvYWRUZW1wUGF0aCwgaW1nLmZpbGVOYW1lKVxuICAgICAgICBlbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZSh0ZW1wRmlsZVBhdGgpKVxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRlbXBGaWxlUGF0aCwgaW1hZ2UpXG4gICAgICAgIGNvbnN0IGNsaWVudCA9IFNTSENsaWVudC5nZXRJbnN0YW5jZSgpXG4gICAgICAgIGF3YWl0IGNsaWVudC5jb25uZWN0KHNmdHBwbGlzdENvbmZpZylcbiAgICAgICAgY29uc3QgcmVtb3RlUGF0aCA9IHBhdGguam9pbihgLyR7c2Z0cHBsaXN0Q29uZmlnLnVwbG9hZFBhdGh9YC5yZXBsYWNlKC9cXC9cXC8rL2csICcvJyksIGltZy5maWxlTmFtZSlcbiAgICAgICAgYXdhaXQgY2xpZW50LnVwbG9hZCh0ZW1wRmlsZVBhdGgsIHJlbW90ZVBhdGgsIHNmdHBwbGlzdENvbmZpZylcbiAgICAgICAgc2Z0cHBsaXN0Q29uZmlnLmZpbGVVc2VyICYmIChhd2FpdCBjbGllbnQuY2hvd24ocmVtb3RlUGF0aCwgc2Z0cHBsaXN0Q29uZmlnLmZpbGVVc2VyKSlcbiAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxuICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxuICAgICAgICBjb25zdCBiYXNlVXJsID0gc2Z0cHBsaXN0Q29uZmlnLmN1c3RvbVVybCB8fCBzZnRwcGxpc3RDb25maWcuaG9zdFxuICAgICAgICBpZiAoc2Z0cHBsaXN0Q29uZmlnLndlYlBhdGgpIHtcbiAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7YmFzZVVybH0vJHtlbmNvZGVQYXRoKGAke3dlYlBhdGggPT09ICcvJyA/ICcnIDogd2ViUGF0aH0ke2ltZy5maWxlTmFtZX1gKX1gXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW1nLmltZ1VybCA9IGAke2Jhc2VVcmx9LyR7ZW5jb2RlUGF0aChgJHtzZnRwcGxpc3RDb25maWcudXBsb2FkUGF0aCA9PT0gJy8nID8gJycgOiBzZnRwcGxpc3RDb25maWcudXBsb2FkUGF0aH0ke2ltZy5maWxlTmFtZX1gKX1gXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW1nVGVtcEZpbGVQYXRoID0gcGF0aC5qb2luKGltZ1RlbXBQYXRoLCBpbWcuZmlsZU5hbWUpXG4gICAgICAgIGVuc3VyZURpclN5bmMocGF0aC5kaXJuYW1lKGltZ1RlbXBGaWxlUGF0aCkpXG4gICAgICAgIHJlbW92ZVN5bmMoaW1nVGVtcEZpbGVQYXRoKVxuICAgICAgICBtb3ZlU3luYyh0ZW1wRmlsZVBhdGgsIHBhdGguam9pbihpbWdUZW1wUGF0aCwgaW1nLmZpbGVOYW1lKSlcbiAgICAgICAgaW1nLmdhbGxlcnlQYXRoID0gYGh0dHA6Ly9sb2NhbGhvc3Q6MzY2OTkvc2Z0cHBsaXN0LyR7ZW5jb2RlVVJJQ29tcG9uZW50KGltZy5maWxlTmFtZSl9YFxuICAgICAgICBjbGllbnQuY2xvc2UoKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY3R4XG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcbiAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXG4gICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdDSEVDS19TRVRUSU5HUycpXG4gICAgfSlcbiAgICB0aHJvdyBlcnJcbiAgfVxufVxuXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJU2Z0cFBsaXN0Q29uZmlnPigncGljQmVkLnNmdHBwbGlzdCcpIHx8IHt9XG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICdob3N0JyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9IT1NUJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX0hPU1QnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0hPU1QnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuaG9zdCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAncG9ydCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfUE9SVCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9QT1JUJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QT1JUJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBvcnQgfHwgMjIsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICd1c2VybmFtZScsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfVVNFUk5BTUUnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfVVNFUk5BTUUnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcudXNlcm5hbWUgfHwgJycsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3Bhc3N3b3JkJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9QQVNTV09SRCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9QQVNTV09SRCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXNzd29yZCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3ByaXZhdGVLZXknLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX1BSSVZBVEVLRVknKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfUFJJVkFURUtFWScpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUFJJVkFURUtFWScpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wcml2YXRlS2V5IHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAncGFzc3BocmFzZScsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfUFJJVkFURUtFWV9QQVNTUEhSQVNFJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX1BSSVZBVEVLRVlfUEFTU1BIUkFTRScpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUFJJVkFURUtFWV9QQVNTUEhSQVNFJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhc3NwaHJhc2UgfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICd1cGxvYWRQYXRoJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9VUExPQURQQVRIJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX1VQTE9BRFBBVEgnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1VQTE9BRFBBVEgnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcudXBsb2FkUGF0aCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2N1c3RvbVVybCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfQ1VTVE9NVVJMJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX0NVU1RPTVVSTCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfQ1VTVE9NVVJMJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmN1c3RvbVVybCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3dlYlBhdGgnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX1dFQlNJVEVfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9XRUJTSVRFX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy53ZWJQYXRoIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnZmlsZVVzZXInLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX0ZJTEVfVVNFUicpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9GSUxFX1VTRVInKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0ZJTEVfVVNFUicpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5maWxlVXNlciB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2ZpbGVNb2RlJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9GSUxFX01PREUnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfRklMRV9NT0RFJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9GSUxFX01PREUnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuZmlsZU1vZGUgfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdkaXJNb2RlJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9ESVJfTU9ERScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9ESVJfTU9ERScpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRElSX01PREUnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuZGlyTW9kZSB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH1cbiAgXVxuICByZXR1cm4gY29uZmlnXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyKGN0eDogSVBpY0dvKTogdm9pZCB7XG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ3NmdHBwbGlzdCcsIHtcbiAgICBnZXQgbmFtZSgpIHtcbiAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUJylcbiAgICB9LFxuICAgIGhhbmRsZSxcbiAgICBjb25maWdcbiAgfSlcbn1cbiIsImltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5pbXBvcnQgZnMsIHsgZW5zdXJlRGlyU3luYywgcmVtb3ZlIH0gZnJvbSAnZnMtZXh0cmEnXG5pbXBvcnQgeyBSZWFkU3RyZWFtIH0gZnJvbSAnZnMnXG5cbmltcG9ydCB7IElQaWNHbywgSVBsdWdpbkNvbmZpZywgSVRlbGVncmFwaENvbmZpZywgSU9sZFJlcU9wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xuXG5jb25zdCBwb3N0T3B0aW9ucyA9IGFzeW5jIChvcHRpb25zOiBJVGVsZWdyYXBoQ29uZmlnLCBpbWFnZTogUmVhZFN0cmVhbSk6IFByb21pc2U8SU9sZFJlcU9wdGlvbnM+ID0+IHtcbiAgY29uc3QgcmVxdWVzdE9wdGlvbnM6IElPbGRSZXFPcHRpb25zID0ge1xuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIHVybDogJ2h0dHBzOi8vdGVsZWdyYS5waC91cGxvYWQnLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgICdjb250ZW50LXR5cGUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YSdcbiAgICB9LFxuICAgIGZvcm1EYXRhOiB7XG4gICAgICBmaWxlOiBpbWFnZVxuICAgIH1cbiAgfVxuICBpZiAob3B0aW9ucy5wcm94eSkge1xuICAgIHJlcXVlc3RPcHRpb25zLnByb3h5ID0gb3B0aW9ucy5wcm94eVxuICB9XG4gIHJldHVybiByZXF1ZXN0T3B0aW9uc1xufVxuXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xuICBsZXQgdGdPcHRpb25zID0gY3R4LmdldENvbmZpZzxJVGVsZWdyYXBoQ29uZmlnPigncGljQmVkLnRlbGVncmFwaHBsaXN0JylcbiAgaWYgKCF0Z09wdGlvbnMpIHtcbiAgICB0Z09wdGlvbnMgPSB7fVxuICB9XG4gIHRyeSB7XG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcbiAgICAgICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlclxuICAgICAgICBpZiAoIWltYWdlICYmIGltZy5iYXNlNjRJbWFnZSkge1xuICAgICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cGxvYWRUZW1wUGF0aCA9IHBhdGguam9pbihjdHguYmFzZURpciwgJ3VwbG9hZFRlbXAnKVxuICAgICAgICBlbnN1cmVEaXJTeW5jKHVwbG9hZFRlbXBQYXRoKVxuICAgICAgICBjb25zdCB0ZW1wRmlsZVBhdGggPSBwYXRoLmpvaW4odXBsb2FkVGVtcFBhdGgsIGltZy5maWxlTmFtZSlcbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyh0ZW1wRmlsZVBhdGgsIGltYWdlKVxuICAgICAgICBjb25zdCBvcHRpb25zID0gYXdhaXQgcG9zdE9wdGlvbnModGdPcHRpb25zLCBmcy5jcmVhdGVSZWFkU3RyZWFtKHRlbXBGaWxlUGF0aCkpXG4gICAgICAgIGNvbnN0IHJlczogc3RyaW5nID0gYXdhaXQgY3R4LnJlcXVlc3Qob3B0aW9ucylcbiAgICAgICAgY29uc3QgYm9keSA9IHR5cGVvZiByZXMgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShyZXMpIDogcmVzXG4gICAgICAgIHJlbW92ZSh0ZW1wRmlsZVBhdGgpXG4gICAgICAgIGlmIChib2R5Py5bMF0/LnNyYykge1xuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxuICAgICAgICAgIGltZy5pbWdVcmwgPSBgaHR0cHM6Ly90ZWxlZ3JhLnBoJHtib2R5WzBdLnNyY31gXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZXJ2ZXIgZXJyb3IsIHBsZWFzZSB0cnkgYWdhaW4nKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjdHhcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcbiAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXG4gICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdDSEVDS19TRVRUSU5HU19BTkRfTkVUV09SSycpLFxuICAgICAgdGV4dDogJydcbiAgICB9KVxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3Igc3RyaW5nIHwgSUVycm9yXG4gICAgdGhyb3cgZXJyPy5yZXNwb25zZT8uZGF0YSB8fCBlcnJcbiAgfVxufVxuXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJVGVsZWdyYXBoQ29uZmlnPigncGljQmVkLnRlbGVncmFwaHBsaXN0JykgfHwge31cbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXG4gICAge1xuICAgICAgbmFtZTogJ3Byb3h5JyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX1BST1hZJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfUFJPWFknKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX01FU1NBR0VfUFJPWFknKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucHJveHkgfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9XG4gIF1cbiAgcmV0dXJuIGNvbmZpZ1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlcihjdHg6IElQaWNHbyk6IHZvaWQge1xuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKCd0ZWxlZ3JhcGhwbGlzdCcsIHtcbiAgICBnZXQgbmFtZSgpIHtcbiAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVMRUdSQVBIJylcbiAgICB9LFxuICAgIGhhbmRsZSxcbiAgICBjb25maWdcbiAgfSlcbn1cbiIsImltcG9ydCB7IGxvb2t1cCB9IGZyb20gJ21pbWUtdHlwZXMnXG5pbXBvcnQgeyBJUGljTGlzdENvbmZpZywgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJT2xkUmVxT3B0aW9uc1dpdGhGdWxsUmVzcG9uc2UgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xuXG5jb25zdCBwb3N0T3B0aW9ucyA9IChvcHRpb25zOiBJUGljTGlzdENvbmZpZywgZmlsZU5hbWU6IHN0cmluZywgaW1hZ2U6IEJ1ZmZlcik6IElPbGRSZXFPcHRpb25zV2l0aEZ1bGxSZXNwb25zZSA9PiB7XG4gIGNvbnN0IGhvc3QgPSBvcHRpb25zLmhvc3QgfHwgJzEyNy4wLjAuMSdcbiAgY29uc3QgcG9ydCA9IG9wdGlvbnMucG9ydCB8fCAzNjY3N1xuICBjb25zdCBwaWNiZWQgPSBvcHRpb25zLnBpY2JlZCB8fCAnJ1xuICBjb25zdCBjb25maWdOYW1lID0gb3B0aW9ucy5jb25maWdOYW1lIHx8ICdEZWZhdWx0J1xuICBjb25zdCBzZXJ2ZXJLZXkgPSBvcHRpb25zLnNlcnZlcktleSB8fCAnJ1xuICBsZXQgdXJsID0gYGh0dHA6Ly8ke2hvc3R9OiR7cG9ydH0vdXBsb2FkP2NvbmZpZ05hbWU9JHtjb25maWdOYW1lfWBcbiAgaWYgKHBpY2JlZCkge1xuICAgIHVybCArPSBgJnBpY2JlZD0ke3BpY2JlZH1gXG4gIH1cbiAgaWYgKHNlcnZlcktleSkge1xuICAgIHVybCArPSBgJmtleT0ke3NlcnZlcktleX1gXG4gIH1cbiAgcmV0dXJuIHtcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICB1cmwsXG4gICAgaGVhZGVyczoge1xuICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJ1xuICAgIH0sXG4gICAgZm9ybURhdGE6IHtcbiAgICAgIGZpbGU6IHtcbiAgICAgICAgdmFsdWU6IGltYWdlLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgZmlsZW5hbWU6IGZpbGVOYW1lLFxuICAgICAgICAgIGNvbnRlbnRUeXBlOiBsb29rdXAoZmlsZU5hbWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIHJlc29sdmVXaXRoRnVsbFJlc3BvbnNlOiB0cnVlXG4gIH1cbn1cblxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28gfCBib29sZWFuPiA9PiB7XG4gIGNvbnN0IHBpY2xpc3RPcHRpb25zID0gY3R4LmdldENvbmZpZzxJUGljTGlzdENvbmZpZz4oJ3BpY0JlZC5waWNsaXN0JylcbiAgaWYgKCFwaWNsaXN0T3B0aW9ucykge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNhbid0IGZpbmQgUGljTGlzdCBjb25maWdcIilcbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xuICAgICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XG4gICAgICAgIGxldCBpbWFnZSA9IGltZy5idWZmZXJcbiAgICAgICAgaWYgKCFpbWFnZSAmJiBpbWcuYmFzZTY0SW1hZ2UpIHtcbiAgICAgICAgICBpbWFnZSA9IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHBvc3RPcHRpb25zKHBpY2xpc3RPcHRpb25zLCBpbWcuZmlsZU5hbWUsIGltYWdlKVxuXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGN0eFxuICAgICAgICAgIC5yZXF1ZXN0KG9wdGlvbnMpXG4gICAgICAgICAgLnRoZW4oKHJlczogYW55KSA9PiByZXMpXG4gICAgICAgICAgLmNhdGNoKChlcnI6IEVycm9yKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBzdGF0dXNDb2RlOiA0MDAsXG4gICAgICAgICAgICAgIGJvZHk6IHtcbiAgICAgICAgICAgICAgICBtc2c6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0FVVEhfRkFJTEVEJyksXG4gICAgICAgICAgICAgICAgZXJyXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICBpZiAocmVzLnN0YXR1c0NvZGUgPT09IDIwMCAmJiByZXMuYm9keT8uc3VjY2Vzcykge1xuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxuICAgICAgICAgIGltZy5pbWdVcmwgPSByZXMuYm9keS5yZXN1bHRbMF1cbiAgICAgICAgICBpbWcuZnVsbFJlc3VsdCA9IHJlcy5ib2R5LmZ1bGxSZXN1bHRbMF1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IocmVzLmJvZHkubWVzc2FnZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY3R4XG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcbiAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXG4gICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdDSEVDS19TRVRUSU5HUycpXG4gICAgfSlcbiAgICB0aHJvdyBlcnJcbiAgfVxufVxuXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJUGljTGlzdENvbmZpZz4oJ3BpY0JlZC5waWNsaXN0JykgfHwge31cbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXG4gICAge1xuICAgICAgbmFtZTogJ2hvc3QnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUElDTElTVF9IT1NUJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUElDTElTVF9IT1NUJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmhvc3QgfHwgJzEyNy4wLjAuMScsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3BvcnQnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUElDTElTVF9QT1JUJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUElDTElTVF9QT1JUJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBvcnQgfHwgMzY2NzcsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdwaWNiZWQnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUElDTElTVF9QSUNCRUQnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9QSUNMSVNUX1BJQ0JFRCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5waWNiZWQgfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdjb25maWdOYW1lJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1BJQ0xJU1RfQ09ORklHTkFNRScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1BJQ0xJU1RfQ09ORklHTkFNRScpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5jb25maWdOYW1lIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnc2VydmVyS2V5JyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1BJQ0xJU1RfS0VZJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUElDTElTVF9LRVknKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuc2VydmVyS2V5IHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfVxuICBdXG4gIHJldHVybiBjb25maWdcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIoY3R4OiBJUGljR28pOiB2b2lkIHtcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcigncGljbGlzdCcsIHtcbiAgICBnZXQgbmFtZSgpIHtcbiAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUElDTElTVCcpXG4gICAgfSxcbiAgICBoYW5kbGUsXG4gICAgY29uZmlnXG4gIH0pXG59XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vaGVsbG9kazM0L3BpY2dvLXBsdWdpbi1sYW5rb25nXG4vLyBMSUNFTlNFOiBNSVRcblxuaW1wb3J0IGh0dHBzIGZyb20gJ2h0dHBzJ1xuaW1wb3J0IHsgSUxza3lDb25maWcsIElQaWNHbywgSVBsdWdpbkNvbmZpZyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXG5cbmV4cG9ydCBpbnRlcmZhY2UgSU1HVFlQRSB7XG4gIGltZ1VybD86IHN0cmluZ1xuICB0eXBlPzogc3RyaW5nXG4gIGtleT86IHN0cmluZ1xuICBpZD86IHN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElWMkZPUk1EQVRBIHtcbiAgZmlsZToge1xuICAgIHZhbHVlOiBCdWZmZXJcbiAgICBvcHRpb25zOiB7XG4gICAgICBmaWxlbmFtZTogc3RyaW5nXG4gICAgfVxuICB9XG4gIHNzbDogc3RyaW5nXG4gIHN0cmF0ZWd5X2lkPzogc3RyaW5nXG4gIGFsYnVtX2lkPzogc3RyaW5nXG4gIHBlcm1pc3Npb24/OiBudW1iZXJcbn1cblxuY29uc3QgcG9zdE9wdGlvbnMgPSAob3B0aW9uczogSUxza3lDb25maWcsIGZpbGVOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsIGltYWdlOiBCdWZmZXIpOiBhbnkgPT4ge1xuICBsZXQgaG9zdCA9IG9wdGlvbnMuaG9zdFxuICBob3N0ID0gaG9zdC5yZXBsYWNlKC9cXC8kLywgJycpXG4gIGNvbnN0IGlzVjIgPSBvcHRpb25zLnZlcnNpb24gPT09ICdWMidcbiAgY29uc3QgdG9rZW4gPSBvcHRpb25zLnRva2VuXG5cbiAgY29uc3QgdjFIZWFkZXJzID0ge1xuICAgICdDb250ZW50LVR5cGUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsXG4gICAgJ1VzZXItQWdlbnQnOiAnUGljTGlzdCcsXG4gICAgQ29ubmVjdGlvbjogJ2tlZXAtYWxpdmUnLFxuICAgIHRva2VuOiB0b2tlbiB8fCB1bmRlZmluZWRcbiAgfVxuICBjb25zdCB2MUZvcm1EYXRhID0ge1xuICAgIGltYWdlOiB7XG4gICAgICB2YWx1ZTogaW1hZ2UsXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIGZpbGVuYW1lOiBmaWxlTmFtZSFcbiAgICAgIH1cbiAgICB9LFxuICAgIHNzbDogJ3RydWUnXG4gIH1cblxuICBjb25zdCB2MkhlYWRlcnMgPSB7XG4gICAgJ0NvbnRlbnQtVHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJyxcbiAgICAnVXNlci1BZ2VudCc6ICdQaWNMaXN0JyxcbiAgICBDb25uZWN0aW9uOiAna2VlcC1hbGl2ZScsXG4gICAgQWNjZXB0OiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgQXV0aG9yaXphdGlvbjogdG9rZW4gfHwgdW5kZWZpbmVkXG4gIH1cbiAgY29uc3Qgc3RyYXRlZ3lJZCA9IG9wdGlvbnMuc3RyYXRlZ3lJZFxuICBjb25zdCBhbGJ1bUlkID0gb3B0aW9ucy5hbGJ1bUlkXG4gIGxldCBwZXJtaXNzaW9uOiBhbnkgPSBvcHRpb25zLnBlcm1pc3Npb24udmFsdWVcbiAgaWYgKHBlcm1pc3Npb24gPT09IHVuZGVmaW5lZCkge1xuICAgIHBlcm1pc3Npb24gPSBvcHRpb25zLnBlcm1pc3Npb25cbiAgfVxuICBjb25zdCB2MkZvcm1EYXRhOiBJVjJGT1JNREFUQSA9IHtcbiAgICBmaWxlOiB7XG4gICAgICB2YWx1ZTogaW1hZ2UsXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIGZpbGVuYW1lOiBmaWxlTmFtZSFcbiAgICAgIH1cbiAgICB9LFxuICAgIHNzbDogJ3RydWUnLFxuICAgIHN0cmF0ZWd5X2lkOiBzdHJhdGVneUlkLFxuICAgIGFsYnVtX2lkOiBhbGJ1bUlkLFxuICAgIHBlcm1pc3Npb25cbiAgfVxuICBpZiAoIXN0cmF0ZWd5SWQpIHtcbiAgICBkZWxldGUgdjJGb3JtRGF0YS5zdHJhdGVneV9pZFxuICB9XG4gIGlmICghYWxidW1JZCkge1xuICAgIGRlbGV0ZSB2MkZvcm1EYXRhLmFsYnVtX2lkXG4gIH1cbiAgaWYgKCEocGVybWlzc2lvbiA9PT0gMCB8fCBwZXJtaXNzaW9uID09PSAxKSkge1xuICAgIGRlbGV0ZSB2MkZvcm1EYXRhLnBlcm1pc3Npb25cbiAgfVxuXG4gIGNvbnN0IHJlcXVlc3RBZ2VudCA9IG5ldyBodHRwcy5BZ2VudCh7XG4gICAgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZVxuICB9KVxuICByZXR1cm4ge1xuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIHVybDogaXNWMiA/IGAke2hvc3R9L2FwaS92MS91cGxvYWRgIDogYCR7aG9zdH0vYXBpL3VwbG9hZGAsXG4gICAgYWdlbnQ6IHJlcXVlc3RBZ2VudCxcbiAgICBoZWFkZXJzOiBpc1YyID8gdjJIZWFkZXJzIDogdjFIZWFkZXJzLFxuICAgIGZvcm1EYXRhOiBpc1YyID8gdjJGb3JtRGF0YSA6IHYxRm9ybURhdGFcbiAgfVxufVxuXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xuICBjb25zdCBsc2t5T3B0aW9ucyA9IGN0eC5nZXRDb25maWc8SUxza3lDb25maWc+KCdwaWNCZWQubHNreXBsaXN0JylcbiAgaWYgKCFsc2t5T3B0aW9ucykge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNhbid0IGZpbmQgbHNreSB1cGxvYWRlciBjb25maWdcIilcbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xuICAgICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlciFcbiAgICAgIGlmICghaW1hZ2UgJiYgaW1nLmJhc2U2NEltYWdlKSB7XG4gICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBvc3RDb25maWcgPSBwb3N0T3B0aW9ucyhsc2t5T3B0aW9ucywgaW1nLmZpbGVOYW1lLCBpbWFnZSlcbiAgICAgIGxldCBib2R5ID0gKGF3YWl0IGN0eC5SZXF1ZXN0LnJlcXVlc3QocG9zdENvbmZpZykpIGFzIGFueVxuICAgICAgYm9keSA9IHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UoYm9keSkgOiBib2R5XG4gICAgICBjb25zdCBpc1YyID0gbHNreU9wdGlvbnMudmVyc2lvbiA9PT0gJ1YyJ1xuICAgICAgY29uc3QgY29uZGl0aW9uID0gaXNWMiA/IGJvZHkuc3RhdHVzID09PSB0cnVlIDogYm9keS5jb2RlID09PSAyMDBcbiAgICAgIGlmIChjb25kaXRpb24pIHtcbiAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxuICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxuICAgICAgICBpbWcuaW1nVXJsID0gaXNWMiA/IGJvZHkuZGF0YS5saW5rcy51cmwgOiBib2R5LmRhdGEudXJsXG4gICAgICAgIGlmIChpc1YyKSB7XG4gICAgICAgICAgaW1nLmhhc2ggPSBib2R5LmRhdGEua2V5XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN0eC5lbWl0KCdub3RpZmljYXRpb24nLCB7XG4gICAgICAgICAgdGl0bGU6ICd1cGxvYWQgZmFpbGVkJyxcbiAgICAgICAgICBib2R5OiBib2R5Lm1lc3NhZ2VcbiAgICAgICAgfSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGJvZHkubWVzc2FnZSlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGN0eFxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xuICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcbiAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0NIRUNLX1NFVFRJTkdTJylcbiAgICB9KVxuICAgIHRocm93IGVyclxuICB9XG59XG5cbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElMc2t5Q29uZmlnPigncGljQmVkLmxza3lwbGlzdCcpIHx8IHt9XG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICd2ZXJzaW9uJyxcbiAgICAgIHR5cGU6ICdsaXN0JyxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcudmVyc2lvbiB8fCAnVjEnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MU0tZX1ZFUlNJT04nKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MU0tZX1ZFUlNJT04nKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfTUVTU0FHRV9WRVJTSU9OJylcbiAgICAgIH0sXG4gICAgICBjaG9pY2VzOiBbJ1YxJywgJ1YyJ10sXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2hvc3QnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9IT1NUJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9IT1NUJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MU0tZX01FU1NBR0VfSE9TVCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5ob3N0IHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICd0b2tlbicsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MU0tZX1RPS0VOJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9UT0tFTicpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9NRVNTQUdFX1RPS0VOJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnRva2VuLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdzdHJhdGVneUlkJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnN0cmF0ZWd5SWQsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfU1RSQVRFR1lfSUQnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MU0tZX1NUUkFURUdZX0lEJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MU0tZX01FU1NBR0VfU1RSQVRFR1lfSUQnKVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2FsYnVtSWQnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYWxidW1JZCxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9BTEJVTV9JRCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfQUxCVU1fSUQnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfTUVTU0FHRV9BTEJVTV9JRCcpXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAncGVybWlzc2lvbicsXG4gICAgICB0eXBlOiAnbGlzdCcsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBlcm1pc3Npb24gfHwgJ3ByaXZhdGUoZGVmYXVsdCknLFxuICAgICAgY2hvaWNlczogW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ3ByaXZhdGUoZGVmYXVsdCknLFxuICAgICAgICAgIHZhbHVlOiAwXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAncHVibGljJyxcbiAgICAgICAgICB2YWx1ZTogMVxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MU0tZX1BFUk1JU1NJT04nKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MU0tZX1BFUk1JU1NJT04nKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfTUVTU0FHRV9QRVJNSVNTSU9OJylcbiAgICAgIH1cbiAgICB9XG4gIF1cbiAgcmV0dXJuIGNvbmZpZ1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlcihjdHg6IElQaWNHbyk6IHZvaWQge1xuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKCdsc2t5cGxpc3QnLCB7XG4gICAgZ2V0IG5hbWUoKSB7XG4gICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfUExJU1QnKVxuICAgIH0sXG4gICAgaGFuZGxlLFxuICAgIGNvbmZpZ1xuICB9KVxufVxuIiwiaW1wb3J0IGNyeXB0byBmcm9tICdjcnlwdG8nXG5pbXBvcnQgRmlsZVR5cGUgZnJvbSAnZmlsZS10eXBlJ1xuaW1wb3J0IG1pbWUgZnJvbSAnbWltZSdcbmltcG9ydCB7IEh0dHBzUHJveHlBZ2VudCwgSHR0cFByb3h5QWdlbnQgfSBmcm9tICdocGFnZW50J1xuaW1wb3J0IHsgSUltZ0luZm8gfSBmcm9tICcuLi8uLi8uLi90eXBlcydcbmltcG9ydCB7IFVSTCB9IGZyb20gJ3VybCdcblxuY2xhc3MgRmlsZU5hbWVHZW5lcmF0b3Ige1xuICBkYXRlOiBEYXRlXG4gIGluZm86IElJbWdJbmZvXG5cbiAgc3RhdGljIGZpZWxkcyA9IFtcbiAgICAneWVhcicsIC8vIOW9k+WJjeaXpeacnyAtIOW5tFxuICAgICdtb250aCcsIC8vIOW9k+WJjeaXpeacnyAtIOaciFxuICAgICdkYXknLCAvLyDlvZPliY3ml6XmnJ8gLSDml6VcbiAgICAnZnVsbE5hbWUnLCAvLyDmlofku7blkI0sIOWMheWQq+aJqeWxleWQjVxuICAgICdmaWxlTmFtZScsIC8vIOaWh+S7tuWQjSwg5LiN5YyF5ZCr5omp5bGV5ZCNXG4gICAgJ2V4dE5hbWUnLCAvLyDmianlsZXlkI1cbiAgICAnbWQ1JywgLy8gbWQ1XG4gICAgJ21kNUI2NCcsIC8vIG1kNSBiYXNlNjRcbiAgICAnbWQ1QjY0U2hvcnQnLCAvLyBtZDUgYmFzZTY0IHNob3J0XG4gICAgJ3NoYTEnLCAvLyBzaGExXG4gICAgJ3NoYTI1NicsIC8vIHNoYTI1NlxuICAgICd0aW1lc3RhbXAnLCAvLyDlvZPliY3ml7bpl7TmiLMsIOenklxuICAgICd0aW1lc3RhbXBNUycgLy8g5b2T5YmN5pe26Ze05oizLCDmr6vnp5JcbiAgXVxuXG4gIGNvbnN0cnVjdG9yKGluZm86IElJbWdJbmZvKSB7XG4gICAgdGhpcy5kYXRlID0gbmV3IERhdGUoKVxuICAgIHRoaXMuaW5mbyA9IGluZm9cbiAgfVxuXG4gIHB1YmxpYyB5ZWFyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMuZGF0ZS5nZXRGdWxsWWVhcigpfWBcbiAgfVxuXG4gIHB1YmxpYyBtb250aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiAodGhpcy5kYXRlLmdldE1vbnRoKCkgKyAxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcbiAgfVxuXG4gIHB1YmxpYyBkYXkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kYXRlLmdldERhdGUoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcbiAgfVxuXG4gIHB1YmxpYyBmdWxsTmFtZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmluZm8uZmlsZU5hbWVcbiAgfVxuXG4gIHB1YmxpYyBmaWxlTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAodGhpcy5pbmZvLmZpbGVOYW1lID8/ICcnKS5yZXBsYWNlKHRoaXMuaW5mby5leHRuYW1lID8/ICcnLCAnJylcbiAgfVxuXG4gIHB1YmxpYyBleHROYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICh0aGlzLmluZm8uZXh0bmFtZSA/PyAnJykucmVwbGFjZSgnLicsICcnKVxuICB9XG5cbiAgcHVibGljIG1kNSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBjcnlwdG8uY3JlYXRlSGFzaCgnbWQ1JykudXBkYXRlKHRoaXMuaW1nQnVmZmVyKCkhKS5kaWdlc3QoJ2hleCcpXG4gIH1cblxuICBwdWJsaWMgbWQ1QjY0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNyeXB0b1xuICAgICAgLmNyZWF0ZUhhc2goJ21kNScpXG4gICAgICAudXBkYXRlKHRoaXMuaW1nQnVmZmVyKCkhKVxuICAgICAgLmRpZ2VzdCgnYmFzZTY0JylcbiAgICAgIC5yZXBsYWNlKC9cXCsvZywgJy0nKVxuICAgICAgLnJlcGxhY2UoL1xcLy9nLCAnXycpXG4gICAgICAucmVwbGFjZSgvPSskLywgJycpXG4gIH1cblxuICBwdWJsaWMgbWQ1QjY0U2hvcnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY3J5cHRvXG4gICAgICAuY3JlYXRlSGFzaCgnbWQ1JylcbiAgICAgIC51cGRhdGUodGhpcy5pbWdCdWZmZXIoKSEpXG4gICAgICAuZGlnZXN0KCdiYXNlNjQnKVxuICAgICAgLnJlcGxhY2UoL1xcKy9nLCAnLScpXG4gICAgICAucmVwbGFjZSgvXFwvL2csICdfJylcbiAgICAgIC5zbGljZSgwLCA3KVxuICB9XG5cbiAgcHVibGljIHNoYTEoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTEnKS51cGRhdGUodGhpcy5pbWdCdWZmZXIoKSEpLmRpZ2VzdCgnaGV4JylcbiAgfVxuXG4gIHB1YmxpYyBzaGEyNTYoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZSh0aGlzLmltZ0J1ZmZlcigpISkuZGlnZXN0KCdoZXgnKVxuICB9XG5cbiAgcHVibGljIHRpbWVzdGFtcCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKS50b1N0cmluZygpXG4gIH1cblxuICBwdWJsaWMgdGltZXN0YW1wTVMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gRGF0ZS5ub3coKS50b1N0cmluZygpXG4gIH1cblxuICBwcml2YXRlIGltZ0J1ZmZlcigpOiBzdHJpbmcgfCBCdWZmZXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmluZm8uYmFzZTY0SW1hZ2UgPyB0aGlzLmluZm8uYmFzZTY0SW1hZ2UgOiB0aGlzLmluZm8uYnVmZmVyXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFBhdGgoaW5mbzogSUltZ0luZm8sIGZvcm1hdD86IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghZm9ybWF0KSB7XG4gICAgcmV0dXJuIGluZm8uZmlsZU5hbWUhXG4gIH1cblxuICBjb25zdCBmaWxlTmFtZUdlbmVyYXRvciA9IG5ldyBGaWxlTmFtZUdlbmVyYXRvcihpbmZvKVxuXG4gIGxldCBmb3JtYXRQYXRoOiBzdHJpbmcgPSBmb3JtYXRcblxuICBmb3IgKGNvbnN0IGtleSBvZiBGaWxlTmFtZUdlbmVyYXRvci5maWVsZHMpIHtcbiAgICBjb25zdCByZSA9IG5ldyBSZWdFeHAoYHske2tleX19YCwgJ2cnKVxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgdHMtbWlncmF0ZSgyNTMyKSBGSVhNRTogT2JqZWN0IGlzIHBvc3NpYmx5ICd1bmRlZmluZWQnLlxuICAgIGZvcm1hdFBhdGggPSBmb3JtYXRQYXRoLnJlcGxhY2UocmUsIGZpbGVOYW1lR2VuZXJhdG9yW2tleV0oKSlcbiAgfVxuXG4gIHJldHVybiBmb3JtYXRQYXRoXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleHRyYWN0SW5mbyhpbmZvOiBJSW1nSW5mbyk6IFByb21pc2U8e1xuICBib2R5PzogQnVmZmVyXG4gIGNvbnRlbnRUeXBlPzogc3RyaW5nXG4gIGNvbnRlbnRFbmNvZGluZz86IHN0cmluZ1xufT4ge1xuICBjb25zdCByZXN1bHQ6IHtcbiAgICBib2R5PzogQnVmZmVyXG4gICAgY29udGVudFR5cGU/OiBzdHJpbmdcbiAgICBjb250ZW50RW5jb2Rpbmc/OiBzdHJpbmdcbiAgfSA9IHt9XG5cbiAgaWYgKGluZm8uYmFzZTY0SW1hZ2UpIHtcbiAgICBjb25zdCBib2R5ID0gaW5mby5iYXNlNjRJbWFnZS5yZXBsYWNlKC9eZGF0YTpbL1xcd10rO2Jhc2U2NCwvLCAnJylcbiAgICByZXN1bHQuY29udGVudFR5cGUgPSBpbmZvLmJhc2U2NEltYWdlLm1hdGNoKC9bXjpdXFx3K1xcL1tcXHctK1xcZC5dKyg/PTt8LCkvKT8uWzBdXG4gICAgcmVzdWx0LmJvZHkgPSBCdWZmZXIuZnJvbShib2R5LCAnYmFzZTY0JylcbiAgICByZXN1bHQuY29udGVudEVuY29kaW5nID0gJ2Jhc2U2NCdcbiAgfSBlbHNlIHtcbiAgICBpZiAoaW5mby5leHRuYW1lKSB7XG4gICAgICByZXN1bHQuY29udGVudFR5cGUgPSBtaW1lLmdldFR5cGUoaW5mby5leHRuYW1lKSFcbiAgICB9XG4gICAgcmVzdWx0LmJvZHkgPSBpbmZvLmJ1ZmZlclxuICB9XG5cbiAgLy8gZmFsbGJhY2sgdG8gZGV0ZWN0IGZyb20gYnVmZmVyXG4gIGlmICghcmVzdWx0LmNvbnRlbnRUeXBlKSB7XG4gICAgY29uc3QgZmlsZVR5cGUgPSBhd2FpdCBGaWxlVHlwZS5mcm9tQnVmZmVyKHJlc3VsdC5ib2R5ISlcbiAgICByZXN1bHQuY29udGVudFR5cGUgPSBmaWxlVHlwZT8ubWltZVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG5mdW5jdGlvbiBmb3JtYXRIdHRwUHJveHlVUkwodXJsID0gJycpOiBzdHJpbmcge1xuICBpZiAoIXVybCkgcmV0dXJuICcnXG5cbiAgaWYgKCEvXmh0dHBzPzpcXC9cXC8vLnRlc3QodXJsKSkge1xuICAgIGNvbnN0IFtob3N0LCBwb3J0XSA9IHVybC5zcGxpdCgnOicpXG4gICAgcmV0dXJuIGBodHRwOi8vJHtob3N0LnJlcGxhY2UoJzEyNy4wLjAuMScsICdsb2NhbGhvc3QnKX06JHtwb3J0fWBcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgeyBwcm90b2NvbCwgaG9zdG5hbWUsIHBvcnQgfSA9IG5ldyBVUkwodXJsKVxuICAgIHJldHVybiBgJHtwcm90b2NvbH0vLyR7aG9zdG5hbWUucmVwbGFjZSgnMTI3LjAuMC4xJywgJ2xvY2FsaG9zdCcpfToke3BvcnR9YFxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFByb3h5QWdlbnQoXG4gIHByb3h5OiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIHNzbEVuYWJsZWQ6IGJvb2xlYW4sXG4gIHJlamVjdFVuYXV0aG9yaXplZDogYm9vbGVhblxuKTogSHR0cFByb3h5QWdlbnQgfCBIdHRwc1Byb3h5QWdlbnQgfCB1bmRlZmluZWQge1xuICBjb25zdCBmb3JtYXRlZFByb3h5ID0gZm9ybWF0SHR0cFByb3h5VVJMKHByb3h5KVxuICBpZiAoIWZvcm1hdGVkUHJveHkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cblxuICBjb25zdCBBZ2VudCA9IHNzbEVuYWJsZWQgPyBIdHRwc1Byb3h5QWdlbnQgOiBIdHRwUHJveHlBZ2VudFxuICBjb25zdCBvcHRpb25zID0ge1xuICAgIGtlZXBBbGl2ZTogdHJ1ZSxcbiAgICBrZWVwQWxpdmVNc2VjczogMTAwMCxcbiAgICBzY2hlZHVsaW5nOiAnbGlmbycgYXMgJ2xpZm8nIHwgJ2ZpZm8nIHwgdW5kZWZpbmVkLFxuICAgIHJlamVjdFVuYXV0aG9yaXplZCxcbiAgICBwcm94eTogZm9ybWF0ZWRQcm94eVxuICB9XG5cbiAgcmV0dXJuIG5ldyBBZ2VudChvcHRpb25zKVxufVxuIiwiaW1wb3J0IHtcbiAgUzNDbGllbnRDb25maWcsXG4gIFMzQ2xpZW50LFxuICBQdXRPYmplY3RDb21tYW5kLFxuICBHZXRPYmplY3RDb21tYW5kLFxuICBQdXRPYmplY3RDb21tYW5kT3V0cHV0XG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zMydcbmltcG9ydCB7IGdldFNpZ25lZFVybCB9IGZyb20gJ0Bhd3Mtc2RrL3MzLXJlcXVlc3QtcHJlc2lnbmVyJ1xuaW1wb3J0IHsgTm9kZUh0dHBIYW5kbGVyLCBOb2RlSHR0cEhhbmRsZXJPcHRpb25zIH0gZnJvbSAnQHNtaXRoeS9ub2RlLWh0dHAtaGFuZGxlcidcblxuaW1wb3J0IHVybCBmcm9tICd1cmwnXG5pbXBvcnQgeyBIdHRwUHJveHlBZ2VudCwgSHR0cHNQcm94eUFnZW50IH0gZnJvbSAnaHBhZ2VudCdcbmltcG9ydCB7IElBd3NTM1BMaXN0VXNlckNvbmZpZywgSUltZ0luZm8gfSBmcm9tICcuLi8uLi8uLi90eXBlcydcbmltcG9ydCB7IGV4dHJhY3RJbmZvLCBnZXRQcm94eUFnZW50IH0gZnJvbSAnLi91dGlscydcblxuZXhwb3J0IGludGVyZmFjZSBJVXBsb2FkUmVzdWx0IHtcbiAgaW5kZXg6IG51bWJlclxuICBrZXk6IHN0cmluZ1xuICB1cmw6IHN0cmluZ1xuICBpbWdVUkw6IHN0cmluZ1xuICB2ZXJzaW9uSWQ/OiBzdHJpbmdcbiAgZVRhZz86IHN0cmluZ1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTM0NsaWVudChvcHRzOiBJQXdzUzNQTGlzdFVzZXJDb25maWcpOiBhbnkge1xuICBsZXQgc3NsRW5hYmxlZCA9IHRydWVcbiAgdHJ5IHtcbiAgICBjb25zdCB1ID0gbmV3IHVybC5VUkwob3B0cy5lbmRwb2ludCEpXG4gICAgc3NsRW5hYmxlZCA9IHUucHJvdG9jb2wgPT09ICdodHRwczonXG4gIH0gY2F0Y2gge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eVxuICB9XG5cbiAgY29uc3QgaHR0cEhhbmRsZXJPcHRzOiBOb2RlSHR0cEhhbmRsZXJPcHRpb25zID0ge31cbiAgaWYgKHNzbEVuYWJsZWQpIHtcbiAgICBodHRwSGFuZGxlck9wdHMuaHR0cHNBZ2VudCA9IGdldFByb3h5QWdlbnQob3B0cy5wcm94eSwgdHJ1ZSwgb3B0cy5yZWplY3RVbmF1dGhvcml6ZWQgPz8gZmFsc2UpIGFzIEh0dHBzUHJveHlBZ2VudFxuICB9IGVsc2Uge1xuICAgIGh0dHBIYW5kbGVyT3B0cy5odHRwQWdlbnQgPSBnZXRQcm94eUFnZW50KG9wdHMucHJveHksIGZhbHNlLCBvcHRzLnJlamVjdFVuYXV0aG9yaXplZCA/PyBmYWxzZSkgYXMgSHR0cFByb3h5QWdlbnRcbiAgfVxuXG4gIGNvbnN0IGNsaWVudE9wdGlvbnM6IFMzQ2xpZW50Q29uZmlnID0ge1xuICAgIHJlZ2lvbjogb3B0cy5yZWdpb24gfHwgJ2F1dG8nLFxuICAgIGVuZHBvaW50OiBvcHRzLmVuZHBvaW50IHx8IHVuZGVmaW5lZCxcbiAgICBjcmVkZW50aWFsczoge1xuICAgICAgYWNjZXNzS2V5SWQ6IG9wdHMuYWNjZXNzS2V5SUQsXG4gICAgICBzZWNyZXRBY2Nlc3NLZXk6IG9wdHMuc2VjcmV0QWNjZXNzS2V5XG4gICAgfSxcbiAgICB0bHM6IHNzbEVuYWJsZWQsXG4gICAgZm9yY2VQYXRoU3R5bGU6IG9wdHMucGF0aFN0eWxlQWNjZXNzLFxuICAgIHJlcXVlc3RIYW5kbGVyOiBuZXcgTm9kZUh0dHBIYW5kbGVyKGh0dHBIYW5kbGVyT3B0cylcbiAgfVxuXG4gIGNvbnN0IGNsaWVudCA9IG5ldyBTM0NsaWVudChjbGllbnRPcHRpb25zKVxuICByZXR1cm4gY2xpZW50XG59XG5cbmludGVyZmFjZSBJQ3JlYXRlVXBsb2FkVGFza09wdHMge1xuICBjbGllbnQ6IGFueVxuICBidWNrZXROYW1lOiBzdHJpbmdcbiAgcGF0aDogc3RyaW5nXG4gIGl0ZW06IElJbWdJbmZvXG4gIGluZGV4OiBudW1iZXJcbiAgYWNsOiBzdHJpbmdcbiAgdXJsUHJlZml4Pzogc3RyaW5nXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVVwbG9hZFRhc2sob3B0czogSUNyZWF0ZVVwbG9hZFRhc2tPcHRzKTogUHJvbWlzZTxJVXBsb2FkUmVzdWx0PiB7XG4gIGlmICghb3B0cy5pdGVtLmJ1ZmZlciAmJiAhb3B0cy5pdGVtLmJhc2U2NEltYWdlKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcigndW5kZWZpbmVkIGltYWdlJykpXG4gIH1cblxuICBsZXQgYm9keTogQnVmZmVyIHwgdW5kZWZpbmVkXG4gIGxldCBjb250ZW50VHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIGxldCBjb250ZW50RW5jb2Rpbmc6IHN0cmluZyB8IHVuZGVmaW5lZFxuXG4gIHRyeSB7XG4gICAgOyh7IGJvZHksIGNvbnRlbnRUeXBlLCBjb250ZW50RW5jb2RpbmcgfSA9IGF3YWl0IGV4dHJhY3RJbmZvKG9wdHMuaXRlbSkpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnIpXG4gIH1cblxuICBjb25zdCBjb21tYW5kID0gbmV3IFB1dE9iamVjdENvbW1hbmQoe1xuICAgIEJ1Y2tldDogb3B0cy5idWNrZXROYW1lLFxuICAgIEtleTogb3B0cy5wYXRoLFxuICAgIEFDTDogb3B0cy5hY2wsXG4gICAgQm9keTogYm9keSxcbiAgICBDb250ZW50VHlwZTogY29udGVudFR5cGUsXG4gICAgQ29udGVudEVuY29kaW5nOiBjb250ZW50RW5jb2RpbmdcbiAgfSlcblxuICBsZXQgb3V0cHV0OiBQdXRPYmplY3RDb21tYW5kT3V0cHV0XG4gIHRyeSB7XG4gICAgb3V0cHV0ID0gYXdhaXQgb3B0cy5jbGllbnQuc2VuZChjb21tYW5kKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKVxuICB9XG5cbiAgbGV0IHVybDogc3RyaW5nXG4gIGlmICghb3B0cy51cmxQcmVmaXgpIHtcbiAgICB0cnkge1xuICAgICAgdXJsID0gYXdhaXQgZ2V0RmlsZVVSTChvcHRzLCBvdXRwdXQuRVRhZyEsIG91dHB1dC5WZXJzaW9uSWQhKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycilcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdXJsID0gYCR7b3B0cy51cmxQcmVmaXh9LyR7b3B0cy5wYXRofWBcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaW5kZXg6IG9wdHMuaW5kZXgsXG4gICAga2V5OiBvcHRzLnBhdGgsXG4gICAgdXJsLFxuICAgIGltZ1VSTDogdXJsLFxuICAgIHZlcnNpb25JZDogb3V0cHV0LlZlcnNpb25JZCxcbiAgICBlVGFnOiBvdXRwdXQuRVRhZ1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEZpbGVVUkwob3B0czogSUNyZWF0ZVVwbG9hZFRhc2tPcHRzLCBlVGFnOiBzdHJpbmcsIHZlcnNpb25JZDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBzaWduZWRVcmwgPSBhd2FpdCBnZXRTaWduZWRVcmwoXG4gICAgICBvcHRzLmNsaWVudCxcbiAgICAgIG5ldyBHZXRPYmplY3RDb21tYW5kKHtcbiAgICAgICAgQnVja2V0OiBvcHRzLmJ1Y2tldE5hbWUsXG4gICAgICAgIEtleTogb3B0cy5wYXRoLFxuICAgICAgICBJZk1hdGNoOiBlVGFnLFxuICAgICAgICBWZXJzaW9uSWQ6IHZlcnNpb25JZFxuICAgICAgfSksXG4gICAgICB7IGV4cGlyZXNJbjogMzYwMCB9XG4gICAgKVxuICAgIGNvbnN0IHVybE9iamVjdCA9IG5ldyB1cmwuVVJMKHNpZ25lZFVybClcbiAgICB1cmxPYmplY3Quc2VhcmNoID0gJydcbiAgICByZXR1cm4gdXJsT2JqZWN0LmhyZWZcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycilcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNyZWF0ZVMzQ2xpZW50LFxuICBjcmVhdGVVcGxvYWRUYXNrLFxuICBnZXRGaWxlVVJMXG59XG4iLCJpbXBvcnQgdXBsb2FkZXIsIHsgSVVwbG9hZFJlc3VsdCB9IGZyb20gJy4vczMvdXBsb2FkZXInXG5cbmltcG9ydCB7IGZvcm1hdFBhdGggfSBmcm9tICcuL3MzL3V0aWxzJ1xuaW1wb3J0IHsgSUF3c1MzUExpc3RVc2VyQ29uZmlnLCBJUGljR28sIElQbHVnaW5Db25maWcgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcblxuZnVuY3Rpb24gZm9ybWF0RGlzYWJsZUJ1Y2tldFByZWZpeFRvVVJMKGRpc2FibGVCdWNrZXRQcmVmaXhUb1VSTDogc3RyaW5nIHwgYm9vbGVhbiB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICBpZiAodHlwZW9mIGRpc2FibGVCdWNrZXRQcmVmaXhUb1VSTCA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZGlzYWJsZUJ1Y2tldFByZWZpeFRvVVJMLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJ1xuICB9XG4gIHJldHVybiBCb29sZWFuKGRpc2FibGVCdWNrZXRQcmVmaXhUb1VSTClcbn1cblxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcbiAgY29uc3QgdXNlckNvbmZpZzogSUF3c1MzUExpc3RVc2VyQ29uZmlnID0gY3R4LmdldENvbmZpZygncGljQmVkLmF3cy1zMy1wbGlzdCcpXG4gIGlmICghdXNlckNvbmZpZykge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNhbid0IGZpbmQgYW1hem9uIHMzIHVwbG9hZGVyIGNvbmZpZ1wiKVxuICB9XG4gIGNvbnN0IGRpc2FibGVCdWNrZXRQcmVmaXhUb1VSTCA9IGZvcm1hdERpc2FibGVCdWNrZXRQcmVmaXhUb1VSTCh1c2VyQ29uZmlnLmRpc2FibGVCdWNrZXRQcmVmaXhUb1VSTClcbiAgbGV0IHVybFByZWZpeCA9IHVzZXJDb25maWcudXJsUHJlZml4XG4gIGlmICh1cmxQcmVmaXgpIHtcbiAgICB1cmxQcmVmaXggPSB1cmxQcmVmaXgucmVwbGFjZSgvXFwvPyQvLCAnJylcbiAgICBpZiAodXNlckNvbmZpZy5wYXRoU3R5bGVBY2Nlc3MgJiYgIWRpc2FibGVCdWNrZXRQcmVmaXhUb1VSTCkge1xuICAgICAgdXJsUHJlZml4ICs9ICcvJyArIHVzZXJDb25maWcuYnVja2V0TmFtZVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGNsaWVudCA9IHVwbG9hZGVyLmNyZWF0ZVMzQ2xpZW50KHVzZXJDb25maWcpXG4gIGNvbnN0IG91dHB1dCA9IGN0eC5vdXRwdXRcblxuICBjb25zdCB0YXNrcyA9IG91dHB1dC5tYXAoYXN5bmMgKGl0ZW0sIGlkeCkgPT5cbiAgICB1cGxvYWRlci5jcmVhdGVVcGxvYWRUYXNrKHtcbiAgICAgIGNsaWVudCxcbiAgICAgIGluZGV4OiBpZHgsXG4gICAgICBidWNrZXROYW1lOiB1c2VyQ29uZmlnLmJ1Y2tldE5hbWUsXG4gICAgICBwYXRoOiBmb3JtYXRQYXRoKGl0ZW0sIHVzZXJDb25maWcudXBsb2FkUGF0aCksXG4gICAgICBpdGVtLFxuICAgICAgYWNsOiB1c2VyQ29uZmlnLmFjbCB8fCAncHVibGljLXJlYWQnLFxuICAgICAgdXJsUHJlZml4XG4gICAgfSlcbiAgKVxuXG4gIGxldCByZXN1bHRzOiBJVXBsb2FkUmVzdWx0W11cblxuICB0cnkge1xuICAgIHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbCh0YXNrcylcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICBjdHgubG9nLmVycm9yKCfkuIrkvKDliLAgUzMg5a2Y5YKo5Y+R55Sf6ZSZ6K+v77yM6K+35qOA5p+l572R57uc6L+e5o6l5ZKM6YWN572u5piv5ZCm5q2j56GuJylcbiAgICBjdHgubG9nLmVycm9yKGVycilcbiAgICBjdHguZW1pdCgnbm90aWZpY2F0aW9uJywge1xuICAgICAgdGl0bGU6ICdTMyDlrZjlgqjkuIrkvKDplJnor68nLFxuICAgICAgYm9keTogJ+ivt+ajgOafpemFjee9ruaYr+WQpuato+ehricsXG4gICAgICB0ZXh0OiAnJ1xuICAgIH0pXG4gICAgdGhyb3cgZXJyXG4gIH1cblxuICBmb3IgKGNvbnN0IHJlc3VsdCBvZiByZXN1bHRzKSB7XG4gICAgY29uc3QgeyBpbmRleCwgdXJsLCBpbWdVUkwgfSA9IHJlc3VsdFxuICAgIGRlbGV0ZSBvdXRwdXRbaW5kZXhdLmJ1ZmZlclxuICAgIGRlbGV0ZSBvdXRwdXRbaW5kZXhdLmJhc2U2NEltYWdlXG4gICAgb3V0cHV0W2luZGV4XS5pbWdVcmwgPSBpbWdVUkxcbiAgICBvdXRwdXRbaW5kZXhdLnVybCA9IHVybFxuICB9XG5cbiAgcmV0dXJuIGN0eFxufVxuXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xuICBjb25zdCBkZWZhdWx0Q29uZmlnOiBJQXdzUzNQTGlzdFVzZXJDb25maWcgPSB7XG4gICAgYWNjZXNzS2V5SUQ6ICcnLFxuICAgIHNlY3JldEFjY2Vzc0tleTogJycsXG4gICAgYnVja2V0TmFtZTogJycsXG4gICAgdXBsb2FkUGF0aDogJ3t5ZWFyfS97bW9udGh9L3ttZDV9LntleHROYW1lfScsXG4gICAgcGF0aFN0eWxlQWNjZXNzOiBmYWxzZSxcbiAgICByZWplY3RVbmF1dGhvcml6ZWQ6IGZhbHNlLFxuICAgIGFjbDogJ3B1YmxpYy1yZWFkJ1xuICB9XG4gIGxldCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJQXdzUzNQTGlzdFVzZXJDb25maWc+KCdwaWNCZWQuYXdzLXMzLXBsaXN0JykgfHwge31cbiAgdXNlckNvbmZpZyA9IHsgLi4uZGVmYXVsdENvbmZpZywgLi4udXNlckNvbmZpZyB9XG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICdhY2Nlc3NLZXlJRCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hY2Nlc3NLZXlJRCxcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX0FDQ0VTU0tFWUlEJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9BQ0NFU1NLRVlJRCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0FDQ0VTU0tFWUlEJylcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdzZWNyZXRBY2Nlc3NLZXknLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuc2VjcmV0QWNjZXNzS2V5LFxuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfU0VDUkVUX0FDQ0VTU0tFWScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfU0VDUkVUX0FDQ0VTU0tFWScpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1NFQ1JFVF9BQ0NFU1NLRVknKVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2J1Y2tldE5hbWUnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYnVja2V0TmFtZSxcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX0JVQ0tFVCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfQlVDS0VUJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfQlVDS0VUJylcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICd1cGxvYWRQYXRoJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnVwbG9hZFBhdGgsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9VUExPQURQQVRIJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9VUExPQURQQVRIJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfVVBMT0FEUEFUSCcpXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAncmVnaW9uJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnJlZ2lvbixcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9SRUdJT04nKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX1JFR0lPTicpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1JFR0lPTicpXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnZW5kcG9pbnQnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuZW5kcG9pbnQsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfRU5EUE9JTlQnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX0VORFBPSU5UJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfRU5EUE9JTlQnKVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3Byb3h5JyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnByb3h5LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX1BST1hZJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9QUk9YWScpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1BST1hZJylcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICd1cmxQcmVmaXgnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcudXJsUHJlZml4LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX1VSTFBSRUZJWCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfVVJMUFJFRklYJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfVVJMUFJFRklYJylcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdwYXRoU3R5bGVBY2Nlc3MnLFxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXRoU3R5bGVBY2Nlc3MgfHwgZmFsc2UsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfUEFUSFNUWUxFQUNDRVNTJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9QQVRIU1RZTEVBQ0NFU1MnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9QQVRIU1RZTEVBQ0NFU1MnKVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3JlamVjdFVuYXV0aG9yaXplZCcsXG4gICAgICB0eXBlOiAnY29uZmlybScsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnJlamVjdFVuYXV0aG9yaXplZCB8fCBmYWxzZSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9SRUpFQ1RVTkFVVEhPUklaRUQnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX1JFSkVDVFVOQVVUSE9SSVpFRCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1JFSkVDVFVOQVVUSE9SSVpFRCcpXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnYWNsJyxcbiAgICAgIHR5cGU6ICdsaXN0JyxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYWNsIHx8ICdwdWJsaWMtcmVhZCcsXG4gICAgICBjaG9pY2VzOiBbXG4gICAgICAgICdwcml2YXRlJyxcbiAgICAgICAgJ3B1YmxpYy1yZWFkJyxcbiAgICAgICAgJ3B1YmxpYy1yZWFkLXdyaXRlJyxcbiAgICAgICAgJ2F1dGhlbnRpY2F0ZWQtcmVhZCcsXG4gICAgICAgICdhd3MtZXhlYy1yZWFkJyxcbiAgICAgICAgJ2J1Y2tldC1vd25lci1yZWFkJyxcbiAgICAgICAgJ2J1Y2tldC1vd25lci1mdWxsLWNvbnRyb2wnXG4gICAgICBdLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX0FDTCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfQUNMJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfQUNMJylcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdkaXNhYmxlQnVja2V0UHJlZml4VG9VUkwnLFxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgZGVmYXVsdDogZm9ybWF0RGlzYWJsZUJ1Y2tldFByZWZpeFRvVVJMKHVzZXJDb25maWcuZGlzYWJsZUJ1Y2tldFByZWZpeFRvVVJMKSB8fCBmYWxzZSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9ESVNBQkxFQlVDS0VUUFJFRklYVE9VUkwnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX0RJU0FCTEVCVUNLRVRQUkVGSVhUT1VSTCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0RJU0FCTEVCVUNLRVRQUkVGSVhUT1VSTCcpXG4gICAgICB9XG4gICAgfVxuICBdXG4gIHJldHVybiBjb25maWdcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIoY3R4OiBJUGljR28pOiB2b2lkIHtcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcignYXdzLXMzLXBsaXN0Jywge1xuICAgIGdldCBuYW1lKCkge1xuICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUJylcbiAgICB9LFxuICAgIGhhbmRsZSxcbiAgICBjb25maWdcbiAgfSlcbn1cbiIsImltcG9ydCB7IElQaWNHbywgSVBpY0dvUGx1Z2luIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5pbXBvcnQgc21tc1VwbG9hZGVyIGZyb20gJy4vc21tcydcbmltcG9ydCB0Y1l1blVwbG9hZGVyIGZyb20gJy4vdGN5dW4nXG5pbXBvcnQgZ2l0aHViVXBsb2FkZXIgZnJvbSAnLi9naXRodWInXG5pbXBvcnQgcWluaXVVcGxvYWRlciBmcm9tICcuL3Fpbml1J1xuaW1wb3J0IGltZ3VyVXBsb2FkZXIgZnJvbSAnLi9pbWd1cidcbmltcG9ydCBhbGlZdW5VcGxvYWRlciBmcm9tICcuL2FsaXl1bidcbmltcG9ydCB1cFl1blVwbG9hZGVyIGZyb20gJy4vdXB5dW4nXG5pbXBvcnQgd2ViZGF2cGxpc3RVcGxvYWRlciBmcm9tICcuL3dlYmRhdidcbmltcG9ydCBsb2NhbFVwbG9hZGVyIGZyb20gJy4vbG9jYWwnXG5pbXBvcnQgc2Z0cFVwbG9hZGVyIGZyb20gJy4vc2Z0cCdcbmltcG9ydCB0ZWxlZ3JhcGhVcGxvYWRlciBmcm9tICcuL3RlbGVncmFwaCdcbmltcG9ydCBwaWNsaXN0VXBsb2FkZXIgZnJvbSAnLi9waWNsaXN0J1xuaW1wb3J0IGxza3lVcGxvYWRlciBmcm9tICcuL2xza3knXG5pbXBvcnQgYXdzczNwbGlzdFVwbG9hZGVyIGZyb20gJy4vYXdzczNwbGlzdCdcblxuY29uc3QgYnVpbGRJblVwbG9hZGVyczogSVBpY0dvUGx1Z2luID0gKCkgPT4ge1xuICByZXR1cm4ge1xuICAgIHJlZ2lzdGVyKGN0eDogSVBpY0dvKSB7XG4gICAgICBhbGlZdW5VcGxvYWRlcihjdHgpXG4gICAgICBhd3NzM3BsaXN0VXBsb2FkZXIoY3R4KVxuICAgICAgZ2l0aHViVXBsb2FkZXIoY3R4KVxuICAgICAgaW1ndXJVcGxvYWRlcihjdHgpXG4gICAgICBsb2NhbFVwbG9hZGVyKGN0eClcbiAgICAgIGxza3lVcGxvYWRlcihjdHgpXG4gICAgICBwaWNsaXN0VXBsb2FkZXIoY3R4KVxuICAgICAgcWluaXVVcGxvYWRlcihjdHgpXG4gICAgICBzZnRwVXBsb2FkZXIoY3R4KVxuICAgICAgc21tc1VwbG9hZGVyKGN0eClcbiAgICAgIHRjWXVuVXBsb2FkZXIoY3R4KVxuICAgICAgdGVsZWdyYXBoVXBsb2FkZXIoY3R4KVxuICAgICAgdXBZdW5VcGxvYWRlcihjdHgpXG4gICAgICB3ZWJkYXZwbGlzdFVwbG9hZGVyKGN0eClcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgYnVpbGRJblVwbG9hZGVyc1xuIiwiaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJ1xuXG5pbXBvcnQgeyBpc1VybCwgZ2V0SW1hZ2VTaXplLCBnZXRGU0ZpbGUsIGdldFVSTEZpbGUgfSBmcm9tICcuLi8uLi91dGlscy9jb21tb24nXG5pbXBvcnQgeyBJUGljR28sIElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvLCBJSW1nSW5mbywgSUltZ1NpemUgfSBmcm9tICcuLi8uLi90eXBlcydcblxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcbiAgY29uc3QgcmVzdWx0czogSUltZ0luZm9bXSA9IGN0eC5vdXRwdXRcbiAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgY3R4LmlucHV0Lm1hcChhc3luYyAoaXRlbTogc3RyaW5nIHwgQnVmZmVyLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBsZXQgaW5mbzogSVBhdGhUcmFuc2Zvcm1lZEltZ0luZm9cbiAgICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoaXRlbSkpIHtcbiAgICAgICAgaW5mbyA9IHtcbiAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgIGJ1ZmZlcjogaXRlbSxcbiAgICAgICAgICBmaWxlTmFtZTogJycsXG4gICAgICAgICAgZXh0bmFtZTogJydcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc1VybChpdGVtKSkge1xuICAgICAgICBpbmZvID0gYXdhaXQgZ2V0VVJMRmlsZShpdGVtLCBjdHgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbmZvID0gYXdhaXQgZ2V0RlNGaWxlKGl0ZW0pXG4gICAgICB9XG4gICAgICBpZiAoaW5mby5zdWNjZXNzICYmIGluZm8uYnVmZmVyKSB7XG4gICAgICAgIGNvbnN0IGltZ1NpemUgPSBnZXRJbWdTaXplKGN0eCwgaW5mby5idWZmZXIsIGl0ZW0pXG4gICAgICAgIGNvbnN0IGV4dG5hbWUgPSBpbmZvLmV4dG5hbWUgfHwgaW1nU2l6ZS5leHRuYW1lIHx8ICcucG5nJ1xuICAgICAgICByZXN1bHRzW2luZGV4XSA9IHtcbiAgICAgICAgICBidWZmZXI6IGluZm8uYnVmZmVyLFxuICAgICAgICAgIGZpbGVOYW1lOiBpbmZvLmZpbGVOYW1lIHx8IGAke2RheWpzKCkuZm9ybWF0KCdZWVlZTU1EREhIbW1zcycpfSR7ZXh0bmFtZX1gLFxuICAgICAgICAgIHdpZHRoOiBpbWdTaXplLndpZHRoLFxuICAgICAgICAgIGhlaWdodDogaW1nU2l6ZS5oZWlnaHQsXG4gICAgICAgICAgZXh0bmFtZTogaW5mby5leHRuYW1lXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN0eC5sb2cuZXJyb3IoaW5mby5yZWFzb24pXG4gICAgICB9XG4gICAgfSlcbiAgKVxuICAvLyByZW1vdmUgZW1wdHkgaXRlbVxuICBjdHgub3V0cHV0ID0gcmVzdWx0cy5maWx0ZXIoaXRlbSA9PiBpdGVtKVxuICByZXR1cm4gY3R4XG59XG5cbmNvbnN0IGdldEltZ1NpemUgPSAoY3R4OiBJUGljR28sIGZpbGU6IEJ1ZmZlciwgcGF0aDogc3RyaW5nIHwgQnVmZmVyKTogSUltZ1NpemUgPT4ge1xuICBjb25zdCBpbWFnZVNpemUgPSBnZXRJbWFnZVNpemUoZmlsZSlcbiAgaWYgKCFpbWFnZVNpemUucmVhbCkge1xuICAgIGlmICh0eXBlb2YgcGF0aCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGN0eC5sb2cud2FybihgY2FuJ3QgZ2V0ICR7cGF0aH0ncyBpbWFnZSBzaXplYClcbiAgICB9IGVsc2Uge1xuICAgICAgY3R4LmxvZy53YXJuKFwiY2FuJ3QgZ2V0IGltYWdlIHNpemVcIilcbiAgICB9XG4gICAgY3R4LmxvZy53YXJuKCdmYWxsYmFjayB0byAyMDAgKiAyMDAnKVxuICB9XG4gIHJldHVybiBpbWFnZVNpemVcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBoYW5kbGVcbn1cbiIsImltcG9ydCB7IElQaWNHbyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xuICBjdHgub3V0cHV0LnB1c2goLi4uY3R4LmlucHV0KVxuICByZXR1cm4gY3R4XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaGFuZGxlXG59XG4iLCJleHBvcnQgY29uc3QgQ0xJUEJPQVJEX0lNQUdFX0ZPTERFUiA9ICdwaWNsaXN0LWNsaXBib2FyZC1pbWFnZXMnXG4iLCJpbXBvcnQgeyBzcGF3biB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnXG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnXG5pbXBvcnQgZnMsIHsgZW5zdXJlRGlyU3luYyB9IGZyb20gJ2ZzLWV4dHJhJ1xuaW1wb3J0IGlzV3NsIGZyb20gJ2lzLXdzbCdcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5pbXBvcnQgb3MgZnJvbSAnb3MnXG5cbmltcG9ydCBtYWNDbGlwYm9hcmRTY3JpcHQgZnJvbSAnLi9jbGlwYm9hcmQvbWFjLmFwcGxlc2NyaXB0J1xuaW1wb3J0IHdpbmRvd3NDbGlwYm9hcmRTY3JpcHQgZnJvbSAnLi9jbGlwYm9hcmQvd2luZG93cy5wczEnXG5pbXBvcnQgd2luZG93czEwQ2xpcGJvYXJkU2NyaXB0IGZyb20gJy4vY2xpcGJvYXJkL3dpbmRvd3MxMC5wczEnXG5pbXBvcnQgbGludXhDbGlwYm9hcmRTY3JpcHQgZnJvbSAnLi9jbGlwYm9hcmQvbGludXguc2gnXG5pbXBvcnQgd3NsQ2xpcGJvYXJkU2NyaXB0IGZyb20gJy4vY2xpcGJvYXJkL3dzbC5zaCdcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuL2VudW0nXG5pbXBvcnQgeyBJUGljR28sIElDbGlwYm9hcmRJbWFnZSB9IGZyb20gJy4uL3R5cGVzJ1xuaW1wb3J0IHsgQ0xJUEJPQVJEX0lNQUdFX0ZPTERFUiB9IGZyb20gJy4vc3RhdGljJ1xuXG5leHBvcnQgdHlwZSBQbGF0Zm9ybSA9ICdkYXJ3aW4nIHwgJ3dpbjMyJyB8ICd3aW4xMCcgfCAnbGludXgnIHwgJ3dzbCdcblxuY29uc3QgZ2V0Q3VycmVudFBsYXRmb3JtID0gKCk6IFBsYXRmb3JtID0+IHtcbiAgY29uc3QgcGxhdGZvcm0gPSBwcm9jZXNzLnBsYXRmb3JtXG4gIGlmIChpc1dzbCkgcmV0dXJuICd3c2wnXG4gIGlmIChwbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgIHJldHVybiBvcy5yZWxlYXNlKCkuc3BsaXQoJy4nKVswXSA9PT0gJzEwJyA/ICd3aW4xMCcgOiAnd2luMzInXG4gIH0gZWxzZSBpZiAocGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XG4gICAgcmV0dXJuICdkYXJ3aW4nXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuICdsaW51eCdcbiAgfVxufVxuXG5jb25zdCBwbGF0Zm9ybTJTY3JpcHRDb250ZW50OiB7XG4gIFtrZXkgaW4gUGxhdGZvcm1dOiBzdHJpbmdcbn0gPSB7XG4gIGRhcndpbjogbWFjQ2xpcGJvYXJkU2NyaXB0LFxuICB3aW4zMjogd2luZG93c0NsaXBib2FyZFNjcmlwdCxcbiAgd2luMTA6IHdpbmRvd3MxMENsaXBib2FyZFNjcmlwdCxcbiAgbGludXg6IGxpbnV4Q2xpcGJvYXJkU2NyaXB0LFxuICB3c2w6IHdzbENsaXBib2FyZFNjcmlwdFxufVxuXG4vKipcbiAqIHBvd2Vyc2hlbGwgd2lsbCByZXBvcnQgZXJyb3IgaWYgZmlsZSBkb2VzIG5vdCBoYXZlIGEgJy5wczEnIGV4dGVuc2lvbixcbiAqIHNvIHdlIHNob3VsZCBrZWVwIHRoZSBleHRlbnNpb24gbmFtZSBjb25zaXN0ZW50IHdpdGggY29ycmVzcG9uZGluZyBzaGVsbFxuICovXG5jb25zdCBwbGF0Zm9ybTJTY3JpcHRGaWxlbmFtZToge1xuICBba2V5IGluIFBsYXRmb3JtXTogc3RyaW5nXG59ID0ge1xuICBkYXJ3aW46ICdtYWMuYXBwbGVzY3JpcHQnLFxuICB3aW4zMjogJ3dpbmRvd3MucHMxJyxcbiAgd2luMTA6ICd3aW5kb3dzMTAucHMxJyxcbiAgbGludXg6ICdsaW51eC5zaCcsXG4gIHdzbDogJ3dzbC5zaCdcbn1cblxuZnVuY3Rpb24gY3JlYXRlSW1hZ2VGb2xkZXIoY3R4OiBJUGljR28pOiB2b2lkIHtcbiAgY29uc3QgaW1hZ2VQYXRoID0gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCBDTElQQk9BUkRfSU1BR0VfRk9MREVSKVxuICBlbnN1cmVEaXJTeW5jKGltYWdlUGF0aClcbn1cblxuLy8gVGhhbmtzIHRvIHZzLXBpY2dvOiBodHRwczovL2dpdGh1Yi5jb20vU3BhZGVzLVMvdnMtcGljZ28vYmxvYi9tYXN0ZXIvc3JjL2V4dGVuc2lvbi50c1xuY29uc3QgZ2V0Q2xpcGJvYXJkSW1hZ2UgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElDbGlwYm9hcmRJbWFnZT4gPT4ge1xuICBjcmVhdGVJbWFnZUZvbGRlcihjdHgpXG4gIC8vIGFkZCBhbiBjbGlwYm9hcmQgaW1hZ2UgZm9sZGVyIHRvIGNvbnRyb2wgdGhlIGltYWdlIGNhY2hlIGZpbGVcbiAgY29uc3QgaW1hZ2VQYXRoID0gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCBDTElQQk9BUkRfSU1BR0VfRk9MREVSLCBgJHtkYXlqcygpLmZvcm1hdCgnWVlZWU1NRERISG1tc3MnKX0ucG5nYClcbiAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlPElDbGlwYm9hcmRJbWFnZT4oKHJlc29sdmU6IGFueSwgcmVqZWN0OiBhbnkpOiB2b2lkID0+IHtcbiAgICBjb25zdCBwbGF0Zm9ybSA9IGdldEN1cnJlbnRQbGF0Zm9ybSgpXG4gICAgY29uc3Qgc2NyaXB0UGF0aCA9IHBhdGguam9pbihjdHguYmFzZURpciwgcGxhdGZvcm0yU2NyaXB0RmlsZW5hbWVbcGxhdGZvcm1dKVxuICAgIC8vIElmIHRoZSBzY3JpcHQgZG9lcyBub3QgZXhpc3QgeWV0LCB3ZSBuZWVkIHRvIHdyaXRlIHRoZSBjb250ZW50IHRvIHRoZSBzY3JpcHQgZmlsZVxuICAgIGlmICghZnMuZXhpc3RzU3luYyhzY3JpcHRQYXRoKSkge1xuICAgICAgZnMud3JpdGVGaWxlU3luYyhzY3JpcHRQYXRoLCBwbGF0Zm9ybTJTY3JpcHRDb250ZW50W3BsYXRmb3JtXSwgJ3V0ZjgnKVxuICAgIH1cbiAgICBsZXQgZXhlY3V0aW9uXG4gICAgaWYgKHBsYXRmb3JtID09PSAnZGFyd2luJykge1xuICAgICAgZXhlY3V0aW9uID0gc3Bhd24oJ29zYXNjcmlwdCcsIFtzY3JpcHRQYXRoLCBpbWFnZVBhdGhdKVxuICAgIH0gZWxzZSBpZiAocGxhdGZvcm0gPT09ICd3aW4zMicgfHwgcGxhdGZvcm0gPT09ICd3aW4xMCcpIHtcbiAgICAgIGV4ZWN1dGlvbiA9IHNwYXduKCdwb3dlcnNoZWxsJywgW1xuICAgICAgICAnLW5vcHJvZmlsZScsXG4gICAgICAgICctbm9uaW50ZXJhY3RpdmUnLFxuICAgICAgICAnLW5vbG9nbycsXG4gICAgICAgICctc3RhJyxcbiAgICAgICAgJy1leGVjdXRpb25wb2xpY3knLFxuICAgICAgICAndW5yZXN0cmljdGVkJyxcbiAgICAgICAgLy8gZml4IHdpbmRvd3MgMTAgbmF0aXZlIGNtZCBjcmFzaCBidWcgd2hlbiBcInBpY2dvIHVwbG9hZFwiXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9QaWNHby9QaWNHby1Db3JlL2lzc3Vlcy8zMlxuICAgICAgICAvLyAnLXdpbmRvd3N0eWxlJywnaGlkZGVuJyxcbiAgICAgICAgLy8gJy1ub2V4aXQnLFxuICAgICAgICAnLWZpbGUnLFxuICAgICAgICBzY3JpcHRQYXRoLFxuICAgICAgICBpbWFnZVBhdGhcbiAgICAgIF0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGV4ZWN1dGlvbiA9IHNwYXduKCdzaCcsIFtzY3JpcHRQYXRoLCBpbWFnZVBhdGhdKVxuICAgIH1cblxuICAgIGV4ZWN1dGlvbi5zdGRvdXQub24oJ2RhdGEnLCAoZGF0YTogQnVmZmVyKSA9PiB7XG4gICAgICBpZiAocGxhdGZvcm0gPT09ICdsaW51eCcpIHtcbiAgICAgICAgaWYgKGRhdGEudG9TdHJpbmcoKS50cmltKCkgPT09ICdubyB4Y2xpcCBvciB3bC1jbGlwYm9hcmQnKSB7XG4gICAgICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcbiAgICAgICAgICAgIHRpdGxlOiAneGNsaXAgb3Igd2wtY2xpcGJvYXJkIG5vdCBmb3VuZCcsXG4gICAgICAgICAgICBib2R5OiAnUGxlYXNlIGluc3RhbGwgeGNsaXAoZm9yIHgxMSkgb3Igd2wtY2xpcGJvYXJkKGZvciB3YXlsYW5kKSBiZWZvcmUgcnVuIHBpY2dvJ1xuICAgICAgICAgIH0pXG4gICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoJ1BsZWFzZSBpbnN0YWxsIHhjbGlwKGZvciB4MTEpIG9yIHdsLWNsaXBib2FyZChmb3Igd2F5bGFuZCkgYmVmb3JlIHJ1biBwaWNnbycpKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBpbWdQYXRoID0gZGF0YS50b1N0cmluZygpLnRyaW0oKVxuXG4gICAgICAvLyBpZiB0aGUgZmlsZVBhdGggaXMgdGhlIHJlYWwgZmlsZSBpbiBzeXN0ZW1cbiAgICAgIC8vIHdlIHNob3VsZCBrZWVwIGl0IGluc3RlYWQgb2YgcmVtb3ZpbmdcbiAgICAgIGxldCBzaG91bGRLZWVwQWZ0ZXJVcGxvYWRpbmcgPSBmYWxzZVxuXG4gICAgICAvLyBpbiBtYWNPUyBpZiB5b3VyIGNvcHkgdGhlIGZpbGUgaW4gc3lzdGVtLCBpdCdzIGJhc2VuYW1lIHdpbGwgbm90IGVxdWFsIHRvIG91ciBkZWZhdWx0IGJhc2VuYW1lXG4gICAgICBpZiAocGF0aC5iYXNlbmFtZShpbWdQYXRoKSAhPT0gcGF0aC5iYXNlbmFtZShpbWFnZVBhdGgpKSB7XG4gICAgICAgIC8vIGlmIHRoZSBwYXRoIGlzIG5vdCBnZW5lcmF0ZSBieSBwaWNnb1xuICAgICAgICAvLyBidXQgdGhlIHBhdGggZXhpc3RzLCB3ZSBzaG91bGQga2VlcCBpdFxuICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhpbWdQYXRoKSkge1xuICAgICAgICAgIHNob3VsZEtlZXBBZnRlclVwbG9hZGluZyA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gaWYgdGhlIGltZ1BhdGggaXMgaW52YWxpZFxuICAgICAgaWYgKGltZ1BhdGggIT09ICdubyBpbWFnZScgJiYgIWZzLmV4aXN0c1N5bmMoaW1nUGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoYENhbid0IGZpbmQgJHtpbWdQYXRofWApKVxuICAgICAgfVxuXG4gICAgICByZXNvbHZlKHtcbiAgICAgICAgaW1nUGF0aCxcbiAgICAgICAgc2hvdWxkS2VlcEFmdGVyVXBsb2FkaW5nXG4gICAgICB9KVxuICAgIH0pXG4gIH0pXG59XG5cbmV4cG9ydCBkZWZhdWx0IGdldENsaXBib2FyZEltYWdlXG4iLCJpbXBvcnQgeyBJQ29uZmlnLCBJUGljR28gfSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB7IEpTT05TdG9yZSB9IGZyb20gJ0BwaWNnby9zdG9yZSdcbmltcG9ydCB7IElKU09OIH0gZnJvbSAnQHBpY2dvL3N0b3JlL2Rpc3QvdHlwZXMnXG5cbmNsYXNzIERCIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjdHg6IElQaWNHb1xuICBwcml2YXRlIHJlYWRvbmx5IGRiOiBKU09OU3RvcmVcbiAgY29uc3RydWN0b3IoY3R4OiBJUGljR28pIHtcbiAgICB0aGlzLmN0eCA9IGN0eFxuICAgIHRoaXMuZGIgPSBuZXcgSlNPTlN0b3JlKHRoaXMuY3R4LmNvbmZpZ1BhdGgpXG5cbiAgICBpZiAoIXRoaXMuZGIuaGFzKCdwaWNCZWQnKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5kYi5zZXQoJ3BpY0JlZCcsIHtcbiAgICAgICAgICB1cGxvYWRlcjogJ3NtbXMnLFxuICAgICAgICAgIGN1cnJlbnQ6ICdzbW1zJyxcbiAgICAgICAgICBzbW1zOiB7XG4gICAgICAgICAgICB0b2tlbjogJydcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGUpXG4gICAgICAgIHRocm93IGVcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCF0aGlzLmRiLmhhcygncGljZ29QbHVnaW5zJykpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuZGIuc2V0KCdwaWNnb1BsdWdpbnMnLCB7fSlcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZSlcbiAgICAgICAgdGhyb3cgZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJlYWQoZmx1c2g/OiBib29sZWFuKTogSUpTT04ge1xuICAgIHJldHVybiB0aGlzLmRiLnJlYWQoZmx1c2gpXG4gIH1cblxuICBnZXQoa2V5OiBzdHJpbmcgPSAnJyk6IGFueSB7XG4gICAgdGhpcy5yZWFkKHRydWUpXG4gICAgcmV0dXJuIHRoaXMuZGIuZ2V0KGtleSlcbiAgfVxuXG4gIHNldChrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMucmVhZCh0cnVlKVxuICAgIHRoaXMuZGIuc2V0KGtleSwgdmFsdWUpXG4gIH1cblxuICBoYXMoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0aGlzLnJlYWQodHJ1ZSlcbiAgICByZXR1cm4gdGhpcy5kYi5oYXMoa2V5KVxuICB9XG5cbiAgdW5zZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICB0aGlzLnJlYWQodHJ1ZSlcbiAgICByZXR1cm4gdGhpcy5kYi51bnNldChrZXksIHZhbHVlKVxuICB9XG5cbiAgc2F2ZUNvbmZpZyhjb25maWc6IFBhcnRpYWw8SUNvbmZpZz4pOiB2b2lkIHtcbiAgICBPYmplY3Qua2V5cyhjb25maWcpLmZvckVhY2goKG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgdGhpcy5zZXQobmFtZSwgY29uZmlnW25hbWVdKVxuICAgIH0pXG4gIH1cblxuICByZW1vdmVDb25maWcoY29uZmlnOiBJQ29uZmlnKTogdm9pZCB7XG4gICAgT2JqZWN0LmtleXMoY29uZmlnKS5mb3JFYWNoKChuYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIHRoaXMudW5zZXQobmFtZSwgY29uZmlnW25hbWVdKVxuICAgIH0pXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgREJcbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXRlbXBsYXRlLWN1cmx5LWluLXN0cmluZyAqL1xuZXhwb3J0IGNvbnN0IFpIX0NOID0ge1xuICBVUExPQURfRkFJTEVEOiAn5LiK5Lyg5aSx6LSlJyxcbiAgQ0hFQ0tfU0VUVElOR1M6ICfor7fmo4Dmn6XkvaDnmoTphY3nva7pobnmmK/lkKbmraPnoa4nLFxuICBDSEVDS19TRVRUSU5HU19BTkRfTkVUV09SSzogJ+ivt+ajgOafpeS9oOeahOmFjee9rumhueS7peWPiue9kee7nCcsXG4gIFVQTE9BRF9GQUlMRURfUkVBU09OOiAn6ZSZ6K+v56CB77yaJHtjb2Rlfe+8jOivt+aJk+W8gOa1j+iniOWZqOeymOi0tOWcsOWdgOafpeeci+ebuOWFs+WOn+WboCcsXG4gIFNFUlZFUl9FUlJPUjogJ+acjeWKoeerr+WHuumUme+8jOivt+mHjeivlScsXG4gIEFVVEhfRkFJTEVEOiAn6K6k6K+B5aSx6LSlJyxcblxuICAvLyBzbW1zXG4gIFBJQ0JFRF9TTU1TOiAnU00uTVMnLFxuICBQSUNCRURfU01NU19UT0tFTjogJ+iuvuWumlRva2VuJyxcbiAgUElDQkVEX1NNTVNfQkFDS1VQX0RPTUFJTjogJ+Wkh+eUqOS4iuS8oOWfn+WQjScsXG4gIFBJQ0JFRF9TTU1TX01FU1NBR0VfQkFDS1VQX0RPTUFJTjogJ+S+i+WmgiBzbW1zLmFwcCcsXG5cbiAgLy8gbG9jYWxcbiAgUElDQkVEX0xPQ0FMOiAn5pys5Zyw5LiK5LygJyxcbiAgUElDQkVEX0xPQ0FMX1BBVEg6ICforr7lrprot6/lvoQnLFxuICBQSUNCRURfTE9DQUxfTUVTU0FHRV9QQVRIOiAn5L6L5aaCIC91c3IvbG9jYWwvaW1hZ2VzLycsXG4gIFBJQ0JFRF9MT0NBTF9DVVNUT01VUkw6ICforr7lrproh6rlrprkuYnln5/lkI0nLFxuICBQSUNCRURfTE9DQUxfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoIgaHR0cHM6Ly90ZXN0LmNvbScsXG4gIFBJQ0JFRF9MT0NBTF9XRUJQQVRIOiAn6K6+5a6a572R56uZ6Lev5b6EJyxcbiAgUElDQkVEX0xPQ0FMX01FU1NBR0VfV0VCUEFUSDogJ+eUqOS6juaLvOaOpee9keWdgOi3r+W+hCcsXG5cbiAgLy8gQWxpLWNsb3VkXG4gIFBJQ0JFRF9BTElDTE9VRDogJ+mYv+mHjOS6kU9TUycsXG4gIFBJQ0JFRF9BTElDTE9VRF9BQ0NFU1NLRVlJRDogJ+iuvuWummFjY2Vzc0tleUlkJyxcbiAgUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWVNFQ1JFVDogJ+iuvuWummFjY2Vzc0tleVNlY3JldCcsXG4gIFBJQ0JFRF9BTElDTE9VRF9CVUNLRVQ6ICforr7lrppCdWNrZXQnLFxuICBQSUNCRURfQUxJQ0xPVURfQVJFQTogJ+iuvuWumuWtmOWCqOWMuuWfnycsXG4gIFBJQ0JFRF9BTElDTE9VRF9QQVRIOiAn6K6+5a6a5a2Y5YKo6Lev5b6EJyxcbiAgUElDQkVEX0FMSUNMT1VEX0NVU1RPTVVSTDogJ+iuvuWumuiHquWumuS5ieWfn+WQjScsXG4gIFBJQ0JFRF9BTElDTE9VRF9PUFRJT05TOiAn6K6+5a6a572R5Z2A5ZCO57yAJyxcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQVJFQTogJ+S+i+Wmgu+8mm9zcy1jbi1iZWlqaW5nJyxcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfT1BUSU9OUzogJ+S+i+Wmgu+8mj94LW9zcy1wcm9jZXNzPXh4eCcsXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxuXG4gIC8vIFRlbmNlbnQtY2xvdWRcbiAgUElDQkVEX1RFTkNFTlRDTE9VRDogJ+iFvuiur+S6kUNPUycsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfVkVSU0lPTjogJ0NPU+eJiOacrCcsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUSUQ6ICforr7lrppTZWNyZXRJZCcsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUS0VZOiAn6K6+5a6aU2VjcmV0S2V5JyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9BUFBJRDogJ+iuvuWumkFwcElkJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9CVUNLRVQ6ICforr7lrppCdWNrZXQnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0FSRUE6ICforr7lrprlrZjlgqjljLrln58nLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0VORFBPSU5UOiAn6K6+5a6a5o6l5YWl54K5JyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9QQVRIOiAn6K6+5a6a5a2Y5YKo6Lev5b6EJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9PUFRJT05TOiAn6K6+5a6a572R5Z2A5ZCO57yAJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9DVVNUT01VUkw6ICforr7lrproh6rlrprkuYnln5/lkI0nLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQVBQSUQ6ICfkvovlpoLvvJoxMjM0NTY3ODkwJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FSRUE6ICfkvovlpoLvvJphcC1iZWlqaW5nJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoLvvJpodHRwczovL3Rlc3QuY29tJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJo/aW1hZ2VNb2dyMicsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9FTkRQT0lOVDogJ+S+i+Wmgu+8mmNvcy1pbnRlcm5hbC5hY2NlbGVyYXRlLnRlbmNlbnRjb3MuY24nLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU06ICfmnoHmmbrljovnvKknLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fVElQOlxuICAgICflm77niYfmnoHmmbrljovnvKnvvIzor6bmg4Xor7flj4LogINb5paH5qGj6K+05piOXShodHRwczovL2Nsb3VkLnRlbmNlbnQuY29tL2RvY3VtZW50L3Byb2R1Y3QvNDM2Lzg2NDM4KScsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9DT05GSVJNOiAn5byA5ZCvJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX0NBTkNFTDogJ+WFs+mXrScsXG5cbiAgLy8gR2l0SHViXG4gIFBJQ0JFRF9HSVRIVUI6ICdHaXRIdWInLFxuICBQSUNCRURfR0lUSFVCX1RPS0VOOiAn6K6+5a6aVG9rZW4nLFxuICBQSUNCRURfR0lUSFVCX1JFUE86ICforr7lrprku5PlupPlkI0nLFxuICBQSUNCRURfR0lUSFVCX1BBVEg6ICforr7lrprlrZjlgqjot6/lvoQnLFxuICBQSUNCRURfR0lUSFVCX0JSQU5DSDogJ+iuvuWumuWIhuaUr+WQjScsXG4gIFBJQ0JFRF9HSVRIVUJfQ1VTVE9NVVJMOiAn6K6+5a6a6Ieq5a6a5LmJ5Z+f5ZCNJyxcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX1JFUE86ICfmoLzlvI/vvJp1c2VybmFtZS9yZXBvJyxcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX0JSQU5DSDogJ+S+i+Wmgu+8mm1haW4nLFxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxuXG4gIC8vIHFpbml1XG4gIFBJQ0JFRF9RSU5JVTogJ+S4g+eJm+S6kScsXG4gIFBJQ0JFRF9RSU5JVV9BQ0NFU1NLRVk6ICforr7lrppBY2Nlc3NLZXknLFxuICBQSUNCRURfUUlOSVVfU0VDUkVUS0VZOiAn6K6+5a6aU2VjcmV0S2V5JyxcbiAgUElDQkVEX1FJTklVX0JVQ0tFVDogJ+iuvuWumkJ1Y2tldCcsXG4gIFBJQ0JFRF9RSU5JVV9QQVRIOiAn6K6+5a6a5a2Y5YKo6Lev5b6EJyxcbiAgUElDQkVEX1FJTklVX1VSTDogJ+iuvuWumuiuv+mXrue9keWdgCcsXG4gIFBJQ0JFRF9RSU5JVV9PUFRJT05TOiAn6K6+5a6a572R5Z2A5ZCO57yAJyxcbiAgUElDQkVEX1FJTklVX0FSRUE6ICforr7lrprlrZjlgqjljLrln58nLFxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9BUkVBOiAn5L6L5aaC77yaejAnLFxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9PUFRJT05TOiAn5L6L5aaC77yaP2ltYWdlc2xpbScsXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX1VSTDogJ+S+i+Wmgu+8mmh0dHBzOi8veHh4Lnl5eS5nbGIuY2xvdWRkbi5jb20nLFxuICBQSUNCRURfVEVMRUdSQVBIOiAnVGVsZWdyYXBoJyxcbiAgLy8gaW1ndXJcbiAgUElDQkVEX0lNR1VSOiAnSW1ndXInLFxuICBQSUNCRURfSU1HVVJfQ0xJRU5USUQ6ICforr7lrppDbGllbnRJZCcsXG4gIFBJQ0JFRF9JTUdVUl9VU0VSTkFNRTogJ+iuvuWumueUqOaIt+WQjScsXG4gIFBJQ0JFRF9JTUdVUl9BQ0NFU1NfVE9LRU46ICforr7lrpphY2Nlc3NUb2tlbicsXG4gIFBJQ0JFRF9JTUdVUl9BTEJVTTogJ+iuvuWumuebuOWGjOWQjScsXG4gIFBJQ0JFRF9JTUdVUl9QUk9YWTogJ+iuvuWumuS7o+eQhicsXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX0NMSUVOVElEOiAn5Yy/5ZCN5LiK5Lyg5pe25aGr5YaZJyxcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfVVNFUk5BTUU6ICfpnIDopoHkuIrkvKDliLDotKbmiLfml7bloavlhpknLFxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9BQ0NFU1NfVE9LRU46ICfpnIDopoHkuIrkvKDliLDotKbmiLfml7bloavlhpknLFxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9BTEJVTTogJ+S+i+Wmgu+8mnRlc3QnLFxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9QUk9YWTogJ+S+i+Wmgu+8mmh0dHA6Ly8xMjcuMC4wLjE6MTA4MCcsXG5cbiAgLy8gdXB5dW5cbiAgUElDQkVEX1VQWVVOOiAn5Y+I5ouN5LqRJyxcbiAgUElDQkVEX1VQWVVOX0JVQ0tFVDogJ+iuvuWumkJ1Y2tldCcsXG4gIFBJQ0JFRF9VUFlVTl9PUEVSQVRPUjogJ+iuvuWumuaTjeS9nOWRmCcsXG4gIFBJQ0JFRF9VUFlVTl9QQVNTV09SRDogJ+iuvuWumuaTjeS9nOWRmOWvhueggScsXG4gIFBJQ0JFRF9VUFlVTl9QQVRIOiAn6K6+5a6a5a2Y5YKo6Lev5b6EJyxcbiAgUElDQkVEX1VQWVVOX1VSTDogJ+iuvuWumuWKoOmAn+Wfn+WQjScsXG4gIFBJQ0JFRF9VUFlVTl9PUFRJT05TOiAn6K6+5a6a572R5Z2A5ZCO57yAJyxcbiAgUElDQkVEX1VQWVVOX0VORFBPSU5UOiAn6K6+5a6a6Ieq5a6a5LmJQVBJ5o6l5YWl54K5JyxcbiAgUElDQkVEX1VQWVVOX0FOVElfTEVFQ0hfVE9LRU46ICforr7lrprpmLLnm5fpk75Ub2tlbicsXG4gIFBJQ0JFRF9VUFlVTl9FWFBJUkVfVElNRTogJ+iuvuWumui/h+acn+aXtumXtCjnp5IpJyxcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfT1BFUkFUT1I6ICfkvovlpoLvvJptZScsXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBU1NXT1JEOiAn6L6T5YWl5pON5L2c5ZGY5a+G56CBJyxcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfVVJMOiAn5L6L5aaC77yaaHR0cDovL3h4eC50ZXN0LnVwY2RuLm5ldCcsXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJohaW1nc2xpbScsXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX0VORFBPSU5UOiAn5L6L5aaC77yaaHR0cHM6Ly92MC5hcGkudXB5dW4uY29tJyxcblxuICAvLyB3ZWJkYXZwbGlzdFxuICBQSUNCRURfV0VCREFWUExJU1Q6ICdXZWJEQVYnLFxuICBQSUNCRURfV0VCREFWUExJU1RfSE9TVDogJ+iuvuWumuaOpeWPo+e9keWdgCcsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9TU0xFTkFCTEVEOiAn5ZCv55SoU1NMJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1VTRVJOQU1FOiAn6K6+5a6a55So5oi35ZCNJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1BBU1NXT1JEOiAn6K6+5a6a5a+G56CBJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1BBVEg6ICforr7lrprlrZjlgqjot6/lvoQnLFxuICBQSUNCRURfV0VCREFWUExJU1RfV0VCU0lURV9QQVRIOiAn6K6+5a6a572R5Z2A6Lev5b6EJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0NVU1RPTVVSTDogJ+iuvuWumuiHquWumuS5ieWfn+WQjScsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9BVVRIVFlQRTogJ+iuvuWumuiupOivgeaWueW8jycsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9PUFRJT05TOiAn6K6+5a6a572R5Z2A5ZCO57yAJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfSE9TVDogJ+S+i+Wmgu+8mmh0dHBzOi8vZXhhbXBsZS5jb20vd2ViZGF2JyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfU1NMRU5BQkxFRDogJ+mcgOimgUhUVFBT5pe25ZCv55SoJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfVVNFUk5BTUU6ICfkvovlpoLvvJptZScsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBU1NXT1JEOiAn6L6T5YWl5a+G56CBJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfV0VCU0lURV9QQVRIOiAn5ou85o6l572R5Z2A5pe25L2/55SoJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJo/a2V5PTEyMzQ1NicsXG5cbiAgLy8gc2Z0cHBsaXN0XG4gIFBJQ0JFRF9TRlRQUExJU1Q6ICflhoXnva5TRlRQJyxcbiAgUElDQkVEX1NGVFBQTElTVF9IT1NUOiAn6K6+5a6a5Li75py6JyxcbiAgUElDQkVEX1NGVFBQTElTVF9QT1JUOiAn6K6+5a6a56uv5Y+jJyxcbiAgUElDQkVEX1NGVFBQTElTVF9VU0VSTkFNRTogJ+iuvuWumueUqOaIt+WQjScsXG4gIFBJQ0JFRF9TRlRQUExJU1RfUEFTU1dPUkQ6ICforr7lrprlr4bnoIEnLFxuICBQSUNCRURfU0ZUUFBMSVNUX1BSSVZBVEVLRVk6ICforr7lrprnp4HpkqUnLFxuICBQSUNCRURfU0ZUUFBMSVNUX1BSSVZBVEVLRVlfUEFTU1BIUkFTRTogJ+iuvuWumuengemSpeWvhueggScsXG4gIFBJQ0JFRF9TRlRQUExJU1RfVVBMT0FEUEFUSDogJ+iuvuWumuS4iuS8oOi3r+W+hCcsXG4gIFBJQ0JFRF9TRlRQUExJU1RfQ1VTVE9NVVJMOiAn6K6+5a6a6Ieq5a6a5LmJ5Z+f5ZCNJyxcbiAgUElDQkVEX1NGVFBQTElTVF9XRUJTSVRFX1BBVEg6ICforr7lrprnvZHnq5not6/lvoQnLFxuICBQSUNCRURfU0ZUUFBMSVNUX0ZJTEVfVVNFUjogJ+iuvuWumuaWh+S7tueUqOaItzrnu4QnLFxuICBQSUNCRURfU0ZUUFBMSVNUX0ZJTEVfTU9ERTogJ+iuvuWumuaWh+S7tuadg+mZkCcsXG4gIFBJQ0JFRF9TRlRQUExJU1RfRElSX01PREU6ICforr7lrprmlofku7blpLnmnYPpmZAnLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfSE9TVDogJ+S+i+Wmgu+8mjEuMS4xLjMnLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUE9SVDogJ+m7mOiupDIyJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BSSVZBVEVLRVk6ICfkvovlpoLvvJovVXNlcnMveHh4Ly5zc2gvaWRfcnNhJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BSSVZBVEVLRVlfUEFTU1BIUkFTRTogJ+i+k+WFpeengemSpeWvhueggScsXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9VUExPQURQQVRIOiAn5L6L5aaC77yadGVzdC8nLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9XRUJTSVRFX1BBVEg6ICfmi7zmjqXnvZHlnYDml7bkvb/nlKgnLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRklMRV9VU0VSOiAn5L6L5aaC77yad3d3OmRhdGEnLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRklMRV9NT0RFOiAn5L6L5aaC77yaMDY2NCcsXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9ESVJfTU9ERTogJ+S+i+Wmgu+8mjA3NzUnLFxuXG4gIC8vIFBpY0xpc3RcbiAgUElDQkVEX1BJQ0xJU1Q6ICdQaWNMaXN0JyxcbiAgUElDQkVEX1BJQ0xJU1RfSE9TVDogJ+iuvuWumuS4u+acuicsXG4gIFBJQ0JFRF9QSUNMSVNUX1BPUlQ6ICforr7lrprnq6/lj6MnLFxuICBQSUNCRURfUElDTElTVF9QSUNCRUQ6ICforr7lrprlm77luoonLFxuICBQSUNCRURfUElDTElTVF9DT05GSUdOQU1FOiAn6K6+5a6a6YWN572u5ZCNJyxcbiAgUElDQkVEX1BJQ0xJU1RfS0VZOiAn6K6+5a6a6Ym05p2DS2V5JyxcblxuICAvLyBMc2t5IFByb1xuICBQSUNCRURfTFNLWV9QTElTVDogJ0xza3knLFxuICBQSUNCRURfTFNLWV9WRVJTSU9OOiAn6K6+5a6a54mI5pysJyxcbiAgUElDQkVEX0xTS1lfTUVTU0FHRV9WRVJTSU9OOiAn5L6L5aaCVjEnLFxuICBQSUNCRURfTFNLWV9IT1NUOiAn6K6+5a6a5Li75py6JyxcbiAgUElDQkVEX0xTS1lfTUVTU0FHRV9IT1NUOiAn5L6L5aaC77yaaHR0cHM6Ly9leGFtcGxlLmNvbScsXG4gIFBJQ0JFRF9MU0tZX1RPS0VOOiAn6K6+5a6aVG9rZW4nLFxuICBQSUNCRURfTFNLWV9NRVNTQUdFX1RPS0VOOiAn5L6L5aaC77yaMTIzNDU2Nzg5MCcsXG4gIFBJQ0JFRF9MU0tZX1NUUkFURUdZX0lEOiAn6K6+5a6a562W55WlSUQnLFxuICBQSUNCRURfTFNLWV9NRVNTQUdFX1NUUkFURUdZX0lEOiAn5L6L5aaC77yaMScsXG4gIFBJQ0JFRF9MU0tZX0FMQlVNX0lEOiAn6K6+5a6a55u45YaMSUQnLFxuICBQSUNCRURfTFNLWV9NRVNTQUdFX0FMQlVNX0lEOiAn6YCJ5aGr77yMVjLniYjmnKzpmZDlrponLFxuICBQSUNCRURfTFNLWV9QRVJNSVNTSU9OOiAn6K6+5a6a5p2D6ZmQJyxcbiAgUElDQkVEX0xTS1lfTUVTU0FHRV9QRVJNSVNTSU9OOiAn5L6L5aaC77yacHVibGljJyxcblxuICAvLyBBd3NTM1BsaXN0XG4gIFBJQ0JFRF9BV1NTM1BMSVNUOiAnQVdTIFMzJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfQUNDRVNTS0VZSUQ6ICforr7lrppBY2Nlc3NLZXlJZCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1NFQ1JFVF9BQ0NFU1NLRVk6ICforr7lrppTZWNyZXRBY2Nlc3NLZXknLFxuICBQSUNCRURfQVdTUzNQTElTVF9CVUNLRVQ6ICforr7lrppCdWNrZXQnLFxuICBQSUNCRURfQVdTUzNQTElTVF9SRUdJT046ICforr7lrppSZWdpb24nLFxuICBQSUNCRURfQVdTUzNQTElTVF9VUExPQURQQVRIOiAn6K6+5a6a5LiK5Lyg6Lev5b6EJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfRU5EUE9JTlQ6ICforr7lrproh6rlrprkuYnoioLngrknLFxuICBQSUNCRURfQVdTUzNQTElTVF9QUk9YWTogJ+iuvuWumuS7o+eQhicsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1VSTFBSRUZJWDogJ+iuvuWumuiHquWumuS5ieWfn+WQjScsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1BBVEhTVFlMRUFDQ0VTUzogJ+WQr+eUqHMzRm9yY2VQYXRoU3R5bGUnLFxuICBQSUNCRURfQVdTUzNQTElTVF9SRUpFQ1RVTkFVVEhPUklaRUQ6ICfmi5Lnu53ml6DmlYhUTFPor4Hkuabov57mjqUnLFxuICBQSUNCRURfQVdTUzNQTElTVF9BQ0w6ICforr7lrprkuIrkvKDotYTmupDnmoTorr/pl67nrZbnlaUnLFxuICBQSUNCRURfQVdTUzNQTElTVF9ESVNBQkxFQlVDS0VUUFJFRklYVE9VUkw6ICflvIDlkK8gYHBhdGhTdHlsZUFjY2Vzc2Ag5pe277yM5piv5ZCm6KaB56aB55So5pyA57uI55Sf5oiQVVJM5Lit5re75YqgIGJ1Y2tldCDliY3nvIAnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0FDQ0VTU0tFWUlEOiAn5L6L5aaC77yaQUtJQXh4eHh4eHh4eHh4eHgnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1NFQ1JFVF9BQ0NFU1NLRVk6ICfkvovlpoLvvJp4eHh4eHh4eHh4JyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9CVUNLRVQ6ICfkvovlpoLvvJp0ZXN0JyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9SRUdJT046ICfkvovlpoLvvJp1cy1lYXN0LTEnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1VQTE9BRFBBVEg6ICfkvovlpoLvvJp0ZXN0L3tmdWxsTmFtZX0nLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0VORFBPSU5UOiAn5L6L5aaC77yaaHR0cHM6Ly9zMy51cy1lYXN0LTEuYW1hem9uYXdzLmNvbScsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUFJPWFk6ICfkvovlpoLvvJpodHRwOi8vMTI3LjAuMC4xOjEwODAnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1VSTFBSRUZJWDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1BBVEhTVFlMRUFDQ0VTUzogJ+mcgOimgeaXtuWQr+eUqCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUkVKRUNUVU5BVVRIT1JJWkVEOiAn6ZyA6KaB5pe25ZCv55SoJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9BQ0w6ICfkvovlpoLvvJpwdWJsaWMtcmVhZCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfRElTQUJMRUJVQ0tFVFBSRUZJWFRPVVJMOiAn6ZyA6KaB5pe25ZCv55SoJyxcblxuICBCVUlMRElOX1dBVEVSTUFSS19JU0FERFdBVEVSTUFSSzogJ+aYr+WQpua3u+WKoOawtOWNsCcsXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfSVNBRERXQVRFUk1BUks6ICfpnIDopoHmt7vliqDmsLTljbDml7blkK/nlKgnLFxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktUWVBFOiAn6K6+5a6a5rC05Y2w57G75Z6LJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktUWVBFOiAn6K+36YCJ5oup5rC05Y2w57G75Z6LJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfSVNGVUxMU0NSRUVOV0FURVJNQVJLOiAn5piv5ZCm5YWo5bGP5rC05Y2wJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9JU0ZVTExTQ1JFRU5XQVRFUk1BUks6ICfpnIDopoHlhajlsY/msLTljbDml7blkK/nlKgnLFxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktERUdSRUU6ICforr7lrprmsLTljbDop5LluqYnLFxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0RFR1JFRTogJ+ivt+i+k+WFpeaVsOWtlycsXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFQ6ICforr7lrprmsLTljbDmloflrZcnLFxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1RFWFQ6ICfor7fovpPlhaXmsLTljbDmloflrZcnLFxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhURk9OVFBBVEg6ICforr7lrprmsLTljbDlrZfkvZPmlofku7bot6/lvoQnLFxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRQQVRIOiAn6K+36L6T5YWl5rC05Y2w5a2X5L2T5paH5Lu26Lev5b6EJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVFJBVElPOiAn6K6+5a6a5rC05Y2w55u45a+55LqO5Zu+54mH55qE5q+U5L6LJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UUkFUSU86ICfor7fovpPlhaUwLTHnmoTlsI/mlbAnLFxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktGT05UQ09MT1I6ICforr7lrprmsLTljbDlrZfkvZPpopzoibInLFxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRDT0xPUjogJ+ivt+i+k+WFpXJnYuminOiJsuWAvCcsXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0lNQUdFUEFUSDogJ+iuvuWumuawtOWNsOWbvueJh+i3r+W+hCcsXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLSU1BR0VQQVRIOiAn6K+36L6T5YWl5rC05Y2w5Zu+54mH6Lev5b6EJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLUE9TSVRJT046ICforr7lrprmsLTljbDkvY3nva4nLFxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1BPU0lUSU9OOiAn6K+36YCJ5oup5rC05Y2w5L2N572uJyxcblxuICBCVUlMRElOX1JFTkFNRV9GT1JNQVQ6ICforr7lrprph43lkb3lkI3moLzlvI8nLFxuICBCVUlMRElOX1JFTkFNRV9FTkFCTEU6ICfmmK/lkKblkK/nlKjph43lkb3lkI0nLFxuXG4gIEJVSUxESU5fQ09NUFJFU1NfUVVBTElUWTogJ+iuvuWumuWbvueJh+i0qOmHjycsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9RVUFMSVRZOiAn6K+36L6T5YWlMC0xMDDnmoTmlbTmlbAnLFxuICBCVUlMRElOX0NPTVBSRVNTX0lTQ09OVkVSVDogJ+aYr+WQpui/m+ihjOagvOW8j+i9rOaNoicsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU0NPTlZFUlQ6ICfpnIDopoHovazmjaLml7blkK/nlKgnLFxuICBCVUlMRElOX0NPTVBSRVNTX0NPTlZFUlRGT1JNQVQ6ICforr7lrprovazmjaLmoLzlvI8nLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfQ09OVkVSVEZPUk1BVDogJ+ivt+mAieaLqei9rOaNouagvOW8jycsXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkU6ICfmmK/lkKbov5vooYzlm77niYfnvKnmlL4nLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRVNJWkU6ICfpnIDopoHnvKnmlL7ml7blkK/nlKgnLFxuICBCVUlMRElOX0NPTVBSRVNTX1JFU0laRVdJRFRIOiAn6K6+5a6a57yp5pS+5a695bqmJyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRVdJRFRIOiAn6K+36L6T5YWl5pWw5a2XJyxcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVIRUlHSFQ6ICforr7lrprnvKnmlL7pq5jluqYnLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFSEVJR0hUOiAn6K+36L6T5YWl5pWw5a2XJyxcbiAgQlVJTERJTl9DT01QUkVTU19JU1JFU0laRUJZUEVSQ0VOVDogJ+aYr+WQpuaMieeZvuWIhuavlOi/m+ihjOe8qeaUvicsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFU0laRUJZUEVSQ0VOVDogJ+mcgOimgeaMieeZvuWIhuavlOe8qeaUvuaXtuWQr+eUqCcsXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNGTElQOiAn5piv5ZCm5Z6C55u057+76L2s5Zu+54mHJyxcbiAgQlVJTERJTl9DT01QUkVTU19JU0ZMT1A6ICfmmK/lkKbmsLTlubPnv7vovazlm77niYcnLFxuICBCVUlMRElOX0NPTVBSRVNTX1JFU0laRVBFUkNFTlQ6ICforr7lrprnvKnmlL7nmb7liIbmr5QnLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFUEVSQ0VOVDogJ+ivt+i+k+WFpeaVsOWtlycsXG4gIEJVSUxESU5fQ09NUFJFU1NfU0tJUFJFU0laRU9GU01BTExJTUc6ICfmmK/lkKbot7Pov4flsI/lm77nvKnmlL4nLFxuICBCVUlMRElOX0NPTVBSRVNTX0lTUk9UQVRFOiAn5piv5ZCm6L+b6KGM5Zu+54mH5peL6L2sJyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUk9UQVRFOiAn6ZyA6KaB5peL6L2s5pe25ZCv55SoJyxcbiAgQlVJTERJTl9DT01QUkVTU19ST1RBVEVERUdSRUU6ICforr7lrprml4vovazop5LluqYnLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUk9UQVRFREVHUkVFOiAn6K+36L6T5YWl5pWw5a2X77yM5Y+v5Li66LSf5pWwJyxcbiAgQlVJTERJTl9DT01QUkVTU19JU1JFTU9WRUVYSUY6ICfmmK/lkKbnp7vpmaRFWElG5L+h5oGvJyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVNT1ZFRVhJRjogJ+mcgOimgeenu+mZpEVYSUbkv6Hmga/ml7blkK/nlKgnLFxuXG4gIC8vIFBsdWdpbiBIYW5kbGVyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX1NVQ0NFU1M6ICfmj5Lku7blronoo4XmiJDlip8nLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRUQ6ICfmj5Lku7blronoo4XlpLHotKUnLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRURfUkVBU09OOiAn5o+S5Lu25a6J6KOF5aSx6LSl77yM5aSx6LSl56CB5Li6JHtjb2Rlfe+8jOmUmeivr+aXpeW/l+S4uiBcXG4gJHtkYXRhfScsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRF9QQVRIOiAn5o+S5Lu25a6J6KOF5aSx6LSl77yM6K+36L6T5YWl5ZCI5rOV5o+S5Lu25ZCN5oiW5ZCI5rOV5a6J6KOF6Lev5b6EJyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9TVUNDRVNTOiAn5o+S5Lu25Y246L295oiQ5YqfJyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRUQ6ICfmj5Lku7bljbjovb3lpLHotKUnLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9SRUFTT046ICfmj5Lku7bljbjovb3lpLHotKXvvIzlpLHotKXnoIHkuLoke2NvZGV977yM6ZSZ6K+v5pel5b+X5Li6IFxcbiAke2RhdGF9JyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfVkFMSUQ6ICfmj5Lku7bljbjovb3lpLHotKXvvIzor7fovpPlhaXlkIjms5Xmj5Lku7blkI0nLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX1NVQ0NFU1M6ICfmj5Lku7bmm7TmlrDmiJDlip8nLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRDogJ+aPkuS7tuabtOaWsOWksei0pScsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1JFQVNPTjogJ+aPkuS7tuabtOaWsOWksei0pe+8jOWksei0peeggeS4uiR7Y29kZX3vvIzplJnor6/ml6Xlv5fkuLogXFxuICR7ZGF0YX0nLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9WQUxJRDogJ+aPkuS7tuabtOaWsOWksei0pe+8jOivt+i+k+WFpeWQiOazleaPkuS7tuWQjSdcbn1cblxuZXhwb3J0IHR5cGUgSUxvY2FsZXNLZXkgPSBrZXlvZiB0eXBlb2YgWkhfQ05cbmV4cG9ydCB0eXBlIElMb2NhbGVzID0gdHlwZW9mIFpIX0NOXG4iLCJpbXBvcnQgeyBaSF9DTiwgSUxvY2FsZXNLZXksIElMb2NhbGVzIH0gZnJvbSAnLi96aC1DTidcbmltcG9ydCB7IG1lcmdlIH0gZnJvbSAnbG9kYXNoJ1xuaW1wb3J0IHsgSVBpY0dvLCBJU3RyaW5nS2V5TWFwLCBJSTE4bk1hbmFnZXIgfSBmcm9tICcuLi90eXBlcydcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5pbXBvcnQgZnMsIHsgcGF0aEV4aXN0c1N5bmMsIGVuc3VyZURpclN5bmMgfSBmcm9tICdmcy1leHRyYSdcbmltcG9ydCB5YW1sIGZyb20gJ2pzLXlhbWwnXG5cbmltcG9ydCB7IE9iamVjdEFkYXB0ZXIsIEkxOG4gfSBmcm9tICdAcGljZ28vaTE4bidcblxuaW1wb3J0IHsgSUxvY2FsZSB9IGZyb20gJ0BwaWNnby9pMThuL2Rpc3QvdHlwZXMnXG5pbXBvcnQgeyBFTiB9IGZyb20gJy4vZW4nXG5pbXBvcnQgeyBaSF9UVyB9IGZyb20gJy4vemgtVFcnXG5cbmNvbnN0IGxhbmd1YWdlTGlzdDogSVN0cmluZ0tleU1hcDxJU3RyaW5nS2V5TWFwPHN0cmluZz4+ID0ge1xuICAnemgtQ04nOiBaSF9DTixcbiAgJ3poLVRXJzogWkhfVFcsXG4gIGVuOiBFTlxufVxuXG5jbGFzcyBJMThuTWFuYWdlciBpbXBsZW1lbnRzIElJMThuTWFuYWdlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaTE4bjogSTE4blxuICBwcml2YXRlIHJlYWRvbmx5IG9iamVjdEFkYXB0ZXI6IE9iamVjdEFkYXB0ZXJcbiAgcHJpdmF0ZSByZWFkb25seSBjdHg6IElQaWNHb1xuICBjb25zdHJ1Y3RvcihjdHg6IElQaWNHbykge1xuICAgIHRoaXMuY3R4ID0gY3R4XG4gICAgdGhpcy5vYmplY3RBZGFwdGVyID0gbmV3IE9iamVjdEFkYXB0ZXIobGFuZ3VhZ2VMaXN0KVxuICAgIGxldCBsYW5ndWFnZSA9IHRoaXMuY3R4LmdldENvbmZpZzxzdHJpbmc+KCdzZXR0aW5ncy5sYW5ndWFnZScpIHx8ICd6aC1DTidcbiAgICBpZiAoIWxhbmd1YWdlTGlzdFtsYW5ndWFnZV0pIHtcbiAgICAgIGxhbmd1YWdlID0gJ3poLUNOJyAvLyB1c2UgZGVmYXVsdFxuICAgIH1cbiAgICB0aGlzLmkxOG4gPSBuZXcgSTE4bih7XG4gICAgICBhZGFwdGVyOiB0aGlzLm9iamVjdEFkYXB0ZXIsXG4gICAgICBkZWZhdWx0TGFuZ3VhZ2U6IGxhbmd1YWdlXG4gICAgfSlcbiAgICB0aGlzLmxvYWRPdXR0ZXJJMThuKClcbiAgfVxuXG4gIHByaXZhdGUgbG9hZE91dHRlckkxOG4oKTogdm9pZCB7XG4gICAgY29uc3QgaTE4bkZvbGRlciA9IHRoaXMuZ2V0T3V0dGVySTE4bkZvbGRlcigpXG4gICAgY29uc3QgZmlsZXMgPSBmcy5yZWFkZGlyU3luYyhpMThuRm9sZGVyLCB7XG4gICAgICB3aXRoRmlsZVR5cGVzOiB0cnVlXG4gICAgfSlcbiAgICBmaWxlcy5mb3JFYWNoKGZpbGUgPT4ge1xuICAgICAgaWYgKGZpbGUuaXNGaWxlKCkgJiYgZmlsZS5uYW1lLmVuZHNXaXRoKCcueW1sJykpIHtcbiAgICAgICAgY29uc3QgaTE4bkZpbGVQYXRoID0gcGF0aC5qb2luKGkxOG5Gb2xkZXIsIGZpbGUubmFtZSlcbiAgICAgICAgY29uc3QgaTE4bkZpbGUgPSBmcy5yZWFkRmlsZVN5bmMoaTE4bkZpbGVQYXRoLCAndXRmOCcpXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgaTE4bkZpbGVPYmogPSB5YW1sLmxvYWQoaTE4bkZpbGUpIGFzIElMb2NhbGVzXG4gICAgICAgICAgbGFuZ3VhZ2VMaXN0W2ZpbGUubmFtZS5yZXBsYWNlKC9cXC55bWwkLywgJycpXSA9IGkxOG5GaWxlT2JqXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRPdXR0ZXJJMThuRm9sZGVyKCk6IHN0cmluZyB7XG4gICAgY29uc3QgaTE4bkZvbGRlciA9IHBhdGguam9pbih0aGlzLmN0eC5iYXNlRGlyLCAnaTE4bi1jbGknKVxuICAgIGlmICghcGF0aEV4aXN0c1N5bmMoaTE4bkZvbGRlcikpIHtcbiAgICAgIGVuc3VyZURpclN5bmMoaTE4bkZvbGRlcilcbiAgICB9XG4gICAgcmV0dXJuIGkxOG5Gb2xkZXJcbiAgfVxuXG4gIHRyYW5zbGF0ZTxUIGV4dGVuZHMgc3RyaW5nPihrZXk6IElMb2NhbGVzS2V5IHwgVCwgYXJncz86IElTdHJpbmdLZXlNYXA8c3RyaW5nPik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaTE4bi50cmFuc2xhdGUoa2V5LCBhcmdzKSB8fCBrZXlcbiAgfVxuXG4gIHNldExhbmd1YWdlKGxhbmd1YWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmkxOG4uc2V0TGFuZ3VhZ2UobGFuZ3VhZ2UpXG4gICAgdGhpcy5jdHguc2F2ZUNvbmZpZyh7XG4gICAgICAnc2V0dGluZ3MubGFuZ3VhZ2UnOiBsYW5ndWFnZVxuICAgIH0pXG4gIH1cblxuICBhZGRMb2NhbGUobGFuZ3VhZ2U6IHN0cmluZywgbG9jYWxlczogSUxvY2FsZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG9yaWdpbkxvY2FsZXMgPSB0aGlzLm9iamVjdEFkYXB0ZXIuZ2V0TG9jYWxlKGxhbmd1YWdlKVxuICAgIGlmICghb3JpZ2luTG9jYWxlcykge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIGNvbnN0IG5ld0xvY2FsZXMgPSBtZXJnZShvcmlnaW5Mb2NhbGVzLCBsb2NhbGVzKVxuICAgIHRoaXMub2JqZWN0QWRhcHRlci5zZXRMb2NhbGUobGFuZ3VhZ2UsIG5ld0xvY2FsZXMpXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGFkZExhbmd1YWdlKGxhbmd1YWdlOiBzdHJpbmcsIGxvY2FsZXM6IElMb2NhbGUpOiBib29sZWFuIHtcbiAgICBjb25zdCBvcmlnaW5Mb2NhbGVzID0gdGhpcy5vYmplY3RBZGFwdGVyLmdldExvY2FsZShsYW5ndWFnZSlcbiAgICBpZiAob3JpZ2luTG9jYWxlcykge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIHRoaXMub2JqZWN0QWRhcHRlci5zZXRMb2NhbGUobGFuZ3VhZ2UsIGxvY2FsZXMpXG4gICAgbGFuZ3VhZ2VMaXN0W2xhbmd1YWdlXSA9IGxvY2FsZXNcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgZ2V0TGFuZ3VhZ2VMaXN0KCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMobGFuZ3VhZ2VMaXN0KVxuICB9XG59XG5cbmV4cG9ydCB7IEkxOG5NYW5hZ2VyIH1cbiIsImltcG9ydCB7IElMb2NhbGVzIH0gZnJvbSAnLi96aC1DTidcblxuLyogZXNsaW50LWRpc2FibGUgbm8tdGVtcGxhdGUtY3VybHktaW4tc3RyaW5nICovXG5leHBvcnQgY29uc3QgWkhfVFc6IElMb2NhbGVzID0ge1xuICBVUExPQURfRkFJTEVEOiAn5LiK5YKz5aSx5pWXJyxcbiAgQ0hFQ0tfU0VUVElOR1M6ICfoq4vmqqLmn6XkvaDnmoToqK3lrprmmK/lkKbmraPnoronLFxuICBDSEVDS19TRVRUSU5HU19BTkRfTkVUV09SSzogJ+iri+aqouafpeS9oOeahOioreWumuWPiue2sui3rycsXG4gIFVQTE9BRF9GQUlMRURfUkVBU09OOiAn6Yyv6Kqk56K877yaJHtjb2Rlfe+8jOiri+aJk+mWi+eAj+imveWZqOiyvOS4iuWcsOWdgOafpeeci+ebuOmXnOWOn+WboCcsXG4gIFNFUlZFUl9FUlJPUjogJ+S8uuacjeWZqOWHuumMr++8jOiri+mHjeippicsXG4gIEFVVEhfRkFJTEVEOiAn6KqN6K2J5aSx5pWXJyxcblxuICAvLyBzbW1zXG4gIFBJQ0JFRF9TTU1TOiAnU00uTVMnLFxuICBQSUNCRURfU01NU19UT0tFTjogJ+ioreWumlRva2VuJyxcbiAgUElDQkVEX1NNTVNfQkFDS1VQX0RPTUFJTjogJ+WCmeeUqOS4iuWCs+e2suWdgCcsXG4gIFBJQ0JFRF9TTU1TX01FU1NBR0VfQkFDS1VQX0RPTUFJTjogJ+S+i+WmgiBzbW1zLmFwcCcsXG5cbiAgLy8gbG9jYWxcbiAgUElDQkVEX0xPQ0FMOiAn5pys5ZywJyxcbiAgUElDQkVEX0xPQ0FMX1BBVEg6ICfoqK3lrprlhLLlrZjot6/lvpEnLFxuICBQSUNCRURfTE9DQUxfTUVTU0FHRV9QQVRIOiAn5L6L5aaCIC91c3IvbG9jYWwvaW1hZ2VzLycsXG4gIFBJQ0JFRF9MT0NBTF9DVVNUT01VUkw6ICfoqK3lrproh6roqILntrLlnYAnLFxuICBQSUNCRURfTE9DQUxfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoIgaHR0cHM6Ly90ZXN0LmNvbScsXG4gIFBJQ0JFRF9MT0NBTF9XRUJQQVRIOiAn6Kit5a6a57ay5Z2A6Lev5b6RJyxcbiAgUElDQkVEX0xPQ0FMX01FU1NBR0VfV0VCUEFUSDogJ+eUqOS6jue2sumggemhr+ekuueahOi3r+W+kScsXG5cbiAgLy8gQWxpLWNsb3VkXG4gIFBJQ0JFRF9BTElDTE9VRDogJ+mYv+mHjOS6kU9TUycsXG4gIFBJQ0JFRF9BTElDTE9VRF9BQ0NFU1NLRVlJRDogJ+ioreWummFjY2Vzc0tleUlkJyxcbiAgUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWVNFQ1JFVDogJ+ioreWummFjY2Vzc0tleVNlY3JldCcsXG4gIFBJQ0JFRF9BTElDTE9VRF9CVUNLRVQ6ICfoqK3lrppCdWNrZXQnLFxuICBQSUNCRURfQUxJQ0xPVURfQVJFQTogJ+ioreWumuWEsuWtmOWNgOWfnycsXG4gIFBJQ0JFRF9BTElDTE9VRF9QQVRIOiAn6Kit5a6a5YSy5a2Y6Lev5b6RJyxcbiAgUElDQkVEX0FMSUNMT1VEX0NVU1RPTVVSTDogJ+ioreWumuiHquiogue2suWdgCcsXG4gIFBJQ0JFRF9BTElDTE9VRF9PUFRJT05TOiAn6Kit5a6a57ay5Z2A5b6M57a0JyxcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQVJFQTogJ+S+i+Wmgu+8mm9zcy1jbi1iZWlqaW5nJyxcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfT1BUSU9OUzogJ+S+i+Wmgu+8mj94LW9zcy1wcm9jZXNzPXh4eCcsXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxuXG4gIC8vIFRlbmNlbnQtY2xvdWRcbiAgUElDQkVEX1RFTkNFTlRDTE9VRDogJ+mosOioiuS6kUNPUycsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfVkVSU0lPTjogJ0NPU+eJiOacrCcsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUSUQ6ICfoqK3lrppTZWNyZXRJZCcsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUS0VZOiAn6Kit5a6aU2VjcmV0S2V5JyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9BUFBJRDogJ+ioreWumkFwcElkJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9CVUNLRVQ6ICfoqK3lrppCdWNrZXQnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0FSRUE6ICfoqK3lrprlhLLlrZjljYDln58nLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0VORFBPSU5UOiAn6Kit5a6a5o6l5YWl6bueJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9QQVRIOiAn6Kit5a6a5YSy5a2Y6Lev5b6RJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9PUFRJT05TOiAn6Kit5a6a57ay5Z2A5b6M57a0JyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9DVVNUT01VUkw6ICfoqK3lrproh6roqILntrLlnYAnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQVBQSUQ6ICfkvovlpoLvvJoxMjM0NTY3ODkwJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FSRUE6ICfkvovlpoLvvJphcC1iZWlqaW5nJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoLvvJpodHRwczovL3Rlc3QuY29tJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJo/aW1hZ2VNb2dyMicsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9FTkRQT0lOVDogJ+S+i+Wmgu+8mmNvcy1pbnRlcm5hbC5hY2NlbGVyYXRlLnRlbmNlbnRjb3MuY24nLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU06ICfmpbXmmbrlo5PnuK4nLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fQ0FOQ0VMOiAn6Zec6ZaJJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX0NPTkZJUk06ICfplovllZMnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fVElQOlxuICAgICflnJbniYfmpbXmmbrlo5PnuK7vvIzoqbPmg4Xoq4vlj4PogINb5paH5qqU6Kqq5piOXShodHRwczovL2Nsb3VkLnRlbmNlbnQuY29tL2RvY3VtZW50L3Byb2R1Y3QvNDM2LzQ5MjU5KScsXG5cbiAgLy8gR2l0SHViXG4gIFBJQ0JFRF9HSVRIVUI6ICdHaXRIdWInLFxuICBQSUNCRURfR0lUSFVCX1RPS0VOOiAn6Kit5a6aVG9rZW4nLFxuICBQSUNCRURfR0lUSFVCX1JFUE86ICfoqK3lrprlgInluqvlkI3nqLEnLFxuICBQSUNCRURfR0lUSFVCX1BBVEg6ICfoqK3lrprlhLLlrZjot6/lvpEnLFxuICBQSUNCRURfR0lUSFVCX0JSQU5DSDogJ+ioreWumuWIhuaUr+WQjeeosScsXG4gIFBJQ0JFRF9HSVRIVUJfQ1VTVE9NVVJMOiAn6Kit5a6a6Ieq6KiC57ay5Z2AJyxcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX1JFUE86ICfmoLzlvI/vvJp1c2VybmFtZS9yZXBvJyxcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX0JSQU5DSDogJ+S+i+Wmgu+8mm1haW4nLFxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxuXG4gIC8vIHFpbml1XG4gIFBJQ0JFRF9RSU5JVTogJ+S4g+eJm+S6kScsXG4gIFBJQ0JFRF9RSU5JVV9BQ0NFU1NLRVk6ICfoqK3lrppBY2Nlc3NLZXknLFxuICBQSUNCRURfUUlOSVVfU0VDUkVUS0VZOiAn6Kit5a6aU2VjcmV0S2V5JyxcbiAgUElDQkVEX1FJTklVX0JVQ0tFVDogJ+ioreWumkJ1Y2tldCcsXG4gIFBJQ0JFRF9RSU5JVV9QQVRIOiAn6Kit5a6a5YSy5a2Y6Lev5b6RJyxcbiAgUElDQkVEX1FJTklVX1VSTDogJ+ioreWumuioquWVj+e2suWdgCcsXG4gIFBJQ0JFRF9RSU5JVV9PUFRJT05TOiAn6Kit5a6a57ay5Z2A5b6M57a0JyxcbiAgUElDQkVEX1FJTklVX0FSRUE6ICfoqK3lrprlhLLlrZjljYDln58nLFxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9BUkVBOiAn5L6L5aaC77yaejAnLFxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9PUFRJT05TOiAn5L6L5aaC77yaP2ltYWdlc2xpbScsXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX1VSTDogJ+S+i+Wmgu+8mmh0dHBzOi8veHh4Lnl5eS5nbGIuY2xvdWRkbi5jb20nLFxuICBQSUNCRURfVEVMRUdSQVBIOiAnVGVsZWdyYXBoJyxcbiAgLy8gaW1ndXJcbiAgUElDQkVEX0lNR1VSOiAnSW1ndXInLFxuICBQSUNCRURfSU1HVVJfQ0xJRU5USUQ6ICfoqK3lrppDbGllbnRJZCcsXG4gIFBJQ0JFRF9JTUdVUl9VU0VSTkFNRTogJ+ioreWumueUqOaItuWQjScsXG4gIFBJQ0JFRF9JTUdVUl9BQ0NFU1NfVE9LRU46ICfoqK3lrpphY2Nlc3NUb2tlbicsXG4gIFBJQ0JFRF9JTUdVUl9BTEJVTTogJ+ioreWumuebuOewv+WQjScsXG4gIFBJQ0JFRF9JTUdVUl9QUk9YWTogJ+ioreWumlBST1hZJyxcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfQ0xJRU5USUQ6ICfljL/lkI3kuIrlgrPmmYLloavlr6snLFxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9VU0VSTkFNRTogJ+mcgOimgeS4iuWCs+WIsOizrOaItuaZguWhq+WvqycsXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX0FDQ0VTU19UT0tFTjogJ+mcgOimgeS4iuWCs+WIsOizrOaItuaZguWhq+WvqycsXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX0FMQlVNOiAn5L6L5aaC77yadGVzdCcsXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX1BST1hZOiAn5L6L5aaC77yaaHR0cDovLzEyNy4wLjAuMToxMDgwJyxcblxuICAvLyB1cHl1blxuICBQSUNCRURfVVBZVU46ICflj4jmi43kupEnLFxuICBQSUNCRURfVVBZVU5fQlVDS0VUOiAn6Kit5a6aQnVja2V0JyxcbiAgUElDQkVEX1VQWVVOX0VORFBPSU5UOiAn6Kit5a6a5o6l5YWl6bueJyxcbiAgUElDQkVEX1VQWVVOX09QRVJBVE9SOiAn6Kit5a6a5pON5L2c5ZOhJyxcbiAgUElDQkVEX1VQWVVOX1BBU1NXT1JEOiAn6Kit5a6a5pON5L2c5ZOh5a+G56K8JyxcbiAgUElDQkVEX1VQWVVOX1BBVEg6ICfoqK3lrprlhLLlrZjot6/lvpEnLFxuICBQSUNCRURfVVBZVU5fVVJMOiAn6Kit5a6a5Yqg6YCf57ay5Z2AJyxcbiAgUElDQkVEX1VQWVVOX09QVElPTlM6ICfoqK3lrprntrLlnYDlvozntrQnLFxuICBQSUNCRURfVVBZVU5fQU5USV9MRUVDSF9UT0tFTjogJ+ioreWumumYsuebnOmPiFRva2VuJyxcbiAgUElDQkVEX1VQWVVOX0VYUElSRV9USU1FOiAn6Kit5a6a6YGO5pyf5pmC6ZaTKOenkiknLFxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9PUEVSQVRPUjogJ+S+i+Wmgu+8mm1lJyxcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfUEFTU1dPUkQ6ICfovLjlhaXmk43kvZzlk6Hlr4bnorwnLFxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9VUkw6ICfkvovlpoLvvJpodHRwOi8veHh4LnRlc3QudXBjZG4ubmV0JyxcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfT1BUSU9OUzogJ+S+i+Wmgu+8miFpbWdzbGltJyxcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfRU5EUE9JTlQ6ICfkvovlpoLvvJpodHRwczovL3YwLmFwaS51cHl1bi5jb20nLFxuXG4gIC8vIHdlYmRhdlxuICBQSUNCRURfV0VCREFWUExJU1Q6ICdXZWJEQVYnLFxuICBQSUNCRURfV0VCREFWUExJU1RfSE9TVDogJ+ioreWumkFQSeS4u+apnycsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9TU0xFTkFCTEVEOiAn6ZyA6KaBSFRUUFPmmYLllZ/nlKgnLFxuICBQSUNCRURfV0VCREFWUExJU1RfVVNFUk5BTUU6ICfoqK3lrprnlKjmiLblkI0nLFxuICBQSUNCRURfV0VCREFWUExJU1RfUEFTU1dPUkQ6ICfoqK3lrprlr4bnorwnLFxuICBQSUNCRURfV0VCREFWUExJU1RfUEFUSDogJ+ioreWumuWEsuWtmOi3r+W+kScsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9DVVNUT01VUkw6ICfoqK3lrproh6roqILntrLlnYAnLFxuICBQSUNCRURfV0VCREFWUExJU1RfQVVUSFRZUEU6ICfoqK3lrproqo3orYnmlrnlvI8nLFxuICBQSUNCRURfV0VCREFWUExJU1RfT1BUSU9OUzogJ+ioreWumue2suWdgOW+jOe2tCcsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9XRUJTSVRFX1BBVEg6ICfoqK3lrprntrLnq5not6/lvpEnLFxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9IT1NUOiAn5L6L5aaC77yaaHR0cHM6Ly9leGFtcGxlLmNvbS93ZWJkYXYnLFxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9TU0xFTkFCTEVEOiAn6ZyA6KaBSFRUUFPmmYLllZ/nlKgnLFxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9VU0VSTkFNRTogJ+S+i+Wmgu+8mm1lJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFTU1dPUkQ6ICfovLjlhaXnlKjmiLblr4bnorwnLFxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9XRUJTSVRFX1BBVEg6ICfmi7zmjqXntrLlnYDmmYLkvb/nlKgnLFxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoLvvJpodHRwczovL3Rlc3QuY29tJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfT1BUSU9OUzogJ+S+i+Wmgu+8mj9rZXk9dmFsdWUnLFxuXG4gIC8vIHNmdHBwbGlzdFxuICBQSUNCRURfU0ZUUFBMSVNUOiAn5YWn572uU0ZUUCcsXG4gIFBJQ0JFRF9TRlRQUExJU1RfSE9TVDogJ+ioreWumuS4u+apnycsXG4gIFBJQ0JFRF9TRlRQUExJU1RfUE9SVDogJ+ioreWumuerr+WPoycsXG4gIFBJQ0JFRF9TRlRQUExJU1RfVVNFUk5BTUU6ICfoqK3lrprnlKjmiLblkI0nLFxuICBQSUNCRURfU0ZUUFBMSVNUX1BBU1NXT1JEOiAn6Kit5a6a5a+G56K8JyxcbiAgUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZOiAn6Kit5a6a56eB6ZGwJyxcbiAgUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZX1BBU1NQSFJBU0U6ICfoqK3lrprnp4HpkbDlr4bnorwnLFxuICBQSUNCRURfU0ZUUFBMSVNUX1VQTE9BRFBBVEg6ICfoqK3lrprkuIrlgrPot6/lvpEnLFxuICBQSUNCRURfU0ZUUFBMSVNUX0NVU1RPTVVSTDogJ+ioreWumuiHquiogue2suWdgCcsXG4gIFBJQ0JFRF9TRlRQUExJU1RfV0VCU0lURV9QQVRIOiAn6Kit5a6a57ay56uZ6Lev5b6RJyxcbiAgUElDQkVEX1NGVFBQTElTVF9GSUxFX1VTRVI6ICfoqK3lrprmlofku7bnlKjmiLY657WEJyxcbiAgUElDQkVEX1NGVFBQTElTVF9GSUxFX01PREU6ICfoqK3lrprmlofku7bmrIrpmZAnLFxuICBQSUNCRURfU0ZUUFBMSVNUX0RJUl9NT0RFOiAn6Kit5a6a5paH5Lu25aS+5qyK6ZmQJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0hPU1Q6ICfkvovlpoLvvJoxLjEuMS4zJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BPUlQ6ICfpu5joqo0yMicsXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QUklWQVRFS0VZOiAn5L6L5aaC77yaL1VzZXJzL3h4eC8uc3NoL2lkX3JzYScsXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QUklWQVRFS0VZX1BBU1NQSFJBU0U6ICfovLjlhaXnp4HpkbDlr4bnorwnLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfVVBMT0FEUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfV0VCU0lURV9QQVRIOiAn5ou85o6l57ay5Z2A5pmC5L2/55SoJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0ZJTEVfVVNFUjogJ+S+i+Wmgu+8mnd3dzpkYXRhJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0ZJTEVfTU9ERTogJ+S+i+Wmgu+8mjA2NjQnLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRElSX01PREU6ICfkvovlpoLvvJowNzc1JyxcblxuICAvLyBQaWNMaXN0XG4gIFBJQ0JFRF9QSUNMSVNUOiAnUGljTGlzdCcsXG4gIFBJQ0JFRF9QSUNMSVNUX0hPU1Q6ICfoqK3lrprkuLvmqZ8nLFxuICBQSUNCRURfUElDTElTVF9QT1JUOiAn6Kit5a6a56uv5Y+jJyxcbiAgUElDQkVEX1BJQ0xJU1RfUElDQkVEOiAn6Kit5a6a5ZyW5bqKJyxcbiAgUElDQkVEX1BJQ0xJU1RfQ09ORklHTkFNRTogJ+ioreWumumFjee9ruWQjScsXG4gIFBJQ0JFRF9QSUNMSVNUX0tFWTogJ+ioreWumumRkuasiktleScsXG5cbiAgLy8gTHNreSBQcm9cbiAgUElDQkVEX0xTS1lfUExJU1Q6ICdMc2t5JyxcbiAgUElDQkVEX0xTS1lfVkVSU0lPTjogJ+ioreWumueJiOacrCcsXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfVkVSU0lPTjogJ+iri+mBuOaTh+eJiOacrCcsXG4gIFBJQ0JFRF9MU0tZX0hPU1Q6ICfoqK3lrprkuLvmqZ8nLFxuICBQSUNCRURfTFNLWV9NRVNTQUdFX0hPU1Q6ICfkvovlpoLvvJpodHRwczovL2V4YW1wbGUuY29tJyxcbiAgUElDQkVEX0xTS1lfVE9LRU46ICfoqK3lrppUb2tlbicsXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfVE9LRU46ICfoq4vovLjlhaVUb2tlbicsXG4gIFBJQ0JFRF9MU0tZX1NUUkFURUdZX0lEOiAn6Kit5a6a562W55WlSUQnLFxuICBQSUNCRURfTFNLWV9NRVNTQUdFX1NUUkFURUdZX0lEOiAn5L6L5aaCMScsXG4gIFBJQ0JFRF9MU0tZX0FMQlVNX0lEOiAn6Kit5a6a55u45YaKSUQnLFxuICBQSUNCRURfTFNLWV9NRVNTQUdFX0FMQlVNX0lEOiAn5L6L5aaCMScsXG4gIFBJQ0JFRF9MU0tZX1BFUk1JU1NJT046ICfoqK3lrprkuIrlgrPmrIrpmZAnLFxuICBQSUNCRURfTFNLWV9NRVNTQUdFX1BFUk1JU1NJT046ICfoq4vpgbjmk4fkuIrlgrPmrIrpmZAnLFxuXG4gIC8vIEF3c1MzUGxpc3RcbiAgUElDQkVEX0FXU1MzUExJU1Q6ICdBV1MgUzMnLFxuICBQSUNCRURfQVdTUzNQTElTVF9BQ0NFU1NLRVlJRDogJ+ioreWumkFjY2Vzc0tleUlkJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfU0VDUkVUX0FDQ0VTU0tFWTogJ+ioreWumlNlY3JldEFjY2Vzc0tleScsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX0JVQ0tFVDogJ+ioreWumkJ1Y2tldCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1JFR0lPTjogJ+ioreWumlJlZ2lvbicsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1VQTE9BRFBBVEg6ICfoqK3lrprkuIrlgrPot6/lvpEnLFxuICBQSUNCRURfQVdTUzNQTElTVF9FTkRQT0lOVDogJ+ioreWumuiHquWumue+qeevgOm7nicsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1BST1hZOiAn6Kit5a6a5Luj55CGJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfVVJMUFJFRklYOiAn6Kit5a6a6Ieq5a6a576p57ay5Z2AJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfUEFUSFNUWUxFQUNDRVNTOiAn6ZaL5ZWfIGBwYXRoU3R5bGVBY2Nlc3NgJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfUkVKRUNUVU5BVVRIT1JJWkVEOiAn6ZaL5ZWfIGByZWplY3RVbmF1dGhvcml6ZWRgJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfQUNMOiAn6Kit5a6aQUNMJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfRElTQUJMRUJVQ0tFVFBSRUZJWFRPVVJMOiAn6ZaL5ZWfIGBwYXRoU3R5bGVBY2Nlc3NgIOaZgu+8jOaYr+WQpuimgeemgeeUqOacgOe1gueUn+aIkFVSTOS4rea3u+WKoCBidWNrZXQg5YmN57a0JyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9BQ0NFU1NLRVlJRDogJ+S+i+Wmgu+8mkFLSUF4eHh4eHh4eHh4eHh4JyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9TRUNSRVRfQUNDRVNTS0VZOiAn5L6L5aaC77yaeHh4eHh4eHh4eCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfQlVDS0VUOiAn5L6L5aaC77yadGVzdC97ZnVsbE5hbWV9JyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9SRUdJT046ICfkvovlpoLvvJp1cy1lYXN0LTEnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1VQTE9BRFBBVEg6ICfkvovlpoLvvJp0ZXN0LycsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfRU5EUE9JTlQ6ICfkvovlpoLvvJpodHRwczovL3MzLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9QUk9YWTogJ+S+i+Wmgu+8mmh0dHA6Ly8xMjcuMC4wLjE6MTA4MCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfVVJMUFJFRklYOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUEFUSFNUWUxFQUNDRVNTOiAn6ZyA6KaB5pmC5ZWf55SoJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9SRUpFQ1RVTkFVVEhPUklaRUQ6ICfpnIDopoHmmYLllZ/nlKgnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0FDTDogJ+S+i+Wmgu+8mnB1YmxpYy1yZWFkJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9ESVNBQkxFQlVDS0VUUFJFRklYVE9VUkw6ICfpnIDopoHmmYLllZ/nlKgnLFxuXG4gIEJVSUxESU5fV0FURVJNQVJLX0lTQUREV0FURVJNQVJLOiAn5piv5ZCm5re75Yqg5rC05Y2wJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9JU0FERFdBVEVSTUFSSzogJ+mcgOimgea3u+WKoOawtOWNsOaZguWVn+eUqCcsXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RZUEU6ICfoqK3lrprmsLTljbDpoZ7lnosnLFxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1RZUEU6ICfoq4vpgbjmk4fmsLTljbDpoZ7lnosnLFxuICBCVUlMRElOX1dBVEVSTUFSS19JU0ZVTExTQ1JFRU5XQVRFUk1BUks6ICfmmK/lkKblhajlsY/msLTljbAnLFxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX0lTRlVMTFNDUkVFTldBVEVSTUFSSzogJ+mcgOimgeWFqOWxj+awtOWNsOaZguWVn+eUqCcsXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0RFR1JFRTogJ+ioreWumuawtOWNsOinkuW6picsXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLREVHUkVFOiAn6KuL6Ly45YWl5pW45a2XJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVDogJ+ioreWumuawtOWNsOaWh+WtlycsXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLVEVYVDogJ+iri+i8uOWFpeawtOWNsOaWh+WtlycsXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFRGT05UUEFUSDogJ+ioreWumuawtOWNsOWtl+mrlCcsXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVFBBVEg6ICfoq4vovLjlhaXmsLTljbDlrZfpq5Tmlofku7bot6/lvpEnLFxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktGT05UUkFUSU86ICfoqK3lrprmsLTljbDlnJbniYfmr5TkvosnLFxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRSQVRJTzogJ+iri+i8uOWFpTAtMeeahOaVuOWtlycsXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRDT0xPUjogJ+ioreWumuawtOWNsOWtl+mrlOmhj+iJsicsXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVENPTE9SOiAn6KuL6Ly45YWlcmdi6aGP6Imy5YC8JyxcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLSU1BR0VQQVRIOiAn6Kit5a6a5rC05Y2w5ZyW54mH6Lev5b6RJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktJTUFHRVBBVEg6ICfoq4vovLjlhaXmsLTljbDlnJbniYfot6/lvpEnLFxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktQT1NJVElPTjogJ+ioreWumuawtOWNsOS9jee9ricsXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLUE9TSVRJT046ICfoq4vpgbjmk4fmsLTljbDkvY3nva4nLFxuXG4gIEJVSUxESU5fUkVOQU1FX0ZPUk1BVDogJ+ioreWumumHjeWRveWQjeagvOW8jycsXG4gIEJVSUxESU5fUkVOQU1FX0VOQUJMRTogJ+aYr+WQpuWVn+eUqOmHjeWRveWQjScsXG5cbiAgQlVJTERJTl9DT01QUkVTU19RVUFMSVRZOiAn6Kit5a6a5ZyW54mH6LOq6YePJyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1FVQUxJVFk6ICfoq4vovLjlhaUwLTEwMOeahOaVtOaVuCcsXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNDT05WRVJUOiAn5piv5ZCm6YCy6KGM5qC85byP6L2J5o+bJyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTQ09OVkVSVDogJ+mcgOimgei9ieaPm+aZguWVn+eUqCcsXG4gIEJVSUxESU5fQ09NUFJFU1NfQ09OVkVSVEZPUk1BVDogJ+ioreWumui9ieaPm+agvOW8jycsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9DT05WRVJURk9STUFUOiAn6KuL6YG45pOH6L2J5o+b5qC85byPJyxcbiAgQlVJTERJTl9DT01QUkVTU19JU1JFU0laRTogJ+aYr+WQpumAsuihjOWclueJh+e4ruaUvicsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFU0laRTogJ+mcgOimgee4ruaUvuaZguWVn+eUqCcsXG4gIEJVSUxESU5fQ09NUFJFU1NfUkVTSVpFV0lEVEg6ICfoqK3lrprnuK7mlL7lr6zluqYnLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFV0lEVEg6ICfoq4vovLjlhaXmlbjlrZcnLFxuICBCVUlMRElOX0NPTVBSRVNTX1JFU0laRUhFSUdIVDogJ+ioreWumue4ruaUvumrmOW6picsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVIRUlHSFQ6ICfoq4vovLjlhaXmlbjlrZcnLFxuICBCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFQllQRVJDRU5UOiAn5piv5ZCm5oyJ55m+5YiG5q+U6YCy6KGM57iu5pS+JyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVTSVpFQllQRVJDRU5UOiAn6ZyA6KaB5oyJ55m+5YiG5q+U57iu5pS+5pmC5ZWf55SoJyxcbiAgQlVJTERJTl9DT01QUkVTU19JU0ZMSVA6ICfmmK/lkKblnoLnm7Tnv7vovYnlnJbniYcnLFxuICBCVUlMRElOX0NPTVBSRVNTX0lTRkxPUDogJ+aYr+WQpuawtOW5s+e/u+i9ieWclueJhycsXG4gIEJVSUxESU5fQ09NUFJFU1NfUkVTSVpFUEVSQ0VOVDogJ+ioreWumue4ruaUvueZvuWIhuavlCcsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVQRVJDRU5UOiAn6KuL6Ly45YWl5pWw5a2XJyxcbiAgQlVJTERJTl9DT01QUkVTU19TS0lQUkVTSVpFT0ZTTUFMTElNRzogJ+aYr+WQpui3s+mBjuWwj+Wclue4ruaUvicsXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNST1RBVEU6ICfmmK/lkKbpgLLooYzlnJbniYfml4vovYknLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNST1RBVEU6ICfpnIDopoHml4vovYnmmYLllZ/nlKgnLFxuICBCVUlMRElOX0NPTVBSRVNTX1JPVEFURURFR1JFRTogJ+ioreWumuaXi+i9ieinkuW6picsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9ST1RBVEVERUdSRUU6ICfoq4vovLjlhaXmlbjlrZfvvIzlj6/ngrrosqDmlbgnLFxuICBCVUlMRElOX0NPTVBSRVNTX0lTUkVNT1ZFRVhJRjogJ+aYr+WQpuenu+mZpEVYSUbos4foqIonLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRU1PVkVFWElGOiAn6ZyA6KaB56e76ZmkRVhJRuizh+ioiuaZguWVn+eUqCcsXG5cbiAgLy8gUGx1Z2luIEhhbmRsZXJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfU1VDQ0VTUzogJ+aPkuS7tuWuieijneaIkOWKnycsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRDogJ+aPkuS7tuWuieijneWkseaVlycsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRF9SRUFTT046ICfmj5Lku7blronoo53lpLHmlZfvvIzlpLHmlZfnorzngroke2NvZGV977yM6Yyv6Kqk57SA6YyE54K6IFxcbiAke2RhdGF9JyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEX1BBVEg6ICfmj5Lku7blronoo53lpLHmlZfvvIzoq4vovLjlhaXmraPnorrnmoTmj5Lku7blkI3nqLHmiJbmraPnorrnmoTlronoo53ot6/lvpEnLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX1NVQ0NFU1M6ICfmj5Lku7bljbjovInmiJDlip8nLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRDogJ+aPkuS7tuWNuOi8ieWkseaVlycsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1JFQVNPTjogJ+aPkuS7tuWNuOi8ieWkseaVl++8jOWkseaVl+eivOeCuiR7Y29kZX3vvIzpjK/oqqTntIDpjITngrogXFxuICR7ZGF0YX0nLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9WQUxJRDogJ+aPkuS7tuWNuOi8ieWkseaVl++8jOiri+i8uOWFpeato+eiuueahOaPkuS7tuWQjeeosScsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfU1VDQ0VTUzogJ+aPkuS7tuabtOaWsOaIkOWKnycsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEOiAn5o+S5Lu25pu05paw5aSx5pWXJyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfUkVBU09OOiAn5o+S5Lu25pu05paw5aSx5pWX77yM5aSx5pWX56K854K6JHtjb2Rlfe+8jOmMr+iqpOe0gOmMhOeCuiBcXG4gJHtkYXRhfScsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1ZBTElEOiAn5o+S5Lu25pu05paw5aSx5pWX77yM6KuL6Ly45YWl5q2j56K655qE5o+S5Lu25ZCN56ixJ1xufVxuIiwiaW1wb3J0IHsgSUxvY2FsZXMgfSBmcm9tICcuL3poLUNOJ1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby10ZW1wbGF0ZS1jdXJseS1pbi1zdHJpbmcgKi9cbmV4cG9ydCBjb25zdCBFTjogSUxvY2FsZXMgPSB7XG4gIFVQTE9BRF9GQUlMRUQ6ICdVcGxvYWQgZmFpbGVkJyxcbiAgQ0hFQ0tfU0VUVElOR1M6ICdQbGVhc2UgY2hlY2sgeW91ciBzZXR0aW5ncycsXG4gIENIRUNLX1NFVFRJTkdTX0FORF9ORVRXT1JLOiAnUGxlYXNlIGNoZWNrIHlvdXIgc2V0dGluZ3MgYW5kIG5ldHdvcmsnLFxuICBVUExPQURfRkFJTEVEX1JFQVNPTjogJ0Vycm9yIGNvZGU6ICR7Y29kZX0sIHBsZWFzZSBvcGVuIHRoZSBicm93c2VyIGFuZCBwYXN0ZSB0aGUgYWRkcmVzcyB0byBzZWUgdGhlIHJlYXNvbicsXG4gIFNFUlZFUl9FUlJPUjogJ1NlcnZlciBlcnJvciwgcGxlYXNlIHRyeSBhZ2FpbiBsYXRlcicsXG4gIEFVVEhfRkFJTEVEOiAnQXV0aGVudGljYXRpb24gZmFpbGVkJyxcblxuICAvLyBzbW1zXG4gIFBJQ0JFRF9TTU1TOiAnU00uTVMnLFxuICBQSUNCRURfU01NU19UT0tFTjogJ1NldCBUb2tlbicsXG4gIFBJQ0JFRF9TTU1TX0JBQ0tVUF9ET01BSU46ICdTZXQgQmFja3VwIFVwbG9hZCBEb21haW4nLFxuICBQSUNCRURfU01NU19NRVNTQUdFX0JBQ0tVUF9ET01BSU46ICdFeC4gc21tcy5hcHAnLFxuXG4gIC8vIGxvY2FsXG4gIFBJQ0JFRF9MT0NBTDogJ0xvY2FsJyxcbiAgUElDQkVEX0xPQ0FMX1BBVEg6ICdTZXQgUGF0aCcsXG4gIFBJQ0JFRF9MT0NBTF9NRVNTQUdFX1BBVEg6ICdFeC4gL1VzZXJzL25hbWUvUGljdHVyZXMvJyxcbiAgUElDQkVEX0xPQ0FMX0NVU1RPTVVSTDogJ1NldCBDdXN0b20gVVJMJyxcbiAgUElDQkVEX0xPQ0FMX01FU1NBR0VfQ1VTVE9NVVJMOiAnRXguIGh0dHBzOi8vdGVzdC5jb20nLFxuICBQSUNCRURfTE9DQUxfV0VCUEFUSDogJ1NldCBXZWIgUGF0aCcsXG4gIFBJQ0JFRF9MT0NBTF9NRVNTQUdFX1dFQlBBVEg6ICdVc2VkIHRvIGdlbmVyYXRlIHVybCBwYXRoJyxcblxuICAvLyBBbGktY2xvdWRcbiAgUElDQkVEX0FMSUNMT1VEOiAnQWxpIENsb3VkJyxcbiAgUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWUlEOiAnU2V0IGFjY2Vzc0tleUlkJyxcbiAgUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWVNFQ1JFVDogJ1NldCBhY2Nlc3NLZXlTZWNyZXQnLFxuICBQSUNCRURfQUxJQ0xPVURfQlVDS0VUOiAnU2V0IEJ1Y2tldCcsXG4gIFBJQ0JFRF9BTElDTE9VRF9BUkVBOiAnU2V0IEFyZWEnLFxuICBQSUNCRURfQUxJQ0xPVURfUEFUSDogJ1NldCBQYXRoJyxcbiAgUElDQkVEX0FMSUNMT1VEX0NVU1RPTVVSTDogJ1NldCBDdXN0b20gVVJMJyxcbiAgUElDQkVEX0FMSUNMT1VEX09QVElPTlM6ICdTZXQgVVJMIFN1ZmZpeCcsXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0FSRUE6ICdFeC4gb3NzLWNuLWJlaWppbmcnLFxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9QQVRIOiAnRXguIHRlc3QvJyxcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfT1BUSU9OUzogJ0V4LiA/eC1vc3MtcHJvY2Vzcz14eHgnLFxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9DVVNUT01VUkw6ICdFeC4gaHR0cHM6Ly90ZXN0LmNvbScsXG5cbiAgLy8gVGVuY2VudC1jbG91ZFxuICBQSUNCRURfVEVOQ0VOVENMT1VEOiAnVGVuY2VudCBDbG91ZCcsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfVkVSU0lPTjogJ0Nob29zZSBDT1MgdmVyc2lvbicsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUSUQ6ICdTZXQgU2VjcmV0SWQnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVEtFWTogJ1NldCBTZWNyZXRLZXknLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0FQUElEOiAnU2V0IEFwcElkJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9CVUNLRVQ6ICdTZXQgQnVja2V0JyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9BUkVBOiAnU2V0IEFyZWEnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0VORFBPSU5UOiAnU2V0IEVuZHBvaW50JyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9QQVRIOiAnU2V0IFBhdGgnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX09QVElPTlM6ICdTZXQgVVJMIFN1ZmZpeCcsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQ1VTVE9NVVJMOiAnU2V0IEN1c3RvbSBVUkwnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQVBQSUQ6ICdFeC4gMTIzNDU2Nzg5MCcsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9BUkVBOiAnRXguIGFwLWJlaWppbmcnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfUEFUSDogJ0V4LiB0ZXN0LycsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9DVVNUT01VUkw6ICdFeC4gaHR0cDovL3Rlc3QuY29tJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX09QVElPTlM6ICdFeC4gP2ltYWdlTW9ncjInLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfRU5EUE9JTlQ6ICdFeC4gY29zLWludGVybmFsLmFjY2VsZXJhdGUudGVuY2VudGNvcy5jbicsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTTogJ1NldCBJbWFnZVNsaW0nLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fVElQOlxuICAgICdJbWFnZSBleHRyZW1lbHkgaW50ZWxsaWdlbnQgY29tcHJlc3Npb24sIHBsZWFzZSByZWZlciB0byB0aGUgW2RvY3VtZW50IGRlc2NyaXB0aW9uXShodHRwczovL2Nsb3VkLnRlbmNlbnQuY29tL2RvY3VtZW50L3Byb2R1Y3QvNDM2Lzg2NDM4KScsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9DT05GSVJNOiAnT1BFTicsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9DQU5DRUw6ICdDTE9TRScsXG4gIC8vIEdpdEh1YlxuICBQSUNCRURfR0lUSFVCOiAnR2l0SHViJyxcbiAgUElDQkVEX0dJVEhVQl9UT0tFTjogJ1NldCBUb2tlbicsXG4gIFBJQ0JFRF9HSVRIVUJfUkVQTzogJ1NldCBSZXBvIE5hbWUnLFxuICBQSUNCRURfR0lUSFVCX1BBVEg6ICdTZXQgUGF0aCcsXG4gIFBJQ0JFRF9HSVRIVUJfQlJBTkNIOiAnU2V0IEJyYW5jaCcsXG4gIFBJQ0JFRF9HSVRIVUJfQ1VTVE9NVVJMOiAnU2V0IEN1c3RvbSBVUkwnLFxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfUkVQTzogJ0V4LiB1c2VybmFtZS9yZXBvJyxcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX0JSQU5DSDogJ0V4LiBtYWluJyxcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX1BBVEg6ICdFeC4gdGVzdC8nLFxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfQ1VTVE9NVVJMOiAnRXguIGh0dHBzOi8vdGVzdC5jb20nLFxuXG4gIC8vIHFpbml1XG4gIFBJQ0JFRF9RSU5JVTogJ1Fpbml1JyxcbiAgUElDQkVEX1FJTklVX0FDQ0VTU0tFWTogJ1NldCBBY2Nlc3NLZXknLFxuICBQSUNCRURfUUlOSVVfU0VDUkVUS0VZOiAnU2V0IFNlY3JldEtleScsXG4gIFBJQ0JFRF9RSU5JVV9CVUNLRVQ6ICdTZXQgQnVja2V0JyxcbiAgUElDQkVEX1FJTklVX1BBVEg6ICdTZXQgUGF0aCcsXG4gIFBJQ0JFRF9RSU5JVV9VUkw6ICdTZXQgVVJMJyxcbiAgUElDQkVEX1FJTklVX09QVElPTlM6ICdTZXQgVVJMIFN1ZmZpeCcsXG4gIFBJQ0JFRF9RSU5JVV9BUkVBOiAnU2V0IEFyZWEnLFxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9QQVRIOiAnRXguIHRlc3QvJyxcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfQVJFQTogJ0V4LiB6MCcsXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX09QVElPTlM6ICdFeC4gP2ltYWdlc2xpbScsXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX1VSTDogJ0V4LiBodHRwczovL3h4eC55eXkuZ2xiLmNsb3VkZG4uY29tJyxcblxuICAvLyB0ZWxlZ3JhcGhcbiAgUElDQkVEX1RFTEVHUkFQSDogJ1RlbGVncmFwaCcsXG5cbiAgLy8gaW1ndXJcbiAgUElDQkVEX0lNR1VSOiAnSW1ndXInLFxuICBQSUNCRURfSU1HVVJfQ0xJRU5USUQ6ICdTZXQgQ2xpZW50SWQnLFxuICBQSUNCRURfSU1HVVJfVVNFUk5BTUU6ICdTZXQgVXNlcm5hbWUnLFxuICBQSUNCRURfSU1HVVJfQUNDRVNTX1RPS0VOOiAnU2V0IEFjY2VzcyBUb2tlbicsXG4gIFBJQ0JFRF9JTUdVUl9BTEJVTTogJ1NldCBBbGJ1bSBOYW1lJyxcbiAgUElDQkVEX0lNR1VSX1BST1hZOiAnU2V0IFByb3h5JyxcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfQ0xJRU5USUQ6ICdGaWxsIGluIHdoZW4geW91IG5lZWQgdG8gdXBsb2FkIGFzIGFub255bW91cycsXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX1VTRVJOQU1FOiAnRmlsbCBpbiB3aGVuIHlvdSBuZWVkIHRvIHVwbG9hZCB0byB0aGUgYWNjb3VudCcsXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX0FDQ0VTU19UT0tFTjogJ0ZpbGwgaW4gd2hlbiB5b3UgbmVlZCB0byB1cGxvYWQgdG8gdGhlIGFjY291bnQnLFxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9BTEJVTTogJ0V4LiB0ZXN0JyxcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfUFJPWFk6ICdFeC4gaHR0cDovLzEyNy4wLjAuMToxMDgwJyxcblxuICAvLyB1cHl1blxuICBQSUNCRURfVVBZVU46ICdVcHl1bicsXG4gIFBJQ0JFRF9VUFlVTl9CVUNLRVQ6ICdTZXQgQnVja2V0JyxcbiAgUElDQkVEX1VQWVVOX0VORFBPSU5UOiAnU2V0IEVuZHBvaW50JyxcbiAgUElDQkVEX1VQWVVOX09QRVJBVE9SOiAnU2V0IE9wZXJhdG9yJyxcbiAgUElDQkVEX1VQWVVOX1BBU1NXT1JEOiAnU2V0IE9wZXJhdG9yIFBhc3N3b3JkJyxcbiAgUElDQkVEX1VQWVVOX1BBVEg6ICdTZXQgUGF0aCcsXG4gIFBJQ0JFRF9VUFlVTl9VUkw6ICdTZXQgVVJMJyxcbiAgUElDQkVEX1VQWVVOX09QVElPTlM6ICdTZXQgVVJMIFN1ZmZpeCcsXG4gIFBJQ0JFRF9VUFlVTl9BTlRJX0xFRUNIX1RPS0VOOiAnU2V0IEFudGktTGVlY2ggVG9rZW4nLFxuICBQSUNCRURfVVBZVU5fRVhQSVJFX1RJTUU6ICdTZXQgRXhwaXJlIFRpbWUoc2Vjb25kcyknLFxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9PUEVSQVRPUjogJ0V4LiBtZScsXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBU1NXT1JEOiAnUGxlYXNlIHR5cGUgdGhlIG9wZXJhdG9yIHBhc3N3b3JkJyxcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfVVJMOiAnRXguIGh0dHA6Ly94eHgudGVzdC51cGNkbi5uZXQnLFxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9PUFRJT05TOiAnRXguICFpbWdzbGltJyxcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfUEFUSDogJ0V4LiB0ZXN0LycsXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX0VORFBPSU5UOiAnRXguIGh0dHBzOi8vdjAuYXBpLnVweXVuLmNvbScsXG5cbiAgLy8gd2ViZGF2XG4gIFBJQ0JFRF9XRUJEQVZQTElTVDogJ1dlYkRBVicsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9IT1NUOiAnU2V0IEhvc3QnLFxuICBQSUNCRURfV0VCREFWUExJU1RfU1NMRU5BQkxFRDogJ0VuYWJsZSBIVFRQUycsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9VU0VSTkFNRTogJ1NldCBVc2VybmFtZScsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9QQVNTV09SRDogJ1NldCBQYXNzd29yZCcsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9QQVRIOiAnU2V0IFBhdGgnLFxuICBQSUNCRURfV0VCREFWUExJU1RfV0VCU0lURV9QQVRIOiAnU2V0IFdlYnNpdGUgUGF0aCcsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9DVVNUT01VUkw6ICdTZXQgQ3VzdG9tIFVSTCcsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9BVVRIVFlQRTogJ1NldCBBdXRoIFR5cGUnLFxuICBQSUNCRURfV0VCREFWUExJU1RfT1BUSU9OUzogJ1NldCBVUkwgU3VmZml4JyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfSE9TVDogJ0V4LiBodHRwczovL2V4YW1wbGUuY29tL3dlYmRhdicsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1NTTEVOQUJMRUQ6ICdFbmFibGUgSFRUUFMnLFxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9VU0VSTkFNRTogJ0V4LiBtZScsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBU1NXT1JEOiAnUGxlYXNlIHR5cGUgdGhlIHBhc3N3b3JkJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFUSDogJ0V4LiB0ZXN0LycsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSDogJ1VzZWQgdG8gZ2VuZXJhdGUgdGhlIFVSTCBvZiB0aGUgaW1hZ2UnLFxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9DVVNUT01VUkw6ICdFeC4gaHR0cHM6Ly90ZXN0LmNvbScsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX09QVElPTlM6ICdFeC4gP2tleT12YWx1ZScsXG5cbiAgLy8gc2Z0cHBsaXN0XG4gIFBJQ0JFRF9TRlRQUExJU1Q6ICdTRlRQIEJ1aWxkaW4nLFxuICBQSUNCRURfU0ZUUFBMSVNUX0hPU1Q6ICdTZXQgSG9zdCcsXG4gIFBJQ0JFRF9TRlRQUExJU1RfUE9SVDogJ1NldCBQb3J0JyxcbiAgUElDQkVEX1NGVFBQTElTVF9VU0VSTkFNRTogJ1NldCBVc2VybmFtZScsXG4gIFBJQ0JFRF9TRlRQUExJU1RfUEFTU1dPUkQ6ICdTZXQgUGFzc3dvcmQnLFxuICBQSUNCRURfU0ZUUFBMSVNUX1BSSVZBVEVLRVk6ICdTZXQgUHJpdmF0ZSBLZXknLFxuICBQSUNCRURfU0ZUUFBMSVNUX1BSSVZBVEVLRVlfUEFTU1BIUkFTRTogJ1NldCBQcml2YXRlIEtleSBQYXNzcGhyYXNlJyxcbiAgUElDQkVEX1NGVFBQTElTVF9VUExPQURQQVRIOiAnU2V0IFVwbG9hZCBQYXRoJyxcbiAgUElDQkVEX1NGVFBQTElTVF9DVVNUT01VUkw6ICdTZXQgQ3VzdG9tIFVSTCcsXG4gIFBJQ0JFRF9TRlRQUExJU1RfV0VCU0lURV9QQVRIOiAnU2V0IFdlYnNpdGUgUGF0aCcsXG4gIFBJQ0JFRF9TRlRQUExJU1RfRklMRV9VU0VSOiAnU2V0IEZpbGUgVXNlcjpHcm91cCcsXG4gIFBJQ0JFRF9TRlRQUExJU1RfRklMRV9NT0RFOiAnU2V0IEZpbGUgTW9kZScsXG4gIFBJQ0JFRF9TRlRQUExJU1RfRElSX01PREU6ICdTZXQgRGlyZWN0b3J5IE1vZGUnLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfSE9TVDogJ0V4LiAxLjEuMS4zJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BPUlQ6ICdEZWZhdWx0IDIyJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BSSVZBVEVLRVk6ICdFeC4gL1VzZXJzL3h4eC8uc3NoL2lkX3JzYScsXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QUklWQVRFS0VZX1BBU1NQSFJBU0U6ICdQbGVhc2UgdHlwZSB0aGUgcHJpdmF0ZSBrZXkgcGFzc3BocmFzZScsXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9VUExPQURQQVRIOiAnRXguIHRlc3QvJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0NVU1RPTVVSTDogJ0V4LiBodHRwczovL3Rlc3QuY29tJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSDogJ1VzZWQgdG8gZ2VuZXJhdGUgdGhlIFVSTCBvZiB0aGUgaW1hZ2UnLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRklMRV9VU0VSOiAnRXguIHd3dzpkYXRhJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0ZJTEVfTU9ERTogJ0V4LiAwNjY0JyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0RJUl9NT0RFOiAnRXguIDA3NzUnLFxuXG4gIC8vIFBpY0xpc3RcbiAgUElDQkVEX1BJQ0xJU1Q6ICdQaWNMaXN0JyxcbiAgUElDQkVEX1BJQ0xJU1RfSE9TVDogJ1NldCBIb3N0JyxcbiAgUElDQkVEX1BJQ0xJU1RfUE9SVDogJ1NldCBQb3J0JyxcbiAgUElDQkVEX1BJQ0xJU1RfUElDQkVEOiAnU2V0IFBpY0JlZCcsXG4gIFBJQ0JFRF9QSUNMSVNUX0NPTkZJR05BTUU6ICdTZXQgQ29uZmlnIE5hbWUnLFxuICBQSUNCRURfUElDTElTVF9LRVk6ICdTZXQgS2V5JyxcblxuICAvLyBMc2t5IFByb1xuICBQSUNCRURfTFNLWV9QTElTVDogJ0xza3knLFxuICBQSUNCRURfTFNLWV9WRVJTSU9OOiAnU2V0IFZlcnNpb24nLFxuICBQSUNCRURfTFNLWV9NRVNTQUdFX1ZFUlNJT046ICdFeC4gdjEnLFxuICBQSUNCRURfTFNLWV9IT1NUOiAnU2V0IEhvc3QnLFxuICBQSUNCRURfTFNLWV9NRVNTQUdFX0hPU1Q6ICdFeC4gaHR0cHM6Ly9sc2t5LmNvJyxcbiAgUElDQkVEX0xTS1lfVE9LRU46ICdTZXQgVG9rZW4nLFxuICBQSUNCRURfTFNLWV9NRVNTQUdFX1RPS0VOOiAnRXguIHh4eCcsXG4gIFBJQ0JFRF9MU0tZX1NUUkFURUdZX0lEOiAnU2V0IFN0cmF0ZWd5IElEJyxcbiAgUElDQkVEX0xTS1lfTUVTU0FHRV9TVFJBVEVHWV9JRDogJ0V4LiAxJyxcbiAgUElDQkVEX0xTS1lfQUxCVU1fSUQ6ICdTZXQgQWxidW0gSUQnLFxuICBQSUNCRURfTFNLWV9NRVNTQUdFX0FMQlVNX0lEOiAnT3B0aW9uYWwsIG9ubHkgZm9yIFYyJyxcbiAgUElDQkVEX0xTS1lfUEVSTUlTU0lPTjogJ1NldCBQZXJtaXNzb24nLFxuICBQSUNCRURfTFNLWV9NRVNTQUdFX1BFUk1JU1NJT046ICdFeC4gcHVibGljJyxcblxuICAvLyBBd3NTM1BsaXN0XG4gIFBJQ0JFRF9BV1NTM1BMSVNUOiAnQVdTIFMzJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfQUNDRVNTS0VZSUQ6ICdTZXQgQWNjZXNzS2V5SWQnLFxuICBQSUNCRURfQVdTUzNQTElTVF9TRUNSRVRfQUNDRVNTS0VZOiAnU2V0IFNlY3JldEFjY2Vzc0tleScsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX0JVQ0tFVDogJ1NldCBCdWNrZXQnLFxuICBQSUNCRURfQVdTUzNQTElTVF9SRUdJT046ICdTZXQgUmVnaW9uJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfVVBMT0FEUEFUSDogJ1NldCBVcGxvYWQgUGF0aCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX0VORFBPSU5UOiAnU2V0IEVuZHBvaW50JyxcbiAgUElDQkVEX0FXU1MzUExJU1RfUFJPWFk6ICdTZXQgUHJveHknLFxuICBQSUNCRURfQVdTUzNQTElTVF9VUkxQUkVGSVg6ICdTZXQgQ3VzdG9tIFVSTCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1BBVEhTVFlMRUFDQ0VTUzogJ1NldCBQYXRoU3R5bGVBY2Nlc3MnLFxuICBQSUNCRURfQVdTUzNQTElTVF9SRUpFQ1RVTkFVVEhPUklaRUQ6ICdTZXQgUmVqZWN0VW5hdXRob3JpemVkJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfQUNMOiAnU2V0IEFDTCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX0RJU0FCTEVCVUNLRVRQUkVGSVhUT1VSTDpcbiAgICAnd2hlbiBgcGF0aFN0eWxlQWNjZXNzYCBpcyBlbmFibGVkLCB3aGV0aGVyIHRvIGRpc2FibGUgYWRkaW5nIGJ1Y2tldCBwcmVmaXggdG8gdXJsJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9BQ0NFU1NLRVlJRDogJ0V4LiB4eHgnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1NFQ1JFVF9BQ0NFU1NLRVk6ICdFeC4geHh4JyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9CVUNLRVQ6ICdFeC4gdGVzdCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUkVHSU9OOiAnRXguIHVzLWVhc3QtMScsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfVVBMT0FEUEFUSDogJ0V4LiB0ZXN0L3tmdWxsTmFtZX0nLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0VORFBPSU5UOiAnRXguIGh0dHBzOi8vczMudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20nLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1BST1hZOiAnRXguIGh0dHA6Ly8xMjcuMC4wLjE6MTA4MCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfVVJMUFJFRklYOiAnRXguIGh0dHBzOi8vdGVzdC5jb20nLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1BBVEhTVFlMRUFDQ0VTUzogJ0VuYWJsZSB3aGVuIGBwYXRoU3R5bGVBY2Nlc3NgIGlzIHJlcXVpcmVkJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9SRUpFQ1RVTkFVVEhPUklaRUQ6ICdFbmFibGUgd2hlbiByZWplY3RpbmcgaW52YWxpZCBUTFMgY2VydGlmaWNhdGUgY29ubmVjdGlvbiBpcyByZXF1aXJlZCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfQUNMOiAnRXguIHB1YmxpYy1yZWFkJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9ESVNBQkxFQlVDS0VUUFJFRklYVE9VUkw6ICdFbmFibGUgd2hlbiBgcGF0aFN0eWxlQWNjZXNzYCBpcyBlbmFibGVkJyxcblxuICBCVUlMRElOX1JFTkFNRV9GT1JNQVQ6ICdTZXQgcmVuYW1lIGZvcm1hdCcsXG4gIEJVSUxESU5fUkVOQU1FX0VOQUJMRTogJ0VuYWJsZSByZW5hbWUnLFxuXG4gIEJVSUxESU5fV0FURVJNQVJLX0lTQUREV0FURVJNQVJLOiAnV2hldGhlciB0byBhZGQgd2F0ZXJtYXJrJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9JU0FERFdBVEVSTUFSSzogJ0VuYWJsZSB3aGVuIHdhdGVybWFyayBpcyByZXF1aXJlZCcsXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RZUEU6ICdTZXQgd2F0ZXJtYXJrIHR5cGUnLFxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1RZUEU6ICdQbGVhc2Ugc2VsZWN0IHdhdGVybWFyayB0eXBlJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfSVNGVUxMU0NSRUVOV0FURVJNQVJLOiAnV2hldGhlciB0byB1c2UgZnVsbC1zY3JlZW4gd2F0ZXJtYXJrJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9JU0ZVTExTQ1JFRU5XQVRFUk1BUks6ICdFbmFibGUgd2hlbiBmdWxsLXNjcmVlbiB3YXRlcm1hcmsgaXMgcmVxdWlyZWQnLFxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktERUdSRUU6ICdTZXQgd2F0ZXJtYXJrIGFuZ2xlJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktERUdSRUU6ICdQbGVhc2UgZW50ZXIgYSBudW1iZXInLFxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhUOiAnU2V0IHdhdGVybWFyayB0ZXh0JyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktURVhUOiAnUGxlYXNlIGVudGVyIHdhdGVybWFyayB0ZXh0JyxcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVEZPTlRQQVRIOiAnU2V0IHdhdGVybWFyayBmb250JyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UUEFUSDogJ1BsZWFzZSBlbnRlciB0aGUgd2F0ZXJtYXJrIGZvbnQgZmlsZSBwYXRoJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVFJBVElPOiAnU2V0IHRoZSByYXRpbyBvZiB0aGUgd2F0ZXJtYXJrIHRvIHRoZSBpbWFnZScsXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVFJBVElPOiAnUGxlYXNlIGVudGVyIGEgbnVtYmVyIGJldHdlZW4gMC0xJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVENPTE9SOiAnU2V0IHdhdGVybWFyayBmb250IGNvbG9yJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UQ09MT1I6ICdQbGVhc2UgZW50ZXIgdGhlIFJHQiBjb2xvciB2YWx1ZScsXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0lNQUdFUEFUSDogJ1NldCB3YXRlcm1hcmsgaW1hZ2UgcGF0aCcsXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLSU1BR0VQQVRIOiAnUGxlYXNlIGVudGVyIHRoZSB3YXRlcm1hcmsgaW1hZ2UgcGF0aCcsXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1BPU0lUSU9OOiAnU2V0IHdhdGVybWFyayBwb3NpdGlvbicsXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLUE9TSVRJT046ICdQbGVhc2Ugc2VsZWN0IHdhdGVybWFyayBwb3NpdGlvbicsXG5cbiAgQlVJTERJTl9DT01QUkVTU19RVUFMSVRZOiAnU2V0IGltYWdlIHF1YWxpdHknLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUVVBTElUWTogJ1BsZWFzZSBlbnRlciBhbiBpbnRlZ2VyIGJldHdlZW4gMC0xMDAnLFxuICBCVUlMRElOX0NPTVBSRVNTX0lTQ09OVkVSVDogJ1doZXRoZXIgdG8gcGVyZm9ybSBmb3JtYXQgY29udmVyc2lvbicsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU0NPTlZFUlQ6ICdFbmFibGUgd2hlbiBmb3JtYXQgY29udmVyc2lvbiBpcyByZXF1aXJlZCcsXG4gIEJVSUxESU5fQ09NUFJFU1NfQ09OVkVSVEZPUk1BVDogJ1NldCBjb252ZXJzaW9uIGZvcm1hdCcsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9DT05WRVJURk9STUFUOiAnUGxlYXNlIHNlbGVjdCBjb252ZXJzaW9uIGZvcm1hdCcsXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkU6ICdXaGV0aGVyIHRvIHJlc2l6ZSB0aGUgaW1hZ2UnLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRVNJWkU6ICdFbmFibGUgd2hlbiBpbWFnZSByZXNpemluZyBpcyByZXF1aXJlZCcsXG4gIEJVSUxESU5fQ09NUFJFU1NfUkVTSVpFV0lEVEg6ICdTZXQgcmVzaXppbmcgd2lkdGgnLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFV0lEVEg6ICdQbGVhc2UgZW50ZXIgYSBudW1iZXInLFxuICBCVUlMRElOX0NPTVBSRVNTX1JFU0laRUhFSUdIVDogJ1NldCByZXNpemluZyBoZWlnaHQnLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFSEVJR0hUOiAnUGxlYXNlIGVudGVyIGEgbnVtYmVyJyxcbiAgQlVJTERJTl9DT01QUkVTU19JU1JFU0laRUJZUEVSQ0VOVDogJ1doZXRoZXIgdG8gcmVzaXplIHRoZSBpbWFnZSBieSBwZXJjZW50YWdlJyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVTSVpFQllQRVJDRU5UOiAnRW5hYmxlIHdoZW4gcmVzaXppbmcgYnkgcGVyY2VudGFnZSBpcyByZXF1aXJlZCcsXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNGTElQOiAnV2hldGhlciB0byBmbGlwIHRoZSBpbWFnZSB2ZXJ0aWNhbGx5JyxcbiAgQlVJTERJTl9DT01QUkVTU19JU0ZMT1A6ICdXaGV0aGVyIHRvIGZsaXAgdGhlIGltYWdlIGhvcml6b250YWxseScsXG4gIEJVSUxESU5fQ09NUFJFU1NfUkVTSVpFUEVSQ0VOVDogJ1NldCByZXNpemluZyBwZXJjZW50YWdlJyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRVBFUkNFTlQ6ICdQbGVhc2UgZW50ZXIgYSBudW1iZXInLFxuICBCVUlMRElOX0NPTVBSRVNTX1NLSVBSRVNJWkVPRlNNQUxMSU1HOiAnV2hldGhlciB0byBza2lwIHJlc2l6aW5nIG9mIHNtYWxsIGltYWdlcycsXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNST1RBVEU6ICdXaGV0aGVyIHRvIHJvdGF0ZSB0aGUgaW1hZ2UnLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNST1RBVEU6ICdFbmFibGUgd2hlbiBpbWFnZSByb3RhdGlvbiBpcyByZXF1aXJlZCcsXG4gIEJVSUxESU5fQ09NUFJFU1NfUk9UQVRFREVHUkVFOiAnU2V0IHJvdGF0aW9uIGFuZ2xlJyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JPVEFURURFR1JFRTogJ1BsZWFzZSBlbnRlciBhIG51bWJlciwgY2FuIGJlIG5lZ2F0aXZlJyxcbiAgQlVJTERJTl9DT01QUkVTU19JU1JFTU9WRUVYSUY6ICdXaGV0aGVyIHRvIHJlbW92ZSBFWElGIGluZm9ybWF0aW9uJyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVNT1ZFRVhJRjogJ0VuYWJsZSB3aGVuIHJlbW92aW5nIEVYSUYgaW5mb3JtYXRpb24gaXMgcmVxdWlyZWQnLFxuICAvLyBQbHVnaW4gSGFuZGxlclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9TVUNDRVNTOiAnUGx1Z2luIGluc3RhbGxlZCBzdWNjZXNzZnVsbHknLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRUQ6ICdQbHVnaW4gaW5zdGFsbGF0aW9uIGZhaWxlZCcsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRF9SRUFTT046XG4gICAgJ1BsdWdpbiBpbnN0YWxsYXRpb24gZmFpbGVkLCBlcnJvciBjb2RlIGlzICR7Y29kZX0sIGVycm9yIGxvZyBpcyBcXG4gJHtkYXRhfScsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRF9QQVRIOlxuICAgICdQbHVnaW4gaW5zdGFsbGF0aW9uIGZhaWxlZCwgcGxlYXNlIGVudGVyIGEgdmFsaWQgcGx1Z2luIG5hbWUgb3IgdmFsaWQgaW5zdGFsbGF0aW9uIHBhdGgnLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX1NVQ0NFU1M6ICdQbHVnaW4gdW5pbnN0YWxsZWQgc3VjY2Vzc2Z1bGx5JyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRUQ6ICdQbHVnaW4gdW5pbnN0YWxsIGZhaWxlZCcsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1JFQVNPTjpcbiAgICAnUGx1Z2luIHVuaW5zdGFsbCBmYWlsZWQsIGVycm9yIGNvZGUgaXMgJHtjb2RlfSwgZXJyb3IgbG9nIGlzIFxcbiAke2RhdGF9JyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfVkFMSUQ6ICdQbHVnaW4gdW5pbnN0YWxsIGZhaWxlZCwgcGxlYXNlIGVudGVyIGEgdmFsaWQgcGx1Z2luIG5hbWUnLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX1NVQ0NFU1M6ICdQbHVnaW4gdXBkYXRlZCBzdWNjZXNzZnVsbHknLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRDogJ1BsdWdpbiB1cGRhdGUgZmFpbGVkJyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfUkVBU09OOiAnUGx1Z2luIHVwZGF0ZSBmYWlsZWQsIGVycm9yIGNvZGUgaXMgJHtjb2RlfSwgZXJyb3IgbG9nIGlzIFxcbiAke2RhdGF9JyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfVkFMSUQ6ICdQbHVnaW4gdXBkYXRlIGZhaWxlZCwgcGxlYXNlIGVudGVyIGEgdmFsaWQgcGx1Z2luIG5hbWUnXG59XG4iLCJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnXG5pbXBvcnQgeyByZW1vdmUsIGVuc3VyZUZpbGVTeW5jLCBwYXRoRXhpc3RzU3luYyB9IGZyb20gJ2ZzLWV4dHJhJ1xuaW1wb3J0IHsgZ2V0LCBzZXQsIHVuc2V0IH0gZnJvbSAnbG9kYXNoJ1xuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ29zJ1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcblxuaW1wb3J0IHsgQ29tbWFuZGVyIH0gZnJvbSAnLi4vbGliL0NvbW1hbmRlcidcbmltcG9ydCB7IExpZmVjeWNsZVBsdWdpbnMsIHNldEN1cnJlbnRQbHVnaW5OYW1lIH0gZnJvbSAnLi4vbGliL0xpZmVjeWNsZVBsdWdpbnMnXG5pbXBvcnQgeyBMb2dnZXIgfSBmcm9tICcuLi9saWIvTG9nZ2VyJ1xuaW1wb3J0IHsgUGx1Z2luSGFuZGxlciB9IGZyb20gJy4uL2xpYi9QbHVnaW5IYW5kbGVyJ1xuaW1wb3J0IHsgUGx1Z2luTG9hZGVyIH0gZnJvbSAnLi4vbGliL1BsdWdpbkxvYWRlcidcbmltcG9ydCB7IFJlcXVlc3QgfSBmcm9tICcuLi9saWIvUmVxdWVzdCdcblxuaW1wb3J0IHsgTGlmZWN5Y2xlIH0gZnJvbSAnLi9MaWZlY3ljbGUnXG5cbmltcG9ydCB1cGxvYWRlcnMgZnJvbSAnLi4vcGx1Z2lucy91cGxvYWRlcidcbmltcG9ydCB0cmFuc2Zvcm1lcnMgZnJvbSAnLi4vcGx1Z2lucy90cmFuc2Zvcm1lcidcblxuaW1wb3J0IGdldENsaXBib2FyZEltYWdlIGZyb20gJy4uL3V0aWxzL2dldENsaXBib2FyZEltYWdlJ1xuXG5pbXBvcnQgeyBpc0NvbmZpZ0tleUluQmxhY2tMaXN0LCBpc0lucHV0Q29uZmlnVmFsaWQgfSBmcm9tICcuLi91dGlscy9jb21tb24nXG5pbXBvcnQgREIgZnJvbSAnLi4vdXRpbHMvZGInXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50LCBJQnVzRXZlbnQgfSBmcm9tICcuLi91dGlscy9lbnVtJ1xuaW1wb3J0IHsgZXZlbnRCdXMgfSBmcm9tICcuLi91dGlscy9ldmVudEJ1cydcblxuaW1wb3J0IHsgSTE4bk1hbmFnZXIgfSBmcm9tICcuLi9pMThuJ1xuXG5pbXBvcnQge1xuICBJSGVscGVyLFxuICBJSW1nSW5mbyxcbiAgSUNvbmZpZyxcbiAgSVBpY0dvLFxuICBJU3RyaW5nS2V5TWFwLFxuICBJUGx1Z2luTG9hZGVyLFxuICBJSTE4bk1hbmFnZXIsXG4gIElQaWNHb1BsdWdpbixcbiAgSVBpY0dvUGx1Z2luSW50ZXJmYWNlLFxuICBJUmVxdWVzdFxufSBmcm9tICcuLi90eXBlcydcblxuZXhwb3J0IGNsYXNzIFBpY0dvIGV4dGVuZHMgRXZlbnRFbWl0dGVyIGltcGxlbWVudHMgSVBpY0dvIHtcbiAgcHJpdmF0ZSBfY29uZmlnITogSUNvbmZpZ1xuICBwcml2YXRlIGxpZmVjeWNsZSE6IExpZmVjeWNsZVxuICBwcml2YXRlIGRiITogREJcbiAgcHJpdmF0ZSBfcGx1Z2luTG9hZGVyITogUGx1Z2luTG9hZGVyXG4gIGNvbmZpZ1BhdGg6IHN0cmluZ1xuICBiYXNlRGlyITogc3RyaW5nXG4gIGhlbHBlciE6IElIZWxwZXJcbiAgbG9nOiBMb2dnZXJcbiAgY21kOiBDb21tYW5kZXJcbiAgb3V0cHV0OiBJSW1nSW5mb1tdXG4gIGlucHV0OiBhbnlbXVxuICByYXdJbnB1dDogYW55W11cbiAgcGx1Z2luSGFuZGxlcjogUGx1Z2luSGFuZGxlclxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgd2lsbCBiZSByZW1vdmVkIGluIHYxLjUuMCtcbiAgICpcbiAgICogdXNlIHJlcXVlc3QgaW5zdGVhZFxuICAgKi9cbiAgUmVxdWVzdCE6IFJlcXVlc3RcbiAgaTE4biE6IElJMThuTWFuYWdlclxuICBWRVJTSU9OOiBzdHJpbmcgPSBwcm9jZXNzLmVudi5QSUNHT19WRVJTSU9OXG4gIEdVSV9WRVJTSU9OPzogc3RyaW5nXG5cbiAgZ2V0IHBsdWdpbkxvYWRlcigpOiBJUGx1Z2luTG9hZGVyIHtcbiAgICByZXR1cm4gdGhpcy5fcGx1Z2luTG9hZGVyXG4gIH1cblxuICBjb25zdHJ1Y3Rvcihjb25maWdQYXRoOiBzdHJpbmcgPSAnJykge1xuICAgIHN1cGVyKClcbiAgICB0aGlzLmNvbmZpZ1BhdGggPSBjb25maWdQYXRoXG4gICAgdGhpcy5pbnB1dCA9IFtdXG4gICAgdGhpcy5yYXdJbnB1dCA9IFtdXG4gICAgdGhpcy5vdXRwdXQgPSBbXVxuICAgIHRoaXMuaGVscGVyID0ge1xuICAgICAgdHJhbnNmb3JtZXI6IG5ldyBMaWZlY3ljbGVQbHVnaW5zKCd0cmFuc2Zvcm1lcicpLFxuICAgICAgdXBsb2FkZXI6IG5ldyBMaWZlY3ljbGVQbHVnaW5zKCd1cGxvYWRlcicpLFxuICAgICAgYmVmb3JlVHJhbnNmb3JtUGx1Z2luczogbmV3IExpZmVjeWNsZVBsdWdpbnMoJ2JlZm9yZVRyYW5zZm9ybVBsdWdpbnMnKSxcbiAgICAgIGJlZm9yZVVwbG9hZFBsdWdpbnM6IG5ldyBMaWZlY3ljbGVQbHVnaW5zKCdiZWZvcmVVcGxvYWRQbHVnaW5zJyksXG4gICAgICBhZnRlclVwbG9hZFBsdWdpbnM6IG5ldyBMaWZlY3ljbGVQbHVnaW5zKCdhZnRlclVwbG9hZFBsdWdpbnMnKVxuICAgIH1cbiAgICB0aGlzLmluaXRDb25maWdQYXRoKClcbiAgICB0aGlzLmxvZyA9IG5ldyBMb2dnZXIodGhpcylcbiAgICB0aGlzLmNtZCA9IG5ldyBDb21tYW5kZXIodGhpcylcbiAgICB0aGlzLnBsdWdpbkhhbmRsZXIgPSBuZXcgUGx1Z2luSGFuZGxlcih0aGlzKVxuICAgIHRoaXMuaW5pdENvbmZpZygpXG4gICAgdGhpcy5pbml0KClcbiAgfVxuXG4gIHByaXZhdGUgaW5pdENvbmZpZ1BhdGgoKTogdm9pZCB7XG4gICAgdGhpcy5jb25maWdQYXRoID0gdGhpcy5jb25maWdQYXRoIHx8IHBhdGguam9pbihob21lZGlyKCksICcucGljbGlzdC9jb25maWcuanNvbicpXG4gICAgaWYgKHBhdGguZXh0bmFtZSh0aGlzLmNvbmZpZ1BhdGgpLnRvVXBwZXJDYXNlKCkgIT09ICcuSlNPTicpIHtcbiAgICAgIHRoaXMuY29uZmlnUGF0aCA9ICcnXG4gICAgICB0aHJvdyBFcnJvcignVGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBvbmx5IHN1cHBvcnRzIEpTT04gZm9ybWF0LicpXG4gICAgfVxuICAgIHRoaXMuYmFzZURpciA9IHBhdGguZGlybmFtZSh0aGlzLmNvbmZpZ1BhdGgpXG4gICAgaWYgKCFwYXRoRXhpc3RzU3luYyh0aGlzLmNvbmZpZ1BhdGgpKSB7XG4gICAgICBlbnN1cmVGaWxlU3luYyhgJHt0aGlzLmNvbmZpZ1BhdGh9YClcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluaXRDb25maWcoKTogdm9pZCB7XG4gICAgdGhpcy5kYiA9IG5ldyBEQih0aGlzKVxuICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuZGIucmVhZCh0cnVlKSBhcyBJQ29uZmlnXG4gIH1cblxuICBwcml2YXRlIGluaXQoKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIGluaXQgMThuIGF0IGZpcnN0XG4gICAgICB0aGlzLmkxOG4gPSBuZXcgSTE4bk1hbmFnZXIodGhpcylcbiAgICAgIHRoaXMuUmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHRoaXMpXG4gICAgICB0aGlzLl9wbHVnaW5Mb2FkZXIgPSBuZXcgUGx1Z2luTG9hZGVyKHRoaXMpXG4gICAgICAvLyBsb2FkIHNlbGYgcGx1Z2luc1xuICAgICAgc2V0Q3VycmVudFBsdWdpbk5hbWUoJ3BpY2dvJylcbiAgICAgIHVwbG9hZGVycyh0aGlzKS5yZWdpc3Rlcih0aGlzKVxuICAgICAgdHJhbnNmb3JtZXJzKHRoaXMpLnJlZ2lzdGVyKHRoaXMpXG4gICAgICBzZXRDdXJyZW50UGx1Z2luTmFtZSgnJylcbiAgICAgIC8vIGxvYWQgdGhpcmQtcGFydHkgcGx1Z2luc1xuICAgICAgdGhpcy5fcGx1Z2luTG9hZGVyLmxvYWQoKVxuICAgICAgdGhpcy5saWZlY3ljbGUgPSBuZXcgTGlmZWN5Y2xlKHRoaXMpXG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICB0aGlzLmVtaXQoSUJ1aWxkSW5FdmVudC5VUExPQURfUFJPR1JFU1MsIC0xKVxuICAgICAgdGhpcy5sb2cuZXJyb3IoZSlcbiAgICAgIHRocm93IGVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogZWFzaWx5IG1hbm51YWxseSBsb2FkIGEgcGx1Z2luXG4gICAqIGlmIHByb3ZpZGUgcGx1Z2luIG5hbWUsIHdpbGwgcmVnaXN0ZXIgcGx1Z2luIGJ5IG5hbWVcbiAgICogb3IganVzdCBpbnN0YW50aWF0ZSBhIHBsdWdpblxuICAgKi9cbiAgdXNlKHBsdWdpbjogSVBpY0dvUGx1Z2luLCBuYW1lPzogc3RyaW5nKTogSVBpY0dvUGx1Z2luSW50ZXJmYWNlIHtcbiAgICBpZiAobmFtZSkge1xuICAgICAgdGhpcy5wbHVnaW5Mb2FkZXIucmVnaXN0ZXJQbHVnaW4obmFtZSwgcGx1Z2luKVxuICAgICAgcmV0dXJuIHRoaXMucGx1Z2luTG9hZGVyLmdldFBsdWdpbihuYW1lKSFcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcGx1Z2luSW5zdGFuY2UgPSBwbHVnaW4odGhpcylcbiAgICAgIHJldHVybiBwbHVnaW5JbnN0YW5jZVxuICAgIH1cbiAgfVxuXG4gIHJlZ2lzdGVyQ29tbWFuZHMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29uZmlnUGF0aCAhPT0gJycpIHtcbiAgICAgIHRoaXMuY21kLmluaXQoKVxuICAgICAgdGhpcy5jbWQubG9hZENvbW1hbmRzKClcbiAgICB9XG4gIH1cblxuICBnZXRDb25maWc8VD4obmFtZT86IHN0cmluZyk6IFQge1xuICAgIGlmICghbmFtZSkge1xuICAgICAgdGhpcy5fY29uZmlnID0gdGhpcy5kYi5yZWFkKHRydWUpIGFzIElDb25maWdcbiAgICAgIHJldHVybiB0aGlzLl9jb25maWcgYXMgdW5rbm93biBhcyBUXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBnZXQodGhpcy5fY29uZmlnLCBuYW1lKVxuICAgIH1cbiAgfVxuXG4gIHNhdmVDb25maWcoY29uZmlnOiBJU3RyaW5nS2V5TWFwPGFueT4pOiB2b2lkIHtcbiAgICBpZiAoIWlzSW5wdXRDb25maWdWYWxpZChjb25maWcpKSB7XG4gICAgICB0aGlzLmxvZy53YXJuKCd0aGUgZm9ybWF0IG9mIGNvbmZpZyBpcyBpbnZhbGlkLCBwbGVhc2UgcHJvdmlkZSBvYmplY3QnKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRoaXMuc2V0Q29uZmlnKGNvbmZpZylcbiAgICB0aGlzLmRiLnNhdmVDb25maWcoY29uZmlnKVxuICB9XG5cbiAgcmVtb3ZlQ29uZmlnKGtleTogc3RyaW5nLCBwcm9wTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCFrZXkgfHwgIXByb3BOYW1lKSByZXR1cm5cbiAgICBpZiAoaXNDb25maWdLZXlJbkJsYWNrTGlzdChrZXkpKSB7XG4gICAgICB0aGlzLmxvZy53YXJuKGB0aGUgY29uZmlnLiR7a2V5fSBjYW4ndCBiZSByZW1vdmVkYClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB0aGlzLnVuc2V0Q29uZmlnKGtleSwgcHJvcE5hbWUpXG4gICAgdGhpcy5kYi51bnNldChrZXksIHByb3BOYW1lKVxuICB9XG5cbiAgc2V0Q29uZmlnKGNvbmZpZzogSVN0cmluZ0tleU1hcDxhbnk+KTogdm9pZCB7XG4gICAgaWYgKCFpc0lucHV0Q29uZmlnVmFsaWQoY29uZmlnKSkge1xuICAgICAgdGhpcy5sb2cud2FybigndGhlIGZvcm1hdCBvZiBjb25maWcgaXMgaW52YWxpZCwgcGxlYXNlIHByb3ZpZGUgb2JqZWN0JylcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBPYmplY3Qua2V5cyhjb25maWcpLmZvckVhY2goKG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKGlzQ29uZmlnS2V5SW5CbGFja0xpc3QobmFtZSkpIHtcbiAgICAgICAgdGhpcy5sb2cud2FybihgdGhlIGNvbmZpZy4ke25hbWV9IGNhbid0IGJlIG1vZGlmaWVkYClcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1keW5hbWljLWRlbGV0ZVxuICAgICAgICBkZWxldGUgY29uZmlnW25hbWVdXG4gICAgICB9XG4gICAgICBzZXQodGhpcy5fY29uZmlnLCBuYW1lLCBjb25maWdbbmFtZV0pXG4gICAgICBldmVudEJ1cy5lbWl0KElCdXNFdmVudC5DT05GSUdfQ0hBTkdFLCB7XG4gICAgICAgIGNvbmZpZ05hbWU6IG5hbWUsXG4gICAgICAgIHZhbHVlOiBjb25maWdbbmFtZV1cbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIHVuc2V0Q29uZmlnKGtleTogc3RyaW5nLCBwcm9wTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCFrZXkgfHwgIXByb3BOYW1lKSByZXR1cm5cbiAgICBpZiAoaXNDb25maWdLZXlJbkJsYWNrTGlzdChrZXkpKSB7XG4gICAgICB0aGlzLmxvZy53YXJuKGB0aGUgY29uZmlnLiR7a2V5fSBjYW4ndCBiZSB1bnNldGApXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdW5zZXQodGhpcy5nZXRDb25maWcoa2V5KSwgcHJvcE5hbWUpXG4gIH1cblxuICBnZXQgcmVxdWVzdCgpOiBJUmVxdWVzdFsncmVxdWVzdCddIHtcbiAgICByZXR1cm4gdGhpcy5SZXF1ZXN0LnJlcXVlc3QuYmluZCh0aGlzLlJlcXVlc3QpXG4gIH1cblxuICBhc3luYyB1cGxvYWQoaW5wdXQ/OiBhbnlbXSk6IFByb21pc2U8SUltZ0luZm9bXSB8IEVycm9yPiB7XG4gICAgaWYgKHRoaXMuY29uZmlnUGF0aCA9PT0gJycpIHtcbiAgICAgIHRoaXMubG9nLmVycm9yKCdObyBjb25maWcgZmlsZSBmb3VuZCwgcGxlYXNlIGNoZWNrIHlvdXIgY29uZmlnIGZpbGUgcGF0aCcpXG4gICAgICByZXR1cm4gW11cbiAgICB9XG4gICAgLy8gdXBsb2FkIGZyb20gY2xpcGJvYXJkXG4gICAgaWYgKGlucHV0ID09PSB1bmRlZmluZWQgfHwgaW5wdXQubGVuZ3RoID09PSAwKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IGltZ1BhdGgsIHNob3VsZEtlZXBBZnRlclVwbG9hZGluZyB9ID0gYXdhaXQgZ2V0Q2xpcGJvYXJkSW1hZ2UodGhpcylcbiAgICAgICAgY29uc3QgY2xlYW51cCA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgICBpZiAoIXNob3VsZEtlZXBBZnRlclVwbG9hZGluZykge1xuICAgICAgICAgICAgcmVtb3ZlKGltZ1BhdGgpLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmxvZy5lcnJvcihlKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGltZ1BhdGggPT09ICdubyBpbWFnZScpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ltYWdlIG5vdCBmb3VuZCBpbiBjbGlwYm9hcmQnKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMub25jZShJQnVpbGRJbkV2ZW50LkZBSUxFRCwgY2xlYW51cClcbiAgICAgICAgICB0aGlzLm9uY2UoSUJ1aWxkSW5FdmVudC5GSU5JU0hFRCwgY2xlYW51cClcbiAgICAgICAgICBjb25zdCB7IG91dHB1dCB9ID0gYXdhaXQgdGhpcy5saWZlY3ljbGUuc3RhcnQoW2ltZ1BhdGhdKVxuICAgICAgICAgIHJldHVybiBvdXRwdXRcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLmVtaXQoSUJ1aWxkSW5FdmVudC5GQUlMRUQsIGUpXG4gICAgICAgIHRocm93IGVcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdXBsb2FkIGZyb20gcGF0aFxuICAgICAgY29uc3QgeyBvdXRwdXQgfSA9IGF3YWl0IHRoaXMubGlmZWN5Y2xlLnN0YXJ0KGlucHV0KVxuICAgICAgcmV0dXJuIG91dHB1dFxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgSVBpY0dvLCBJUGljR29QbHVnaW4gfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCBJbWdGcm9tUGF0aCBmcm9tICcuL3BhdGgnXG5pbXBvcnQgSW1nRnJvbUJhc2U2NCBmcm9tICcuL2Jhc2U2NCdcblxuY29uc3QgYnVpbGRJblRyYW5zZm9ybWVyczogSVBpY0dvUGx1Z2luID0gKCkgPT4ge1xuICByZXR1cm4ge1xuICAgIHJlZ2lzdGVyKGN0eDogSVBpY0dvKSB7XG4gICAgICBjdHguaGVscGVyLnRyYW5zZm9ybWVyLnJlZ2lzdGVyKCdwYXRoJywgSW1nRnJvbVBhdGgpXG4gICAgICBjdHguaGVscGVyLnRyYW5zZm9ybWVyLnJlZ2lzdGVyKCdiYXNlNjQnLCBJbWdGcm9tQmFzZTY0KVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBidWlsZEluVHJhbnNmb3JtZXJzXG4iXSwibmFtZXMiOlsiY3JlYXRlQ29tbWFuZCIsImNtZCIsImNvbW1hbmQiLCJkZXNjcmlwdGlvbiIsImFsaWFzIiwiYWN0aW9uIiwib3B0aW9ucyIsInByb2dyYW0iLCJwcm94eSIsIm9wdGlvbiIsInJlZ2lzdHJ5IiwicGx1Z2luSGFuZGxlciIsImhhbmRsZSIsImN0eCIsInBsdWdpbnMiLCJpbnN0YWxsIiwiY2F0Y2giLCJlIiwibG9nIiwiZXJyb3IiLCJ1bmluc3RhbGwiLCJ1cGRhdGUiLCJjb25maWciLCJyYW5kb21TdHJpbmdHZW5lcmF0b3IiLCJsZW5ndGgiLCJjaGFycyIsIkFycmF5IiwiZnJvbSIsIm1hcCIsImNoYXJBdCIsIk1hdGgiLCJmbG9vciIsInJhbmRvbSIsImpvaW4iLCJmb3JtYXRIZWxwZXIiLCJudW0iLCJ0b1N0cmluZyIsImdldE1kNSIsImlucHV0IiwiY3J5cHRvIiwiY3JlYXRlSGFzaCIsImRpZ2VzdCIsInJlbmFtZUZpbGVOYW1lV2l0aEN1c3RvbVN0cmluZyIsIm9sZE5hbWUiLCJjdXN0b21Gb3JtYXQiLCJhZmZpeEZpbGVOYW1lIiwiZmlsZUJ1ZmZlciIsIm5vdyIsIkRhdGUiLCJ5ZWFyIiwiZ2V0RnVsbFllYXIiLCJmaWxlYmFzZW5hbWUiLCJwYXRoIiwiYmFzZW5hbWUiLCJleHRuYW1lIiwiY29udmVyc2lvbk1hcCIsInNsaWNlIiwiZ2V0TW9udGgiLCJnZXREYXRlIiwiZ2V0SG91cnMiLCJnZXRNaW51dGVzIiwiZ2V0U2Vjb25kcyIsImdldE1pbGxpc2Vjb25kcyIsInBhZFN0YXJ0IiwidXVpZHY0IiwicmVwbGFjZSIsImdldFRpbWUiLCJ1bmRlZmluZWQiLCJPYmplY3QiLCJrZXlzIiwic29tZSIsIml0ZW0iLCJpbmNsdWRlcyIsImV4dCIsIm5ld05hbWUiLCJyZWR1Y2UiLCJhY2MiLCJjdXIiLCJSZWdFeHAiLCJfIiwiZ3JvdXAxIiwicGFyc2VJbnQiLCJfcmVzdWx0Iiwia2V5IiwiY291bnQiLCJtYXgiLCJkaXJuYW1lIiwic3BsaXQiLCJzZXAiLCJhIiwiYiIsImlzVXJsIiwidXJsIiwidGVzdCIsImlzVXJsRW5jb2RlIiwiZGVjb2RlVVJJIiwiaGFuZGxlVXJsRW5jb2RlIiwiZW5jb2RlVVJJIiwiZ2V0SW1hZ2VTaXplIiwiZmlsZSIsIndpZHRoIiwiaGVpZ2h0IiwidHlwZSIsImltYWdlU2l6ZSIsInJlYWwiLCJnZXRGU0ZpbGUiLCJhc3luYyIsImZpbGVQYXRoIiwiZmlsZU5hbWUiLCJidWZmZXIiLCJyZWFkRmlsZSIsInN1Y2Nlc3MiLCJfYSIsInJlYXNvbiIsImdldFVSTEZpbGUiLCJ0aW1lb3V0SWQiLCJyZXF1ZXN0Rm4iLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInJlcyIsInJlcXVlc3QiLCJtZXRob2QiLCJyZXNvbHZlV2l0aEZ1bGxSZXNwb25zZSIsInJlc3BvbnNlVHlwZSIsInRoZW4iLCJyZXNwIiwiZGF0YSIsImNsZWFyVGltZW91dCIsInVybFBhdGgiLCJVUkwiLCJwYXRobmFtZSIsInNlYXJjaFBhcmFtcyIsImdldCIsInN0YXJ0c1dpdGgiLCJtZXNzYWdlIiwidGltZW91dFByb21pc2UiLCJzZXRUaW1lb3V0IiwicmFjZSIsImdldFBsdWdpbk5hbWVUeXBlIiwibmFtZSIsImlzU2ltcGxlTmFtZSIsIm5hbWVPclBhdGgiLCJpc0Fic29sdXRlIiwicGx1Z2luUGF0aCIsInByb2Nlc3MiLCJjd2QiLCJmcyIsImV4aXN0c1N5bmMiLCJoYW5kbGVDb21wbGV0ZVBsdWdpbk5hbWUiLCJzY29wZSIsImdldFByb2Nlc3NQbHVnaW5OYW1lIiwibG9nZ2VyIiwiY29uc29sZSIsImhhbmRsZVVuaXhTdHlsZVBhdGgiLCJ3YXJuIiwiZ2V0Tm9ybWFsUGx1Z2luTmFtZSIsInJlbW92ZVBsdWdpblZlcnNpb24iLCJwYWNrYWdlSlNPTlBhdGgiLCJwb3NpeCIsInBrZyIsInJlYWRKU09OU3luYyIsInBhdGhTdHIiLCJyZWciLCJtYXRjaEFyciIsIm1hdGNoIiwiY29uZmlnQmxhY2tMaXN0IiwiaXNDb25maWdLZXlJbkJsYWNrTGlzdCIsImJsYWNrSXRlbSIsImlzSW5wdXRDb25maWdWYWxpZCIsImlzQXJyYXkiLCJzYWZlUGFyc2UiLCJzdHIiLCJKU09OIiwicGFyc2UiLCJmb3JjZU51bWJlciIsImlzTmFOIiwiTnVtYmVyIiwiaXNEZXYiLCJlbnYiLCJOT0RFX0VOViIsImRlZmF1bHRXYXRlcm1hcmtJbWFnZVBhdGgiLCJfX2Rpcm5hbWUiLCJBZGRXYXRlcm1hcmsiLCJpbWciLCJ3YXRlcm1hcmtUeXBlIiwiZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoIiwiaXNGdWxsU2NyZWVuV2F0ZXJtYXJrIiwid2F0ZXJtYXJrRGVncmVlIiwidGV4dCIsIndhdGVybWFya0ZvbnRQYXRoIiwid2F0ZXJtYXJrU2NhbGVSYXRpbyIsIndhdGVybWFya0NvbG9yIiwid2F0ZXJtYXJrSW1hZ2VQYXRoIiwicG9zaXRpb24iLCJpbWFnZSIsInNoYXJwIiwiYW5pbWF0ZWQiLCJpbWdXaWR0aCIsIm1ldGFkYXRhIiwid2F0ZXJtYXJrIiwidG9CdWZmZXIiLCJjb2xvciIsImZvbnRGYW1pbHkiLCJhbmNob3IiLCJhdHRyaWJ1dGVzIiwiZmlsbCIsInRleHRTVkciLCJUZXh0VG9TVkciLCJsb2FkU3luYyIsImdldFNWRyIsIkJ1ZmZlciIsInRleHQyU1ZHIiwid2F0ZXJtYXJrV2lkdGgiLCJ3YXRlcm1hcmtIZWlnaHQiLCJnZXRTaXplIiwid2F0ZXJtYXJrUmVzaXplV2lkdGgiLCJ3YXRlcm1hcmtSZXNpemVIZWlnaHQiLCJyZXNpemUiLCJmaXQiLCJyb3RhdGUiLCJiYWNrZ3JvdW5kIiwiciIsImciLCJhbHBoYSIsImNyZWF0ZVdhdGVybWFyayIsImNvbXBvc2l0ZSIsImdyYXZpdHkiLCJ0aWxlIiwidmFsaWRQYXJhbSIsInBhcmFtcyIsImV2ZXJ5IiwicGFyYW0iLCJhdmFpbGFibGVDb252ZXJ0Rm9ybWF0TGlzdCIsImltYWdlRm9ybWF0TGlzdCIsInZhbGlkT3V0cHV0Rm9ybWF0IiwiZm9ybWF0IiwiaW1hZ2VBZGRXYXRlck1hcmsiLCJ3YXRlcm1hcmtUZXh0Iiwid2F0ZXJtYXJrUG9zaXRpb24iLCJmb3JtYXRPcHRpb25zIiwiZm9ybWF0Q29udmVydE9iaiIsInF1YWxpdHkiLCJpc0NvbnZlcnQiLCJjb252ZXJ0Rm9ybWF0IiwiaXNSZVNpemUiLCJyZVNpemVIZWlnaHQiLCJyZVNpemVXaWR0aCIsInNraXBSZVNpemVPZlNtYWxsSW1nIiwiaXNSZVNpemVCeVBlcmNlbnQiLCJyZVNpemVQZXJjZW50IiwiaXNSb3RhdGUiLCJpc0ZsaXAiLCJpc0Zsb3AiLCJyb3RhdGVEZWdyZWUiLCJwaWNCZWQiLCJpbWFnZUNvbXByZXNzIiwicmF3Rm9ybWF0Iiwibm9ybWFsaXplSW1hZ2VFeHQiLCJpbWFnZVdpZHRoIiwiaW1hZ2VIZWlnaHQiLCJyb3VuZCIsInNjYWxlUmF0aW8iLCJmbGlwIiwiZmxvcCIsIm5ld0Zvcm1hdCIsImdldENvbnZlcnRlZEZvcm1hdCIsInRvRm9ybWF0IiwibW96anBlZyIsInRvTG93ZXJDYXNlIiwiaXNOZWVkQWRkV2F0ZXJtYXJrIiwid2F0ZXJtYXJrT3B0aW9ucyIsImZpbGVFeHQiLCJpc0FkZFdhdGVybWFyayIsImlzTmVlZENvbXByZXNzIiwiY29tcHJlc3NPcHRpb25zIiwicmVtb3ZlRXhpZiIsInVwbG9hZCIsImFyZ3VtZW50cyIsImlucHV0TGlzdCIsImZpbHRlciIsImV4aXN0IiwiY29tcHJlc3MiLCJ1c2VyQ29uZmlnIiwiZ2V0Q29uZmlnIiwicHJlZml4IiwiaTE4biIsInRyYW5zbGF0ZSIsInJlcXVpcmVkIiwiZGVmYXVsdCIsImNob2ljZXMiLCJpc1JlbW92ZUV4aWYiLCJyZW5hbWUiLCJlbmFibGUiLCJoYW5kbGVDb25maWciLCJwcm9tcHRzIiwibW9kdWxlIiwiYW5zd2VyIiwiaW5xdWlyZXIiLCJwcm9tcHQiLCJjb25maWdOYW1lIiwic2F2ZUNvbmZpZyIsInNldHRpbmciLCJidWlsZGluIiwiaGVscGVyIiwiZ2V0SWRMaXN0IiwicGx1Z2luTG9hZGVyIiwiZ2V0UGx1Z2luIiwiZ2V0RnVsbExpc3QiLCJfYiIsInBsdWdpbiIsImluZm8iLCJhcmd2IiwidXNlIiwidXBsb2FkZXIiLCJ0cmFuc2Zvcm1lciIsInB1c2giLCJmb3JFYWNoIiwicGljZ29QbHVnaW5zIiwic2V0Q29uZmlnIiwiZ2VuZXJhdGUiLCJvcHRzIiwiZ2V0T3B0aW9ucyIsInRtcCIsInNvdXJjZSIsImFuc3dlcnMiLCJfZmlsZXMiLCJnbG9iYnkiLCJkb3QiLCJnbG9iIiwiZmlsdGVycyIsImZpbGVzIiwicmVuZGVyIiwid3JpdGVGaWxlVHJlZSIsImRlc3QiLCJjb21wbGV0ZSIsImNvbXBsZXRlTWVzc2FnZSIsImV4cCIsImZuIiwiRnVuY3Rpb24iLCJzdHJpbmdpZnkiLCJ0ZW1wbGF0ZVBhdGgiLCJvcHRpb25zUGF0aCIsInJlcXVpcmUiLCJmaWxlVHJlZSIsInJlYWRGaWxlU3luYyIsImNvbnRlbnQiLCJlanNSZW5kZXIiLCJpc0J1ZmZlciIsImRpciIsImVuc3VyZURpclN5bmMiLCJ3cml0ZUZpbGVTeW5jIiwicnVuIiwib2ZmbGluZSIsInRlbXBsYXRlIiwiaGFzU2xhc2giLCJkb3dubG9hZEFuZEdlbmVyYXRlIiwic3luYyIsImRvd25sb2FkIiwiY2xvbmUiLCJlcnIiLCJpbml0IiwicHJvamVjdCIsImluUGxhY2UiLCJob21lZGlyIiwib2siLCJvbiIsImNoYWxrIiwiZ3JheSIsImxhbmciLCJsaXN0IiwiZ2V0TGFuZ3VhZ2VMaXN0Iiwic2V0TGFuZ3VhZ2UiLCJMaWZlY3ljbGVQbHVnaW5zIiwiY29uc3RydWN0b3IiLCJ0aGlzIiwiTWFwIiwicGx1Z2luSWRNYXAiLCJyZWdpc3RlciIsImlkIiwiVHlwZUVycm9yIiwiaGFzIiwic2V0IiwiY3VycmVudFBsdWdpbiIsInVucmVnaXN0ZXIiLCJwbHVnaW5OYW1lIiwicGx1Z2luTGlzdCIsImRlbGV0ZSIsImdldE5hbWUiLCJnZXRMaXN0IiwidmFsdWVzIiwic2V0Q3VycmVudFBsdWdpbk5hbWUiLCJDb21tYW5kZXIiLCJDb21tYW5kIiwidmVyc2lvbiIsImRlYnVnIiwic2lsZW50IiwiYXJncyIsImV4aXQiLCJjdXJyZW50UGx1Z2luTmFtZSIsImxvYWRDb21tYW5kcyIsIklMb2dUeXBlIiwiSUJ1aWxkSW5FdmVudCIsIklCdXNFdmVudCIsIkxvZ2dlciIsImxldmVsIiwiaGFuZGxlTG9nIiwibXNnIiwibG9nTGV2ZWwiLCJjaGVja0xvZ0xldmVsIiwibG9nSGVhZGVyIiwidG9VcHBlckNhc2UiLCJsb2dQYXRoIiwiYmFzZURpciIsInJlc3VsdCIsImNoZWNrTG9nRmlsZUlzTGFyZ2UiLCJpc0xhcmdlIiwid2FybmluZ01zZyIsImxvZ0ZpbGVTaXplTGltaXQiLCJ5ZWxsb3ciLCJyZWNyZWF0ZUxvZ0ZpbGUiLCJ1bnNoaWZ0IiwiaGFuZGxlV3JpdGVMb2ciLCJsb2dGaWxlU2l6ZSIsInN0YXRTeW5jIiwic2l6ZSIsInVubGlua1N5bmMiLCJjcmVhdGVGaWxlU3luYyIsImRheWpzIiwiRXJyb3IiLCJ1dGlsIiwic3RhY2siLCJhcHBlbmRGaWxlU3luYyIsIlBsdWdpbkhhbmRsZXIiLCJpbnN0YWxsZWRQbHVnaW5zIiwicHJvY2Vzc1BsdWdpbnMiLCJoYW5kbGVQbHVnaW5OYW1lUHJvY2VzcyIsImhhc1BsdWdpbiIsInBrZ05hbWUiLCJmdWxsTmFtZUxpc3QiLCJmdWxsTmFtZSIsInBrZ05hbWVMaXN0IiwiZXhlY0NvbW1hbmQiLCJjb2RlIiwiZW1pdCIsInRpdGxlIiwiYm9keSIsInJlZ2lzdGVyUGx1Z2luIiwidW5yZWdpc3RlclBsdWdpbiIsIm1vZHVsZXMiLCJ3aGVyZSIsImNvbmNhdCIsIm5wbSIsInNwYXduIiwiYXNzaWduIiwib3V0cHV0Iiwic3Rkb3V0IiwicGlwZSIsInN0ZGVyciIsIkZBSUxFRCIsIlBsdWdpbkxvYWRlciIsImZ1bGxMaXN0IiwiU2V0IiwicGx1Z2luTWFwIiwicGFja2FnZVBhdGgiLCJyZXBvc2l0b3J5IiwibGljZW5zZSIsInJlc29sdmVQbHVnaW4iLCJiYXNlZGlyIiwibG9hZCIsInBsdWdpbkRpciIsImpzb24iLCJkZXBzIiwiZGVwZW5kZW5jaWVzIiwiZGV2RGVwcyIsImRldkRlcGVuZGVuY2llcyIsImFkZCIsInBsdWdpbkludGVyZmFjZSIsIk5PVElGSUNBVElPTiIsImJlZm9yZVRyYW5zZm9ybVBsdWdpbnMiLCJiZWZvcmVVcGxvYWRQbHVnaW5zIiwiYWZ0ZXJVcGxvYWRQbHVnaW5zIiwicmVtb3ZlQ29uZmlnIiwiZXZlbnRCdXMiLCJFdmVudEVtaXR0ZXIiLCJodHRwc0FnZW50IiwiaHR0cHMiLCJBZ2VudCIsIm1heFZlcnNpb24iLCJtaW5WZXJzaW9uIiwicmVqZWN0VW5hdXRob3JpemVkIiwiYXBwZW5kRm9ybURhdGEiLCJmb3JtIiwiYXBwZW5kIiwidmFsdWUiLCJyZXNwb25zZUludGVyY2VwdG9yIiwicmVzcG9uc2UiLCJzdGF0dXNDb2RlIiwic3RhdHVzIiwicmVzcG9uc2VFcnJvckhhbmRsZXIiLCJlcnJvck9iaiIsIl9jIiwiX2QiLCJfZSIsIl9mIiwiX2ciLCJSZXF1ZXN0IiwiQ09ORklHX0NIQU5HRSIsImhhbmRsZVByb3h5IiwicHJveHlPcHRpb25zIiwiaG9zdCIsImhvc3RuYW1lIiwicG9ydCIsInByb3RvY29sIiwiaGVhZGVycyIsIm1heEJvZHlMZW5ndGgiLCJJbmZpbml0eSIsIm1heENvbnRlbnRMZW5ndGgiLCJodHRwc092ZXJIdHRwIiwiaW5zdGFuY2UiLCJheGlvcyIsImNyZWF0ZSIsImludGVyY2VwdG9ycyIsIm9wdCIsIl9faXNPbGRPcHRpb25zIiwiRm9ybURhdGEiLCJmb3JtRGF0YSIsImdldEhlYWRlcnMiLCJxcyIsInJlcXVlc3RJbnRlcmNlcHRvciIsIm9iaiIsImNvbnRlbnRUeXBlIiwiQ29udGVudFR5cGUiLCJMaWZlY3ljbGUiLCJzdXBlciIsInR0ZkxpbmsiLCJ0ZW1wRmlsZVBhdGgiLCJpbWdGaWxlUGF0aCIsInR0ZlBhdGgiLCJlbXB0eURpclN5bmMiLCJoZWxwR2V0T3B0aW9uIiwiY29uZmlnUGF0aCIsInJhd0lucHV0IiwiVkVSU0lPTiIsIkdVSV9WRVJTSU9OIiwiYmluZCIsInVuc2V0Q29uZmlnIiwiYWRkTGlzdGVuZXIiLCJvbmNlIiwicmVtb3ZlTGlzdGVuZXIiLCJvZmYiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJzZXRNYXhMaXN0ZW5lcnMiLCJnZXRNYXhMaXN0ZW5lcnMiLCJsaXN0ZW5lcnMiLCJyYXdMaXN0ZW5lcnMiLCJsaXN0ZW5lckNvdW50IiwicHJlcGVuZExpc3RlbmVyIiwicHJlcGVuZE9uY2VMaXN0ZW5lciIsImV2ZW50TmFtZXMiLCJjcmVhdGVDb250ZXh0IiwicmF3SW5wdXRQYXRoIiwiY2xvbmVEZWVwIiwiVVBMT0FEX1BST0dSRVNTIiwiQkVGT1JFX1RSQU5TRk9STSIsImFsbFNldHRsZWQiLCJpbmRleCIsIml0ZW1Jc1VybCIsInRyYW5zZm9ybWVkQnVmZmVyIiwiaXNTa2lwIiwiZXh0ZW50aW9uIiwiZG93bmxvYWRUVEYiLCJoZWljUmVzdWx0IiwiaGVpY0NvbnZlcnQiLCJ0ZW1wSGVpY0NvbnZlcnRGaWxlIiwibmV3RXh0IiwidGVtcEZpbGUiLCJiZWZvcmVUcmFuc2Zvcm0iLCJkb1RyYW5zZm9ybSIsInJlbmFtZUNvbmZpZyIsImJhc2U2NEltYWdlIiwiYmVmb3JlVXBsb2FkIiwiZG9VcGxvYWQiLCJhZnRlclVwbG9hZCIsImhhbmRsZVBsdWdpbnMiLCJjdXJyZW50VHJhbnNmb3JtZXIiLCJCRUZPUkVfVVBMT0FEIiwib3V0cHV0SW1nIiwiQUZURVJfVVBMT0FEIiwiaXNFbmNvZGVPdXRwdXRVUkwiLCJpIiwiaW1nVXJsIiwiRklOSVNIRUQiLCJsaWZlQ3ljbGVQbHVnaW5zIiwicGx1Z2luTmFtZXMiLCJsaWZlQ3ljbGVOYW1lIiwiYWxsIiwicG9zdE9wdGlvbnMiLCJhcGlUb2tlbiIsImJhY2t1cERvbWFpbiIsImRvbWFpbiIsIkF1dGhvcml6YXRpb24iLCJzbWZpbGUiLCJmaWxlbmFtZSIsInNzbCIsInNtbXNDb25maWciLCJpbWdMaXN0IiwicG9zdENvbmZpZyIsInRva2VuIiwiaGFzaCIsImltYWdlcyIsInVwbG9hZEhpc3RvcnkiLCJmb3JtYXRQYXRoSGVscGVyIiwic3RhcnRTbGFzaCIsImVuZFNsYXNoIiwicm9vdFRvRW1wdHkiLCJjbGVhblBhdGgiLCJlbmNvZGVQYXRoIiwicCIsImVuY29kZVVSSUNvbXBvbmVudCIsImdlbmVyYXRlU2lnbmF0dXJlIiwic2VjcmV0SWQiLCJzZWNyZXRLZXkiLCJhcHBJZCIsImJ1Y2tldCIsInNpZ25hdHVyZSIsInNpZ25UaW1lIiwidG9kYXkiLCJzaWduS2V5IiwiY3JlYXRlSG1hYyIsImVuZHBvaW50IiwiYXJlYSIsImh0dHBTdHJpbmciLCJzdHJpbmdUb1NpZ24iLCJjdXJyZW50IiwibXVsdGlTaWduYXR1cmUiLCJzaWduSGV4S2V5IiwidGVtcFN0cmluZyIsIkhvc3QiLCJsb29rdXAiLCJvcCIsImZpbGVjb250ZW50IiwidGNZdW5PcHRpb25zIiwiY3VzdG9tVXJsIiwidXNlVjQiLCJvcHRpb25VcmwiLCJzbGltIiwic291cmNlX3VybCIsImNvbmZpcm1UZXh0IiwiY2FuY2VsVGV4dCIsInRpcHMiLCJidWlsZEdpdGh1YkFwaVVybCIsInJlcG8iLCJleHRyYSIsImJyYW5jaCIsImdpdGh1Yk9wdGlvbnMiLCJ1cGxvYWRQYXRoIiwiZG93bmxvYWRfdXJsIiwic2hhIiwiaW1nQmFzZTY0Iiwic2VsZWN0QXJlYSIsImdldFRva2VuIiwicWluaXVPcHRpb25zIiwiYWNjZXNzS2V5IiwibWFjIiwicWluaXUiLCJhdXRoIiwiTWFjIiwicnMiLCJQdXRQb2xpY3kiLCJ1cGxvYWRUb2tlbiIsImJhc2VVcmwiLCJ1cmxPcHRpb25zIiwiY2xpZW50SWQiLCJ1c2VybmFtZSIsImFjY2Vzc1Rva2VuIiwiZm9ybWF0QWNjZXNzVG9rZW4iLCJhbGJ1bSIsImF1dGhvcml6YXRpb24iLCJyZXF1ZXN0T3B0aW9ucyIsImluaXRQYWdlcyIsImFsYnVtSGFzaCIsImdldEFsYnVtSGFzaE9wdGlvbnMiLCJ0aW1lb3V0IiwiYWxidW1MaXN0IiwiaW1ndXJPcHRpb25zIiwibGluayIsImRlbGV0ZWhhc2giLCJnZXRDdXJyZW50VVRDRGF0ZSIsInRvVVRDU3RyaW5nIiwiZGF0ZSIsInNpZ25TdHJpbmciLCJhY2Nlc3NLZXlTZWNyZXQiLCJhY2Nlc3NLZXlJZCIsImFsaVl1bk9wdGlvbnMiLCJvcGVyYXRvciIsIm1kNVBhc3N3b3JkIiwiTUQ1IiwicGFzc3dvcmQiLCJnZXRBbnRpTGVlY2hQYXJhbSIsImFudGlMZWVjaFRva2VuIiwiZXhwaXJlVGltZSIsInVyaSIsImV4cGlyZSIsInN1YnN0cmluZyIsInVweXVuT3B0aW9ucyIsInN1ZmZpeCIsInVwdCIsIndlYmRhdnBsaXN0T3B0aW9ucyIsInNzbEVuYWJsZWQiLCJhdXRoVHlwZSIsIndlYnBhdGgiLCJjbGllbnRPcHRpb25zIiwiQXV0aFR5cGUiLCJEaWdlc3QiLCJjbGllbnQiLCJjcmVhdGVDbGllbnQiLCJwYXRoVG9DcmVhdGUiLCJjcmVhdGVEaXJlY3RvcnkiLCJyZWN1cnNpdmUiLCJwdXRGaWxlQ29udGVudHMiLCJvdmVyd3JpdGUiLCJpbWdUZW1wUGF0aCIsImltZ1RlbXBGaWxlUGF0aCIsImdhbGxlcnlQYXRoIiwibG9jYWxDb25maWciLCJ3ZWJQYXRoIiwiZmlsZUltZ1RlbXBQYXRoIiwiZmlsZVVwbG9hZFBhdGgiLCJjb3B5RmlsZVN5bmMiLCJTU0hDbGllbnQiLCJOb2RlU1NIIiwiaXNDb25uZWN0ZWQiLCJzdGF0aWMiLCJwcml2YXRlS2V5IiwicGFzc3BocmFzZSIsImxvZ2luSW5mbyIsInByaXZhdGVLZXlQYXRoIiwiY29ubmVjdCIsImxvY2FsIiwicmVtb3RlIiwiY2hhbmdlV2luU3R5bGVQYXRoVG9Vbml4IiwibWtkaXIiLCJwdXRGaWxlIiwiZmlsZU1vZGUiLCJleGVjIiwiZGlyUGF0aCIsImRpcmVjdG9yeU1vZGUiLCJkaXJNb2RlIiwiZGlycyIsImN1cnJlbnRQYXRoIiwic2NyaXB0IiwidXNlciIsImdyb3VwIiwiX3VzZXIiLCJfZ3JvdXAiLCJjbG9zZSIsImRpc3Bvc2UiLCJzZnRwcGxpc3RDb25maWciLCJ1cGxvYWRUZW1wUGF0aCIsImdldEluc3RhbmNlIiwicmVtb3RlUGF0aCIsImZpbGVVc2VyIiwiY2hvd24iLCJyZW1vdmVTeW5jIiwibW92ZVN5bmMiLCJ0Z09wdGlvbnMiLCJjcmVhdGVSZWFkU3RyZWFtIiwicmVtb3ZlIiwic3JjIiwicGljYmVkIiwic2VydmVyS2V5IiwicGljbGlzdE9wdGlvbnMiLCJmdWxsUmVzdWx0IiwiaXNWMiIsInYxSGVhZGVycyIsIkNvbm5lY3Rpb24iLCJ2MUZvcm1EYXRhIiwidjJIZWFkZXJzIiwiQWNjZXB0Iiwic3RyYXRlZ3lJZCIsImFsYnVtSWQiLCJwZXJtaXNzaW9uIiwidjJGb3JtRGF0YSIsInN0cmF0ZWd5X2lkIiwiYWxidW1faWQiLCJhZ2VudCIsImxza3lPcHRpb25zIiwibGlua3MiLCJGaWxlTmFtZUdlbmVyYXRvciIsIm1vbnRoIiwiZGF5IiwiZXh0TmFtZSIsIm1kNSIsImltZ0J1ZmZlciIsIm1kNUI2NCIsIm1kNUI2NFNob3J0Iiwic2hhMSIsInNoYTI1NiIsInRpbWVzdGFtcCIsInRpbWVzdGFtcE1TIiwiZm9ybWF0UGF0aCIsImZpbGVOYW1lR2VuZXJhdG9yIiwiZmllbGRzIiwicmUiLCJnZXRQcm94eUFnZW50IiwiZm9ybWF0ZWRQcm94eSIsImZvcm1hdEh0dHBQcm94eVVSTCIsIkh0dHBzUHJveHlBZ2VudCIsIkh0dHBQcm94eUFnZW50Iiwia2VlcEFsaXZlIiwia2VlcEFsaXZlTXNlY3MiLCJzY2hlZHVsaW5nIiwiZ2V0RmlsZVVSTCIsImVUYWciLCJ2ZXJzaW9uSWQiLCJzaWduZWRVcmwiLCJnZXRTaWduZWRVcmwiLCJHZXRPYmplY3RDb21tYW5kIiwiQnVja2V0IiwiYnVja2V0TmFtZSIsIktleSIsIklmTWF0Y2giLCJWZXJzaW9uSWQiLCJleHBpcmVzSW4iLCJ1cmxPYmplY3QiLCJzZWFyY2giLCJocmVmIiwiY3JlYXRlUzNDbGllbnQiLCJodHRwSGFuZGxlck9wdHMiLCJodHRwQWdlbnQiLCJyZWdpb24iLCJjcmVkZW50aWFscyIsImFjY2Vzc0tleUlEIiwic2VjcmV0QWNjZXNzS2V5IiwidGxzIiwiZm9yY2VQYXRoU3R5bGUiLCJwYXRoU3R5bGVBY2Nlc3MiLCJyZXF1ZXN0SGFuZGxlciIsIk5vZGVIdHRwSGFuZGxlciIsIlMzQ2xpZW50IiwiY3JlYXRlVXBsb2FkVGFzayIsImNvbnRlbnRFbmNvZGluZyIsIm1pbWUiLCJnZXRUeXBlIiwiZmlsZVR5cGUiLCJGaWxlVHlwZSIsImZyb21CdWZmZXIiLCJleHRyYWN0SW5mbyIsIlB1dE9iamVjdENvbW1hbmQiLCJBQ0wiLCJhY2wiLCJCb2R5IiwiQ29udGVudEVuY29kaW5nIiwic2VuZCIsInVybFByZWZpeCIsIkVUYWciLCJpbWdVUkwiLCJmb3JtYXREaXNhYmxlQnVja2V0UHJlZml4VG9VUkwiLCJkaXNhYmxlQnVja2V0UHJlZml4VG9VUkwiLCJCb29sZWFuIiwidGFza3MiLCJpZHgiLCJyZXN1bHRzIiwiYnVpbGRJblVwbG9hZGVycyIsImFsaVl1blVwbG9hZGVyIiwiYXdzczNwbGlzdFVwbG9hZGVyIiwiZ2l0aHViVXBsb2FkZXIiLCJpbWd1clVwbG9hZGVyIiwibG9jYWxVcGxvYWRlciIsImxza3lVcGxvYWRlciIsInBpY2xpc3RVcGxvYWRlciIsInFpbml1VXBsb2FkZXIiLCJzZnRwVXBsb2FkZXIiLCJzbW1zVXBsb2FkZXIiLCJ0Y1l1blVwbG9hZGVyIiwidGVsZWdyYXBoVXBsb2FkZXIiLCJ1cFl1blVwbG9hZGVyIiwid2ViZGF2cGxpc3RVcGxvYWRlciIsImdldEltZ1NpemUiLCJJbWdGcm9tUGF0aCIsImltZ1NpemUiLCJJbWdGcm9tQmFzZTY0IiwicGxhdGZvcm0yU2NyaXB0Q29udGVudCIsImRhcndpbiIsIndpbjMyIiwid2luMTAiLCJsaW51eCIsIndzbCIsInBsYXRmb3JtMlNjcmlwdEZpbGVuYW1lIiwiZ2V0Q2xpcGJvYXJkSW1hZ2UiLCJpbWFnZVBhdGgiLCJjcmVhdGVJbWFnZUZvbGRlciIsInBsYXRmb3JtIiwiaXNXc2wiLCJvcyIsInJlbGVhc2UiLCJnZXRDdXJyZW50UGxhdGZvcm0iLCJzY3JpcHRQYXRoIiwiZXhlY3V0aW9uIiwidHJpbSIsImltZ1BhdGgiLCJzaG91bGRLZWVwQWZ0ZXJVcGxvYWRpbmciLCJEQiIsImRiIiwiSlNPTlN0b3JlIiwic21tcyIsInJlYWQiLCJmbHVzaCIsInVuc2V0IiwibGFuZ3VhZ2VMaXN0IiwiVVBMT0FEX0ZBSUxFRCIsIkNIRUNLX1NFVFRJTkdTIiwiQ0hFQ0tfU0VUVElOR1NfQU5EX05FVFdPUksiLCJVUExPQURfRkFJTEVEX1JFQVNPTiIsIlNFUlZFUl9FUlJPUiIsIkFVVEhfRkFJTEVEIiwiUElDQkVEX1NNTVMiLCJQSUNCRURfU01NU19UT0tFTiIsIlBJQ0JFRF9TTU1TX0JBQ0tVUF9ET01BSU4iLCJQSUNCRURfU01NU19NRVNTQUdFX0JBQ0tVUF9ET01BSU4iLCJQSUNCRURfTE9DQUwiLCJQSUNCRURfTE9DQUxfUEFUSCIsIlBJQ0JFRF9MT0NBTF9NRVNTQUdFX1BBVEgiLCJQSUNCRURfTE9DQUxfQ1VTVE9NVVJMIiwiUElDQkVEX0xPQ0FMX01FU1NBR0VfQ1VTVE9NVVJMIiwiUElDQkVEX0xPQ0FMX1dFQlBBVEgiLCJQSUNCRURfTE9DQUxfTUVTU0FHRV9XRUJQQVRIIiwiUElDQkVEX0FMSUNMT1VEIiwiUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWUlEIiwiUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWVNFQ1JFVCIsIlBJQ0JFRF9BTElDTE9VRF9CVUNLRVQiLCJQSUNCRURfQUxJQ0xPVURfQVJFQSIsIlBJQ0JFRF9BTElDTE9VRF9QQVRIIiwiUElDQkVEX0FMSUNMT1VEX0NVU1RPTVVSTCIsIlBJQ0JFRF9BTElDTE9VRF9PUFRJT05TIiwiUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQVJFQSIsIlBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX1BBVEgiLCJQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9PUFRJT05TIiwiUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQ1VTVE9NVVJMIiwiUElDQkVEX1RFTkNFTlRDTE9VRCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfVkVSU0lPTiIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUSUQiLCJQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVEtFWSIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfQVBQSUQiLCJQSUNCRURfVEVOQ0VOVENMT1VEX0JVQ0tFVCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfQVJFQSIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfRU5EUE9JTlQiLCJQSUNCRURfVEVOQ0VOVENMT1VEX1BBVEgiLCJQSUNCRURfVEVOQ0VOVENMT1VEX09QVElPTlMiLCJQSUNCRURfVEVOQ0VOVENMT1VEX0NVU1RPTVVSTCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9BUFBJRCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9BUkVBIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX1BBVEgiLCJQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQ1VTVE9NVVJMIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX09QVElPTlMiLCJQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfRU5EUE9JTlQiLCJQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU0iLCJQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fVElQIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX0NPTkZJUk0iLCJQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fQ0FOQ0VMIiwiUElDQkVEX0dJVEhVQiIsIlBJQ0JFRF9HSVRIVUJfVE9LRU4iLCJQSUNCRURfR0lUSFVCX1JFUE8iLCJQSUNCRURfR0lUSFVCX1BBVEgiLCJQSUNCRURfR0lUSFVCX0JSQU5DSCIsIlBJQ0JFRF9HSVRIVUJfQ1VTVE9NVVJMIiwiUElDQkVEX0dJVEhVQl9NRVNTQUdFX1JFUE8iLCJQSUNCRURfR0lUSFVCX01FU1NBR0VfQlJBTkNIIiwiUElDQkVEX0dJVEhVQl9NRVNTQUdFX1BBVEgiLCJQSUNCRURfR0lUSFVCX01FU1NBR0VfQ1VTVE9NVVJMIiwiUElDQkVEX1FJTklVIiwiUElDQkVEX1FJTklVX0FDQ0VTU0tFWSIsIlBJQ0JFRF9RSU5JVV9TRUNSRVRLRVkiLCJQSUNCRURfUUlOSVVfQlVDS0VUIiwiUElDQkVEX1FJTklVX1BBVEgiLCJQSUNCRURfUUlOSVVfVVJMIiwiUElDQkVEX1FJTklVX09QVElPTlMiLCJQSUNCRURfUUlOSVVfQVJFQSIsIlBJQ0JFRF9RSU5JVV9NRVNTQUdFX1BBVEgiLCJQSUNCRURfUUlOSVVfTUVTU0FHRV9BUkVBIiwiUElDQkVEX1FJTklVX01FU1NBR0VfT1BUSU9OUyIsIlBJQ0JFRF9RSU5JVV9NRVNTQUdFX1VSTCIsIlBJQ0JFRF9URUxFR1JBUEgiLCJQSUNCRURfSU1HVVIiLCJQSUNCRURfSU1HVVJfQ0xJRU5USUQiLCJQSUNCRURfSU1HVVJfVVNFUk5BTUUiLCJQSUNCRURfSU1HVVJfQUNDRVNTX1RPS0VOIiwiUElDQkVEX0lNR1VSX0FMQlVNIiwiUElDQkVEX0lNR1VSX1BST1hZIiwiUElDQkVEX0lNR1VSX01FU1NBR0VfQ0xJRU5USUQiLCJQSUNCRURfSU1HVVJfTUVTU0FHRV9VU0VSTkFNRSIsIlBJQ0JFRF9JTUdVUl9NRVNTQUdFX0FDQ0VTU19UT0tFTiIsIlBJQ0JFRF9JTUdVUl9NRVNTQUdFX0FMQlVNIiwiUElDQkVEX0lNR1VSX01FU1NBR0VfUFJPWFkiLCJQSUNCRURfVVBZVU4iLCJQSUNCRURfVVBZVU5fQlVDS0VUIiwiUElDQkVEX1VQWVVOX09QRVJBVE9SIiwiUElDQkVEX1VQWVVOX1BBU1NXT1JEIiwiUElDQkVEX1VQWVVOX1BBVEgiLCJQSUNCRURfVVBZVU5fVVJMIiwiUElDQkVEX1VQWVVOX09QVElPTlMiLCJQSUNCRURfVVBZVU5fRU5EUE9JTlQiLCJQSUNCRURfVVBZVU5fQU5USV9MRUVDSF9UT0tFTiIsIlBJQ0JFRF9VUFlVTl9FWFBJUkVfVElNRSIsIlBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QRVJBVE9SIiwiUElDQkVEX1VQWVVOX01FU1NBR0VfUEFTU1dPUkQiLCJQSUNCRURfVVBZVU5fTUVTU0FHRV9VUkwiLCJQSUNCRURfVVBZVU5fTUVTU0FHRV9PUFRJT05TIiwiUElDQkVEX1VQWVVOX01FU1NBR0VfUEFUSCIsIlBJQ0JFRF9VUFlVTl9NRVNTQUdFX0VORFBPSU5UIiwiUElDQkVEX1dFQkRBVlBMSVNUIiwiUElDQkVEX1dFQkRBVlBMSVNUX0hPU1QiLCJQSUNCRURfV0VCREFWUExJU1RfU1NMRU5BQkxFRCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9VU0VSTkFNRSIsIlBJQ0JFRF9XRUJEQVZQTElTVF9QQVNTV09SRCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9QQVRIIiwiUElDQkVEX1dFQkRBVlBMSVNUX1dFQlNJVEVfUEFUSCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9DVVNUT01VUkwiLCJQSUNCRURfV0VCREFWUExJU1RfQVVUSFRZUEUiLCJQSUNCRURfV0VCREFWUExJU1RfT1BUSU9OUyIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX0hPU1QiLCJQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9TU0xFTkFCTEVEIiwiUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfVVNFUk5BTUUiLCJQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9QQVNTV09SRCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBVEgiLCJQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9XRUJTSVRFX1BBVEgiLCJQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9DVVNUT01VUkwiLCJQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9PUFRJT05TIiwiUElDQkVEX1NGVFBQTElTVCIsIlBJQ0JFRF9TRlRQUExJU1RfSE9TVCIsIlBJQ0JFRF9TRlRQUExJU1RfUE9SVCIsIlBJQ0JFRF9TRlRQUExJU1RfVVNFUk5BTUUiLCJQSUNCRURfU0ZUUFBMSVNUX1BBU1NXT1JEIiwiUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZIiwiUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZX1BBU1NQSFJBU0UiLCJQSUNCRURfU0ZUUFBMSVNUX1VQTE9BRFBBVEgiLCJQSUNCRURfU0ZUUFBMSVNUX0NVU1RPTVVSTCIsIlBJQ0JFRF9TRlRQUExJU1RfV0VCU0lURV9QQVRIIiwiUElDQkVEX1NGVFBQTElTVF9GSUxFX1VTRVIiLCJQSUNCRURfU0ZUUFBMSVNUX0ZJTEVfTU9ERSIsIlBJQ0JFRF9TRlRQUExJU1RfRElSX01PREUiLCJQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfSE9TVCIsIlBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QT1JUIiwiUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BSSVZBVEVLRVkiLCJQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUFJJVkFURUtFWV9QQVNTUEhSQVNFIiwiUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1VQTE9BRFBBVEgiLCJQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfQ1VTVE9NVVJMIiwiUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSCIsIlBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9GSUxFX1VTRVIiLCJQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRklMRV9NT0RFIiwiUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0RJUl9NT0RFIiwiUElDQkVEX1BJQ0xJU1QiLCJQSUNCRURfUElDTElTVF9IT1NUIiwiUElDQkVEX1BJQ0xJU1RfUE9SVCIsIlBJQ0JFRF9QSUNMSVNUX1BJQ0JFRCIsIlBJQ0JFRF9QSUNMSVNUX0NPTkZJR05BTUUiLCJQSUNCRURfUElDTElTVF9LRVkiLCJQSUNCRURfTFNLWV9QTElTVCIsIlBJQ0JFRF9MU0tZX1ZFUlNJT04iLCJQSUNCRURfTFNLWV9NRVNTQUdFX1ZFUlNJT04iLCJQSUNCRURfTFNLWV9IT1NUIiwiUElDQkVEX0xTS1lfTUVTU0FHRV9IT1NUIiwiUElDQkVEX0xTS1lfVE9LRU4iLCJQSUNCRURfTFNLWV9NRVNTQUdFX1RPS0VOIiwiUElDQkVEX0xTS1lfU1RSQVRFR1lfSUQiLCJQSUNCRURfTFNLWV9NRVNTQUdFX1NUUkFURUdZX0lEIiwiUElDQkVEX0xTS1lfQUxCVU1fSUQiLCJQSUNCRURfTFNLWV9NRVNTQUdFX0FMQlVNX0lEIiwiUElDQkVEX0xTS1lfUEVSTUlTU0lPTiIsIlBJQ0JFRF9MU0tZX01FU1NBR0VfUEVSTUlTU0lPTiIsIlBJQ0JFRF9BV1NTM1BMSVNUIiwiUElDQkVEX0FXU1MzUExJU1RfQUNDRVNTS0VZSUQiLCJQSUNCRURfQVdTUzNQTElTVF9TRUNSRVRfQUNDRVNTS0VZIiwiUElDQkVEX0FXU1MzUExJU1RfQlVDS0VUIiwiUElDQkVEX0FXU1MzUExJU1RfUkVHSU9OIiwiUElDQkVEX0FXU1MzUExJU1RfVVBMT0FEUEFUSCIsIlBJQ0JFRF9BV1NTM1BMSVNUX0VORFBPSU5UIiwiUElDQkVEX0FXU1MzUExJU1RfUFJPWFkiLCJQSUNCRURfQVdTUzNQTElTVF9VUkxQUkVGSVgiLCJQSUNCRURfQVdTUzNQTElTVF9QQVRIU1RZTEVBQ0NFU1MiLCJQSUNCRURfQVdTUzNQTElTVF9SRUpFQ1RVTkFVVEhPUklaRUQiLCJQSUNCRURfQVdTUzNQTElTVF9BQ0wiLCJQSUNCRURfQVdTUzNQTElTVF9ESVNBQkxFQlVDS0VUUFJFRklYVE9VUkwiLCJQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0FDQ0VTU0tFWUlEIiwiUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9TRUNSRVRfQUNDRVNTS0VZIiwiUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9CVUNLRVQiLCJQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1JFR0lPTiIsIlBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfVVBMT0FEUEFUSCIsIlBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfRU5EUE9JTlQiLCJQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1BST1hZIiwiUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9VUkxQUkVGSVgiLCJQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1BBVEhTVFlMRUFDQ0VTUyIsIlBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUkVKRUNUVU5BVVRIT1JJWkVEIiwiUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9BQ0wiLCJQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0RJU0FCTEVCVUNLRVRQUkVGSVhUT1VSTCIsIkJVSUxESU5fV0FURVJNQVJLX0lTQUREV0FURVJNQVJLIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9JU0FERFdBVEVSTUFSSyIsIkJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RZUEUiLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1RZUEUiLCJCVUlMRElOX1dBVEVSTUFSS19JU0ZVTExTQ1JFRU5XQVRFUk1BUksiLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX0lTRlVMTFNDUkVFTldBVEVSTUFSSyIsIkJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0RFR1JFRSIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLREVHUkVFIiwiQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVCIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLVEVYVCIsIkJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFRGT05UUEFUSCIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVFBBVEgiLCJCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktGT05UUkFUSU8iLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRSQVRJTyIsIkJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRDT0xPUiIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVENPTE9SIiwiQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLSU1BR0VQQVRIIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktJTUFHRVBBVEgiLCJCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktQT1NJVElPTiIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLUE9TSVRJT04iLCJCVUlMRElOX1JFTkFNRV9GT1JNQVQiLCJCVUlMRElOX1JFTkFNRV9FTkFCTEUiLCJCVUlMRElOX0NPTVBSRVNTX1FVQUxJVFkiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUVVBTElUWSIsIkJVSUxESU5fQ09NUFJFU1NfSVNDT05WRVJUIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTQ09OVkVSVCIsIkJVSUxESU5fQ09NUFJFU1NfQ09OVkVSVEZPUk1BVCIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9DT05WRVJURk9STUFUIiwiQlVJTERJTl9DT01QUkVTU19JU1JFU0laRSIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFU0laRSIsIkJVSUxESU5fQ09NUFJFU1NfUkVTSVpFV0lEVEgiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFV0lEVEgiLCJCVUlMRElOX0NPTVBSRVNTX1JFU0laRUhFSUdIVCIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVIRUlHSFQiLCJCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFQllQRVJDRU5UIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVTSVpFQllQRVJDRU5UIiwiQlVJTERJTl9DT01QUkVTU19JU0ZMSVAiLCJCVUlMRElOX0NPTVBSRVNTX0lTRkxPUCIsIkJVSUxESU5fQ09NUFJFU1NfUkVTSVpFUEVSQ0VOVCIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVQRVJDRU5UIiwiQlVJTERJTl9DT01QUkVTU19TS0lQUkVTSVpFT0ZTTUFMTElNRyIsIkJVSUxESU5fQ09NUFJFU1NfSVNST1RBVEUiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNST1RBVEUiLCJCVUlMRElOX0NPTVBSRVNTX1JPVEFURURFR1JFRSIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9ST1RBVEVERUdSRUUiLCJCVUlMRElOX0NPTVBSRVNTX0lTUkVNT1ZFRVhJRiIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFTU9WRUVYSUYiLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9TVUNDRVNTIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEX1JFQVNPTiIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRF9QQVRIIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9TVUNDRVNTIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRUQiLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9SRUFTT04iLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9WQUxJRCIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfU1VDQ0VTUyIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfUkVBU09OIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfVkFMSUQiLCJlbiIsIkkxOG5NYW5hZ2VyIiwib2JqZWN0QWRhcHRlciIsIk9iamVjdEFkYXB0ZXIiLCJsYW5ndWFnZSIsIkkxOG4iLCJhZGFwdGVyIiwiZGVmYXVsdExhbmd1YWdlIiwibG9hZE91dHRlckkxOG4iLCJpMThuRm9sZGVyIiwiZ2V0T3V0dGVySTE4bkZvbGRlciIsInJlYWRkaXJTeW5jIiwid2l0aEZpbGVUeXBlcyIsImlzRmlsZSIsImVuZHNXaXRoIiwiaTE4bkZpbGVQYXRoIiwiaTE4bkZpbGUiLCJpMThuRmlsZU9iaiIsInlhbWwiLCJwYXRoRXhpc3RzU3luYyIsImFkZExvY2FsZSIsImxvY2FsZXMiLCJvcmlnaW5Mb2NhbGVzIiwiZ2V0TG9jYWxlIiwibmV3TG9jYWxlcyIsIm1lcmdlIiwic2V0TG9jYWxlIiwiYWRkTGFuZ3VhZ2UiLCJQaWNHbyIsIl9wbHVnaW5Mb2FkZXIiLCJpbml0Q29uZmlnUGF0aCIsImluaXRDb25maWciLCJlbnN1cmVGaWxlU3luYyIsIl9jb25maWciLCJ1cGxvYWRlcnMiLCJsaWZlY3ljbGUiLCJyZWdpc3RlckNvbW1hbmRzIiwicHJvcE5hbWUiLCJzdGFydCIsImNsZWFudXAiXSwibWFwcGluZ3MiOiJxbkRBSUEsTUFBTUEsR0FBZ0IsQ0FDcEJDLEVBQ0FDLEVBQ0FDLEVBQ0FDLEVBQ0FDLEVBQ0FDLEtBRUEsSUFBSUMsRUFBVU4sRUFBSU0sUUFBUUwsUUFBUUEsR0FBU0MsWUFBWUEsR0FBYUMsTUFBTUEsSUFDdEVFLE1BQUFBLFNBQUFBLEVBQVNFLFNBQ1hELEVBQVVBLEVBQVFFLE9BQU8sc0JBQXVCLHNDQUU5Q0gsTUFBQUEsU0FBQUEsRUFBU0ksWUFDWEgsRUFBVUEsRUFBUUUsT0FBTyw0QkFBNkIsNkNBRXhERixFQUFRRixPQUFPQSxJQUdYTSxHQUF5QixDQUM3QkMsT0FBU0MsSUFDUCxNQUFNWixFQUFNWSxFQUFJWixJQUNoQkQsR0FDRUMsRUFDQSx1QkFDQSx1QkFDQSxPQUNBLENBQUNhLEVBQW1CUCxLQUNsQixNQUFNQyxNQUFFQSxFQUFLRSxTQUFFQSxHQUFhSCxFQUN0QkQsRUFBVSxDQUFFRSxNQUFBQSxFQUFPRSxTQUFBQSxHQUN6QkcsRUFBSUYsY0FBY0ksUUFBUUQsRUFBU1IsR0FBU1UsT0FBTUMsSUFDaERKLEVBQUlLLElBQUlDLE1BQU1GLFFB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
|
|
1
|
+
import{EventEmitter as e}from"events";import t,{readFile as r,readJSONSync as n,ensureDirSync as a,createFileSync as i,emptyDirSync as s,removeSync as E,moveSync as o,remove as I,pathExistsSync as l,ensureFileSync as S}from"fs-extra";import{cloneDeep as _,merge as P,get as u,set as c,unset as p}from"lodash";import A,{homedir as T}from"os";import C from"path";import{Command as g}from"commander";import D from"inquirer";import{imageSize as d}from"image-size";import m,{URL as L}from"url";import f from"text-to-svg";import h from"sharp";import B from"crypto";import{v4 as U}from"uuid";import N from"chalk";import R from"download-git-repo";import{sync as O}from"rimraf";import M from"minimatch";import y from"globby";import{render as G}from"ejs";import b from"dayjs";import x from"util";import{spawn as w}from"cross-spawn";import{sync as W}from"resolve";import K from"axios";import F from"form-data";import H from"https";import{httpsOverHttp as $}from"tunnel";import v from"heic-convert";import{lookup as k}from"mime-types";import{S3Client as Y,PutObjectCommand as q,GetObjectCommand as V}from"@aws-sdk/client-s3";import{getSignedUrl as j}from"@aws-sdk/s3-request-presigner";import{NodeHttpHandler as z}from"@smithy/node-http-handler";import X from"file-type";import Q from"mime";import{HttpsProxyAgent as Z,HttpProxyAgent as J}from"hpagent";import ee from"qiniu";import{NodeSSH as te}from"node-ssh-no-cpu-features";import{AuthType as re,createClient as ne}from"webdav";import{spawn as ae}from"child_process";import ie from"is-wsl";import{JSONStore as se}from"@picgo/store";import Ee from"js-yaml";import{ObjectAdapter as oe,I18n as Ie}from"@picgo/i18n";const le=(e,t,r,n,a,i)=>{let s=e.program.command(t).description(r).alias(n);(null==i?void 0:i.proxy)&&(s=s.option("-p, --proxy <proxy>","Add proxy for installing plugins")),(null==i?void 0:i.registry)&&(s=s.option("-r, --registry <registry>","Choose a registry for installing plugins")),s.action(a)},Se={handle:e=>{const t=e.cmd;le(t,"install <plugins...>","install picgo plugin","add",((t,r)=>{const{proxy:n,registry:a}=r,i={proxy:n,registry:a};e.pluginHandler.install(t,i).catch((t=>{e.log.error(t)}))}),{proxy:!0,registry:!0}),le(t,"uninstall <plugins...>","uninstall picgo plugin","rm",(t=>{e.pluginHandler.uninstall(t).catch((t=>{e.log.error(t)}))})),le(t,"update <plugins...>","update picgo plugin","up",((t,r)=>{const{proxy:n,registry:a}=r,i={proxy:n,registry:a};e.pluginHandler.update(t,i).catch((t=>{e.log.error(t)}))}),{proxy:!0,registry:!0})}},_e={handle:e=>{e.cmd.program.option("-c, --config <path>","set config path")}};function Pe(e){const t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";return Array.from({length:e}).map((()=>t.charAt(Math.floor(Math.random()*t.length)))).join("")}function ue(e){return 1===e.toString().length?`0${e}`:e.toString()}function ce(e){return B.createHash("md5").update(e).digest("hex")}function pe(e,t,r,n){const a=new Date,i=a.getFullYear().toString(),s=C.basename(e,C.extname(e)),E={"{Y}":()=>i,"{y}":()=>i.slice(2),"{m}":()=>ue(a.getMonth()+1),"{d}":()=>ue(a.getDate()),"{h}":()=>ue(a.getHours()),"{i}":()=>ue(a.getMinutes()),"{s}":()=>ue(a.getSeconds()),"{ms}":()=>a.getMilliseconds().toString().padStart(3,"0"),"{md5}":()=>ce(n||s),"{md5-16}":()=>ce(n||s).slice(0,16),"{filename}":()=>r?C.basename(r,C.extname(r)):s,"{uuid}":()=>U().replace(/-/g,""),"{timestamp}":()=>a.getTime().toString()};if(void 0===t||!Object.keys(E).some((e=>t.includes(e)))&&!t.includes("localFolder:")&&!t.includes("str-"))return e;const o=C.extname(e);let I=Object.keys(E).reduce(((e,t)=>e.replace(new RegExp(t,"g"),E[t]())),t)+o;return I=I.replace(/{str-(\d+)}/gi,((e,t)=>Pe(parseInt(t,10)))),I=I.replace(/{(localFolder:?(\d+)?)}/gi,((t,r,n)=>{n=Math.max(1,n||0);return C.dirname(e).split(C.sep).slice(0-n).reduce(((e,t)=>`${e}/${t}`)).replace(/:/g,"")})),I}const Ae=e=>/^https?:\/\//.test(e),Te=e=>{e=e||"";try{return e!==decodeURI(e)}catch(e){return!1}},Ce=e=>(Te(e)||(e=encodeURI(e)),e),ge=e=>{try{const{width:t=0,height:r=0,type:n}=d(e);return{real:!0,width:t,height:r,extname:n?`.${n}`:".png"}}catch(e){return{real:!1,width:200,height:200,extname:".png"}}},De=async e=>{try{return{extname:C.extname(e),fileName:C.basename(e),buffer:await r(e),success:!0}}catch(t){return{reason:`read file ${e} error`,success:!1}}},de=async(e,t)=>{let r;e=Ce(e);const n=new Promise(((n,a)=>{(async()=>{var a;try{const a=await t.request({method:"get",url:e,resolveWithFullResponse:!0,responseType:"arraybuffer"}).then((e=>e.data));clearTimeout(r);const i=new L(e).pathname;let s="";try{s=new L(e).searchParams.get("wx_fmt")||C.extname(i)||""}catch(e){s=C.extname(i)||""}!s.startsWith(".")&&s&&(s=`.${s}`),n({buffer:a,fileName:C.basename(i),extname:s,success:!0})}catch(t){clearTimeout(r),n({success:!1,reason:`request ${e} error, ${null!==(a=null==t?void 0:t.message)&&void 0!==a?a:""}`})}})().catch(a)})),a=new Promise((t=>{r=setTimeout((()=>{t({success:!1,reason:`request ${e} timeout`})}),3e4)}));return Promise.race([n,a])},me=e=>/^@[^/]+\/picgo-plugin-/.test(e)?"scope":e.startsWith("picgo-plugin-")?"normal":Le(e)?"simple":"unknown",Le=e=>{if(C.isAbsolute(e))return!1;const r=C.join(process.cwd(),e);return!t.existsSync(r)&&(!e.includes("/")&&!e.includes("\\"))},fe=(e,t="")=>t?`@${t}/picgo-plugin-${e}`:`picgo-plugin-${e}`,he=(e,r=console)=>{switch(me(e)){case"normal":case"scope":return e;case"simple":return fe(e);default:{let n=e;return C.isAbsolute(e)&&t.existsSync(e)?Ue(n):(n=C.join(process.cwd(),e),t.existsSync(n)?Ue(n):(r.warn(`Can't find plugin ${e}`),""))}}},Be=(e,r=console)=>{var a;switch(me(e)){case"normal":return Ne(e);case"scope":return Ne(e,!0);case"simple":return Ne(fe(e));default:{if(!t.existsSync(e))return r.warn(`Can't find plugin: ${e}`),"";const i=C.posix.join(e,"package.json");if(t.existsSync(i)){const e=n(i)||{};return(null===(a=e.name)||void 0===a?void 0:a.includes("picgo-plugin-"))?e.name:(r.warn(`The plugin package.json's name filed is ${e.name||"empty"}, need to include the prefix: picgo-plugin-`),"")}return r.warn(`Can't find plugin: ${e}`),""}}},Ue=e=>e.split(C.sep).join("/"),Ne=(e,t=!1)=>{if(e.includes("@")){let r=/(.+\/)?(picgo-plugin-\w+)(@.+)*/;t&&(r=/(.+\/)?(^@[^/]+\/picgo-plugin-\w+)(@.+)*/);const n=e.match(r);return n?n[2]:(console.warn("can not remove plugin version"),e)}return e},Re=[],Oe=e=>Re.some((t=>e.startsWith(t))),Me=e=>"object"==typeof e&&!Array.isArray(e)&&Object.keys(e).length>0;function ye(e){try{return JSON.parse(e)}catch(t){return e}}const Ge=(e=0)=>isNaN(Number(e))?0:Number(e),be=()=>"development"===process.env.NODE_ENV;const xe=C.join(__dirname,"assets","piclist.png");async function we(e,t,r,n,a,i,s,E,o,I,l){E=!E||E<0||E>1?.15:E;const S=h(e,{animated:!0}),{width:_=200}=await S.metadata(),P=await async function(e,t,r,n,a,i,s,E=200,o=0){let I;"image"===e?(s=s||xe,I=await h(s).toBuffer()):I=await async function(e,t,r,n){t=t||"测试",n=n||e;const a={anchor:"top",attributes:{fill:r=r||"rgba(204, 204, 204, 0.45)"}},i=f.loadSync(n).getSVG(t,a);return Buffer.from(i)}(t,r,i,n||t);const{width:l,height:S}=await async function(e){const{width:t,height:r}=await h(e).metadata();return{width:t||200,height:r||200}}(I),_=Math.floor(E*Ge(a)),P=Math.floor(_*S/l);return await h(I).resize(_,P,{fit:"inside"}).rotate(o,{background:{r:255,g:255,b:255,alpha:0}}).toBuffer()}(t,r,i,s,E,o,I,_,a);return await S.composite([{input:P,gravity:l||"southeast",tile:n}]).toBuffer()}const We=(...e)=>e.every((e=>null!=e&&("string"==typeof e?""!==e:"number"==typeof e?e>0:"object"!=typeof e||Object.keys(e).length>0))),Ke=["avif","dz","fits","gif","heif","input","jpeg","jpg","jp2","jxl","magick","openslide","pdf","png","ppm","raw","svg","tiff","tif","v","webp"],Fe=["jpg","jpeg","png","webp","bmp","tiff","tif","svg","ico","avif","heif","heic","gif"],He=e=>Ke.includes(e);async function $e(e,t,r,n){try{let n=h(e,{animated:!0});return n=h(await we(e,t.watermarkType||"text",r,t.isFullScreenWatermark,Ge(t.watermarkDegree),t.watermarkText,t.watermarkFontPath,Ge(t.watermarkScaleRatio),t.watermarkColor,t.watermarkImagePath,t.watermarkPosition),{animated:!0}),await n.toBuffer()}catch(t){return n.error(`Image add watermark error: ${t}`),e}}function ve(e){const t="string"==typeof e.formatConvertObj?ye(e.formatConvertObj):e.formatConvertObj;return{quality:Ge(e.quality),isConvert:e.isConvert||!1,convertFormat:e.convertFormat||"jpg",isReSize:e.isReSize||!1,reSizeHeight:Ge(e.reSizeHeight),reSizeWidth:Ge(e.reSizeWidth),skipReSizeOfSmallImg:e.skipReSizeOfSmallImg||!1,isReSizeByPercent:e.isReSizeByPercent||!1,reSizePercent:Ge(e.reSizePercent),isRotate:e.isRotate||!1,isFlip:e.isFlip||!1,isFlop:e.isFlop||!1,rotateDegree:Ge(e.rotateDegree),picBed:e.picBed||"smms",formatConvertObj:t||{}}}async function ke(e,t,r,n){t=ve(t);try{if(r=Ye(r),!Fe.includes(r)||"gif"===r)return e;let n=h(e,{animated:!0}),a=100;if(We(t.quality)&&t.quality<100&&(a=t.quality),t.isReSizeByPercent){if(We(t.reSizePercent)){const e=await n.metadata().then((e=>e.width)),r=await n.metadata().then((e=>e.height));e&&r&&(n=n.resize(Math.round(e*t.reSizePercent/100),Math.round(r*t.reSizePercent/100),{fit:"inside"}))}}else if(t.isReSize)if("number"==typeof t.reSizeHeight&&t.reSizeHeight>0&&"number"==typeof t.reSizeWidth&&t.reSizeWidth>0)n=n.resize(t.reSizeWidth,t.reSizeHeight,{fit:"fill"});else if("number"==typeof t.reSizeHeight&&t.reSizeHeight>0&&("number"!=typeof t.reSizeWidth||0===t.reSizeWidth)){const e=await n.metadata().then((e=>e.width)),r=await n.metadata().then((e=>e.height));if(e&&r&&(!t.skipReSizeOfSmallImg||t.skipReSizeOfSmallImg&&t.reSizeHeight<r)){const a=t.reSizeHeight/r;n=n.resize(Math.round(e*a),t.reSizeHeight,{fit:"inside"})}}else if("number"==typeof t.reSizeWidth&&t.reSizeWidth>0&&("number"!=typeof t.reSizeHeight||0===t.reSizeHeight)){const e=await n.metadata().then((e=>e.width)),r=await n.metadata().then((e=>e.height));if(e&&r&&(!t.skipReSizeOfSmallImg||t.skipReSizeOfSmallImg&&t.reSizeWidth<e)){const a=t.reSizeWidth/e;n=n.resize(t.reSizeWidth,Math.round(r*a),{fit:"inside"})}}if(t.isRotate&&t.rotateDegree&&(n=n.rotate(t.rotateDegree,{background:{r:255,g:255,b:255,alpha:0}})),t.isFlip&&(n=n.flip()),t.isFlop&&(n=n.flop()),t.isConvert){const e=qe(t,r);e!==r&&(n=n.toFormat(e,{quality:a,mozjpeg:!0}))}else n=r&&He(r)?n.toFormat(r,{quality:a,mozjpeg:!0}):n.toFormat("jpg",{quality:a,mozjpeg:!0});return await n.toBuffer()}catch(t){return n.error(`Image process error: ${t}`),e}}const Ye=e=>e.toLowerCase().replace(".","");function qe(e,t){if(e=ve(e||{}),"gif"===(t=Ye(t)))return"gif";let r=(null==e?void 0:e.convertFormat)||"jpg";if((null==e?void 0:e.formatConvertObj)&&Object.keys(e.formatConvertObj).length>0){const n=e.formatConvertObj;Object.keys(n).includes(t)&&(r=n[t],He(r)||(r="jpg"))}return"imgur"===(null==e?void 0:e.picBed)&&"webp"===r&&(r="jpg"),r}const Ve=(e,t)=>(t=Ye(t),!!e&&!!e.isAddWatermark&&Fe.includes(t)&&"svg"!==t),je=(e,t)=>{if(!Fe.includes(Ye(t))||!e)return!1;const{quality:r,isReSizeByPercent:n,reSizePercent:a,isReSize:i,reSizeHeight:s,reSizeWidth:E,isRotate:o,rotateDegree:I,isConvert:l,convertFormat:S,isFlip:_,isFlop:P}=ve(e);if(We(r)&&r<100)return!0;if(n&&We(a))return!0;if(i&&("number"==typeof s&&s>0||"number"==typeof E&&E>0))return!0;if(o&&I)return!0;if(_||P)return!0;if(l){return t!==(S||"jpg")}return!1},ze=async(e,t)=>(t=Ye(t),Fe.includes(t)&&"svg"!==t?await h(e,{animated:!0}).toBuffer():e);var Xe=Object.freeze({__proto__:null,randomStringGenerator:Pe,renameFileNameWithTimestamp:function(e){return`${Math.floor(Date.now()/1e3)}${Pe(5)}${C.extname(e)}`},renameFileNameWithRandomString:function(e,t=5){return`${Pe(t)}${C.extname(e)}`},renameFileNameWithCustomString:pe,isUrl:Ae,isUrlEncode:Te,handleUrlEncode:Ce,getImageSize:ge,getFSFile:De,getURLFile:de,getPluginNameType:me,isSimpleName:Le,handleStreamlinePluginName:e=>/^@[^/]+\/picgo-plugin-/.test(e)?e.replace(/^@[^/]+\/picgo-plugin-/,""):e.replace(/picgo-plugin-/,""),handleCompletePluginName:fe,getProcessPluginName:he,getNormalPluginName:Be,handleUnixStylePath:Ue,removePluginVersion:Ne,configBlackList:Re,isConfigKeyInBlackList:Oe,isInputConfigValid:Me,safeParse:ye,forceNumber:Ge,isDev:be,AddWatermark:we,imageAddWaterMark:$e,imageCompress:ke,getConvertedFormat:qe,isNeedAddWatermark:Ve,isNeedCompress:je,removeExif:ze});const Qe={handle:e=>{e.cmd.program.command("upload").description("upload, go go go").arguments("[input...]").alias("u").action((r=>{(async()=>{const n=r.map((e=>Ae(e)?e:C.resolve(e))).filter((r=>{const n=t.existsSync(r)||Ae(r);return n||e.log.warn(`${r} does not exist.`),n}));await e.upload(n)})().catch((t=>{e.log.error(t)}))}))}};var Ze=e=>{const t=e.getConfig("buildIn.compress")||{};return[{name:"quality",type:"input",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_QUALITY")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_QUALITY")},required:!1,default:t.quality||100},{name:"isConvert",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ISCONVERT")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISCONVERT")},required:!1,default:t.isConvert||!1},{name:"convertFormat",type:"list",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_CONVERTFORMAT")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_CONVERTFORMAT")},required:!1,choices:["avif","dz","fits","gif","heif","input","jpeg","jpg","jp2","jxl","magick","openslide","pdf","png","ppm","raw","svg","tiff","tif","v","webp"],default:"jpg"},{name:"isReSize",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ISRESIZE")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISRESIZE")},required:!1,default:t.isReSize||!1},{name:"reSizeWidth",type:"input",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEWIDTH")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEWIDTH")},required:!1,default:t.reSizeWidth||500},{name:"reSizeHeight",type:"input",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEHEIGHT")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEHEIGHT")},required:!1,default:t.reSizeHeight||500},{name:"skipReSizeOfSmallImg",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_SKIPRESIZEOFSMALLIMG")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_SKIPRESIZEOFSMALLIMG")},required:!1,default:t.skipReSizeOfSmallImg||!1},{name:"isReSizeByPercent",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ISRESIZEBYPERCENT")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISRESIZEBYPERCENT")},required:!1,default:t.isReSizeByPercent||!1},{name:"reSizePercent",type:"input",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEPERCENT")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_RESIZEPERCENT")},required:!1,default:t.reSizePercent||50},{name:"isFlip",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ISFLIP")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISFLIP")},required:!1,default:t.isFlip||!1},{name:"isFlop",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ISFLOP")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISFLOP")},required:!1,default:t.isFlop||!1},{name:"isRotate",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ISROTATE")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISROTATE")},required:!1,default:t.isRotate||!1},{name:"rotateDegree",type:"input",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ROTATEDEGREE")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ROTATEDEGREE")},required:!1,default:t.rotateDegree||90},{name:"isRemoveExif",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_COMPRESS_ISREMOVEEXIF")},get alias(){return e.i18n.translate("BUILDIN_COMPRESS_ISREMOVEEXIF")},required:!1,default:t.isRemoveExif||!1}]};var Je=e=>{const t=e.getConfig("buildIn.watermark")||{};return[{name:"isAddWatermark",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_ISADDWATERMARK")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_ISADDWATERMARK")},required:!1,default:t.isAddWatermark||!1},{name:"watermarkType",type:"list",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTYPE")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTYPE")},required:!1,choices:["text","image"],default:t.watermarkType||"text"},{name:"isFullScreenWatermark",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_ISFULLSCREENWATERMARK")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_ISFULLSCREENWATERMARK")},required:!1,default:t.isFullScreenWatermark||!1},{name:"watermarkDegree",type:"input",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKDEGREE")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKDEGREE")},required:!1,default:t.watermarkDegree||0},{name:"watermarkText",type:"input",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTEXT")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTEXT")},required:!1,default:t.watermarkText||""},{name:"watermarkFontPath",type:"input",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH")},required:!1,default:t.watermarkFontPath||""},{name:"watermarkScaleRatio",type:"input",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKFONTRATIO")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKFONTRATIO")},required:!1,default:t.watermarkScaleRatio||.15},{name:"watermarkColor",type:"input",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKFONTCOLOR")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKFONTCOLOR")},required:!1,default:t.watermarkColor||"rgba(204, 204, 204, 0.45)"},{name:"watermarkImagePath",type:"input",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKIMAGEPATH")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKIMAGEPATH")},required:!1,default:t.watermarkImagePath||""},{name:"watermarkPosition",type:"list",get prefix(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKPOSITION")},get alias(){return e.i18n.translate("BUILDIN_WATERMARK_WATERMARKPOSITION")},required:!1,choices:["north","northeast","southeast","south","southwest","northwest","west","east","center","centre"],default:t.watermarkPosition||"southeast"}]};var et=e=>{const t=e.getConfig("buildIn.rename")||{};return[{name:"format",type:"input",get prefix(){return e.i18n.translate("BUILDIN_RENAME_FORMAT")},get alias(){return e.i18n.translate("BUILDIN_RENAME_FORMAT")},required:!1,default:t.format||"{filename}"},{name:"enable",type:"confirm",get prefix(){return e.i18n.translate("BUILDIN_RENAME_ENABLE")},get alias(){return e.i18n.translate("BUILDIN_RENAME_ENABLE")},required:!1,default:t.enable||!1}]};const tt=e=>({alistplist:e.i18n.translate("PICBED_ALIST_PLIST"),aliyun:e.i18n.translate("PICBED_ALICLOUD"),"aws-s3-plist":e.i18n.translate("PICBED_AWSS3PLIST"),github:e.i18n.translate("PICBED_GITHUB"),imgur:e.i18n.translate("PICBED_IMGUR"),local:e.i18n.translate("PICBED_LOCAL"),lskyplist:e.i18n.translate("PICBED_LSKY_PLIST"),piclist:e.i18n.translate("PICBED_PICLIST"),qiniu:e.i18n.translate("PICBED_QINIU"),sftpplist:e.i18n.translate("PICBED_SFTPPLIST"),smms:e.i18n.translate("PICBED_SMMS"),tcyun:e.i18n.translate("PICBED_TENCENTCLOUD"),telegraphplist:e.i18n.translate("PICBED_TELEGRAPH"),upyun:e.i18n.translate("PICBED_UPYUN"),webdavplist:e.i18n.translate("PICBED_WEBDAVPLIST")}),rt=async(e,t,r,n)=>{const a=await e.cmd.inquirer.prompt(t),i="uploader"===r?`picBed.${n}`:"transformer"===r?`transformer.${n}`:"buildin"===r?`buildIn.${n}`:n;e.saveConfig({[i]:a}),"uploader"===r?e.saveConfig({"picBed.current":n,"picBed.uploader":n}):"transformer"===r&&e.saveConfig({"picBed.transformer":n})},nt={handle:e=>{e.cmd.program.command("set").alias("config").arguments("<module> [name]").description("configure config of picgo modules, uploader|transformer|plugin|buildin").action(((t,r)=>{(async()=>{var n,a;try{switch(t){case"buildin":if("compress"===r)await rt(e,Ze(e),t,r);else if("watermark"===r)await rt(e,Je(e),t,r);else if("rename"===r)await rt(e,et(e),t,r);else{const r=[{type:"list",name:"buildin",choices:[{name:e.i18n.translate("BUILDIN_COMPRESS"),value:"compress"},{name:e.i18n.translate("BUILDIN_WATERMARK"),value:"watermark"},{name:e.i18n.translate("BUILDIN_RENAME"),value:"rename"}],message:"Choose a buildin module"}],n=await e.cmd.inquirer.prompt(r);"compress"===n.buildin?await rt(e,Ze(e),t,n.buildin):"watermark"===n.buildin?await rt(e,Je(e),t,n.buildin):"rename"===n.buildin&&await rt(e,et(e),t,n.buildin)}break;case"uploader":case"transformer":if(r){const n=e.helper[t].get(r);if(!n)return void e.log.error(`No ${t} named ${r}`);n.config&&await rt(e,n.config(e),t,r)}else{const r=[{type:"list",name:`${t}`,choices:e.helper[t].getIdList().map((t=>({name:tt(e)[t]||t,value:t}))),message:`Choose a(n) ${t}`}],n=await e.cmd.inquirer.prompt(r),a=e.helper[t].get(n[t]);(null==a?void 0:a.config)&&await rt(e,a.config(e),t,n[t])}break;case"plugin":if(r){if(r.includes("picgo-plugin-")||(r=`picgo-plugin-${r}`),!Object.keys(e.getConfig("picgoPlugins")).includes(r))return void e.log.error(`No plugin named ${r}`);(null===(n=e.pluginLoader.getPlugin(r))||void 0===n?void 0:n.config)&&await rt(e,e.pluginLoader.getPlugin(r).config(e),"plugin",r)}else{const t=[{type:"list",name:"plugin",choices:e.pluginLoader.getFullList(),message:"Choose a plugin"}],r=await e.cmd.inquirer.prompt(t);(null===(a=e.pluginLoader.getPlugin(r.plugin))||void 0===a?void 0:a.config)&&await rt(e,e.pluginLoader.getPlugin(r.plugin).config(e),"plugin",r.plugin)}break;default:return e.log.warn(`No module named ${t}`),void e.log.warn("Available modules are uploader|transformer|plugin|buildin")}e.log.success("Configure config successfully!"),"plugin"===t&&e.log.info("If you want to use this config, please run 'picgo use plugins'")}catch(t){if(e.log.error(t),process.argv.includes("--debug"))throw t}})().catch((t=>{e.log.error(t)}))}))}},at={handle:async e=>{const t=e.cmd;t.program.command("use").arguments("[module]").description("use modules of picgo").action((r=>{(async()=>{try{let n=[];const a={uploader:{type:"list",name:"uploader",message:"Use an uploader",choices:e.helper.uploader.getIdList().map((t=>({name:tt(e)[t]||t,value:t}))),default:e.getConfig("picBed.uploader")||e.getConfig("picBed.current")||"smms"},transformer:{type:"list",name:"transformer",message:"Use a transformer",choices:e.helper.transformer.getIdList(),default:e.getConfig("picBed.transformer")||"path"},plugins:{type:"checkbox",name:"plugins",message:"Use plugins",choices:e.pluginLoader.getFullList(),default:Object.keys(e.getConfig("picgoPlugins")).filter((t=>e.getConfig(`picgoPlugins.${t}`)))}};if(r){if(!a[r])return e.log.warn(`No module named ${r}`),void e.log.warn("Available modules are uploader|transformer|plugins");n.push(a[r])}else n=Object.keys(a).map((e=>a[e]));const i=await t.inquirer.prompt(n);if(i.plugins){const t=e.getConfig("picgoPlugins");Object.keys(t).forEach((e=>{i.plugins.includes(e)?t[e]=!0:t[e]=!1})),e.saveConfig({picgoPlugins:t})}e.saveConfig({"picBed.current":i.uploader||e.getConfig("picBed.current"),"picBed.uploader":i.uploader||e.getConfig("picBed.current"),"picBed.transformer":i.transformer||"path"}),e.log.success("Configure saved successfully!")}catch(t){if(e.log.error(t),process.argv.includes("--debug"))throw t}})().catch((t=>{e.log.error(t)}))}))}},it={handle:e=>{e.cmd.program.option("-p, --proxy <url>","set proxy for uploading",(t=>{e.setConfig({"picBed.proxy":t})}))}},st=async(e,t)=>{try{const r=ot(t.tmp),n=C.join(t.tmp,"template");let a={};r.prompts&&r.prompts.length>0&&(a=await e.cmd.inquirer.prompt(r.prompts));let i=await y(["**/*"],{cwd:n,dot:!0});if(i=i.filter((t=>{let n="";return Object.keys(r.filters).forEach((e=>{M(t,e,{dot:!0})&&(n=t)})),!n||Et(e,r.filters[n],a)})),0===i.length)return void e.log.warn("Template files not found!");const s=It(i,n,a);lt(t.dest,s),"function"==typeof r.complete&&r.complete({answers:a,options:t,files:i,ctx:e}),r.completeMessage&&e.log.success(r.completeMessage),e.log.success("Done!")}catch(t){e.log.error(t)}},Et=(e,t,r)=>{const n=new Function("data","with (data) { return "+t+"}");try{return n(r)}catch(r){return e.log.error(`Error when evaluating filter condition: ${JSON.stringify(t)}`),!1}},ot=e=>{const r=C.join(e,"index.js");if(t.existsSync(r)){return require(r)}return{}},It=(e,r,n)=>{const a={};return e.forEach((e=>{const i=t.readFileSync(C.join(r,e),"utf8"),s=G(i,n);(Buffer.isBuffer(s)||/[^\s]/.test(s))&&(a[e]=s)})),a},lt=(e,r)=>{Object.keys(r).forEach((n=>{const i=C.join(e,n);a(C.dirname(i)),t.writeFileSync(i,r[n])}))},St=(e,r)=>{r.offline?t.existsSync(r.template)?st(e,r).catch((t=>{e.log.error(t)})):e.log.error(`Local template ${r.template} not found`):(r.template=r.hasSlash?r.template:"PicGo/picgo-template-"+r.template,_t(e,r))},_t=(e,r)=>{t.existsSync(r.tmp)&&O(r.tmp),e.log.info("Template files are downloading..."),R(r.template,r.tmp,{clone:r.clone},(t=>{t?e.log.error(t):(e.log.success("Template files are downloaded!"),st(e,r).catch((t=>{e.log.error(t)})))}))},Pt={handle:async e=>{e.cmd.program.command("init").arguments("<template> [project]").option("--clone","use git clone").option("--offline","use cached template").description("create picgo plugin's development templates").action(((r,n,a)=>{(async()=>{try{const i=r.includes("/"),s=!n||"."===n,E=C.resolve(n||"."),o=a.clone||!1,I=a.offline||!1,l=C.join(T(),".piclist/templates",r.replace(/[/:]/g,"-"));a.offline&&(r=l);const S={template:r,project:n,hasSlash:i,inPlace:s,dest:E,clone:o,tmp:l,offline:I};s||t.existsSync(E)?await e.cmd.inquirer.prompt([{type:"confirm",message:s?"Generate project in current directory?":"Target directory exists. Continue?",name:"ok"}]).then((t=>{t.ok&&St(e,S)})):St(e,S)}catch(t){if(e.log.error(t),process.argv.includes("--debug"))throw t}})().catch((t=>{e.log.error(t)}))})).on("--help",(()=>{console.log(),console.log("Examples:"),console.log(),console.log(N.gray(" # create a new project with an official template")),console.log(" $ picgo init plugin my-project"),console.log(),console.log(N.gray(" # create a new project straight from a github template")),console.log(" $ picgo init username/repo my-project"),console.log()}))}},ut={handle:e=>{e.cmd.program.command("i18n").arguments("[lang]").description("change language, zh-CN, zh-TW, en").action((async(t="")=>{const r=e.i18n.getLanguageList();if(!t){const n=[{type:"list",name:"i18n",choices:r,message:"Choose a language",default:e.getConfig("settings.language")||"zh-CN"}];t=(await e.cmd.inquirer.prompt(n)).i18n}r.includes(t)?(e.i18n.setLanguage(t),e.log.success(`Language set to ${t}`)):e.log.warn("No such language")}))}};class ct{constructor(e){this.name=e,this.list=new Map,this.pluginIdMap=new Map}register(e,t){var r;if(!e)throw new TypeError("id is required!");if("function"!=typeof t.handle)throw new TypeError("plugin.handle must be a function!");if(this.list.has(e))throw new TypeError(`${this.name} duplicate id: ${e}!`);this.list.set(e,t),ct.currentPlugin&&(this.pluginIdMap.has(ct.currentPlugin)?null===(r=this.pluginIdMap.get(ct.currentPlugin))||void 0===r||r.push(e):this.pluginIdMap.set(ct.currentPlugin,[e]))}unregister(e){if(this.pluginIdMap.has(e)){const t=this.pluginIdMap.get(e);null==t||t.forEach((e=>{this.list.delete(e)}))}}getName(){return this.name}get(e){return this.list.get(e)}getList(){return[...this.list.values()]}getIdList(){return[...this.list.keys()]}}const pt=(e=null)=>{ct.currentPlugin=e};class At{constructor(e){this.name="commander",this.list=new Map,this.pluginIdMap=new Map,this.program=new g,this.inquirer=D,this.ctx=e}getName(){return this.name}init(){var e;this.program.version("1.9.0","-v, --version").option("-d, --debug","debug mode",(()=>{this.ctx.setConfig({debug:!0})})).option("-s, --silent","silent mode",(()=>{this.ctx.setConfig({silent:!0})})).on("command:*",(()=>{this.ctx.log.error(`Invalid command: ${this.program.args.join(" ")}\nSee --help for a list of available commands.`),process.exit(1)})),(e=this.ctx).cmd.register("pluginHandler",Se),e.cmd.register("config",_e),e.cmd.register("setting",nt),e.cmd.register("upload",Qe),e.cmd.register("use",at),e.cmd.register("proxy",it),e.cmd.register("init",Pt),e.cmd.register("i18n",ut)}register(e,t){var r;if(!e)throw new TypeError("name is required!");if("function"!=typeof t.handle)throw new TypeError("plugin.handle must be a function!");if(this.list.has(e))throw new TypeError(`${this.name} plugin duplicate id: ${e}!`);this.list.set(e,t);const n=ct.currentPlugin;null!==n&&(this.pluginIdMap.has(n)?null===(r=this.pluginIdMap.get(n))||void 0===r||r.push(e):this.pluginIdMap.set(n,[e]))}unregister(e){if(this.pluginIdMap.has(e)){const t=this.pluginIdMap.get(e);null==t||t.forEach((e=>{this.list.delete(e)}))}}loadCommands(){this.getList().forEach((e=>{try{e.handle(this.ctx)}catch(e){this.ctx.log.error(e)}}))}get(e){return this.list.get(e)}getList(){return[...this.list.values()]}getIdList(){return[...this.list.keys()]}}var Tt,Ct,gt;!function(e){e.success="success",e.info="info",e.warn="warn",e.error="error"}(Tt||(Tt={})),function(e){e.UPLOAD_PROGRESS="uploadProgress",e.FAILED="failed",e.BEFORE_TRANSFORM="beforeTransform",e.BEFORE_UPLOAD="beforeUpload",e.AFTER_UPLOAD="afterUpload",e.FINISHED="finished",e.INSTALL="install",e.UNINSTALL="uninstall",e.UPDATE="update",e.NOTIFICATION="notification"}(Ct||(Ct={})),function(e){e.CONFIG_CHANGE="CONFIG_CHANGE"}(gt||(gt={}));class Dt{constructor(e){this.level={[Tt.success]:"green",[Tt.info]:"blue",[Tt.warn]:"yellow",[Tt.error]:"red"},this.ctx=e}handleLog(e,...t){if(this.logLevel=this.ctx.getConfig("settings.logLevel"),!this.ctx.getConfig("silent")&&this.checkLogLevel(e,this.logLevel)){const r=N[this.level[e]](`[PicList ${e.toUpperCase()}]:`);console.log(r,...t),this.logPath=this.ctx.getConfig("settings.logPath")||C.join(this.ctx.baseDir,"./piclist.log"),setTimeout((()=>{try{const r=this.checkLogFileIsLarge(this.logPath);if(r.isLarge){const e=`Log file is too large (> ${r.logFileSizeLimit/1024/1024||"10"} MB), recreate log file`;console.log(N.yellow("[PicList WARN]:"),e),this.recreateLogFile(this.logPath),t.unshift(e)}this.handleWriteLog(this.logPath,e,...t)}catch(e){console.error("[PicList Error] on checking log file size",e)}}),0)}}checkLogFileIsLarge(e){if(t.existsSync(e)){const r=t.statSync(e).size,n=1024*Ge(this.ctx.getConfig("settings.logFileSizeLimit")||10)*1024;return{isLarge:r>n,logFileSize:r,logFileSizeLimit:n}}return{isLarge:!1}}recreateLogFile(e){t.existsSync(e)&&(t.unlinkSync(e),i(e))}handleWriteLog(e,r,...n){try{let a=`${b().format("YYYY-MM-DD HH:mm:ss")} [PicList ${r.toUpperCase()}] `;n.forEach((e=>{e instanceof Error&&"error"===r?a+=`\n------Error Stack Begin------\n${x.format(null==e?void 0:e.stack)}\n-------Error Stack End------- `:("object"==typeof e&&(e=JSON.stringify(e,null,2)),a+=`${e} `)})),a+="\n",t.appendFileSync(e,a)}catch(e){console.error("[PicList Error] on writing log file",e)}}checkLogLevel(e,t){return void 0===t||"all"===t||(Array.isArray(t)?t.some((t=>t===e||"all"===t)):e===t)}success(...e){this.handleLog(Tt.success,...e)}info(...e){this.handleLog(Tt.info,...e)}error(...e){this.handleLog(Tt.error,...e)}warn(...e){this.handleLog(Tt.warn,...e)}debug(...e){be()&&this.handleLog(Tt.info,...e)}}class dt{constructor(e){this.ctx=e}async install(e,t={},r){const n=[],a=e.map((e=>mt(this.ctx,e))).filter((e=>this.ctx.pluginLoader.hasPlugin(e.pkgName)?(n.push(e.pkgName),this.ctx.log.success(`PicList has already installed ${e.pkgName}`),!1):!!e.success)),i=a.map((e=>e.fullName)),s=a.map((e=>e.pkgName));if(i.length>0){const e=await this.execCommand("install",i,this.ctx.baseDir,t,r);if(e.code){const t=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_REASON",{code:`${e.code}`,data:e.data});this.ctx.log.error(t),this.ctx.emit("installFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED"),body:t});return{success:!1,body:t}}s.forEach((e=>{this.ctx.pluginLoader.registerPlugin(e)})),this.ctx.log.success(this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS")),this.ctx.emit("installSuccess",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS"),body:[...s,...n]});return{success:!0,body:[...s,...n]}}if(0===n.length){const e=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID");this.ctx.log.error(e),this.ctx.emit("installFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED"),body:e});return{success:!1,body:e}}this.ctx.log.success(this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS")),this.ctx.emit("installSuccess",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS"),body:[...s,...n]});return{success:!0,body:[...s,...n]}}async uninstall(e){const t=e.map((e=>mt(this.ctx,e))).filter((e=>e.success)).map((e=>e.pkgName));if(t.length>0){const e=await this.execCommand("uninstall",t,this.ctx.baseDir);if(e.code){const t=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_REASON",{code:`${e.code}`,data:e.data});this.ctx.log.error(t),this.ctx.emit("uninstallFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED"),body:t});return{success:!1,body:t}}t.forEach((e=>{this.ctx.pluginLoader.unregisterPlugin(e)})),this.ctx.log.success(this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS")),this.ctx.emit("uninstallSuccess",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS"),body:t});return{success:!0,body:t}}{const e=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID");this.ctx.log.error(e),this.ctx.emit("uninstallFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED"),body:e});return{success:!1,body:e}}}async update(e,t={},r){const n=e.map((e=>mt(this.ctx,e))).filter((e=>e.success)).map((e=>e.pkgName));if(n.length>0){const e=await this.execCommand("update",n,this.ctx.baseDir,t,r);if(e.code){const t=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_REASON",{code:`${e.code}`,data:e.data});this.ctx.log.error(t),this.ctx.emit("updateFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED"),body:t});return{success:!1,body:t}}this.ctx.log.success(this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS")),this.ctx.emit("updateSuccess",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS"),body:n});return{success:!0,body:n}}{const e=this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_VALID");this.ctx.log.error(e),this.ctx.emit("updateFailed",{title:this.ctx.i18n.translate("PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED"),body:e});return{success:!1,body:e}}}async execCommand(e,t,r,n={},a={}){const i=n.registry||this.ctx.getConfig("settings.registry"),s=n.proxy||this.ctx.getConfig("settings.proxy");return await new Promise((n=>{var E,o;let I=[e].concat(t).concat("--color=always").concat("--save");i&&(I=I.concat(`--registry=${i}`)),s&&(I=I.concat(`--proxy=${s}`));try{const e=w("npm",I,{cwd:r,env:Object.assign({},process.env,a)});let t="";null===(E=e.stdout)||void 0===E||E.on("data",(e=>{t+=e})).pipe(process.stdout),null===(o=e.stderr)||void 0===o||o.on("data",(e=>{t+=e})).pipe(process.stderr),e.on("close",(e=>{n(e?{code:e,data:t}:{code:0,data:t})})),e.on("error",(e=>{this.ctx.log.error(e),this.ctx.log.error("NPM is not installed"),this.ctx.emit(Ct.FAILED,"NPM is not installed")}))}catch(e){this.ctx.log.error(e),this.ctx.emit(Ct.FAILED,e)}}))}}const mt=(e,t)=>{const r={success:!1,fullName:"",pkgName:""},n=he(t,e.log);if(!n)return r;const a=Be(n,e.log);return a?{success:!0,fullName:n,pkgName:a}:r};class Lt{constructor(e){this.list=[],this.fullList=new Set,this.pluginMap=new Map,this.ctx=e,this.init()}init(){const e=C.join(this.ctx.baseDir,"package.json");if(!t.existsSync(e)){const r={name:"picgo-plugins",description:"picgo-plugins",repository:"https://github.com/Kuingsmile/PicList-Core",license:"MIT"};t.writeFileSync(e,JSON.stringify(r),"utf8")}}resolvePlugin(e,t){try{return W(t,{basedir:e.baseDir})}catch(r){return C.join(e.baseDir,"node_modules",t)}}load(){const e=C.join(this.ctx.baseDir,"node_modules/");if(!t.existsSync(e))return!1;const r=C.join(this.ctx.baseDir,"package.json"),a=n(r),i=Object.keys(a.dependencies||{}),s=Object.keys(a.devDependencies||{}),E=i.concat(s).filter((e=>{if(!/^picgo-plugin-|^@[^/]+\/picgo-plugin-/.test(e))return!1;const r=this.resolvePlugin(this.ctx,e);return t.existsSync(r)}));for(const e of E)this.registerPlugin(e);return!0}registerPlugin(e,t){if(e&&"string"==typeof e){this.fullList.add(e);try{if(t){this.list.push(e),pt(e);const r=t(this.ctx);this.pluginMap.set(e,r),r.register(this.ctx)}else if(!0===this.ctx.getConfig(`picgoPlugins.${e}`)||void 0===this.ctx.getConfig(`picgoPlugins.${e}`)){this.list.push(e),pt(e),this.getPlugin(e).register(this.ctx);const t=`picgoPlugins[${e}]`;this.ctx.saveConfig({[t]:!0})}}catch(t){this.pluginMap.delete(e),this.list=this.list.filter((t=>t!==e)),this.fullList.delete(e),this.ctx.log.error(t),this.ctx.emit(Ct.NOTIFICATION,{title:`Plugin ${e} Load Error`,body:t})}}else this.ctx.log.warn("Please provide valid plugin")}unregisterPlugin(e){this.list=this.list.filter((t=>t!==e)),this.fullList.delete(e),this.pluginMap.delete(e),pt(e),this.ctx.helper.uploader.unregister(e),this.ctx.helper.transformer.unregister(e),this.ctx.helper.beforeTransformPlugins.unregister(e),this.ctx.helper.beforeUploadPlugins.unregister(e),this.ctx.helper.afterUploadPlugins.unregister(e),this.ctx.cmd.unregister(e),this.ctx.removeConfig("picgoPlugins",e)}getPlugin(e){if(this.pluginMap.has(e))return this.pluginMap.get(e);const t=C.join(this.ctx.baseDir,"node_modules/"),r=require(t+e)(this.ctx);return this.pluginMap.set(e,r),r}getList(){return this.list}hasPlugin(e){return this.fullList.has(e)}getFullList(){return[...this.fullList]}}const ft=new e,ht=new H.Agent({maxVersion:"TLSv1.2",minVersion:"TLSv1.2",rejectUnauthorized:!1});function Bt(e,t,r){"object"==typeof r&&"value"in r&&"options"in r?e.append(t,r.value,r.options):e.append(t,r)}function Ut(e){return Object.assign(Object.assign({},e),{statusCode:e.status,body:e.data})}function Nt(e){var t,r,n,a,i,s,E;const o={method:(null===(r=null===(t=null==e?void 0:e.config)||void 0===t?void 0:t.method)||void 0===r?void 0:r.toUpperCase())||"",url:(null===(n=null==e?void 0:e.config)||void 0===n?void 0:n.url)||"",statusCode:(null===(a=null==e?void 0:e.response)||void 0===a?void 0:a.status)||0,message:(null==e?void 0:e.message)||"",stack:(null==e?void 0:e.stack)||{},response:{status:(null===(i=null==e?void 0:e.response)||void 0===i?void 0:i.status)||0,statusCode:(null===(s=null==e?void 0:e.response)||void 0===s?void 0:s.status)||0,body:(null===(E=null==e?void 0:e.response)||void 0===E?void 0:E.data)||""}};return Promise.reject(o)}class Rt{constructor(e){this.proxy="",this.options={},this.ctx=e,this.init(),ft.on(gt.CONFIG_CHANGE,(e=>{var t;switch(e.configName){case"picBed":(null===(t=e.value)||void 0===t?void 0:t.proxy)&&(this.proxy=e.value.proxy);break;case"picBed.proxy":this.proxy=e.value}}))}init(){const e=this.ctx.getConfig("picBed.proxy");e&&(this.proxy=e)}handleProxy(){if(this.proxy)try{const e=new L(this.proxy);return{host:e.hostname,port:parseInt(e.port||"0",10),protocol:e.protocol}}catch(e){}return!1}request(e){var t;this.options.proxy=this.handleProxy(),this.options.headers=e.headers||{},this.options.maxBodyLength=1/0,this.options.maxContentLength=1/0,this.options.proxy&&(null===(t=e.url)||void 0===t?void 0:t.startsWith("https://"))?(this.options.httpsAgent=$({proxy:{host:this.options.proxy.host,port:this.options.proxy.port}}),this.options.proxy=!1):this.options.httpsAgent=ht;const r=K.create(this.options);r.interceptors.response.use(Ut,Nt);const n=function(e){var t;let r=!1;const n=Object.assign(Object.assign({},e),{url:e.url||"",headers:e.headers||{}});if(e.proxy){let a=e.proxy;if("string"==typeof a){try{a=new L(e.proxy)}catch(e){a=!1,n.proxy=!1,console.error(e)}r=!0}a&&((null===(t=e.url)||void 0===t?void 0:t.startsWith("https://"))?(n.proxy=!1,n.httpsAgent=$({proxy:{host:null==a?void 0:a.hostname,port:parseInt(null==a?void 0:a.port,10)}})):n.proxy={host:a.hostname,port:parseInt(a.port,10),protocol:"http"})}if("formData"in e){const t=new F;for(const r in e.formData)Bt(t,r,e.formData[r]);n.data=t,n.headers=Object.assign(n.headers||{},t.getHeaders()),r=!0,delete n.formData}return"body"in e&&(n.data=e.body,r=!0,delete n.body),"qs"in e&&(n.params=e.qs,r=!0),n.__isOldOptions=r,n}(e);return r.interceptors.request.use((function(e){var t,r,n;let a="";return(null===(t=null==e?void 0:e.headers)||void 0===t?void 0:t.contentType)?(a=e.headers.contentType,delete e.headers.contentType):(null===(r=null==e?void 0:e.headers)||void 0===r?void 0:r.ContentType)?(a=e.headers.ContentType,delete e.headers.ContentType):(null===(n=null==e?void 0:e.headers)||void 0===n?void 0:n["content-type"])&&(a=e.headers["content-type"],delete e.headers["content-type"]),""!==a&&e.headers&&(e.headers["Content-Type"]=a),e})),"resolveWithFullResponse"in e&&e.resolveWithFullResponse?r.request(n):r.request(n).then((t=>n.__isOldOptions?"json"in e?e.json?t.data:void 0:JSON.stringify(t.data):t.data))}}class Ot extends e{constructor(e){super(),this.ctx=e,this.ttfPath=C.join(e.baseDir,"assets","simhei.ttf"),a(C.join(e.baseDir,"imgTemp")),s(C.join(e.baseDir,"piclistTemp"))}async downloadTTF(){try{if(a(C.dirname(this.ttfPath)),t.existsSync(this.ttfPath)&&t.statSync(this.ttfPath).size>0)return!0;this.ctx.log.info("Download ttf file.");const e=await K.get("https://release.piclist.cn/simhei.ttf",{responseType:"arraybuffer"});return t.writeFileSync(this.ttfPath,e.data),this.ctx.log.info("Download ttf file successfully."),!0}catch(e){return this.ctx.log.error("Download ttf file failed."),!1}}helpGetOption(e){const t=e.getConfig("buildIn.compress"),r=e.getConfig("buildIn.watermark"),n=e.getConfig("picBed.uploader")||e.getConfig("picBed.current")||"smms";return!e.helper.uploader.get(n)&&t?t.picBed="smms":t&&(t.picBed=n),{compressOptions:t,watermarkOptions:r}}async start(e){const r=(e=>({configPath:e.configPath,baseDir:e.baseDir,log:e.log,cmd:e.cmd,output:[],input:[],rawInput:[],pluginLoader:e.pluginLoader,pluginHandler:e.pluginHandler,Request:e.Request,helper:e.helper,VERSION:e.VERSION,GUI_VERSION:e.GUI_VERSION,request:e.request,i18n:e.i18n,getConfig:e.getConfig.bind(e),saveConfig:e.saveConfig.bind(e),removeConfig:e.removeConfig.bind(e),setConfig:e.setConfig.bind(e),unsetConfig:e.unsetConfig.bind(e),upload:e.upload.bind(e),addListener:e.addListener.bind(e),on:e.on.bind(e),once:e.once.bind(e),removeListener:e.removeListener.bind(e),off:e.off.bind(e),removeAllListeners:e.removeAllListeners.bind(e),setMaxListeners:e.setMaxListeners.bind(e),getMaxListeners:e.getMaxListeners.bind(e),listeners:e.listeners.bind(e),rawListeners:e.rawListeners.bind(e),emit:e.emit.bind(e),listenerCount:e.listenerCount.bind(e),prependListener:e.prependListener.bind(e),prependOnceListener:e.prependOnceListener.bind(e),eventNames:e.eventNames.bind(e)}))(this.ctx);try{if(!Array.isArray(e))throw new Error("Input must be an array.");r.input=e,r.rawInputPath=[],r.rawInput=_(e),r.output=[];const{compressOptions:n,watermarkOptions:a}=this.helpGetOption(r);if(r.emit(Ct.UPLOAD_PROGRESS,0),r.emit(Ct.BEFORE_TRANSFORM,r),r.log.info("Before transform"),n||a){const e=C.join(r.baseDir,"piclistTemp");await Promise.allSettled(r.input.map((async(i,s)=>{const E=Ae(i),o=E?await de(i,r):{success:!1};if(E&&(!o.success||!o.buffer))return;let I,l=!1;r.rawInputPath[s]=i;const S=E?o.extname||"":C.extname(i),_=E?o.buffer:t.readFileSync(i);if(Ve(a,S)){if(!(null==a?void 0:a.watermarkFontPath)&&"image"!==(null==a?void 0:a.watermarkType)){await this.downloadTTF()||(this.ctx.log.warn("Download ttf file failed, skip add watermark."),l=!0)}l||(r.log.info("Add watermark to image"),I=await $e(_,a,this.ttfPath,r.log))}if(je(n,S))if(r.log.info("Compress or convert image"),E||".heic"!==S&&".heif"!==S)I=await ke(null!=I?I:_,n,S,r.log);else{const a=await v({buffer:_,format:"JPEG",quality:1}),s=C.join(e,`${C.basename(i,S)}.jpg`);t.writeFileSync(s,Buffer.from(a)),I=await ke(t.readFileSync(s),n,".jpg",r.log)}if(!I&&(null==n?void 0:n.isRemoveExif)&&(r.log.info("Remove exif info."),I=await ze(_,S)),I){let a=(null==n?void 0:n.isConvert)?qe(n,S):S;a=a.startsWith(".")?a:`.${a}`;const l=E?C.join(e,`${o.fileName?`${C.basename(o.fileName,C.extname(o.fileName))}`:(new Date).getTime()}${a}`):C.join(e,`${C.basename(i,S)}${a}`);r.rawInputPath[s]=C.join(C.dirname(i),E?C.basename(l):`${C.basename(i,S)}${a}`),t.writeFileSync(l,I),r.input[s]=l}})))}else for(const e of r.input)r.rawInputPath.push(e);await this.beforeTransform(r),await this.doTransform(r);const i=r.getConfig("buildIn.rename")||{};if(i.enable){const e=i.format||"{filename}";r.output=r.output.map(((t,n)=>{let a=t.fileName;return e&&(a=pe(r.rawInputPath[n],e,void 0,t.base64Image?t.base64Image:t.buffer),a=a.replace(/\/+/g,"/"),"/"===a.slice(-1)&&(a+=n.toString())),t.fileName=a,t}))}return await this.beforeUpload(r),await this.doUpload(r),r.input=r.rawInput,await this.afterUpload(r),r}catch(e){if(r.log.warn(Ct.FAILED),r.emit(Ct.UPLOAD_PROGRESS,-1),r.emit(Ct.FAILED,e),r.log.error(e),r.getConfig("debug"))throw e;return r}}async beforeTransform(e){return await this.handlePlugins(e.helper.beforeTransformPlugins,e),e}async doTransform(e){e.emit(Ct.UPLOAD_PROGRESS,30);const t=e.getConfig("picBed.transformer")||"path";let r=t,n=e.helper.transformer.get(t);return n||(n=e.helper.transformer.get("path"),r="path",e.log.warn(`Can't find transformer - ${t}, switch to default transformer - path`)),e.log.info(`Transforming... Current transformer is [${r}]`),await(null==n?void 0:n.handle(e)),e}async beforeUpload(e){return e.emit(Ct.UPLOAD_PROGRESS,60),e.log.info("Before upload"),e.emit(Ct.BEFORE_UPLOAD,e),await this.handlePlugins(e.helper.beforeUploadPlugins,e),e}async doUpload(e){let t=e.getConfig("picBed.uploader")||e.getConfig("picBed.current")||"smms",r=e.helper.uploader.get(t),n=t;r||(e.log.warn(`Can't find uploader - ${t}, switch to default uploader - smms`),t="smms",n="smms",r=e.helper.uploader.get("smms")),e.log.info(`Uploading... Current uploader is [${n}]`),await(null==r?void 0:r.handle(e));for(const r of e.output)r.type=t;return e}async afterUpload(e){e.emit(Ct.AFTER_UPLOAD,e),e.emit(Ct.UPLOAD_PROGRESS,100),await this.handlePlugins(e.helper.afterUploadPlugins,e);let t="";const r=e.output.length,n=!0===e.getConfig("settings.encodeOutputURL");for(let a=0;a<r;a++)void 0!==e.output[a].imgUrl&&(t+=n?Ce(e.output[a].imgUrl):e.output[a].imgUrl,a!==r-1&&(t+="\n")),delete e.output[a].base64Image,delete e.output[a].buffer;return e.emit(Ct.FINISHED,e),e.log.success(`\n${t}`),e}async handlePlugins(e,t){const r=e.getList(),n=e.getIdList(),a=e.getName();return await Promise.all(r.map((async(e,r)=>{try{t.log.info(`${a}: ${n[r]} running`),await e.handle(t)}catch(e){throw t.log.error(`${a}: ${n[r]} error`),e}}))),t}}function Mt({path:e,startSlash:t=!1,endSlash:r=!0,rootToEmpty:n=!0}){const a=null==e?void 0:e.replace(/^\/+|\/+$/g,"").replace(/\/{2,}/g,"/");return a?`${t?"/":""}${a}${r?"/":""}`:n?"":"/"}function yt(e){return e.replace(/\/{2,}/g,"/").split("/").map((e=>encodeURIComponent(e))).join("/")}const Gt=(e,t,r,n,a)=>({method:"PUT",url:`${e}/api/fs/form`,headers:{contentType:"multipart/form-data","User-Agent":"PicList",Authorization:t,"File-Path":encodeURIComponent(n)},formData:{file:{value:a,options:{filename:r}}},resolveWithFullResponse:!0}),bt=(e,t)=>{if(200!==t.statusCode||200!==t.body.code||"success"!==t.body.message)throw e.emit(Ct.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS_AND_NETWORK"),text:t.body.message}),new Error(t.body.message)},xt=e=>{const{url:t,token:r,username:n,password:a,uploadPath:i,webPath:s,customUrl:E}=e;return{url:(t||"").replace(/\/$/,""),token:r||"",username:n||"",password:a||"",uploadPath:Mt({path:i||"",startSlash:!0,endSlash:!0,rootToEmpty:!1}),webPath:s?Mt({path:s||"",startSlash:!0,endSlash:!0,rootToEmpty:!1}):"",customUrl:(E||"").replace(/\/$/,"")}},wt=async e=>{const t=e.getConfig("picBed.alistplist");if(!t)throw new Error("Can not find alist config!");const{url:r,username:n,password:a,uploadPath:i,webPath:s,customUrl:E}=xt(t);let{token:o}=xt(t);if(o||(o=await(async(e,t,r,n)=>{const a=e.getConfig("picgo-plugin-buildin-alistplist");if(a&&a.refreshedAt&&Date.now()-a.refreshedAt<36e5&&a.token)return a.token;const i=await K.post(`${t}/api/auth/login`,{username:r,password:n});if(200===i.data.code&&"success"===i.data.message){const t=i.data.data.token;return e.saveConfig({"picgo-plugin-buildin-alistplist":{token:t,refreshedAt:Date.now()}}),t}throw new Error("Get token failed")})(e,r,n,a)),!r||!(o||n&&a))throw new Error("Please check your alist config!");const I=e.output;for(const t of I)if(t.fileName&&t.buffer){let n=t.buffer;!n&&t.base64Image&&(n=Buffer.from(t.base64Image,"base64"));const a=`${i}${t.fileName}`,I=Gt(r,o,t.fileName,a,n),l=await e.request(I);bt(e,l);const S=`${r}/api/fs/list`,_=`${r}/api/fs/get`,P=await e.request({method:"POST",url:S,headers:{Authorization:o,"Content-Type":"application/json"},body:{password:"",page:1,per_page:1,refresh:!0,path:C.dirname(a)},resolveWithFullResponse:!0});bt(e,P);const u=await e.request({method:"POST",url:_,headers:{Authorization:o,"Content-Type":"application/json"},body:{password:"",path:a,page:1,per_page:1,refresh:!0},resolveWithFullResponse:!0});bt(e,u);const c=u.body.data.sign,p=yt(`${s||i}${t.fileName}`);t.imgUrl=`${E||r}/d${p}`,t.imgUrl+=c?`?sign=${c}`:"",delete t.base64Image,delete t.buffer}return e},Wt=e=>{const t=e.getConfig("picBed.alistplist")||{};return[{name:"url",type:"input",get prefix(){return e.i18n.translate("PICBED_ALIST_URL")},get alias(){return e.i18n.translate("PICBED_ALIST_URL")},get message(){return e.i18n.translate("PICBED_ALIST_MESSAGE_URL")},default:t.url||"",required:!0},{name:"token",type:"input",get prefix(){return e.i18n.translate("PICBED_ALIST_TOKEN")},get alias(){return e.i18n.translate("PICBED_ALIST_TOKEN")},get message(){return e.i18n.translate("PICBED_ALIST_MESSAGE_TOKEN")},default:t.token||"",required:!1},{name:"username",type:"input",get prefix(){return e.i18n.translate("PICBED_ALIST_USERNAME")},get alias(){return e.i18n.translate("PICBED_ALIST_USERNAME")},get message(){return e.i18n.translate("PICBED_ALIST_MESSAGE_USERNAME")},default:t.username||"",required:!1},{name:"password",type:"input",get prefix(){return e.i18n.translate("PICBED_ALIST_PASSWORD")},get alias(){return e.i18n.translate("PICBED_ALIST_PASSWORD")},get message(){return e.i18n.translate("PICBED_ALIST_MESSAGE_PASSWORD")},default:t.password||"",required:!1},{name:"uploadPath",type:"input",get prefix(){return e.i18n.translate("PICBED_ALIST_UPLOAD_PATH")},get alias(){return e.i18n.translate("PICBED_ALIST_UPLOAD_PATH")},get message(){return e.i18n.translate("PICBED_ALIST_MESSAGE_UPLOAD_PATH")},default:t.uploadPath||"",required:!1},{name:"webPath",type:"input",get prefix(){return e.i18n.translate("PICBED_ALIST_WEB_PATH")},get alias(){return e.i18n.translate("PICBED_ALIST_WEB_PATH")},get message(){return e.i18n.translate("PICBED_ALIST_MESSAGE_WEB_PATH")},default:t.webPath||"",required:!1},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_ALIST_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_ALIST_CUSTOMURL")},get message(){return e.i18n.translate("PICBED_ALIST_MESSAGE_CUSTOMURL")},default:t.customUrl||"",required:!1}]};const Kt=()=>(new Date).toUTCString(),Ft=(e,t)=>{const r=Kt(),n=`PUT\n\n${k(t)||"application/octet-stream"}\n${r}\n/${e.bucket}/${e.path}${t}`,a=B.createHmac("sha1",e.accessKeySecret).update(n).digest("base64");return`OSS ${e.accessKeyId}:${a}`},Ht=(e,t,r,n)=>({method:"PUT",url:`https://${e.bucket}.${e.area}.aliyuncs.com/${yt(`${e.path}${t}`)}`,headers:{Host:`${e.bucket}.${e.area}.aliyuncs.com`,Authorization:r,Date:Kt(),"Content-Type":k(t)||"application/octet-stream"},body:n,resolveWithFullResponse:!0}),$t=async e=>{const t=e.getConfig("picBed.aliyun");if(!t)throw new Error("Can't find aliYun OSS config");t.path=Mt({path:t.path});try{const r=e.output,n=(t.customUrl||"").replace(/\/$/,""),a=t.path;for(const i of r)if(i.fileName&&i.buffer){const r=Ft(t,i.fileName);let s=i.buffer;!s&&i.base64Image&&(s=Buffer.from(i.base64Image,"base64"));const E=Ht(t,i.fileName,r,s);if(200!==(await e.request(E)).statusCode)throw new Error("Upload failed");{delete i.base64Image,delete i.buffer;const e=t.options||"";i.imgUrl=n?`${n}/${yt(`${a}${i.fileName}`)}${e}`:`https://${t.bucket}.${t.area}.aliyuncs.com/${yt(`${a}${i.fileName}`)}${e}`}}return e}catch(t){throw e.emit(Ct.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},vt=e=>{const t=e.getConfig("picBed.aliyun")||{};return[{name:"accessKeyId",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_ACCESSKEYID")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_ACCESSKEYID")},default:t.accessKeyId||"",required:!0},{name:"accessKeySecret",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_ACCESSKEYSECRET")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_ACCESSKEYSECRET")},default:t.accessKeySecret||"",required:!0},{name:"bucket",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_BUCKET")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_BUCKET")},default:t.bucket||"",required:!0},{name:"area",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_AREA")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_AREA")},default:t.area||"",get message(){return e.i18n.translate("PICBED_ALICLOUD_MESSAGE_AREA")},required:!0},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_PATH")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_PATH")},get message(){return e.i18n.translate("PICBED_ALICLOUD_MESSAGE_PATH")},default:t.path||"",required:!1},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_CUSTOMURL")},get message(){return e.i18n.translate("PICBED_ALICLOUD_MESSAGE_CUSTOMURL")},default:t.customUrl||"",required:!1},{name:"options",type:"input",get prefix(){return e.i18n.translate("PICBED_ALICLOUD_OPTIONS")},get alias(){return e.i18n.translate("PICBED_ALICLOUD_OPTIONS")},get message(){return e.i18n.translate("PICBED_ALICLOUD_MESSAGE_OPTIONS")},default:t.options||"",required:!1}]};class kt{constructor(e){this.date=new Date,this.info=e}year(){return`${this.date.getFullYear()}`}month(){return(this.date.getMonth()+1).toString().padStart(2,"0")}day(){return this.date.getDate().toString().padStart(2,"0")}fullName(){return this.info.fileName}fileName(){var e,t;return(null!==(e=this.info.fileName)&&void 0!==e?e:"").replace(null!==(t=this.info.extname)&&void 0!==t?t:"","")}extName(){var e;return(null!==(e=this.info.extname)&&void 0!==e?e:"").replace(".","")}md5(){return B.createHash("md5").update(this.imgBuffer()).digest("hex")}md5B64(){return B.createHash("md5").update(this.imgBuffer()).digest("base64").replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}md5B64Short(){return B.createHash("md5").update(this.imgBuffer()).digest("base64").replace(/\+/g,"-").replace(/\//g,"_").slice(0,7)}sha1(){return B.createHash("sha1").update(this.imgBuffer()).digest("hex")}sha256(){return B.createHash("sha256").update(this.imgBuffer()).digest("hex")}timestamp(){return Math.floor(Date.now()/1e3).toString()}timestampMS(){return Date.now().toString()}imgBuffer(){return this.info.base64Image?this.info.base64Image:this.info.buffer}}function Yt(e,t){if(!t)return e.fileName;const r=new kt(e);let n=t;for(const e of kt.fields){const t=new RegExp(`{${e}}`,"g");n=n.replace(t,r[e]())}return n}function qt(e,t,r){const n=function(e=""){if(!e)return"";if(!/^https?:\/\//.test(e)){const[t,r]=e.split(":");return`http://${t.replace("127.0.0.1","localhost")}:${r}`}try{const{protocol:t,hostname:r,port:n}=new L(e);return`${t}//${r.replace("127.0.0.1","localhost")}:${n}`}catch(e){return""}}(e);if(!n)return;return new(t?Z:J)({keepAlive:!0,keepAliveMsecs:1e3,scheduling:"lifo",rejectUnauthorized:r,proxy:n})}async function Vt(e,t,r){try{const n=await j(e.client,new V({Bucket:e.bucketName,Key:e.path,IfMatch:t,VersionId:r}),{expiresIn:3600}),a=new m.URL(n);return a.search="",a.href}catch(e){return Promise.reject(e)}}kt.fields=["year","month","day","fullName","fileName","extName","md5","md5B64","md5B64Short","sha1","sha256","timestamp","timestampMS"];var jt={createS3Client:function(e){var t,r;let n=!0;try{n="https:"===new m.URL(e.endpoint).protocol}catch(e){}const a={};n?a.httpsAgent=qt(e.proxy,!0,null!==(t=e.rejectUnauthorized)&&void 0!==t&&t):a.httpAgent=qt(e.proxy,!1,null!==(r=e.rejectUnauthorized)&&void 0!==r&&r);const i={region:e.region||"auto",endpoint:e.endpoint||void 0,credentials:{accessKeyId:e.accessKeyID,secretAccessKey:e.secretAccessKey},tls:n,forcePathStyle:e.pathStyleAccess,requestHandler:new z(a)};return new Y(i)},createUploadTask:async function(e){if(!e.item.buffer&&!e.item.base64Image)return Promise.reject(new Error("undefined image"));let t,r,n;try{({body:t,contentType:r,contentEncoding:n}=await async function(e){var t;const r={};if(e.base64Image){const n=e.base64Image.replace(/^data:[/\w]+;base64,/,"");r.contentType=null===(t=e.base64Image.match(/[^:]\w+\/[\w-+\d.]+(?=;|,)/))||void 0===t?void 0:t[0],r.body=Buffer.from(n,"base64"),r.contentEncoding="base64"}else e.extname&&(r.contentType=Q.getType(e.extname)),r.body=e.buffer;if(!r.contentType){const e=await X.fromBuffer(r.body);r.contentType=null==e?void 0:e.mime}return r}(e.item))}catch(e){return Promise.reject(e)}const a=new q({Bucket:e.bucketName,Key:e.path,ACL:e.acl,Body:t,ContentType:r,ContentEncoding:n});let i,s;try{i=await e.client.send(a)}catch(e){return Promise.reject(e)}if(e.urlPrefix)s=`${e.urlPrefix}/${e.path}`;else try{s=await Vt(e,i.ETag,i.VersionId)}catch(e){return Promise.reject(e)}return{index:e.index,key:e.path,url:s,imgURL:s,versionId:i.VersionId,eTag:i.ETag}},getFileURL:Vt};function zt(e){return"string"==typeof e?"true"===e.toLowerCase():Boolean(e)}const Xt=async e=>{const t=e.getConfig("picBed.aws-s3-plist");if(!t)throw new Error("Can't find aws s3 uploader config");const r=zt(t.disableBucketPrefixToURL);let n=t.urlPrefix;n&&(n=n.replace(/\/?$/,""),t.pathStyleAccess&&!r&&(n+="/"+t.bucketName));const a=jt.createS3Client(t),i=e.output,s=i.map((async(e,r)=>jt.createUploadTask({client:a,index:r,bucketName:t.bucketName,path:Yt(e,t.uploadPath),item:e,acl:t.acl||"public-read",urlPrefix:n})));let E;try{E=await Promise.all(s)}catch(t){throw e.log.error("上传到 S3 存储发生错误,请检查网络连接和配置是否正确"),e.emit(Ct.NOTIFICATION,{title:"S3 存储上传错误",body:"请检查配置是否正确",text:""}),t}for(const e of E){const{index:t,url:r,imgURL:n}=e;delete i[t].buffer,delete i[t].base64Image,i[t].imgUrl=n,i[t].url=r}return e},Qt=e=>{let t=e.getConfig("picBed.aws-s3-plist")||{};t=Object.assign(Object.assign({},{accessKeyID:"",secretAccessKey:"",bucketName:"",uploadPath:"{year}/{month}/{md5}.{extName}",pathStyleAccess:!1,rejectUnauthorized:!1,acl:"public-read"}),t);return[{name:"accessKeyID",type:"input",default:t.accessKeyID,required:!0,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_ACCESSKEYID")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_ACCESSKEYID")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_ACCESSKEYID")}},{name:"secretAccessKey",type:"input",default:t.secretAccessKey,required:!0,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_SECRET_ACCESSKEY")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_SECRET_ACCESSKEY")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_SECRET_ACCESSKEY")}},{name:"bucketName",type:"input",default:t.bucketName,required:!0,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_BUCKET")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_BUCKET")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_BUCKET")}},{name:"uploadPath",type:"input",default:t.uploadPath,required:!0,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_UPLOADPATH")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_UPLOADPATH")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_UPLOADPATH")}},{name:"region",type:"input",default:t.region,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_REGION")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_REGION")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_REGION")}},{name:"endpoint",type:"input",default:t.endpoint,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_ENDPOINT")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_ENDPOINT")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_ENDPOINT")}},{name:"proxy",type:"input",default:t.proxy,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_PROXY")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_PROXY")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_PROXY")}},{name:"urlPrefix",type:"input",default:t.urlPrefix,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_URLPREFIX")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_URLPREFIX")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_URLPREFIX")}},{name:"pathStyleAccess",type:"confirm",default:t.pathStyleAccess||!1,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_PATHSTYLEACCESS")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_PATHSTYLEACCESS")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_PATHSTYLEACCESS")}},{name:"rejectUnauthorized",type:"confirm",default:t.rejectUnauthorized||!1,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_REJECTUNAUTHORIZED")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_REJECTUNAUTHORIZED")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_REJECTUNAUTHORIZED")}},{name:"acl",type:"list",default:t.acl||"public-read",choices:["private","public-read","public-read-write","authenticated-read","aws-exec-read","bucket-owner-read","bucket-owner-full-control"],required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_ACL")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_ACL")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_ACL")}},{name:"disableBucketPrefixToURL",type:"confirm",default:zt(t.disableBucketPrefixToURL)||!1,required:!1,get prefix(){return e.i18n.translate("PICBED_AWSS3PLIST_DISABLEBUCKETPREFIXTOURL")},get alias(){return e.i18n.translate("PICBED_AWSS3PLIST_DISABLEBUCKETPREFIXTOURL")},get message(){return e.i18n.translate("PICBED_AWSS3PLIST_MESSAGE_DISABLEBUCKETPREFIXTOURL")}}]};function Zt(e,t,r,n=""){return`https://api.github.com/repos/${e}/contents/${yt(`${t}${r}`)}${n}`}const Jt=(e,t,r)=>{const{token:n,repo:a}=t,i=k(e)||"application/octet-stream";return{method:"PUT",url:Zt(a,t.path,e),headers:{Authorization:`token ${n}`,"User-Agent":"PicList","Content-Type":i},body:r,json:!0}},er=(e,t)=>{const{token:r,repo:n,branch:a}=t;return{method:"GET",url:Zt(n,t.path,e,`?ref=${a}`),headers:{Authorization:`token ${r}`,"User-Agent":"PicList"},json:!0}},tr=async e=>{const t=e.getConfig("picBed.github");if(!t)throw new Error("Can't find github config");const r=Mt({path:t.path});t.path=r,t.customUrl=(t.customUrl||"").replace(/\/$/,"");try{const n=e.output;for(const a of n)if(a.fileName&&a.buffer){const n=a.base64Image||Buffer.from(a.buffer).toString("base64"),i={message:"Upload by PicList",branch:t.branch,content:n,path:r+encodeURI(a.fileName)},s=Jt(a.fileName,t,i);try{const n=await e.request(s);if(!n)throw new Error("Server error, please try again");delete a.base64Image,delete a.buffer,a.imgUrl=t.customUrl?`${t.customUrl}/${yt(`${r}${a.fileName}`)}`:n.content.download_url,a.hash=n.content.sha}catch(n){if(422!==n.statusCode)throw n;delete a.base64Image,delete a.buffer;const i=await e.request(er(a.fileName,t));if(!Object.keys(i).length)throw n;a.hash=i.sha,a.imgUrl=t.customUrl?`${t.customUrl}/${yt(`${r}${a.fileName}`)}`:i.download_url}}return e}catch(t){throw e.emit(Ct.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS_AND_NETWORK")}),t}},rr=e=>{const t=e.getConfig("picBed.github")||{};return[{name:"repo",type:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_REPO")},get alias(){return e.i18n.translate("PICBED_GITHUB_REPO")},get message(){return e.i18n.translate("PICBED_GITHUB_MESSAGE_REPO")},default:t.repo||"",required:!0},{name:"branch",type:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_BRANCH")},get alias(){return e.i18n.translate("PICBED_GITHUB_BRANCH")},get message(){return e.i18n.translate("PICBED_GITHUB_MESSAGE_BRANCH")},default:t.branch||"master",required:!0},{name:"token",type:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_TOKEN")},get alias(){return e.i18n.translate("PICBED_GITHUB_TOKEN")},default:t.token||"",required:!0},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_PATH")},get alias(){return e.i18n.translate("PICBED_GITHUB_PATH")},get message(){return e.i18n.translate("PICBED_GITHUB_MESSAGE_PATH")},default:t.path||"",required:!1},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_GITHUB_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_GITHUB_CUSTOMURL")},get message(){return e.i18n.translate("PICBED_GITHUB_MESSAGE_CUSTOMURL")},default:t.customUrl||"",required:!1}]};const nr=async(e,t,r,n)=>{const a=t.clientId||"",i=t.username||"",s=(e=>e?e.startsWith("Bearer")?e:`Bearer ${e}`:"")(t.accessToken||""),E=t.album||"";let o;if(i&&s)o=s;else{if(!a)throw new Error("clientId or accessToken is required");o=`Client-ID ${a}`}const I={method:"POST",url:"https://api.imgur.com/3/image",headers:{Authorization:o,"content-type":"multipart/form-data",Host:"api.imgur.com","User-Agent":"PicList"},formData:{image:n,type:"base64",name:r,description:"Uploaded with PicList"}};if(i&&s&&E){let r,n=0,a="";do{const s={method:"GET",url:`https://api.imgur.com/3/account/${i}/albums/${n}`,headers:{Authorization:o},json:!0,resolveWithFullResponse:!0,timeout:1e4};if(t.proxy&&(s.proxy=t.proxy),r=await e.request(s),200!==r.statusCode||!r.body.success)throw new Error("Server error, please try again");const I=r.body.data;for(const e of I)if(e.title===E){a=e.id;break}n++}while(r.body.data.length>0);a&&I.formData&&(I.formData.album=a)}return t.proxy&&(I.proxy=t.proxy),I},ar=async e=>{var t;const r=e.getConfig("picBed.imgur");if(!r)throw new Error("Can't find imgur config");try{const t=e.output;for(const n of t)if(n.fileName&&n.buffer){const t=n.base64Image||Buffer.from(n.buffer).toString("base64"),a=await nr(e,r,n.fileName,t),i=await e.request(a),s="string"==typeof i?JSON.parse(i):i;if(!s.success)throw new Error("Server error, please try again");delete n.base64Image,delete n.buffer,n.imgUrl=s.data.link,n.hash=s.data.deletehash}return e}catch(r){throw e.emit(Ct.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS_AND_NETWORK"),text:"http://docs.imgur.com/api/errno/"}),(null===(t=null==r?void 0:r.response)||void 0===t?void 0:t.data)||r}},ir=e=>{const t=e.getConfig("picBed.imgur")||{};return[{name:"clientId",type:"input",get prefix(){return e.i18n.translate("PICBED_IMGUR_CLIENTID")},get alias(){return e.i18n.translate("PICBED_IMGUR_CLIENTID")},get message(){return e.i18n.translate("PICBED_IMGUR_MESSAGE_CLIENTID")},default:t.clientId||"",required:!1},{name:"username",type:"input",get prefix(){return e.i18n.translate("PICBED_IMGUR_USERNAME")},get alias(){return e.i18n.translate("PICBED_IMGUR_USERNAME")},get message(){return e.i18n.translate("PICBED_IMGUR_MESSAGE_USERNAME")},default:t.username||"",required:!1},{name:"accessToken",type:"input",get prefix(){return e.i18n.translate("PICBED_IMGUR_ACCESS_TOKEN")},get alias(){return e.i18n.translate("PICBED_IMGUR_ACCESS_TOKEN")},get message(){return e.i18n.translate("PICBED_IMGUR_MESSAGE_ACCESS_TOKEN")},default:t.accessToken||"",required:!1},{name:"album",type:"input",get prefix(){return e.i18n.translate("PICBED_IMGUR_ALBUM")},get alias(){return e.i18n.translate("PICBED_IMGUR_ALBUM")},get message(){return e.i18n.translate("PICBED_IMGUR_MESSAGE_ALBUM")},default:t.album||"",required:!1},{name:"proxy",type:"input",get prefix(){return e.i18n.translate("PICBED_IMGUR_PROXY")},get alias(){return e.i18n.translate("PICBED_IMGUR_PROXY")},get message(){return e.i18n.translate("PICBED_IMGUR_MESSAGE_PROXY")},default:t.proxy||"",required:!1}]};const sr=async e=>{var r;const n=e.getConfig("picBed.local");if(!n)throw new Error("Can not find local config!");const i=n.path||"",s=(n.customUrl||"").replace(/\/$/,""),E=Mt({path:null===(r=n.webPath)||void 0===r?void 0:r.replace(/\\/g,"/")}),o=e.output;for(const r of o)if(r.fileName&&r.buffer){let n=r.buffer;!n&&r.base64Image&&(n=Buffer.from(r.base64Image,"base64"));try{const o=C.join(e.baseDir,"imgTemp","local"),I=C.join(o,r.fileName),l=C.join(i,r.fileName);a(C.dirname(l)),a(C.dirname(I)),t.writeFileSync(l,n),t.copyFileSync(l,I),delete r.base64Image,delete r.buffer,r.imgUrl=s?`${s}/${yt(`${E}${r.fileName}`)}`:C.join(i,r.fileName),r.hash=C.join(i,r.fileName),r.galleryPath=`http://localhost:36699/local/${yt(r.fileName).replace(/^\//,"")}`}catch(t){throw e.emit(Ct.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:"failed to upload image"}),new Error("failed to upload image")}}return e},Er=e=>{const t=e.getConfig("picBed.local")||{};return[{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_LOCAL_PATH")},get alias(){return e.i18n.translate("PICBED_LOCAL_PATH")},default:t.path||"",get message(){return e.i18n.translate("PICBED_LOCAL_MESSAGE_PATH")},required:!0},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_LOCAL_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_LOCAL_CUSTOMURL")},default:t.customUrl||"",get message(){return e.i18n.translate("PICBED_LOCAL_MESSAGE_CUSTOMURL")},required:!1},{name:"webPath",type:"input",get prefix(){return e.i18n.translate("PICBED_LOCAL_WEBPATH")},get alias(){return e.i18n.translate("PICBED_LOCAL_WEBPATH")},default:t.webPath||"",required:!1,get message(){return e.i18n.translate("PICBED_LOCAL_MESSAGE_WEBPATH")}}]};const or=(e,t,r)=>{let n=e.host;n=n.replace(/\/$/,"");const a="V2"===e.version,i=e.token,s={"Content-Type":"multipart/form-data","User-Agent":"PicList",Connection:"keep-alive",token:i||void 0},E={image:{value:r,options:{filename:t}},ssl:"true"},o={"Content-Type":"multipart/form-data","User-Agent":"PicList",Connection:"keep-alive",Accept:"application/json",Authorization:i||void 0},I=e.strategyId,l=e.albumId;let S=e.permission.value;void 0===S&&(S=e.permission);const _={file:{value:r,options:{filename:t}},ssl:"true",strategy_id:I,album_id:l,permission:S};I||delete _.strategy_id,l||delete _.album_id,0!==S&&1!==S&&delete _.permission;return{method:"POST",url:a?`${n}/api/v1/upload`:`${n}/api/upload`,agent:new H.Agent({rejectUnauthorized:!1}),headers:a?o:s,formData:a?_:E}},Ir=async e=>{const t=e.getConfig("picBed.lskyplist");if(!t)throw new Error("Can't find lsky uploader config");const r=e.output;for(const n of r){let r=n.buffer;!r&&n.base64Image&&(r=Buffer.from(n.base64Image,"base64"));const a=or(t,n.fileName,r);let i=await e.request(a);i="string"==typeof i?JSON.parse(i):i;const s="V2"===t.version;if(!(s?!0===i.status:200===i.code))throw e.emit(Ct.NOTIFICATION,{title:"upload failed",body:i.message}),new Error(i.message);delete n.base64Image,delete n.buffer,n.imgUrl=s?i.data.links.url:i.data.url,s&&(n.hash=i.data.key)}return e},lr=e=>{const t=e.getConfig("picBed.lskyplist")||{};return[{name:"version",type:"list",default:t.version||"V1",get prefix(){return e.i18n.translate("PICBED_LSKY_VERSION")},get alias(){return e.i18n.translate("PICBED_LSKY_VERSION")},get message(){return e.i18n.translate("PICBED_LSKY_MESSAGE_VERSION")},choices:["V1","V2"],required:!0},{name:"host",type:"input",get prefix(){return e.i18n.translate("PICBED_LSKY_HOST")},get alias(){return e.i18n.translate("PICBED_LSKY_HOST")},get message(){return e.i18n.translate("PICBED_LSKY_MESSAGE_HOST")},default:t.host||"",required:!0},{name:"token",type:"input",get prefix(){return e.i18n.translate("PICBED_LSKY_TOKEN")},get alias(){return e.i18n.translate("PICBED_LSKY_TOKEN")},get message(){return e.i18n.translate("PICBED_LSKY_MESSAGE_TOKEN")},default:t.token,required:!0},{name:"strategyId",type:"input",default:t.strategyId,required:!1,get prefix(){return e.i18n.translate("PICBED_LSKY_STRATEGY_ID")},get alias(){return e.i18n.translate("PICBED_LSKY_STRATEGY_ID")},get message(){return e.i18n.translate("PICBED_LSKY_MESSAGE_STRATEGY_ID")}},{name:"albumId",type:"input",default:t.albumId,required:!1,get prefix(){return e.i18n.translate("PICBED_LSKY_ALBUM_ID")},get alias(){return e.i18n.translate("PICBED_LSKY_ALBUM_ID")},get message(){return e.i18n.translate("PICBED_LSKY_MESSAGE_ALBUM_ID")}},{name:"permission",type:"list",default:t.permission||"private(default)",choices:[{name:"private(default)",value:0},{name:"public",value:1}],required:!1,get prefix(){return e.i18n.translate("PICBED_LSKY_PERMISSION")},get alias(){return e.i18n.translate("PICBED_LSKY_PERMISSION")},get message(){return e.i18n.translate("PICBED_LSKY_MESSAGE_PERMISSION")}}]};const Sr=(e,t,r)=>{const n=e.host||"127.0.0.1",a=e.port||36677,i=e.picbed||"",s=e.configName||"Default",E=e.serverKey||"";let o=`http://${n}:${a}/upload?configName=${s}`;return i&&(o+=`&picbed=${i}`),E&&(o+=`&key=${E}`),{method:"POST",url:o,headers:{"content-type":"multipart/form-data"},formData:{file:{value:r,options:{filename:t,contentType:k(t)}}},resolveWithFullResponse:!0}},_r=async e=>{var t;const r=e.getConfig("picBed.piclist");if(!r)throw new Error("Can't find PicList config");try{const n=e.output;for(const a of n)if(a.fileName&&a.buffer){let n=a.buffer;!n&&a.base64Image&&(n=Buffer.from(a.base64Image,"base64"));const i=Sr(r,a.fileName,n),s=await e.request(i).then((e=>e)).catch((t=>({statusCode:400,body:{msg:e.i18n.translate("AUTH_FAILED"),err:t}})));if(200!==s.statusCode||!(null===(t=s.body)||void 0===t?void 0:t.success))throw new Error(s.body.message);delete a.base64Image,delete a.buffer,a.imgUrl=s.body.result[0],a.fullResult=s.body.fullResult[0]}return e}catch(t){throw e.emit(Ct.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},Pr=e=>{const t=e.getConfig("picBed.piclist")||{};return[{name:"host",type:"input",get prefix(){return e.i18n.translate("PICBED_PICLIST_HOST")},get alias(){return e.i18n.translate("PICBED_PICLIST_HOST")},default:t.host||"127.0.0.1",required:!0},{name:"port",type:"input",get prefix(){return e.i18n.translate("PICBED_PICLIST_PORT")},get alias(){return e.i18n.translate("PICBED_PICLIST_PORT")},default:t.port||36677,required:!1},{name:"picbed",type:"input",get prefix(){return e.i18n.translate("PICBED_PICLIST_PICBED")},get alias(){return e.i18n.translate("PICBED_PICLIST_PICBED")},default:t.picbed||"",required:!1},{name:"configName",type:"input",get prefix(){return e.i18n.translate("PICBED_PICLIST_CONFIGNAME")},get alias(){return e.i18n.translate("PICBED_PICLIST_CONFIGNAME")},default:t.configName||"",required:!1},{name:"serverKey",type:"input",get prefix(){return e.i18n.translate("PICBED_PICLIST_KEY")},get alias(){return e.i18n.translate("PICBED_PICLIST_KEY")},default:t.serverKey||"",required:!1}]};function ur(e,t,r,n){const a=function(e){return"z0"===e?"":"-"+e}(e.area||"z0"),i=e.path||"";return{method:"POST",url:`http://upload${a}.qiniup.com/putb64/-1/key/${Buffer.from(i+t,"utf-8").toString("base64").replace(/\+/g,"-").replace(/\//g,"_")}`,headers:{Authorization:`UpToken ${r}`,"Content-Type":k(t)||"application/octet-stream"},body:n}}function cr(e){const t=e.accessKey,r=e.secretKey,n=new ee.auth.digest.Mac(t,r),a={scope:e.bucket};return new ee.rs.PutPolicy(a).uploadToken(n)}const pr=async e=>{const t=e.getConfig("picBed.qiniu");if(!t)throw new Error("Can't find qiniu config");try{const r=e.output;for(const n of r)if(n.fileName&&n.buffer){const r=n.base64Image||Buffer.from(n.buffer).toString("base64"),a=ur(t,n.fileName,cr(t),r),i=await e.request(a),s=JSON.parse(i);if(!(null==s?void 0:s.key))throw e.emit(Ct.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:s.msg}),e.log.error("qiniu error",s),new Error("Upload failed");{delete n.base64Image,delete n.buffer;const e=t.url,r=t.options||"";n.imgUrl=`${e}/${s.key}${r}`}}return e}catch(t){if("Upload failed"!==t.message&&t.response){const r=t.response.body;e.emit(Ct.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:r.error})}throw t}},Ar=e=>{const t=e.getConfig("picBed.qiniu")||{};return[{name:"accessKey",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_ACCESSKEY")},get alias(){return e.i18n.translate("PICBED_QINIU_ACCESSKEY")},default:t.accessKey||"",required:!0},{name:"secretKey",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_SECRETKEY")},get alias(){return e.i18n.translate("PICBED_QINIU_SECRETKEY")},default:t.secretKey||"",required:!0},{name:"bucket",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_BUCKET")},get alias(){return e.i18n.translate("PICBED_QINIU_BUCKET")},default:t.bucket||"",required:!0},{name:"url",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_URL")},get alias(){return e.i18n.translate("PICBED_QINIU_URL")},get message(){return e.i18n.translate("PICBED_QINIU_MESSAGE_URL")},default:t.url||"",required:!0},{name:"area",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_AREA")},get alias(){return e.i18n.translate("PICBED_QINIU_AREA")},get message(){return e.i18n.translate("PICBED_QINIU_MESSAGE_AREA")},default:t.area||"",required:!0},{name:"options",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_OPTIONS")},get alias(){return e.i18n.translate("PICBED_QINIU_OPTIONS")},get message(){return e.i18n.translate("PICBED_QINIU_MESSAGE_OPTIONS")},default:t.options||"",required:!1},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_QINIU_PATH")},get alias(){return e.i18n.translate("PICBED_QINIU_PATH")},get message(){return e.i18n.translate("PICBED_QINIU_MESSAGE_PATH")},default:t.path||"",required:!1}]};class Tr{constructor(){this.client=new te,this.isConnected=!1}static getInstance(){return Tr.instance||(Tr.instance=new Tr),Tr.instance}static changeWinStylePathToUnix(e){return e.replace(/\\/g,"/")}async connect(e){const{host:t,port:r,username:n,password:a,privateKey:i,passphrase:s}=e,E=i?{username:n,privateKeyPath:i,passphrase:s||void 0}:{username:n,password:a};try{await this.client.connect(Object.assign({host:t,port:Number(r)||22},E)),this.isConnected=!0}catch(e){throw new Error(e)}}async upload(e,t,r){if(!this.isConnected)throw new Error("SSH client is not connected");try{t=Tr.changeWinStylePathToUnix(t),await this.mkdir(C.dirname(t).replace(/^\/+|\/+$/g,""),r),await this.client.putFile(e,t);const n=r.fileMode||"0644";"0644"!==n&&await this.exec(`chmod ${n} "${t}"`)}catch(e){throw new Error(e)}}async mkdir(e,t){if(!this.client.isConnected())throw new Error("sftp client is not connected");const r=t.dirMode||"0755";if("0755"!==r){const t=e.split("/");let n="";for(const e of t)if(e){n+=`/${e}`;const t=`mkdir "${n}" && chmod ${r} "${n}"`;await this.exec(t)}}else{const t=`cd / && mkdir -p "${e}"`;await this.exec(t)}}async chown(e,t,r){e=Tr.changeWinStylePathToUnix(e);const[n,a]=r?[t,r]:t.includes(":")?t.split(":"):[t,t];await this.exec(`chown ${n}:${a} "${e}"`)}async exec(e){return 0===(await this.client.execCommand(e)).code}close(){this.client.dispose(),this.isConnected=!1}}const Cr=async e=>{const r=e.getConfig("picBed.sftpplist");if(!r)throw new Error("Can not find sftpplist config!");r.port=Number(r.port)||22,(r.port<0||r.port>65535)&&(r.port=22),r.uploadPath=Mt({path:r.uploadPath,rootToEmpty:!1});const n=Mt({path:r.webPath,rootToEmpty:!1});try{const i=e.output;for(const s of i)if(s.fileName&&s.buffer){let i=s.buffer;!i&&s.base64Image&&(i=Buffer.from(s.base64Image,"base64"));const I=C.join(e.baseDir,"uploadTemp"),l=C.join(e.baseDir,"imgTemp","sftpplist");a(l);const S=C.join(I,s.fileName);a(C.dirname(S)),t.writeFileSync(S,i);const _=Tr.getInstance();await _.connect(r);const P=C.join(`/${r.uploadPath}`.replace(/\/\/+/g,"/"),s.fileName);await _.upload(S,P,r),r.fileUser&&await _.chown(P,r.fileUser),delete s.base64Image,delete s.buffer;const u=r.customUrl||r.host;r.webPath?s.imgUrl=`${u}/${yt(`${"/"===n?"":n}${s.fileName}`)}`:s.imgUrl=`${u}/${yt(`${"/"===r.uploadPath?"":r.uploadPath}${s.fileName}`)}`;const c=C.join(l,s.fileName);a(C.dirname(c)),E(c),o(S,C.join(l,s.fileName)),s.galleryPath=`http://localhost:36699/sftpplist/${encodeURIComponent(s.fileName)}`,_.close()}return e}catch(t){throw e.emit(Ct.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},gr=e=>{const t=e.getConfig("picBed.sftpplist")||{};return[{name:"host",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_HOST")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_HOST")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_HOST")},default:t.host||"",required:!0},{name:"port",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_PORT")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_PORT")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_PORT")},default:t.port||22,required:!1},{name:"username",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_USERNAME")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_USERNAME")},default:t.username||"",required:!0},{name:"password",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_PASSWORD")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_PASSWORD")},default:t.password||"",required:!1},{name:"privateKey",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_PRIVATEKEY")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_PRIVATEKEY")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY")},default:t.privateKey||"",required:!1},{name:"passphrase",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_PRIVATEKEY_PASSPHRASE")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_PRIVATEKEY_PASSPHRASE")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY_PASSPHRASE")},default:t.passphrase||"",required:!1},{name:"uploadPath",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_UPLOADPATH")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_UPLOADPATH")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_UPLOADPATH")},default:t.uploadPath||"",required:!1},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_CUSTOMURL")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_CUSTOMURL")},default:t.customUrl||"",required:!1},{name:"webPath",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_WEBSITE_PATH")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_WEBSITE_PATH")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_WEBSITE_PATH")},default:t.webPath||"",required:!1},{name:"fileUser",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_FILE_USER")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_FILE_USER")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_FILE_USER")},default:t.fileUser||"",required:!1},{name:"fileMode",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_FILE_MODE")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_FILE_MODE")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_FILE_MODE")},default:t.fileMode||"",required:!1},{name:"dirMode",type:"input",get prefix(){return e.i18n.translate("PICBED_SFTPPLIST_DIR_MODE")},get alias(){return e.i18n.translate("PICBED_SFTPPLIST_DIR_MODE")},get message(){return e.i18n.translate("PICBED_SFTPPLIST_MESSAGE_DIR_MODE")},default:t.dirMode||"",required:!1}]};const Dr=(e,t,r,n="")=>{let a=n||"sm.ms";return a=a.replace(/^https?:\/\//,"").replace(/\/$/,""),{method:"POST",url:`https://${a}/api/v2/upload`,headers:{contentType:"multipart/form-data","User-Agent":"PicList",Authorization:r},formData:{smfile:{value:t,options:{filename:e}},ssl:"true"}}},dr=async e=>{const t=e.getConfig("picBed.smms");if(!t)throw new Error("Can not find smms config!");const r=e.output;for(const n of r)if(n.fileName&&n.buffer){let r=n.buffer;!r&&n.base64Image&&(r=Buffer.from(n.base64Image,"base64"));const a=Dr(n.fileName,r,null==t?void 0:t.token,null==t?void 0:t.backupDomain),i=await e.request(a),s=JSON.parse(i);if("success"===s.code)delete n.base64Image,delete n.buffer,n.imgUrl=s.data.url,n.hash=s.data.hash;else{if("image_repeated"!==s.code||"string"!=typeof s.images)throw e.emit(Ct.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:s.message}),new Error(s.message);{delete n.base64Image,delete n.buffer,n.imgUrl=s.images;const e=await K.get("https://sm.ms/api/v2/upload_history",{headers:{Authorization:t.token}});if("success"===e.data.code){const t=e.data.data;for(const e of t)if(e.url===s.images){n.hash=e.hash;break}}}}}return e},mr=e=>{const t=e.getConfig("picBed.smms")||{};return[{name:"token",type:"input",get prefix(){return e.i18n.translate("PICBED_SMMS_TOKEN")},get alias(){return e.i18n.translate("PICBED_SMMS_TOKEN")},get message(){return e.i18n.translate("PICBED_SMMS_MESSAGE_TOKEN")},default:t.token||"",required:!0},{name:"backupDomain",type:"input",get prefix(){return e.i18n.translate("PICBED_SMMS_BACKUP_DOMAIN")},get alias(){return e.i18n.translate("PICBED_SMMS_BACKUP_DOMAIN")},get message(){return e.i18n.translate("PICBED_SMMS_MESSAGE_BACKUP_DOMAIN")},default:t.backupDomain||"",required:!1}]};const Lr=(e,t)=>{const r=e.secretId,n=e.secretKey,a=e.appId,i=e.bucket;let s,E="";if(e.version&&"v4"!==e.version){const r=Math.floor((new Date).getTime()/1e3);E=`${r};${r+86400}`;const a=B.createHmac("sha1",n).update(E).digest("hex"),i=e.endpoint?e.endpoint:`cos.${e.area}.myqcloud.com`,o=`put\n/${e.path}${t}\n\nhost=${e.bucket}.${i}\n`,I=`sha1\n${E}\n${B.createHash("sha1").update(o).digest("hex")}\n`;s=B.createHmac("sha1",a).update(I).digest("hex")}else{const e=Math.floor(1e10*Math.random()),t=Math.floor((new Date).getTime()/1e3)-1,E=`a=${a}&b=${i}&k=${r}&e=${t+3600}&t=${t}&r=${e}&f=`,o=B.createHmac("sha1",n).update(E).digest(),I=Buffer.concat([o,Buffer.from(E)]);s=Buffer.from(I).toString("base64")}return{signature:s,appId:a,bucket:i,signTime:E}},fr=(e,t,r,n,a)=>{const i=e.area,s=e.path;if(e.version&&"v4"!==e.version){const i=e.endpoint?e.endpoint:`cos.${e.area}.myqcloud.com`;return{method:"PUT",url:`http://${e.bucket}.${i}/${yt(`${s}${t}`)}`,headers:{Host:`${e.bucket}.${i}`,Authorization:`q-sign-algorithm=sha1&q-ak=${e.secretId}&q-sign-time=${r.signTime}&q-key-time=${r.signTime}&q-header-list=host&q-url-param-list=&q-signature=${r.signature}`,contentType:k(t)||"application/octet-stream","User-Agent":`PicGo;${a};null;null`},body:n,resolveWithFullResponse:!0}}return{method:"POST",url:`http://${i}.file.myqcloud.com/files/v2/${r.appId}/${r.bucket}/${encodeURI(s)}${t}`,headers:{Host:`${i}.file.myqcloud.com`,Authorization:r.signature,contentType:"multipart/form-data","User-Agent":`PicGo;${a};null;null`},formData:{op:"upload",filecontent:n},resolveWithFullResponse:!0}},hr=async e=>{var t,r,n;const a=e.getConfig("picBed.tcyun");if(!a)throw new Error("Can't find tencent COS config");try{const i=e.output,s=(a.customUrl||"").replace(/\/$/,""),E=Mt({path:a.path});a.path=E;const o=!a.version||"v4"===a.version;for(const I of i)if(I.fileName&&I.buffer){const i=Lr(a,I.fileName);if(!i)return!1;let l=I.buffer;!l&&I.base64Image&&(l=Buffer.from(I.base64Image,"base64"));const S=fr(a,I.fileName,i,l,e.GUI_VERSION||e.VERSION),_=await e.request(S).then((e=>e)).catch((t=>({statusCode:400,body:{msg:e.i18n.translate("AUTH_FAILED"),err:t}})));let P;if(P=o&&"string"==typeof _?JSON.parse(_):_,400===P.statusCode)throw(null===(t=null==P?void 0:P.body)||void 0===t?void 0:t.err)?P.body.err:new Error((null===(r=null==P?void 0:P.body)||void 0===r?void 0:r.msg)||(null===(n=null==P?void 0:P.body)||void 0===n?void 0:n.message));const u=a.options||"",c=void 0!==a.slim&&!!a.slim;if(o&&"SUCCESS"===P.message)delete I.base64Image,delete I.buffer,I.imgUrl=s?`${s}/${yt(`${E}${I.fileName}`)}${u}`:`${P.data.source_url}${u}`;else{if(o||!P||200!==P.statusCode)throw new Error(_.body.msg);if(delete I.base64Image,delete I.buffer,s)I.imgUrl=`${s}/${yt(`${E}${I.fileName}`)}${u}`;else{const e=a.endpoint?a.endpoint:`cos.${a.area}.myqcloud.com`;I.imgUrl=`https://${a.bucket}.${e}/${yt(`${E}${I.fileName}`)}${u}`}}c&&(I.imgUrl+=u?"&imageSlim":"?imageSlim")}return e}catch(t){if(!a.version||"v4"===a.version)try{const r=JSON.parse(t.error);e.emit(Ct.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("UPLOAD_FAILED_REASON",{code:r.code}),text:"https://cloud.tencent.com/document/product/436/8432"})}catch(e){}throw t}},Br=e=>{const t=e.getConfig("picBed.tcyun")||{};return[{name:"version",type:"list",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_VERSION")},alias:e.i18n.translate("PICBED_TENCENTCLOUD_VERSION"),choices:["v4","v5"],default:"v5",required:!1},{name:"secretId",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_SECRETID")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_SECRETID")},default:t.secretId||"",required:!0},{name:"secretKey",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_SECRETKEY")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_SECRETKEY")},default:t.secretKey||"",required:!0},{name:"bucket",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_BUCKET")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_BUCKET")},default:t.bucket||"",required:!0},{name:"appId",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_APPID")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_APPID")},default:t.appId||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_APPID")},required:!0},{name:"area",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_AREA")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_AREA")},default:t.area||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_AREA")},required:!0},{name:"endpoint",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_ENDPOINT")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_ENDPOINT")},default:t.endpoint||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_ENDPOINT")},required:!1},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_PATH")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_PATH")},default:t.path||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_PATH")},required:!1},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_CUSTOMURL")},default:t.customUrl||"",get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_CUSTOMURL")},required:!1},{name:"options",type:"input",default:t.options||"",get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_OPTIONS")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_OPTIONS")},get message(){return e.i18n.translate("PICBED_TENCENTCLOUD_MESSAGE_OPTIONS")},required:!1},{name:"slim",type:"confirm",default:void 0!==t.slim&&!!t.slim,get prefix(){return e.i18n.translate("PICBED_TENCENTCLOUD_SLIM")},get alias(){return e.i18n.translate("PICBED_TENCENTCLOUD_SLIM")},required:!1,get confirmText(){return e.i18n.translate("PICBED_TENCENTCLOUD_SLIM_CONFIRM")},get cancelText(){return e.i18n.translate("PICBED_TENCENTCLOUD_SLIM_CANCEL")},get tips(){return e.i18n.translate("PICBED_TENCENTCLOUD_SLIM_TIP")}}]};const Ur=async(e,t)=>{const r={method:"POST",url:"https://telegra.ph/upload",headers:{"content-type":"multipart/form-data"},formData:{file:t}};return e.proxy&&(r.proxy=e.proxy),r},Nr=async e=>{var r,n;let i=e.getConfig("picBed.telegraphplist");i||(i={});try{const n=e.output;for(const s of n)if(s.fileName&&s.buffer){let n=s.buffer;!n&&s.base64Image&&(n=Buffer.from(s.base64Image,"base64"));const E=C.join(e.baseDir,"uploadTemp");a(E);const o=C.join(E,s.fileName);t.writeFileSync(o,n);const l=await Ur(i,t.createReadStream(o)),S=await e.request(l),_="string"==typeof S?JSON.parse(S):S;if(I(o),!(null===(r=null==_?void 0:_[0])||void 0===r?void 0:r.src))throw new Error("Server error, please try again");delete s.base64Image,delete s.buffer,s.imgUrl=`https://telegra.ph${_[0].src}`}return e}catch(t){throw e.emit(Ct.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS_AND_NETWORK"),text:""}),(null===(n=null==t?void 0:t.response)||void 0===n?void 0:n.data)||t}},Rr=e=>[{name:"proxy",type:"input",get prefix(){return e.i18n.translate("PICBED_IMGUR_PROXY")},get alias(){return e.i18n.translate("PICBED_IMGUR_PROXY")},get message(){return e.i18n.translate("PICBED_IMGUR_MESSAGE_PROXY")},default:(e.getConfig("picBed.telegraphplist")||{}).proxy||"",required:!1}];const Or=(e,t)=>{const r=e.path||"",n=e.operator,a=yr(e.password),i=(new Date).toUTCString(),s=`PUT&${`/${e.bucket}/${yt(`${r}${t}`)}`}&${i}`;return`UPYUN ${n}:${B.createHmac("sha1",a).update(s).digest("base64")}`},Mr=(e,t,r,n)=>{const a=e.bucket,i=e.path;let s=(e.endpoint||"https://v0.api.upyun.com").replace(/\/+$/g,"");return s.startsWith("http")||(s=`https://${s}`),{method:"PUT",url:`${s}/${a}/${yt(`${i}${t}`)}`,headers:{Authorization:r,Date:(new Date).toUTCString(),"Content-Type":k(t)||"application/octet-stream"},body:n,resolveWithFullResponse:!0}};function yr(e){return B.createHash("md5").update(e).digest("hex")}const Gr=(e,t,r,n)=>{const a=`/${r.path||""}${n}`.replace(/%2F/g,"/").replace(/^\/+/g,"/"),i=Math.round((new Date).getTime()/1e3),s=t?i+parseInt(t.toString(),10):i+1800;return`_upt=${`${yr(`${e}&${s}&${a}`).substring(12,20)}${s}`}`},br=async e=>{const t=e.getConfig("picBed.upyun");if(!t)throw new Error("Can't find upYun config");try{const r=e.output,n=Mt({path:t.path});t.path=n;for(const a of r)if(a.fileName&&a.buffer){let r=a.buffer;!r&&a.base64Image&&(r=Buffer.from(a.base64Image,"base64"));const i=Or(t,a.fileName),s=Mr(t,a.fileName,i,r),E=t.options||"";if(200!==(await e.request(s)).statusCode)throw new Error("Upload failed");if(delete a.base64Image,delete a.buffer,a.imgUrl=`${t.url}/${yt(`${n}${a.fileName}`)}${E}`,t.antiLeechToken){const e=Gr(t.antiLeechToken,t.expireTime,t,a.fileName);a.imgUrl=a.imgUrl.includes("?")?`${a.imgUrl}&${e}`:`${a.imgUrl}?${e}`}}return e}catch(t){if("Upload failed"===t.message)e.emit(Ct.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")});else{const r=ye(t.error);e.emit(Ct.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("UPLOAD_FAILED_REASON",{code:"object"==typeof r?r.code:r}),text:"http://docs.upyun.com/api/errno/"})}throw t}},xr=e=>{const t=e.getConfig("picBed.upyun")||{};return[{name:"bucket",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_BUCKET")},get alias(){return e.i18n.translate("PICBED_UPYUN_BUCKET")},default:t.bucket||"",required:!0},{name:"operator",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_OPERATOR")},get alias(){return e.i18n.translate("PICBED_UPYUN_OPERATOR")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_OPERATOR")},default:t.operator||"",required:!0},{name:"password",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_PASSWORD")},get alias(){return e.i18n.translate("PICBED_UPYUN_PASSWORD")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_PASSWORD")},default:t.password||"",required:!0},{name:"url",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_URL")},get alias(){return e.i18n.translate("PICBED_UPYUN_URL")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_URL")},default:t.url||"",required:!0},{name:"options",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_OPTIONS")},get alias(){return e.i18n.translate("PICBED_UPYUN_OPTIONS")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_OPTIONS")},default:t.options||"",required:!1},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_PATH")},get alias(){return e.i18n.translate("PICBED_UPYUN_PATH")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_PATH")},default:t.path||"",required:!1},{name:"antiLeechToken",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_ANTI_LEECH_TOKEN")},get alias(){return e.i18n.translate("PICBED_UPYUN_ANTI_LEECH_TOKEN")},get message(){return e.i18n.translate("PICBED_UPYUN_ANTI_LEECH_TOKEN")},default:t.antiLeechToken||"",required:!1},{name:"expireTime",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_EXPIRE_TIME")},get alias(){return e.i18n.translate("PICBED_UPYUN_EXPIRE_TIME")},get message(){return e.i18n.translate("PICBED_UPYUN_EXPIRE_TIME")},default:t.expireTime||"",required:!1},{name:"endpoint",type:"input",get prefix(){return e.i18n.translate("PICBED_UPYUN_ENDPOINT")},get alias(){return e.i18n.translate("PICBED_UPYUN_ENDPOINT")},get message(){return e.i18n.translate("PICBED_UPYUN_MESSAGE_ENDPOINT")},default:t.endpoint||"https://v0.api.upyun.com",required:!1}]};const wr=async e=>{const r=e.getConfig("picBed.webdavplist");if(!r)throw new Error("Can't find webdavplist config");r.host=r.host.replace(/^https?:\/\/|\/+$/g,""),r.host=(r.sslEnabled?"https://":"http://")+r.host,r.path=Mt({path:r.path,rootToEmpty:!1});const n=r.authType||"basic",i=Mt({path:r.webpath,rootToEmpty:!1}),s=r.options||"";try{const E=e.output,o=r.customUrl,I=r.path;for(const l of E)if(l.fileName&&l.buffer){let E=l.buffer;!E&&l.base64Image&&(E=Buffer.from(l.base64Image,"base64"));const S={username:r.username,password:r.password,maxBodyLength:4294967296,maxContentLength:4294967296};"digest"===n&&(S.authType=re.Digest);const _=ne(r.host,S),P="/"===I?"":I;P&&await _.createDirectory(P,{recursive:!0});if(!await _.putFileContents(`${I}${l.fileName}`.replace(/^\/+|\/+$/g,""),E,{overwrite:!0}))throw new Error("Upload failed");{const n=C.join(e.baseDir,"imgTemp","webdavplist"),S=C.join(n,l.fileName);a(C.dirname(S)),t.writeFileSync(S,E),delete l.base64Image,delete l.buffer;const _=o||r.host;r.webpath?l.imgUrl=`${_}/${yt(`${i}${l.fileName}`)}${s}`:l.imgUrl=`${_}/${yt(`${I}${l.fileName}`)}${s}`,l.galleryPath=`http://localhost:36699/webdavplist/${encodeURIComponent(l.fileName)}`}}return e}catch(t){throw e.emit(Ct.NOTIFICATION,{title:e.i18n.translate("UPLOAD_FAILED"),body:e.i18n.translate("CHECK_SETTINGS")}),t}},Wr=e=>{var t;const r=e.getConfig("picBed.webdavplist")||{};return[{name:"host",type:"input",get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_HOST")},default:r.host||"",required:!0},{name:"sslEnabled",type:"confirm",get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_SSLENABLED")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_SSLENABLED")},required:!1,default:null!==(t=r.sslEnabled)&&void 0!==t&&t,get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_SSLENABLED")}},{name:"username",type:"input",get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_USERNAME")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_USERNAME")},default:r.username||"",required:!0,get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_USERNAME")}},{name:"password",type:"input",get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_PASSWORD")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_PASSWORD")},default:r.password||"",required:!0,get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_PASSWORD")}},{name:"path",type:"input",get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_PATH")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_PATH")},default:r.path||"",required:!1,get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_PATH")}},{name:"webpath",type:"input",get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_WEBSITE_PATH")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_WEBSITE_PATH")},default:r.path||"",required:!1,get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_WEBSITE_PATH")}},{name:"customUrl",type:"input",get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_CUSTOMURL")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_CUSTOMURL")},default:r.customUrl||"",required:!1,get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_CUSTOMURL")}},{name:"authType",type:"list",get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_AUTHTYPE")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_AUTHTYPE")},choices:["basic","digest"],default:r.authType||"basic",required:!1},{name:"options",type:"input",get prefix(){return e.i18n.translate("PICBED_WEBDAVPLIST_OPTIONS")},get alias(){return e.i18n.translate("PICBED_WEBDAVPLIST_OPTIONS")},get message(){return e.i18n.translate("PICBED_WEBDAVPLIST_MESSAGE_OPTIONS")},default:r.options||"",required:!1}]};const Kr=()=>({register(e){!function(e){e.helper.uploader.register("alistplist",{get name(){return e.i18n.translate("PICBED_ALIST_PLIST")},handle:wt,config:Wt})}(e),function(e){e.helper.uploader.register("aliyun",{get name(){return e.i18n.translate("PICBED_ALICLOUD")},handle:$t,config:vt})}(e),function(e){e.helper.uploader.register("aws-s3-plist",{get name(){return e.i18n.translate("PICBED_AWSS3PLIST")},handle:Xt,config:Qt})}(e),function(e){e.helper.uploader.register("github",{get name(){return e.i18n.translate("PICBED_GITHUB")},handle:tr,config:rr})}(e),function(e){e.helper.uploader.register("imgur",{get name(){return e.i18n.translate("PICBED_IMGUR")},handle:ar,config:ir})}(e),function(e){e.helper.uploader.register("local",{get name(){return e.i18n.translate("PICBED_LOCAL")},handle:sr,config:Er})}(e),function(e){e.helper.uploader.register("lskyplist",{get name(){return e.i18n.translate("PICBED_LSKY_PLIST")},handle:Ir,config:lr})}(e),function(e){e.helper.uploader.register("piclist",{get name(){return e.i18n.translate("PICBED_PICLIST")},handle:_r,config:Pr})}(e),function(e){e.helper.uploader.register("qiniu",{get name(){return e.i18n.translate("PICBED_QINIU")},handle:pr,config:Ar})}(e),function(e){e.helper.uploader.register("sftpplist",{get name(){return e.i18n.translate("PICBED_SFTPPLIST")},handle:Cr,config:gr})}(e),function(e){e.helper.uploader.register("smms",{get name(){return e.i18n.translate("PICBED_SMMS")},handle:dr,config:mr})}(e),function(e){e.helper.uploader.register("tcyun",{get name(){return e.i18n.translate("PICBED_TENCENTCLOUD")},handle:hr,config:Br})}(e),function(e){e.helper.uploader.register("telegraphplist",{get name(){return e.i18n.translate("PICBED_TELEGRAPH")},handle:Nr,config:Rr})}(e),function(e){e.helper.uploader.register("upyun",{get name(){return e.i18n.translate("PICBED_UPYUN")},handle:br,config:xr})}(e),function(e){e.helper.uploader.register("webdavplist",{get name(){return e.i18n.translate("PICBED_WEBDAVPLIST")},handle:wr,config:Wr})}(e)}}),Fr=(e,t,r)=>{const n=ge(t);return n.real||("string"==typeof r?e.log.warn(`can't get ${r}'s image size`):e.log.warn("can't get image size"),e.log.warn("fallback to 200 * 200")),n};var Hr={handle:async e=>{const t=e.output;return await Promise.all(e.input.map((async(r,n)=>{let a;if(a=Buffer.isBuffer(r)?{success:!0,buffer:r,fileName:"",extname:""}:Ae(r)?await de(r,e):await De(r),a.success&&a.buffer){const i=Fr(e,a.buffer,r),s=a.extname||i.extname||".png";t[n]={buffer:a.buffer,fileName:a.fileName||`${b().format("YYYYMMDDHHmmss")}${s}`,width:i.width,height:i.height,extname:a.extname}}else e.log.error(a.reason)}))),e.output=t.filter((e=>e)),e}};var $r={handle:async e=>(e.output.push(...e.input),e)};const vr={darwin:'-- From https://github.com/mushanshitiancai/vscode-paste-image\r\nproperty fileTypes : {{«class PNGf», ".png"}}\r\n\r\non run argv\r\n\tif argv is {} then\r\n\t\treturn ""\r\n\tend if\r\n\r\n\tif ((clipboard info) as string) contains "«class furl»" then\r\n\t\treturn POSIX path of (the clipboard as «class furl»)\r\n\telse\r\n\t\tset imagePath to (item 1 of argv)\r\n\t\tset theType to getType()\r\n\r\n\t\tif theType is not missing value then\r\n\t\t\ttry\r\n\t\t\t\tset myFile to (open for access imagePath with write permission)\r\n\t\t\t\tset eof myFile to 0\r\n\t\t\t\twrite (the clipboard as (first item of theType)) to myFile\r\n\t\t\t\tclose access myFile\r\n\t\t\t\treturn (POSIX path of imagePath)\r\n\t\t\ton error\r\n\t\t\t\ttry\r\n\t\t\t\t\tclose access myFile\r\n\t\t\t\tend try\r\n\t\t\t\treturn "no image"\r\n\t\t\tend try\r\n\t\telse\r\n\t\t\treturn "no image"\r\n\t\tend if\r\n\tend if\r\nend run\r\n\r\non getType()\r\n\trepeat with aType in fileTypes\r\n\t\trepeat with theInfo in (clipboard info)\r\n\t\t\tif (first item of theInfo) is equal to (first item of aType) then return aType\r\n\t\tend repeat\r\n\tend repeat\r\n\treturn missing value\r\nend getType\r\n',win32:'\r\nparam($imagePath)\r\n\r\n# Adapted from https://github.com/octan3/img-clipboard-dump/blob/master/dump-clipboard-png.ps1\r\n\r\nAdd-Type -Assembly PresentationCore\r\n$img = [Windows.Clipboard]::GetImage()\r\n\r\nif ($img -eq $null) {\r\n "no image"\r\n Exit 1\r\n}\r\n\r\nif (-not $imagePath) {\r\n "no image"\r\n Exit 1\r\n}\r\n\r\n$fcb = new-object Windows.Media.Imaging.FormatConvertedBitmap($img, [Windows.Media.PixelFormats]::Rgb24, $null, 0)\r\n$stream = [IO.File]::Open($imagePath, "OpenOrCreate")\r\n$encoder = New-Object Windows.Media.Imaging.PngBitmapEncoder\r\n$encoder.Frames.Add([Windows.Media.Imaging.BitmapFrame]::Create($fcb)) | out-null\r\n$encoder.Save($stream) | out-null\r\n$stream.Dispose() | out-null\r\n\r\n$imagePath\r\n',win10:'# Adapted from https://github.com/octan3/img-clipboard-dump/blob/master/dump-clipboard-png.ps1\r\nparam($imagePath)\r\n\r\n# https://github.com/PowerShell/PowerShell/issues/7233\r\n# fix the output encoding bug\r\n[console]::InputEncoding = [console]::OutputEncoding = New-Object System.Text.UTF8Encoding\r\n\r\nAdd-Type -Assembly PresentationCore\r\nfunction main {\r\n $img = [Windows.Clipboard]::GetImage()\r\n\r\n if ($img -eq $null) {\r\n "no image"\r\n Exit 1\r\n }\r\n\r\n if (-not $imagePath) {\r\n "no image"\r\n Exit 1\r\n }\r\n\r\n $fcb = new-object Windows.Media.Imaging.FormatConvertedBitmap($img, [Windows.Media.PixelFormats]::Rgb24, $null, 0)\r\n $stream = [IO.File]::Open($imagePath, "OpenOrCreate")\r\n $encoder = New-Object Windows.Media.Imaging.PngBitmapEncoder\r\n $encoder.Frames.Add([Windows.Media.Imaging.BitmapFrame]::Create($fcb)) | out-null\r\n $encoder.Save($stream) | out-null\r\n $stream.Dispose() | out-null\r\n\r\n $imagePath\r\n # fix windows 10 native cmd crash bug when "picgo upload"\r\n # https://github.com/PicGo/PicGo-Core/issues/32\r\n Exit 1\r\n}\r\n\r\ntry {\r\n # For WIN10\r\n $file = Get-Clipboard -Format FileDropList\r\n if ($file -ne $null) {\r\n Convert-Path $file\r\n Exit 1\r\n }\r\n} catch {\r\n # For WIN7 WIN8 WIN10\r\n main\r\n}\r\n\r\nmain',linux:'#!/bin/sh\r\n\r\nif [ -z "$DISPLAY" ]; then\r\n echo "no support" >&2\r\n exit 1\r\nfi\r\n\r\ncase "$XDG_SESSION_TYPE" in\r\nwayland)\r\n command -v wl-copy >/dev/null 2>&1 || {\r\n echo >&2 "no wl-clipboard"\r\n exit 1\r\n }\r\n filePath=$(wl-copy -o 2>/dev/null | grep ^file:// | cut -c8-)\r\n if [ -z "$filePath" ]; then\r\n if\r\n wl-copy -t image/png image/png -o >"$1" 2>/dev/null\r\n then\r\n echo "$1"\r\n else\r\n rm -f "$1"\r\n echo "no image"\r\n fi\r\n else\r\n echo "$filePath"\r\n fi\r\n ;;\r\nx11 | tty)\r\n # require xclip(see http://stackoverflow.com/questions/592620/check-if-a-program-exists-from-a-bash-script/677212#677212)\r\n command -v xclip >/dev/null 2>&1 || {\r\n echo >&2 "no xclip"\r\n exit 1\r\n }\r\n # write image in clipboard to file (see http://unix.stackexchange.com/questions/145131/copy-image-from-clipboard-to-file)\r\n filePath=$(xclip -selection clipboard -o 2>/dev/null | grep ^file:// | cut -c8-)\r\n if [ -z "$filePath" ]; then\r\n if\r\n xclip -selection clipboard -target image/png -o >"$1" 2>/dev/null\r\n then\r\n echo "$1"\r\n else\r\n rm -f "$1"\r\n echo "no image"\r\n fi\r\n else\r\n echo "$filePath"\r\n fi\r\n ;;\r\nesac\r\n',wsl:'#!/bin/sh\r\n# grab the paths\r\nscriptPath=$(echo $0 | awk \'{ print substr( $0, 1, length($0)-6 ) }\')"windows10.ps1"\r\nimagePath=$(echo $1 | awk \'{ print substr( $0, 1, length($0)-18 ) }\')\r\nimageName=$(echo $1 | awk \'{ print substr( $0, length($0)-17, length($0) ) }\')\r\n\r\n# run the powershell script\r\nres=$(powershell.exe -noprofile -noninteractive -nologo -sta -executionpolicy unrestricted -file $(wslpath -w $scriptPath) $(wslpath -w $imagePath)"\\\\"$imageName)\r\n\r\n# note that there is a return symbol in powershell result\r\nnoImage=$(echo "no image\\r")\r\n\r\n# check whether image exists\r\nif [ "$res" = "$noImage" ] ;then\r\n echo "no image"\r\nelse\r\n echo $(wslpath -u -a "${res}")\r\nfi\r\n'},kr={darwin:"mac.applescript",win32:"windows.ps1",win10:"windows10.ps1",linux:"linux.sh",wsl:"wsl.sh"};const Yr=async e=>{!function(e){const t=C.join(e.baseDir,"piclist-clipboard-images");a(t)}(e);const r=C.join(e.baseDir,"piclist-clipboard-images",`${b().format("YYYYMMDDHHmmss")}.png`);return await new Promise(((n,a)=>{const i=(()=>{const e=process.platform;return ie?"wsl":"win32"===e?"10"===A.release().split(".")[0]?"win10":"win32":"darwin"===e?"darwin":"linux"})(),s=C.join(e.baseDir,kr[i]);let E;t.existsSync(s)||t.writeFileSync(s,vr[i],"utf8"),E="darwin"===i?ae("osascript",[s,r]):"win32"===i||"win10"===i?ae("powershell",["-noprofile","-noninteractive","-nologo","-sta","-executionpolicy","unrestricted","-file",s,r]):ae("sh",[s,r]),E.stdout.on("data",(s=>{if("linux"===i&&"no xclip or wl-clipboard"===s.toString().trim())return e.emit(Ct.NOTIFICATION,{title:"xclip or wl-clipboard not found",body:"Please install xclip(for x11) or wl-clipboard(for wayland) before run picgo"}),a(new Error("Please install xclip(for x11) or wl-clipboard(for wayland) before run picgo"));const E=s.toString().trim();let o=!1;if(C.basename(E)!==C.basename(r)&&t.existsSync(E)&&(o=!0),"no image"!==E&&!t.existsSync(E))return a(new Error(`Can't find ${E}`));n({imgPath:E,shouldKeepAfterUploading:o})}))}))};class qr{constructor(e){if(this.ctx=e,this.db=new se(this.ctx.configPath),!this.db.has("picBed"))try{this.db.set("picBed",{uploader:"smms",current:"smms",smms:{token:""}})}catch(e){throw this.ctx.log.error(e),e}if(!this.db.has("picgoPlugins"))try{this.db.set("picgoPlugins",{})}catch(e){throw this.ctx.log.error(e),e}}read(e){return this.db.read(e)}get(e=""){return this.read(!0),this.db.get(e)}set(e,t){this.read(!0),this.db.set(e,t)}has(e){return this.read(!0),this.db.has(e)}unset(e,t){return this.read(!0),this.db.unset(e,t)}saveConfig(e){Object.keys(e).forEach((t=>{this.set(t,e[t])}))}removeConfig(e){Object.keys(e).forEach((t=>{this.unset(t,e[t])}))}}const Vr={"zh-CN":{UPLOAD_FAILED:"上传失败",CHECK_SETTINGS:"请检查你的配置项是否正确",CHECK_SETTINGS_AND_NETWORK:"请检查你的配置项以及网络",UPLOAD_FAILED_REASON:"错误码:${code},请打开浏览器粘贴地址查看相关原因",SERVER_ERROR:"服务端出错,请重试",AUTH_FAILED:"认证失败",PICBED_SMMS:"SM.MS",PICBED_SMMS_TOKEN:"设定Token",PICBED_SMMS_MESSAGE_TOKEN:"请填写Token",PICBED_SMMS_BACKUP_DOMAIN:"备用上传域名",PICBED_SMMS_MESSAGE_BACKUP_DOMAIN:"例如 smms.app",PICBED_LOCAL:"本地上传",PICBED_LOCAL_PATH:"设定路径",PICBED_LOCAL_MESSAGE_PATH:"例如 /usr/local/images/",PICBED_LOCAL_CUSTOMURL:"设定自定义域名",PICBED_LOCAL_MESSAGE_CUSTOMURL:"例如 https://test.com",PICBED_LOCAL_WEBPATH:"设定网站路径",PICBED_LOCAL_MESSAGE_WEBPATH:"用于拼接网址路径",PICBED_ALIST_PLIST:"AList",PICBED_ALIST_URL:"设定URL",PICBED_ALIST_MESSAGE_URL:"例如:https://alist.example.com",PICBED_ALIST_TOKEN:"设定Token",PICBED_ALIST_MESSAGE_TOKEN:"请输入Token(与用户名-密码二选一)",PICBED_ALIST_USERNAME:"设定用户名",PICBED_ALIST_MESSAGE_USERNAME:"请输入用户名(与Token二选一)",PICBED_ALIST_PASSWORD:"设定密码",PICBED_ALIST_MESSAGE_PASSWORD:"请输入密码",PICBED_ALIST_UPLOAD_PATH:"设定上传路径",PICBED_ALIST_MESSAGE_UPLOAD_PATH:"例如:/test",PICBED_ALIST_WEB_PATH:"设定网站路径",PICBED_ALIST_MESSAGE_WEB_PATH:"用于拼接网址路径",PICBED_ALIST_CUSTOMURL:"设定自定义域名",PICBED_ALIST_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_ALICLOUD:"阿里云OSS",PICBED_ALICLOUD_ACCESSKEYID:"设定accessKeyId",PICBED_ALICLOUD_ACCESSKEYSECRET:"设定accessKeySecret",PICBED_ALICLOUD_BUCKET:"设定Bucket",PICBED_ALICLOUD_AREA:"设定存储区域",PICBED_ALICLOUD_PATH:"设定存储路径",PICBED_ALICLOUD_CUSTOMURL:"设定自定义域名",PICBED_ALICLOUD_OPTIONS:"设定网址后缀",PICBED_ALICLOUD_MESSAGE_AREA:"例如:oss-cn-beijing",PICBED_ALICLOUD_MESSAGE_PATH:"例如:test/",PICBED_ALICLOUD_MESSAGE_OPTIONS:"例如:?x-oss-process=xxx",PICBED_ALICLOUD_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_TENCENTCLOUD:"腾讯云COS",PICBED_TENCENTCLOUD_VERSION:"COS版本",PICBED_TENCENTCLOUD_SECRETID:"设定SecretId",PICBED_TENCENTCLOUD_SECRETKEY:"设定SecretKey",PICBED_TENCENTCLOUD_APPID:"设定AppId",PICBED_TENCENTCLOUD_BUCKET:"设定Bucket",PICBED_TENCENTCLOUD_AREA:"设定存储区域",PICBED_TENCENTCLOUD_ENDPOINT:"设定接入点",PICBED_TENCENTCLOUD_PATH:"设定存储路径",PICBED_TENCENTCLOUD_OPTIONS:"设定网址后缀",PICBED_TENCENTCLOUD_CUSTOMURL:"设定自定义域名",PICBED_TENCENTCLOUD_MESSAGE_APPID:"例如:1234567890",PICBED_TENCENTCLOUD_MESSAGE_AREA:"例如:ap-beijing",PICBED_TENCENTCLOUD_MESSAGE_PATH:"例如:test/",PICBED_TENCENTCLOUD_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_TENCENTCLOUD_MESSAGE_OPTIONS:"例如:?imageMogr2",PICBED_TENCENTCLOUD_MESSAGE_ENDPOINT:"例如:cos-internal.accelerate.tencentcos.cn",PICBED_TENCENTCLOUD_SLIM:"极智压缩",PICBED_TENCENTCLOUD_SLIM_TIP:"图片极智压缩,详情请参考[文档说明](https://cloud.tencent.com/document/product/436/86438)",PICBED_TENCENTCLOUD_SLIM_CONFIRM:"开启",PICBED_TENCENTCLOUD_SLIM_CANCEL:"关闭",PICBED_GITHUB:"GitHub",PICBED_GITHUB_TOKEN:"设定Token",PICBED_GITHUB_REPO:"设定仓库名",PICBED_GITHUB_PATH:"设定存储路径",PICBED_GITHUB_BRANCH:"设定分支名",PICBED_GITHUB_CUSTOMURL:"设定自定义域名",PICBED_GITHUB_MESSAGE_REPO:"格式:username/repo",PICBED_GITHUB_MESSAGE_BRANCH:"例如:main",PICBED_GITHUB_MESSAGE_PATH:"例如:test/",PICBED_GITHUB_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_QINIU:"七牛云",PICBED_QINIU_ACCESSKEY:"设定AccessKey",PICBED_QINIU_SECRETKEY:"设定SecretKey",PICBED_QINIU_BUCKET:"设定Bucket",PICBED_QINIU_PATH:"设定存储路径",PICBED_QINIU_URL:"设定访问网址",PICBED_QINIU_OPTIONS:"设定网址后缀",PICBED_QINIU_AREA:"设定存储区域",PICBED_QINIU_MESSAGE_PATH:"例如:test/",PICBED_QINIU_MESSAGE_AREA:"例如:z0",PICBED_QINIU_MESSAGE_OPTIONS:"例如:?imageslim",PICBED_QINIU_MESSAGE_URL:"例如:https://xxx.yyy.glb.clouddn.com",PICBED_TELEGRAPH:"Telegraph",PICBED_IMGUR:"Imgur",PICBED_IMGUR_CLIENTID:"设定ClientId",PICBED_IMGUR_USERNAME:"设定用户名",PICBED_IMGUR_ACCESS_TOKEN:"设定accessToken",PICBED_IMGUR_ALBUM:"设定相册名",PICBED_IMGUR_PROXY:"设定代理",PICBED_IMGUR_MESSAGE_CLIENTID:"匿名上传时填写",PICBED_IMGUR_MESSAGE_USERNAME:"需要上传到账户时填写",PICBED_IMGUR_MESSAGE_ACCESS_TOKEN:"需要上传到账户时填写",PICBED_IMGUR_MESSAGE_ALBUM:"例如:test",PICBED_IMGUR_MESSAGE_PROXY:"例如:http://127.0.0.1:1080",PICBED_UPYUN:"又拍云",PICBED_UPYUN_BUCKET:"设定Bucket",PICBED_UPYUN_OPERATOR:"设定操作员",PICBED_UPYUN_PASSWORD:"设定操作员密码",PICBED_UPYUN_PATH:"设定存储路径",PICBED_UPYUN_URL:"设定加速域名",PICBED_UPYUN_OPTIONS:"设定网址后缀",PICBED_UPYUN_ENDPOINT:"设定自定义API接入点",PICBED_UPYUN_ANTI_LEECH_TOKEN:"设定防盗链Token",PICBED_UPYUN_EXPIRE_TIME:"设定过期时间(秒)",PICBED_UPYUN_MESSAGE_OPERATOR:"例如:me",PICBED_UPYUN_MESSAGE_PASSWORD:"输入操作员密码",PICBED_UPYUN_MESSAGE_URL:"例如:http://xxx.test.upcdn.net",PICBED_UPYUN_MESSAGE_OPTIONS:"例如:!imgslim",PICBED_UPYUN_MESSAGE_PATH:"例如:test/",PICBED_UPYUN_MESSAGE_ENDPOINT:"例如:https://v0.api.upyun.com",PICBED_WEBDAVPLIST:"WebDAV",PICBED_WEBDAVPLIST_HOST:"设定接口网址",PICBED_WEBDAVPLIST_SSLENABLED:"启用SSL",PICBED_WEBDAVPLIST_USERNAME:"设定用户名",PICBED_WEBDAVPLIST_PASSWORD:"设定密码",PICBED_WEBDAVPLIST_PATH:"设定存储路径",PICBED_WEBDAVPLIST_WEBSITE_PATH:"设定网址路径",PICBED_WEBDAVPLIST_CUSTOMURL:"设定自定义域名",PICBED_WEBDAVPLIST_AUTHTYPE:"设定认证方式",PICBED_WEBDAVPLIST_OPTIONS:"设定网址后缀",PICBED_WEBDAVPLIST_MESSAGE_HOST:"例如:https://example.com/webdav",PICBED_WEBDAVPLIST_MESSAGE_SSLENABLED:"需要HTTPS时启用",PICBED_WEBDAVPLIST_MESSAGE_USERNAME:"例如:me",PICBED_WEBDAVPLIST_MESSAGE_PASSWORD:"输入密码",PICBED_WEBDAVPLIST_MESSAGE_PATH:"例如:test/",PICBED_WEBDAVPLIST_MESSAGE_WEBSITE_PATH:"拼接网址时使用",PICBED_WEBDAVPLIST_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_WEBDAVPLIST_MESSAGE_OPTIONS:"例如:?key=123456",PICBED_SFTPPLIST:"内置SFTP",PICBED_SFTPPLIST_HOST:"设定主机",PICBED_SFTPPLIST_PORT:"设定端口",PICBED_SFTPPLIST_USERNAME:"设定用户名",PICBED_SFTPPLIST_PASSWORD:"设定密码",PICBED_SFTPPLIST_PRIVATEKEY:"设定私钥",PICBED_SFTPPLIST_PRIVATEKEY_PASSPHRASE:"设定私钥密码",PICBED_SFTPPLIST_UPLOADPATH:"设定上传路径",PICBED_SFTPPLIST_CUSTOMURL:"设定自定义域名",PICBED_SFTPPLIST_WEBSITE_PATH:"设定网站路径",PICBED_SFTPPLIST_FILE_USER:"设定文件用户:组",PICBED_SFTPPLIST_FILE_MODE:"设定文件权限",PICBED_SFTPPLIST_DIR_MODE:"设定文件夹权限",PICBED_SFTPPLIST_MESSAGE_HOST:"例如:1.1.1.3",PICBED_SFTPPLIST_MESSAGE_PORT:"默认22",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY:"例如:/Users/xxx/.ssh/id_rsa",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY_PASSPHRASE:"输入私钥密码",PICBED_SFTPPLIST_MESSAGE_UPLOADPATH:"例如:test/",PICBED_SFTPPLIST_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_SFTPPLIST_MESSAGE_WEBSITE_PATH:"拼接网址时使用",PICBED_SFTPPLIST_MESSAGE_FILE_USER:"例如:www:data",PICBED_SFTPPLIST_MESSAGE_FILE_MODE:"例如:0664",PICBED_SFTPPLIST_MESSAGE_DIR_MODE:"例如:0775",PICBED_PICLIST:"PicList",PICBED_PICLIST_HOST:"设定主机",PICBED_PICLIST_PORT:"设定端口",PICBED_PICLIST_PICBED:"设定图床",PICBED_PICLIST_CONFIGNAME:"设定配置名",PICBED_PICLIST_KEY:"设定鉴权Key",PICBED_LSKY_PLIST:"兰空图床",PICBED_LSKY_VERSION:"设定版本",PICBED_LSKY_MESSAGE_VERSION:"例如V1",PICBED_LSKY_HOST:"设定主机",PICBED_LSKY_MESSAGE_HOST:"例如:https://example.com",PICBED_LSKY_TOKEN:"设定Token",PICBED_LSKY_MESSAGE_TOKEN:"例如:1234567890",PICBED_LSKY_STRATEGY_ID:"设定策略ID",PICBED_LSKY_MESSAGE_STRATEGY_ID:"例如:1",PICBED_LSKY_ALBUM_ID:"设定相册ID",PICBED_LSKY_MESSAGE_ALBUM_ID:"选填,V2版本限定",PICBED_LSKY_PERMISSION:"设定权限",PICBED_LSKY_MESSAGE_PERMISSION:"例如:public",PICBED_AWSS3PLIST:"AWS S3",PICBED_AWSS3PLIST_ACCESSKEYID:"设定AccessKeyId",PICBED_AWSS3PLIST_SECRET_ACCESSKEY:"设定SecretAccessKey",PICBED_AWSS3PLIST_BUCKET:"设定Bucket",PICBED_AWSS3PLIST_REGION:"设定Region",PICBED_AWSS3PLIST_UPLOADPATH:"设定上传路径",PICBED_AWSS3PLIST_ENDPOINT:"设定自定义节点",PICBED_AWSS3PLIST_PROXY:"设定代理",PICBED_AWSS3PLIST_URLPREFIX:"设定自定义域名",PICBED_AWSS3PLIST_PATHSTYLEACCESS:"启用s3ForcePathStyle",PICBED_AWSS3PLIST_REJECTUNAUTHORIZED:"拒绝无效TLS证书连接",PICBED_AWSS3PLIST_ACL:"设定上传资源的访问策略",PICBED_AWSS3PLIST_DISABLEBUCKETPREFIXTOURL:"开启 `pathStyleAccess` 时,是否要禁用最终生成URL中添加 bucket 前缀",PICBED_AWSS3PLIST_MESSAGE_ACCESSKEYID:"例如:AKIAxxxxxxxxxxxxx",PICBED_AWSS3PLIST_MESSAGE_SECRET_ACCESSKEY:"例如:xxxxxxxxxx",PICBED_AWSS3PLIST_MESSAGE_BUCKET:"例如:test",PICBED_AWSS3PLIST_MESSAGE_REGION:"例如:us-east-1",PICBED_AWSS3PLIST_MESSAGE_UPLOADPATH:"例如:test/{fullName}",PICBED_AWSS3PLIST_MESSAGE_ENDPOINT:"例如:https://s3.us-east-1.amazonaws.com",PICBED_AWSS3PLIST_MESSAGE_PROXY:"例如:http://127.0.0.1:1080",PICBED_AWSS3PLIST_MESSAGE_URLPREFIX:"例如:https://test.com",PICBED_AWSS3PLIST_MESSAGE_PATHSTYLEACCESS:"需要时启用",PICBED_AWSS3PLIST_MESSAGE_REJECTUNAUTHORIZED:"需要时启用",PICBED_AWSS3PLIST_MESSAGE_ACL:"例如:public-read",PICBED_AWSS3PLIST_MESSAGE_DISABLEBUCKETPREFIXTOURL:"需要时启用",BUILDIN_WATERMARK:"水印设置",BUILDIN_WATERMARK_ISADDWATERMARK:"是否添加水印",BUILDIN_WATERMARK_MESSAGE_ISADDWATERMARK:"需要添加水印时启用",BUILDIN_WATERMARK_WATERMARKTYPE:"设定水印类型",BUILDIN_WATERMARK_MESSAGE_WATERMARKTYPE:"请选择水印类型",BUILDIN_WATERMARK_ISFULLSCREENWATERMARK:"是否全屏水印",BUILDIN_WATERMARK_MESSAGE_ISFULLSCREENWATERMARK:"需要全屏水印时启用",BUILDIN_WATERMARK_WATERMARKDEGREE:"设定水印角度",BUILDIN_WATERMARK_MESSAGE_WATERMARKDEGREE:"请输入数字",BUILDIN_WATERMARK_WATERMARKTEXT:"设定水印文字",BUILDIN_WATERMARK_MESSAGE_WATERMARKTEXT:"请输入水印文字",BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH:"设定水印字体文件路径",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTPATH:"请输入水印字体文件路径",BUILDIN_WATERMARK_WATERMARKFONTRATIO:"设定水印相对于图片的比例",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTRATIO:"请输入0-1的小数",BUILDIN_WATERMARK_WATERMARKFONTCOLOR:"设定水印字体颜色",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTCOLOR:"请输入rgb颜色值",BUILDIN_WATERMARK_WATERMARKIMAGEPATH:"设定水印图片路径",BUILDIN_WATERMARK_MESSAGE_WATERMARKIMAGEPATH:"请输入水印图片路径",BUILDIN_WATERMARK_WATERMARKPOSITION:"设定水印位置",BUILDIN_WATERMARK_MESSAGE_WATERMARKPOSITION:"请选择水印位置",BUILDIN_RENAME:"重命名设置",BUILDIN_RENAME_FORMAT:"设定重命名格式",BUILDIN_RENAME_ENABLE:"是否启用重命名",BUILDIN_COMPRESS:"图片处理",BUILDIN_COMPRESS_QUALITY:"设定图片质量",BUILDIN_COMPRESS_MESSAGE_QUALITY:"请输入0-100的整数",BUILDIN_COMPRESS_ISCONVERT:"是否进行格式转换",BUILDIN_COMPRESS_MESSAGE_ISCONVERT:"需要转换时启用",BUILDIN_COMPRESS_CONVERTFORMAT:"设定转换格式",BUILDIN_COMPRESS_MESSAGE_CONVERTFORMAT:"请选择转换格式",BUILDIN_COMPRESS_ISRESIZE:"是否进行图片缩放",BUILDIN_COMPRESS_MESSAGE_ISRESIZE:"需要缩放时启用",BUILDIN_COMPRESS_RESIZEWIDTH:"设定缩放宽度",BUILDIN_COMPRESS_MESSAGE_RESIZEWIDTH:"请输入数字",BUILDIN_COMPRESS_RESIZEHEIGHT:"设定缩放高度",BUILDIN_COMPRESS_MESSAGE_RESIZEHEIGHT:"请输入数字",BUILDIN_COMPRESS_ISRESIZEBYPERCENT:"是否按百分比进行缩放",BUILDIN_COMPRESS_MESSAGE_ISRESIZEBYPERCENT:"需要按百分比缩放时启用",BUILDIN_COMPRESS_ISFLIP:"是否垂直翻转图片",BUILDIN_COMPRESS_ISFLOP:"是否水平翻转图片",BUILDIN_COMPRESS_RESIZEPERCENT:"设定缩放百分比",BUILDIN_COMPRESS_MESSAGE_RESIZEPERCENT:"请输入数字",BUILDIN_COMPRESS_SKIPRESIZEOFSMALLIMG:"是否跳过小图缩放",BUILDIN_COMPRESS_ISROTATE:"是否进行图片旋转",BUILDIN_COMPRESS_MESSAGE_ISROTATE:"需要旋转时启用",BUILDIN_COMPRESS_ROTATEDEGREE:"设定旋转角度",BUILDIN_COMPRESS_MESSAGE_ROTATEDEGREE:"请输入数字,可为负数",BUILDIN_COMPRESS_ISREMOVEEXIF:"是否移除EXIF信息",BUILDIN_COMPRESS_MESSAGE_ISREMOVEEXIF:"需要移除EXIF信息时启用",PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS:"插件安装成功",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED:"插件安装失败",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_REASON:"插件安装失败,失败码为${code},错误日志为 \n ${data}",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_PATH:"插件安装失败,请输入合法插件名或合法安装路径",PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS:"插件卸载成功",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED:"插件卸载失败",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_REASON:"插件卸载失败,失败码为${code},错误日志为 \n ${data}",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID:"插件卸载失败,请输入合法插件名",PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS:"插件更新成功",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED:"插件更新失败",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_REASON:"插件更新失败,失败码为${code},错误日志为 \n ${data}",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_VALID:"插件更新失败,请输入合法插件名"},"zh-TW":{UPLOAD_FAILED:"上傳失敗",CHECK_SETTINGS:"請檢查你的設定是否正確",CHECK_SETTINGS_AND_NETWORK:"請檢查你的設定及網路",UPLOAD_FAILED_REASON:"錯誤碼:${code},請打開瀏覽器貼上地址查看相關原因",SERVER_ERROR:"伺服器出錯,請重試",AUTH_FAILED:"認證失敗",PICBED_SMMS:"SM.MS",PICBED_SMMS_TOKEN:"設定Token",PICBED_SMMS_MESSAGE_TOKEN:"請輸入Token",PICBED_SMMS_BACKUP_DOMAIN:"備用上傳網址",PICBED_SMMS_MESSAGE_BACKUP_DOMAIN:"例如 smms.app",PICBED_LOCAL:"本地",PICBED_LOCAL_PATH:"設定儲存路徑",PICBED_LOCAL_MESSAGE_PATH:"例如 /usr/local/images/",PICBED_LOCAL_CUSTOMURL:"設定自訂網址",PICBED_LOCAL_MESSAGE_CUSTOMURL:"例如 https://test.com",PICBED_LOCAL_WEBPATH:"設定網址路徑",PICBED_LOCAL_MESSAGE_WEBPATH:"用于網頁顯示的路徑",PICBED_ALIST_PLIST:"AList",PICBED_ALIST_URL:"設定URL",PICBED_ALIST_MESSAGE_URL:"例如:https://alist.example.com",PICBED_ALIST_TOKEN:"設定Token",PICBED_ALIST_MESSAGE_TOKEN:"請輸入Token(與用戶名-密碼二選一)",PICBED_ALIST_USERNAME:"設定用戶名",PICBED_ALIST_MESSAGE_USERNAME:"請輸入用戶名(與Token二選一)",PICBED_ALIST_PASSWORD:"設定密碼",PICBED_ALIST_MESSAGE_PASSWORD:"請輸入密碼",PICBED_ALIST_UPLOAD_PATH:"設定上傳路徑",PICBED_ALIST_MESSAGE_UPLOAD_PATH:"例如:/test",PICBED_ALIST_WEB_PATH:"設定網址路徑",PICBED_ALIST_MESSAGE_WEB_PATH:"用于網頁顯示的路徑",PICBED_ALIST_CUSTOMURL:"設定自訂網址",PICBED_ALIST_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_ALICLOUD:"阿里云OSS",PICBED_ALICLOUD_ACCESSKEYID:"設定accessKeyId",PICBED_ALICLOUD_ACCESSKEYSECRET:"設定accessKeySecret",PICBED_ALICLOUD_BUCKET:"設定Bucket",PICBED_ALICLOUD_AREA:"設定儲存區域",PICBED_ALICLOUD_PATH:"設定儲存路徑",PICBED_ALICLOUD_CUSTOMURL:"設定自訂網址",PICBED_ALICLOUD_OPTIONS:"設定網址後綴",PICBED_ALICLOUD_MESSAGE_AREA:"例如:oss-cn-beijing",PICBED_ALICLOUD_MESSAGE_PATH:"例如:test/",PICBED_ALICLOUD_MESSAGE_OPTIONS:"例如:?x-oss-process=xxx",PICBED_ALICLOUD_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_TENCENTCLOUD:"騰訊云COS",PICBED_TENCENTCLOUD_VERSION:"COS版本",PICBED_TENCENTCLOUD_SECRETID:"設定SecretId",PICBED_TENCENTCLOUD_SECRETKEY:"設定SecretKey",PICBED_TENCENTCLOUD_APPID:"設定AppId",PICBED_TENCENTCLOUD_BUCKET:"設定Bucket",PICBED_TENCENTCLOUD_AREA:"設定儲存區域",PICBED_TENCENTCLOUD_ENDPOINT:"設定接入點",PICBED_TENCENTCLOUD_PATH:"設定儲存路徑",PICBED_TENCENTCLOUD_OPTIONS:"設定網址後綴",PICBED_TENCENTCLOUD_CUSTOMURL:"設定自訂網址",PICBED_TENCENTCLOUD_MESSAGE_APPID:"例如:1234567890",PICBED_TENCENTCLOUD_MESSAGE_AREA:"例如:ap-beijing",PICBED_TENCENTCLOUD_MESSAGE_PATH:"例如:test/",PICBED_TENCENTCLOUD_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_TENCENTCLOUD_MESSAGE_OPTIONS:"例如:?imageMogr2",PICBED_TENCENTCLOUD_MESSAGE_ENDPOINT:"例如:cos-internal.accelerate.tencentcos.cn",PICBED_TENCENTCLOUD_SLIM:"極智壓縮",PICBED_TENCENTCLOUD_SLIM_CANCEL:"關閉",PICBED_TENCENTCLOUD_SLIM_CONFIRM:"開啓",PICBED_TENCENTCLOUD_SLIM_TIP:"圖片極智壓縮,詳情請參考[文檔說明](https://cloud.tencent.com/document/product/436/49259)",PICBED_GITHUB:"GitHub",PICBED_GITHUB_TOKEN:"設定Token",PICBED_GITHUB_REPO:"設定倉庫名稱",PICBED_GITHUB_PATH:"設定儲存路徑",PICBED_GITHUB_BRANCH:"設定分支名稱",PICBED_GITHUB_CUSTOMURL:"設定自訂網址",PICBED_GITHUB_MESSAGE_REPO:"格式:username/repo",PICBED_GITHUB_MESSAGE_BRANCH:"例如:main",PICBED_GITHUB_MESSAGE_PATH:"例如:test/",PICBED_GITHUB_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_QINIU:"七牛云",PICBED_QINIU_ACCESSKEY:"設定AccessKey",PICBED_QINIU_SECRETKEY:"設定SecretKey",PICBED_QINIU_BUCKET:"設定Bucket",PICBED_QINIU_PATH:"設定儲存路徑",PICBED_QINIU_URL:"設定訪問網址",PICBED_QINIU_OPTIONS:"設定網址後綴",PICBED_QINIU_AREA:"設定儲存區域",PICBED_QINIU_MESSAGE_PATH:"例如:test/",PICBED_QINIU_MESSAGE_AREA:"例如:z0",PICBED_QINIU_MESSAGE_OPTIONS:"例如:?imageslim",PICBED_QINIU_MESSAGE_URL:"例如:https://xxx.yyy.glb.clouddn.com",PICBED_TELEGRAPH:"Telegraph",PICBED_IMGUR:"Imgur",PICBED_IMGUR_CLIENTID:"設定ClientId",PICBED_IMGUR_USERNAME:"設定用戶名",PICBED_IMGUR_ACCESS_TOKEN:"設定accessToken",PICBED_IMGUR_ALBUM:"設定相簿名",PICBED_IMGUR_PROXY:"設定PROXY",PICBED_IMGUR_MESSAGE_CLIENTID:"匿名上傳時填寫",PICBED_IMGUR_MESSAGE_USERNAME:"需要上傳到賬戶時填寫",PICBED_IMGUR_MESSAGE_ACCESS_TOKEN:"需要上傳到賬戶時填寫",PICBED_IMGUR_MESSAGE_ALBUM:"例如:test",PICBED_IMGUR_MESSAGE_PROXY:"例如:http://127.0.0.1:1080",PICBED_UPYUN:"又拍云",PICBED_UPYUN_BUCKET:"設定Bucket",PICBED_UPYUN_ENDPOINT:"設定接入點",PICBED_UPYUN_OPERATOR:"設定操作員",PICBED_UPYUN_PASSWORD:"設定操作員密碼",PICBED_UPYUN_PATH:"設定儲存路徑",PICBED_UPYUN_URL:"設定加速網址",PICBED_UPYUN_OPTIONS:"設定網址後綴",PICBED_UPYUN_ANTI_LEECH_TOKEN:"設定防盜鏈Token",PICBED_UPYUN_EXPIRE_TIME:"設定過期時間(秒)",PICBED_UPYUN_MESSAGE_OPERATOR:"例如:me",PICBED_UPYUN_MESSAGE_PASSWORD:"輸入操作員密碼",PICBED_UPYUN_MESSAGE_URL:"例如:http://xxx.test.upcdn.net",PICBED_UPYUN_MESSAGE_OPTIONS:"例如:!imgslim",PICBED_UPYUN_MESSAGE_PATH:"例如:test/",PICBED_UPYUN_MESSAGE_ENDPOINT:"例如:https://v0.api.upyun.com",PICBED_WEBDAVPLIST:"WebDAV",PICBED_WEBDAVPLIST_HOST:"設定API主機",PICBED_WEBDAVPLIST_SSLENABLED:"需要HTTPS時啟用",PICBED_WEBDAVPLIST_USERNAME:"設定用戶名",PICBED_WEBDAVPLIST_PASSWORD:"設定密碼",PICBED_WEBDAVPLIST_PATH:"設定儲存路徑",PICBED_WEBDAVPLIST_CUSTOMURL:"設定自訂網址",PICBED_WEBDAVPLIST_AUTHTYPE:"設定認證方式",PICBED_WEBDAVPLIST_OPTIONS:"設定網址後綴",PICBED_WEBDAVPLIST_WEBSITE_PATH:"設定網站路徑",PICBED_WEBDAVPLIST_MESSAGE_HOST:"例如:https://example.com/webdav",PICBED_WEBDAVPLIST_MESSAGE_SSLENABLED:"需要HTTPS時啟用",PICBED_WEBDAVPLIST_MESSAGE_USERNAME:"例如:me",PICBED_WEBDAVPLIST_MESSAGE_PASSWORD:"輸入用戶密碼",PICBED_WEBDAVPLIST_MESSAGE_PATH:"例如:test/",PICBED_WEBDAVPLIST_MESSAGE_WEBSITE_PATH:"拼接網址時使用",PICBED_WEBDAVPLIST_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_WEBDAVPLIST_MESSAGE_OPTIONS:"例如:?key=value",PICBED_SFTPPLIST:"內置SFTP",PICBED_SFTPPLIST_HOST:"設定主機",PICBED_SFTPPLIST_PORT:"設定端口",PICBED_SFTPPLIST_USERNAME:"設定用戶名",PICBED_SFTPPLIST_PASSWORD:"設定密碼",PICBED_SFTPPLIST_PRIVATEKEY:"設定私鑰",PICBED_SFTPPLIST_PRIVATEKEY_PASSPHRASE:"設定私鑰密碼",PICBED_SFTPPLIST_UPLOADPATH:"設定上傳路徑",PICBED_SFTPPLIST_CUSTOMURL:"設定自訂網址",PICBED_SFTPPLIST_WEBSITE_PATH:"設定網站路徑",PICBED_SFTPPLIST_FILE_USER:"設定文件用戶:組",PICBED_SFTPPLIST_FILE_MODE:"設定文件權限",PICBED_SFTPPLIST_DIR_MODE:"設定文件夾權限",PICBED_SFTPPLIST_MESSAGE_HOST:"例如:1.1.1.3",PICBED_SFTPPLIST_MESSAGE_PORT:"默認22",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY:"例如:/Users/xxx/.ssh/id_rsa",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY_PASSPHRASE:"輸入私鑰密碼",PICBED_SFTPPLIST_MESSAGE_UPLOADPATH:"例如:test/",PICBED_SFTPPLIST_MESSAGE_CUSTOMURL:"例如:https://test.com",PICBED_SFTPPLIST_MESSAGE_WEBSITE_PATH:"拼接網址時使用",PICBED_SFTPPLIST_MESSAGE_FILE_USER:"例如:www:data",PICBED_SFTPPLIST_MESSAGE_FILE_MODE:"例如:0664",PICBED_SFTPPLIST_MESSAGE_DIR_MODE:"例如:0775",PICBED_PICLIST:"PicList",PICBED_PICLIST_HOST:"設定主機",PICBED_PICLIST_PORT:"設定端口",PICBED_PICLIST_PICBED:"設定圖床",PICBED_PICLIST_CONFIGNAME:"設定配置名",PICBED_PICLIST_KEY:"設定鑒權Key",PICBED_LSKY_PLIST:"蘭空圖床",PICBED_LSKY_VERSION:"設定版本",PICBED_LSKY_MESSAGE_VERSION:"請選擇版本",PICBED_LSKY_HOST:"設定主機",PICBED_LSKY_MESSAGE_HOST:"例如:https://example.com",PICBED_LSKY_TOKEN:"設定Token",PICBED_LSKY_MESSAGE_TOKEN:"請輸入Token",PICBED_LSKY_STRATEGY_ID:"設定策略ID",PICBED_LSKY_MESSAGE_STRATEGY_ID:"例如1",PICBED_LSKY_ALBUM_ID:"設定相冊ID",PICBED_LSKY_MESSAGE_ALBUM_ID:"例如1",PICBED_LSKY_PERMISSION:"設定上傳權限",PICBED_LSKY_MESSAGE_PERMISSION:"請選擇上傳權限",PICBED_AWSS3PLIST:"AWS S3",PICBED_AWSS3PLIST_ACCESSKEYID:"設定AccessKeyId",PICBED_AWSS3PLIST_SECRET_ACCESSKEY:"設定SecretAccessKey",PICBED_AWSS3PLIST_BUCKET:"設定Bucket",PICBED_AWSS3PLIST_REGION:"設定Region",PICBED_AWSS3PLIST_UPLOADPATH:"設定上傳路徑",PICBED_AWSS3PLIST_ENDPOINT:"設定自定義節點",PICBED_AWSS3PLIST_PROXY:"設定代理",PICBED_AWSS3PLIST_URLPREFIX:"設定自定義網址",PICBED_AWSS3PLIST_PATHSTYLEACCESS:"開啟 `pathStyleAccess`",PICBED_AWSS3PLIST_REJECTUNAUTHORIZED:"開啟 `rejectUnauthorized`",PICBED_AWSS3PLIST_ACL:"設定ACL",PICBED_AWSS3PLIST_DISABLEBUCKETPREFIXTOURL:"開啟 `pathStyleAccess` 時,是否要禁用最終生成URL中添加 bucket 前綴",PICBED_AWSS3PLIST_MESSAGE_ACCESSKEYID:"例如:AKIAxxxxxxxxxxxxx",PICBED_AWSS3PLIST_MESSAGE_SECRET_ACCESSKEY:"例如:xxxxxxxxxx",PICBED_AWSS3PLIST_MESSAGE_BUCKET:"例如:test/{fullName}",PICBED_AWSS3PLIST_MESSAGE_REGION:"例如:us-east-1",PICBED_AWSS3PLIST_MESSAGE_UPLOADPATH:"例如:test/",PICBED_AWSS3PLIST_MESSAGE_ENDPOINT:"例如:https://s3.us-east-1.amazonaws.com",PICBED_AWSS3PLIST_MESSAGE_PROXY:"例如:http://127.0.0.1:1080",PICBED_AWSS3PLIST_MESSAGE_URLPREFIX:"例如:https://test.com",PICBED_AWSS3PLIST_MESSAGE_PATHSTYLEACCESS:"需要時啟用",PICBED_AWSS3PLIST_MESSAGE_REJECTUNAUTHORIZED:"需要時啟用",PICBED_AWSS3PLIST_MESSAGE_ACL:"例如:public-read",PICBED_AWSS3PLIST_MESSAGE_DISABLEBUCKETPREFIXTOURL:"需要時啟用",BUILDIN_WATERMARK:"水印設定",BUILDIN_WATERMARK_ISADDWATERMARK:"是否添加水印",BUILDIN_WATERMARK_MESSAGE_ISADDWATERMARK:"需要添加水印時啟用",BUILDIN_WATERMARK_WATERMARKTYPE:"設定水印類型",BUILDIN_WATERMARK_MESSAGE_WATERMARKTYPE:"請選擇水印類型",BUILDIN_WATERMARK_ISFULLSCREENWATERMARK:"是否全屏水印",BUILDIN_WATERMARK_MESSAGE_ISFULLSCREENWATERMARK:"需要全屏水印時啟用",BUILDIN_WATERMARK_WATERMARKDEGREE:"設定水印角度",BUILDIN_WATERMARK_MESSAGE_WATERMARKDEGREE:"請輸入數字",BUILDIN_WATERMARK_WATERMARKTEXT:"設定水印文字",BUILDIN_WATERMARK_MESSAGE_WATERMARKTEXT:"請輸入水印文字",BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH:"設定水印字體",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTPATH:"請輸入水印字體文件路徑",BUILDIN_WATERMARK_WATERMARKFONTRATIO:"設定水印圖片比例",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTRATIO:"請輸入0-1的數字",BUILDIN_WATERMARK_WATERMARKFONTCOLOR:"設定水印字體顏色",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTCOLOR:"請輸入rgb顏色值",BUILDIN_WATERMARK_WATERMARKIMAGEPATH:"設定水印圖片路徑",BUILDIN_WATERMARK_MESSAGE_WATERMARKIMAGEPATH:"請輸入水印圖片路徑",BUILDIN_WATERMARK_WATERMARKPOSITION:"設定水印位置",BUILDIN_WATERMARK_MESSAGE_WATERMARKPOSITION:"請選擇水印位置",BUILDIN_RENAME:"重命名設定",BUILDIN_RENAME_FORMAT:"設定重命名格式",BUILDIN_RENAME_ENABLE:"是否啟用重命名",BUILDIN_COMPRESS:"圖片處理設定",BUILDIN_COMPRESS_QUALITY:"設定圖片質量",BUILDIN_COMPRESS_MESSAGE_QUALITY:"請輸入0-100的整數",BUILDIN_COMPRESS_ISCONVERT:"是否進行格式轉換",BUILDIN_COMPRESS_MESSAGE_ISCONVERT:"需要轉換時啟用",BUILDIN_COMPRESS_CONVERTFORMAT:"設定轉換格式",BUILDIN_COMPRESS_MESSAGE_CONVERTFORMAT:"請選擇轉換格式",BUILDIN_COMPRESS_ISRESIZE:"是否進行圖片縮放",BUILDIN_COMPRESS_MESSAGE_ISRESIZE:"需要縮放時啟用",BUILDIN_COMPRESS_RESIZEWIDTH:"設定縮放寬度",BUILDIN_COMPRESS_MESSAGE_RESIZEWIDTH:"請輸入數字",BUILDIN_COMPRESS_RESIZEHEIGHT:"設定縮放高度",BUILDIN_COMPRESS_MESSAGE_RESIZEHEIGHT:"請輸入數字",BUILDIN_COMPRESS_ISRESIZEBYPERCENT:"是否按百分比進行縮放",BUILDIN_COMPRESS_MESSAGE_ISRESIZEBYPERCENT:"需要按百分比縮放時啟用",BUILDIN_COMPRESS_ISFLIP:"是否垂直翻轉圖片",BUILDIN_COMPRESS_ISFLOP:"是否水平翻轉圖片",BUILDIN_COMPRESS_RESIZEPERCENT:"設定縮放百分比",BUILDIN_COMPRESS_MESSAGE_RESIZEPERCENT:"請輸入数字",BUILDIN_COMPRESS_SKIPRESIZEOFSMALLIMG:"是否跳過小圖縮放",BUILDIN_COMPRESS_ISROTATE:"是否進行圖片旋轉",BUILDIN_COMPRESS_MESSAGE_ISROTATE:"需要旋轉時啟用",BUILDIN_COMPRESS_ROTATEDEGREE:"設定旋轉角度",BUILDIN_COMPRESS_MESSAGE_ROTATEDEGREE:"請輸入數字,可為負數",BUILDIN_COMPRESS_ISREMOVEEXIF:"是否移除EXIF資訊",BUILDIN_COMPRESS_MESSAGE_ISREMOVEEXIF:"需要移除EXIF資訊時啟用",PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS:"插件安裝成功",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED:"插件安裝失敗",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_REASON:"插件安裝失敗,失敗碼為${code},錯誤紀錄為 \n ${data}",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_PATH:"插件安裝失敗,請輸入正確的插件名稱或正確的安裝路徑",PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS:"插件卸載成功",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED:"插件卸載失敗",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_REASON:"插件卸載失敗,失敗碼為${code},錯誤紀錄為 \n ${data}",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID:"插件卸載失敗,請輸入正確的插件名稱",PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS:"插件更新成功",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED:"插件更新失敗",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_REASON:"插件更新失敗,失敗碼為${code},錯誤紀錄為 \n ${data}",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_VALID:"插件更新失敗,請輸入正確的插件名稱"},en:{UPLOAD_FAILED:"Upload failed",CHECK_SETTINGS:"Please check your settings",CHECK_SETTINGS_AND_NETWORK:"Please check your settings and network",UPLOAD_FAILED_REASON:"Error code: ${code}, please open the browser and paste the address to see the reason",SERVER_ERROR:"Server error, please try again later",AUTH_FAILED:"Authentication failed",PICBED_SMMS:"SM.MS",PICBED_SMMS_TOKEN:"Set Token",PICBED_SMMS_MESSAGE_TOKEN:"Please enter the token",PICBED_SMMS_BACKUP_DOMAIN:"Set Backup Upload Domain",PICBED_SMMS_MESSAGE_BACKUP_DOMAIN:"Ex. smms.app",PICBED_LOCAL:"Local",PICBED_LOCAL_PATH:"Set Path",PICBED_LOCAL_MESSAGE_PATH:"Ex. /Users/name/Pictures/",PICBED_LOCAL_CUSTOMURL:"Set Custom URL",PICBED_LOCAL_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_LOCAL_WEBPATH:"Set Web Path",PICBED_LOCAL_MESSAGE_WEBPATH:"Used to generate url path",PICBED_ALIST_PLIST:"AList",PICBED_ALIST_URL:"Set URL",PICBED_ALIST_MESSAGE_URL:"Ex. https://alist.example.com",PICBED_ALIST_TOKEN:"Set Token",PICBED_ALIST_MESSAGE_TOKEN:"Please enter the token(choose one of either username-password or token)",PICBED_ALIST_USERNAME:"Set Username",PICBED_ALIST_MESSAGE_USERNAME:"Please enter the username(choose one of either username-password or token)",PICBED_ALIST_PASSWORD:"Set Password",PICBED_ALIST_MESSAGE_PASSWORD:"Please enter the password",PICBED_ALIST_UPLOAD_PATH:"Set Upload Path",PICBED_ALIST_MESSAGE_UPLOAD_PATH:"Ex. /test/",PICBED_ALIST_WEB_PATH:"Set Web Path",PICBED_ALIST_MESSAGE_WEB_PATH:"Used to generate url path",PICBED_ALIST_CUSTOMURL:"Set Custom URL",PICBED_ALIST_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_ALICLOUD:"Ali Cloud",PICBED_ALICLOUD_ACCESSKEYID:"Set accessKeyId",PICBED_ALICLOUD_ACCESSKEYSECRET:"Set accessKeySecret",PICBED_ALICLOUD_BUCKET:"Set Bucket",PICBED_ALICLOUD_AREA:"Set Area",PICBED_ALICLOUD_PATH:"Set Path",PICBED_ALICLOUD_CUSTOMURL:"Set Custom URL",PICBED_ALICLOUD_OPTIONS:"Set URL Suffix",PICBED_ALICLOUD_MESSAGE_AREA:"Ex. oss-cn-beijing",PICBED_ALICLOUD_MESSAGE_PATH:"Ex. test/",PICBED_ALICLOUD_MESSAGE_OPTIONS:"Ex. ?x-oss-process=xxx",PICBED_ALICLOUD_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_TENCENTCLOUD:"Tencent Cloud",PICBED_TENCENTCLOUD_VERSION:"Choose COS version",PICBED_TENCENTCLOUD_SECRETID:"Set SecretId",PICBED_TENCENTCLOUD_SECRETKEY:"Set SecretKey",PICBED_TENCENTCLOUD_APPID:"Set AppId",PICBED_TENCENTCLOUD_BUCKET:"Set Bucket",PICBED_TENCENTCLOUD_AREA:"Set Area",PICBED_TENCENTCLOUD_ENDPOINT:"Set Endpoint",PICBED_TENCENTCLOUD_PATH:"Set Path",PICBED_TENCENTCLOUD_OPTIONS:"Set URL Suffix",PICBED_TENCENTCLOUD_CUSTOMURL:"Set Custom URL",PICBED_TENCENTCLOUD_MESSAGE_APPID:"Ex. 1234567890",PICBED_TENCENTCLOUD_MESSAGE_AREA:"Ex. ap-beijing",PICBED_TENCENTCLOUD_MESSAGE_PATH:"Ex. test/",PICBED_TENCENTCLOUD_MESSAGE_CUSTOMURL:"Ex. http://test.com",PICBED_TENCENTCLOUD_MESSAGE_OPTIONS:"Ex. ?imageMogr2",PICBED_TENCENTCLOUD_MESSAGE_ENDPOINT:"Ex. cos-internal.accelerate.tencentcos.cn",PICBED_TENCENTCLOUD_SLIM:"Set ImageSlim",PICBED_TENCENTCLOUD_SLIM_TIP:"Image extremely intelligent compression, please refer to the [document description](https://cloud.tencent.com/document/product/436/86438)",PICBED_TENCENTCLOUD_SLIM_CONFIRM:"OPEN",PICBED_TENCENTCLOUD_SLIM_CANCEL:"CLOSE",PICBED_GITHUB:"GitHub",PICBED_GITHUB_TOKEN:"Set Token",PICBED_GITHUB_REPO:"Set Repo Name",PICBED_GITHUB_PATH:"Set Path",PICBED_GITHUB_BRANCH:"Set Branch",PICBED_GITHUB_CUSTOMURL:"Set Custom URL",PICBED_GITHUB_MESSAGE_REPO:"Ex. username/repo",PICBED_GITHUB_MESSAGE_BRANCH:"Ex. main",PICBED_GITHUB_MESSAGE_PATH:"Ex. test/",PICBED_GITHUB_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_QINIU:"Qiniu",PICBED_QINIU_ACCESSKEY:"Set AccessKey",PICBED_QINIU_SECRETKEY:"Set SecretKey",PICBED_QINIU_BUCKET:"Set Bucket",PICBED_QINIU_PATH:"Set Path",PICBED_QINIU_URL:"Set URL",PICBED_QINIU_OPTIONS:"Set URL Suffix",PICBED_QINIU_AREA:"Set Area",PICBED_QINIU_MESSAGE_PATH:"Ex. test/",PICBED_QINIU_MESSAGE_AREA:"Ex. z0",PICBED_QINIU_MESSAGE_OPTIONS:"Ex. ?imageslim",PICBED_QINIU_MESSAGE_URL:"Ex. https://xxx.yyy.glb.clouddn.com",PICBED_TELEGRAPH:"Telegraph",PICBED_IMGUR:"Imgur",PICBED_IMGUR_CLIENTID:"Set ClientId",PICBED_IMGUR_USERNAME:"Set Username",PICBED_IMGUR_ACCESS_TOKEN:"Set Access Token",PICBED_IMGUR_ALBUM:"Set Album Name",PICBED_IMGUR_PROXY:"Set Proxy",PICBED_IMGUR_MESSAGE_CLIENTID:"Fill in when you need to upload as anonymous",PICBED_IMGUR_MESSAGE_USERNAME:"Fill in when you need to upload to the account",PICBED_IMGUR_MESSAGE_ACCESS_TOKEN:"Fill in when you need to upload to the account",PICBED_IMGUR_MESSAGE_ALBUM:"Ex. test",PICBED_IMGUR_MESSAGE_PROXY:"Ex. http://127.0.0.1:1080",PICBED_UPYUN:"Upyun",PICBED_UPYUN_BUCKET:"Set Bucket",PICBED_UPYUN_ENDPOINT:"Set Endpoint",PICBED_UPYUN_OPERATOR:"Set Operator",PICBED_UPYUN_PASSWORD:"Set Operator Password",PICBED_UPYUN_PATH:"Set Path",PICBED_UPYUN_URL:"Set URL",PICBED_UPYUN_OPTIONS:"Set URL Suffix",PICBED_UPYUN_ANTI_LEECH_TOKEN:"Set Anti-Leech Token",PICBED_UPYUN_EXPIRE_TIME:"Set Expire Time(seconds)",PICBED_UPYUN_MESSAGE_OPERATOR:"Ex. me",PICBED_UPYUN_MESSAGE_PASSWORD:"Please type the operator password",PICBED_UPYUN_MESSAGE_URL:"Ex. http://xxx.test.upcdn.net",PICBED_UPYUN_MESSAGE_OPTIONS:"Ex. !imgslim",PICBED_UPYUN_MESSAGE_PATH:"Ex. test/",PICBED_UPYUN_MESSAGE_ENDPOINT:"Ex. https://v0.api.upyun.com",PICBED_WEBDAVPLIST:"WebDAV",PICBED_WEBDAVPLIST_HOST:"Set Host",PICBED_WEBDAVPLIST_SSLENABLED:"Enable HTTPS",PICBED_WEBDAVPLIST_USERNAME:"Set Username",PICBED_WEBDAVPLIST_PASSWORD:"Set Password",PICBED_WEBDAVPLIST_PATH:"Set Path",PICBED_WEBDAVPLIST_WEBSITE_PATH:"Set Website Path",PICBED_WEBDAVPLIST_CUSTOMURL:"Set Custom URL",PICBED_WEBDAVPLIST_AUTHTYPE:"Set Auth Type",PICBED_WEBDAVPLIST_OPTIONS:"Set URL Suffix",PICBED_WEBDAVPLIST_MESSAGE_HOST:"Ex. https://example.com/webdav",PICBED_WEBDAVPLIST_MESSAGE_SSLENABLED:"Enable HTTPS",PICBED_WEBDAVPLIST_MESSAGE_USERNAME:"Ex. me",PICBED_WEBDAVPLIST_MESSAGE_PASSWORD:"Please type the password",PICBED_WEBDAVPLIST_MESSAGE_PATH:"Ex. test/",PICBED_WEBDAVPLIST_MESSAGE_WEBSITE_PATH:"Used to generate the URL of the image",PICBED_WEBDAVPLIST_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_WEBDAVPLIST_MESSAGE_OPTIONS:"Ex. ?key=value",PICBED_SFTPPLIST:"SFTP Buildin",PICBED_SFTPPLIST_HOST:"Set Host",PICBED_SFTPPLIST_PORT:"Set Port",PICBED_SFTPPLIST_USERNAME:"Set Username",PICBED_SFTPPLIST_PASSWORD:"Set Password",PICBED_SFTPPLIST_PRIVATEKEY:"Set Private Key",PICBED_SFTPPLIST_PRIVATEKEY_PASSPHRASE:"Set Private Key Passphrase",PICBED_SFTPPLIST_UPLOADPATH:"Set Upload Path",PICBED_SFTPPLIST_CUSTOMURL:"Set Custom URL",PICBED_SFTPPLIST_WEBSITE_PATH:"Set Website Path",PICBED_SFTPPLIST_FILE_USER:"Set File User:Group",PICBED_SFTPPLIST_FILE_MODE:"Set File Mode",PICBED_SFTPPLIST_DIR_MODE:"Set Directory Mode",PICBED_SFTPPLIST_MESSAGE_HOST:"Ex. 1.1.1.3",PICBED_SFTPPLIST_MESSAGE_PORT:"Default 22",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY:"Ex. /Users/xxx/.ssh/id_rsa",PICBED_SFTPPLIST_MESSAGE_PRIVATEKEY_PASSPHRASE:"Please type the private key passphrase",PICBED_SFTPPLIST_MESSAGE_UPLOADPATH:"Ex. test/",PICBED_SFTPPLIST_MESSAGE_CUSTOMURL:"Ex. https://test.com",PICBED_SFTPPLIST_MESSAGE_WEBSITE_PATH:"Used to generate the URL of the image",PICBED_SFTPPLIST_MESSAGE_FILE_USER:"Ex. www:data",PICBED_SFTPPLIST_MESSAGE_FILE_MODE:"Ex. 0664",PICBED_SFTPPLIST_MESSAGE_DIR_MODE:"Ex. 0775",PICBED_PICLIST:"PicList",PICBED_PICLIST_HOST:"Set Host",PICBED_PICLIST_PORT:"Set Port",PICBED_PICLIST_PICBED:"Set PicBed",PICBED_PICLIST_CONFIGNAME:"Set Config Name",PICBED_PICLIST_KEY:"Set Key",PICBED_LSKY_PLIST:"Lsky",PICBED_LSKY_VERSION:"Set Version",PICBED_LSKY_MESSAGE_VERSION:"Ex. v1",PICBED_LSKY_HOST:"Set Host",PICBED_LSKY_MESSAGE_HOST:"Ex. https://lsky.co",PICBED_LSKY_TOKEN:"Set Token",PICBED_LSKY_MESSAGE_TOKEN:"Ex. xxx",PICBED_LSKY_STRATEGY_ID:"Set Strategy ID",PICBED_LSKY_MESSAGE_STRATEGY_ID:"Ex. 1",PICBED_LSKY_ALBUM_ID:"Set Album ID",PICBED_LSKY_MESSAGE_ALBUM_ID:"Optional, only for V2",PICBED_LSKY_PERMISSION:"Set Permisson",PICBED_LSKY_MESSAGE_PERMISSION:"Ex. public",PICBED_AWSS3PLIST:"AWS S3",PICBED_AWSS3PLIST_ACCESSKEYID:"Set AccessKeyId",PICBED_AWSS3PLIST_SECRET_ACCESSKEY:"Set SecretAccessKey",PICBED_AWSS3PLIST_BUCKET:"Set Bucket",PICBED_AWSS3PLIST_REGION:"Set Region",PICBED_AWSS3PLIST_UPLOADPATH:"Set Upload Path",PICBED_AWSS3PLIST_ENDPOINT:"Set Endpoint",PICBED_AWSS3PLIST_PROXY:"Set Proxy",PICBED_AWSS3PLIST_URLPREFIX:"Set Custom URL",PICBED_AWSS3PLIST_PATHSTYLEACCESS:"Set PathStyleAccess",PICBED_AWSS3PLIST_REJECTUNAUTHORIZED:"Set RejectUnauthorized",PICBED_AWSS3PLIST_ACL:"Set ACL",PICBED_AWSS3PLIST_DISABLEBUCKETPREFIXTOURL:"when `pathStyleAccess` is enabled, whether to disable adding bucket prefix to url",PICBED_AWSS3PLIST_MESSAGE_ACCESSKEYID:"Ex. xxx",PICBED_AWSS3PLIST_MESSAGE_SECRET_ACCESSKEY:"Ex. xxx",PICBED_AWSS3PLIST_MESSAGE_BUCKET:"Ex. test",PICBED_AWSS3PLIST_MESSAGE_REGION:"Ex. us-east-1",PICBED_AWSS3PLIST_MESSAGE_UPLOADPATH:"Ex. test/{fullName}",PICBED_AWSS3PLIST_MESSAGE_ENDPOINT:"Ex. https://s3.us-east-1.amazonaws.com",PICBED_AWSS3PLIST_MESSAGE_PROXY:"Ex. http://127.0.0.1:1080",PICBED_AWSS3PLIST_MESSAGE_URLPREFIX:"Ex. https://test.com",PICBED_AWSS3PLIST_MESSAGE_PATHSTYLEACCESS:"Enable when `pathStyleAccess` is required",PICBED_AWSS3PLIST_MESSAGE_REJECTUNAUTHORIZED:"Enable when rejecting invalid TLS certificate connection is required",PICBED_AWSS3PLIST_MESSAGE_ACL:"Ex. public-read",PICBED_AWSS3PLIST_MESSAGE_DISABLEBUCKETPREFIXTOURL:"Enable when `pathStyleAccess` is enabled",BUILDIN_RENAME:"Rename Settings",BUILDIN_RENAME_FORMAT:"Set rename format",BUILDIN_RENAME_ENABLE:"Enable rename",BUILDIN_WATERMARK:"Watermark Settings",BUILDIN_WATERMARK_ISADDWATERMARK:"Whether to add watermark",BUILDIN_WATERMARK_MESSAGE_ISADDWATERMARK:"Enable when watermark is required",BUILDIN_WATERMARK_WATERMARKTYPE:"Set watermark type",BUILDIN_WATERMARK_MESSAGE_WATERMARKTYPE:"Please select watermark type",BUILDIN_WATERMARK_ISFULLSCREENWATERMARK:"Whether to use full-screen watermark",BUILDIN_WATERMARK_MESSAGE_ISFULLSCREENWATERMARK:"Enable when full-screen watermark is required",BUILDIN_WATERMARK_WATERMARKDEGREE:"Set watermark angle",BUILDIN_WATERMARK_MESSAGE_WATERMARKDEGREE:"Please enter a number",BUILDIN_WATERMARK_WATERMARKTEXT:"Set watermark text",BUILDIN_WATERMARK_MESSAGE_WATERMARKTEXT:"Please enter watermark text",BUILDIN_WATERMARK_WATERMARKTEXTFONTPATH:"Set watermark font",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTPATH:"Please enter the watermark font file path",BUILDIN_WATERMARK_WATERMARKFONTRATIO:"Set the ratio of the watermark to the image",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTRATIO:"Please enter a number between 0-1",BUILDIN_WATERMARK_WATERMARKFONTCOLOR:"Set watermark font color",BUILDIN_WATERMARK_MESSAGE_WATERMARKFONTCOLOR:"Please enter the RGB color value",BUILDIN_WATERMARK_WATERMARKIMAGEPATH:"Set watermark image path",BUILDIN_WATERMARK_MESSAGE_WATERMARKIMAGEPATH:"Please enter the watermark image path",BUILDIN_WATERMARK_WATERMARKPOSITION:"Set watermark position",BUILDIN_WATERMARK_MESSAGE_WATERMARKPOSITION:"Please select watermark position",BUILDIN_COMPRESS:"Processing Settings",BUILDIN_COMPRESS_QUALITY:"Set image quality",BUILDIN_COMPRESS_MESSAGE_QUALITY:"Please enter an integer between 0-100",BUILDIN_COMPRESS_ISCONVERT:"Whether to perform format conversion",BUILDIN_COMPRESS_MESSAGE_ISCONVERT:"Enable when format conversion is required",BUILDIN_COMPRESS_CONVERTFORMAT:"Set conversion format",BUILDIN_COMPRESS_MESSAGE_CONVERTFORMAT:"Please select conversion format",BUILDIN_COMPRESS_ISRESIZE:"Whether to resize the image",BUILDIN_COMPRESS_MESSAGE_ISRESIZE:"Enable when image resizing is required",BUILDIN_COMPRESS_RESIZEWIDTH:"Set resizing width",BUILDIN_COMPRESS_MESSAGE_RESIZEWIDTH:"Please enter a number",BUILDIN_COMPRESS_RESIZEHEIGHT:"Set resizing height",BUILDIN_COMPRESS_MESSAGE_RESIZEHEIGHT:"Please enter a number",BUILDIN_COMPRESS_ISRESIZEBYPERCENT:"Whether to resize the image by percentage",BUILDIN_COMPRESS_MESSAGE_ISRESIZEBYPERCENT:"Enable when resizing by percentage is required",BUILDIN_COMPRESS_ISFLIP:"Whether to flip the image vertically",BUILDIN_COMPRESS_ISFLOP:"Whether to flip the image horizontally",BUILDIN_COMPRESS_RESIZEPERCENT:"Set resizing percentage",BUILDIN_COMPRESS_MESSAGE_RESIZEPERCENT:"Please enter a number",BUILDIN_COMPRESS_SKIPRESIZEOFSMALLIMG:"Whether to skip resizing of small images",BUILDIN_COMPRESS_ISROTATE:"Whether to rotate the image",BUILDIN_COMPRESS_MESSAGE_ISROTATE:"Enable when image rotation is required",BUILDIN_COMPRESS_ROTATEDEGREE:"Set rotation angle",BUILDIN_COMPRESS_MESSAGE_ROTATEDEGREE:"Please enter a number, can be negative",BUILDIN_COMPRESS_ISREMOVEEXIF:"Whether to remove EXIF information",BUILDIN_COMPRESS_MESSAGE_ISREMOVEEXIF:"Enable when removing EXIF information is required",PLUGIN_HANDLER_PLUGIN_INSTALL_SUCCESS:"Plugin installed successfully",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED:"Plugin installation failed",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_REASON:"Plugin installation failed, error code is ${code}, error log is \n ${data}",PLUGIN_HANDLER_PLUGIN_INSTALL_FAILED_PATH:"Plugin installation failed, please enter a valid plugin name or valid installation path",PLUGIN_HANDLER_PLUGIN_UNINSTALL_SUCCESS:"Plugin uninstalled successfully",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED:"Plugin uninstall failed",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_REASON:"Plugin uninstall failed, error code is ${code}, error log is \n ${data}",PLUGIN_HANDLER_PLUGIN_UNINSTALL_FAILED_VALID:"Plugin uninstall failed, please enter a valid plugin name",PLUGIN_HANDLER_PLUGIN_UPDATE_SUCCESS:"Plugin updated successfully",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED:"Plugin update failed",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_REASON:"Plugin update failed, error code is ${code}, error log is \n ${data}",PLUGIN_HANDLER_PLUGIN_UPDATE_FAILED_VALID:"Plugin update failed, please enter a valid plugin name"}};class jr{constructor(e){this.ctx=e,this.objectAdapter=new oe(Vr);let t=this.ctx.getConfig("settings.language")||"zh-CN";Vr[t]||(t="zh-CN"),this.i18n=new Ie({adapter:this.objectAdapter,defaultLanguage:t}),this.loadOutterI18n()}loadOutterI18n(){const e=this.getOutterI18nFolder();t.readdirSync(e,{withFileTypes:!0}).forEach((r=>{if(r.isFile()&&r.name.endsWith(".yml")){const n=C.join(e,r.name),a=t.readFileSync(n,"utf8");try{const e=Ee.load(a);Vr[r.name.replace(/\.yml$/,"")]=e}catch(e){console.error(e)}}}))}getOutterI18nFolder(){const e=C.join(this.ctx.baseDir,"i18n-cli");return l(e)||a(e),e}translate(e,t){return this.i18n.translate(e,t)||e}setLanguage(e){this.i18n.setLanguage(e),this.ctx.saveConfig({"settings.language":e})}addLocale(e,t){const r=this.objectAdapter.getLocale(e);if(!r)return!1;const n=P(r,t);return this.objectAdapter.setLocale(e,n),!0}addLanguage(e,t){return!this.objectAdapter.getLocale(e)&&(this.objectAdapter.setLocale(e,t),Vr[e]=t,!0)}getLanguageList(){return Object.keys(Vr)}}class zr extends e{get pluginLoader(){return this._pluginLoader}constructor(e=""){super(),this.VERSION="1.9.0",this.configPath=e,this.input=[],this.rawInput=[],this.output=[],this.helper={transformer:new ct("transformer"),uploader:new ct("uploader"),beforeTransformPlugins:new ct("beforeTransformPlugins"),beforeUploadPlugins:new ct("beforeUploadPlugins"),afterUploadPlugins:new ct("afterUploadPlugins")},this.initConfigPath(),this.log=new Dt(this),this.cmd=new At(this),this.pluginHandler=new dt(this),this.initConfig(),this.init()}initConfigPath(){if(this.configPath=this.configPath||C.join(T(),".piclist/config.json"),".JSON"!==C.extname(this.configPath).toUpperCase())throw this.configPath="",Error("The configuration file only supports JSON format.");this.baseDir=C.dirname(this.configPath),l(this.configPath)||S(`${this.configPath}`)}initConfig(){this.db=new qr(this),this._config=this.db.read(!0)}init(){try{this.i18n=new jr(this),this.Request=new Rt(this),this._pluginLoader=new Lt(this),pt("picgo"),Kr().register(this),{register(e){e.helper.transformer.register("path",Hr),e.helper.transformer.register("base64",$r)}}.register(this),pt(""),this._pluginLoader.load(),this.lifecycle=new Ot(this)}catch(e){throw this.emit(Ct.UPLOAD_PROGRESS,-1),this.log.error(e),e}}use(e,t){if(t)return this.pluginLoader.registerPlugin(t,e),this.pluginLoader.getPlugin(t);return e(this)}registerCommands(){""!==this.configPath&&(this.cmd.init(),this.cmd.loadCommands())}getConfig(e){return e?u(this._config,e):(this._config=this.db.read(!0),this._config)}saveConfig(e){Me(e)?(this.setConfig(e),this.db.saveConfig(e)):this.log.warn("the format of config is invalid, please provide object")}removeConfig(e,t){e&&t&&(Oe(e)?this.log.warn(`the config.${e} can't be removed`):(this.unsetConfig(e,t),this.db.unset(e,t)))}setConfig(e){Me(e)?Object.keys(e).forEach((t=>{Oe(t)&&(this.log.warn(`the config.${t} can't be modified`),delete e[t]),c(this._config,t,e[t]),ft.emit(gt.CONFIG_CHANGE,{configName:t,value:e[t]})})):this.log.warn("the format of config is invalid, please provide object")}unsetConfig(e,t){e&&t&&(Oe(e)?this.log.warn(`the config.${e} can't be unset`):p(this.getConfig(e),t))}get request(){return this.Request.request.bind(this.Request)}async upload(e){if(""===this.configPath)return this.log.error("No config file found, please check your config file path"),[];if(void 0!==e&&0!==e.length){const{output:t}=await this.lifecycle.start(e);return t}try{const{imgPath:e,shouldKeepAfterUploading:t}=await Yr(this),r=()=>{t||I(e).catch((e=>{this.log.error(e)}))};if("no image"===e)throw new Error("image not found in clipboard");{this.once(Ct.FAILED,r),this.once(Ct.FINISHED,r);const{output:t}=await this.lifecycle.start([e]);return t}}catch(e){throw this.emit(Ct.FAILED,e),e}}}export{At as Commander,Ot as Lifecycle,ct as LifecyclePlugins,Dt as Logger,zr as PicGo,Xe as PicGoUtils,dt as PluginHandler,Lt as PluginLoader,Rt as Request};
|
|
2
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZXNtLmpzIiwic291cmNlcyI6WyIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvcGx1Z2luSGFuZGxlci50cyIsIi4uL3NyYy9wbHVnaW5zL2NvbW1hbmRlci9jb25maWcudHMiLCIuLi9zcmMvdXRpbHMvY29tbW9uLnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL3VwbG9hZC50cyIsIi4uL3NyYy9wbHVnaW5zL2JlZm9yZXRyYW5zZm9ybWVyL2NvbXByZXNzLnRzIiwiLi4vc3JjL3BsdWdpbnMvYmVmb3JldHJhbnNmb3JtZXIvd2F0ZXJtYXJrLnRzIiwiLi4vc3JjL3BsdWdpbnMvYmVmb3JldXBsb2FkL2J1aWxkSW5SZW5hbWUudHMiLCIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvdXRpbHMudHMiLCIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvc2V0dGluZy50cyIsIi4uL3NyYy9wbHVnaW5zL2NvbW1hbmRlci91c2UudHMiLCIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvcHJveHkudHMiLCIuLi9zcmMvdXRpbHMvaW5pdFV0aWxzLnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL2luaXQudHMiLCIuLi9zcmMvcGx1Z2lucy9jb21tYW5kZXIvaTE4bi50cyIsIi4uL3NyYy9saWIvTGlmZWN5Y2xlUGx1Z2lucy50cyIsIi4uL3NyYy9saWIvQ29tbWFuZGVyLnRzIiwiLi4vc3JjL3BsdWdpbnMvY29tbWFuZGVyL2luZGV4LnRzIiwiLi4vc3JjL3V0aWxzL2VudW0udHMiLCIuLi9zcmMvbGliL0xvZ2dlci50cyIsIi4uL3NyYy9saWIvUGx1Z2luSGFuZGxlci50cyIsIi4uL3NyYy9saWIvUGx1Z2luTG9hZGVyLnRzIiwiLi4vc3JjL3V0aWxzL2V2ZW50QnVzLnRzIiwiLi4vc3JjL2xpYi9SZXF1ZXN0LnRzIiwiLi4vc3JjL2NvcmUvTGlmZWN5Y2xlLnRzIiwiLi4vc3JjL3V0aWxzL2NyZWF0ZUNvbnRleHQudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci91dGlscy50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL2FsaXN0LnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvYWxpeXVuLnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvczMvdXRpbHMudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci9zMy91cGxvYWRlci50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL2F3c3MzcGxpc3QudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci9naXRodWIudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci9pbWd1ci50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL2xvY2FsLnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvbHNreS50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3BpY2xpc3QudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci9xaW5pdS50cyIsIi4uL3NyYy91dGlscy9zc2hDbGllbnQudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci9zZnRwLnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvc21tcy50cyIsIi4uL3NyYy9wbHVnaW5zL3VwbG9hZGVyL3RjeXVuLnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvdGVsZWdyYXBoLnRzIiwiLi4vc3JjL3BsdWdpbnMvdXBsb2FkZXIvdXB5dW4udHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci93ZWJkYXYudHMiLCIuLi9zcmMvcGx1Z2lucy91cGxvYWRlci9pbmRleC50cyIsIi4uL3NyYy9wbHVnaW5zL3RyYW5zZm9ybWVyL3BhdGgudHMiLCIuLi9zcmMvcGx1Z2lucy90cmFuc2Zvcm1lci9iYXNlNjQudHMiLCIuLi9zcmMvdXRpbHMvc3RhdGljLnRzIiwiLi4vc3JjL3V0aWxzL2dldENsaXBib2FyZEltYWdlLnRzIiwiLi4vc3JjL3V0aWxzL2RiLnRzIiwiLi4vc3JjL2kxOG4vemgtQ04udHMiLCIuLi9zcmMvaTE4bi9pbmRleC50cyIsIi4uL3NyYy9pMThuL3poLVRXLnRzIiwiLi4vc3JjL2kxOG4vZW4udHMiLCIuLi9zcmMvY29yZS9QaWNHby50cyIsIi4uL3NyYy9wbHVnaW5zL3RyYW5zZm9ybWVyL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElQaWNHbywgSVBsdWdpbiB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuXG50eXBlIGFjdGlvbkZ1bmMgPSAocGx1Z2luczogc3RyaW5nW10sIHByb2dyYW06IGFueSkgPT4gdm9pZFxuXG5jb25zdCBjcmVhdGVDb21tYW5kID0gKFxuICBjbWQ6IGFueSxcbiAgY29tbWFuZDogc3RyaW5nLFxuICBkZXNjcmlwdGlvbjogc3RyaW5nLFxuICBhbGlhczogc3RyaW5nLFxuICBhY3Rpb246IGFjdGlvbkZ1bmMsXG4gIG9wdGlvbnM/OiB7IHByb3h5OiBib29sZWFuOyByZWdpc3RyeTogYm9vbGVhbiB9XG4pOiB2b2lkID0+IHtcbiAgbGV0IHByb2dyYW0gPSBjbWQucHJvZ3JhbS5jb21tYW5kKGNvbW1hbmQpLmRlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKS5hbGlhcyhhbGlhcylcbiAgaWYgKG9wdGlvbnM/LnByb3h5KSB7XG4gICAgcHJvZ3JhbSA9IHByb2dyYW0ub3B0aW9uKCctcCwgLS1wcm94eSA8cHJveHk+JywgJ0FkZCBwcm94eSBmb3IgaW5zdGFsbGluZyBwbHVnaW5zJylcbiAgfVxuICBpZiAob3B0aW9ucz8ucmVnaXN0cnkpIHtcbiAgICBwcm9ncmFtID0gcHJvZ3JhbS5vcHRpb24oJy1yLCAtLXJlZ2lzdHJ5IDxyZWdpc3RyeT4nLCAnQ2hvb3NlIGEgcmVnaXN0cnkgZm9yIGluc3RhbGxpbmcgcGx1Z2lucycpXG4gIH1cbiAgcHJvZ3JhbS5hY3Rpb24oYWN0aW9uKVxufVxuXG5jb25zdCBwbHVnaW5IYW5kbGVyOiBJUGx1Z2luID0ge1xuICBoYW5kbGU6IChjdHg6IElQaWNHbykgPT4ge1xuICAgIGNvbnN0IGNtZCA9IGN0eC5jbWRcbiAgICBjcmVhdGVDb21tYW5kKFxuICAgICAgY21kLFxuICAgICAgJ2luc3RhbGwgPHBsdWdpbnMuLi4+JyxcbiAgICAgICdpbnN0YWxsIHBpY2dvIHBsdWdpbicsXG4gICAgICAnYWRkJyxcbiAgICAgIChwbHVnaW5zOiBzdHJpbmdbXSwgcHJvZ3JhbTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcHJveHksIHJlZ2lzdHJ5IH0gPSBwcm9ncmFtXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7IHByb3h5LCByZWdpc3RyeSB9XG4gICAgICAgIGN0eC5wbHVnaW5IYW5kbGVyLmluc3RhbGwocGx1Z2lucywgb3B0aW9ucykuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgY3R4LmxvZy5lcnJvcihlKVxuICAgICAgICB9KVxuICAgICAgfSxcbiAgICAgIHsgcHJveHk6IHRydWUsIHJlZ2lzdHJ5OiB0cnVlIH1cbiAgICApXG4gICAgY3JlYXRlQ29tbWFuZChjbWQsICd1bmluc3RhbGwgPHBsdWdpbnMuLi4+JywgJ3VuaW5zdGFsbCBwaWNnbyBwbHVnaW4nLCAncm0nLCAocGx1Z2luczogc3RyaW5nW10pID0+IHtcbiAgICAgIGN0eC5wbHVnaW5IYW5kbGVyLnVuaW5zdGFsbChwbHVnaW5zKS5jYXRjaChlID0+IHtcbiAgICAgICAgY3R4LmxvZy5lcnJvcihlKVxuICAgICAgfSlcbiAgICB9KVxuICAgIGNyZWF0ZUNvbW1hbmQoXG4gICAgICBjbWQsXG4gICAgICAndXBkYXRlIDxwbHVnaW5zLi4uPicsXG4gICAgICAndXBkYXRlIHBpY2dvIHBsdWdpbicsXG4gICAgICAndXAnLFxuICAgICAgKHBsdWdpbnM6IHN0cmluZ1tdLCBwcm9ncmFtOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgeyBwcm94eSwgcmVnaXN0cnkgfSA9IHByb2dyYW1cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHsgcHJveHksIHJlZ2lzdHJ5IH1cbiAgICAgICAgY3R4LnBsdWdpbkhhbmRsZXIudXBkYXRlKHBsdWdpbnMsIG9wdGlvbnMpLmNhdGNoKChlOiBFcnJvcikgPT4ge1xuICAgICAgICAgIGN0eC5sb2cuZXJyb3IoZSlcbiAgICAgICAgfSlcbiAgICAgIH0sXG4gICAgICB7IHByb3h5OiB0cnVlLCByZWdpc3RyeTogdHJ1ZSB9XG4gICAgKVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHBsdWdpbkhhbmRsZXJcbiIsImltcG9ydCB7IElQaWNHbywgSVBsdWdpbiB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuXG5jb25zdCBjb25maWc6IElQbHVnaW4gPSB7XG4gIGhhbmRsZTogKGN0eDogSVBpY0dvKSA9PiB7XG4gICAgY29uc3QgY21kID0gY3R4LmNtZFxuICAgIGNtZC5wcm9ncmFtLm9wdGlvbignLWMsIC0tY29uZmlnIDxwYXRoPicsICdzZXQgY29uZmlnIHBhdGgnKVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvbmZpZ1xuIiwiaW1wb3J0IGZzLCB7IHJlYWRGaWxlLCByZWFkSlNPTlN5bmMgfSBmcm9tICdmcy1leHRyYSdcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5pbXBvcnQgeyBpbWFnZVNpemUgfSBmcm9tICdpbWFnZS1zaXplJ1xuaW1wb3J0IHsgVVJMIH0gZnJvbSAndXJsJ1xuaW1wb3J0IFRleHRUb1NWRyBmcm9tICd0ZXh0LXRvLXN2ZydcbmltcG9ydCBzaGFycCBmcm9tICdzaGFycCdcbmltcG9ydCBjcnlwdG8gZnJvbSAnY3J5cHRvJ1xuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSAndXVpZCdcblxuaW1wb3J0IHtcbiAgSUltZ1NpemUsXG4gIElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvLFxuICBJUGx1Z2luTmFtZVR5cGUsXG4gIElMb2dnZXIsXG4gIElQaWNHbyxcbiAgSUJ1aWxkSW5Db21wcmVzc09wdGlvbnMsXG4gIElCdWlsZEluV2F0ZXJNYXJrT3B0aW9uc1xufSBmcm9tICcuLi90eXBlcydcblxuZXhwb3J0IGZ1bmN0aW9uIHJhbmRvbVN0cmluZ0dlbmVyYXRvcihsZW5ndGg6IG51bWJlcik6IHN0cmluZyB7XG4gIGNvbnN0IGNoYXJzID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5J1xuICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aCB9KVxuICAgIC5tYXAoKCkgPT4gY2hhcnMuY2hhckF0KE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGNoYXJzLmxlbmd0aCkpKVxuICAgIC5qb2luKCcnKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVuYW1lRmlsZU5hbWVXaXRoVGltZXN0YW1wKG9sZE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgJHtNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKX0ke3JhbmRvbVN0cmluZ0dlbmVyYXRvcig1KX0ke3BhdGguZXh0bmFtZShvbGROYW1lKX1gXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW5hbWVGaWxlTmFtZVdpdGhSYW5kb21TdHJpbmcob2xkTmFtZTogc3RyaW5nLCBsZW5ndGg6IG51bWJlciA9IDUpOiBzdHJpbmcge1xuICByZXR1cm4gYCR7cmFuZG9tU3RyaW5nR2VuZXJhdG9yKGxlbmd0aCl9JHtwYXRoLmV4dG5hbWUob2xkTmFtZSl9YFxufVxuXG5mdW5jdGlvbiBmb3JtYXRIZWxwZXIobnVtOiBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gbnVtLnRvU3RyaW5nKCkubGVuZ3RoID09PSAxID8gYDAke251bX1gIDogbnVtLnRvU3RyaW5nKClcbn1cblxuZnVuY3Rpb24gZ2V0TWQ1KGlucHV0OiBjcnlwdG8uQmluYXJ5TGlrZSk6IHN0cmluZyB7XG4gIHJldHVybiBjcnlwdG8uY3JlYXRlSGFzaCgnbWQ1JykudXBkYXRlKGlucHV0KS5kaWdlc3QoJ2hleCcpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW5hbWVGaWxlTmFtZVdpdGhDdXN0b21TdHJpbmcoXG4gIG9sZE5hbWU6IHN0cmluZyxcbiAgY3VzdG9tRm9ybWF0OiBzdHJpbmcsXG4gIGFmZml4RmlsZU5hbWU/OiBzdHJpbmcsXG4gIGZpbGVCdWZmZXI/OiBjcnlwdG8uQmluYXJ5TGlrZVxuKTogc3RyaW5nIHtcbiAgY29uc3Qgbm93ID0gbmV3IERhdGUoKVxuICBjb25zdCB5ZWFyID0gbm93LmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKVxuICBjb25zdCBmaWxlYmFzZW5hbWUgPSBwYXRoLmJhc2VuYW1lKG9sZE5hbWUsIHBhdGguZXh0bmFtZShvbGROYW1lKSlcbiAgY29uc3QgY29udmVyc2lvbk1hcDogUmVjb3JkPHN0cmluZywgKCkgPT4gc3RyaW5nPiA9IHtcbiAgICAne1l9JzogKCkgPT4geWVhcixcbiAgICAne3l9JzogKCkgPT4geWVhci5zbGljZSgyKSxcbiAgICAne219JzogKCkgPT4gZm9ybWF0SGVscGVyKG5vdy5nZXRNb250aCgpICsgMSksXG4gICAgJ3tkfSc6ICgpID0+IGZvcm1hdEhlbHBlcihub3cuZ2V0RGF0ZSgpKSxcbiAgICAne2h9JzogKCkgPT4gZm9ybWF0SGVscGVyKG5vdy5nZXRIb3VycygpKSxcbiAgICAne2l9JzogKCkgPT4gZm9ybWF0SGVscGVyKG5vdy5nZXRNaW51dGVzKCkpLFxuICAgICd7c30nOiAoKSA9PiBmb3JtYXRIZWxwZXIobm93LmdldFNlY29uZHMoKSksXG4gICAgJ3ttc30nOiAoKSA9PiBub3cuZ2V0TWlsbGlzZWNvbmRzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgzLCAnMCcpLFxuICAgICd7bWQ1fSc6ICgpID0+IGdldE1kNShmaWxlQnVmZmVyIHx8IGZpbGViYXNlbmFtZSksXG4gICAgJ3ttZDUtMTZ9JzogKCkgPT4gZ2V0TWQ1KGZpbGVCdWZmZXIgfHwgZmlsZWJhc2VuYW1lKS5zbGljZSgwLCAxNiksXG4gICAgJ3tmaWxlbmFtZX0nOiAoKSA9PiAoYWZmaXhGaWxlTmFtZSA/IHBhdGguYmFzZW5hbWUoYWZmaXhGaWxlTmFtZSwgcGF0aC5leHRuYW1lKGFmZml4RmlsZU5hbWUpKSA6IGZpbGViYXNlbmFtZSksXG4gICAgJ3t1dWlkfSc6ICgpID0+IHV1aWR2NCgpLnJlcGxhY2UoLy0vZywgJycpLFxuICAgICd7dGltZXN0YW1wfSc6ICgpID0+IG5vdy5nZXRUaW1lKCkudG9TdHJpbmcoKVxuICB9XG4gIGlmIChcbiAgICBjdXN0b21Gb3JtYXQgPT09IHVuZGVmaW5lZCB8fFxuICAgICghT2JqZWN0LmtleXMoY29udmVyc2lvbk1hcCkuc29tZShpdGVtID0+IGN1c3RvbUZvcm1hdC5pbmNsdWRlcyhpdGVtKSkgJiZcbiAgICAgICFjdXN0b21Gb3JtYXQuaW5jbHVkZXMoJ2xvY2FsRm9sZGVyOicpICYmXG4gICAgICAhY3VzdG9tRm9ybWF0LmluY2x1ZGVzKCdzdHItJykpXG4gICkge1xuICAgIHJldHVybiBvbGROYW1lXG4gIH1cbiAgY29uc3QgZXh0ID0gcGF0aC5leHRuYW1lKG9sZE5hbWUpXG4gIGxldCBuZXdOYW1lID1cbiAgICBPYmplY3Qua2V5cyhjb252ZXJzaW9uTWFwKS5yZWR1Y2UoKGFjYywgY3VyKSA9PiB7XG4gICAgICByZXR1cm4gYWNjLnJlcGxhY2UobmV3IFJlZ0V4cChjdXIsICdnJyksIGNvbnZlcnNpb25NYXBbY3VyXSgpKVxuICAgIH0sIGN1c3RvbUZvcm1hdCkgKyBleHRcbiAgY29uc3Qgc3RyUmVnZXggPSAve3N0ci0oXFxkKyl9L2dpXG4gIG5ld05hbWUgPSBuZXdOYW1lLnJlcGxhY2Uoc3RyUmVnZXgsIChfLCBncm91cDEpID0+IHtcbiAgICBjb25zdCBsZW5ndGggPSBwYXJzZUludChncm91cDEsIDEwKVxuICAgIHJldHVybiByYW5kb21TdHJpbmdHZW5lcmF0b3IobGVuZ3RoKVxuICB9KVxuICBuZXdOYW1lID0gbmV3TmFtZS5yZXBsYWNlKC97KGxvY2FsRm9sZGVyOj8oXFxkKyk/KX0vZ2ksIChfcmVzdWx0LCBrZXksIGNvdW50KSA9PiB7XG4gICAgY291bnQgPSBNYXRoLm1heCgxLCBjb3VudCB8fCAwKVxuICAgIGNvbnN0IHBhdGhzID0gcGF0aC5kaXJuYW1lKG9sZE5hbWUpLnNwbGl0KHBhdGguc2VwKVxuICAgIGtleSA9IHBhdGhzLnNsaWNlKDAgLSBjb3VudCkucmVkdWNlKChhLCBiKSA9PiBgJHthfS8ke2J9YClcbiAgICByZXR1cm4ga2V5LnJlcGxhY2UoLzovZywgJycpXG4gIH0pXG4gIHJldHVybiBuZXdOYW1lXG59XG5cbmV4cG9ydCBjb25zdCBpc1VybCA9ICh1cmw6IHN0cmluZyk6IGJvb2xlYW4gPT4gL15odHRwcz86XFwvXFwvLy50ZXN0KHVybClcblxuZXhwb3J0IGNvbnN0IGlzVXJsRW5jb2RlID0gKHVybDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gIHVybCA9IHVybCB8fCAnJ1xuICB0cnkge1xuICAgIC8vIHRoZSB3aG9sZSB1cmwgZW5jb2RlIG9yIGRlY29kZSBzaG9sZCBub3QgdXNlIGVuY29kZVVSSUNvbXBvbmVudCBvciBkZWNvZGVVUklDb21wb25lbnRcbiAgICByZXR1cm4gdXJsICE9PSBkZWNvZGVVUkkodXJsKVxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cbmV4cG9ydCBjb25zdCBoYW5kbGVVcmxFbmNvZGUgPSAodXJsOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBpZiAoIWlzVXJsRW5jb2RlKHVybCkpIHtcbiAgICB1cmwgPSBlbmNvZGVVUkkodXJsKVxuICB9XG4gIHJldHVybiB1cmxcbn1cblxuZXhwb3J0IGNvbnN0IGdldEltYWdlU2l6ZSA9IChmaWxlOiBCdWZmZXIpOiBJSW1nU2l6ZSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgeyB3aWR0aCA9IDAsIGhlaWdodCA9IDAsIHR5cGUgfSA9IGltYWdlU2l6ZShmaWxlKVxuICAgIGNvbnN0IGV4dG5hbWUgPSB0eXBlID8gYC4ke3R5cGV9YCA6ICcucG5nJ1xuICAgIHJldHVybiB7XG4gICAgICByZWFsOiB0cnVlLFxuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHQsXG4gICAgICBleHRuYW1lXG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gZmFsbGJhY2sgdG8gMjAwICogMjAwXG4gICAgcmV0dXJuIHtcbiAgICAgIHJlYWw6IGZhbHNlLFxuICAgICAgd2lkdGg6IDIwMCxcbiAgICAgIGhlaWdodDogMjAwLFxuICAgICAgZXh0bmFtZTogJy5wbmcnXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjb25zdCBnZXRGU0ZpbGUgPSBhc3luYyAoZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8SVBhdGhUcmFuc2Zvcm1lZEltZ0luZm8+ID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4ge1xuICAgICAgZXh0bmFtZTogcGF0aC5leHRuYW1lKGZpbGVQYXRoKSxcbiAgICAgIGZpbGVOYW1lOiBwYXRoLmJhc2VuYW1lKGZpbGVQYXRoKSxcbiAgICAgIGJ1ZmZlcjogYXdhaXQgcmVhZEZpbGUoZmlsZVBhdGgpLFxuICAgICAgc3VjY2VzczogdHJ1ZVxuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlYXNvbjogYHJlYWQgZmlsZSAke2ZpbGVQYXRofSBlcnJvcmAsXG4gICAgICBzdWNjZXNzOiBmYWxzZVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZ2V0VVJMRmlsZSA9IGFzeW5jICh1cmw6IHN0cmluZywgY3R4OiBJUGljR28pOiBQcm9taXNlPElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvPiA9PiB7XG4gIHVybCA9IGhhbmRsZVVybEVuY29kZSh1cmwpXG4gIGxldCB0aW1lb3V0SWQ6IE5vZGVKUy5UaW1lb3V0XG4gIGNvbnN0IHJlcXVlc3RGbiA9IG5ldyBQcm9taXNlPElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgOyhhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBjdHhcbiAgICAgICAgICAucmVxdWVzdCh7XG4gICAgICAgICAgICBtZXRob2Q6ICdnZXQnLFxuICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgcmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2U6IHRydWUsXG4gICAgICAgICAgICByZXNwb25zZVR5cGU6ICdhcnJheWJ1ZmZlcidcbiAgICAgICAgICB9KVxuICAgICAgICAgIC50aGVuKHJlc3AgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3AuZGF0YSBhcyBCdWZmZXJcbiAgICAgICAgICB9KVxuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKVxuICAgICAgICBjb25zdCB1cmxQYXRoID0gbmV3IFVSTCh1cmwpLnBhdGhuYW1lXG4gICAgICAgIGxldCBleHRuYW1lID0gJydcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB1cmxQYXJhbXMgPSBuZXcgVVJMKHVybCkuc2VhcmNoUGFyYW1zXG4gICAgICAgICAgZXh0bmFtZSA9IHVybFBhcmFtcy5nZXQoJ3d4X2ZtdCcpIHx8IHBhdGguZXh0bmFtZSh1cmxQYXRoKSB8fCAnJ1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGV4dG5hbWUgPSBwYXRoLmV4dG5hbWUodXJsUGF0aCkgfHwgJydcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWV4dG5hbWUuc3RhcnRzV2l0aCgnLicpICYmIGV4dG5hbWUpIHtcbiAgICAgICAgICBleHRuYW1lID0gYC4ke2V4dG5hbWV9YFxuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgIGJ1ZmZlcjogcmVzLFxuICAgICAgICAgIGZpbGVOYW1lOiBwYXRoLmJhc2VuYW1lKHVybFBhdGgpLFxuICAgICAgICAgIGV4dG5hbWUsXG4gICAgICAgICAgc3VjY2VzczogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKVxuICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgICAgICAgcmVhc29uOiBgcmVxdWVzdCAke3VybH0gZXJyb3IsICR7ZXJyb3I/Lm1lc3NhZ2UgPz8gJyd9YFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0pKCkuY2F0Y2gocmVqZWN0KVxuICB9KVxuICBjb25zdCB0aW1lb3V0UHJvbWlzZSA9IG5ldyBQcm9taXNlPElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvPigocmVzb2x2ZSk6IHZvaWQgPT4ge1xuICAgIHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgcmVzb2x2ZSh7XG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICByZWFzb246IGByZXF1ZXN0ICR7dXJsfSB0aW1lb3V0YFxuICAgICAgfSlcbiAgICB9LCAzMDAwMClcbiAgfSlcbiAgcmV0dXJuIFByb21pc2UucmFjZShbcmVxdWVzdEZuLCB0aW1lb3V0UHJvbWlzZV0pXG59XG5cbi8qKlxuICogZGV0ZWN0IHRoZSBpbnB1dCBzdHJpbmcncyB0eXBlXG4gKiBmb3IgZXhhbXBsZVxuICogMS4gQHh4eC9waWNnby1wbHVnaW4teHh4IC0+IHNjb3BlXG4gKiAyLiBwaWNnby1wbHVnaW4teHh4IC0+IG5vcm1hbFxuICogMy4geHh4IC0+IHNpbXBsZVxuICogNC4gbm90IGV4aXN0cyBvciBpcyBhIHBhdGggLT4gdW5rbm93blxuICogQHBhcmFtIG5hbWVcbiAqL1xuZXhwb3J0IGNvbnN0IGdldFBsdWdpbk5hbWVUeXBlID0gKG5hbWU6IHN0cmluZyk6IElQbHVnaW5OYW1lVHlwZSA9PiB7XG4gIGlmICgvXkBbXi9dK1xcL3BpY2dvLXBsdWdpbi0vLnRlc3QobmFtZSkpIHtcbiAgICByZXR1cm4gJ3Njb3BlJ1xuICB9IGVsc2UgaWYgKG5hbWUuc3RhcnRzV2l0aCgncGljZ28tcGx1Z2luLScpKSB7XG4gICAgcmV0dXJuICdub3JtYWwnXG4gIH0gZWxzZSBpZiAoaXNTaW1wbGVOYW1lKG5hbWUpKSB7XG4gICAgcmV0dXJuICdzaW1wbGUnXG4gIH1cbiAgcmV0dXJuICd1bmtub3duJ1xufVxuXG4vKipcbiAqIGRldGVjdCB0aGUgaW5wdXQgc3RyaW5nIGlzIGEgc2ltcGxlIHBsdWdpbiBuYW1lIG9yIG5vdFxuICogZm9yIGV4YW1wbGVcbiAqIDEuIHh4eCAtPiB0cnVlXG4gKiAyLiAvVXNyL3h4L3h4eHgvcGljZ28tcGx1Z2luLXh4eCAtPiBmYWxzZVxuICogQHBhcmFtIG5hbWUgcGx1Z2luTmFtZU9yUGF0aFxuICovXG5leHBvcnQgY29uc3QgaXNTaW1wbGVOYW1lID0gKG5hbWVPclBhdGg6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICBpZiAocGF0aC5pc0Fic29sdXRlKG5hbWVPclBhdGgpKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgY29uc3QgcGx1Z2luUGF0aCA9IHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBuYW1lT3JQYXRoKVxuICBpZiAoZnMuZXhpc3RzU3luYyhwbHVnaW5QYXRoKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGlmIChuYW1lT3JQYXRoLmluY2x1ZGVzKCcvJykgfHwgbmFtZU9yUGF0aC5pbmNsdWRlcygnXFxcXCcpKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuLyoqXG4gKiBzdHJlYW1saW5lIHRoZSBmdWxsIHBsdWdpbiBuYW1lIHRvIGEgc2ltcGxlIG9uZVxuICogZm9yIGV4YW1wbGU6XG4gKiAxLiBwaWNnby1wbHVnaW4teHh4IC0+IHh4eFxuICogMi4gQHh4eC9waWNnby1wbHVnaW4teXl5IC0+IHl5eVxuICogQHBhcmFtIG5hbWUgcGx1Z2luRnVsbE5hbWVcbiAqL1xuZXhwb3J0IGNvbnN0IGhhbmRsZVN0cmVhbWxpbmVQbHVnaW5OYW1lID0gKG5hbWU6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGlmICgvXkBbXi9dK1xcL3BpY2dvLXBsdWdpbi0vLnRlc3QobmFtZSkpIHtcbiAgICByZXR1cm4gbmFtZS5yZXBsYWNlKC9eQFteL10rXFwvcGljZ28tcGx1Z2luLS8sICcnKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBuYW1lLnJlcGxhY2UoL3BpY2dvLXBsdWdpbi0vLCAnJylcbiAgfVxufVxuXG4vKipcbiAqIGNvbXBsZXRlIHBsdWdpbiBuYW1lIHRvIGZ1bGwgbmFtZVxuICogZm9yIGV4YW1wbGU6XG4gKiAxLiB4eHggLT4gcGljZ28tcGx1Z2luLXh4eFxuICogMi4gcGljZ28tcGx1Z2luLXh4eCAtPiBwaWNnby1wbHVnaW4teHh4XG4gKiBAcGFyYW0gbmFtZSBwbHVnaW5TaW1wbGVOYW1lXG4gKiBAcGFyYW0gc2NvcGUgcGx1Z2luU2NvcGVcbiAqL1xuZXhwb3J0IGNvbnN0IGhhbmRsZUNvbXBsZXRlUGx1Z2luTmFtZSA9IChuYW1lOiBzdHJpbmcsIHNjb3BlID0gJycpOiBzdHJpbmcgPT5cbiAgc2NvcGUgPyBgQCR7c2NvcGV9L3BpY2dvLXBsdWdpbi0ke25hbWV9YCA6IGBwaWNnby1wbHVnaW4tJHtuYW1lfWBcblxuLyoqXG4gKiBoYW5kbGUgaW5zdGFsbC91bmluc3RhbGwvdXBkYXRlIHBsdWdpbiBuYW1lIG9yIHBhdGhcbiAqIGZvciBleGFtcGxlXG4gKiAxLiBwaWNnby1wbHVnaW4teHh4IC0+IHBpY2dvLXBsdWdpbi14eHhcbiAqIDIuIEB4eHgvcGljZ28tcGx1Z2luLXh4eCAtPiBAeHh4L3BpY2dvLXBsdWdpbi14eHhcbiAqIDMuIHh4eCAtPiBwaWNnby1wbHVnaW4teHh4XG4gKiA0LiAuL3h4eHgvcGljZ28tcGx1Z2luLXh4eCAtPiAvYWJzb2x1dGVQYXRoLy4uLi94eHh4L3BpY2dvLXBsdWdpbi14eHhcbiAqIDUuIC9hYnNvbHV0ZVBhdGgvLi4uL3BpY2dvLXBsdWdpbi14eHggLT4gL2Fic29sdXRlUGF0aC8uLi4vcGljZ28tcGx1Z2luLXh4eFxuICogQHBhcmFtIG5hbWVPclBhdGggcGx1Z2luTmFtZSBvciBwbHVnaW5QYXRoXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRQcm9jZXNzUGx1Z2luTmFtZSA9IChuYW1lT3JQYXRoOiBzdHJpbmcsIGxvZ2dlcjogSUxvZ2dlciB8IENvbnNvbGUgPSBjb25zb2xlKTogc3RyaW5nID0+IHtcbiAgY29uc3QgcGx1Z2luTmFtZVR5cGUgPSBnZXRQbHVnaW5OYW1lVHlwZShuYW1lT3JQYXRoKVxuICBzd2l0Y2ggKHBsdWdpbk5hbWVUeXBlKSB7XG4gICAgY2FzZSAnbm9ybWFsJzpcbiAgICBjYXNlICdzY29wZSc6XG4gICAgICByZXR1cm4gbmFtZU9yUGF0aFxuICAgIGNhc2UgJ3NpbXBsZSc6XG4gICAgICByZXR1cm4gaGFuZGxlQ29tcGxldGVQbHVnaW5OYW1lKG5hbWVPclBhdGgpXG4gICAgZGVmYXVsdDoge1xuICAgICAgLy8gbm93LCB0aGUgcGx1Z2luTmFtZVR5cGUgaXMgdW5rbm93IGhlcmVcbiAgICAgIC8vIDEuIGNoZWNrIGlmIGlzIGFuIGFic29sdXRlIHBhdGhcbiAgICAgIGxldCBwbHVnaW5QYXRoID0gbmFtZU9yUGF0aFxuICAgICAgaWYgKHBhdGguaXNBYnNvbHV0ZShuYW1lT3JQYXRoKSAmJiBmcy5leGlzdHNTeW5jKG5hbWVPclBhdGgpKSB7XG4gICAgICAgIHJldHVybiBoYW5kbGVVbml4U3R5bGVQYXRoKHBsdWdpblBhdGgpXG4gICAgICB9XG4gICAgICAvLyAyLiBjaGVjayBpZiBpcyBhIHJlbGF0aXZlIHBhdGhcbiAgICAgIHBsdWdpblBhdGggPSBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgbmFtZU9yUGF0aClcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKHBsdWdpblBhdGgpKSB7XG4gICAgICAgIHJldHVybiBoYW5kbGVVbml4U3R5bGVQYXRoKHBsdWdpblBhdGgpXG4gICAgICB9XG4gICAgICAvLyAzLiBpbnZhbGlkIG5hbWVPclBhdGhcbiAgICAgIGxvZ2dlci53YXJuKGBDYW4ndCBmaW5kIHBsdWdpbiAke25hbWVPclBhdGh9YClcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIGdldCB0aGUgbm9ybWFsIHBsdWdpbiBuYW1lXG4gKiBmb3IgZXhhbXBsZTpcbiAqIDEuIHBpY2dvLXBsdWdpbi14eHggLT4gcGljZ28tcGx1Z2luLXh4eFxuICogMi4gQHh4eC9waWNnby1wbHVnaW4teHh4IC0+IEB4eHgvcGljZ28tcGx1Z2luLXh4eFxuICogMy4gLi94eHh4L3BpY2dvLXBsdWdpbi14eHggLT4gcGljZ28tcGx1Z2luLXh4eFxuICogNC4gL2Fic29sdXRlUGF0aC8uLi4vcGljZ28tcGx1Z2luLXh4eCAtPiBwaWNnby1wbHVnaW4teHh4XG4gKiA1LiBhbiBleGNlcHRpb246IFtwYWNrYWdlLmpzb24ncyBuYW1lXSAhPT0gW2ZvbGRlciBuYW1lXVxuICogdGhlbiB1c2UgW3BhY2thZ2UuanNvbidzIG5hbWVdLCB1c3VhbGx5IG1hdGNoIHRoZSBzY29wZSBwYWNrYWdlLlxuICogNi4gaWYgcGx1Z2luIG5hbWUgaGFzIHZlcnNpb246IHBpY2dvLXBsdWdpbi14eHhAeC54LnggdGhlbiByZW1vdmUgdGhlIHZlcnNpb25cbiAqIEBwYXJhbSBuYW1lT3JQYXRoXG4gKi9cbmV4cG9ydCBjb25zdCBnZXROb3JtYWxQbHVnaW5OYW1lID0gKG5hbWVPclBhdGg6IHN0cmluZywgbG9nZ2VyOiBJTG9nZ2VyIHwgQ29uc29sZSA9IGNvbnNvbGUpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBwbHVnaW5OYW1lVHlwZSA9IGdldFBsdWdpbk5hbWVUeXBlKG5hbWVPclBhdGgpXG4gIHN3aXRjaCAocGx1Z2luTmFtZVR5cGUpIHtcbiAgICBjYXNlICdub3JtYWwnOlxuICAgICAgcmV0dXJuIHJlbW92ZVBsdWdpblZlcnNpb24obmFtZU9yUGF0aClcbiAgICBjYXNlICdzY29wZSc6XG4gICAgICByZXR1cm4gcmVtb3ZlUGx1Z2luVmVyc2lvbihuYW1lT3JQYXRoLCB0cnVlKVxuICAgIGNhc2UgJ3NpbXBsZSc6XG4gICAgICByZXR1cm4gcmVtb3ZlUGx1Z2luVmVyc2lvbihoYW5kbGVDb21wbGV0ZVBsdWdpbk5hbWUobmFtZU9yUGF0aCkpXG4gICAgZGVmYXVsdDoge1xuICAgICAgLy8gbm93LCB0aGUgbmFtZU9yUGF0aCBtdXN0IGJlIHBhdGhcbiAgICAgIC8vIHRoZSBuYW1lT3JQYXRoIGhlcmUgd2lsbCBiZSBlbnN1cmVkIHdpdGggdW5peCBzdHlsZVxuICAgICAgLy8gd2UgbmVlZCB0byBmaW5kIHRoZSBwYWNrYWdlLmpzb24ncyBuYW1lIGNhdXNlIG5wbSB1c2luZyB0aGUgbmFtZSBpbiBwYWNrYWdlLmpzb24ncyBuYW1lIGZpbGVkXG4gICAgICBpZiAoIWZzLmV4aXN0c1N5bmMobmFtZU9yUGF0aCkpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oYENhbid0IGZpbmQgcGx1Z2luOiAke25hbWVPclBhdGh9YClcbiAgICAgICAgcmV0dXJuICcnXG4gICAgICB9XG4gICAgICBjb25zdCBwYWNrYWdlSlNPTlBhdGggPSBwYXRoLnBvc2l4LmpvaW4obmFtZU9yUGF0aCwgJ3BhY2thZ2UuanNvbicpXG4gICAgICBpZiAoIWZzLmV4aXN0c1N5bmMocGFja2FnZUpTT05QYXRoKSkge1xuICAgICAgICBsb2dnZXIud2FybihgQ2FuJ3QgZmluZCBwbHVnaW46ICR7bmFtZU9yUGF0aH1gKVxuICAgICAgICByZXR1cm4gJydcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHBrZyA9IHJlYWRKU09OU3luYyhwYWNrYWdlSlNPTlBhdGgpIHx8IHt9XG4gICAgICAgIGlmICghcGtnLm5hbWU/LmluY2x1ZGVzKCdwaWNnby1wbHVnaW4tJykpIHtcbiAgICAgICAgICBsb2dnZXIud2FybihcbiAgICAgICAgICAgIGBUaGUgcGx1Z2luIHBhY2thZ2UuanNvbidzIG5hbWUgZmlsZWQgaXMgJHsocGtnLm5hbWUgYXMgc3RyaW5nKSB8fCAnZW1wdHknfSwgbmVlZCB0byBpbmNsdWRlIHRoZSBwcmVmaXg6IHBpY2dvLXBsdWdpbi1gXG4gICAgICAgICAgKVxuICAgICAgICAgIHJldHVybiAnJ1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwa2cubmFtZVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIGhhbmRsZSB0cmFuc2Zvcm0gdGhlIHBhdGggdG8gdW5peCBzdHlsZVxuICogZm9yIGV4YW1wbGVcbiAqIDEuIEM6XFxcXHh4eFxcXFx4eHggLT4gQzoveHh4L3h4eFxuICogMi4gL3h4eC94eHggLT4gL3h4eC94eHhcbiAqIEBwYXJhbSBwYXRoXG4gKi9cbmV4cG9ydCBjb25zdCBoYW5kbGVVbml4U3R5bGVQYXRoID0gKHBhdGhTdHI6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHBhdGhBcnIgPSBwYXRoU3RyLnNwbGl0KHBhdGguc2VwKVxuICByZXR1cm4gcGF0aEFyci5qb2luKCcvJylcbn1cblxuLyoqXG4gKiByZW1vdmUgcGx1Z2luIHZlcnNpb24gd2hlbiByZWdpc3RlciBwbHVnaW4gbmFtZVxuICogMS4gcGljZ28tcGx1Z2luLXh4eEAxLjAuMCAtPiBwaWNnby1wbHVnaW4teHh4XG4gKiAyLiBAeHh4L3BpY2dvLXBsdWdpbi14eHhAMS4wLjAgLT4gQHh4eC9waWNnby1wbHVnaW4teHh4XG4gKiBAcGFyYW0gbmFtZU9yUGF0aFxuICogQHBhcmFtIHNjb3BlXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVQbHVnaW5WZXJzaW9uID0gKG5hbWVPclBhdGg6IHN0cmluZywgc2NvcGU6IGJvb2xlYW4gPSBmYWxzZSk6IHN0cmluZyA9PiB7XG4gIGlmICghbmFtZU9yUGF0aC5pbmNsdWRlcygnQCcpKSB7XG4gICAgcmV0dXJuIG5hbWVPclBhdGhcbiAgfSBlbHNlIHtcbiAgICBsZXQgcmVnID0gLyguK1xcLyk/KHBpY2dvLXBsdWdpbi1cXHcrKShALispKi9cbiAgICAvLyBpZiBpcyBhIHNjb3BlIHBrZ1xuICAgIGlmIChzY29wZSkge1xuICAgICAgcmVnID0gLyguK1xcLyk/KF5AW14vXStcXC9waWNnby1wbHVnaW4tXFx3KykoQC4rKSovXG4gICAgfVxuICAgIGNvbnN0IG1hdGNoQXJyID0gbmFtZU9yUGF0aC5tYXRjaChyZWcpXG4gICAgaWYgKCFtYXRjaEFycikge1xuICAgICAgY29uc29sZS53YXJuKCdjYW4gbm90IHJlbW92ZSBwbHVnaW4gdmVyc2lvbicpXG4gICAgICByZXR1cm4gbmFtZU9yUGF0aFxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbWF0Y2hBcnJbMl1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiB0aGUgY29uZmlnIGJsYWNrIGl0ZW0gbGlzdCB3aGljaCB3b24ndCBiZSBzZXR0ZWRcbiAqIG9ubHkgY2FuIGJlIGdvdFxuICovXG5leHBvcnQgY29uc3QgY29uZmlnQmxhY2tMaXN0ID0gW11cblxuLyoqXG4gKiBjaGVjayBzb21lIGNvbmZpZyBrZXkgaXMgaW4gYmxhY2tMaXN0XG4gKiBAcGFyYW0ga2V5XG4gKi9cbmV4cG9ydCBjb25zdCBpc0NvbmZpZ0tleUluQmxhY2tMaXN0ID0gKGtleTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gIHJldHVybiBjb25maWdCbGFja0xpc3Quc29tZShibGFja0l0ZW0gPT4ga2V5LnN0YXJ0c1dpdGgoYmxhY2tJdGVtKSlcbn1cblxuLyoqXG4gKiBjaGVjayB0aGUgaW5wdXQgY29uZmlnIGlzIHZhbGlkXG4gKiBjb25maWcgbXVzdCBiZSBvYmplY3Qgc3VjaCBhcyB7IHh4eDogJ3h4eCcgfVxuICogJiYgY2FuJ3QgYmUgYXJyYXlcbiAqIEBwYXJhbSBjb25maWdcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBpc0lucHV0Q29uZmlnVmFsaWQgPSAoY29uZmlnOiBhbnkpOiBib29sZWFuID0+IHtcbiAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGNvbmZpZykgJiYgT2JqZWN0LmtleXMoY29uZmlnKS5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNhZmVQYXJzZTxUPihzdHI6IHN0cmluZyk6IFQgfCBzdHJpbmcge1xuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKHN0cilcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gc3RyXG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGZvcmNlTnVtYmVyID0gKG51bTogc3RyaW5nIHwgbnVtYmVyID0gMCk6IG51bWJlciA9PiB7XG4gIHJldHVybiBpc05hTihOdW1iZXIobnVtKSkgPyAwIDogTnVtYmVyKG51bSlcbn1cblxuZXhwb3J0IGNvbnN0IGlzRGV2ID0gKCk6IGJvb2xlYW4gPT4gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCdcblxuYXN5bmMgZnVuY3Rpb24gdGV4dDJTVkcoXG4gIGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aDogc3RyaW5nLFxuICB0ZXh0Pzogc3RyaW5nLFxuICBjb2xvcj86IHN0cmluZyxcbiAgZm9udEZhbWlseT86IHN0cmluZ1xuKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgdGV4dCA9ICF0ZXh0ID8gJ+a1i+ivlScgOiB0ZXh0XG4gIGZvbnRGYW1pbHkgPSAhZm9udEZhbWlseSA/IGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aCA6IGZvbnRGYW1pbHlcbiAgY29sb3IgPSAhY29sb3IgPyAncmdiYSgyMDQsIDIwNCwgMjA0LCAwLjQ1KScgOiBjb2xvclxuICBjb25zdCB0ZXh0MlNWRyA9IFRleHRUb1NWRy5sb2FkU3luYyhmb250RmFtaWx5KVxuICBjb25zdCBvcHRpb25zOiBUZXh0VG9TVkcuR2VuZXJhdGlvbk9wdGlvbnMgPSB7XG4gICAgYW5jaG9yOiAndG9wJyxcbiAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICBmaWxsOiBjb2xvclxuICAgIH1cbiAgfVxuICBjb25zdCB0ZXh0U1ZHID0gdGV4dDJTVkcuZ2V0U1ZHKHRleHQsIG9wdGlvbnMpXG4gIHJldHVybiBCdWZmZXIuZnJvbSh0ZXh0U1ZHKVxufVxuXG5jb25zdCBkZWZhdWx0V2F0ZXJtYXJrSW1hZ2VQYXRoID0gcGF0aC5qb2luKF9fZGlybmFtZSwgJ2Fzc2V0cycsICdwaWNsaXN0LnBuZycpXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBBZGRXYXRlcm1hcmsoXG4gIGltZzogQnVmZmVyLFxuICB3YXRlcm1hcmtUeXBlOiAndGV4dCcgfCAnaW1hZ2UnLFxuICBkZWZhdWx0V2F0ZXJtYXJrRm9udFBhdGg6IHN0cmluZyxcbiAgaXNGdWxsU2NyZWVuV2F0ZXJtYXJrPzogYm9vbGVhbixcbiAgd2F0ZXJtYXJrRGVncmVlPzogbnVtYmVyLFxuICB0ZXh0Pzogc3RyaW5nLFxuICB3YXRlcm1hcmtGb250UGF0aD86IHN0cmluZyxcbiAgd2F0ZXJtYXJrU2NhbGVSYXRpbz86IG51bWJlcixcbiAgd2F0ZXJtYXJrQ29sb3I/OiBzdHJpbmcsXG4gIHdhdGVybWFya0ltYWdlUGF0aD86IHN0cmluZyxcbiAgcG9zaXRpb24/OiBzaGFycC5HcmF2aXR5XG4pOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICB3YXRlcm1hcmtTY2FsZVJhdGlvID1cbiAgICAhd2F0ZXJtYXJrU2NhbGVSYXRpbyB8fCB3YXRlcm1hcmtTY2FsZVJhdGlvIDwgMCB8fCB3YXRlcm1hcmtTY2FsZVJhdGlvID4gMSA/IDAuMTUgOiB3YXRlcm1hcmtTY2FsZVJhdGlvXG4gIGNvbnN0IGltYWdlID0gc2hhcnAoaW1nLCB7IGFuaW1hdGVkOiB0cnVlIH0pXG4gIGNvbnN0IHsgd2lkdGg6IGltZ1dpZHRoID0gMjAwIH0gPSBhd2FpdCBpbWFnZS5tZXRhZGF0YSgpXG4gIGNvbnN0IHdhdGVybWFyayA9IGF3YWl0IGNyZWF0ZVdhdGVybWFyayhcbiAgICB3YXRlcm1hcmtUeXBlLFxuICAgIGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aCxcbiAgICB0ZXh0LFxuICAgIHdhdGVybWFya0ZvbnRQYXRoLFxuICAgIHdhdGVybWFya1NjYWxlUmF0aW8sXG4gICAgd2F0ZXJtYXJrQ29sb3IsXG4gICAgd2F0ZXJtYXJrSW1hZ2VQYXRoLFxuICAgIGltZ1dpZHRoLFxuICAgIHdhdGVybWFya0RlZ3JlZVxuICApXG4gIHJldHVybiBhd2FpdCBpbWFnZVxuICAgIC5jb21wb3NpdGUoW1xuICAgICAge1xuICAgICAgICBpbnB1dDogd2F0ZXJtYXJrLFxuICAgICAgICBncmF2aXR5OiBwb3NpdGlvbiB8fCAnc291dGhlYXN0JyxcbiAgICAgICAgdGlsZTogaXNGdWxsU2NyZWVuV2F0ZXJtYXJrXG4gICAgICB9XG4gICAgXSlcbiAgICAudG9CdWZmZXIoKVxufVxuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVXYXRlcm1hcmsoXG4gIHdhdGVybWFya1R5cGU6ICd0ZXh0JyB8ICdpbWFnZScsXG4gIGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aDogc3RyaW5nLFxuICB0ZXh0Pzogc3RyaW5nLFxuICB3YXRlcm1hcmtGb250UGF0aD86IHN0cmluZyxcbiAgd2F0ZXJtYXJrU2NhbGVSYXRpbz86IG51bWJlcixcbiAgd2F0ZXJtYXJrQ29sb3I/OiBzdHJpbmcsXG4gIHdhdGVybWFya0ltYWdlUGF0aD86IHN0cmluZyxcbiAgaW1nV2lkdGg6IG51bWJlciA9IDIwMCxcbiAgd2F0ZXJtYXJrRGVncmVlOiBudW1iZXIgPSAwXG4pOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICBsZXQgd2F0ZXJtYXJrOiBhbnlcbiAgaWYgKHdhdGVybWFya1R5cGUgPT09ICdpbWFnZScpIHtcbiAgICB3YXRlcm1hcmtJbWFnZVBhdGggPSB3YXRlcm1hcmtJbWFnZVBhdGggfHwgZGVmYXVsdFdhdGVybWFya0ltYWdlUGF0aFxuICAgIHdhdGVybWFyayA9IGF3YWl0IHNoYXJwKHdhdGVybWFya0ltYWdlUGF0aCkudG9CdWZmZXIoKVxuICB9IGVsc2Uge1xuICAgIHdhdGVybWFyayA9IGF3YWl0IHRleHQyU1ZHKFxuICAgICAgZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoLFxuICAgICAgdGV4dCxcbiAgICAgIHdhdGVybWFya0NvbG9yLFxuICAgICAgd2F0ZXJtYXJrRm9udFBhdGggfHwgZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoXG4gICAgKVxuICB9XG4gIGNvbnN0IHsgd2lkdGg6IHdhdGVybWFya1dpZHRoLCBoZWlnaHQ6IHdhdGVybWFya0hlaWdodCB9ID0gYXdhaXQgZ2V0U2l6ZSh3YXRlcm1hcmspXG4gIGNvbnN0IHdhdGVybWFya1Jlc2l6ZVdpZHRoID0gTWF0aC5mbG9vcihpbWdXaWR0aCAqIGZvcmNlTnVtYmVyKHdhdGVybWFya1NjYWxlUmF0aW8pKVxuICBjb25zdCB3YXRlcm1hcmtSZXNpemVIZWlnaHQgPSBNYXRoLmZsb29yKCh3YXRlcm1hcmtSZXNpemVXaWR0aCAqIHdhdGVybWFya0hlaWdodCkgLyB3YXRlcm1hcmtXaWR0aClcbiAgcmV0dXJuIGF3YWl0IHNoYXJwKHdhdGVybWFyaylcbiAgICAucmVzaXplKHdhdGVybWFya1Jlc2l6ZVdpZHRoLCB3YXRlcm1hcmtSZXNpemVIZWlnaHQsIHtcbiAgICAgIGZpdDogJ2luc2lkZSdcbiAgICB9KVxuICAgIC5yb3RhdGUod2F0ZXJtYXJrRGVncmVlLCB7XG4gICAgICBiYWNrZ3JvdW5kOiB7IHI6IDI1NSwgZzogMjU1LCBiOiAyNTUsIGFscGhhOiAwIH1cbiAgICB9KVxuICAgIC50b0J1ZmZlcigpXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFNpemUoaW1hZ2U6IEJ1ZmZlcik6IFByb21pc2U8eyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9PiB7XG4gIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gYXdhaXQgc2hhcnAoaW1hZ2UpLm1ldGFkYXRhKClcbiAgcmV0dXJuIHsgd2lkdGg6IHdpZHRoIHx8IDIwMCwgaGVpZ2h0OiBoZWlnaHQgfHwgMjAwIH1cbn1cblxuY29uc3QgdmFsaWRQYXJhbSA9ICguLi5wYXJhbXM6IGFueVtdKTogYm9vbGVhbiA9PiB7XG4gIHJldHVybiBwYXJhbXMuZXZlcnkocGFyYW0gPT4ge1xuICAgIGlmIChwYXJhbSA9PT0gdW5kZWZpbmVkIHx8IHBhcmFtID09PSBudWxsKSByZXR1cm4gZmFsc2VcbiAgICBpZiAodHlwZW9mIHBhcmFtID09PSAnc3RyaW5nJykgcmV0dXJuIHBhcmFtICE9PSAnJ1xuICAgIGlmICh0eXBlb2YgcGFyYW0gPT09ICdudW1iZXInKSByZXR1cm4gcGFyYW0gPiAwXG4gICAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ29iamVjdCcpIHJldHVybiBPYmplY3Qua2V5cyhwYXJhbSkubGVuZ3RoID4gMFxuICAgIHJldHVybiB0cnVlXG4gIH0pXG59XG5cbi8qKlxuICog6L2s5o2i5ZCO5Y+v5Lul6L6T5Ye655qE5qC85byP5YiX6KGoXG4gKi9cbmNvbnN0IGF2YWlsYWJsZUNvbnZlcnRGb3JtYXRMaXN0ID0gW1xuICAnYXZpZicsXG4gICdkeicsXG4gICdmaXRzJyxcbiAgJ2dpZicsXG4gICdoZWlmJyxcbiAgJ2lucHV0JyxcbiAgJ2pwZWcnLFxuICAnanBnJyxcbiAgJ2pwMicsXG4gICdqeGwnLFxuICAnbWFnaWNrJyxcbiAgJ29wZW5zbGlkZScsXG4gICdwZGYnLFxuICAncG5nJyxcbiAgJ3BwbScsXG4gICdyYXcnLFxuICAnc3ZnJyxcbiAgJ3RpZmYnLFxuICAndGlmJyxcbiAgJ3YnLFxuICAnd2VicCdcbl1cblxuLyoqXG4gKiDlj6/ku6XlpITnkIbnmoTlm77niYfmoLzlvI/liJfooahcbiAqL1xuY29uc3QgaW1hZ2VGb3JtYXRMaXN0ID0gW1xuICAnanBnJyxcbiAgJ2pwZWcnLFxuICAncG5nJyxcbiAgJ3dlYnAnLFxuICAnYm1wJyxcbiAgJ3RpZmYnLFxuICAndGlmJyxcbiAgJ3N2ZycsXG4gICdpY28nLFxuICAnYXZpZicsXG4gICdoZWlmJyxcbiAgJ2hlaWMnLFxuICAnZ2lmJ1xuXVxuXG5jb25zdCB2YWxpZE91dHB1dEZvcm1hdCA9IChmb3JtYXQ6IHN0cmluZyk6IGJvb2xlYW4gPT4gYXZhaWxhYmxlQ29udmVydEZvcm1hdExpc3QuaW5jbHVkZXMoZm9ybWF0KVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW1hZ2VBZGRXYXRlck1hcmsoXG4gIGltZzogQnVmZmVyLFxuICBvcHRpb25zOiBJQnVpbGRJbldhdGVyTWFya09wdGlvbnMsXG4gIGRlZmF1bHRXYXRlcm1hcmtGb250UGF0aDogc3RyaW5nLFxuICBsb2dnZXI6IElMb2dnZXJcbik6IFByb21pc2U8QnVmZmVyPiB7XG4gIHRyeSB7XG4gICAgbGV0IGltYWdlOiBzaGFycC5TaGFycCA9IHNoYXJwKGltZywgeyBhbmltYXRlZDogdHJ1ZSB9KVxuICAgIGltYWdlID0gc2hhcnAoXG4gICAgICBhd2FpdCBBZGRXYXRlcm1hcmsoXG4gICAgICAgIGltZyxcbiAgICAgICAgb3B0aW9ucy53YXRlcm1hcmtUeXBlIHx8ICd0ZXh0JyxcbiAgICAgICAgZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoLFxuICAgICAgICBvcHRpb25zLmlzRnVsbFNjcmVlbldhdGVybWFyayxcbiAgICAgICAgZm9yY2VOdW1iZXIob3B0aW9ucy53YXRlcm1hcmtEZWdyZWUpLFxuICAgICAgICBvcHRpb25zLndhdGVybWFya1RleHQsXG4gICAgICAgIG9wdGlvbnMud2F0ZXJtYXJrRm9udFBhdGgsXG4gICAgICAgIGZvcmNlTnVtYmVyKG9wdGlvbnMud2F0ZXJtYXJrU2NhbGVSYXRpbyksXG4gICAgICAgIG9wdGlvbnMud2F0ZXJtYXJrQ29sb3IsXG4gICAgICAgIG9wdGlvbnMud2F0ZXJtYXJrSW1hZ2VQYXRoLFxuICAgICAgICBvcHRpb25zLndhdGVybWFya1Bvc2l0aW9uXG4gICAgICApLFxuICAgICAgeyBhbmltYXRlZDogdHJ1ZSB9XG4gICAgKVxuICAgIHJldHVybiBhd2FpdCBpbWFnZS50b0J1ZmZlcigpXG4gIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICBsb2dnZXIuZXJyb3IoYEltYWdlIGFkZCB3YXRlcm1hcmsgZXJyb3I6ICR7ZXJyb3J9YClcbiAgICByZXR1cm4gaW1nXG4gIH1cbn1cblxuZnVuY3Rpb24gZm9ybWF0T3B0aW9ucyhvcHRpb25zOiBJQnVpbGRJbkNvbXByZXNzT3B0aW9ucyk6IElCdWlsZEluQ29tcHJlc3NPcHRpb25zIHtcbiAgY29uc3QgZm9ybWF0Q29udmVydE9iaiA9XG4gICAgdHlwZW9mIG9wdGlvbnMuZm9ybWF0Q29udmVydE9iaiA9PT0gJ3N0cmluZycgPyBzYWZlUGFyc2Uob3B0aW9ucy5mb3JtYXRDb252ZXJ0T2JqKSA6IG9wdGlvbnMuZm9ybWF0Q29udmVydE9ialxuICByZXR1cm4ge1xuICAgIHF1YWxpdHk6IGZvcmNlTnVtYmVyKG9wdGlvbnMucXVhbGl0eSksXG4gICAgaXNDb252ZXJ0OiBvcHRpb25zLmlzQ29udmVydCB8fCBmYWxzZSxcbiAgICBjb252ZXJ0Rm9ybWF0OiBvcHRpb25zLmNvbnZlcnRGb3JtYXQgfHwgJ2pwZycsXG4gICAgaXNSZVNpemU6IG9wdGlvbnMuaXNSZVNpemUgfHwgZmFsc2UsXG4gICAgcmVTaXplSGVpZ2h0OiBmb3JjZU51bWJlcihvcHRpb25zLnJlU2l6ZUhlaWdodCksXG4gICAgcmVTaXplV2lkdGg6IGZvcmNlTnVtYmVyKG9wdGlvbnMucmVTaXplV2lkdGgpLFxuICAgIHNraXBSZVNpemVPZlNtYWxsSW1nOiBvcHRpb25zLnNraXBSZVNpemVPZlNtYWxsSW1nIHx8IGZhbHNlLFxuICAgIGlzUmVTaXplQnlQZXJjZW50OiBvcHRpb25zLmlzUmVTaXplQnlQZXJjZW50IHx8IGZhbHNlLFxuICAgIHJlU2l6ZVBlcmNlbnQ6IGZvcmNlTnVtYmVyKG9wdGlvbnMucmVTaXplUGVyY2VudCksXG4gICAgaXNSb3RhdGU6IG9wdGlvbnMuaXNSb3RhdGUgfHwgZmFsc2UsXG4gICAgaXNGbGlwOiBvcHRpb25zLmlzRmxpcCB8fCBmYWxzZSxcbiAgICBpc0Zsb3A6IG9wdGlvbnMuaXNGbG9wIHx8IGZhbHNlLFxuICAgIHJvdGF0ZURlZ3JlZTogZm9yY2VOdW1iZXIob3B0aW9ucy5yb3RhdGVEZWdyZWUpLFxuICAgIHBpY0JlZDogb3B0aW9ucy5waWNCZWQgfHwgJ3NtbXMnLFxuICAgIGZvcm1hdENvbnZlcnRPYmo6IGZvcm1hdENvbnZlcnRPYmogfHwge31cbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW1hZ2VDb21wcmVzcyhcbiAgaW1nOiBCdWZmZXIsXG4gIG9wdGlvbnM6IElCdWlsZEluQ29tcHJlc3NPcHRpb25zLFxuICByYXdGb3JtYXQ6IHN0cmluZyxcbiAgbG9nZ2VyOiBJTG9nZ2VyXG4pOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICBvcHRpb25zID0gZm9ybWF0T3B0aW9ucyhvcHRpb25zKVxuICB0cnkge1xuICAgIHJhd0Zvcm1hdCA9IG5vcm1hbGl6ZUltYWdlRXh0KHJhd0Zvcm1hdClcbiAgICBpZiAoIWltYWdlRm9ybWF0TGlzdC5pbmNsdWRlcyhyYXdGb3JtYXQpIHx8IHJhd0Zvcm1hdCA9PT0gJ2dpZicpIHJldHVybiBpbWdcbiAgICBsZXQgaW1hZ2U6IHNoYXJwLlNoYXJwID0gc2hhcnAoaW1nLCB7IGFuaW1hdGVkOiB0cnVlIH0pXG4gICAgbGV0IHF1YWxpdHkgPSAxMDBcbiAgICBpZiAodmFsaWRQYXJhbShvcHRpb25zLnF1YWxpdHkpICYmIG9wdGlvbnMucXVhbGl0eSEgPCAxMDApIHtcbiAgICAgIHF1YWxpdHkgPSBvcHRpb25zLnF1YWxpdHkhXG4gICAgfVxuICAgIGlmIChvcHRpb25zLmlzUmVTaXplQnlQZXJjZW50KSB7XG4gICAgICBpZiAodmFsaWRQYXJhbShvcHRpb25zLnJlU2l6ZVBlcmNlbnQpKSB7XG4gICAgICAgIGNvbnN0IGltYWdlV2lkdGggPSBhd2FpdCBpbWFnZS5tZXRhZGF0YSgpLnRoZW4obWV0YWRhdGEgPT4gbWV0YWRhdGEud2lkdGgpXG4gICAgICAgIGNvbnN0IGltYWdlSGVpZ2h0ID0gYXdhaXQgaW1hZ2UubWV0YWRhdGEoKS50aGVuKG1ldGFkYXRhID0+IG1ldGFkYXRhLmhlaWdodClcbiAgICAgICAgaWYgKGltYWdlV2lkdGggJiYgaW1hZ2VIZWlnaHQpIHtcbiAgICAgICAgICBpbWFnZSA9IGltYWdlLnJlc2l6ZShcbiAgICAgICAgICAgIE1hdGgucm91bmQoKGltYWdlV2lkdGggKiBvcHRpb25zLnJlU2l6ZVBlcmNlbnQhKSAvIDEwMCksXG4gICAgICAgICAgICBNYXRoLnJvdW5kKChpbWFnZUhlaWdodCAqIG9wdGlvbnMucmVTaXplUGVyY2VudCEpIC8gMTAwKSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZml0OiAnaW5zaWRlJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5pc1JlU2l6ZSkge1xuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2Ygb3B0aW9ucy5yZVNpemVIZWlnaHQgPT09ICdudW1iZXInICYmXG4gICAgICAgIG9wdGlvbnMucmVTaXplSGVpZ2h0ID4gMCAmJlxuICAgICAgICB0eXBlb2Ygb3B0aW9ucy5yZVNpemVXaWR0aCA9PT0gJ251bWJlcicgJiZcbiAgICAgICAgb3B0aW9ucy5yZVNpemVXaWR0aCA+IDBcbiAgICAgICkge1xuICAgICAgICBpbWFnZSA9IGltYWdlLnJlc2l6ZShvcHRpb25zLnJlU2l6ZVdpZHRoLCBvcHRpb25zLnJlU2l6ZUhlaWdodCwge1xuICAgICAgICAgIGZpdDogJ2ZpbGwnXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICB0eXBlb2Ygb3B0aW9ucy5yZVNpemVIZWlnaHQgPT09ICdudW1iZXInICYmXG4gICAgICAgIG9wdGlvbnMucmVTaXplSGVpZ2h0ID4gMCAmJlxuICAgICAgICAodHlwZW9mIG9wdGlvbnMucmVTaXplV2lkdGggIT09ICdudW1iZXInIHx8IG9wdGlvbnMucmVTaXplV2lkdGggPT09IDApXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgaW1hZ2VXaWR0aCA9IGF3YWl0IGltYWdlLm1ldGFkYXRhKCkudGhlbihtZXRhZGF0YSA9PiBtZXRhZGF0YS53aWR0aClcbiAgICAgICAgY29uc3QgaW1hZ2VIZWlnaHQgPSBhd2FpdCBpbWFnZS5tZXRhZGF0YSgpLnRoZW4obWV0YWRhdGEgPT4gbWV0YWRhdGEuaGVpZ2h0KVxuICAgICAgICBpZiAoaW1hZ2VXaWR0aCAmJiBpbWFnZUhlaWdodCkge1xuICAgICAgICAgIGlmICghb3B0aW9ucy5za2lwUmVTaXplT2ZTbWFsbEltZyB8fCAob3B0aW9ucy5za2lwUmVTaXplT2ZTbWFsbEltZyAmJiBvcHRpb25zLnJlU2l6ZUhlaWdodCA8IGltYWdlSGVpZ2h0KSkge1xuICAgICAgICAgICAgY29uc3Qgc2NhbGVSYXRpbyA9IG9wdGlvbnMucmVTaXplSGVpZ2h0IC8gaW1hZ2VIZWlnaHRcbiAgICAgICAgICAgIGltYWdlID0gaW1hZ2UucmVzaXplKE1hdGgucm91bmQoaW1hZ2VXaWR0aCAqIHNjYWxlUmF0aW8pLCBvcHRpb25zLnJlU2l6ZUhlaWdodCwge1xuICAgICAgICAgICAgICBmaXQ6ICdpbnNpZGUnXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdHlwZW9mIG9wdGlvbnMucmVTaXplV2lkdGggPT09ICdudW1iZXInICYmXG4gICAgICAgIG9wdGlvbnMucmVTaXplV2lkdGggPiAwICYmXG4gICAgICAgICh0eXBlb2Ygb3B0aW9ucy5yZVNpemVIZWlnaHQgIT09ICdudW1iZXInIHx8IG9wdGlvbnMucmVTaXplSGVpZ2h0ID09PSAwKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGltYWdlV2lkdGggPSBhd2FpdCBpbWFnZS5tZXRhZGF0YSgpLnRoZW4obWV0YWRhdGEgPT4gbWV0YWRhdGEud2lkdGgpXG4gICAgICAgIGNvbnN0IGltYWdlSGVpZ2h0ID0gYXdhaXQgaW1hZ2UubWV0YWRhdGEoKS50aGVuKG1ldGFkYXRhID0+IG1ldGFkYXRhLmhlaWdodClcbiAgICAgICAgaWYgKGltYWdlV2lkdGggJiYgaW1hZ2VIZWlnaHQpIHtcbiAgICAgICAgICBpZiAoIW9wdGlvbnMuc2tpcFJlU2l6ZU9mU21hbGxJbWcgfHwgKG9wdGlvbnMuc2tpcFJlU2l6ZU9mU21hbGxJbWcgJiYgb3B0aW9ucy5yZVNpemVXaWR0aCA8IGltYWdlV2lkdGgpKSB7XG4gICAgICAgICAgICBjb25zdCBzY2FsZVJhdGlvID0gb3B0aW9ucy5yZVNpemVXaWR0aCAvIGltYWdlV2lkdGhcbiAgICAgICAgICAgIGltYWdlID0gaW1hZ2UucmVzaXplKG9wdGlvbnMucmVTaXplV2lkdGgsIE1hdGgucm91bmQoaW1hZ2VIZWlnaHQgKiBzY2FsZVJhdGlvKSwge1xuICAgICAgICAgICAgICBmaXQ6ICdpbnNpZGUnXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAob3B0aW9ucy5pc1JvdGF0ZSAmJiBvcHRpb25zLnJvdGF0ZURlZ3JlZSkge1xuICAgICAgaW1hZ2UgPSBpbWFnZS5yb3RhdGUob3B0aW9ucy5yb3RhdGVEZWdyZWUsIHtcbiAgICAgICAgYmFja2dyb3VuZDogeyByOiAyNTUsIGc6IDI1NSwgYjogMjU1LCBhbHBoYTogMCB9XG4gICAgICB9KVxuICAgIH1cbiAgICBpZiAob3B0aW9ucy5pc0ZsaXApIHtcbiAgICAgIGltYWdlID0gaW1hZ2UuZmxpcCgpXG4gICAgfVxuICAgIGlmIChvcHRpb25zLmlzRmxvcCkge1xuICAgICAgaW1hZ2UgPSBpbWFnZS5mbG9wKClcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuaXNDb252ZXJ0KSB7XG4gICAgICBjb25zdCBuZXdGb3JtYXQgPSBnZXRDb252ZXJ0ZWRGb3JtYXQob3B0aW9ucywgcmF3Rm9ybWF0KSBhcyBhbnlcbiAgICAgIGlmIChuZXdGb3JtYXQgIT09IHJhd0Zvcm1hdCkge1xuICAgICAgICBpbWFnZSA9IGltYWdlLnRvRm9ybWF0KG5ld0Zvcm1hdCwge1xuICAgICAgICAgIHF1YWxpdHksXG4gICAgICAgICAgbW96anBlZzogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocmF3Rm9ybWF0ICYmIHZhbGlkT3V0cHV0Rm9ybWF0KHJhd0Zvcm1hdCkpIHtcbiAgICAgICAgaW1hZ2UgPSBpbWFnZS50b0Zvcm1hdChyYXdGb3JtYXQgYXMgYW55LCB7XG4gICAgICAgICAgcXVhbGl0eSxcbiAgICAgICAgICBtb3pqcGVnOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbWFnZSA9IGltYWdlLnRvRm9ybWF0KCdqcGcnLCB7XG4gICAgICAgICAgcXVhbGl0eSxcbiAgICAgICAgICBtb3pqcGVnOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhd2FpdCBpbWFnZS50b0J1ZmZlcigpXG4gIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICBsb2dnZXIuZXJyb3IoYEltYWdlIHByb2Nlc3MgZXJyb3I6ICR7ZXJyb3J9YClcbiAgICByZXR1cm4gaW1nXG4gIH1cbn1cblxuY29uc3Qgbm9ybWFsaXplSW1hZ2VFeHQgPSAoZXh0OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICByZXR1cm4gZXh0LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgnLicsICcnKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29udmVydGVkRm9ybWF0KG9wdGlvbnM6IElCdWlsZEluQ29tcHJlc3NPcHRpb25zIHwgdW5kZWZpbmVkLCByYXdGb3JtYXQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIG9wdGlvbnMgPSBmb3JtYXRPcHRpb25zKG9wdGlvbnMgfHwge30pXG4gIHJhd0Zvcm1hdCA9IG5vcm1hbGl6ZUltYWdlRXh0KHJhd0Zvcm1hdClcbiAgaWYgKHJhd0Zvcm1hdCA9PT0gJ2dpZicpIHJldHVybiAnZ2lmJ1xuICBsZXQgbmV3Rm9ybWF0ID0gb3B0aW9ucz8uY29udmVydEZvcm1hdCB8fCAnanBnJ1xuICBpZiAob3B0aW9ucz8uZm9ybWF0Q29udmVydE9iaiAmJiBPYmplY3Qua2V5cyhvcHRpb25zLmZvcm1hdENvbnZlcnRPYmopLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBmb3JtYXRDb252ZXJ0T2JqID0gb3B0aW9ucy5mb3JtYXRDb252ZXJ0T2JqXG4gICAgY29uc3QgZm9ybWF0Q29udmVydE9iaktleXMgPSBPYmplY3Qua2V5cyhmb3JtYXRDb252ZXJ0T2JqKVxuICAgIGlmIChmb3JtYXRDb252ZXJ0T2JqS2V5cy5pbmNsdWRlcyhyYXdGb3JtYXQpKSB7XG4gICAgICBuZXdGb3JtYXQgPSBmb3JtYXRDb252ZXJ0T2JqW3Jhd0Zvcm1hdF1cbiAgICAgIGlmICghdmFsaWRPdXRwdXRGb3JtYXQobmV3Rm9ybWF0KSkge1xuICAgICAgICBuZXdGb3JtYXQgPSAnanBnJ1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAob3B0aW9ucz8ucGljQmVkID09PSAnaW1ndXInICYmIG5ld0Zvcm1hdCA9PT0gJ3dlYnAnKSB7XG4gICAgbmV3Rm9ybWF0ID0gJ2pwZydcbiAgfVxuICByZXR1cm4gbmV3Rm9ybWF0XG59XG5cbmV4cG9ydCBjb25zdCBpc05lZWRBZGRXYXRlcm1hcmsgPSAoXG4gIHdhdGVybWFya09wdGlvbnM6IElCdWlsZEluV2F0ZXJNYXJrT3B0aW9ucyB8IHVuZGVmaW5lZCxcbiAgZmlsZUV4dDogc3RyaW5nXG4pOiBib29sZWFuID0+IHtcbiAgZmlsZUV4dCA9IG5vcm1hbGl6ZUltYWdlRXh0KGZpbGVFeHQpXG4gIHJldHVybiAoXG4gICAgISF3YXRlcm1hcmtPcHRpb25zICYmICEhd2F0ZXJtYXJrT3B0aW9ucy5pc0FkZFdhdGVybWFyayAmJiBpbWFnZUZvcm1hdExpc3QuaW5jbHVkZXMoZmlsZUV4dCkgJiYgZmlsZUV4dCAhPT0gJ3N2ZydcbiAgKVxufVxuXG5leHBvcnQgY29uc3QgaXNOZWVkQ29tcHJlc3MgPSAoY29tcHJlc3NPcHRpb25zOiBJQnVpbGRJbkNvbXByZXNzT3B0aW9ucyB8IHVuZGVmaW5lZCwgZmlsZUV4dDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gIGlmICghaW1hZ2VGb3JtYXRMaXN0LmluY2x1ZGVzKG5vcm1hbGl6ZUltYWdlRXh0KGZpbGVFeHQpKSB8fCAhY29tcHJlc3NPcHRpb25zKSByZXR1cm4gZmFsc2VcblxuICBjb25zdCB7XG4gICAgcXVhbGl0eSxcbiAgICBpc1JlU2l6ZUJ5UGVyY2VudCxcbiAgICByZVNpemVQZXJjZW50LFxuICAgIGlzUmVTaXplLFxuICAgIHJlU2l6ZUhlaWdodCxcbiAgICByZVNpemVXaWR0aCxcbiAgICBpc1JvdGF0ZSxcbiAgICByb3RhdGVEZWdyZWUsXG4gICAgaXNDb252ZXJ0LFxuICAgIGNvbnZlcnRGb3JtYXQsXG4gICAgaXNGbGlwLFxuICAgIGlzRmxvcFxuICB9ID0gZm9ybWF0T3B0aW9ucyhjb21wcmVzc09wdGlvbnMpXG5cbiAgaWYgKHZhbGlkUGFyYW0ocXVhbGl0eSkgJiYgcXVhbGl0eSEgPCAxMDApIHJldHVybiB0cnVlXG4gIGlmIChpc1JlU2l6ZUJ5UGVyY2VudCAmJiB2YWxpZFBhcmFtKHJlU2l6ZVBlcmNlbnQpKSByZXR1cm4gdHJ1ZVxuICBpZiAoXG4gICAgaXNSZVNpemUgJiZcbiAgICAoKHR5cGVvZiByZVNpemVIZWlnaHQgPT09ICdudW1iZXInICYmIHJlU2l6ZUhlaWdodCA+IDApIHx8ICh0eXBlb2YgcmVTaXplV2lkdGggPT09ICdudW1iZXInICYmIHJlU2l6ZVdpZHRoID4gMCkpXG4gICkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgaWYgKGlzUm90YXRlICYmIHJvdGF0ZURlZ3JlZSkgcmV0dXJuIHRydWVcbiAgaWYgKGlzRmxpcCB8fCBpc0Zsb3ApIHJldHVybiB0cnVlXG4gIGlmIChpc0NvbnZlcnQpIHtcbiAgICBjb25zdCBuZXdGb3JtYXQgPSBjb252ZXJ0Rm9ybWF0IHx8ICdqcGcnXG4gICAgcmV0dXJuIGZpbGVFeHQgIT09IG5ld0Zvcm1hdFxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5leHBvcnQgY29uc3QgcmVtb3ZlRXhpZiA9IGFzeW5jIChpbWc6IEJ1ZmZlciwgZmlsZUV4dDogc3RyaW5nKTogUHJvbWlzZTxCdWZmZXI+ID0+IHtcbiAgZmlsZUV4dCA9IG5vcm1hbGl6ZUltYWdlRXh0KGZpbGVFeHQpXG4gIGlmICghaW1hZ2VGb3JtYXRMaXN0LmluY2x1ZGVzKGZpbGVFeHQpIHx8IGZpbGVFeHQgPT09ICdzdmcnKSByZXR1cm4gaW1nXG4gIHJldHVybiBhd2FpdCBzaGFycChpbWcsIHtcbiAgICBhbmltYXRlZDogdHJ1ZVxuICB9KS50b0J1ZmZlcigpXG59XG4iLCJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xuaW1wb3J0IHsgaXNVcmwgfSBmcm9tICcuLi8uLi91dGlscy9jb21tb24nXG5pbXBvcnQgeyBJUGljR28sIElQbHVnaW4gfSBmcm9tICcuLi8uLi90eXBlcydcblxuY29uc3QgdXBsb2FkOiBJUGx1Z2luID0ge1xuICBoYW5kbGU6IChjdHg6IElQaWNHbykgPT4ge1xuICAgIGNvbnN0IGNtZCA9IGN0eC5jbWRcbiAgICBjbWQucHJvZ3JhbVxuICAgICAgLmNvbW1hbmQoJ3VwbG9hZCcpXG4gICAgICAuZGVzY3JpcHRpb24oJ3VwbG9hZCwgZ28gZ28gZ28nKVxuICAgICAgLmFyZ3VtZW50cygnW2lucHV0Li4uXScpXG4gICAgICAuYWxpYXMoJ3UnKVxuICAgICAgLmFjdGlvbigoaW5wdXQ6IHN0cmluZ1tdKSA9PiB7XG4gICAgICAgIDsoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlucHV0TGlzdCA9IGlucHV0XG4gICAgICAgICAgICAubWFwKChpdGVtOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGlzVXJsKGl0ZW0pID8gaXRlbSA6IHBhdGgucmVzb2x2ZShpdGVtKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5maWx0ZXIoKGl0ZW06IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBleGlzdCA9IGZzLmV4aXN0c1N5bmMoaXRlbSkgfHwgaXNVcmwoaXRlbSlcbiAgICAgICAgICAgICAgaWYgKCFleGlzdCkge1xuICAgICAgICAgICAgICAgIGN0eC5sb2cud2FybihgJHtpdGVtfSBkb2VzIG5vdCBleGlzdC5gKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBleGlzdFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICBhd2FpdCBjdHgudXBsb2FkKGlucHV0TGlzdClcbiAgICAgICAgfSkoKS5jYXRjaChlID0+IHtcbiAgICAgICAgICBjdHgubG9nLmVycm9yKGUpXG4gICAgICAgIH0pXG4gICAgICB9KVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHVwbG9hZFxuIiwiaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJQnVpbGRJbkNvbXByZXNzT3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xuXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJQnVpbGRJbkNvbXByZXNzT3B0aW9ucz4oJ2J1aWxkSW4uY29tcHJlc3MnKSB8fCB7fVxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAncXVhbGl0eScsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfUVVBTElUWScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19RVUFMSVRZJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnF1YWxpdHkgfHwgMTAwXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnaXNDb252ZXJ0JyxcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTQ09OVkVSVCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19JU0NPTlZFUlQnKVxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuaXNDb252ZXJ0IHx8IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnY29udmVydEZvcm1hdCcsXG4gICAgICB0eXBlOiAnbGlzdCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19DT05WRVJURk9STUFUJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0NPTlZFUlRGT1JNQVQnKVxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgJ2F2aWYnLFxuICAgICAgICAnZHonLFxuICAgICAgICAnZml0cycsXG4gICAgICAgICdnaWYnLFxuICAgICAgICAnaGVpZicsXG4gICAgICAgICdpbnB1dCcsXG4gICAgICAgICdqcGVnJyxcbiAgICAgICAgJ2pwZycsXG4gICAgICAgICdqcDInLFxuICAgICAgICAnanhsJyxcbiAgICAgICAgJ21hZ2ljaycsXG4gICAgICAgICdvcGVuc2xpZGUnLFxuICAgICAgICAncGRmJyxcbiAgICAgICAgJ3BuZycsXG4gICAgICAgICdwcG0nLFxuICAgICAgICAncmF3JyxcbiAgICAgICAgJ3N2ZycsXG4gICAgICAgICd0aWZmJyxcbiAgICAgICAgJ3RpZicsXG4gICAgICAgICd2JyxcbiAgICAgICAgJ3dlYnAnXG4gICAgICBdLFxuICAgICAgZGVmYXVsdDogJ2pwZydcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdpc1JlU2l6ZScsXG4gICAgICB0eXBlOiAnY29uZmlybScsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19JU1JFU0laRScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19JU1JFU0laRScpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5pc1JlU2l6ZSB8fCBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3JlU2l6ZVdpZHRoJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19SRVNJWkVXSURUSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19SRVNJWkVXSURUSCcpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5yZVNpemVXaWR0aCB8fCA1MDBcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdyZVNpemVIZWlnaHQnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX1JFU0laRUhFSUdIVCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19SRVNJWkVIRUlHSFQnKVxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucmVTaXplSGVpZ2h0IHx8IDUwMFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3NraXBSZVNpemVPZlNtYWxsSW1nJyxcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX1NLSVBSRVNJWkVPRlNNQUxMSU1HJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX1NLSVBSRVNJWkVPRlNNQUxMSU1HJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnNraXBSZVNpemVPZlNtYWxsSW1nIHx8IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnaXNSZVNpemVCeVBlcmNlbnQnLFxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkVCWVBFUkNFTlQnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkVCWVBFUkNFTlQnKVxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuaXNSZVNpemVCeVBlcmNlbnQgfHwgZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdyZVNpemVQZXJjZW50JyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19SRVNJWkVQRVJDRU5UJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX1JFU0laRVBFUkNFTlQnKVxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucmVTaXplUGVyY2VudCB8fCA1MFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2lzRmxpcCcsXG4gICAgICB0eXBlOiAnY29uZmlybScsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19JU0ZMSVAnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfSVNGTElQJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmlzRmxpcCB8fCBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2lzRmxvcCcsXG4gICAgICB0eXBlOiAnY29uZmlybScsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19JU0ZMT1AnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfSVNGTE9QJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmlzRmxvcCB8fCBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2lzUm90YXRlJyxcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTUk9UQVRFJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX0NPTVBSRVNTX0lTUk9UQVRFJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmlzUm90YXRlIHx8IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAncm90YXRlRGVncmVlJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19ST1RBVEVERUdSRUUnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfUk9UQVRFREVHUkVFJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnJvdGF0ZURlZ3JlZSB8fCA5MFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2lzUmVtb3ZlRXhpZicsXG4gICAgICB0eXBlOiAnY29uZmlybScsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTU19JU1JFTU9WRUVYSUYnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fQ09NUFJFU1NfSVNSRU1PVkVFWElGJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmlzUmVtb3ZlRXhpZiB8fCBmYWxzZVxuICAgIH1cbiAgXVxuICByZXR1cm4gY29uZmlnXG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29uZmlnXG59XG4iLCJpbXBvcnQgeyBJUGljR28sIElQbHVnaW5Db25maWcsIElCdWlsZEluV2F0ZXJNYXJrT3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xuXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJQnVpbGRJbldhdGVyTWFya09wdGlvbnM+KCdidWlsZEluLndhdGVybWFyaycpIHx8IHt9XG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICdpc0FkZFdhdGVybWFyaycsXG4gICAgICB0eXBlOiAnY29uZmlybScsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfSVNBRERXQVRFUk1BUksnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX0lTQUREV0FURVJNQVJLJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmlzQWRkV2F0ZXJtYXJrIHx8IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnd2F0ZXJtYXJrVHlwZScsXG4gICAgICB0eXBlOiAnbGlzdCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVFlQRScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVFlQRScpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgY2hvaWNlczogWyd0ZXh0JywgJ2ltYWdlJ10sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndhdGVybWFya1R5cGUgfHwgJ3RleHQnXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnaXNGdWxsU2NyZWVuV2F0ZXJtYXJrJyxcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19JU0ZVTExTQ1JFRU5XQVRFUk1BUksnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX0lTRlVMTFNDUkVFTldBVEVSTUFSSycpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5pc0Z1bGxTY3JlZW5XYXRlcm1hcmsgfHwgZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICd3YXRlcm1hcmtEZWdyZWUnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktERUdSRUUnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0RFR1JFRScpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy53YXRlcm1hcmtEZWdyZWUgfHwgMFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3dhdGVybWFya1RleHQnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhUJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhUJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndhdGVybWFya1RleHQgfHwgJydcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICd3YXRlcm1hcmtGb250UGF0aCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFRGT05UUEFUSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVEZPTlRQQVRIJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndhdGVybWFya0ZvbnRQYXRoIHx8ICcnXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnd2F0ZXJtYXJrU2NhbGVSYXRpbycsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRSQVRJTycpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVFJBVElPJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndhdGVybWFya1NjYWxlUmF0aW8gfHwgMC4xNVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3dhdGVybWFya0NvbG9yJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVENPTE9SJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktGT05UQ09MT1InKVxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcud2F0ZXJtYXJrQ29sb3IgfHwgJ3JnYmEoMjA0LCAyMDQsIDIwNCwgMC40NSknXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnd2F0ZXJtYXJrSW1hZ2VQYXRoJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLSU1BR0VQQVRIJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktJTUFHRVBBVEgnKVxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcud2F0ZXJtYXJrSW1hZ2VQYXRoIHx8ICcnXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnd2F0ZXJtYXJrUG9zaXRpb24nLFxuICAgICAgdHlwZTogJ2xpc3QnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1BPU0lUSU9OJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktQT1NJVElPTicpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgY2hvaWNlczogW1xuICAgICAgICAnbm9ydGgnLFxuICAgICAgICAnbm9ydGhlYXN0JyxcbiAgICAgICAgJ3NvdXRoZWFzdCcsXG4gICAgICAgICdzb3V0aCcsXG4gICAgICAgICdzb3V0aHdlc3QnLFxuICAgICAgICAnbm9ydGh3ZXN0JyxcbiAgICAgICAgJ3dlc3QnLFxuICAgICAgICAnZWFzdCcsXG4gICAgICAgICdjZW50ZXInLFxuICAgICAgICAnY2VudHJlJ1xuICAgICAgXSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcud2F0ZXJtYXJrUG9zaXRpb24gfHwgJ3NvdXRoZWFzdCdcbiAgICB9XG4gIF1cbiAgcmV0dXJuIGNvbmZpZ1xufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbmZpZ1xufVxuIiwiaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5pbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXG5cbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPGFueT4oJ2J1aWxkSW4ucmVuYW1lJykgfHwge31cbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXG4gICAge1xuICAgICAgbmFtZTogJ2Zvcm1hdCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fUkVOQU1FX0ZPUk1BVCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9SRU5BTUVfRk9STUFUJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmZvcm1hdCB8fCAne2ZpbGVuYW1lfSdcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdlbmFibGUnLFxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0JVSUxESU5fUkVOQU1FX0VOQUJMRScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9SRU5BTUVfRU5BQkxFJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmVuYWJsZSB8fCBmYWxzZVxuICAgIH1cbiAgXVxuICByZXR1cm4gY29uZmlnXG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29uZmlnXG59XG4iLCJpbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXG5pbXBvcnQgeyBJUGljR28sIElTdHJpbmdLZXlNYXAgfSBmcm9tICcuLi8uLi90eXBlcydcblxuZXhwb3J0IGNvbnN0IHVwbG9hZGVyVHJhbnNsYXRvcnMgPSAoY3R4OiBJUGljR28pID0+IHtcbiAgcmV0dXJuIHtcbiAgICBhbGlzdHBsaXN0OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJU1RfUExJU1QnKSxcbiAgICBhbGl5dW46IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRCcpLFxuICAgICdhd3MtczMtcGxpc3QnOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVCcpLFxuICAgIGdpdGh1YjogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQicpLFxuICAgIGltZ3VyOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVInKSxcbiAgICBsb2NhbDogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xPQ0FMJyksXG4gICAgbHNreXBsaXN0OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9QTElTVCcpLFxuICAgIHBpY2xpc3Q6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9QSUNMSVNUJyksXG4gICAgcWluaXU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVScpLFxuICAgIHNmdHBwbGlzdDogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVCcpLFxuICAgIHNtbXM6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TTU1TJyksXG4gICAgdGN5dW46IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVUQnKSxcbiAgICB0ZWxlZ3JhcGhwbGlzdDogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTEVHUkFQSCcpLFxuICAgIHVweXVuOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU4nKSxcbiAgICB3ZWJkYXZwbGlzdDogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUJylcbiAgfSBhcyBJU3RyaW5nS2V5TWFwPGFueT5cbn1cbiIsImltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcbmltcG9ydCB7IElQaWNHbywgSVBsdWdpbkNvbmZpZywgSVN0cmluZ0tleU1hcCB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IGNvbXByZXNzIGZyb20gJy4uL2JlZm9yZXRyYW5zZm9ybWVyL2NvbXByZXNzJ1xuaW1wb3J0IHdhdGVybWFyayBmcm9tICcuLi9iZWZvcmV0cmFuc2Zvcm1lci93YXRlcm1hcmsnXG5pbXBvcnQgcmVuYW1lIGZyb20gJy4uL2JlZm9yZXVwbG9hZC9idWlsZEluUmVuYW1lJ1xuaW1wb3J0IHsgdXBsb2FkZXJUcmFuc2xhdG9ycyB9IGZyb20gJy4vdXRpbHMnXG5cbi8vIGhhbmRsZSBtb2R1bGVzIGNvbmZpZyAtPiBzYXZlIHRvIHBpY2dvIGNvbmZpZyBmaWxlXG5jb25zdCBoYW5kbGVDb25maWcgPSBhc3luYyAoY3R4OiBJUGljR28sIHByb21wdHM6IElQbHVnaW5Db25maWdbXSwgbW9kdWxlOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCBhbnN3ZXIgPSBhd2FpdCBjdHguY21kLmlucXVpcmVyLnByb21wdChwcm9tcHRzKVxuICBjb25zdCBjb25maWdOYW1lID1cbiAgICBtb2R1bGUgPT09ICd1cGxvYWRlcidcbiAgICAgID8gYHBpY0JlZC4ke25hbWV9YFxuICAgICAgOiBtb2R1bGUgPT09ICd0cmFuc2Zvcm1lcidcbiAgICAgICAgPyBgdHJhbnNmb3JtZXIuJHtuYW1lfWBcbiAgICAgICAgOiBtb2R1bGUgPT09ICdidWlsZGluJ1xuICAgICAgICAgID8gYGJ1aWxkSW4uJHtuYW1lfWBcbiAgICAgICAgICA6IG5hbWVcbiAgY3R4LnNhdmVDb25maWcoe1xuICAgIFtjb25maWdOYW1lXTogYW5zd2VyXG4gIH0pXG4gIGlmIChtb2R1bGUgPT09ICd1cGxvYWRlcicpIHtcbiAgICBjdHguc2F2ZUNvbmZpZyh7XG4gICAgICAncGljQmVkLmN1cnJlbnQnOiBuYW1lLFxuICAgICAgJ3BpY0JlZC51cGxvYWRlcic6IG5hbWVcbiAgICB9KVxuICB9IGVsc2UgaWYgKG1vZHVsZSA9PT0gJ3RyYW5zZm9ybWVyJykge1xuICAgIGN0eC5zYXZlQ29uZmlnKHtcbiAgICAgICdwaWNCZWQudHJhbnNmb3JtZXInOiBuYW1lXG4gICAgfSlcbiAgfVxufVxuXG5jb25zdCBzZXR0aW5nID0ge1xuICBoYW5kbGU6IChjdHg6IElQaWNHbykgPT4ge1xuICAgIGNvbnN0IGNtZCA9IGN0eC5jbWRcbiAgICBjbWQucHJvZ3JhbVxuICAgICAgLmNvbW1hbmQoJ3NldCcpXG4gICAgICAuYWxpYXMoJ2NvbmZpZycpXG4gICAgICAuYXJndW1lbnRzKCc8bW9kdWxlPiBbbmFtZV0nKVxuICAgICAgLmRlc2NyaXB0aW9uKCdjb25maWd1cmUgY29uZmlnIG9mIHBpY2dvIG1vZHVsZXMsIHVwbG9hZGVyfHRyYW5zZm9ybWVyfHBsdWdpbnxidWlsZGluJylcbiAgICAgIC5hY3Rpb24oKG1vZHVsZTogc3RyaW5nLCBuYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgOyhhc3luYyAoKSA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIC8vIGxvYWQgdGhpcmQtcGFydHkgcGx1Z2luc1xuICAgICAgICAgICAgLy8gYXdhaXQgY3R4LnBsdWdpbkxvYWRlci5sb2FkKClcbiAgICAgICAgICAgIC8vIGlmIGEgbW9kdWxlIGlzIHNwZWNpZmljLCB0aGVuIGp1c3Qgc2V0IHRoaXMgb3B0aW9uIGluIGNvbmZpZ1xuICAgICAgICAgICAgc3dpdGNoIChtb2R1bGUpIHtcbiAgICAgICAgICAgICAgY2FzZSAnYnVpbGRpbic6XG4gICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdjb21wcmVzcycpIHtcbiAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNvbmZpZyhjdHgsIGNvbXByZXNzLmNvbmZpZyhjdHgpLCBtb2R1bGUsIG5hbWUpXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09PSAnd2F0ZXJtYXJrJykge1xuICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ29uZmlnKGN0eCwgd2F0ZXJtYXJrLmNvbmZpZyhjdHgpLCBtb2R1bGUsIG5hbWUpXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lID09PSAncmVuYW1lJykge1xuICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ29uZmlnKGN0eCwgcmVuYW1lLmNvbmZpZyhjdHgpLCBtb2R1bGUsIG5hbWUpXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHByb21wdHMgPSBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnbGlzdCcsXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2J1aWxkaW4nLFxuICAgICAgICAgICAgICAgICAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9DT01QUkVTUycpLCB2YWx1ZTogJ2NvbXByZXNzJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdCVUlMRElOX1dBVEVSTUFSSycpLCB2YWx1ZTogJ3dhdGVybWFyaycgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbmFtZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQlVJTERJTl9SRU5BTUUnKSwgdmFsdWU6ICdyZW5hbWUnIH1cbiAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdDaG9vc2UgYSBidWlsZGluIG1vZHVsZSdcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgY29uc3QgYW5zd2VyID0gYXdhaXQgY3R4LmNtZC5pbnF1aXJlci5wcm9tcHQ8SVN0cmluZ0tleU1hcDxhbnk+Pihwcm9tcHRzKVxuICAgICAgICAgICAgICAgICAgaWYgKGFuc3dlci5idWlsZGluID09PSAnY29tcHJlc3MnKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNvbmZpZyhjdHgsIGNvbXByZXNzLmNvbmZpZyhjdHgpLCBtb2R1bGUsIGFuc3dlci5idWlsZGluKVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhbnN3ZXIuYnVpbGRpbiA9PT0gJ3dhdGVybWFyaycpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ29uZmlnKGN0eCwgd2F0ZXJtYXJrLmNvbmZpZyhjdHgpLCBtb2R1bGUsIGFuc3dlci5idWlsZGluKVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhbnN3ZXIuYnVpbGRpbiA9PT0gJ3JlbmFtZScpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ29uZmlnKGN0eCwgcmVuYW1lLmNvbmZpZyhjdHgpLCBtb2R1bGUsIGFuc3dlci5idWlsZGluKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBjYXNlICd1cGxvYWRlcic6XG4gICAgICAgICAgICAgIGNhc2UgJ3RyYW5zZm9ybWVyJzpcbiAgICAgICAgICAgICAgICBpZiAobmFtZSkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGN0eC5oZWxwZXJbbW9kdWxlXS5nZXQobmFtZSlcbiAgICAgICAgICAgICAgICAgIGlmICghaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICBjdHgubG9nLmVycm9yKGBObyAke21vZHVsZX0gbmFtZWQgJHtuYW1lfWApXG4gICAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGhhbmRsZUNvbmZpZyhjdHgsIGl0ZW0uY29uZmlnKGN0eCksIG1vZHVsZSwgbmFtZSlcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcHJvbXB0cyA9IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdsaXN0JyxcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBgJHttb2R1bGV9YCxcbiAgICAgICAgICAgICAgICAgICAgICBjaG9pY2VzOiBjdHguaGVscGVyW21vZHVsZV0uZ2V0SWRMaXN0KCkubWFwKChpdGVtOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHVwbG9hZGVyVHJhbnNsYXRvcnMoY3R4KVtpdGVtXSB8fCBpdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBDaG9vc2UgYShuKSAke21vZHVsZX1gXG4gICAgICAgICAgICAgICAgICAgICAgLy8gZGVmYXVsdDogY3R4LmdldENvbmZpZygncGljQmVkLnVwbG9hZGVyJykgfHwgY3R4LmdldENvbmZpZygncGljQmVkLmN1cnJlbnQnKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICBjb25zdCBhbnN3ZXIgPSBhd2FpdCBjdHguY21kLmlucXVpcmVyLnByb21wdDxJU3RyaW5nS2V5TWFwPGFueT4+KHByb21wdHMpXG4gICAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gY3R4LmhlbHBlclttb2R1bGVdLmdldChhbnN3ZXJbbW9kdWxlXSlcbiAgICAgICAgICAgICAgICAgIGlmIChpdGVtPy5jb25maWcpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ29uZmlnKGN0eCwgaXRlbS5jb25maWcoY3R4KSwgbW9kdWxlLCBhbnN3ZXJbbW9kdWxlXSlcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgY2FzZSAncGx1Z2luJzpcbiAgICAgICAgICAgICAgICBpZiAobmFtZSkge1xuICAgICAgICAgICAgICAgICAgaWYgKCFuYW1lLmluY2x1ZGVzKCdwaWNnby1wbHVnaW4tJykpIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZSA9IGBwaWNnby1wbHVnaW4tJHtuYW1lfWBcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhjdHguZ2V0Q29uZmlnKCdwaWNnb1BsdWdpbnMnKSkuaW5jbHVkZXMobmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN0eC5wbHVnaW5Mb2FkZXIuZ2V0UGx1Z2luKG5hbWUpPy5jb25maWcpIHtcbiAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVDb25maWcoY3R4LCBjdHgucGx1Z2luTG9hZGVyLmdldFBsdWdpbihuYW1lKSEuY29uZmlnIShjdHgpLCAncGx1Z2luJywgbmFtZSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4LmxvZy5lcnJvcihgTm8gcGx1Z2luIG5hbWVkICR7bmFtZX1gKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcHJvbXB0cyA9IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdsaXN0JyxcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAncGx1Z2luJyxcbiAgICAgICAgICAgICAgICAgICAgICBjaG9pY2VzOiBjdHgucGx1Z2luTG9hZGVyLmdldEZ1bGxMaXN0KCksXG4gICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ0Nob29zZSBhIHBsdWdpbidcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgY29uc3QgYW5zd2VyID0gYXdhaXQgY3R4LmNtZC5pbnF1aXJlci5wcm9tcHQ8YW55Pihwcm9tcHRzKVxuICAgICAgICAgICAgICAgICAgaWYgKGN0eC5wbHVnaW5Mb2FkZXIuZ2V0UGx1Z2luKGFuc3dlci5wbHVnaW4pPy5jb25maWcpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgaGFuZGxlQ29uZmlnKFxuICAgICAgICAgICAgICAgICAgICAgIGN0eCxcbiAgICAgICAgICAgICAgICAgICAgICBjdHgucGx1Z2luTG9hZGVyLmdldFBsdWdpbihhbnN3ZXIucGx1Z2luKSEuY29uZmlnIShjdHgpLFxuICAgICAgICAgICAgICAgICAgICAgICdwbHVnaW4nLFxuICAgICAgICAgICAgICAgICAgICAgIGFuc3dlci5wbHVnaW5cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGN0eC5sb2cud2FybihgTm8gbW9kdWxlIG5hbWVkICR7bW9kdWxlfWApXG4gICAgICAgICAgICAgICAgY3R4LmxvZy53YXJuKCdBdmFpbGFibGUgbW9kdWxlcyBhcmUgdXBsb2FkZXJ8dHJhbnNmb3JtZXJ8cGx1Z2lufGJ1aWxkaW4nKVxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3R4LmxvZy5zdWNjZXNzKCdDb25maWd1cmUgY29uZmlnIHN1Y2Nlc3NmdWxseSEnKVxuICAgICAgICAgICAgaWYgKG1vZHVsZSA9PT0gJ3BsdWdpbicpIHtcbiAgICAgICAgICAgICAgY3R4LmxvZy5pbmZvKFwiSWYgeW91IHdhbnQgdG8gdXNlIHRoaXMgY29uZmlnLCBwbGVhc2UgcnVuICdwaWNnbyB1c2UgcGx1Z2lucydcIilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICAgIGN0eC5sb2cuZXJyb3IoZSlcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmFyZ3YuaW5jbHVkZXMoJy0tZGVidWcnKSkge1xuICAgICAgICAgICAgICB0aHJvdyBlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KSgpLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIGN0eC5sb2cuZXJyb3IoZSlcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgc2V0dGluZ1xuIiwiaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luLCBVbmRlZmluYWJsZSwgSUNMSUNvbmZpZ3MsIElTdHJpbmdLZXlNYXAgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB7IHVwbG9hZGVyVHJhbnNsYXRvcnMgfSBmcm9tICcuL3V0aWxzJ1xuXG5jb25zdCB1c2U6IElQbHVnaW4gPSB7XG4gIGhhbmRsZTogYXN5bmMgKGN0eDogSVBpY0dvKSA9PiB7XG4gICAgY29uc3QgY21kID0gY3R4LmNtZFxuICAgIGNtZC5wcm9ncmFtXG4gICAgICAuY29tbWFuZCgndXNlJylcbiAgICAgIC5hcmd1bWVudHMoJ1ttb2R1bGVdJylcbiAgICAgIC5kZXNjcmlwdGlvbigndXNlIG1vZHVsZXMgb2YgcGljZ28nKVxuICAgICAgLmFjdGlvbigobW9kdWxlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgOyhhc3luYyAoKSA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCBwcm9tcHRzOiBhbnlbXSA9IFtdXG4gICAgICAgICAgICBjb25zdCBjb25maWc6IElDTElDb25maWdzID0ge1xuICAgICAgICAgICAgICB1cGxvYWRlcjoge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdsaXN0JyxcbiAgICAgICAgICAgICAgICBuYW1lOiAndXBsb2FkZXInLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdVc2UgYW4gdXBsb2FkZXInLFxuICAgICAgICAgICAgICAgIGNob2ljZXM6IGN0eC5oZWxwZXIudXBsb2FkZXIuZ2V0SWRMaXN0KCkubWFwKChpdGVtOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IHVwbG9hZGVyVHJhbnNsYXRvcnMoY3R4KVtpdGVtXSB8fCBpdGVtLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaXRlbVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGN0eC5nZXRDb25maWcoJ3BpY0JlZC51cGxvYWRlcicpIHx8IGN0eC5nZXRDb25maWcoJ3BpY0JlZC5jdXJyZW50JykgfHwgJ3NtbXMnXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHRyYW5zZm9ybWVyOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2xpc3QnLFxuICAgICAgICAgICAgICAgIG5hbWU6ICd0cmFuc2Zvcm1lcicsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1VzZSBhIHRyYW5zZm9ybWVyJyxcbiAgICAgICAgICAgICAgICBjaG9pY2VzOiBjdHguaGVscGVyLnRyYW5zZm9ybWVyLmdldElkTGlzdCgpLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3BpY0JlZC50cmFuc2Zvcm1lcicpIHx8ICdwYXRoJ1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBwbHVnaW5zOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2NoZWNrYm94JyxcbiAgICAgICAgICAgICAgICBuYW1lOiAncGx1Z2lucycsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1VzZSBwbHVnaW5zJyxcbiAgICAgICAgICAgICAgICBjaG9pY2VzOiBjdHgucGx1Z2luTG9hZGVyLmdldEZ1bGxMaXN0KCksXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogT2JqZWN0LmtleXMoY3R4LmdldENvbmZpZygncGljZ29QbHVnaW5zJykpLmZpbHRlcigoaXRlbTogc3RyaW5nKSA9PlxuICAgICAgICAgICAgICAgICAgY3R4LmdldENvbmZpZyhgcGljZ29QbHVnaW5zLiR7aXRlbX1gKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gaWYgYW4gb3B0aW9uIGlzIHNwZWNpZmljLCB0aGVuIGp1c3Qgc2V0IHRoaXMgb3B0aW9uIGluIGNvbmZpZ1xuICAgICAgICAgICAgaWYgKG1vZHVsZSkge1xuICAgICAgICAgICAgICBpZiAoY29uZmlnW21vZHVsZV0pIHtcbiAgICAgICAgICAgICAgICBwcm9tcHRzLnB1c2goY29uZmlnW21vZHVsZV0pXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY3R4LmxvZy53YXJuKGBObyBtb2R1bGUgbmFtZWQgJHttb2R1bGV9YClcbiAgICAgICAgICAgICAgICBjdHgubG9nLndhcm4oJ0F2YWlsYWJsZSBtb2R1bGVzIGFyZSB1cGxvYWRlcnx0cmFuc2Zvcm1lcnxwbHVnaW5zJylcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcHJvbXB0cyA9IE9iamVjdC5rZXlzKGNvbmZpZykubWFwKChpdGVtOiBzdHJpbmcpID0+IGNvbmZpZ1tpdGVtXSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFuc3dlciA9IGF3YWl0IGNtZC5pbnF1aXJlci5wcm9tcHQ8YW55Pihwcm9tcHRzKVxuXG4gICAgICAgICAgICAvLyBoYW5kbGUgZm9yIHBsdWdpbnMgb3B0aW9uIGZyb20gQXJyYXkgdG8gb2JqZWN0XG4gICAgICAgICAgICBpZiAoYW5zd2VyLnBsdWdpbnMpIHtcbiAgICAgICAgICAgICAgY29uc3QgcGx1Z2lucyA9IGN0eC5nZXRDb25maWc8SVN0cmluZ0tleU1hcDxib29sZWFuPj4oJ3BpY2dvUGx1Z2lucycpXG4gICAgICAgICAgICAgIE9iamVjdC5rZXlzKHBsdWdpbnMpLmZvckVhY2goKGl0ZW06IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChhbnN3ZXIucGx1Z2lucy5pbmNsdWRlcyhpdGVtKSkge1xuICAgICAgICAgICAgICAgICAgcGx1Z2luc1tpdGVtXSA9IHRydWVcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcGx1Z2luc1tpdGVtXSA9IGZhbHNlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAvLyBzYXZlIGNvbmZpZyBmb3IgcGx1Z2luc1xuICAgICAgICAgICAgICBjdHguc2F2ZUNvbmZpZyh7XG4gICAgICAgICAgICAgICAgcGljZ29QbHVnaW5zOiBwbHVnaW5zXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBzYXZlIGNvbmZpZyBmb3IgdXBsb2FkZXIgJiB0cmFuc2Zvcm1lclxuICAgICAgICAgICAgY3R4LnNhdmVDb25maWcoe1xuICAgICAgICAgICAgICAncGljQmVkLmN1cnJlbnQnOiBhbnN3ZXIudXBsb2FkZXIgfHwgY3R4LmdldENvbmZpZzxzdHJpbmc+KCdwaWNCZWQuY3VycmVudCcpLFxuICAgICAgICAgICAgICAncGljQmVkLnVwbG9hZGVyJzogYW5zd2VyLnVwbG9hZGVyIHx8IGN0eC5nZXRDb25maWc8c3RyaW5nPigncGljQmVkLmN1cnJlbnQnKSxcbiAgICAgICAgICAgICAgJ3BpY0JlZC50cmFuc2Zvcm1lcic6IGFuc3dlci50cmFuc2Zvcm1lciB8fCAncGF0aCdcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBjdHgubG9nLnN1Y2Nlc3MoJ0NvbmZpZ3VyZSBzYXZlZCBzdWNjZXNzZnVsbHkhJylcbiAgICAgICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgICAgIGN0eC5sb2cuZXJyb3IoZSlcbiAgICAgICAgICAgIGlmIChwcm9jZXNzLmFyZ3YuaW5jbHVkZXMoJy0tZGVidWcnKSkge1xuICAgICAgICAgICAgICB0aHJvdyBlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KSgpLmNhdGNoKGUgPT4ge1xuICAgICAgICAgIGN0eC5sb2cuZXJyb3IoZSlcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgdXNlXG4iLCJpbXBvcnQgeyBJUGljR28sIElQbHVnaW4gfSBmcm9tICcuLi8uLi90eXBlcydcblxuY29uc3QgcHJveHk6IElQbHVnaW4gPSB7XG4gIGhhbmRsZTogKGN0eDogSVBpY0dvKSA9PiB7XG4gICAgY29uc3QgY21kID0gY3R4LmNtZFxuICAgIGNtZC5wcm9ncmFtLm9wdGlvbignLXAsIC0tcHJveHkgPHVybD4nLCAnc2V0IHByb3h5IGZvciB1cGxvYWRpbmcnLCAocHJveHk6IHN0cmluZykgPT4ge1xuICAgICAgY3R4LnNldENvbmZpZyh7XG4gICAgICAgICdwaWNCZWQucHJveHknOiBwcm94eVxuICAgICAgfSlcbiAgICB9KVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHByb3h5XG4iLCJpbXBvcnQgbWF0Y2ggZnJvbSAnbWluaW1hdGNoJ1xuXG5pbXBvcnQgZnMsIHsgZW5zdXJlRGlyU3luYyB9IGZyb20gJ2ZzLWV4dHJhJ1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcbmltcG9ydCBnbG9iYnkgZnJvbSAnZ2xvYmJ5J1xuaW1wb3J0IHsgcmVuZGVyIGFzIGVqc1JlbmRlciB9IGZyb20gJ2VqcydcblxuaW1wb3J0IHsgSVBpY0dvLCBJT3B0aW9ucywgSUZpbGVUcmVlIH0gZnJvbSAnLi4vdHlwZXMnXG5cbi8qKlxuICogR2VuZXJhdGUgdGVtcGxhdGUgZmlsZXMgdG8gZGVzdGluYXRpb24gZmlsZXMuXG4gKiBAcGFyYW0ge1BpY0dvfSBjdHhcbiAqIEBwYXJhbSB7SU9wdGlvbnN9IG9wdGlvbnNcbiAqL1xuY29uc3QgZ2VuZXJhdGUgPSBhc3luYyAoY3R4OiBJUGljR28sIG9wdGlvbnM6IElPcHRpb25zKTogUHJvbWlzZTxhbnk+ID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBvcHRzID0gZ2V0T3B0aW9ucyhvcHRpb25zLnRtcClcbiAgICBjb25zdCBzb3VyY2UgPSBwYXRoLmpvaW4ob3B0aW9ucy50bXAsICd0ZW1wbGF0ZScpXG4gICAgbGV0IGFuc3dlcnMgPSB7fVxuICAgIGlmIChvcHRzLnByb21wdHMgJiYgb3B0cy5wcm9tcHRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGFuc3dlcnMgPSBhd2FpdCBjdHguY21kLmlucXVpcmVyLnByb21wdChvcHRzLnByb21wdHMpXG4gICAgfVxuICAgIGxldCBfZmlsZXM6IHN0cmluZ1tdID0gYXdhaXQgZ2xvYmJ5KFsnKiovKiddLCB7IGN3ZDogc291cmNlLCBkb3Q6IHRydWUgfSkgLy8gZ2V0IGZpbGVzJyBuYW1lIGFycmF5XG4gICAgX2ZpbGVzID0gX2ZpbGVzLmZpbHRlcigoaXRlbTogc3RyaW5nKSA9PiB7XG4gICAgICBsZXQgZ2xvYiA9ICcnXG4gICAgICBPYmplY3Qua2V5cyhvcHRzLmZpbHRlcnMpLmZvckVhY2goKGtleTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmIChtYXRjaChpdGVtLCBrZXksIHsgZG90OiB0cnVlIH0pKSB7XG4gICAgICAgICAgZ2xvYiA9IGl0ZW1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIGlmIChnbG9iKSB7XG4gICAgICAgIC8vIGZpbmQgYSBmaWx0ZXIgZXhwcmVzc2lvblxuICAgICAgICByZXR1cm4gZmlsdGVycyhjdHgsIG9wdHMuZmlsdGVyc1tnbG9iXSwgYW5zd2VycylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfSlcbiAgICBpZiAoX2ZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY3R4LmxvZy53YXJuKCdUZW1wbGF0ZSBmaWxlcyBub3QgZm91bmQhJylcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjb25zdCBmaWxlcyA9IHJlbmRlcihfZmlsZXMsIHNvdXJjZSwgYW5zd2VycylcbiAgICB3cml0ZUZpbGVUcmVlKG9wdGlvbnMuZGVzdCwgZmlsZXMpXG4gICAgaWYgKHR5cGVvZiBvcHRzLmNvbXBsZXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBvcHRzLmNvbXBsZXRlKHsgYW5zd2Vycywgb3B0aW9ucywgZmlsZXM6IF9maWxlcywgY3R4IH0pXG4gICAgfVxuICAgIGlmIChvcHRzLmNvbXBsZXRlTWVzc2FnZSkge1xuICAgICAgY3R4LmxvZy5zdWNjZXNzKG9wdHMuY29tcGxldGVNZXNzYWdlKVxuICAgIH1cbiAgICBjdHgubG9nLnN1Y2Nlc3MoJ0RvbmUhJylcbiAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgY3R4LmxvZy5lcnJvcihlKVxuICB9XG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBmaWx0ZXJzJyByZXN1bHRcbiAqIEBwYXJhbSBjdHggUGljR29cbiAqIEBwYXJhbSBleHAgY29uZGl0aW9uIGV4cHJlc3Npb25cbiAqIEBwYXJhbSBkYXRhIG9wdGlvbnMgZGF0YVxuICovXG5jb25zdCBmaWx0ZXJzID0gKGN0eDogSVBpY0dvLCBleHA6IGFueSwgZGF0YTogYW55KTogYm9vbGVhbiA9PiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtcGx1cy1vcGVyYW5kcywgbm8tbmV3LWZ1bmMsIEB0eXBlc2NyaXB0LWVzbGludC9uby1pbXBsaWVkLWV2YWxcbiAgY29uc3QgZm4gPSBuZXcgRnVuY3Rpb24oJ2RhdGEnLCAnd2l0aCAoZGF0YSkgeyByZXR1cm4gJyArIGV4cCArICd9JylcbiAgdHJ5IHtcbiAgICByZXR1cm4gZm4oZGF0YSlcbiAgfSBjYXRjaCAoZSkge1xuICAgIGN0eC5sb2cuZXJyb3IoYEVycm9yIHdoZW4gZXZhbHVhdGluZyBmaWx0ZXIgY29uZGl0aW9uOiAke0pTT04uc3RyaW5naWZ5KGV4cCl9YClcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG4vKipcbiAqIEdldCB0ZW1wbGF0ZSBvcHRpb25zXG4gKiBAcGFyYW0ge3N0cmluZ30gdGVtcGxhdGVQYXRoXG4gKi9cbmNvbnN0IGdldE9wdGlvbnMgPSAodGVtcGxhdGVQYXRoOiBzdHJpbmcpOiBhbnkgPT4ge1xuICBjb25zdCBvcHRpb25zUGF0aCA9IHBhdGguam9pbih0ZW1wbGF0ZVBhdGgsICdpbmRleC5qcycpXG4gIGlmIChmcy5leGlzdHNTeW5jKG9wdGlvbnNQYXRoKSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXG4gICAgY29uc3Qgb3B0aW9ucyA9IHJlcXVpcmUob3B0aW9uc1BhdGgpXG4gICAgcmV0dXJuIG9wdGlvbnNcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge31cbiAgfVxufVxuXG4vKipcbiAqIFJlbmRlciBmaWxlcyB0byBhIHZpcnR1YWwgdHJlZSBvYmplY3RcbiAqIEBwYXJhbSB7YXJyYXl9IGZpbGVzXG4gKi9cbmNvbnN0IHJlbmRlciA9IChmaWxlczogc3RyaW5nW10sIHNvdXJjZTogc3RyaW5nLCBvcHRpb25zOiBhbnkpOiBhbnkgPT4ge1xuICBjb25zdCBmaWxlVHJlZTogSUZpbGVUcmVlID0ge31cbiAgZmlsZXMuZm9yRWFjaCgoZmlsZVBhdGg6IHN0cmluZyk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IGZpbGUgPSBmcy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKHNvdXJjZSwgZmlsZVBhdGgpLCAndXRmOCcpXG4gICAgY29uc3QgY29udGVudCA9IGVqc1JlbmRlcihmaWxlLCBvcHRpb25zKVxuICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoY29udGVudCkgfHwgL1teXFxzXS8udGVzdChjb250ZW50KSkge1xuICAgICAgZmlsZVRyZWVbZmlsZVBhdGhdID0gY29udGVudFxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIGZpbGVUcmVlXG59XG5cbi8qKlxuICogV3JpdGUgcmVuZGVyZWQgZmlsZXMnIGNvbnRlbnQgdG8gcmVhbCBmaWxlXG4gKiBAcGFyYW0ge3N0cmluZ30gZGlyXG4gKiBAcGFyYW0ge29iamVjdH0gZmlsZXNcbiAqL1xuY29uc3Qgd3JpdGVGaWxlVHJlZSA9IChkaXI6IHN0cmluZywgZmlsZXM6IGFueSk6IHZvaWQgPT4ge1xuICBPYmplY3Qua2V5cyhmaWxlcykuZm9yRWFjaCgobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4oZGlyLCBuYW1lKVxuICAgIGVuc3VyZURpclN5bmMocGF0aC5kaXJuYW1lKGZpbGVQYXRoKSlcbiAgICBmcy53cml0ZUZpbGVTeW5jKGZpbGVQYXRoLCBmaWxlc1tuYW1lXSlcbiAgfSlcbn1cblxuZXhwb3J0IHsgZmlsdGVycywgZ2VuZXJhdGUsIHJlbmRlciwgd3JpdGVGaWxlVHJlZSB9XG4iLCJpbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnXG5pbXBvcnQgZG93bmxvYWQgZnJvbSAnZG93bmxvYWQtZ2l0LXJlcG8nXG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnb3MnXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuaW1wb3J0IHsgc3luYyB9IGZyb20gJ3JpbXJhZidcblxuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tICcuLi8uLi91dGlscy9pbml0VXRpbHMnXG5pbXBvcnQgeyBJT3B0aW9ucywgSVBsdWdpbiwgSVBpY0dvIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5cbmNvbnN0IHJ1biA9IChjdHg6IElQaWNHbywgb3B0aW9uczogSU9wdGlvbnMpOiB2b2lkID0+IHtcbiAgaWYgKG9wdGlvbnMub2ZmbGluZSkge1xuICAgIC8vIG9mZmxpbmUgbW9kZVxuICAgIGlmIChmcy5leGlzdHNTeW5jKG9wdGlvbnMudGVtcGxhdGUpKSB7XG4gICAgICBnZW5lcmF0ZShjdHgsIG9wdGlvbnMpLmNhdGNoKGUgPT4ge1xuICAgICAgICBjdHgubG9nLmVycm9yKGUpXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBjdHgubG9nLmVycm9yKGBMb2NhbCB0ZW1wbGF0ZSAke29wdGlvbnMudGVtcGxhdGV9IG5vdCBmb3VuZGApXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIG9ubGluZSBtb2RlXG4gICAgb3B0aW9ucy50ZW1wbGF0ZSA9ICFvcHRpb25zLmhhc1NsYXNoXG4gICAgICA/ICdQaWNHby9waWNnby10ZW1wbGF0ZS0nICsgb3B0aW9ucy50ZW1wbGF0ZSAvLyBvZmZpY2lhbCB0ZW1wbGF0ZVxuICAgICAgOiBvcHRpb25zLnRlbXBsYXRlXG4gICAgZG93bmxvYWRBbmRHZW5lcmF0ZShjdHgsIG9wdGlvbnMpXG4gIH1cbn1cblxuLyoqXG4gKiBkb3dubG9hZCB0ZW1wbGF0ZSAmIGdlbmVyYXRlXG4gKiBAcGFyYW0geyBQaWNHbyB9IGN0eFxuICogQHBhcmFtIHsgSU9wdGlvbnMgfSBvcHRpb25zXG4gKi9cbmNvbnN0IGRvd25sb2FkQW5kR2VuZXJhdGUgPSAoY3R4OiBJUGljR28sIG9wdGlvbnM6IElPcHRpb25zKTogdm9pZCA9PiB7XG4gIGlmIChmcy5leGlzdHNTeW5jKG9wdGlvbnMudG1wKSkge1xuICAgIHN5bmMob3B0aW9ucy50bXApXG4gIH1cbiAgY3R4LmxvZy5pbmZvKCdUZW1wbGF0ZSBmaWxlcyBhcmUgZG93bmxvYWRpbmcuLi4nKVxuICBkb3dubG9hZChvcHRpb25zLnRlbXBsYXRlLCBvcHRpb25zLnRtcCwgeyBjbG9uZTogb3B0aW9ucy5jbG9uZSB9LCAoZXJyOiBFcnJvcikgPT4ge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGN0eC5sb2cuZXJyb3IoZXJyKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGN0eC5sb2cuc3VjY2VzcygnVGVtcGxhdGUgZmlsZXMgYXJlIGRvd25sb2FkZWQhJylcbiAgICBnZW5lcmF0ZShjdHgsIG9wdGlvbnMpLmNhdGNoKGUgPT4ge1xuICAgICAgY3R4LmxvZy5lcnJvcihlKVxuICAgIH0pXG4gIH0pXG59XG5cbmNvbnN0IGluaXQ6IElQbHVnaW4gPSB7XG4gIGhhbmRsZTogYXN5bmMgKGN0eDogSVBpY0dvKSA9PiB7XG4gICAgY29uc3QgY21kID0gY3R4LmNtZFxuICAgIGNtZC5wcm9ncmFtXG4gICAgICAuY29tbWFuZCgnaW5pdCcpXG4gICAgICAuYXJndW1lbnRzKCc8dGVtcGxhdGU+IFtwcm9qZWN0XScpXG4gICAgICAub3B0aW9uKCctLWNsb25lJywgJ3VzZSBnaXQgY2xvbmUnKVxuICAgICAgLm9wdGlvbignLS1vZmZsaW5lJywgJ3VzZSBjYWNoZWQgdGVtcGxhdGUnKVxuICAgICAgLmRlc2NyaXB0aW9uKFwiY3JlYXRlIHBpY2dvIHBsdWdpbidzIGRldmVsb3BtZW50IHRlbXBsYXRlc1wiKVxuICAgICAgLmFjdGlvbigodGVtcGxhdGU6IHN0cmluZywgcHJvamVjdDogc3RyaW5nLCBwcm9ncmFtOiBhbnkpID0+IHtcbiAgICAgICAgOyhhc3luYyAoKSA9PiB7XG4gICAgICAgICAgLy8gVGhhbmtzIHRvIHZ1ZS1jbGkgaW5pdDogaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1jbGkvYmxvYi9tYXN0ZXIvYmluL3Z1ZS1pbml0XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGhhc1NsYXNoID0gdGVtcGxhdGUuaW5jbHVkZXMoJy8nKVxuICAgICAgICAgICAgY29uc3QgaW5QbGFjZSA9ICFwcm9qZWN0IHx8IHByb2plY3QgPT09ICcuJ1xuICAgICAgICAgICAgY29uc3QgZGVzdCA9IHBhdGgucmVzb2x2ZShwcm9qZWN0IHx8ICcuJylcbiAgICAgICAgICAgIGNvbnN0IGNsb25lID0gcHJvZ3JhbS5jbG9uZSB8fCBmYWxzZVxuICAgICAgICAgICAgY29uc3Qgb2ZmbGluZSA9IHByb2dyYW0ub2ZmbGluZSB8fCBmYWxzZVxuICAgICAgICAgICAgY29uc3QgdG1wID0gcGF0aC5qb2luKGhvbWVkaXIoKSwgJy5waWNsaXN0L3RlbXBsYXRlcycsIHRlbXBsYXRlLnJlcGxhY2UoL1svOl0vZywgJy0nKSkgLy8gZm9yIGNhY2hpbmcgdGVtcGxhdGVcblxuICAgICAgICAgICAgaWYgKHByb2dyYW0ub2ZmbGluZSkge1xuICAgICAgICAgICAgICB0ZW1wbGF0ZSA9IHRtcFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgICB0ZW1wbGF0ZSxcbiAgICAgICAgICAgICAgcHJvamVjdCxcbiAgICAgICAgICAgICAgaGFzU2xhc2gsXG4gICAgICAgICAgICAgIGluUGxhY2UsXG4gICAgICAgICAgICAgIGRlc3QsXG4gICAgICAgICAgICAgIGNsb25lLFxuICAgICAgICAgICAgICB0bXAsXG4gICAgICAgICAgICAgIG9mZmxpbmVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gY2hlY2sgaWYgcHJvamVjdCBpcyBlbXB0eSBvciBleGlzdFxuICAgICAgICAgICAgaWYgKGluUGxhY2UgfHwgZnMuZXhpc3RzU3luYyhkZXN0KSkge1xuICAgICAgICAgICAgICBhd2FpdCBjdHguY21kLmlucXVpcmVyXG4gICAgICAgICAgICAgICAgLnByb21wdChbXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdjb25maXJtJyxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogaW5QbGFjZSA/ICdHZW5lcmF0ZSBwcm9qZWN0IGluIGN1cnJlbnQgZGlyZWN0b3J5PycgOiAnVGFyZ2V0IGRpcmVjdG9yeSBleGlzdHMuIENvbnRpbnVlPycsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdvaydcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgIC50aGVuKChhbnN3ZXI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKGFuc3dlci5vaykge1xuICAgICAgICAgICAgICAgICAgICBydW4oY3R4LCBvcHRpb25zKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBwcm9qZWN0IGlzIGdpdmVuXG4gICAgICAgICAgICAgIHJ1bihjdHgsIG9wdGlvbnMpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgICAgICBjdHgubG9nLmVycm9yKGUpXG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5hcmd2LmluY2x1ZGVzKCctLWRlYnVnJykpIHtcbiAgICAgICAgICAgICAgdGhyb3cgZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSkoKS5jYXRjaChlID0+IHtcbiAgICAgICAgICBjdHgubG9nLmVycm9yKGUpXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgICAgLm9uKCctLWhlbHAnLCAoKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKClcbiAgICAgICAgY29uc29sZS5sb2coJ0V4YW1wbGVzOicpXG4gICAgICAgIGNvbnNvbGUubG9nKClcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnICAjIGNyZWF0ZSBhIG5ldyBwcm9qZWN0IHdpdGggYW4gb2ZmaWNpYWwgdGVtcGxhdGUnKSlcbiAgICAgICAgY29uc29sZS5sb2coJyAgJCBwaWNnbyBpbml0IHBsdWdpbiBteS1wcm9qZWN0JylcbiAgICAgICAgY29uc29sZS5sb2coKVxuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgICMgY3JlYXRlIGEgbmV3IHByb2plY3Qgc3RyYWlnaHQgZnJvbSBhIGdpdGh1YiB0ZW1wbGF0ZScpKVxuICAgICAgICBjb25zb2xlLmxvZygnICAkIHBpY2dvIGluaXQgdXNlcm5hbWUvcmVwbyBteS1wcm9qZWN0JylcbiAgICAgICAgY29uc29sZS5sb2coKVxuICAgICAgfSlcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBpbml0XG4iLCJpbXBvcnQgeyBJUGx1Z2luLCBJUGljR28sIElTdHJpbmdLZXlNYXAgfSBmcm9tICcuLi8uLi90eXBlcydcblxuY29uc3QgaTE4bjogSVBsdWdpbiA9IHtcbiAgaGFuZGxlOiAoY3R4OiBJUGljR28pID0+IHtcbiAgICBjb25zdCBjbWQgPSBjdHguY21kXG4gICAgY21kLnByb2dyYW1cbiAgICAgIC5jb21tYW5kKCdpMThuJylcbiAgICAgIC5hcmd1bWVudHMoJ1tsYW5nXScpXG4gICAgICAuZGVzY3JpcHRpb24oJ2NoYW5nZSBsYW5ndWFnZSwgemgtQ04sIHpoLVRXLCBlbicpXG4gICAgICAuYWN0aW9uKGFzeW5jIChsYW5nOiBzdHJpbmcgPSAnJykgPT4ge1xuICAgICAgICBjb25zdCBsaXN0ID0gY3R4LmkxOG4uZ2V0TGFuZ3VhZ2VMaXN0KClcbiAgICAgICAgaWYgKCFsYW5nKSB7XG4gICAgICAgICAgY29uc3QgcHJvbXB0cyA9IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogJ2xpc3QnLFxuICAgICAgICAgICAgICBuYW1lOiAnaTE4bicsXG4gICAgICAgICAgICAgIGNob2ljZXM6IGxpc3QsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdDaG9vc2UgYSBsYW5ndWFnZScsXG4gICAgICAgICAgICAgIGRlZmF1bHQ6IGN0eC5nZXRDb25maWcoJ3NldHRpbmdzLmxhbmd1YWdlJykgfHwgJ3poLUNOJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgICBjb25zdCBhbnN3ZXIgPSBhd2FpdCBjdHguY21kLmlucXVpcmVyLnByb21wdDxJU3RyaW5nS2V5TWFwPHN0cmluZz4+KHByb21wdHMpXG4gICAgICAgICAgbGFuZyA9IGFuc3dlci5pMThuXG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFsaXN0LmluY2x1ZGVzKGxhbmcpKSB7XG4gICAgICAgICAgY3R4LmxvZy53YXJuKCdObyBzdWNoIGxhbmd1YWdlJylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjdHguaTE4bi5zZXRMYW5ndWFnZShsYW5nKVxuICAgICAgICAgIGN0eC5sb2cuc3VjY2VzcyhgTGFuZ3VhZ2Ugc2V0IHRvICR7bGFuZ31gKVxuICAgICAgICB9XG4gICAgICB9KVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGkxOG5cbiIsImltcG9ydCB7IElQbHVnaW4sIElMaWZlY3ljbGVQbHVnaW5zIH0gZnJvbSAnLi4vdHlwZXMnXG5cbmV4cG9ydCBjbGFzcyBMaWZlY3ljbGVQbHVnaW5zIGltcGxlbWVudHMgSUxpZmVjeWNsZVBsdWdpbnMge1xuICBzdGF0aWMgY3VycmVudFBsdWdpbjogc3RyaW5nIHwgbnVsbFxuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgcGx1Z2luXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IG5hbWU6IHN0cmluZ1xuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgcGx1Z2luc1xuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBsaXN0OiBNYXA8c3RyaW5nLCBJUGx1Z2luPlxuICAvKipcbiAgICogVGhlIG1hcCBvZiBwbHVnaW4gaWRcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcGx1Z2luSWRNYXA6IE1hcDxzdHJpbmcsIHN0cmluZ1tdPlxuXG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuICAgIHRoaXMubmFtZSA9IG5hbWVcbiAgICB0aGlzLmxpc3QgPSBuZXcgTWFwKClcbiAgICB0aGlzLnBsdWdpbklkTWFwID0gbmV3IE1hcCgpXG4gIH1cblxuICByZWdpc3RlcihpZDogc3RyaW5nLCBwbHVnaW46IElQbHVnaW4pOiB2b2lkIHtcbiAgICBpZiAoIWlkKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdpZCBpcyByZXF1aXJlZCEnKVxuICAgIGlmICh0eXBlb2YgcGx1Z2luLmhhbmRsZSAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgbmV3IFR5cGVFcnJvcigncGx1Z2luLmhhbmRsZSBtdXN0IGJlIGEgZnVuY3Rpb24hJylcbiAgICBpZiAodGhpcy5saXN0LmhhcyhpZCkpIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7dGhpcy5uYW1lfSBkdXBsaWNhdGUgaWQ6ICR7aWR9IWApXG5cbiAgICB0aGlzLmxpc3Quc2V0KGlkLCBwbHVnaW4pXG5cbiAgICBpZiAoTGlmZWN5Y2xlUGx1Z2lucy5jdXJyZW50UGx1Z2luKSB7XG4gICAgICBpZiAodGhpcy5wbHVnaW5JZE1hcC5oYXMoTGlmZWN5Y2xlUGx1Z2lucy5jdXJyZW50UGx1Z2luKSkge1xuICAgICAgICB0aGlzLnBsdWdpbklkTWFwLmdldChMaWZlY3ljbGVQbHVnaW5zLmN1cnJlbnRQbHVnaW4pPy5wdXNoKGlkKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wbHVnaW5JZE1hcC5zZXQoTGlmZWN5Y2xlUGx1Z2lucy5jdXJyZW50UGx1Z2luLCBbaWRdKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHVucmVnaXN0ZXIocGx1Z2luTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucGx1Z2luSWRNYXAuaGFzKHBsdWdpbk5hbWUpKSB7XG4gICAgICBjb25zdCBwbHVnaW5MaXN0ID0gdGhpcy5wbHVnaW5JZE1hcC5nZXQocGx1Z2luTmFtZSlcbiAgICAgIHBsdWdpbkxpc3Q/LmZvckVhY2goKHBsdWdpbjogc3RyaW5nKSA9PiB7XG4gICAgICAgIHRoaXMubGlzdC5kZWxldGUocGx1Z2luKVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBnZXROYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubmFtZVxuICB9XG5cbiAgZ2V0KGlkOiBzdHJpbmcpOiBJUGx1Z2luIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5saXN0LmdldChpZClcbiAgfVxuXG4gIGdldExpc3QoKTogSVBsdWdpbltdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMubGlzdC52YWx1ZXMoKV1cbiAgfVxuXG4gIGdldElkTGlzdCgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLmxpc3Qua2V5cygpXVxuICB9XG59XG5cbmV4cG9ydCBjb25zdCBzZXRDdXJyZW50UGx1Z2luTmFtZSA9IChuYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbCk6IHZvaWQgPT4ge1xuICBMaWZlY3ljbGVQbHVnaW5zLmN1cnJlbnRQbHVnaW4gPSBuYW1lXG59XG5cbmV4cG9ydCBjb25zdCBnZXRDdXJyZW50UGx1Z2luTmFtZSA9ICgpOiBzdHJpbmcgfCBudWxsID0+IHtcbiAgcmV0dXJuIExpZmVjeWNsZVBsdWdpbnMuY3VycmVudFBsdWdpblxufVxuXG5leHBvcnQgZGVmYXVsdCBMaWZlY3ljbGVQbHVnaW5zXG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbWlzdXNlZC1wcm9taXNlcyAqL1xuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcidcbmltcG9ydCBpbnF1aXJlciwgeyBJbnF1aXJlciB9IGZyb20gJ2lucXVpcmVyJ1xuXG5pbXBvcnQgY29tbWFuZGVycyBmcm9tICcuLi9wbHVnaW5zL2NvbW1hbmRlcidcbmltcG9ydCB7IGdldEN1cnJlbnRQbHVnaW5OYW1lIH0gZnJvbSAnLi9MaWZlY3ljbGVQbHVnaW5zJ1xuXG5pbXBvcnQgeyBJUGx1Z2luLCBJQ29tbWFuZGVyLCBJUGljR28gfSBmcm9tICcuLi90eXBlcydcblxuZXhwb3J0IGNsYXNzIENvbW1hbmRlciBpbXBsZW1lbnRzIElDb21tYW5kZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IG5hbWUgPSAnY29tbWFuZGVyJ1xuICBzdGF0aWMgY3VycmVudFBsdWdpbjogc3RyaW5nIHwgbnVsbFxuICBwcml2YXRlIHJlYWRvbmx5IGxpc3QgPSBuZXcgTWFwPHN0cmluZywgSVBsdWdpbj4oKVxuICBwcml2YXRlIHJlYWRvbmx5IHBsdWdpbklkTWFwID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZ1tdPigpXG4gIHByaXZhdGUgcmVhZG9ubHkgY3R4OiBJUGljR29cblxuICBwcm9ncmFtOiBDb21tYW5kXG4gIGlucXVpcmVyOiBJbnF1aXJlclxuXG4gIGNvbnN0cnVjdG9yKGN0eDogSVBpY0dvKSB7XG4gICAgdGhpcy5wcm9ncmFtID0gbmV3IENvbW1hbmQoKVxuICAgIHRoaXMuaW5xdWlyZXIgPSBpbnF1aXJlclxuICAgIHRoaXMuY3R4ID0gY3R4XG4gIH1cblxuICBnZXROYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubmFtZVxuICB9XG5cbiAgaW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnByb2dyYW1cbiAgICAgIC52ZXJzaW9uKHByb2Nlc3MuZW52LlBJQ0dPX1ZFUlNJT04sICctdiwgLS12ZXJzaW9uJylcbiAgICAgIC5vcHRpb24oJy1kLCAtLWRlYnVnJywgJ2RlYnVnIG1vZGUnLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuY3R4LnNldENvbmZpZyh7XG4gICAgICAgICAgZGVidWc6IHRydWVcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgICAub3B0aW9uKCctcywgLS1zaWxlbnQnLCAnc2lsZW50IG1vZGUnLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuY3R4LnNldENvbmZpZyh7XG4gICAgICAgICAgc2lsZW50OiB0cnVlXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgICAgLm9uKCdjb21tYW5kOionLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihcbiAgICAgICAgICBgSW52YWxpZCBjb21tYW5kOiAke3RoaXMucHJvZ3JhbS5hcmdzLmpvaW4oJyAnKX1cXG5TZWUgLS1oZWxwIGZvciBhIGxpc3Qgb2YgYXZhaWxhYmxlIGNvbW1hbmRzLmBcbiAgICAgICAgKVxuICAgICAgICBwcm9jZXNzLmV4aXQoMSlcbiAgICAgIH0pXG5cbiAgICAvLyBidWlsdC1pbiBjb21tYW5kc1xuICAgIGNvbW1hbmRlcnModGhpcy5jdHgpXG4gIH1cblxuICByZWdpc3RlcihpZDogc3RyaW5nLCBwbHVnaW46IElQbHVnaW4pOiB2b2lkIHtcbiAgICBpZiAoIWlkKSB0aHJvdyBuZXcgVHlwZUVycm9yKCduYW1lIGlzIHJlcXVpcmVkIScpXG4gICAgaWYgKHR5cGVvZiBwbHVnaW4uaGFuZGxlICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdwbHVnaW4uaGFuZGxlIG11c3QgYmUgYSBmdW5jdGlvbiEnKVxuICAgIGlmICh0aGlzLmxpc3QuaGFzKGlkKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHt0aGlzLm5hbWV9IHBsdWdpbiBkdXBsaWNhdGUgaWQ6ICR7aWR9IWApXG4gICAgdGhpcy5saXN0LnNldChpZCwgcGx1Z2luKVxuICAgIGNvbnN0IGN1cnJlbnRQbHVnaW5OYW1lID0gZ2V0Q3VycmVudFBsdWdpbk5hbWUoKVxuICAgIGlmIChjdXJyZW50UGx1Z2luTmFtZSAhPT0gbnVsbCkge1xuICAgICAgaWYgKHRoaXMucGx1Z2luSWRNYXAuaGFzKGN1cnJlbnRQbHVnaW5OYW1lKSkge1xuICAgICAgICB0aGlzLnBsdWdpbklkTWFwLmdldChjdXJyZW50UGx1Z2luTmFtZSk/LnB1c2goaWQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBsdWdpbklkTWFwLnNldChjdXJyZW50UGx1Z2luTmFtZSwgW2lkXSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB1bnJlZ2lzdGVyKHBsdWdpbk5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLnBsdWdpbklkTWFwLmhhcyhwbHVnaW5OYW1lKSkge1xuICAgICAgY29uc3QgcGx1Z2luTGlzdCA9IHRoaXMucGx1Z2luSWRNYXAuZ2V0KHBsdWdpbk5hbWUpXG4gICAgICBwbHVnaW5MaXN0Py5mb3JFYWNoKChwbHVnaW46IHN0cmluZykgPT4ge1xuICAgICAgICB0aGlzLmxpc3QuZGVsZXRlKHBsdWdpbilcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgbG9hZENvbW1hbmRzKCk6IHZvaWQge1xuICAgIHRoaXMuZ2V0TGlzdCgpLmZvckVhY2goKGl0ZW06IElQbHVnaW4pID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGl0ZW0uaGFuZGxlKHRoaXMuY3R4KVxuICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBnZXQoaWQ6IHN0cmluZyk6IElQbHVnaW4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmxpc3QuZ2V0KGlkKVxuICB9XG5cbiAgZ2V0TGlzdCgpOiBJUGx1Z2luW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5saXN0LnZhbHVlcygpXVxuICB9XG5cbiAgZ2V0SWRMaXN0KCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMubGlzdC5rZXlzKCldXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29tbWFuZGVyXG4iLCJpbXBvcnQgcGx1Z2luSGFuZGxlciBmcm9tICcuL3BsdWdpbkhhbmRsZXInXG5pbXBvcnQgY29uZmlnIGZyb20gJy4vY29uZmlnJ1xuaW1wb3J0IHVwbG9hZCBmcm9tICcuL3VwbG9hZCdcbmltcG9ydCBzZXR0aW5nIGZyb20gJy4vc2V0dGluZydcbmltcG9ydCB1c2UgZnJvbSAnLi91c2UnXG5pbXBvcnQgcHJveHkgZnJvbSAnLi9wcm94eSdcbmltcG9ydCBpbml0IGZyb20gJy4vaW5pdCdcbmltcG9ydCBpMThuIGZyb20gJy4vaTE4bidcblxuaW1wb3J0IHsgSVBpY0dvIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5cbmV4cG9ydCBkZWZhdWx0IChjdHg6IElQaWNHbyk6IHZvaWQgPT4ge1xuICBjdHguY21kLnJlZ2lzdGVyKCdwbHVnaW5IYW5kbGVyJywgcGx1Z2luSGFuZGxlcilcbiAgY3R4LmNtZC5yZWdpc3RlcignY29uZmlnJywgY29uZmlnKVxuICBjdHguY21kLnJlZ2lzdGVyKCdzZXR0aW5nJywgc2V0dGluZylcbiAgY3R4LmNtZC5yZWdpc3RlcigndXBsb2FkJywgdXBsb2FkKVxuICBjdHguY21kLnJlZ2lzdGVyKCd1c2UnLCB1c2UpXG4gIGN0eC5jbWQucmVnaXN0ZXIoJ3Byb3h5JywgcHJveHkpXG4gIGN0eC5jbWQucmVnaXN0ZXIoJ2luaXQnLCBpbml0KVxuICBjdHguY21kLnJlZ2lzdGVyKCdpMThuJywgaTE4bilcbn1cbiIsImV4cG9ydCBlbnVtIElMb2dUeXBlIHtcbiAgc3VjY2VzcyA9ICdzdWNjZXNzJyxcbiAgaW5mbyA9ICdpbmZvJyxcbiAgd2FybiA9ICd3YXJuJyxcbiAgZXJyb3IgPSAnZXJyb3InXG59XG5cbi8qKlxuICogdGhlc2UgZXZlbnRzIHdpbGwgYmUgY2F0Y2hlZCBieSB1c2Vyc1xuICovXG5leHBvcnQgZW51bSBJQnVpbGRJbkV2ZW50IHtcbiAgVVBMT0FEX1BST0dSRVNTID0gJ3VwbG9hZFByb2dyZXNzJyxcbiAgRkFJTEVEID0gJ2ZhaWxlZCcsXG4gIEJFRk9SRV9UUkFOU0ZPUk0gPSAnYmVmb3JlVHJhbnNmb3JtJyxcbiAgQkVGT1JFX1VQTE9BRCA9ICdiZWZvcmVVcGxvYWQnLFxuICBBRlRFUl9VUExPQUQgPSAnYWZ0ZXJVcGxvYWQnLFxuICBGSU5JU0hFRCA9ICdmaW5pc2hlZCcsXG4gIElOU1RBTEwgPSAnaW5zdGFsbCcsXG4gIFVOSU5TVEFMTCA9ICd1bmluc3RhbGwnLFxuICBVUERBVEUgPSAndXBkYXRlJyxcbiAgTk9USUZJQ0FUSU9OID0gJ25vdGlmaWNhdGlvbidcbn1cblxuLyoqXG4gKiB0aGVzZSBldmVudHMgd2lsbCBiZSBjYXRjaGVkIG9ubHkgYnkgcGljZ29cbiAqL1xuZXhwb3J0IGVudW0gSUJ1c0V2ZW50IHtcbiAgQ09ORklHX0NIQU5HRSA9ICdDT05GSUdfQ0hBTkdFJ1xufVxuIiwiaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJ1xuaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJ1xuaW1wb3J0IGZzLCB7IGNyZWF0ZUZpbGVTeW5jIH0gZnJvbSAnZnMtZXh0cmEnXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuaW1wb3J0IHV0aWwgZnJvbSAndXRpbCdcblxuaW1wb3J0IHsgSUxvZ1R5cGUgfSBmcm9tICcuLi91dGlscy9lbnVtJ1xuaW1wb3J0IHsgSUxvZ0FyZ3ZUeXBlLCBJTG9nQXJndlR5cGVXaXRoRXJyb3IsIFVuZGVmaW5hYmxlLCBJTG9nQ29sb3IsIElMb2dnZXIsIElQaWNHbyB9IGZyb20gJy4uL3R5cGVzJ1xuaW1wb3J0IHsgZm9yY2VOdW1iZXIsIGlzRGV2IH0gZnJvbSAnLi4vdXRpbHMvY29tbW9uJ1xuXG5leHBvcnQgY2xhc3MgTG9nZ2VyIGltcGxlbWVudHMgSUxvZ2dlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgbGV2ZWwgPSB7XG4gICAgW0lMb2dUeXBlLnN1Y2Nlc3NdOiAnZ3JlZW4nLFxuICAgIFtJTG9nVHlwZS5pbmZvXTogJ2JsdWUnLFxuICAgIFtJTG9nVHlwZS53YXJuXTogJ3llbGxvdycsXG4gICAgW0lMb2dUeXBlLmVycm9yXTogJ3JlZCdcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgY3R4OiBJUGljR29cbiAgcHJpdmF0ZSBsb2dMZXZlbCE6IHN0cmluZyB8IHN0cmluZ1tdXG4gIHByaXZhdGUgbG9nUGF0aCE6IHN0cmluZ1xuICBjb25zdHJ1Y3RvcihjdHg6IElQaWNHbykge1xuICAgIHRoaXMuY3R4ID0gY3R4XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUxvZyh0eXBlOiBJTG9nVHlwZSwgLi4ubXNnOiBJTG9nQXJndlR5cGVXaXRoRXJyb3JbXSk6IHZvaWQge1xuICAgIHRoaXMubG9nTGV2ZWwgPSB0aGlzLmN0eC5nZXRDb25maWcoJ3NldHRpbmdzLmxvZ0xldmVsJylcbiAgICBpZiAoIXRoaXMuY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+Pignc2lsZW50JykgJiYgdGhpcy5jaGVja0xvZ0xldmVsKHR5cGUsIHRoaXMubG9nTGV2ZWwpKSB7XG4gICAgICBjb25zdCBsb2dIZWFkZXIgPSBjaGFsa1t0aGlzLmxldmVsW3R5cGVdIGFzIElMb2dDb2xvcl0oYFtQaWNMaXN0ICR7dHlwZS50b1VwcGVyQ2FzZSgpfV06YClcbiAgICAgIGNvbnNvbGUubG9nKGxvZ0hlYWRlciwgLi4ubXNnKVxuICAgICAgdGhpcy5sb2dQYXRoID1cbiAgICAgICAgdGhpcy5jdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdzZXR0aW5ncy5sb2dQYXRoJykgfHwgcGF0aC5qb2luKHRoaXMuY3R4LmJhc2VEaXIsICcuL3BpY2xpc3QubG9nJylcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuY2hlY2tMb2dGaWxlSXNMYXJnZSh0aGlzLmxvZ1BhdGgpXG4gICAgICAgICAgaWYgKHJlc3VsdC5pc0xhcmdlKSB7XG4gICAgICAgICAgICBjb25zdCB3YXJuaW5nTXNnID0gYExvZyBmaWxlIGlzIHRvbyBsYXJnZSAoPiAke3Jlc3VsdC5sb2dGaWxlU2l6ZUxpbWl0ISAvIDEwMjQgLyAxMDI0IHx8ICcxMCd9IE1CKSwgcmVjcmVhdGUgbG9nIGZpbGVgXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coJ1tQaWNMaXN0IFdBUk5dOicpLCB3YXJuaW5nTXNnKVxuICAgICAgICAgICAgdGhpcy5yZWNyZWF0ZUxvZ0ZpbGUodGhpcy5sb2dQYXRoKVxuICAgICAgICAgICAgbXNnLnVuc2hpZnQod2FybmluZ01zZylcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5oYW5kbGVXcml0ZUxvZyh0aGlzLmxvZ1BhdGgsIHR5cGUsIC4uLm1zZylcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tQaWNMaXN0IEVycm9yXSBvbiBjaGVja2luZyBsb2cgZmlsZSBzaXplJywgZSlcbiAgICAgICAgfVxuICAgICAgfSwgMClcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNoZWNrTG9nRmlsZUlzTGFyZ2UobG9nUGF0aDogc3RyaW5nKToge1xuICAgIGlzTGFyZ2U6IGJvb2xlYW5cbiAgICBsb2dGaWxlU2l6ZT86IG51bWJlclxuICAgIGxvZ0ZpbGVTaXplTGltaXQ/OiBudW1iZXJcbiAgfSB7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMobG9nUGF0aCkpIHtcbiAgICAgIGNvbnN0IGxvZ0ZpbGVTaXplID0gZnMuc3RhdFN5bmMobG9nUGF0aCkuc2l6ZVxuICAgICAgY29uc3QgbG9nRmlsZVNpemVMaW1pdCA9XG4gICAgICAgIGZvcmNlTnVtYmVyKHRoaXMuY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxudW1iZXI+Pignc2V0dGluZ3MubG9nRmlsZVNpemVMaW1pdCcpIHx8IDEwKSAqIDEwMjQgKiAxMDI0IC8vIDEwIE1CIGRlZmF1bHRcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzTGFyZ2U6IGxvZ0ZpbGVTaXplID4gbG9nRmlsZVNpemVMaW1pdCxcbiAgICAgICAgbG9nRmlsZVNpemUsXG4gICAgICAgIGxvZ0ZpbGVTaXplTGltaXRcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHsgaXNMYXJnZTogZmFsc2UgfVxuICB9XG5cbiAgcHJpdmF0ZSByZWNyZWF0ZUxvZ0ZpbGUobG9nUGF0aDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMobG9nUGF0aCkpIHtcbiAgICAgIGZzLnVubGlua1N5bmMobG9nUGF0aClcbiAgICAgIGNyZWF0ZUZpbGVTeW5jKGxvZ1BhdGgpXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVXcml0ZUxvZyhsb2dQYXRoOiBzdHJpbmcsIHR5cGU6IHN0cmluZywgLi4ubXNnOiBJTG9nQXJndlR5cGVXaXRoRXJyb3JbXSk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBsZXQgbG9nID0gYCR7ZGF5anMoKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW06c3MnKX0gW1BpY0xpc3QgJHt0eXBlLnRvVXBwZXJDYXNlKCl9XSBgXG4gICAgICBtc2cuZm9yRWFjaCgoaXRlbTogSUxvZ0FyZ3ZUeXBlV2l0aEVycm9yKSA9PiB7XG4gICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgRXJyb3IgJiYgdHlwZSA9PT0gJ2Vycm9yJykge1xuICAgICAgICAgIGxvZyArPSBgXFxuLS0tLS0tRXJyb3IgU3RhY2sgQmVnaW4tLS0tLS1cXG4ke3V0aWwuZm9ybWF0KGl0ZW0/LnN0YWNrKX1cXG4tLS0tLS0tRXJyb3IgU3RhY2sgRW5kLS0tLS0tLSBgXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgaXRlbSA9IEpTT04uc3RyaW5naWZ5KGl0ZW0sIG51bGwsIDIpXG4gICAgICAgICAgfVxuICAgICAgICAgIGxvZyArPSBgJHtpdGVtIGFzIHN0cmluZ30gYFxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgbG9nICs9ICdcXG4nXG4gICAgICBmcy5hcHBlbmRGaWxlU3luYyhsb2dQYXRoLCBsb2cpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcignW1BpY0xpc3QgRXJyb3JdIG9uIHdyaXRpbmcgbG9nIGZpbGUnLCBlKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tMb2dMZXZlbCh0eXBlOiBzdHJpbmcsIGxldmVsOiB1bmRlZmluZWQgfCBzdHJpbmcgfCBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICAgIGlmIChsZXZlbCA9PT0gdW5kZWZpbmVkIHx8IGxldmVsID09PSAnYWxsJykgcmV0dXJuIHRydWVcbiAgICBpZiAoQXJyYXkuaXNBcnJheShsZXZlbCkpIHtcbiAgICAgIHJldHVybiBsZXZlbC5zb21lKChpdGVtOiBzdHJpbmcpID0+IGl0ZW0gPT09IHR5cGUgfHwgaXRlbSA9PT0gJ2FsbCcpXG4gICAgfVxuICAgIHJldHVybiB0eXBlID09PSBsZXZlbFxuICB9XG5cbiAgc3VjY2VzcyguLi5tc2c6IElMb2dBcmd2VHlwZVtdKTogdm9pZCB7XG4gICAgdGhpcy5oYW5kbGVMb2coSUxvZ1R5cGUuc3VjY2VzcywgLi4ubXNnKVxuICB9XG5cbiAgaW5mbyguLi5tc2c6IElMb2dBcmd2VHlwZVtdKTogdm9pZCB7XG4gICAgdGhpcy5oYW5kbGVMb2coSUxvZ1R5cGUuaW5mbywgLi4ubXNnKVxuICB9XG5cbiAgZXJyb3IoLi4ubXNnOiBJTG9nQXJndlR5cGVXaXRoRXJyb3JbXSk6IHZvaWQge1xuICAgIHRoaXMuaGFuZGxlTG9nKElMb2dUeXBlLmVycm9yLCAuLi5tc2cpXG4gIH1cblxuICB3YXJuKC4uLm1zZzogSUxvZ0FyZ3ZUeXBlW10pOiB2b2lkIHtcbiAgICB0aGlzLmhhbmRsZUxvZyhJTG9nVHlwZS53YXJuLCAuLi5tc2cpXG4gIH1cblxuICBkZWJ1ZyguLi5tc2c6IElMb2dBcmd2VHlwZVtdKTogdm9pZCB7XG4gICAgaWYgKGlzRGV2KCkpIHtcbiAgICAgIHRoaXMuaGFuZGxlTG9nKElMb2dUeXBlLmluZm8sIC4uLm1zZylcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTG9nZ2VyXG4iLCJpbXBvcnQgeyBzcGF3biB9IGZyb20gJ2Nyb3NzLXNwYXduJ1xuaW1wb3J0IHtcbiAgSVJlc3VsdCxcbiAgSVByb2Nlc3NFbnYsXG4gIElQbHVnaW5Qcm9jZXNzUmVzdWx0LFxuICBJUGx1Z2luSGFuZGxlcixcbiAgSVBsdWdpbkhhbmRsZXJPcHRpb25zLFxuICBVbmRlZmluYWJsZSxcbiAgSVBpY0dvLFxuICBJUGx1Z2luSGFuZGxlclJlc3VsdFxufSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi91dGlscy9lbnVtJ1xuaW1wb3J0IHsgZ2V0UHJvY2Vzc1BsdWdpbk5hbWUsIGdldE5vcm1hbFBsdWdpbk5hbWUgfSBmcm9tICcuLi91dGlscy9jb21tb24nXG5pbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uL2kxOG4vemgtQ04nXG5cbmV4cG9ydCBjbGFzcyBQbHVnaW5IYW5kbGVyIGltcGxlbWVudHMgSVBsdWdpbkhhbmRsZXIge1xuICAvLyBUaGFua3MgdG8gZmVmbG93IC0+IGh0dHBzOi8vZ2l0aHViLmNvbS9mZWZsb3cvZmVmbG93L2Jsb2IvbWFzdGVyL2xpYi9pbnRlcm5hbC9pbnN0YWxsL3BsdWdpbi5qc1xuICBwcml2YXRlIHJlYWRvbmx5IGN0eDogSVBpY0dvXG4gIGNvbnN0cnVjdG9yKGN0eDogSVBpY0dvKSB7XG4gICAgdGhpcy5jdHggPSBjdHhcbiAgfVxuXG4gIGFzeW5jIGluc3RhbGwoXG4gICAgcGx1Z2luczogc3RyaW5nW10sXG4gICAgb3B0aW9uczogSVBsdWdpbkhhbmRsZXJPcHRpb25zID0ge30sXG4gICAgZW52PzogSVByb2Nlc3NFbnZcbiAgKTogUHJvbWlzZTxJUGx1Z2luSGFuZGxlclJlc3VsdDxib29sZWFuPj4ge1xuICAgIGNvbnN0IGluc3RhbGxlZFBsdWdpbnM6IHN0cmluZ1tdID0gW11cbiAgICBjb25zdCBwcm9jZXNzUGx1Z2lucyA9IHBsdWdpbnNcbiAgICAgIC5tYXAoKGl0ZW06IHN0cmluZykgPT4gaGFuZGxlUGx1Z2luTmFtZVByb2Nlc3ModGhpcy5jdHgsIGl0ZW0pKVxuICAgICAgLmZpbHRlcihpdGVtID0+IHtcbiAgICAgICAgLy8gZGV0ZWN0IGlmIGhhcyBhbHJlYWR5IGluc3RhbGxlZFxuICAgICAgICAvLyBvciB3aWxsIGNhdXNlIGVycm9yXG4gICAgICAgIGlmICh0aGlzLmN0eC5wbHVnaW5Mb2FkZXIuaGFzUGx1Z2luKGl0ZW0ucGtnTmFtZSkpIHtcbiAgICAgICAgICBpbnN0YWxsZWRQbHVnaW5zLnB1c2goaXRlbS5wa2dOYW1lKVxuICAgICAgICAgIHRoaXMuY3R4LmxvZy5zdWNjZXNzKGBQaWNMaXN0IGhhcyBhbHJlYWR5IGluc3RhbGxlZCAke2l0ZW0ucGtnTmFtZX1gKVxuICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHNvbWV0aGluZyB3cm9uZywgZmlsdGVyIGl0IG91dFxuICAgICAgICBpZiAoIWl0ZW0uc3VjY2Vzcykge1xuICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9KVxuICAgIGNvbnN0IGZ1bGxOYW1lTGlzdCA9IHByb2Nlc3NQbHVnaW5zLm1hcChpdGVtID0+IGl0ZW0uZnVsbE5hbWUpXG4gICAgY29uc3QgcGtnTmFtZUxpc3QgPSBwcm9jZXNzUGx1Z2lucy5tYXAoaXRlbSA9PiBpdGVtLnBrZ05hbWUpXG4gICAgaWYgKGZ1bGxOYW1lTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBpbnN0YWxsIHBsdWdpbnMgbXVzdCB1c2UgZnVsbE5hbWVMaXN0OlxuICAgICAgLy8gMS4gaW5zdGFsbCByZW1vdGUgcGFjYWdlXG4gICAgICAvLyAyLiBpbnN0YWxsIGxvY2FsIHBhY2FnZVxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5leGVjQ29tbWFuZCgnaW5zdGFsbCcsIGZ1bGxOYW1lTGlzdCwgdGhpcy5jdHguYmFzZURpciwgb3B0aW9ucywgZW52KVxuICAgICAgaWYgKCFyZXN1bHQuY29kZSkge1xuICAgICAgICBwa2dOYW1lTGlzdC5mb3JFYWNoKChwbHVnaW5OYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICB0aGlzLmN0eC5wbHVnaW5Mb2FkZXIucmVnaXN0ZXJQbHVnaW4ocGx1Z2luTmFtZSlcbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy5jdHgubG9nLnN1Y2Nlc3ModGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9TVUNDRVNTJykpXG4gICAgICAgIHRoaXMuY3R4LmVtaXQoJ2luc3RhbGxTdWNjZXNzJywge1xuICAgICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX1NVQ0NFU1MnKSxcbiAgICAgICAgICBib2R5OiBbLi4ucGtnTmFtZUxpc3QsIC4uLmluc3RhbGxlZFBsdWdpbnNdXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8dHJ1ZT4gPSB7XG4gICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICBib2R5OiBbLi4ucGtnTmFtZUxpc3QsIC4uLmluc3RhbGxlZFBsdWdpbnNdXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZXJyID0gdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRURfUkVBU09OJywge1xuICAgICAgICAgIGNvZGU6IGAke3Jlc3VsdC5jb2RlfWAsXG4gICAgICAgICAgZGF0YTogcmVzdWx0LmRhdGFcbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGVycilcbiAgICAgICAgdGhpcy5jdHguZW1pdCgnaW5zdGFsbEZhaWxlZCcsIHtcbiAgICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRUQnKSxcbiAgICAgICAgICBib2R5OiBlcnJcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgcmVzOiBJUGx1Z2luSGFuZGxlclJlc3VsdDxmYWxzZT4gPSB7XG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgYm9keTogZXJyXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaW5zdGFsbGVkUGx1Z2lucy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnN0IGVyciA9IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfVkFMSUQnKVxuICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGVycilcbiAgICAgIHRoaXMuY3R4LmVtaXQoJ2luc3RhbGxGYWlsZWQnLCB7XG4gICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRCcpLFxuICAgICAgICBib2R5OiBlcnJcbiAgICAgIH0pXG4gICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PGZhbHNlPiA9IHtcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgIGJvZHk6IGVyclxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN0eC5sb2cuc3VjY2Vzcyh0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX1NVQ0NFU1MnKSlcbiAgICAgIHRoaXMuY3R4LmVtaXQoJ2luc3RhbGxTdWNjZXNzJywge1xuICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9TVUNDRVNTJyksXG4gICAgICAgIGJvZHk6IFsuLi5wa2dOYW1lTGlzdCwgLi4uaW5zdGFsbGVkUGx1Z2luc11cbiAgICAgIH0pXG4gICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PHRydWU+ID0ge1xuICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICBib2R5OiBbLi4ucGtnTmFtZUxpc3QsIC4uLmluc3RhbGxlZFBsdWdpbnNdXG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdW5pbnN0YWxsKHBsdWdpbnM6IHN0cmluZ1tdKTogUHJvbWlzZTxJUGx1Z2luSGFuZGxlclJlc3VsdDxib29sZWFuPj4ge1xuICAgIGNvbnN0IHByb2Nlc3NQbHVnaW5zID0gcGx1Z2luc1xuICAgICAgLm1hcCgoaXRlbTogc3RyaW5nKSA9PiBoYW5kbGVQbHVnaW5OYW1lUHJvY2Vzcyh0aGlzLmN0eCwgaXRlbSkpXG4gICAgICAuZmlsdGVyKGl0ZW0gPT4gaXRlbS5zdWNjZXNzKVxuICAgIGNvbnN0IHBrZ05hbWVMaXN0ID0gcHJvY2Vzc1BsdWdpbnMubWFwKGl0ZW0gPT4gaXRlbS5wa2dOYW1lKVxuICAgIGlmIChwa2dOYW1lTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAvLyB1bmluc3RhbGwgcGx1Z2lucyBtdXN0IHVzZSBwa2dOYW1lTGlzdDpcbiAgICAgIC8vIG5wbSB1bmluc3RhbGwgd2lsbCB1c2UgdGhlIHBhY2thZ2UuanNvbidzIG5hbWVcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhlY0NvbW1hbmQoJ3VuaW5zdGFsbCcsIHBrZ05hbWVMaXN0LCB0aGlzLmN0eC5iYXNlRGlyKVxuICAgICAgaWYgKCFyZXN1bHQuY29kZSkge1xuICAgICAgICBwa2dOYW1lTGlzdC5mb3JFYWNoKChwbHVnaW5OYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICB0aGlzLmN0eC5wbHVnaW5Mb2FkZXIudW5yZWdpc3RlclBsdWdpbihwbHVnaW5OYW1lKVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLmN0eC5sb2cuc3VjY2Vzcyh0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfU1VDQ0VTUycpKVxuICAgICAgICB0aGlzLmN0eC5lbWl0KCd1bmluc3RhbGxTdWNjZXNzJywge1xuICAgICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfU1VDQ0VTUycpLFxuICAgICAgICAgIGJvZHk6IHBrZ05hbWVMaXN0XG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8dHJ1ZT4gPSB7XG4gICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgICBib2R5OiBwa2dOYW1lTGlzdFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGVyciA9IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfUkVBU09OJywge1xuICAgICAgICAgIGNvZGU6IGAke3Jlc3VsdC5jb2RlfWAsXG4gICAgICAgICAgZGF0YTogcmVzdWx0LmRhdGFcbiAgICAgICAgfSlcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGVycilcbiAgICAgICAgdGhpcy5jdHguZW1pdCgndW5pbnN0YWxsRmFpbGVkJywge1xuICAgICAgICAgIHRpdGxlOiB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEJyksXG4gICAgICAgICAgYm9keTogZXJyXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IHJlczogSVBsdWdpbkhhbmRsZXJSZXN1bHQ8ZmFsc2U+ID0ge1xuICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgIGJvZHk6IGVyclxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZXJyID0gdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9WQUxJRCcpXG4gICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZXJyKVxuICAgICAgdGhpcy5jdHguZW1pdCgndW5pbnN0YWxsRmFpbGVkJywge1xuICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRCcpLFxuICAgICAgICBib2R5OiBlcnJcbiAgICAgIH0pXG4gICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PGZhbHNlPiA9IHtcbiAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgIGJvZHk6IGVyclxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZShcbiAgICBwbHVnaW5zOiBzdHJpbmdbXSxcbiAgICBvcHRpb25zOiBJUGx1Z2luSGFuZGxlck9wdGlvbnMgPSB7fSxcbiAgICBlbnY/OiBJUHJvY2Vzc0VudlxuICApOiBQcm9taXNlPElQbHVnaW5IYW5kbGVyUmVzdWx0PGJvb2xlYW4+PiB7XG4gICAgY29uc3QgcHJvY2Vzc1BsdWdpbnMgPSBwbHVnaW5zXG4gICAgICAubWFwKChpdGVtOiBzdHJpbmcpID0+IGhhbmRsZVBsdWdpbk5hbWVQcm9jZXNzKHRoaXMuY3R4LCBpdGVtKSlcbiAgICAgIC5maWx0ZXIoaXRlbSA9PiBpdGVtLnN1Y2Nlc3MpXG4gICAgY29uc3QgcGtnTmFtZUxpc3QgPSBwcm9jZXNzUGx1Z2lucy5tYXAoaXRlbSA9PiBpdGVtLnBrZ05hbWUpXG4gICAgaWYgKHBrZ05hbWVMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIHVwZGF0ZSBwbHVnaW5zIG11c3QgdXNlIHBrZ05hbWVMaXN0OlxuICAgICAgLy8gbnBtIHVwZGF0ZSB3aWxsIHVzZSB0aGUgcGFja2FnZS5qc29uJ3MgbmFtZVxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5leGVjQ29tbWFuZCgndXBkYXRlJywgcGtnTmFtZUxpc3QsIHRoaXMuY3R4LmJhc2VEaXIsIG9wdGlvbnMsIGVudilcbiAgICAgIGlmICghcmVzdWx0LmNvZGUpIHtcbiAgICAgICAgdGhpcy5jdHgubG9nLnN1Y2Nlc3ModGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX1NVQ0NFU1MnKSlcbiAgICAgICAgdGhpcy5jdHguZW1pdCgndXBkYXRlU3VjY2VzcycsIHtcbiAgICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX1NVQ0NFU1MnKSxcbiAgICAgICAgICBib2R5OiBwa2dOYW1lTGlzdFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PHRydWU+ID0ge1xuICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgYm9keTogcGtnTmFtZUxpc3RcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBlcnIgPSB0aGlzLmN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1JFQVNPTicsIHtcbiAgICAgICAgICBjb2RlOiBgJHtyZXN1bHQuY29kZX1gLFxuICAgICAgICAgIGRhdGE6IHJlc3VsdC5kYXRhXG4gICAgICAgIH0pXG4gICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlcnIpXG4gICAgICAgIHRoaXMuY3R4LmVtaXQoJ3VwZGF0ZUZhaWxlZCcsIHtcbiAgICAgICAgICB0aXRsZTogdGhpcy5jdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRCcpLFxuICAgICAgICAgIGJvZHk6IGVyclxuICAgICAgICB9KVxuICAgICAgICBjb25zdCByZXM6IElQbHVnaW5IYW5kbGVyUmVzdWx0PGZhbHNlPiA9IHtcbiAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICBib2R5OiBlcnJcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGVyciA9IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfVkFMSUQnKVxuICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGVycilcbiAgICAgIHRoaXMuY3R4LmVtaXQoJ3VwZGF0ZUZhaWxlZCcsIHtcbiAgICAgICAgdGl0bGU6IHRoaXMuY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRUQnKSxcbiAgICAgICAgYm9keTogZXJyXG4gICAgICB9KVxuICAgICAgY29uc3QgcmVzOiBJUGx1Z2luSGFuZGxlclJlc3VsdDxmYWxzZT4gPSB7XG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICBib2R5OiBlcnJcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGV4ZWNDb21tYW5kKFxuICAgIGNtZDogc3RyaW5nLFxuICAgIG1vZHVsZXM6IHN0cmluZ1tdLFxuICAgIHdoZXJlOiBzdHJpbmcsXG4gICAgb3B0aW9uczogSVBsdWdpbkhhbmRsZXJPcHRpb25zID0ge30sXG4gICAgZW52OiBJUHJvY2Vzc0VudiA9IHt9XG4gICk6IFByb21pc2U8SVJlc3VsdD4ge1xuICAgIC8vIG9wdGlvbnMgZmlyc3RcbiAgICBjb25zdCByZWdpc3RyeSA9IG9wdGlvbnMucmVnaXN0cnkgfHwgdGhpcy5jdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdzZXR0aW5ncy5yZWdpc3RyeScpXG4gICAgY29uc3QgcHJveHkgPSBvcHRpb25zLnByb3h5IHx8IHRoaXMuY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+Pignc2V0dGluZ3MucHJveHknKVxuICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTogYW55KTogdm9pZCA9PiB7XG4gICAgICBsZXQgYXJncyA9IFtjbWRdLmNvbmNhdChtb2R1bGVzKS5jb25jYXQoJy0tY29sb3I9YWx3YXlzJykuY29uY2F0KCctLXNhdmUnKVxuICAgICAgaWYgKHJlZ2lzdHJ5KSB7XG4gICAgICAgIGFyZ3MgPSBhcmdzLmNvbmNhdChgLS1yZWdpc3RyeT0ke3JlZ2lzdHJ5fWApXG4gICAgICB9XG4gICAgICBpZiAocHJveHkpIHtcbiAgICAgICAgYXJncyA9IGFyZ3MuY29uY2F0KGAtLXByb3h5PSR7cHJveHl9YClcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG5wbSA9IHNwYXduKCducG0nLCBhcmdzLCB7XG4gICAgICAgICAgY3dkOiB3aGVyZSxcbiAgICAgICAgICBlbnY6IE9iamVjdC5hc3NpZ24oe30sIHByb2Nlc3MuZW52LCBlbnYpXG4gICAgICAgIH0pXG5cbiAgICAgICAgbGV0IG91dHB1dCA9ICcnXG4gICAgICAgIG5wbS5zdGRvdXRcbiAgICAgICAgICA/Lm9uKCdkYXRhJywgKGRhdGE6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgb3V0cHV0ICs9IGRhdGFcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5waXBlKHByb2Nlc3Muc3Rkb3V0KVxuXG4gICAgICAgIG5wbS5zdGRlcnJcbiAgICAgICAgICA/Lm9uKCdkYXRhJywgKGRhdGE6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgb3V0cHV0ICs9IGRhdGFcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5waXBlKHByb2Nlc3Muc3RkZXJyKVxuXG4gICAgICAgIG5wbS5vbignY2xvc2UnLCAoY29kZTogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgaWYgKCFjb2RlKSB7XG4gICAgICAgICAgICByZXNvbHZlKHsgY29kZTogMCwgZGF0YTogb3V0cHV0IH0pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc29sdmUoeyBjb2RlLCBkYXRhOiBvdXRwdXQgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC8vIGZvciB1c2VycyB3aG8gaGF2ZW4ndCBpbnN0YWxsZWQgbm9kZS5qc1xuICAgICAgICBucG0ub24oJ2Vycm9yJywgKGVycjogRXJyb3IpID0+IHtcbiAgICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZXJyKVxuICAgICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcignTlBNIGlzIG5vdCBpbnN0YWxsZWQnKVxuICAgICAgICAgIHRoaXMuY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5GQUlMRUQsICdOUE0gaXMgbm90IGluc3RhbGxlZCcpXG4gICAgICAgIH0pXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlIGFzIEVycm9yKVxuICAgICAgICB0aGlzLmN0eC5lbWl0KElCdWlsZEluRXZlbnQuRkFJTEVELCBlKVxuICAgICAgfVxuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiB0cmFuc2Zvcm0gdGhlIGlucHV0IHBsdWdpbiBuYW1lIG9yIHBhdGggc3RyaW5nIHRvIHZhbGlkIHJlc3VsdFxuICogQHBhcmFtIGN0eFxuICogQHBhcmFtIG5hbWVPclBhdGhcbiAqL1xuY29uc3QgaGFuZGxlUGx1Z2luTmFtZVByb2Nlc3MgPSAoY3R4OiBJUGljR28sIG5hbWVPclBhdGg6IHN0cmluZyk6IElQbHVnaW5Qcm9jZXNzUmVzdWx0ID0+IHtcbiAgY29uc3QgcmVzID0ge1xuICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgIGZ1bGxOYW1lOiAnJyxcbiAgICBwa2dOYW1lOiAnJ1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9IGdldFByb2Nlc3NQbHVnaW5OYW1lKG5hbWVPclBhdGgsIGN0eC5sb2cpXG4gIGlmICghcmVzdWx0KSB7XG4gICAgcmV0dXJuIHJlc1xuICB9XG4gIC8vIGZpcnN0IGdldCByZXN1bHQgdGhlbiBkbyB0aGlzIHByb2Nlc3NcbiAgLy8gb3Igc29tZSBlcnJvciB3aWxsIGxvZyB0d2ljZVxuICBjb25zdCBwa2dOYW1lID0gZ2V0Tm9ybWFsUGx1Z2luTmFtZShyZXN1bHQsIGN0eC5sb2cpXG4gIGlmICghcGtnTmFtZSkge1xuICAgIHJldHVybiByZXNcbiAgfVxuICByZXR1cm4ge1xuICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgZnVsbE5hbWU6IHJlc3VsdCxcbiAgICBwa2dOYW1lXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUGx1Z2luSGFuZGxlclxuIiwiaW1wb3J0IGZzLCB7IHJlYWRKU09OU3luYyB9IGZyb20gJ2ZzLWV4dHJhJ1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcbmltcG9ydCB7IHN5bmMgfSBmcm9tICdyZXNvbHZlJ1xuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uL3V0aWxzL2VudW0nXG5pbXBvcnQgeyBJUGljR28sIElQaWNHb1BsdWdpbiwgSVBsdWdpbkxvYWRlciwgSVBpY0dvUGx1Z2luSW50ZXJmYWNlIH0gZnJvbSAnLi4vdHlwZXMvaW5kZXgnXG5pbXBvcnQgeyBzZXRDdXJyZW50UGx1Z2luTmFtZSB9IGZyb20gJy4vTGlmZWN5Y2xlUGx1Z2lucydcblxuLyoqXG4gKiBMb2NhbCBwbHVnaW4gbG9hZGVyLCBmaWxlIHN5c3RlbSBpcyByZXF1aXJlZFxuICovXG5leHBvcnQgY2xhc3MgUGx1Z2luTG9hZGVyIGltcGxlbWVudHMgSVBsdWdpbkxvYWRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY3R4OiBJUGljR29cbiAgcHJpdmF0ZSBsaXN0OiBzdHJpbmdbXSA9IFtdXG4gIHByaXZhdGUgcmVhZG9ubHkgZnVsbExpc3QgPSBuZXcgU2V0PHN0cmluZz4oKVxuICBwcml2YXRlIHJlYWRvbmx5IHBsdWdpbk1hcCA9IG5ldyBNYXA8c3RyaW5nLCBJUGljR29QbHVnaW5JbnRlcmZhY2U+KClcbiAgY29uc3RydWN0b3IoY3R4OiBJUGljR28pIHtcbiAgICB0aGlzLmN0eCA9IGN0eFxuICAgIHRoaXMuaW5pdCgpXG4gIH1cblxuICBwcml2YXRlIGluaXQoKTogdm9pZCB7XG4gICAgY29uc3QgcGFja2FnZVBhdGggPSBwYXRoLmpvaW4odGhpcy5jdHguYmFzZURpciwgJ3BhY2thZ2UuanNvbicpXG4gICAgaWYgKCFmcy5leGlzdHNTeW5jKHBhY2thZ2VQYXRoKSkge1xuICAgICAgY29uc3QgcGtnID0ge1xuICAgICAgICBuYW1lOiAncGljZ28tcGx1Z2lucycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAncGljZ28tcGx1Z2lucycsXG4gICAgICAgIHJlcG9zaXRvcnk6ICdodHRwczovL2dpdGh1Yi5jb20vS3VpbmdzbWlsZS9QaWNMaXN0LUNvcmUnLFxuICAgICAgICBsaWNlbnNlOiAnTUlUJ1xuICAgICAgfVxuICAgICAgZnMud3JpdGVGaWxlU3luYyhwYWNrYWdlUGF0aCwgSlNPTi5zdHJpbmdpZnkocGtnKSwgJ3V0ZjgnKVxuICAgIH1cbiAgfVxuXG4gIC8vIGdldCBwbHVnaW4gZW50cnlcbiAgcHJpdmF0ZSByZXNvbHZlUGx1Z2luKGN0eDogSVBpY0dvLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gc3luYyhuYW1lLCB7IGJhc2VkaXI6IGN0eC5iYXNlRGlyIH0pXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCAnbm9kZV9tb2R1bGVzJywgbmFtZSlcbiAgICB9XG4gIH1cblxuICAvLyBsb2FkIGFsbCB0aGlyZCBwYXJ0eSBwbHVnaW5cbiAgbG9hZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBwbHVnaW5EaXIgPSBwYXRoLmpvaW4odGhpcy5jdHguYmFzZURpciwgJ25vZGVfbW9kdWxlcy8nKVxuICAgIC8vIFRoYW5rcyB0byBoZXhvIC0+IGh0dHBzOi8vZ2l0aHViLmNvbS9oZXhvanMvaGV4by9ibG9iL21hc3Rlci9saWIvaGV4by9sb2FkX3BsdWdpbnMuanNcbiAgICBpZiAoIWZzLmV4aXN0c1N5bmMocGx1Z2luRGlyKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIGNvbnN0IHBhY2thZ2VQYXRoID0gcGF0aC5qb2luKHRoaXMuY3R4LmJhc2VEaXIsICdwYWNrYWdlLmpzb24nKVxuICAgIGNvbnN0IGpzb24gPSByZWFkSlNPTlN5bmMocGFja2FnZVBhdGgpXG4gICAgY29uc3QgZGVwcyA9IE9iamVjdC5rZXlzKGpzb24uZGVwZW5kZW5jaWVzIHx8IHt9KVxuICAgIGNvbnN0IGRldkRlcHMgPSBPYmplY3Qua2V5cyhqc29uLmRldkRlcGVuZGVuY2llcyB8fCB7fSlcbiAgICBjb25zdCBtb2R1bGVzID0gZGVwcy5jb25jYXQoZGV2RGVwcykuZmlsdGVyKChuYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmICghL15waWNnby1wbHVnaW4tfF5AW14vXStcXC9waWNnby1wbHVnaW4tLy50ZXN0KG5hbWUpKSByZXR1cm4gZmFsc2VcbiAgICAgIGNvbnN0IHBhdGggPSB0aGlzLnJlc29sdmVQbHVnaW4odGhpcy5jdHgsIG5hbWUpXG4gICAgICByZXR1cm4gZnMuZXhpc3RzU3luYyhwYXRoKVxuICAgIH0pXG4gICAgZm9yIChjb25zdCBtb2R1bGUgb2YgbW9kdWxlcykge1xuICAgICAgdGhpcy5yZWdpc3RlclBsdWdpbihtb2R1bGUpXG4gICAgfVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICByZWdpc3RlclBsdWdpbihuYW1lOiBzdHJpbmcsIHBsdWdpbj86IElQaWNHb1BsdWdpbik6IHZvaWQge1xuICAgIGlmICghbmFtZSB8fCB0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuY3R4LmxvZy53YXJuKCdQbGVhc2UgcHJvdmlkZSB2YWxpZCBwbHVnaW4nKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRoaXMuZnVsbExpc3QuYWRkKG5hbWUpXG4gICAgdHJ5IHtcbiAgICAgIC8vIHJlZ2lzdGVyIGxvY2FsIHBsdWdpblxuICAgICAgaWYgKCFwbHVnaW4pIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuY3R4LmdldENvbmZpZyhgcGljZ29QbHVnaW5zLiR7bmFtZX1gKSA9PT0gdHJ1ZSB8fFxuICAgICAgICAgIHRoaXMuY3R4LmdldENvbmZpZyhgcGljZ29QbHVnaW5zLiR7bmFtZX1gKSA9PT0gdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMubGlzdC5wdXNoKG5hbWUpXG4gICAgICAgICAgc2V0Q3VycmVudFBsdWdpbk5hbWUobmFtZSlcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICAgIHRoaXMuZ2V0UGx1Z2luKG5hbWUpIS5yZWdpc3Rlcih0aGlzLmN0eClcbiAgICAgICAgICBjb25zdCBwbHVnaW4gPSBgcGljZ29QbHVnaW5zWyR7bmFtZX1dYFxuICAgICAgICAgIHRoaXMuY3R4LnNhdmVDb25maWcoe1xuICAgICAgICAgICAgW3BsdWdpbl06IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyByZWdpc3RlciBwcm92aWRlZCBwbHVnaW5cbiAgICAgICAgLy8gJiYgd29uJ3Qgd3JpdGUgY29uZmlnIHRvIGZpbGVzXG4gICAgICAgIHRoaXMubGlzdC5wdXNoKG5hbWUpXG4gICAgICAgIHNldEN1cnJlbnRQbHVnaW5OYW1lKG5hbWUpXG4gICAgICAgIGNvbnN0IHBsdWdpbkludGVyZmFjZSA9IHBsdWdpbih0aGlzLmN0eClcbiAgICAgICAgdGhpcy5wbHVnaW5NYXAuc2V0KG5hbWUsIHBsdWdpbkludGVyZmFjZSlcbiAgICAgICAgcGx1Z2luSW50ZXJmYWNlLnJlZ2lzdGVyKHRoaXMuY3R4KVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMucGx1Z2luTWFwLmRlbGV0ZShuYW1lKVxuICAgICAgdGhpcy5saXN0ID0gdGhpcy5saXN0LmZpbHRlcigoaXRlbTogc3RyaW5nKSA9PiBpdGVtICE9PSBuYW1lKVxuICAgICAgdGhpcy5mdWxsTGlzdC5kZWxldGUobmFtZSlcbiAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcihlIGFzIEVycm9yKVxuICAgICAgdGhpcy5jdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xuICAgICAgICB0aXRsZTogYFBsdWdpbiAke25hbWV9IExvYWQgRXJyb3JgLFxuICAgICAgICBib2R5OiBlXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHVucmVnaXN0ZXJQbHVnaW4obmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5saXN0ID0gdGhpcy5saXN0LmZpbHRlcigoaXRlbTogc3RyaW5nKSA9PiBpdGVtICE9PSBuYW1lKVxuICAgIHRoaXMuZnVsbExpc3QuZGVsZXRlKG5hbWUpXG4gICAgdGhpcy5wbHVnaW5NYXAuZGVsZXRlKG5hbWUpXG4gICAgc2V0Q3VycmVudFBsdWdpbk5hbWUobmFtZSlcbiAgICB0aGlzLmN0eC5oZWxwZXIudXBsb2FkZXIudW5yZWdpc3RlcihuYW1lKVxuICAgIHRoaXMuY3R4LmhlbHBlci50cmFuc2Zvcm1lci51bnJlZ2lzdGVyKG5hbWUpXG4gICAgdGhpcy5jdHguaGVscGVyLmJlZm9yZVRyYW5zZm9ybVBsdWdpbnMudW5yZWdpc3RlcihuYW1lKVxuICAgIHRoaXMuY3R4LmhlbHBlci5iZWZvcmVVcGxvYWRQbHVnaW5zLnVucmVnaXN0ZXIobmFtZSlcbiAgICB0aGlzLmN0eC5oZWxwZXIuYWZ0ZXJVcGxvYWRQbHVnaW5zLnVucmVnaXN0ZXIobmFtZSlcbiAgICB0aGlzLmN0eC5jbWQudW5yZWdpc3RlcihuYW1lKVxuICAgIHRoaXMuY3R4LnJlbW92ZUNvbmZpZygncGljZ29QbHVnaW5zJywgbmFtZSlcbiAgfVxuXG4gIC8vIGdldCBwbHVnaW4gYnkgbmFtZVxuICBnZXRQbHVnaW4obmFtZTogc3RyaW5nKTogSVBpY0dvUGx1Z2luSW50ZXJmYWNlIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy5wbHVnaW5NYXAuaGFzKG5hbWUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5wbHVnaW5NYXAuZ2V0KG5hbWUpXG4gICAgfVxuICAgIGNvbnN0IHBsdWdpbkRpciA9IHBhdGguam9pbih0aGlzLmN0eC5iYXNlRGlyLCAnbm9kZV9tb2R1bGVzLycpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby12YXItcmVxdWlyZXNcbiAgICBjb25zdCBwbHVnaW4gPSByZXF1aXJlKHBsdWdpbkRpciArIG5hbWUpKHRoaXMuY3R4KVxuICAgIHRoaXMucGx1Z2luTWFwLnNldChuYW1lLCBwbHVnaW4pXG4gICAgcmV0dXJuIHBsdWdpblxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbGlzdCBvZiBlbmFibGVkIHBsdWdpbnNcbiAgICovXG4gIGdldExpc3QoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmxpc3RcbiAgfVxuXG4gIGhhc1BsdWdpbihuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5mdWxsTGlzdC5oYXMobmFtZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGZ1bGwgbGlzdCBvZiBwbHVnaW5zLCB3aGV0aGVyIGl0IGlzIGVuYWJsZWQgb3Igbm90XG4gICAqL1xuICBnZXRGdWxsTGlzdCgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLmZ1bGxMaXN0XVxuICB9XG59XG5leHBvcnQgZGVmYXVsdCBQbHVnaW5Mb2FkZXJcbiIsImltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cydcblxuY29uc3QgZXZlbnRCdXMgPSBuZXcgRXZlbnRFbWl0dGVyKClcblxuZXhwb3J0IHsgZXZlbnRCdXMgfVxuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJ1xuaW1wb3J0IHR5cGUgeyBBeGlvc1JlcXVlc3RDb25maWcsIEF4aW9zUmVzcG9uc2UgfSBmcm9tICdheGlvcydcbmltcG9ydCBGb3JtRGF0YSBmcm9tICdmb3JtLWRhdGEnXG5pbXBvcnQgaHR0cHMgZnJvbSAnaHR0cHMnXG5pbXBvcnQgeyBodHRwc092ZXJIdHRwIH0gZnJvbSAndHVubmVsJ1xuaW1wb3J0IHsgVVJMIH0gZnJvbSAndXJsJ1xuXG5pbXBvcnQgdHlwZSB7XG4gIElQaWNHbyxcbiAgVW5kZWZpbmFibGUsXG4gIElDb25maWdDaGFuZ2VQYXlsb2FkLFxuICBJQ29uZmlnLFxuICBJUmVxdWVzdENvbmZpZyxcbiAgSU9sZFJlcU9wdGlvbnMsXG4gIElSZXNwb25zZSxcbiAgSUZ1bGxSZXNwb25zZSxcbiAgSVJlcXVlc3Rcbn0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgeyBJQnVzRXZlbnQgfSBmcm9tICcuLi91dGlscy9lbnVtJ1xuaW1wb3J0IHsgZXZlbnRCdXMgfSBmcm9tICcuLi91dGlscy9ldmVudEJ1cydcblxuY29uc3QgaHR0cHNBZ2VudCA9IG5ldyBodHRwcy5BZ2VudCh7XG4gIG1heFZlcnNpb246ICdUTFN2MS4yJyxcbiAgbWluVmVyc2lvbjogJ1RMU3YxLjInLFxuICByZWplY3RVbmF1dGhvcml6ZWQ6IGZhbHNlXG59KVxuXG4vLyB0aGFua3MgZm9yIGh0dHBzOi8vZ2l0aHViLmRldi9yZXF1ZXN0L3JlcXVlc3QvYmxvYi9tYXN0ZXIvaW5kZXguanNcbmZ1bmN0aW9uIGFwcGVuZEZvcm1EYXRhKGZvcm06IEZvcm1EYXRhLCBrZXk6IHN0cmluZywgZGF0YTogYW55KTogdm9pZCB7XG4gIGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgJ3ZhbHVlJyBpbiBkYXRhICYmICdvcHRpb25zJyBpbiBkYXRhKSB7XG4gICAgZm9ybS5hcHBlbmQoa2V5LCBkYXRhLnZhbHVlLCBkYXRhLm9wdGlvbnMpXG4gIH0gZWxzZSB7XG4gICAgZm9ybS5hcHBlbmQoa2V5LCBkYXRhKVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlcXVlc3RJbnRlcmNlcHRvcihvcHRpb25zOiBJT2xkUmVxT3B0aW9ucyB8IEF4aW9zUmVxdWVzdENvbmZpZyk6IEF4aW9zUmVxdWVzdENvbmZpZyAmIHtcbiAgX19pc09sZE9wdGlvbnM/OiBib29sZWFuXG59IHtcbiAgbGV0IF9faXNPbGRPcHRpb25zID0gZmFsc2VcbiAgY29uc3Qgb3B0OiBBeGlvc1JlcXVlc3RDb25maWc8YW55PiAmIHtcbiAgICBfX2lzT2xkT3B0aW9ucz86IGJvb2xlYW5cbiAgfSA9IHtcbiAgICAuLi5vcHRpb25zLFxuICAgIHVybDogKG9wdGlvbnMudXJsIGFzIHN0cmluZykgfHwgJycsXG4gICAgaGVhZGVyczogb3B0aW9ucy5oZWFkZXJzIHx8IHt9XG4gIH1cbiAgLy8gdXNlciByZXF1ZXN0IGNvbmZpZyBwcm94eVxuICBpZiAob3B0aW9ucy5wcm94eSkge1xuICAgIGxldCBwcm94eU9wdGlvbnMgPSBvcHRpb25zLnByb3h5XG4gICAgaWYgKHR5cGVvZiBwcm94eU9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0cnkge1xuICAgICAgICBwcm94eU9wdGlvbnMgPSBuZXcgVVJMKG9wdGlvbnMucHJveHkpXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHByb3h5T3B0aW9ucyA9IGZhbHNlXG4gICAgICAgIG9wdC5wcm94eSA9IGZhbHNlXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcbiAgICAgIH1cbiAgICAgIF9faXNPbGRPcHRpb25zID0gdHJ1ZVxuICAgIH1cbiAgICBpZiAocHJveHlPcHRpb25zKSB7XG4gICAgICBpZiAob3B0aW9ucy51cmw/LnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykpIHtcbiAgICAgICAgb3B0LnByb3h5ID0gZmFsc2VcbiAgICAgICAgb3B0Lmh0dHBzQWdlbnQgPSBodHRwc092ZXJIdHRwKHtcbiAgICAgICAgICBwcm94eToge1xuICAgICAgICAgICAgaG9zdDogcHJveHlPcHRpb25zPy5ob3N0bmFtZSxcbiAgICAgICAgICAgIHBvcnQ6IHBhcnNlSW50KHByb3h5T3B0aW9ucz8ucG9ydCwgMTApXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3B0LnByb3h5ID0ge1xuICAgICAgICAgIGhvc3Q6IHByb3h5T3B0aW9ucy5ob3N0bmFtZSxcbiAgICAgICAgICBwb3J0OiBwYXJzZUludChwcm94eU9wdGlvbnMucG9ydCwgMTApLFxuICAgICAgICAgIHByb3RvY29sOiAnaHR0cCdcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoJ2Zvcm1EYXRhJyBpbiBvcHRpb25zKSB7XG4gICAgY29uc3QgZm9ybSA9IG5ldyBGb3JtRGF0YSgpXG4gICAgZm9yIChjb25zdCBrZXkgaW4gb3B0aW9ucy5mb3JtRGF0YSkge1xuICAgICAgY29uc3QgZGF0YSA9IG9wdGlvbnMuZm9ybURhdGFba2V5XVxuICAgICAgYXBwZW5kRm9ybURhdGEoZm9ybSwga2V5LCBkYXRhKVxuICAgIH1cbiAgICBvcHQuZGF0YSA9IGZvcm1cbiAgICBvcHQuaGVhZGVycyA9IE9iamVjdC5hc3NpZ24ob3B0LmhlYWRlcnMgfHwge30sIGZvcm0uZ2V0SGVhZGVycygpKVxuICAgIF9faXNPbGRPcHRpb25zID0gdHJ1ZVxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgdGhpcyBpcyBvbGQgb3B0aW9uXG4gICAgZGVsZXRlIG9wdC5mb3JtRGF0YVxuICB9XG4gIGlmICgnYm9keScgaW4gb3B0aW9ucykge1xuICAgIG9wdC5kYXRhID0gb3B0aW9ucy5ib2R5XG4gICAgX19pc09sZE9wdGlvbnMgPSB0cnVlXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciB0aGlzIGlzIG9sZCBvcHRpb25zXG4gICAgZGVsZXRlIG9wdC5ib2R5XG4gIH1cbiAgaWYgKCdxcycgaW4gb3B0aW9ucykge1xuICAgIG9wdC5wYXJhbXMgPSBvcHRpb25zLnFzXG4gICAgX19pc09sZE9wdGlvbnMgPSB0cnVlXG4gIH1cbiAgb3B0Ll9faXNPbGRPcHRpb25zID0gX19pc09sZE9wdGlvbnNcbiAgcmV0dXJuIG9wdFxufVxuXG5mdW5jdGlvbiByZXNwb25zZUludGVyY2VwdG9yKHJlc3BvbnNlOiBBeGlvc1Jlc3BvbnNlKTogSUZ1bGxSZXNwb25zZSB7XG4gIHJldHVybiB7XG4gICAgLi4ucmVzcG9uc2UsXG4gICAgc3RhdHVzQ29kZTogcmVzcG9uc2Uuc3RhdHVzLFxuICAgIGJvZHk6IHJlc3BvbnNlLmRhdGFcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNwb25zZUVycm9ySGFuZGxlcihlcnJvcjogYW55KSB7XG4gIGNvbnN0IGVycm9yT2JqID0ge1xuICAgIG1ldGhvZDogZXJyb3I/LmNvbmZpZz8ubWV0aG9kPy50b1VwcGVyQ2FzZSgpIHx8ICcnLFxuICAgIHVybDogZXJyb3I/LmNvbmZpZz8udXJsIHx8ICcnLFxuICAgIHN0YXR1c0NvZGU6IGVycm9yPy5yZXNwb25zZT8uc3RhdHVzIHx8IDAsXG4gICAgbWVzc2FnZTogZXJyb3I/Lm1lc3NhZ2UgfHwgJycsXG4gICAgc3RhY2s6IGVycm9yPy5zdGFjayB8fCB7fSxcbiAgICByZXNwb25zZToge1xuICAgICAgc3RhdHVzOiBlcnJvcj8ucmVzcG9uc2U/LnN0YXR1cyB8fCAwLFxuICAgICAgc3RhdHVzQ29kZTogZXJyb3I/LnJlc3BvbnNlPy5zdGF0dXMgfHwgMCxcbiAgICAgIGJvZHk6IGVycm9yPy5yZXNwb25zZT8uZGF0YSB8fCAnJ1xuICAgIH1cbiAgfVxuICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3JPYmopXG59XG5cbmV4cG9ydCBjbGFzcyBSZXF1ZXN0IGltcGxlbWVudHMgSVJlcXVlc3Qge1xuICBwcml2YXRlIHJlYWRvbmx5IGN0eDogSVBpY0dvXG4gIHByaXZhdGUgcHJveHk6IFVuZGVmaW5hYmxlPHN0cmluZz4gPSAnJ1xuICBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWc8YW55PiA9IHt9XG4gIGNvbnN0cnVjdG9yKGN0eDogSVBpY0dvKSB7XG4gICAgdGhpcy5jdHggPSBjdHhcbiAgICB0aGlzLmluaXQoKVxuICAgIGV2ZW50QnVzLm9uKElCdXNFdmVudC5DT05GSUdfQ0hBTkdFLCAoZGF0YTogSUNvbmZpZ0NoYW5nZVBheWxvYWQ8c3RyaW5nIHwgSUNvbmZpZ1sncGljQmVkJ10+KSA9PiB7XG4gICAgICBzd2l0Y2ggKGRhdGEuY29uZmlnTmFtZSkge1xuICAgICAgICBjYXNlICdwaWNCZWQnOlxuICAgICAgICAgIGlmICgoZGF0YS52YWx1ZSBhcyBJQ29uZmlnWydwaWNCZWQnXSk/LnByb3h5KSB7XG4gICAgICAgICAgICB0aGlzLnByb3h5ID0gKGRhdGEudmFsdWUgYXMgSUNvbmZpZ1sncGljQmVkJ10pLnByb3h5XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3BpY0JlZC5wcm94eSc6XG4gICAgICAgICAgdGhpcy5wcm94eSA9IGRhdGEudmFsdWUgYXMgc3RyaW5nXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IHByb3h5ID0gdGhpcy5jdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdwaWNCZWQucHJveHknKVxuICAgIGlmIChwcm94eSkge1xuICAgICAgdGhpcy5wcm94eSA9IHByb3h5XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVQcm94eSgpOiBBeGlvc1JlcXVlc3RDb25maWdbJ3Byb3h5J10gfCBmYWxzZSB7XG4gICAgaWYgKHRoaXMucHJveHkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHByb3h5T3B0aW9ucyA9IG5ldyBVUkwodGhpcy5wcm94eSlcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBob3N0OiBwcm94eU9wdGlvbnMuaG9zdG5hbWUsXG4gICAgICAgICAgcG9ydDogcGFyc2VJbnQocHJveHlPcHRpb25zLnBvcnQgfHwgJzAnLCAxMCksXG4gICAgICAgICAgcHJvdG9jb2w6IHByb3h5T3B0aW9ucy5wcm90b2NvbFxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8qIGVtcHR5ICovXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gIzY0IGR5bmFtaWMgZ2V0IHByb3h5IHZhbHVlXG4gIHJlcXVlc3Q8XG4gICAgVCxcbiAgICBVIGV4dGVuZHMgSVJlcXVlc3RDb25maWc8VT4gZXh0ZW5kcyBJT2xkUmVxT3B0aW9uc1xuICAgICAgPyBJT2xkUmVxT3B0aW9uc1xuICAgICAgOiBJUmVxdWVzdENvbmZpZzxVPiBleHRlbmRzIEF4aW9zUmVxdWVzdENvbmZpZ1xuICAgICAgICA/IEF4aW9zUmVxdWVzdENvbmZpZ1xuICAgICAgICA6IG5ldmVyXG4gID4ob3B0aW9uczogVSk6IFByb21pc2U8SVJlc3BvbnNlPFQsIFU+PiB7XG4gICAgdGhpcy5vcHRpb25zLnByb3h5ID0gdGhpcy5oYW5kbGVQcm94eSgpXG4gICAgdGhpcy5vcHRpb25zLmhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnMgfHwge31cbiAgICB0aGlzLm9wdGlvbnMubWF4Qm9keUxlbmd0aCA9IEluZmluaXR5XG4gICAgdGhpcy5vcHRpb25zLm1heENvbnRlbnRMZW5ndGggPSBJbmZpbml0eVxuICAgIGlmICh0aGlzLm9wdGlvbnMucHJveHkgJiYgb3B0aW9ucy51cmw/LnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5odHRwc0FnZW50ID0gaHR0cHNPdmVySHR0cCh7XG4gICAgICAgIHByb3h5OiB7XG4gICAgICAgICAgaG9zdDogdGhpcy5vcHRpb25zLnByb3h5Lmhvc3QsXG4gICAgICAgICAgcG9ydDogdGhpcy5vcHRpb25zLnByb3h5LnBvcnRcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIHRoaXMub3B0aW9ucy5wcm94eSA9IGZhbHNlXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3B0aW9ucy5odHRwc0FnZW50ID0gaHR0cHNBZ2VudFxuICAgIH1cbiAgICAvLyAhTk9USUNFIHRoaXMub3B0aW9ucyAhPT0gb3B0aW9uc1xuICAgIC8vIHRoaXMub3B0aW9ucyBpcyB0aGUgZGVmYXVsdCBvcHRpb25zXG4gICAgY29uc3QgaW5zdGFuY2UgPSBheGlvcy5jcmVhdGUodGhpcy5vcHRpb25zKVxuICAgIGluc3RhbmNlLmludGVyY2VwdG9ycy5yZXNwb25zZS51c2UocmVzcG9uc2VJbnRlcmNlcHRvciwgcmVzcG9uc2VFcnJvckhhbmRsZXIpXG5cbiAgICAvLyBjb21wYXRpYmxlIHdpdGggb2xkIHJlcXVlc3Qgb3B0aW9ucyB0byBuZXcgb3B0aW9uc1xuICAgIGNvbnN0IG9wdCA9IHJlcXVlc3RJbnRlcmNlcHRvcihvcHRpb25zKVxuXG4gICAgaW5zdGFuY2UuaW50ZXJjZXB0b3JzLnJlcXVlc3QudXNlKGZ1bmN0aW9uIChvYmopIHtcbiAgICAgIC8vIGhhbmRsZSBDb250ZW50LVR5cGVcbiAgICAgIGxldCBjb250ZW50VHlwZSA9ICcnXG4gICAgICBpZiAob2JqPy5oZWFkZXJzPy5jb250ZW50VHlwZSkge1xuICAgICAgICBjb250ZW50VHlwZSA9IG9iai5oZWFkZXJzLmNvbnRlbnRUeXBlIGFzIHN0cmluZ1xuICAgICAgICBkZWxldGUgb2JqLmhlYWRlcnMuY29udGVudFR5cGVcbiAgICAgIH0gZWxzZSBpZiAob2JqPy5oZWFkZXJzPy5Db250ZW50VHlwZSkge1xuICAgICAgICBjb250ZW50VHlwZSA9IG9iai5oZWFkZXJzLkNvbnRlbnRUeXBlIGFzIHN0cmluZ1xuICAgICAgICBkZWxldGUgb2JqLmhlYWRlcnMuQ29udGVudFR5cGVcbiAgICAgIH0gZWxzZSBpZiAob2JqPy5oZWFkZXJzPy5bJ2NvbnRlbnQtdHlwZSddKSB7XG4gICAgICAgIGNvbnRlbnRUeXBlID0gb2JqLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddIGFzIHN0cmluZ1xuICAgICAgICBkZWxldGUgb2JqLmhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddXG4gICAgICB9XG4gICAgICBpZiAoY29udGVudFR5cGUgIT09ICcnICYmIG9iai5oZWFkZXJzKSB7XG4gICAgICAgIG9iai5oZWFkZXJzWydDb250ZW50LVR5cGUnXSA9IGNvbnRlbnRUeXBlXG4gICAgICB9XG4gICAgICByZXR1cm4gb2JqXG4gICAgfSlcbiAgICBpZiAoJ3Jlc29sdmVXaXRoRnVsbFJlc3BvbnNlJyBpbiBvcHRpb25zICYmIG9wdGlvbnMucmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiBpbnN0YW5jZS5yZXF1ZXN0KG9wdClcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGluc3RhbmNlLnJlcXVlc3Qob3B0KS50aGVuKHJlcyA9PiB7XG4gICAgICAgIC8vIHVzZSBvbGQgcmVxdWVzdCBvcHRpb24gZm9ybWF0XG4gICAgICAgIGlmIChvcHQuX19pc09sZE9wdGlvbnMpIHtcbiAgICAgICAgICBpZiAoJ2pzb24nIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmpzb24pIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlcy5kYXRhXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShyZXMuZGF0YSlcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHJlcy5kYXRhXG4gICAgICAgIH1cbiAgICAgIH0pIGFzIFByb21pc2U8SVJlc3BvbnNlPFQsIFU+PlxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBSZXF1ZXN0XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnXG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnXG5pbXBvcnQgZnMsIHsgZW1wdHlEaXJTeW5jLCBlbnN1cmVEaXJTeW5jIH0gZnJvbSAnZnMtZXh0cmEnXG5pbXBvcnQgaGVpY0NvbnZlcnQgZnJvbSAnaGVpYy1jb252ZXJ0J1xuaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoJ1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcblxuaW1wb3J0IHtcbiAgSUJ1aWxkSW5XYXRlck1hcmtPcHRpb25zLFxuICBJQnVpbGRJbkNvbXByZXNzT3B0aW9ucyxcbiAgSUxpZmVjeWNsZVBsdWdpbnMsXG4gIElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvLFxuICBJUGljR28sXG4gIElQbHVnaW4sXG4gIFVuZGVmaW5hYmxlLFxuICBJSW1nSW5mb1xufSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB7XG4gIGdldFVSTEZpbGUsXG4gIGhhbmRsZVVybEVuY29kZSxcbiAgaW1hZ2VDb21wcmVzcyxcbiAgaXNVcmwsXG4gIGlzTmVlZENvbXByZXNzLFxuICBpc05lZWRBZGRXYXRlcm1hcmssXG4gIGltYWdlQWRkV2F0ZXJNYXJrLFxuICByZW1vdmVFeGlmLFxuICByZW5hbWVGaWxlTmFtZVdpdGhDdXN0b21TdHJpbmcsXG4gIGdldENvbnZlcnRlZEZvcm1hdFxufSBmcm9tICcuLi91dGlscy9jb21tb24nXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vdXRpbHMvZW51bSdcbmltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICcuLi91dGlscy9jcmVhdGVDb250ZXh0J1xuXG5jb25zdCB3YXRlcm1hcmtNc2cgPSAnQWRkIHdhdGVybWFyayB0byBpbWFnZSdcbmNvbnN0IGNvbXByZXNzTXNnID0gJ0NvbXByZXNzIG9yIGNvbnZlcnQgaW1hZ2UnXG5cbmNvbnN0IHR0ZkZpbGVMaW5rID0gJ2h0dHBzOi8vcmVsZWFzZS5waWNsaXN0LmNuL3NpbWhlaS50dGYnXG5cbmV4cG9ydCBjbGFzcyBMaWZlY3ljbGUgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGN0eDogSVBpY0dvXG4gIHR0ZlBhdGg6IHN0cmluZ1xuXG4gIGNvbnN0cnVjdG9yKGN0eDogSVBpY0dvKSB7XG4gICAgc3VwZXIoKVxuICAgIHRoaXMuY3R4ID0gY3R4XG4gICAgdGhpcy50dGZQYXRoID0gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCAnYXNzZXRzJywgJ3NpbWhlaS50dGYnKVxuICAgIGVuc3VyZURpclN5bmMocGF0aC5qb2luKGN0eC5iYXNlRGlyLCAnaW1nVGVtcCcpKVxuICAgIGVtcHR5RGlyU3luYyhwYXRoLmpvaW4oY3R4LmJhc2VEaXIsICdwaWNsaXN0VGVtcCcpKVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkb3dubG9hZFRURigpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0cnkge1xuICAgICAgZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUodGhpcy50dGZQYXRoKSlcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKHRoaXMudHRmUGF0aCkgJiYgZnMuc3RhdFN5bmModGhpcy50dGZQYXRoKS5zaXplID4gMCkgcmV0dXJuIHRydWVcbiAgICAgIHRoaXMuY3R4LmxvZy5pbmZvKCdEb3dubG9hZCB0dGYgZmlsZS4nKVxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgYXhpb3MuZ2V0KHR0ZkZpbGVMaW5rLCB7IHJlc3BvbnNlVHlwZTogJ2FycmF5YnVmZmVyJyB9KVxuICAgICAgZnMud3JpdGVGaWxlU3luYyh0aGlzLnR0ZlBhdGgsIHJlcy5kYXRhKVxuICAgICAgdGhpcy5jdHgubG9nLmluZm8oJ0Rvd25sb2FkIHR0ZiBmaWxlIHN1Y2Nlc3NmdWxseS4nKVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRoaXMuY3R4LmxvZy5lcnJvcignRG93bmxvYWQgdHRmIGZpbGUgZmFpbGVkLicpXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhlbHBHZXRPcHRpb24oY3R4OiBJUGljR28pOiB7XG4gICAgY29tcHJlc3NPcHRpb25zOiBVbmRlZmluYWJsZTxJQnVpbGRJbkNvbXByZXNzT3B0aW9ucz5cbiAgICB3YXRlcm1hcmtPcHRpb25zOiBVbmRlZmluYWJsZTxJQnVpbGRJbldhdGVyTWFya09wdGlvbnM+XG4gIH0ge1xuICAgIGNvbnN0IGNvbXByZXNzT3B0aW9ucyA9IGN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8SUJ1aWxkSW5Db21wcmVzc09wdGlvbnM+PignYnVpbGRJbi5jb21wcmVzcycpXG4gICAgY29uc3Qgd2F0ZXJtYXJrT3B0aW9ucyA9IGN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8SUJ1aWxkSW5XYXRlck1hcmtPcHRpb25zPj4oJ2J1aWxkSW4ud2F0ZXJtYXJrJylcbiAgICBjb25zdCB0eXBlID1cbiAgICAgIGN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3BpY0JlZC51cGxvYWRlcicpIHx8XG4gICAgICBjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdwaWNCZWQuY3VycmVudCcpIHx8XG4gICAgICAnc21tcydcbiAgICBjb25zdCB1cGxvYWRlciA9IGN0eC5oZWxwZXIudXBsb2FkZXIuZ2V0KHR5cGUpXG4gICAgaWYgKCF1cGxvYWRlciAmJiBjb21wcmVzc09wdGlvbnMpIHtcbiAgICAgIGNvbXByZXNzT3B0aW9ucy5waWNCZWQgPSAnc21tcydcbiAgICB9IGVsc2UgaWYgKGNvbXByZXNzT3B0aW9ucykge1xuICAgICAgY29tcHJlc3NPcHRpb25zLnBpY0JlZCA9IHR5cGVcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbXByZXNzT3B0aW9ucyxcbiAgICAgIHdhdGVybWFya09wdGlvbnNcbiAgICB9XG4gIH1cblxuICBhc3luYyBzdGFydChpbnB1dDogYW55W10pOiBQcm9taXNlPElQaWNHbz4ge1xuICAgIC8vIGVuc3VyZSBldmVyeSB1cGxvYWQgcHJvY2VzcyBoYXMgYW4gdW5pcXVlIGNvbnRleHRcbiAgICBjb25zdCBjdHggPSBjcmVhdGVDb250ZXh0KHRoaXMuY3R4KVxuICAgIHRyeSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoaW5wdXQpKSB0aHJvdyBuZXcgRXJyb3IoJ0lucHV0IG11c3QgYmUgYW4gYXJyYXkuJylcbiAgICAgIGN0eC5pbnB1dCA9IGlucHV0XG4gICAgICBjdHgucmF3SW5wdXRQYXRoID0gW10gYXMgc3RyaW5nW11cbiAgICAgIGN0eC5yYXdJbnB1dCA9IGNsb25lRGVlcChpbnB1dClcbiAgICAgIGN0eC5vdXRwdXQgPSBbXSBhcyBJSW1nSW5mb1tdXG4gICAgICBjb25zdCB7IGNvbXByZXNzT3B0aW9ucywgd2F0ZXJtYXJrT3B0aW9ucyB9ID0gdGhpcy5oZWxwR2V0T3B0aW9uKGN0eClcbiAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuVVBMT0FEX1BST0dSRVNTLCAwKVxuICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5CRUZPUkVfVFJBTlNGT1JNLCBjdHgpXG4gICAgICBjdHgubG9nLmluZm8oJ0JlZm9yZSB0cmFuc2Zvcm0nKVxuICAgICAgaWYgKGNvbXByZXNzT3B0aW9ucyB8fCB3YXRlcm1hcmtPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHRlbXBGaWxlUGF0aCA9IHBhdGguam9pbihjdHguYmFzZURpciwgJ3BpY2xpc3RUZW1wJylcblxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoXG4gICAgICAgICAgY3R4LmlucHV0Lm1hcChhc3luYyAoaXRlbTogc3RyaW5nLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpdGVtSXNVcmwgPSBpc1VybChpdGVtKVxuICAgICAgICAgICAgY29uc3QgaW5mbzogSVBhdGhUcmFuc2Zvcm1lZEltZ0luZm8gPSBpdGVtSXNVcmwgPyBhd2FpdCBnZXRVUkxGaWxlKGl0ZW0sIGN0eCkgOiB7IHN1Y2Nlc3M6IGZhbHNlIH1cbiAgICAgICAgICAgIGlmIChpdGVtSXNVcmwgJiYgKCFpbmZvLnN1Y2Nlc3MgfHwgIWluZm8uYnVmZmVyKSkgcmV0dXJuXG5cbiAgICAgICAgICAgIGxldCB0cmFuc2Zvcm1lZEJ1ZmZlcjogVW5kZWZpbmFibGU8QnVmZmVyPlxuICAgICAgICAgICAgbGV0IGlzU2tpcCA9IGZhbHNlXG4gICAgICAgICAgICBjdHgucmF3SW5wdXRQYXRoIVtpbmRleF0gPSBpdGVtXG4gICAgICAgICAgICBjb25zdCBleHRlbnRpb24gPSBpdGVtSXNVcmwgPyBpbmZvLmV4dG5hbWUgfHwgJycgOiBwYXRoLmV4dG5hbWUoaXRlbSlcbiAgICAgICAgICAgIGNvbnN0IGZpbGVCdWZmZXI6IEJ1ZmZlciA9IGl0ZW1Jc1VybCA/IGluZm8uYnVmZmVyISA6IGZzLnJlYWRGaWxlU3luYyhpdGVtKVxuICAgICAgICAgICAgaWYgKGlzTmVlZEFkZFdhdGVybWFyayh3YXRlcm1hcmtPcHRpb25zLCBleHRlbnRpb24pKSB7XG4gICAgICAgICAgICAgIGlmICghKHdhdGVybWFya09wdGlvbnM/LndhdGVybWFya0ZvbnRQYXRoIHx8IHdhdGVybWFya09wdGlvbnM/LndhdGVybWFya1R5cGUgPT09ICdpbWFnZScpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZG93bmxvYWRUVEZSZXQgPSBhd2FpdCB0aGlzLmRvd25sb2FkVFRGKClcbiAgICAgICAgICAgICAgICBpZiAoIWRvd25sb2FkVFRGUmV0KSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmN0eC5sb2cud2FybignRG93bmxvYWQgdHRmIGZpbGUgZmFpbGVkLCBza2lwIGFkZCB3YXRlcm1hcmsuJylcbiAgICAgICAgICAgICAgICAgIGlzU2tpcCA9IHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKCFpc1NraXApIHtcbiAgICAgICAgICAgICAgICBjdHgubG9nLmluZm8od2F0ZXJtYXJrTXNnKVxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkQnVmZmVyID0gYXdhaXQgaW1hZ2VBZGRXYXRlck1hcmsoZmlsZUJ1ZmZlciwgd2F0ZXJtYXJrT3B0aW9ucyEsIHRoaXMudHRmUGF0aCwgY3R4LmxvZylcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzTmVlZENvbXByZXNzKGNvbXByZXNzT3B0aW9ucywgZXh0ZW50aW9uKSkge1xuICAgICAgICAgICAgICBjdHgubG9nLmluZm8oY29tcHJlc3NNc2cpXG4gICAgICAgICAgICAgIGlmICghaXRlbUlzVXJsICYmIChleHRlbnRpb24gPT09ICcuaGVpYycgfHwgZXh0ZW50aW9uID09PSAnLmhlaWYnKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhlaWNSZXN1bHQgPSBhd2FpdCBoZWljQ29udmVydCh7XG4gICAgICAgICAgICAgICAgICBidWZmZXI6IGZpbGVCdWZmZXIsXG4gICAgICAgICAgICAgICAgICBmb3JtYXQ6ICdKUEVHJyxcbiAgICAgICAgICAgICAgICAgIHF1YWxpdHk6IDFcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIGNvbnN0IHRlbXBIZWljQ29udmVydEZpbGUgPSBwYXRoLmpvaW4odGVtcEZpbGVQYXRoLCBgJHtwYXRoLmJhc2VuYW1lKGl0ZW0sIGV4dGVudGlvbil9LmpwZ2ApXG4gICAgICAgICAgICAgICAgZnMud3JpdGVGaWxlU3luYyh0ZW1wSGVpY0NvbnZlcnRGaWxlLCBCdWZmZXIuZnJvbShoZWljUmVzdWx0KSlcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZEJ1ZmZlciA9IGF3YWl0IGltYWdlQ29tcHJlc3MoXG4gICAgICAgICAgICAgICAgICBmcy5yZWFkRmlsZVN5bmModGVtcEhlaWNDb252ZXJ0RmlsZSksXG4gICAgICAgICAgICAgICAgICBjb21wcmVzc09wdGlvbnMhLFxuICAgICAgICAgICAgICAgICAgJy5qcGcnLFxuICAgICAgICAgICAgICAgICAgY3R4LmxvZ1xuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZEJ1ZmZlciA9IGF3YWl0IGltYWdlQ29tcHJlc3MoXG4gICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZEJ1ZmZlciA/PyBmaWxlQnVmZmVyLFxuICAgICAgICAgICAgICAgICAgY29tcHJlc3NPcHRpb25zISxcbiAgICAgICAgICAgICAgICAgIGV4dGVudGlvbixcbiAgICAgICAgICAgICAgICAgIGN0eC5sb2dcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdHJhbnNmb3JtZWRCdWZmZXIgJiYgY29tcHJlc3NPcHRpb25zPy5pc1JlbW92ZUV4aWYpIHtcbiAgICAgICAgICAgICAgY3R4LmxvZy5pbmZvKCdSZW1vdmUgZXhpZiBpbmZvLicpXG4gICAgICAgICAgICAgIHRyYW5zZm9ybWVkQnVmZmVyID0gYXdhaXQgcmVtb3ZlRXhpZihmaWxlQnVmZmVyLCBleHRlbnRpb24pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHJhbnNmb3JtZWRCdWZmZXIpIHtcbiAgICAgICAgICAgICAgbGV0IG5ld0V4dCA9IGNvbXByZXNzT3B0aW9ucz8uaXNDb252ZXJ0ID8gZ2V0Q29udmVydGVkRm9ybWF0KGNvbXByZXNzT3B0aW9ucywgZXh0ZW50aW9uKSA6IGV4dGVudGlvblxuICAgICAgICAgICAgICBuZXdFeHQgPSBuZXdFeHQuc3RhcnRzV2l0aCgnLicpID8gbmV3RXh0IDogYC4ke25ld0V4dH1gXG4gICAgICAgICAgICAgIGNvbnN0IHRlbXBGaWxlID0gaXRlbUlzVXJsXG4gICAgICAgICAgICAgICAgPyBwYXRoLmpvaW4oXG4gICAgICAgICAgICAgICAgICAgIHRlbXBGaWxlUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgYCR7XG4gICAgICAgICAgICAgICAgICAgICAgaW5mby5maWxlTmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBgJHtwYXRoLmJhc2VuYW1lKGluZm8uZmlsZU5hbWUsIHBhdGguZXh0bmFtZShpbmZvLmZpbGVOYW1lKSl9YFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBuZXcgRGF0ZSgpLmdldFRpbWUoKVxuICAgICAgICAgICAgICAgICAgICB9JHtuZXdFeHR9YFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIDogcGF0aC5qb2luKHRlbXBGaWxlUGF0aCwgYCR7cGF0aC5iYXNlbmFtZShpdGVtLCBleHRlbnRpb24pfSR7bmV3RXh0fWApXG4gICAgICAgICAgICAgIGN0eC5yYXdJbnB1dFBhdGghW2luZGV4XSA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgICBwYXRoLmRpcm5hbWUoaXRlbSksXG4gICAgICAgICAgICAgICAgaXRlbUlzVXJsID8gcGF0aC5iYXNlbmFtZSh0ZW1wRmlsZSkgOiBgJHtwYXRoLmJhc2VuYW1lKGl0ZW0sIGV4dGVudGlvbil9JHtuZXdFeHR9YFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmModGVtcEZpbGUsIHRyYW5zZm9ybWVkQnVmZmVyKVxuICAgICAgICAgICAgICBjdHguaW5wdXRbaW5kZXhdID0gdGVtcEZpbGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgY3R4LmlucHV0KSB7XG4gICAgICAgICAgY3R4LnJhd0lucHV0UGF0aC5wdXNoKGl0ZW0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIGxpZmVjeWNsZSBtYWluXG4gICAgICBhd2FpdCB0aGlzLmJlZm9yZVRyYW5zZm9ybShjdHgpXG4gICAgICBhd2FpdCB0aGlzLmRvVHJhbnNmb3JtKGN0eClcbiAgICAgIGNvbnN0IHJlbmFtZUNvbmZpZyA9IGN0eC5nZXRDb25maWc8YW55PignYnVpbGRJbi5yZW5hbWUnKSB8fCB7fVxuICAgICAgaWYgKHJlbmFtZUNvbmZpZy5lbmFibGUpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0ID0gcmVuYW1lQ29uZmlnLmZvcm1hdCB8fCAne2ZpbGVuYW1lfSdcbiAgICAgICAgY3R4Lm91dHB1dCA9IGN0eC5vdXRwdXQubWFwKChpdGVtOiBJSW1nSW5mbywgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgIGxldCBmaWxlTmFtZSA9IGl0ZW0uZmlsZU5hbWVcbiAgICAgICAgICBpZiAoZm9ybWF0KSB7XG4gICAgICAgICAgICBmaWxlTmFtZSA9IHJlbmFtZUZpbGVOYW1lV2l0aEN1c3RvbVN0cmluZyhcbiAgICAgICAgICAgICAgY3R4LnJhd0lucHV0UGF0aCFbaW5kZXhdLFxuICAgICAgICAgICAgICBmb3JtYXQsXG4gICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgaXRlbS5iYXNlNjRJbWFnZSA/IGl0ZW0uYmFzZTY0SW1hZ2UgOiBpdGVtLmJ1ZmZlclxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgZmlsZU5hbWUgPSBmaWxlTmFtZS5yZXBsYWNlKC9cXC8rL2csICcvJylcbiAgICAgICAgICAgIGlmIChmaWxlTmFtZS5zbGljZSgtMSkgPT09ICcvJykge1xuICAgICAgICAgICAgICBmaWxlTmFtZSA9IGZpbGVOYW1lICsgaW5kZXgudG9TdHJpbmcoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpdGVtLmZpbGVOYW1lID0gZmlsZU5hbWVcbiAgICAgICAgICByZXR1cm4gaXRlbVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5iZWZvcmVVcGxvYWQoY3R4KVxuICAgICAgYXdhaXQgdGhpcy5kb1VwbG9hZChjdHgpXG4gICAgICBjdHguaW5wdXQgPSBjdHgucmF3SW5wdXRcbiAgICAgIGF3YWl0IHRoaXMuYWZ0ZXJVcGxvYWQoY3R4KVxuICAgICAgcmV0dXJuIGN0eFxuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgY3R4LmxvZy53YXJuKElCdWlsZEluRXZlbnQuRkFJTEVEKVxuICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5VUExPQURfUFJPR1JFU1MsIC0xKVxuICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5GQUlMRUQsIGUpXG4gICAgICBjdHgubG9nLmVycm9yKGUpXG4gICAgICBpZiAoY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+PignZGVidWcnKSkge1xuICAgICAgICB0aHJvdyBlXG4gICAgICB9XG4gICAgICByZXR1cm4gY3R4XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBiZWZvcmVUcmFuc2Zvcm0oY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4ge1xuICAgIGF3YWl0IHRoaXMuaGFuZGxlUGx1Z2lucyhjdHguaGVscGVyLmJlZm9yZVRyYW5zZm9ybVBsdWdpbnMsIGN0eClcbiAgICByZXR1cm4gY3R4XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRvVHJhbnNmb3JtKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+IHtcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50LlVQTE9BRF9QUk9HUkVTUywgMzApXG4gICAgY29uc3QgdHlwZSA9IGN0eC5nZXRDb25maWc8VW5kZWZpbmFibGU8c3RyaW5nPj4oJ3BpY0JlZC50cmFuc2Zvcm1lcicpIHx8ICdwYXRoJ1xuICAgIGxldCBjdXJyZW50VHJhbnNmb3JtZXIgPSB0eXBlXG4gICAgbGV0IHRyYW5zZm9ybWVyID0gY3R4LmhlbHBlci50cmFuc2Zvcm1lci5nZXQodHlwZSlcbiAgICBpZiAoIXRyYW5zZm9ybWVyKSB7XG4gICAgICB0cmFuc2Zvcm1lciA9IGN0eC5oZWxwZXIudHJhbnNmb3JtZXIuZ2V0KCdwYXRoJylcbiAgICAgIGN1cnJlbnRUcmFuc2Zvcm1lciA9ICdwYXRoJ1xuICAgICAgY3R4LmxvZy53YXJuKGBDYW4ndCBmaW5kIHRyYW5zZm9ybWVyIC0gJHt0eXBlfSwgc3dpdGNoIHRvIGRlZmF1bHQgdHJhbnNmb3JtZXIgLSBwYXRoYClcbiAgICB9XG4gICAgY3R4LmxvZy5pbmZvKGBUcmFuc2Zvcm1pbmcuLi4gQ3VycmVudCB0cmFuc2Zvcm1lciBpcyBbJHtjdXJyZW50VHJhbnNmb3JtZXJ9XWApXG4gICAgYXdhaXQgdHJhbnNmb3JtZXI/LmhhbmRsZShjdHgpXG4gICAgcmV0dXJuIGN0eFxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBiZWZvcmVVcGxvYWQoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4ge1xuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuVVBMT0FEX1BST0dSRVNTLCA2MClcbiAgICBjdHgubG9nLmluZm8oJ0JlZm9yZSB1cGxvYWQnKVxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuQkVGT1JFX1VQTE9BRCwgY3R4KVxuICAgIGF3YWl0IHRoaXMuaGFuZGxlUGx1Z2lucyhjdHguaGVscGVyLmJlZm9yZVVwbG9hZFBsdWdpbnMsIGN0eClcbiAgICByZXR1cm4gY3R4XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRvVXBsb2FkKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+IHtcbiAgICBsZXQgdHlwZSA9XG4gICAgICBjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPHN0cmluZz4+KCdwaWNCZWQudXBsb2FkZXInKSB8fFxuICAgICAgY3R4LmdldENvbmZpZzxVbmRlZmluYWJsZTxzdHJpbmc+PigncGljQmVkLmN1cnJlbnQnKSB8fFxuICAgICAgJ3NtbXMnXG4gICAgbGV0IHVwbG9hZGVyID0gY3R4LmhlbHBlci51cGxvYWRlci5nZXQodHlwZSlcbiAgICBsZXQgY3VycmVudFRyYW5zZm9ybWVyID0gdHlwZVxuICAgIGlmICghdXBsb2FkZXIpIHtcbiAgICAgIGN0eC5sb2cud2FybihgQ2FuJ3QgZmluZCB1cGxvYWRlciAtICR7dHlwZX0sIHN3aXRjaCB0byBkZWZhdWx0IHVwbG9hZGVyIC0gc21tc2ApXG4gICAgICB0eXBlID0gJ3NtbXMnXG4gICAgICBjdXJyZW50VHJhbnNmb3JtZXIgPSAnc21tcydcbiAgICAgIHVwbG9hZGVyID0gY3R4LmhlbHBlci51cGxvYWRlci5nZXQoJ3NtbXMnKVxuICAgIH1cbiAgICBjdHgubG9nLmluZm8oYFVwbG9hZGluZy4uLiBDdXJyZW50IHVwbG9hZGVyIGlzIFske2N1cnJlbnRUcmFuc2Zvcm1lcn1dYClcbiAgICBhd2FpdCB1cGxvYWRlcj8uaGFuZGxlKGN0eClcbiAgICBmb3IgKGNvbnN0IG91dHB1dEltZyBvZiBjdHgub3V0cHV0KSB7XG4gICAgICBvdXRwdXRJbWcudHlwZSA9IHR5cGVcbiAgICB9XG4gICAgcmV0dXJuIGN0eFxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhZnRlclVwbG9hZChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiB7XG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5BRlRFUl9VUExPQUQsIGN0eClcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50LlVQTE9BRF9QUk9HUkVTUywgMTAwKVxuICAgIGF3YWl0IHRoaXMuaGFuZGxlUGx1Z2lucyhjdHguaGVscGVyLmFmdGVyVXBsb2FkUGx1Z2lucywgY3R4KVxuICAgIGxldCBtc2cgPSAnJ1xuICAgIGNvbnN0IGxlbmd0aCA9IGN0eC5vdXRwdXQubGVuZ3RoXG4gICAgY29uc3QgaXNFbmNvZGVPdXRwdXRVUkwgPSBjdHguZ2V0Q29uZmlnPFVuZGVmaW5hYmxlPGJvb2xlYW4+Pignc2V0dGluZ3MuZW5jb2RlT3V0cHV0VVJMJykgPT09IHRydWVcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodHlwZW9mIGN0eC5vdXRwdXRbaV0uaW1nVXJsICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBtc2cgKz0gaXNFbmNvZGVPdXRwdXRVUkwgPyBoYW5kbGVVcmxFbmNvZGUoY3R4Lm91dHB1dFtpXS5pbWdVcmwhKSA6IGN0eC5vdXRwdXRbaV0uaW1nVXJsIVxuICAgICAgICBpZiAoaSAhPT0gbGVuZ3RoIC0gMSkge1xuICAgICAgICAgIG1zZyArPSAnXFxuJ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBkZWxldGUgY3R4Lm91dHB1dFtpXS5iYXNlNjRJbWFnZVxuICAgICAgZGVsZXRlIGN0eC5vdXRwdXRbaV0uYnVmZmVyXG4gICAgfVxuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuRklOSVNIRUQsIGN0eClcbiAgICBjdHgubG9nLnN1Y2Nlc3MoYFxcbiR7bXNnfWApXG4gICAgcmV0dXJuIGN0eFxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVQbHVnaW5zKGxpZmVDeWNsZVBsdWdpbnM6IElMaWZlY3ljbGVQbHVnaW5zLCBjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiB7XG4gICAgY29uc3QgcGx1Z2lucyA9IGxpZmVDeWNsZVBsdWdpbnMuZ2V0TGlzdCgpXG4gICAgY29uc3QgcGx1Z2luTmFtZXMgPSBsaWZlQ3ljbGVQbHVnaW5zLmdldElkTGlzdCgpXG4gICAgY29uc3QgbGlmZUN5Y2xlTmFtZSA9IGxpZmVDeWNsZVBsdWdpbnMuZ2V0TmFtZSgpXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBwbHVnaW5zLm1hcChhc3luYyAocGx1Z2luOiBJUGx1Z2luLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY3R4LmxvZy5pbmZvKGAke2xpZmVDeWNsZU5hbWV9OiAke3BsdWdpbk5hbWVzW2luZGV4XX0gcnVubmluZ2ApXG4gICAgICAgICAgYXdhaXQgcGx1Z2luLmhhbmRsZShjdHgpXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBjdHgubG9nLmVycm9yKGAke2xpZmVDeWNsZU5hbWV9OiAke3BsdWdpbk5hbWVzW2luZGV4XX0gZXJyb3JgKVxuICAgICAgICAgIHRocm93IGVcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApXG4gICAgcmV0dXJuIGN0eFxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IExpZmVjeWNsZVxuIiwiaW1wb3J0IHsgSVBpY0dvIH0gZnJvbSAnLi4vdHlwZXMnXG5cbi8qKlxuICogY3JlYXRlIGFuIHVuaXF1ZSBjb250ZXh0IGZvciBlYWNoIHVwbG9hZCBwcm9jZXNzXG4gKiBAcGFyYW0gY3R4XG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVDb250ZXh0ID0gKGN0eDogSVBpY0dvKTogSVBpY0dvID0+IHtcbiAgcmV0dXJuIHtcbiAgICBjb25maWdQYXRoOiBjdHguY29uZmlnUGF0aCxcbiAgICBiYXNlRGlyOiBjdHguYmFzZURpcixcbiAgICBsb2c6IGN0eC5sb2csXG4gICAgY21kOiBjdHguY21kLFxuICAgIG91dHB1dDogW10sXG4gICAgaW5wdXQ6IFtdLFxuICAgIHJhd0lucHV0OiBbXSxcbiAgICBwbHVnaW5Mb2FkZXI6IGN0eC5wbHVnaW5Mb2FkZXIsXG4gICAgcGx1Z2luSGFuZGxlcjogY3R4LnBsdWdpbkhhbmRsZXIsXG4gICAgUmVxdWVzdDogY3R4LlJlcXVlc3QsXG4gICAgaGVscGVyOiBjdHguaGVscGVyLFxuICAgIFZFUlNJT046IGN0eC5WRVJTSU9OLFxuICAgIEdVSV9WRVJTSU9OOiBjdHguR1VJX1ZFUlNJT04sXG4gICAgcmVxdWVzdDogY3R4LnJlcXVlc3QsXG4gICAgaTE4bjogY3R4LmkxOG4sXG4gICAgZ2V0Q29uZmlnOiBjdHguZ2V0Q29uZmlnLmJpbmQoY3R4KSxcbiAgICBzYXZlQ29uZmlnOiBjdHguc2F2ZUNvbmZpZy5iaW5kKGN0eCksXG4gICAgcmVtb3ZlQ29uZmlnOiBjdHgucmVtb3ZlQ29uZmlnLmJpbmQoY3R4KSxcbiAgICBzZXRDb25maWc6IGN0eC5zZXRDb25maWcuYmluZChjdHgpLFxuICAgIHVuc2V0Q29uZmlnOiBjdHgudW5zZXRDb25maWcuYmluZChjdHgpLFxuICAgIHVwbG9hZDogY3R4LnVwbG9hZC5iaW5kKGN0eCksXG4gICAgYWRkTGlzdGVuZXI6IGN0eC5hZGRMaXN0ZW5lci5iaW5kKGN0eCksXG4gICAgb246IGN0eC5vbi5iaW5kKGN0eCksXG4gICAgb25jZTogY3R4Lm9uY2UuYmluZChjdHgpLFxuICAgIHJlbW92ZUxpc3RlbmVyOiBjdHgucmVtb3ZlTGlzdGVuZXIuYmluZChjdHgpLFxuICAgIG9mZjogY3R4Lm9mZi5iaW5kKGN0eCksXG4gICAgcmVtb3ZlQWxsTGlzdGVuZXJzOiBjdHgucmVtb3ZlQWxsTGlzdGVuZXJzLmJpbmQoY3R4KSxcbiAgICBzZXRNYXhMaXN0ZW5lcnM6IGN0eC5zZXRNYXhMaXN0ZW5lcnMuYmluZChjdHgpLFxuICAgIGdldE1heExpc3RlbmVyczogY3R4LmdldE1heExpc3RlbmVycy5iaW5kKGN0eCksXG4gICAgbGlzdGVuZXJzOiBjdHgubGlzdGVuZXJzLmJpbmQoY3R4KSxcbiAgICByYXdMaXN0ZW5lcnM6IGN0eC5yYXdMaXN0ZW5lcnMuYmluZChjdHgpLFxuICAgIGVtaXQ6IGN0eC5lbWl0LmJpbmQoY3R4KSxcbiAgICBsaXN0ZW5lckNvdW50OiBjdHgubGlzdGVuZXJDb3VudC5iaW5kKGN0eCksXG4gICAgcHJlcGVuZExpc3RlbmVyOiBjdHgucHJlcGVuZExpc3RlbmVyLmJpbmQoY3R4KSxcbiAgICBwcmVwZW5kT25jZUxpc3RlbmVyOiBjdHgucHJlcGVuZE9uY2VMaXN0ZW5lci5iaW5kKGN0eCksXG4gICAgZXZlbnROYW1lczogY3R4LmV2ZW50TmFtZXMuYmluZChjdHgpXG4gIH1cbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBmb3JtYXRQYXRoSGVscGVyKHtcbiAgcGF0aCxcbiAgc3RhcnRTbGFzaCA9IGZhbHNlLFxuICBlbmRTbGFzaCA9IHRydWUsXG4gIHJvb3RUb0VtcHR5ID0gdHJ1ZVxufToge1xuICBwYXRoPzogc3RyaW5nXG4gIHN0YXJ0U2xhc2g/OiBib29sZWFuXG4gIGVuZFNsYXNoPzogYm9vbGVhblxuICByb290VG9FbXB0eT86IGJvb2xlYW5cbn0pOiBzdHJpbmcge1xuICBjb25zdCBjbGVhblBhdGggPSBwYXRoPy5yZXBsYWNlKC9eXFwvK3xcXC8rJC9nLCAnJykucmVwbGFjZSgvXFwvezIsfS9nLCAnLycpXG4gIGlmICghY2xlYW5QYXRoKSB7XG4gICAgcmV0dXJuIHJvb3RUb0VtcHR5ID8gJycgOiAnLydcbiAgfVxuICByZXR1cm4gYCR7c3RhcnRTbGFzaCA/ICcvJyA6ICcnfSR7Y2xlYW5QYXRofSR7ZW5kU2xhc2ggPyAnLycgOiAnJ31gXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVQYXRoKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBwYXRoXG4gICAgLnJlcGxhY2UoL1xcL3syLH0vZywgJy8nKVxuICAgIC5zcGxpdCgnLycpXG4gICAgLm1hcChwID0+IGVuY29kZVVSSUNvbXBvbmVudChwKSlcbiAgICAuam9pbignLycpXG59XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnXG5pbXBvcnQgeyBJUGljR28sIElQbHVnaW5Db25maWcsIElBbGlzdENvbmZpZywgSU9sZFJlcU9wdGlvbnMsIElGdWxsUmVzcG9uc2UgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xuaW1wb3J0IHsgZW5jb2RlUGF0aCwgZm9ybWF0UGF0aEhlbHBlciB9IGZyb20gJy4vdXRpbHMnXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuXG5pbnRlcmZhY2UgSUFsaXN0VG9rZW5TdG9yZSB7XG4gIHRva2VuOiBzdHJpbmdcbiAgcmVmcmVzaGVkQXQ6IG51bWJlclxufVxuXG5jb25zdCBnZXRBbGlzdFRva2VuID0gYXN5bmMgKGN0eDogSVBpY0dvLCB1cmw6IHN0cmluZywgdXNlcm5hbWU6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IHRva2VuU3RvcmUgPSBjdHguZ2V0Q29uZmlnPElBbGlzdFRva2VuU3RvcmU+KCdwaWNnby1wbHVnaW4tYnVpbGRpbi1hbGlzdHBsaXN0JylcbiAgaWYgKHRva2VuU3RvcmUgJiYgdG9rZW5TdG9yZS5yZWZyZXNoZWRBdCAmJiBEYXRlLm5vdygpIC0gdG9rZW5TdG9yZS5yZWZyZXNoZWRBdCA8IDM2MDAwMDAgJiYgdG9rZW5TdG9yZS50b2tlbikge1xuICAgIHJldHVybiB0b2tlblN0b3JlLnRva2VuXG4gIH1cbiAgY29uc3QgcmVzID0gYXdhaXQgYXhpb3MucG9zdChgJHt1cmx9L2FwaS9hdXRoL2xvZ2luYCwge1xuICAgIHVzZXJuYW1lLFxuICAgIHBhc3N3b3JkXG4gIH0pXG4gIGlmIChyZXMuZGF0YS5jb2RlID09PSAyMDAgJiYgcmVzLmRhdGEubWVzc2FnZSA9PT0gJ3N1Y2Nlc3MnKSB7XG4gICAgY29uc3QgdG9rZW4gPSByZXMuZGF0YS5kYXRhLnRva2VuXG4gICAgY3R4LnNhdmVDb25maWcoe1xuICAgICAgJ3BpY2dvLXBsdWdpbi1idWlsZGluLWFsaXN0cGxpc3QnOiB7XG4gICAgICAgIHRva2VuLFxuICAgICAgICByZWZyZXNoZWRBdDogRGF0ZS5ub3coKVxuICAgICAgfVxuICAgIH0pXG4gICAgcmV0dXJuIHRva2VuXG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdHZXQgdG9rZW4gZmFpbGVkJylcbn1cblxuY29uc3QgcG9zdE9wdGlvbnMgPSAodXJsOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcsIGZpbGVOYW1lOiBzdHJpbmcsIGZpbGVQYXRoOiBzdHJpbmcsIGltYWdlOiBCdWZmZXIpOiBJT2xkUmVxT3B0aW9ucyA9PiB7XG4gIHJldHVybiB7XG4gICAgbWV0aG9kOiAnUFVUJyxcbiAgICB1cmw6IGAke3VybH0vYXBpL2ZzL2Zvcm1gLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIGNvbnRlbnRUeXBlOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsXG4gICAgICAnVXNlci1BZ2VudCc6ICdQaWNMaXN0JyxcbiAgICAgIEF1dGhvcml6YXRpb246IHRva2VuLFxuICAgICAgJ0ZpbGUtUGF0aCc6IGVuY29kZVVSSUNvbXBvbmVudChmaWxlUGF0aClcbiAgICB9LFxuICAgIGZvcm1EYXRhOiB7XG4gICAgICBmaWxlOiB7XG4gICAgICAgIHZhbHVlOiBpbWFnZSxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIGZpbGVuYW1lOiBmaWxlTmFtZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZVxuICB9XG59XG5cbmNvbnN0IGhhbmRsZVJlc0Vycm9yID0gKGN0eDogSVBpY0dvLCByZXM6IElGdWxsUmVzcG9uc2UpOiB2b2lkID0+IHtcbiAgaWYgKHJlcy5zdGF0dXNDb2RlICE9PSAyMDAgfHwgcmVzLmJvZHkuY29kZSAhPT0gMjAwIHx8IHJlcy5ib2R5Lm1lc3NhZ2UgIT09ICdzdWNjZXNzJykge1xuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XG4gICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxuICAgICAgYm9keTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQ0hFQ0tfU0VUVElOR1NfQU5EX05FVFdPUksnKSxcbiAgICAgIHRleHQ6IHJlcy5ib2R5Lm1lc3NhZ2VcbiAgICB9KVxuICAgIHRocm93IG5ldyBFcnJvcihyZXMuYm9keS5tZXNzYWdlKVxuICB9XG59XG5cbmNvbnN0IGV4dHJhY3RDb25maWcgPSAoY29uZmlnOiBJQWxpc3RDb25maWcpID0+IHtcbiAgY29uc3QgeyB1cmwsIHRva2VuLCB1c2VybmFtZSwgcGFzc3dvcmQsIHVwbG9hZFBhdGgsIHdlYlBhdGgsIGN1c3RvbVVybCB9ID0gY29uZmlnXG4gIHJldHVybiB7XG4gICAgdXJsOiAodXJsIHx8ICcnKS5yZXBsYWNlKC9cXC8kLywgJycpLFxuICAgIHRva2VuOiB0b2tlbiB8fCAnJyxcbiAgICB1c2VybmFtZTogdXNlcm5hbWUgfHwgJycsXG4gICAgcGFzc3dvcmQ6IHBhc3N3b3JkIHx8ICcnLFxuICAgIHVwbG9hZFBhdGg6IGZvcm1hdFBhdGhIZWxwZXIoe1xuICAgICAgcGF0aDogdXBsb2FkUGF0aCB8fCAnJyxcbiAgICAgIHN0YXJ0U2xhc2g6IHRydWUsXG4gICAgICBlbmRTbGFzaDogdHJ1ZSxcbiAgICAgIHJvb3RUb0VtcHR5OiBmYWxzZVxuICAgIH0pLFxuICAgIHdlYlBhdGg6IHdlYlBhdGhcbiAgICAgID8gZm9ybWF0UGF0aEhlbHBlcih7XG4gICAgICAgICAgcGF0aDogd2ViUGF0aCB8fCAnJyxcbiAgICAgICAgICBzdGFydFNsYXNoOiB0cnVlLFxuICAgICAgICAgIGVuZFNsYXNoOiB0cnVlLFxuICAgICAgICAgIHJvb3RUb0VtcHR5OiBmYWxzZVxuICAgICAgICB9KVxuICAgICAgOiAnJyxcbiAgICBjdXN0b21Vcmw6IChjdXN0b21VcmwgfHwgJycpLnJlcGxhY2UoL1xcLyQvLCAnJylcbiAgfVxufVxuXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xuICBjb25zdCBhbGlzdENvbmZpZyA9IGN0eC5nZXRDb25maWc8SUFsaXN0Q29uZmlnPigncGljQmVkLmFsaXN0cGxpc3QnKVxuICBpZiAoIWFsaXN0Q29uZmlnKSB0aHJvdyBuZXcgRXJyb3IoJ0NhbiBub3QgZmluZCBhbGlzdCBjb25maWchJylcblxuICBjb25zdCB7IHVybCwgdXNlcm5hbWUsIHBhc3N3b3JkLCB1cGxvYWRQYXRoLCB3ZWJQYXRoLCBjdXN0b21VcmwgfSA9IGV4dHJhY3RDb25maWcoYWxpc3RDb25maWcpXG4gIGxldCB7IHRva2VuIH0gPSBleHRyYWN0Q29uZmlnKGFsaXN0Q29uZmlnKVxuICBpZiAoIXRva2VuKSB7XG4gICAgdG9rZW4gPSBhd2FpdCBnZXRBbGlzdFRva2VuKGN0eCwgdXJsLCB1c2VybmFtZSwgcGFzc3dvcmQpXG4gIH1cbiAgaWYgKCF1cmwgfHwgISh0b2tlbiB8fCAodXNlcm5hbWUgJiYgcGFzc3dvcmQpKSkgdGhyb3cgbmV3IEVycm9yKCdQbGVhc2UgY2hlY2sgeW91ciBhbGlzdCBjb25maWchJylcblxuICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxuICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XG4gICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XG4gICAgICBsZXQgaW1hZ2UgPSBpbWcuYnVmZmVyXG4gICAgICBpZiAoIWltYWdlICYmIGltZy5iYXNlNjRJbWFnZSkge1xuICAgICAgICBpbWFnZSA9IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpXG4gICAgICB9XG4gICAgICBjb25zdCBmdWxsVXBsb2FkUGF0aCA9IGAke3VwbG9hZFBhdGh9JHtpbWcuZmlsZU5hbWV9YFxuICAgICAgY29uc3QgcG9zdENvbmZpZyA9IHBvc3RPcHRpb25zKHVybCwgdG9rZW4sIGltZy5maWxlTmFtZSwgZnVsbFVwbG9hZFBhdGgsIGltYWdlKVxuICAgICAgY29uc3QgdXBsb2FkUmVzID0gKGF3YWl0IGN0eC5yZXF1ZXN0KHBvc3RDb25maWcpKSBhcyB1bmtub3duIGFzIElGdWxsUmVzcG9uc2VcbiAgICAgIGhhbmRsZVJlc0Vycm9yKGN0eCwgdXBsb2FkUmVzKVxuICAgICAgY29uc3QgcmVmcmVzaFVybCA9IGAke3VybH0vYXBpL2ZzL2xpc3RgXG4gICAgICBjb25zdCBnZXRJbmZvVXJsID0gYCR7dXJsfS9hcGkvZnMvZ2V0YFxuICAgICAgY29uc3QgcmVmcmVzaFJlcyA9IChhd2FpdCBjdHgucmVxdWVzdCh7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICB1cmw6IHJlZnJlc2hVcmwsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBBdXRob3JpemF0aW9uOiB0b2tlbixcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgIH0sXG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICBwYXNzd29yZDogJycsXG4gICAgICAgICAgcGFnZTogMSxcbiAgICAgICAgICBwZXJfcGFnZTogMSxcbiAgICAgICAgICByZWZyZXNoOiB0cnVlLFxuICAgICAgICAgIHBhdGg6IHBhdGguZGlybmFtZShmdWxsVXBsb2FkUGF0aClcbiAgICAgICAgfSxcbiAgICAgICAgcmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2U6IHRydWVcbiAgICAgIH0pKSBhcyB1bmtub3duIGFzIElGdWxsUmVzcG9uc2VcbiAgICAgIGhhbmRsZVJlc0Vycm9yKGN0eCwgcmVmcmVzaFJlcylcbiAgICAgIGNvbnN0IGdldEluZm9SZXMgPSAoYXdhaXQgY3R4LnJlcXVlc3Qoe1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgdXJsOiBnZXRJbmZvVXJsLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgQXV0aG9yaXphdGlvbjogdG9rZW4sXG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICB9LFxuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgcGFzc3dvcmQ6ICcnLFxuICAgICAgICAgIHBhdGg6IGZ1bGxVcGxvYWRQYXRoLFxuICAgICAgICAgIHBhZ2U6IDEsXG4gICAgICAgICAgcGVyX3BhZ2U6IDEsXG4gICAgICAgICAgcmVmcmVzaDogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZVxuICAgICAgfSkpIGFzIHVua25vd24gYXMgSUZ1bGxSZXNwb25zZVxuICAgICAgaGFuZGxlUmVzRXJyb3IoY3R4LCBnZXRJbmZvUmVzKVxuICAgICAgY29uc3Qgc2lnbiA9IGdldEluZm9SZXMuYm9keS5kYXRhLnNpZ25cbiAgICAgIGNvbnN0IGVuY29kZWRQYXRoID0gZW5jb2RlUGF0aChgJHt3ZWJQYXRoIHx8IHVwbG9hZFBhdGh9JHtpbWcuZmlsZU5hbWV9YClcbiAgICAgIGltZy5pbWdVcmwgPSBgJHtjdXN0b21VcmwgfHwgdXJsfS9kJHtlbmNvZGVkUGF0aH1gXG4gICAgICBpbWcuaW1nVXJsICs9IHNpZ24gPyBgP3NpZ249JHtzaWdufWAgOiAnJ1xuICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxuICAgICAgZGVsZXRlIGltZy5idWZmZXJcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGN0eFxufVxuXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJQWxpc3RDb25maWc+KCdwaWNCZWQuYWxpc3RwbGlzdCcpIHx8IHt9XG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICd1cmwnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJU1RfVVJMJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJU1RfVVJMJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElTVF9NRVNTQUdFX1VSTCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy51cmwgfHwgJycsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3Rva2VuJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSVNUX1RPS0VOJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJU1RfVE9LRU4nKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSVNUX01FU1NBR0VfVE9LRU4nKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcudG9rZW4gfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICd1c2VybmFtZScsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElTVF9VU0VSTkFNRScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSVNUX1VTRVJOQU1FJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElTVF9NRVNTQUdFX1VTRVJOQU1FJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnVzZXJuYW1lIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAncGFzc3dvcmQnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJU1RfUEFTU1dPUkQnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElTVF9QQVNTV09SRCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJU1RfTUVTU0FHRV9QQVNTV09SRCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXNzd29yZCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3VwbG9hZFBhdGgnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJU1RfVVBMT0FEX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElTVF9VUExPQURfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJU1RfTUVTU0FHRV9VUExPQURfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy51cGxvYWRQYXRoIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnd2ViUGF0aCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElTVF9XRUJfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSVNUX1dFQl9QQVRIJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElTVF9NRVNTQUdFX1dFQl9QQVRIJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndlYlBhdGggfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdjdXN0b21VcmwnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJU1RfQ1VTVE9NVVJMJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJU1RfQ1VTVE9NVVJMJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElTVF9NRVNTQUdFX0NVU1RPTVVSTCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5jdXN0b21VcmwgfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9XG4gIF1cbiAgcmV0dXJuIGNvbmZpZ1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlcihjdHg6IElQaWNHbyk6IHZvaWQge1xuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKCdhbGlzdHBsaXN0Jywge1xuICAgIGdldCBuYW1lKCkge1xuICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElTVF9QTElTVCcpXG4gICAgfSxcbiAgICBoYW5kbGUsXG4gICAgY29uZmlnXG4gIH0pXG59XG4iLCJpbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0bydcbmltcG9ydCB7IGxvb2t1cCB9IGZyb20gJ21pbWUtdHlwZXMnXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcbmltcG9ydCB7IGVuY29kZVBhdGgsIGZvcm1hdFBhdGhIZWxwZXIgfSBmcm9tICcuL3V0aWxzJ1xuaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJQWxpeXVuQ29uZmlnLCBJT2xkUmVxT3B0aW9uc1dpdGhGdWxsUmVzcG9uc2UgfSBmcm9tICcuLi8uLi90eXBlcydcblxuY29uc3QgZ2V0Q3VycmVudFVUQ0RhdGUgPSAoKTogc3RyaW5nID0+IG5ldyBEYXRlKCkudG9VVENTdHJpbmcoKVxuXG4vLyBnZW5lcmF0ZSBPU1Mgc2lnbmF0dXJlXG5jb25zdCBnZW5lcmF0ZVNpZ25hdHVyZSA9IChvcHRpb25zOiBJQWxpeXVuQ29uZmlnLCBmaWxlTmFtZTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3QgZGF0ZSA9IGdldEN1cnJlbnRVVENEYXRlKClcbiAgY29uc3QgbWltZVR5cGUgPSBsb29rdXAoZmlsZU5hbWUpIHx8ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nXG4gIGNvbnN0IHNpZ25TdHJpbmcgPSBgUFVUXFxuXFxuJHttaW1lVHlwZX1cXG4ke2RhdGV9XFxuLyR7b3B0aW9ucy5idWNrZXR9LyR7b3B0aW9ucy5wYXRofSR7ZmlsZU5hbWV9YFxuICBjb25zdCBzaWduYXR1cmUgPSBjcnlwdG8uY3JlYXRlSG1hYygnc2hhMScsIG9wdGlvbnMuYWNjZXNzS2V5U2VjcmV0KS51cGRhdGUoc2lnblN0cmluZykuZGlnZXN0KCdiYXNlNjQnKVxuICByZXR1cm4gYE9TUyAke29wdGlvbnMuYWNjZXNzS2V5SWR9OiR7c2lnbmF0dXJlfWBcbn1cblxuY29uc3QgcG9zdE9wdGlvbnMgPSAoXG4gIG9wdGlvbnM6IElBbGl5dW5Db25maWcsXG4gIGZpbGVOYW1lOiBzdHJpbmcsXG4gIHNpZ25hdHVyZTogc3RyaW5nLFxuICBpbWFnZTogQnVmZmVyXG4pOiBJT2xkUmVxT3B0aW9uc1dpdGhGdWxsUmVzcG9uc2UgPT4ge1xuICByZXR1cm4ge1xuICAgIG1ldGhvZDogJ1BVVCcsXG4gICAgdXJsOiBgaHR0cHM6Ly8ke29wdGlvbnMuYnVja2V0fS4ke29wdGlvbnMuYXJlYX0uYWxpeXVuY3MuY29tLyR7ZW5jb2RlUGF0aChgJHtvcHRpb25zLnBhdGh9JHtmaWxlTmFtZX1gKX1gLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIEhvc3Q6IGAke29wdGlvbnMuYnVja2V0fS4ke29wdGlvbnMuYXJlYX0uYWxpeXVuY3MuY29tYCxcbiAgICAgIEF1dGhvcml6YXRpb246IHNpZ25hdHVyZSxcbiAgICAgIERhdGU6IGdldEN1cnJlbnRVVENEYXRlKCksXG4gICAgICAnQ29udGVudC1UeXBlJzogbG9va3VwKGZpbGVOYW1lKSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJ1xuICAgIH0sXG4gICAgYm9keTogaW1hZ2UsXG4gICAgcmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2U6IHRydWVcbiAgfVxufVxuXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xuICBjb25zdCBhbGlZdW5PcHRpb25zID0gY3R4LmdldENvbmZpZzxJQWxpeXVuQ29uZmlnPigncGljQmVkLmFsaXl1bicpXG4gIGlmICghYWxpWXVuT3B0aW9ucykgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgZmluZCBhbGlZdW4gT1NTIGNvbmZpZ1wiKVxuICBhbGlZdW5PcHRpb25zLnBhdGggPSBmb3JtYXRQYXRoSGVscGVyKHsgcGF0aDogYWxpWXVuT3B0aW9ucy5wYXRoIH0pXG4gIHRyeSB7XG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcbiAgICBjb25zdCBjdXN0b21VcmwgPSAoYWxpWXVuT3B0aW9ucy5jdXN0b21VcmwgfHwgJycpLnJlcGxhY2UoL1xcLyQvLCAnJylcbiAgICBjb25zdCBwYXRoID0gYWxpWXVuT3B0aW9ucy5wYXRoXG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xuICAgICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XG4gICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IGdlbmVyYXRlU2lnbmF0dXJlKGFsaVl1bk9wdGlvbnMsIGltZy5maWxlTmFtZSlcbiAgICAgICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlclxuICAgICAgICBpZiAoIWltYWdlICYmIGltZy5iYXNlNjRJbWFnZSkge1xuICAgICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHRpb25zID0gcG9zdE9wdGlvbnMoYWxpWXVuT3B0aW9ucywgaW1nLmZpbGVOYW1lLCBzaWduYXR1cmUsIGltYWdlKVxuICAgICAgICBjb25zdCBib2R5ID0gYXdhaXQgY3R4LnJlcXVlc3Qob3B0aW9ucylcbiAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XG4gICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXG4gICAgICAgICAgY29uc3Qgb3B0aW9uVXJsID0gYWxpWXVuT3B0aW9ucy5vcHRpb25zIHx8ICcnXG4gICAgICAgICAgaWYgKGN1c3RvbVVybCkge1xuICAgICAgICAgICAgaW1nLmltZ1VybCA9IGAke2N1c3RvbVVybH0vJHtlbmNvZGVQYXRoKGAke3BhdGh9JHtpbWcuZmlsZU5hbWV9YCl9JHtvcHRpb25Vcmx9YFxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gYGh0dHBzOi8vJHthbGlZdW5PcHRpb25zLmJ1Y2tldH0uJHthbGlZdW5PcHRpb25zLmFyZWF9LmFsaXl1bmNzLmNvbS8ke2VuY29kZVBhdGgoYCR7cGF0aH0ke2ltZy5maWxlTmFtZX1gKX0ke29wdGlvblVybH1gXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVXBsb2FkIGZhaWxlZCcpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGN0eFxuICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XG4gICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxuICAgICAgYm9keTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQ0hFQ0tfU0VUVElOR1MnKVxuICAgIH0pXG4gICAgdGhyb3cgZXJyXG4gIH1cbn1cblxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SUFsaXl1bkNvbmZpZz4oJ3BpY0JlZC5hbGl5dW4nKSB8fCB7fVxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAnYWNjZXNzS2V5SWQnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZSUQnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9BQ0NFU1NLRVlJRCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hY2Nlc3NLZXlJZCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnYWNjZXNzS2V5U2VjcmV0JyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWVNFQ1JFVCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWVNFQ1JFVCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hY2Nlc3NLZXlTZWNyZXQgfHwgJycsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2J1Y2tldCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9CVUNLRVQnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9CVUNLRVQnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYnVja2V0IHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdhcmVhJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX0FSRUEnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9BUkVBJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFyZWEgfHwgJycsXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0FSRUEnKVxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAncGF0aCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9QQVRIJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9QQVRIJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhdGggfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdjdXN0b21VcmwnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfQ1VTVE9NVVJMJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVURfQ1VTVE9NVVJMJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0NVU1RPTVVSTCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5jdXN0b21VcmwgfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdvcHRpb25zJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FMSUNMT1VEX09QVElPTlMnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9PUFRJT05TJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX09QVElPTlMnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcub3B0aW9ucyB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH1cbiAgXVxuICByZXR1cm4gY29uZmlnXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyKGN0eDogSVBpY0dvKTogdm9pZCB7XG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ2FsaXl1bicsIHtcbiAgICBnZXQgbmFtZSgpIHtcbiAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQUxJQ0xPVUQnKVxuICAgIH0sXG4gICAgaGFuZGxlLFxuICAgIGNvbmZpZ1xuICB9KVxufVxuIiwiaW1wb3J0IGNyeXB0byBmcm9tICdjcnlwdG8nXG5pbXBvcnQgRmlsZVR5cGUgZnJvbSAnZmlsZS10eXBlJ1xuaW1wb3J0IG1pbWUgZnJvbSAnbWltZSdcbmltcG9ydCB7IEh0dHBzUHJveHlBZ2VudCwgSHR0cFByb3h5QWdlbnQgfSBmcm9tICdocGFnZW50J1xuaW1wb3J0IHsgSUltZ0luZm8gfSBmcm9tICcuLi8uLi8uLi90eXBlcydcbmltcG9ydCB7IFVSTCB9IGZyb20gJ3VybCdcblxuY2xhc3MgRmlsZU5hbWVHZW5lcmF0b3Ige1xuICBkYXRlOiBEYXRlXG4gIGluZm86IElJbWdJbmZvXG5cbiAgc3RhdGljIGZpZWxkcyA9IFtcbiAgICAneWVhcicsIC8vIOW9k+WJjeaXpeacnyAtIOW5tFxuICAgICdtb250aCcsIC8vIOW9k+WJjeaXpeacnyAtIOaciFxuICAgICdkYXknLCAvLyDlvZPliY3ml6XmnJ8gLSDml6VcbiAgICAnZnVsbE5hbWUnLCAvLyDmlofku7blkI0sIOWMheWQq+aJqeWxleWQjVxuICAgICdmaWxlTmFtZScsIC8vIOaWh+S7tuWQjSwg5LiN5YyF5ZCr5omp5bGV5ZCNXG4gICAgJ2V4dE5hbWUnLCAvLyDmianlsZXlkI1cbiAgICAnbWQ1JywgLy8gbWQ1XG4gICAgJ21kNUI2NCcsIC8vIG1kNSBiYXNlNjRcbiAgICAnbWQ1QjY0U2hvcnQnLCAvLyBtZDUgYmFzZTY0IHNob3J0XG4gICAgJ3NoYTEnLCAvLyBzaGExXG4gICAgJ3NoYTI1NicsIC8vIHNoYTI1NlxuICAgICd0aW1lc3RhbXAnLCAvLyDlvZPliY3ml7bpl7TmiLMsIOenklxuICAgICd0aW1lc3RhbXBNUycgLy8g5b2T5YmN5pe26Ze05oizLCDmr6vnp5JcbiAgXVxuXG4gIGNvbnN0cnVjdG9yKGluZm86IElJbWdJbmZvKSB7XG4gICAgdGhpcy5kYXRlID0gbmV3IERhdGUoKVxuICAgIHRoaXMuaW5mbyA9IGluZm9cbiAgfVxuXG4gIHB1YmxpYyB5ZWFyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMuZGF0ZS5nZXRGdWxsWWVhcigpfWBcbiAgfVxuXG4gIHB1YmxpYyBtb250aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiAodGhpcy5kYXRlLmdldE1vbnRoKCkgKyAxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcbiAgfVxuXG4gIHB1YmxpYyBkYXkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5kYXRlLmdldERhdGUoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcbiAgfVxuXG4gIHB1YmxpYyBmdWxsTmFtZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmluZm8uZmlsZU5hbWVcbiAgfVxuXG4gIHB1YmxpYyBmaWxlTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAodGhpcy5pbmZvLmZpbGVOYW1lID8/ICcnKS5yZXBsYWNlKHRoaXMuaW5mby5leHRuYW1lID8/ICcnLCAnJylcbiAgfVxuXG4gIHB1YmxpYyBleHROYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICh0aGlzLmluZm8uZXh0bmFtZSA/PyAnJykucmVwbGFjZSgnLicsICcnKVxuICB9XG5cbiAgcHVibGljIG1kNSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBjcnlwdG8uY3JlYXRlSGFzaCgnbWQ1JykudXBkYXRlKHRoaXMuaW1nQnVmZmVyKCkhKS5kaWdlc3QoJ2hleCcpXG4gIH1cblxuICBwdWJsaWMgbWQ1QjY0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNyeXB0b1xuICAgICAgLmNyZWF0ZUhhc2goJ21kNScpXG4gICAgICAudXBkYXRlKHRoaXMuaW1nQnVmZmVyKCkhKVxuICAgICAgLmRpZ2VzdCgnYmFzZTY0JylcbiAgICAgIC5yZXBsYWNlKC9cXCsvZywgJy0nKVxuICAgICAgLnJlcGxhY2UoL1xcLy9nLCAnXycpXG4gICAgICAucmVwbGFjZSgvPSskLywgJycpXG4gIH1cblxuICBwdWJsaWMgbWQ1QjY0U2hvcnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY3J5cHRvXG4gICAgICAuY3JlYXRlSGFzaCgnbWQ1JylcbiAgICAgIC51cGRhdGUodGhpcy5pbWdCdWZmZXIoKSEpXG4gICAgICAuZGlnZXN0KCdiYXNlNjQnKVxuICAgICAgLnJlcGxhY2UoL1xcKy9nLCAnLScpXG4gICAgICAucmVwbGFjZSgvXFwvL2csICdfJylcbiAgICAgIC5zbGljZSgwLCA3KVxuICB9XG5cbiAgcHVibGljIHNoYTEoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTEnKS51cGRhdGUodGhpcy5pbWdCdWZmZXIoKSEpLmRpZ2VzdCgnaGV4JylcbiAgfVxuXG4gIHB1YmxpYyBzaGEyNTYoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZSh0aGlzLmltZ0J1ZmZlcigpISkuZGlnZXN0KCdoZXgnKVxuICB9XG5cbiAgcHVibGljIHRpbWVzdGFtcCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKS50b1N0cmluZygpXG4gIH1cblxuICBwdWJsaWMgdGltZXN0YW1wTVMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gRGF0ZS5ub3coKS50b1N0cmluZygpXG4gIH1cblxuICBwcml2YXRlIGltZ0J1ZmZlcigpOiBzdHJpbmcgfCBCdWZmZXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmluZm8uYmFzZTY0SW1hZ2UgPyB0aGlzLmluZm8uYmFzZTY0SW1hZ2UgOiB0aGlzLmluZm8uYnVmZmVyXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFBhdGgoaW5mbzogSUltZ0luZm8sIGZvcm1hdD86IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICghZm9ybWF0KSB7XG4gICAgcmV0dXJuIGluZm8uZmlsZU5hbWUhXG4gIH1cblxuICBjb25zdCBmaWxlTmFtZUdlbmVyYXRvciA9IG5ldyBGaWxlTmFtZUdlbmVyYXRvcihpbmZvKVxuXG4gIGxldCBmb3JtYXRQYXRoOiBzdHJpbmcgPSBmb3JtYXRcblxuICBmb3IgKGNvbnN0IGtleSBvZiBGaWxlTmFtZUdlbmVyYXRvci5maWVsZHMpIHtcbiAgICBjb25zdCByZSA9IG5ldyBSZWdFeHAoYHske2tleX19YCwgJ2cnKVxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgdHMtbWlncmF0ZSgyNTMyKSBGSVhNRTogT2JqZWN0IGlzIHBvc3NpYmx5ICd1bmRlZmluZWQnLlxuICAgIGZvcm1hdFBhdGggPSBmb3JtYXRQYXRoLnJlcGxhY2UocmUsIGZpbGVOYW1lR2VuZXJhdG9yW2tleV0oKSlcbiAgfVxuXG4gIHJldHVybiBmb3JtYXRQYXRoXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleHRyYWN0SW5mbyhpbmZvOiBJSW1nSW5mbyk6IFByb21pc2U8e1xuICBib2R5PzogQnVmZmVyXG4gIGNvbnRlbnRUeXBlPzogc3RyaW5nXG4gIGNvbnRlbnRFbmNvZGluZz86IHN0cmluZ1xufT4ge1xuICBjb25zdCByZXN1bHQ6IHtcbiAgICBib2R5PzogQnVmZmVyXG4gICAgY29udGVudFR5cGU/OiBzdHJpbmdcbiAgICBjb250ZW50RW5jb2Rpbmc/OiBzdHJpbmdcbiAgfSA9IHt9XG5cbiAgaWYgKGluZm8uYmFzZTY0SW1hZ2UpIHtcbiAgICBjb25zdCBib2R5ID0gaW5mby5iYXNlNjRJbWFnZS5yZXBsYWNlKC9eZGF0YTpbL1xcd10rO2Jhc2U2NCwvLCAnJylcbiAgICByZXN1bHQuY29udGVudFR5cGUgPSBpbmZvLmJhc2U2NEltYWdlLm1hdGNoKC9bXjpdXFx3K1xcL1tcXHctK1xcZC5dKyg/PTt8LCkvKT8uWzBdXG4gICAgcmVzdWx0LmJvZHkgPSBCdWZmZXIuZnJvbShib2R5LCAnYmFzZTY0JylcbiAgICByZXN1bHQuY29udGVudEVuY29kaW5nID0gJ2Jhc2U2NCdcbiAgfSBlbHNlIHtcbiAgICBpZiAoaW5mby5leHRuYW1lKSB7XG4gICAgICByZXN1bHQuY29udGVudFR5cGUgPSBtaW1lLmdldFR5cGUoaW5mby5leHRuYW1lKSFcbiAgICB9XG4gICAgcmVzdWx0LmJvZHkgPSBpbmZvLmJ1ZmZlclxuICB9XG5cbiAgLy8gZmFsbGJhY2sgdG8gZGV0ZWN0IGZyb20gYnVmZmVyXG4gIGlmICghcmVzdWx0LmNvbnRlbnRUeXBlKSB7XG4gICAgY29uc3QgZmlsZVR5cGUgPSBhd2FpdCBGaWxlVHlwZS5mcm9tQnVmZmVyKHJlc3VsdC5ib2R5ISlcbiAgICByZXN1bHQuY29udGVudFR5cGUgPSBmaWxlVHlwZT8ubWltZVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG5mdW5jdGlvbiBmb3JtYXRIdHRwUHJveHlVUkwodXJsID0gJycpOiBzdHJpbmcge1xuICBpZiAoIXVybCkgcmV0dXJuICcnXG5cbiAgaWYgKCEvXmh0dHBzPzpcXC9cXC8vLnRlc3QodXJsKSkge1xuICAgIGNvbnN0IFtob3N0LCBwb3J0XSA9IHVybC5zcGxpdCgnOicpXG4gICAgcmV0dXJuIGBodHRwOi8vJHtob3N0LnJlcGxhY2UoJzEyNy4wLjAuMScsICdsb2NhbGhvc3QnKX06JHtwb3J0fWBcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgeyBwcm90b2NvbCwgaG9zdG5hbWUsIHBvcnQgfSA9IG5ldyBVUkwodXJsKVxuICAgIHJldHVybiBgJHtwcm90b2NvbH0vLyR7aG9zdG5hbWUucmVwbGFjZSgnMTI3LjAuMC4xJywgJ2xvY2FsaG9zdCcpfToke3BvcnR9YFxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFByb3h5QWdlbnQoXG4gIHByb3h5OiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIHNzbEVuYWJsZWQ6IGJvb2xlYW4sXG4gIHJlamVjdFVuYXV0aG9yaXplZDogYm9vbGVhblxuKTogSHR0cFByb3h5QWdlbnQgfCBIdHRwc1Byb3h5QWdlbnQgfCB1bmRlZmluZWQge1xuICBjb25zdCBmb3JtYXRlZFByb3h5ID0gZm9ybWF0SHR0cFByb3h5VVJMKHByb3h5KVxuICBpZiAoIWZvcm1hdGVkUHJveHkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cblxuICBjb25zdCBBZ2VudCA9IHNzbEVuYWJsZWQgPyBIdHRwc1Byb3h5QWdlbnQgOiBIdHRwUHJveHlBZ2VudFxuICBjb25zdCBvcHRpb25zID0ge1xuICAgIGtlZXBBbGl2ZTogdHJ1ZSxcbiAgICBrZWVwQWxpdmVNc2VjczogMTAwMCxcbiAgICBzY2hlZHVsaW5nOiAnbGlmbycgYXMgJ2xpZm8nIHwgJ2ZpZm8nIHwgdW5kZWZpbmVkLFxuICAgIHJlamVjdFVuYXV0aG9yaXplZCxcbiAgICBwcm94eTogZm9ybWF0ZWRQcm94eVxuICB9XG5cbiAgcmV0dXJuIG5ldyBBZ2VudChvcHRpb25zKVxufVxuIiwiaW1wb3J0IHtcbiAgUzNDbGllbnRDb25maWcsXG4gIFMzQ2xpZW50LFxuICBQdXRPYmplY3RDb21tYW5kLFxuICBHZXRPYmplY3RDb21tYW5kLFxuICBQdXRPYmplY3RDb21tYW5kT3V0cHV0XG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zMydcbmltcG9ydCB7IGdldFNpZ25lZFVybCB9IGZyb20gJ0Bhd3Mtc2RrL3MzLXJlcXVlc3QtcHJlc2lnbmVyJ1xuaW1wb3J0IHsgTm9kZUh0dHBIYW5kbGVyLCBOb2RlSHR0cEhhbmRsZXJPcHRpb25zIH0gZnJvbSAnQHNtaXRoeS9ub2RlLWh0dHAtaGFuZGxlcidcblxuaW1wb3J0IHVybCBmcm9tICd1cmwnXG5pbXBvcnQgeyBIdHRwUHJveHlBZ2VudCwgSHR0cHNQcm94eUFnZW50IH0gZnJvbSAnaHBhZ2VudCdcbmltcG9ydCB7IElBd3NTM1BMaXN0VXNlckNvbmZpZywgSUltZ0luZm8gfSBmcm9tICcuLi8uLi8uLi90eXBlcydcbmltcG9ydCB7IGV4dHJhY3RJbmZvLCBnZXRQcm94eUFnZW50IH0gZnJvbSAnLi91dGlscydcblxuZXhwb3J0IGludGVyZmFjZSBJVXBsb2FkUmVzdWx0IHtcbiAgaW5kZXg6IG51bWJlclxuICBrZXk6IHN0cmluZ1xuICB1cmw6IHN0cmluZ1xuICBpbWdVUkw6IHN0cmluZ1xuICB2ZXJzaW9uSWQ/OiBzdHJpbmdcbiAgZVRhZz86IHN0cmluZ1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTM0NsaWVudChvcHRzOiBJQXdzUzNQTGlzdFVzZXJDb25maWcpOiBhbnkge1xuICBsZXQgc3NsRW5hYmxlZCA9IHRydWVcbiAgdHJ5IHtcbiAgICBjb25zdCB1ID0gbmV3IHVybC5VUkwob3B0cy5lbmRwb2ludCEpXG4gICAgc3NsRW5hYmxlZCA9IHUucHJvdG9jb2wgPT09ICdodHRwczonXG4gIH0gY2F0Y2gge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eVxuICB9XG5cbiAgY29uc3QgaHR0cEhhbmRsZXJPcHRzOiBOb2RlSHR0cEhhbmRsZXJPcHRpb25zID0ge31cbiAgaWYgKHNzbEVuYWJsZWQpIHtcbiAgICBodHRwSGFuZGxlck9wdHMuaHR0cHNBZ2VudCA9IGdldFByb3h5QWdlbnQob3B0cy5wcm94eSwgdHJ1ZSwgb3B0cy5yZWplY3RVbmF1dGhvcml6ZWQgPz8gZmFsc2UpIGFzIEh0dHBzUHJveHlBZ2VudFxuICB9IGVsc2Uge1xuICAgIGh0dHBIYW5kbGVyT3B0cy5odHRwQWdlbnQgPSBnZXRQcm94eUFnZW50KG9wdHMucHJveHksIGZhbHNlLCBvcHRzLnJlamVjdFVuYXV0aG9yaXplZCA/PyBmYWxzZSkgYXMgSHR0cFByb3h5QWdlbnRcbiAgfVxuXG4gIGNvbnN0IGNsaWVudE9wdGlvbnM6IFMzQ2xpZW50Q29uZmlnID0ge1xuICAgIHJlZ2lvbjogb3B0cy5yZWdpb24gfHwgJ2F1dG8nLFxuICAgIGVuZHBvaW50OiBvcHRzLmVuZHBvaW50IHx8IHVuZGVmaW5lZCxcbiAgICBjcmVkZW50aWFsczoge1xuICAgICAgYWNjZXNzS2V5SWQ6IG9wdHMuYWNjZXNzS2V5SUQsXG4gICAgICBzZWNyZXRBY2Nlc3NLZXk6IG9wdHMuc2VjcmV0QWNjZXNzS2V5XG4gICAgfSxcbiAgICB0bHM6IHNzbEVuYWJsZWQsXG4gICAgZm9yY2VQYXRoU3R5bGU6IG9wdHMucGF0aFN0eWxlQWNjZXNzLFxuICAgIHJlcXVlc3RIYW5kbGVyOiBuZXcgTm9kZUh0dHBIYW5kbGVyKGh0dHBIYW5kbGVyT3B0cylcbiAgfVxuXG4gIGNvbnN0IGNsaWVudCA9IG5ldyBTM0NsaWVudChjbGllbnRPcHRpb25zKVxuICByZXR1cm4gY2xpZW50XG59XG5cbmludGVyZmFjZSBJQ3JlYXRlVXBsb2FkVGFza09wdHMge1xuICBjbGllbnQ6IGFueVxuICBidWNrZXROYW1lOiBzdHJpbmdcbiAgcGF0aDogc3RyaW5nXG4gIGl0ZW06IElJbWdJbmZvXG4gIGluZGV4OiBudW1iZXJcbiAgYWNsOiBzdHJpbmdcbiAgdXJsUHJlZml4Pzogc3RyaW5nXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVVwbG9hZFRhc2sob3B0czogSUNyZWF0ZVVwbG9hZFRhc2tPcHRzKTogUHJvbWlzZTxJVXBsb2FkUmVzdWx0PiB7XG4gIGlmICghb3B0cy5pdGVtLmJ1ZmZlciAmJiAhb3B0cy5pdGVtLmJhc2U2NEltYWdlKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcigndW5kZWZpbmVkIGltYWdlJykpXG4gIH1cblxuICBsZXQgYm9keTogQnVmZmVyIHwgdW5kZWZpbmVkXG4gIGxldCBjb250ZW50VHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIGxldCBjb250ZW50RW5jb2Rpbmc6IHN0cmluZyB8IHVuZGVmaW5lZFxuXG4gIHRyeSB7XG4gICAgOyh7IGJvZHksIGNvbnRlbnRUeXBlLCBjb250ZW50RW5jb2RpbmcgfSA9IGF3YWl0IGV4dHJhY3RJbmZvKG9wdHMuaXRlbSkpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnIpXG4gIH1cblxuICBjb25zdCBjb21tYW5kID0gbmV3IFB1dE9iamVjdENvbW1hbmQoe1xuICAgIEJ1Y2tldDogb3B0cy5idWNrZXROYW1lLFxuICAgIEtleTogb3B0cy5wYXRoLFxuICAgIEFDTDogb3B0cy5hY2wsXG4gICAgQm9keTogYm9keSxcbiAgICBDb250ZW50VHlwZTogY29udGVudFR5cGUsXG4gICAgQ29udGVudEVuY29kaW5nOiBjb250ZW50RW5jb2RpbmdcbiAgfSlcblxuICBsZXQgb3V0cHV0OiBQdXRPYmplY3RDb21tYW5kT3V0cHV0XG4gIHRyeSB7XG4gICAgb3V0cHV0ID0gYXdhaXQgb3B0cy5jbGllbnQuc2VuZChjb21tYW5kKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKVxuICB9XG5cbiAgbGV0IHVybDogc3RyaW5nXG4gIGlmICghb3B0cy51cmxQcmVmaXgpIHtcbiAgICB0cnkge1xuICAgICAgdXJsID0gYXdhaXQgZ2V0RmlsZVVSTChvcHRzLCBvdXRwdXQuRVRhZyEsIG91dHB1dC5WZXJzaW9uSWQhKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycilcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdXJsID0gYCR7b3B0cy51cmxQcmVmaXh9LyR7b3B0cy5wYXRofWBcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaW5kZXg6IG9wdHMuaW5kZXgsXG4gICAga2V5OiBvcHRzLnBhdGgsXG4gICAgdXJsLFxuICAgIGltZ1VSTDogdXJsLFxuICAgIHZlcnNpb25JZDogb3V0cHV0LlZlcnNpb25JZCxcbiAgICBlVGFnOiBvdXRwdXQuRVRhZ1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEZpbGVVUkwob3B0czogSUNyZWF0ZVVwbG9hZFRhc2tPcHRzLCBlVGFnOiBzdHJpbmcsIHZlcnNpb25JZDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBzaWduZWRVcmwgPSBhd2FpdCBnZXRTaWduZWRVcmwoXG4gICAgICBvcHRzLmNsaWVudCxcbiAgICAgIG5ldyBHZXRPYmplY3RDb21tYW5kKHtcbiAgICAgICAgQnVja2V0OiBvcHRzLmJ1Y2tldE5hbWUsXG4gICAgICAgIEtleTogb3B0cy5wYXRoLFxuICAgICAgICBJZk1hdGNoOiBlVGFnLFxuICAgICAgICBWZXJzaW9uSWQ6IHZlcnNpb25JZFxuICAgICAgfSksXG4gICAgICB7IGV4cGlyZXNJbjogMzYwMCB9XG4gICAgKVxuICAgIGNvbnN0IHVybE9iamVjdCA9IG5ldyB1cmwuVVJMKHNpZ25lZFVybClcbiAgICB1cmxPYmplY3Quc2VhcmNoID0gJydcbiAgICByZXR1cm4gdXJsT2JqZWN0LmhyZWZcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycilcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNyZWF0ZVMzQ2xpZW50LFxuICBjcmVhdGVVcGxvYWRUYXNrLFxuICBnZXRGaWxlVVJMXG59XG4iLCJpbXBvcnQgdXBsb2FkZXIsIHsgSVVwbG9hZFJlc3VsdCB9IGZyb20gJy4vczMvdXBsb2FkZXInXG5cbmltcG9ydCB7IGZvcm1hdFBhdGggfSBmcm9tICcuL3MzL3V0aWxzJ1xuaW1wb3J0IHsgSUF3c1MzUExpc3RVc2VyQ29uZmlnLCBJUGljR28sIElQbHVnaW5Db25maWcgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xuXG5mdW5jdGlvbiBmb3JtYXREaXNhYmxlQnVja2V0UHJlZml4VG9VUkwoZGlzYWJsZUJ1Y2tldFByZWZpeFRvVVJMOiBzdHJpbmcgfCBib29sZWFuIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gIGlmICh0eXBlb2YgZGlzYWJsZUJ1Y2tldFByZWZpeFRvVVJMID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBkaXNhYmxlQnVja2V0UHJlZml4VG9VUkwudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnXG4gIH1cbiAgcmV0dXJuIEJvb2xlYW4oZGlzYWJsZUJ1Y2tldFByZWZpeFRvVVJMKVxufVxuXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xuICBjb25zdCB1c2VyQ29uZmlnOiBJQXdzUzNQTGlzdFVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnKCdwaWNCZWQuYXdzLXMzLXBsaXN0JylcbiAgaWYgKCF1c2VyQ29uZmlnKSB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBmaW5kIGF3cyBzMyB1cGxvYWRlciBjb25maWdcIilcblxuICBjb25zdCBkaXNhYmxlQnVja2V0UHJlZml4VG9VUkwgPSBmb3JtYXREaXNhYmxlQnVja2V0UHJlZml4VG9VUkwodXNlckNvbmZpZy5kaXNhYmxlQnVja2V0UHJlZml4VG9VUkwpXG4gIGxldCB1cmxQcmVmaXggPSB1c2VyQ29uZmlnLnVybFByZWZpeFxuICBpZiAodXJsUHJlZml4KSB7XG4gICAgdXJsUHJlZml4ID0gdXJsUHJlZml4LnJlcGxhY2UoL1xcLz8kLywgJycpXG4gICAgaWYgKHVzZXJDb25maWcucGF0aFN0eWxlQWNjZXNzICYmICFkaXNhYmxlQnVja2V0UHJlZml4VG9VUkwpIHtcbiAgICAgIHVybFByZWZpeCArPSAnLycgKyB1c2VyQ29uZmlnLmJ1Y2tldE5hbWVcbiAgICB9XG4gIH1cblxuICBjb25zdCBjbGllbnQgPSB1cGxvYWRlci5jcmVhdGVTM0NsaWVudCh1c2VyQ29uZmlnKVxuICBjb25zdCBvdXRwdXQgPSBjdHgub3V0cHV0XG5cbiAgY29uc3QgdGFza3MgPSBvdXRwdXQubWFwKGFzeW5jIChpdGVtLCBpZHgpID0+XG4gICAgdXBsb2FkZXIuY3JlYXRlVXBsb2FkVGFzayh7XG4gICAgICBjbGllbnQsXG4gICAgICBpbmRleDogaWR4LFxuICAgICAgYnVja2V0TmFtZTogdXNlckNvbmZpZy5idWNrZXROYW1lLFxuICAgICAgcGF0aDogZm9ybWF0UGF0aChpdGVtLCB1c2VyQ29uZmlnLnVwbG9hZFBhdGgpLFxuICAgICAgaXRlbSxcbiAgICAgIGFjbDogdXNlckNvbmZpZy5hY2wgfHwgJ3B1YmxpYy1yZWFkJyxcbiAgICAgIHVybFByZWZpeFxuICAgIH0pXG4gIClcblxuICBsZXQgcmVzdWx0czogSVVwbG9hZFJlc3VsdFtdXG5cbiAgdHJ5IHtcbiAgICByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwodGFza3MpXG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgY3R4LmxvZy5lcnJvcign5LiK5Lyg5YiwIFMzIOWtmOWCqOWPkeeUn+mUmeivr++8jOivt+ajgOafpee9kee7nOi/nuaOpeWSjOmFjee9ruaYr+WQpuato+ehricpXG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcbiAgICAgIHRpdGxlOiAnUzMg5a2Y5YKo5LiK5Lyg6ZSZ6K+vJyxcbiAgICAgIGJvZHk6ICfor7fmo4Dmn6XphY3nva7mmK/lkKbmraPnoa4nLFxuICAgICAgdGV4dDogJydcbiAgICB9KVxuICAgIHRocm93IGVyclxuICB9XG5cbiAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVzdWx0cykge1xuICAgIGNvbnN0IHsgaW5kZXgsIHVybCwgaW1nVVJMIH0gPSByZXN1bHRcbiAgICBkZWxldGUgb3V0cHV0W2luZGV4XS5idWZmZXJcbiAgICBkZWxldGUgb3V0cHV0W2luZGV4XS5iYXNlNjRJbWFnZVxuICAgIG91dHB1dFtpbmRleF0uaW1nVXJsID0gaW1nVVJMXG4gICAgb3V0cHV0W2luZGV4XS51cmwgPSB1cmxcbiAgfVxuXG4gIHJldHVybiBjdHhcbn1cblxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcbiAgY29uc3QgZGVmYXVsdENvbmZpZzogSUF3c1MzUExpc3RVc2VyQ29uZmlnID0ge1xuICAgIGFjY2Vzc0tleUlEOiAnJyxcbiAgICBzZWNyZXRBY2Nlc3NLZXk6ICcnLFxuICAgIGJ1Y2tldE5hbWU6ICcnLFxuICAgIHVwbG9hZFBhdGg6ICd7eWVhcn0ve21vbnRofS97bWQ1fS57ZXh0TmFtZX0nLFxuICAgIHBhdGhTdHlsZUFjY2VzczogZmFsc2UsXG4gICAgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZSxcbiAgICBhY2w6ICdwdWJsaWMtcmVhZCdcbiAgfVxuICBsZXQgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SUF3c1MzUExpc3RVc2VyQ29uZmlnPigncGljQmVkLmF3cy1zMy1wbGlzdCcpIHx8IHt9XG4gIHVzZXJDb25maWcgPSB7IC4uLmRlZmF1bHRDb25maWcsIC4uLnVzZXJDb25maWcgfVxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAnYWNjZXNzS2V5SUQnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYWNjZXNzS2V5SUQsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9BQ0NFU1NLRVlJRCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfQUNDRVNTS0VZSUQnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9BQ0NFU1NLRVlJRCcpXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnc2VjcmV0QWNjZXNzS2V5JyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnNlY3JldEFjY2Vzc0tleSxcbiAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX1NFQ1JFVF9BQ0NFU1NLRVknKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX1NFQ1JFVF9BQ0NFU1NLRVknKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9TRUNSRVRfQUNDRVNTS0VZJylcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdidWNrZXROYW1lJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmJ1Y2tldE5hbWUsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9CVUNLRVQnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX0JVQ0tFVCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0JVQ0tFVCcpXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAndXBsb2FkUGF0aCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy51cGxvYWRQYXRoLFxuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfVVBMT0FEUEFUSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfVVBMT0FEUEFUSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1VQTE9BRFBBVEgnKVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3JlZ2lvbicsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5yZWdpb24sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfUkVHSU9OJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9SRUdJT04nKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9SRUdJT04nKVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2VuZHBvaW50JyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmVuZHBvaW50LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX0VORFBPSU5UJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9FTkRQT0lOVCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0VORFBPSU5UJylcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdwcm94eScsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wcm94eSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9QUk9YWScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfUFJPWFknKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9QUk9YWScpXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAndXJsUHJlZml4JyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnVybFByZWZpeCxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9VUkxQUkVGSVgnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX1VSTFBSRUZJWCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1VSTFBSRUZJWCcpXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAncGF0aFN0eWxlQWNjZXNzJyxcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGF0aFN0eWxlQWNjZXNzIHx8IGZhbHNlLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX1BBVEhTVFlMRUFDQ0VTUycpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfUEFUSFNUWUxFQUNDRVNTJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUEFUSFNUWUxFQUNDRVNTJylcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdyZWplY3RVbmF1dGhvcml6ZWQnLFxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5yZWplY3RVbmF1dGhvcml6ZWQgfHwgZmFsc2UsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfUkVKRUNUVU5BVVRIT1JJWkVEJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9SRUpFQ1RVTkFVVEhPUklaRUQnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9SRUpFQ1RVTkFVVEhPUklaRUQnKVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2FjbCcsXG4gICAgICB0eXBlOiAnbGlzdCcsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFjbCB8fCAncHVibGljLXJlYWQnLFxuICAgICAgY2hvaWNlczogW1xuICAgICAgICAncHJpdmF0ZScsXG4gICAgICAgICdwdWJsaWMtcmVhZCcsXG4gICAgICAgICdwdWJsaWMtcmVhZC13cml0ZScsXG4gICAgICAgICdhdXRoZW50aWNhdGVkLXJlYWQnLFxuICAgICAgICAnYXdzLWV4ZWMtcmVhZCcsXG4gICAgICAgICdidWNrZXQtb3duZXItcmVhZCcsXG4gICAgICAgICdidWNrZXQtb3duZXItZnVsbC1jb250cm9sJ1xuICAgICAgXSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9BQ0wnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9BV1NTM1BMSVNUX0FDTCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0FDTCcpXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnZGlzYWJsZUJ1Y2tldFByZWZpeFRvVVJMJyxcbiAgICAgIHR5cGU6ICdjb25maXJtJyxcbiAgICAgIGRlZmF1bHQ6IGZvcm1hdERpc2FibGVCdWNrZXRQcmVmaXhUb1VSTCh1c2VyQ29uZmlnLmRpc2FibGVCdWNrZXRQcmVmaXhUb1VSTCkgfHwgZmFsc2UsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfRElTQUJMRUJVQ0tFVFBSRUZJWFRPVVJMJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVF9ESVNBQkxFQlVDS0VUUFJFRklYVE9VUkwnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9ESVNBQkxFQlVDS0VUUFJFRklYVE9VUkwnKVxuICAgICAgfVxuICAgIH1cbiAgXVxuICByZXR1cm4gY29uZmlnXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyKGN0eDogSVBpY0dvKTogdm9pZCB7XG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ2F3cy1zMy1wbGlzdCcsIHtcbiAgICBnZXQgbmFtZSgpIHtcbiAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfQVdTUzNQTElTVCcpXG4gICAgfSxcbiAgICBoYW5kbGUsXG4gICAgY29uZmlnXG4gIH0pXG59XG4iLCJpbXBvcnQgeyBsb29rdXAgfSBmcm9tICdtaW1lLXR5cGVzJ1xuXG5pbXBvcnQgeyBJUGljR28sIElQbHVnaW5Db25maWcsIElHaXRodWJDb25maWcsIElPbGRSZXFPcHRpb25zV2l0aEpTT04gfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xuaW1wb3J0IHsgZW5jb2RlUGF0aCwgZm9ybWF0UGF0aEhlbHBlciB9IGZyb20gJy4vdXRpbHMnXG5cbmZ1bmN0aW9uIGJ1aWxkR2l0aHViQXBpVXJsKHJlcG86IHN0cmluZywgcGF0aDogc3RyaW5nLCBmaWxlTmFtZTogc3RyaW5nLCBleHRyYTogc3RyaW5nID0gJycpOiBzdHJpbmcge1xuICByZXR1cm4gYGh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvJHtyZXBvfS9jb250ZW50cy8ke2VuY29kZVBhdGgoYCR7cGF0aH0ke2ZpbGVOYW1lfWApfSR7ZXh0cmF9YFxufVxuXG5jb25zdCBwb3N0T3B0aW9ucyA9IChmaWxlTmFtZTogc3RyaW5nLCBvcHRpb25zOiBJR2l0aHViQ29uZmlnLCBkYXRhOiBhbnkpOiBJT2xkUmVxT3B0aW9uc1dpdGhKU09OID0+IHtcbiAgY29uc3QgeyB0b2tlbiwgcmVwbyB9ID0gb3B0aW9uc1xuICBjb25zdCBjb250ZW50VHlwZSA9IGxvb2t1cChmaWxlTmFtZSkgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSdcbiAgcmV0dXJuIHtcbiAgICBtZXRob2Q6ICdQVVQnLFxuICAgIHVybDogYnVpbGRHaXRodWJBcGlVcmwocmVwbywgb3B0aW9ucy5wYXRoLCBmaWxlTmFtZSksXG4gICAgaGVhZGVyczoge1xuICAgICAgQXV0aG9yaXphdGlvbjogYHRva2VuICR7dG9rZW59YCxcbiAgICAgICdVc2VyLUFnZW50JzogJ1BpY0xpc3QnLFxuICAgICAgJ0NvbnRlbnQtVHlwZSc6IGNvbnRlbnRUeXBlXG4gICAgfSxcbiAgICBib2R5OiBkYXRhLFxuICAgIGpzb246IHRydWVcbiAgfSBhcyBjb25zdFxufVxuXG5jb25zdCBnZXRPcHRpb25zID0gKGZpbGVOYW1lOiBzdHJpbmcsIG9wdGlvbnM6IElHaXRodWJDb25maWcpOiBJT2xkUmVxT3B0aW9uc1dpdGhKU09OID0+IHtcbiAgY29uc3QgeyB0b2tlbiwgcmVwbywgYnJhbmNoIH0gPSBvcHRpb25zXG4gIHJldHVybiB7XG4gICAgbWV0aG9kOiAnR0VUJyxcbiAgICB1cmw6IGJ1aWxkR2l0aHViQXBpVXJsKHJlcG8sIG9wdGlvbnMucGF0aCwgZmlsZU5hbWUsIGA/cmVmPSR7YnJhbmNofWApLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIEF1dGhvcml6YXRpb246IGB0b2tlbiAke3Rva2VufWAsXG4gICAgICAnVXNlci1BZ2VudCc6ICdQaWNMaXN0J1xuICAgIH0sXG4gICAganNvbjogdHJ1ZVxuICB9XG59XG5cbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XG4gIGNvbnN0IGdpdGh1Yk9wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElHaXRodWJDb25maWc+KCdwaWNCZWQuZ2l0aHViJylcbiAgaWYgKCFnaXRodWJPcHRpb25zKSB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBmaW5kIGdpdGh1YiBjb25maWdcIilcblxuICBjb25zdCB1cGxvYWRQYXRoID0gZm9ybWF0UGF0aEhlbHBlcih7IHBhdGg6IGdpdGh1Yk9wdGlvbnMucGF0aCB9KVxuICBnaXRodWJPcHRpb25zLnBhdGggPSB1cGxvYWRQYXRoXG4gIGdpdGh1Yk9wdGlvbnMuY3VzdG9tVXJsID0gKGdpdGh1Yk9wdGlvbnMuY3VzdG9tVXJsIHx8ICcnKS5yZXBsYWNlKC9cXC8kLywgJycpXG4gIHRyeSB7XG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcbiAgICAgICAgY29uc3QgYmFzZTY0SW1hZ2UgPSBpbWcuYmFzZTY0SW1hZ2UgfHwgQnVmZmVyLmZyb20oaW1nLmJ1ZmZlcikudG9TdHJpbmcoJ2Jhc2U2NCcpXG4gICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgbWVzc2FnZTogJ1VwbG9hZCBieSBQaWNMaXN0JyxcbiAgICAgICAgICBicmFuY2g6IGdpdGh1Yk9wdGlvbnMuYnJhbmNoLFxuICAgICAgICAgIGNvbnRlbnQ6IGJhc2U2NEltYWdlLFxuICAgICAgICAgIHBhdGg6IHVwbG9hZFBhdGggKyBlbmNvZGVVUkkoaW1nLmZpbGVOYW1lKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBvc3RDb25maWcgPSBwb3N0T3B0aW9ucyhpbWcuZmlsZU5hbWUsIGdpdGh1Yk9wdGlvbnMsIGRhdGEpXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgYm9keToge1xuICAgICAgICAgICAgY29udGVudDoge1xuICAgICAgICAgICAgICBkb3dubG9hZF91cmw6IHN0cmluZ1xuICAgICAgICAgICAgICBzaGE6IHN0cmluZ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gPSBhd2FpdCBjdHgucmVxdWVzdChwb3N0Q29uZmlnKVxuICAgICAgICAgIGlmIChib2R5KSB7XG4gICAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXG4gICAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxuICAgICAgICAgICAgaW1nLmltZ1VybCA9IGdpdGh1Yk9wdGlvbnMuY3VzdG9tVXJsXG4gICAgICAgICAgICAgID8gYCR7Z2l0aHViT3B0aW9ucy5jdXN0b21Vcmx9LyR7ZW5jb2RlUGF0aChgJHt1cGxvYWRQYXRofSR7aW1nLmZpbGVOYW1lfWApfWBcbiAgICAgICAgICAgICAgOiBib2R5LmNvbnRlbnQuZG93bmxvYWRfdXJsXG4gICAgICAgICAgICBpbWcuaGFzaCA9IGJvZHkuY29udGVudC5zaGFcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZXJ2ZXIgZXJyb3IsIHBsZWFzZSB0cnkgYWdhaW4nKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgICAgICBpZiAoZXJyLnN0YXR1c0NvZGUgIT09IDQyMikgdGhyb3cgZXJyXG4gICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXG4gICAgICAgICAgY29uc3QgcmVzID0gKGF3YWl0IGN0eC5yZXF1ZXN0KGdldE9wdGlvbnMoaW1nLmZpbGVOYW1lLCBnaXRodWJPcHRpb25zKSkpIGFzIGFueVxuICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhyZXMpLmxlbmd0aCkge1xuICAgICAgICAgICAgaW1nLmhhc2ggPSByZXMuc2hhXG4gICAgICAgICAgICBpbWcuaW1nVXJsID0gZ2l0aHViT3B0aW9ucy5jdXN0b21VcmxcbiAgICAgICAgICAgICAgPyBgJHtnaXRodWJPcHRpb25zLmN1c3RvbVVybH0vJHtlbmNvZGVQYXRoKGAke3VwbG9hZFBhdGh9JHtpbWcuZmlsZU5hbWV9YCl9YFxuICAgICAgICAgICAgICA6IHJlcy5kb3dubG9hZF91cmxcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgZXJyXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjdHhcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xuICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcbiAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0NIRUNLX1NFVFRJTkdTX0FORF9ORVRXT1JLJylcbiAgICB9KVxuICAgIHRocm93IGVyclxuICB9XG59XG5cbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElHaXRodWJDb25maWc+KCdwaWNCZWQuZ2l0aHViJykgfHwge31cbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXG4gICAge1xuICAgICAgbmFtZTogJ3JlcG8nLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX1JFUE8nKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfUkVQTycpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX01FU1NBR0VfUkVQTycpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5yZXBvIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdicmFuY2gnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX0JSQU5DSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9CUkFOQ0gnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9NRVNTQUdFX0JSQU5DSCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5icmFuY2ggfHwgJ21hc3RlcicsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3Rva2VuJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9UT0tFTicpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9UT0tFTicpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy50b2tlbiB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAncGF0aCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9QQVRIJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9HSVRIVUJfTUVTU0FHRV9QQVRIJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhdGggfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdjdXN0b21VcmwnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfR0lUSFVCX0NVU1RPTVVSTCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9DVVNUT01VUkwnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQl9NRVNTQUdFX0NVU1RPTVVSTCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5jdXN0b21VcmwgfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9XG4gIF1cbiAgcmV0dXJuIGNvbmZpZ1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlcihjdHg6IElQaWNHbyk6IHZvaWQge1xuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKCdnaXRodWInLCB7XG4gICAgZ2V0IG5hbWUoKSB7XG4gICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0dJVEhVQicpXG4gICAgfSxcbiAgICBoYW5kbGUsXG4gICAgY29uZmlnXG4gIH0pXG59XG4iLCJpbXBvcnQgeyBJUGljR28sIElQbHVnaW5Db25maWcsIElJbWd1ckNvbmZpZywgSU9sZFJlcU9wdGlvbnMsIElGdWxsUmVzcG9uc2UgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xuXG5jb25zdCBmb3JtYXRBY2Nlc3NUb2tlbiA9IChhY2Nlc3NUb2tlbjogc3RyaW5nKTogc3RyaW5nID0+XG4gIGFjY2Vzc1Rva2VuID8gKGFjY2Vzc1Rva2VuLnN0YXJ0c1dpdGgoJ0JlYXJlcicpID8gYWNjZXNzVG9rZW4gOiBgQmVhcmVyICR7YWNjZXNzVG9rZW59YCkgOiAnJ1xuXG5jb25zdCBwb3N0T3B0aW9ucyA9IGFzeW5jIChcbiAgY3R4OiBJUGljR28sXG4gIG9wdGlvbnM6IElJbWd1ckNvbmZpZyxcbiAgZmlsZU5hbWU6IHN0cmluZyxcbiAgaW1nQmFzZTY0OiBzdHJpbmdcbik6IFByb21pc2U8SU9sZFJlcU9wdGlvbnM+ID0+IHtcbiAgY29uc3QgY2xpZW50SWQgPSBvcHRpb25zLmNsaWVudElkIHx8ICcnXG4gIGNvbnN0IHVzZXJuYW1lID0gb3B0aW9ucy51c2VybmFtZSB8fCAnJ1xuICBjb25zdCBhY2Nlc3NUb2tlbiA9IGZvcm1hdEFjY2Vzc1Rva2VuKG9wdGlvbnMuYWNjZXNzVG9rZW4gfHwgJycpXG4gIGNvbnN0IGFsYnVtID0gb3B0aW9ucy5hbGJ1bSB8fCAnJ1xuICBsZXQgYXV0aG9yaXphdGlvblxuICBpZiAodXNlcm5hbWUgJiYgYWNjZXNzVG9rZW4pIHtcbiAgICBhdXRob3JpemF0aW9uID0gYWNjZXNzVG9rZW5cbiAgfSBlbHNlIGlmIChjbGllbnRJZCkge1xuICAgIGF1dGhvcml6YXRpb24gPSBgQ2xpZW50LUlEICR7Y2xpZW50SWR9YFxuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xpZW50SWQgb3IgYWNjZXNzVG9rZW4gaXMgcmVxdWlyZWQnKVxuICB9XG4gIGNvbnN0IHJlcXVlc3RPcHRpb25zOiBJT2xkUmVxT3B0aW9ucyA9IHtcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICB1cmw6ICdodHRwczovL2FwaS5pbWd1ci5jb20vMy9pbWFnZScsXG4gICAgaGVhZGVyczoge1xuICAgICAgQXV0aG9yaXphdGlvbjogYXV0aG9yaXphdGlvbixcbiAgICAgICdjb250ZW50LXR5cGUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsXG4gICAgICBIb3N0OiAnYXBpLmltZ3VyLmNvbScsXG4gICAgICAnVXNlci1BZ2VudCc6ICdQaWNMaXN0J1xuICAgIH0sXG4gICAgZm9ybURhdGE6IHtcbiAgICAgIGltYWdlOiBpbWdCYXNlNjQsXG4gICAgICB0eXBlOiAnYmFzZTY0JyxcbiAgICAgIG5hbWU6IGZpbGVOYW1lLFxuICAgICAgZGVzY3JpcHRpb246ICdVcGxvYWRlZCB3aXRoIFBpY0xpc3QnXG4gICAgfVxuICB9XG4gIGlmICh1c2VybmFtZSAmJiBhY2Nlc3NUb2tlbiAmJiBhbGJ1bSkge1xuICAgIGxldCBpbml0UGFnZXMgPSAwXG4gICAgbGV0IHJlc1xuICAgIGxldCBhbGJ1bUhhc2ggPSAnJ1xuICAgIGRvIHtcbiAgICAgIGNvbnN0IGdldEFsYnVtSGFzaE9wdGlvbnM6IElPbGRSZXFPcHRpb25zID0ge1xuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICB1cmw6IGBodHRwczovL2FwaS5pbWd1ci5jb20vMy9hY2NvdW50LyR7dXNlcm5hbWV9L2FsYnVtcy8ke2luaXRQYWdlc31gLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgQXV0aG9yaXphdGlvbjogYXV0aG9yaXphdGlvblxuICAgICAgICB9LFxuICAgICAgICBqc29uOiB0cnVlLFxuICAgICAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZSxcbiAgICAgICAgdGltZW91dDogMTAwMDBcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25zLnByb3h5KSB7XG4gICAgICAgIGdldEFsYnVtSGFzaE9wdGlvbnMucHJveHkgPSBvcHRpb25zLnByb3h5XG4gICAgICB9XG4gICAgICByZXMgPSAoYXdhaXQgY3R4LnJlcXVlc3QoZ2V0QWxidW1IYXNoT3B0aW9ucykpIGFzIHVua25vd24gYXMgSUZ1bGxSZXNwb25zZVxuICAgICAgaWYgKCEocmVzLnN0YXR1c0NvZGUgPT09IDIwMCAmJiByZXMuYm9keS5zdWNjZXNzKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlcnZlciBlcnJvciwgcGxlYXNlIHRyeSBhZ2FpbicpXG4gICAgICB9XG4gICAgICBjb25zdCBhbGJ1bUxpc3QgPSByZXMuYm9keS5kYXRhXG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgYWxidW1MaXN0KSB7XG4gICAgICAgIGlmIChpdGVtLnRpdGxlID09PSBhbGJ1bSkge1xuICAgICAgICAgIGFsYnVtSGFzaCA9IGl0ZW0uaWRcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpbml0UGFnZXMrK1xuICAgIH0gd2hpbGUgKHJlcy5ib2R5LmRhdGEubGVuZ3RoID4gMClcbiAgICBpZiAoYWxidW1IYXNoICYmIHJlcXVlc3RPcHRpb25zLmZvcm1EYXRhKSB7XG4gICAgICByZXF1ZXN0T3B0aW9ucy5mb3JtRGF0YS5hbGJ1bSA9IGFsYnVtSGFzaFxuICAgIH1cbiAgfVxuICBpZiAob3B0aW9ucy5wcm94eSkge1xuICAgIHJlcXVlc3RPcHRpb25zLnByb3h5ID0gb3B0aW9ucy5wcm94eVxuICB9XG4gIHJldHVybiByZXF1ZXN0T3B0aW9uc1xufVxuXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xuICBjb25zdCBpbWd1ck9wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElJbWd1ckNvbmZpZz4oJ3BpY0JlZC5pbWd1cicpXG4gIGlmICghaW1ndXJPcHRpb25zKSB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBmaW5kIGltZ3VyIGNvbmZpZ1wiKVxuICB0cnkge1xuICAgIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xuICAgICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XG4gICAgICAgIGNvbnN0IGJhc2U2NEltYWdlID0gaW1nLmJhc2U2NEltYWdlIHx8IEJ1ZmZlci5mcm9tKGltZy5idWZmZXIpLnRvU3RyaW5nKCdiYXNlNjQnKVxuICAgICAgICBjb25zdCBvcHRpb25zID0gYXdhaXQgcG9zdE9wdGlvbnMoY3R4LCBpbWd1ck9wdGlvbnMsIGltZy5maWxlTmFtZSwgYmFzZTY0SW1hZ2UpXG4gICAgICAgIGNvbnN0IHJlczogc3RyaW5nID0gYXdhaXQgY3R4LnJlcXVlc3Qob3B0aW9ucylcbiAgICAgICAgY29uc3QgYm9keSA9IHR5cGVvZiByZXMgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShyZXMpIDogcmVzXG4gICAgICAgIGlmIChib2R5LnN1Y2Nlc3MpIHtcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcbiAgICAgICAgICBpbWcuaW1nVXJsID0gYm9keS5kYXRhLmxpbmtcbiAgICAgICAgICBpbWcuaGFzaCA9IGJvZHkuZGF0YS5kZWxldGVoYXNoXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZXJ2ZXIgZXJyb3IsIHBsZWFzZSB0cnkgYWdhaW4nKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjdHhcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xuICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcbiAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0NIRUNLX1NFVFRJTkdTX0FORF9ORVRXT1JLJyksXG4gICAgICB0ZXh0OiAnaHR0cDovL2RvY3MuaW1ndXIuY29tL2FwaS9lcnJuby8nXG4gICAgfSlcbiAgICB0aHJvdyBlcnI/LnJlc3BvbnNlPy5kYXRhIHx8IGVyclxuICB9XG59XG5cbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElJbWd1ckNvbmZpZz4oJ3BpY0JlZC5pbWd1cicpIHx8IHt9XG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICdjbGllbnRJZCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9DTElFTlRJRCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX0NMSUVOVElEJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9NRVNTQUdFX0NMSUVOVElEJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmNsaWVudElkIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAndXNlcm5hbWUnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfVVNFUk5BTUUnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9VU0VSTkFNRScpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfTUVTU0FHRV9VU0VSTkFNRScpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy51c2VybmFtZSB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2FjY2Vzc1Rva2VuJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX0FDQ0VTU19UT0tFTicpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX0FDQ0VTU19UT0tFTicpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfTUVTU0FHRV9BQ0NFU1NfVE9LRU4nKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYWNjZXNzVG9rZW4gfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdhbGJ1bScsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9BTEJVTScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0lNR1VSX0FMQlVNJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9NRVNTQUdFX0FMQlVNJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmFsYnVtIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAncHJveHknLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfUFJPWFknKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9QUk9YWScpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfTUVTU0FHRV9QUk9YWScpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wcm94eSB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH1cbiAgXVxuICByZXR1cm4gY29uZmlnXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyKGN0eDogSVBpY0dvKTogdm9pZCB7XG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ2ltZ3VyJywge1xuICAgIGdldCBuYW1lKCkge1xuICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUicpXG4gICAgfSxcbiAgICBoYW5kbGUsXG4gICAgY29uZmlnXG4gIH0pXG59XG4iLCJpbXBvcnQgZnMsIHsgZW5zdXJlRGlyU3luYyB9IGZyb20gJ2ZzLWV4dHJhJ1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcblxuaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJTG9jYWxDb25maWcgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xuXG5pbXBvcnQgeyBlbmNvZGVQYXRoLCBmb3JtYXRQYXRoSGVscGVyIH0gZnJvbSAnLi91dGlscydcblxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcbiAgY29uc3QgbG9jYWxDb25maWcgPSBjdHguZ2V0Q29uZmlnPElMb2NhbENvbmZpZz4oJ3BpY0JlZC5sb2NhbCcpXG4gIGlmICghbG9jYWxDb25maWcpIHRocm93IG5ldyBFcnJvcignQ2FuIG5vdCBmaW5kIGxvY2FsIGNvbmZpZyEnKVxuXG4gIGNvbnN0IHVwbG9hZFBhdGggPSBsb2NhbENvbmZpZy5wYXRoIHx8ICcnXG4gIGNvbnN0IGN1c3RvbVVybCA9IChsb2NhbENvbmZpZy5jdXN0b21VcmwgfHwgJycpLnJlcGxhY2UoL1xcLyQvLCAnJylcbiAgY29uc3Qgd2ViUGF0aCA9IGZvcm1hdFBhdGhIZWxwZXIoe1xuICAgIHBhdGg6IGxvY2FsQ29uZmlnLndlYlBhdGg/LnJlcGxhY2UoL1xcXFwvZywgJy8nKVxuICB9KVxuICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxuICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XG4gICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XG4gICAgICBsZXQgaW1hZ2UgPSBpbWcuYnVmZmVyXG4gICAgICBpZiAoIWltYWdlICYmIGltZy5iYXNlNjRJbWFnZSkge1xuICAgICAgICBpbWFnZSA9IEJ1ZmZlci5mcm9tKGltZy5iYXNlNjRJbWFnZSwgJ2Jhc2U2NCcpXG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBpbWdUZW1wUGF0aCA9IHBhdGguam9pbihjdHguYmFzZURpciwgJ2ltZ1RlbXAnLCAnbG9jYWwnKVxuICAgICAgICBjb25zdCBmaWxlSW1nVGVtcFBhdGggPSBwYXRoLmpvaW4oaW1nVGVtcFBhdGgsIGltZy5maWxlTmFtZSlcbiAgICAgICAgY29uc3QgZmlsZVVwbG9hZFBhdGggPSBwYXRoLmpvaW4odXBsb2FkUGF0aCwgaW1nLmZpbGVOYW1lKVxuICAgICAgICBlbnN1cmVEaXJTeW5jKHBhdGguZGlybmFtZShmaWxlVXBsb2FkUGF0aCkpXG4gICAgICAgIGVuc3VyZURpclN5bmMocGF0aC5kaXJuYW1lKGZpbGVJbWdUZW1wUGF0aCkpXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmMoZmlsZVVwbG9hZFBhdGgsIGltYWdlKVxuICAgICAgICBmcy5jb3B5RmlsZVN5bmMoZmlsZVVwbG9hZFBhdGgsIGZpbGVJbWdUZW1wUGF0aClcbiAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxuICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxuICAgICAgICBpZiAoY3VzdG9tVXJsKSB7XG4gICAgICAgICAgaW1nLmltZ1VybCA9IGAke2N1c3RvbVVybH0vJHtlbmNvZGVQYXRoKGAke3dlYlBhdGh9JHtpbWcuZmlsZU5hbWV9YCl9YFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGltZy5pbWdVcmwgPSBwYXRoLmpvaW4odXBsb2FkUGF0aCwgaW1nLmZpbGVOYW1lKVxuICAgICAgICB9XG4gICAgICAgIGltZy5oYXNoID0gcGF0aC5qb2luKHVwbG9hZFBhdGgsIGltZy5maWxlTmFtZSlcbiAgICAgICAgaW1nLmdhbGxlcnlQYXRoID0gYGh0dHA6Ly9sb2NhbGhvc3Q6MzY2OTkvbG9jYWwvJHtlbmNvZGVQYXRoKGltZy5maWxlTmFtZSkucmVwbGFjZSgvXlxcLy8sICcnKX1gXG4gICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcbiAgICAgICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxuICAgICAgICAgIGJvZHk6ICdmYWlsZWQgdG8gdXBsb2FkIGltYWdlJ1xuICAgICAgICB9KVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZhaWxlZCB0byB1cGxvYWQgaW1hZ2UnKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gY3R4XG59XG5cbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElMb2NhbENvbmZpZz4oJ3BpY0JlZC5sb2NhbCcpIHx8IHt9XG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICdwYXRoJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xPQ0FMX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MT0NBTF9QQVRIJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhdGggfHwgJycsXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MT0NBTF9NRVNTQUdFX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnY3VzdG9tVXJsJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xPQ0FMX0NVU1RPTVVSTCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xPQ0FMX0NVU1RPTVVSTCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5jdXN0b21VcmwgfHwgJycsXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MT0NBTF9NRVNTQUdFX0NVU1RPTVVSTCcpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnd2ViUGF0aCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MT0NBTF9XRUJQQVRIJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTE9DQUxfV0VCUEFUSCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy53ZWJQYXRoIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTE9DQUxfTUVTU0FHRV9XRUJQQVRIJylcbiAgICAgIH1cbiAgICB9XG4gIF1cbiAgcmV0dXJuIGNvbmZpZ1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlcihjdHg6IElQaWNHbyk6IHZvaWQge1xuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKCdsb2NhbCcsIHtcbiAgICBnZXQgbmFtZSgpIHtcbiAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTE9DQUwnKVxuICAgIH0sXG4gICAgaGFuZGxlLFxuICAgIGNvbmZpZ1xuICB9KVxufVxuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL2hlbGxvZGszNC9waWNnby1wbHVnaW4tbGFua29uZ1xuLy8gTElDRU5TRTogTUlUXG5cbmltcG9ydCBodHRwcyBmcm9tICdodHRwcydcbmltcG9ydCB7IElMc2t5Q29uZmlnLCBJUGljR28sIElQbHVnaW5Db25maWcgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xuXG5leHBvcnQgaW50ZXJmYWNlIElNR1RZUEUge1xuICBpbWdVcmw/OiBzdHJpbmdcbiAgdHlwZT86IHN0cmluZ1xuICBrZXk/OiBzdHJpbmdcbiAgaWQ/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJVjJGT1JNREFUQSB7XG4gIGZpbGU6IHtcbiAgICB2YWx1ZTogQnVmZmVyXG4gICAgb3B0aW9uczoge1xuICAgICAgZmlsZW5hbWU6IHN0cmluZ1xuICAgIH1cbiAgfVxuICBzc2w6IHN0cmluZ1xuICBzdHJhdGVneV9pZD86IHN0cmluZ1xuICBhbGJ1bV9pZD86IHN0cmluZ1xuICBwZXJtaXNzaW9uPzogbnVtYmVyXG59XG5cbmNvbnN0IHBvc3RPcHRpb25zID0gKG9wdGlvbnM6IElMc2t5Q29uZmlnLCBmaWxlTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBpbWFnZTogQnVmZmVyKTogYW55ID0+IHtcbiAgbGV0IGhvc3QgPSBvcHRpb25zLmhvc3RcbiAgaG9zdCA9IGhvc3QucmVwbGFjZSgvXFwvJC8sICcnKVxuICBjb25zdCBpc1YyID0gb3B0aW9ucy52ZXJzaW9uID09PSAnVjInXG4gIGNvbnN0IHRva2VuID0gb3B0aW9ucy50b2tlblxuXG4gIGNvbnN0IHYxSGVhZGVycyA9IHtcbiAgICAnQ29udGVudC1UeXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnLFxuICAgICdVc2VyLUFnZW50JzogJ1BpY0xpc3QnLFxuICAgIENvbm5lY3Rpb246ICdrZWVwLWFsaXZlJyxcbiAgICB0b2tlbjogdG9rZW4gfHwgdW5kZWZpbmVkXG4gIH1cbiAgY29uc3QgdjFGb3JtRGF0YSA9IHtcbiAgICBpbWFnZToge1xuICAgICAgdmFsdWU6IGltYWdlLFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICBmaWxlbmFtZTogZmlsZU5hbWUhXG4gICAgICB9XG4gICAgfSxcbiAgICBzc2w6ICd0cnVlJ1xuICB9XG5cbiAgY29uc3QgdjJIZWFkZXJzID0ge1xuICAgICdDb250ZW50LVR5cGUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsXG4gICAgJ1VzZXItQWdlbnQnOiAnUGljTGlzdCcsXG4gICAgQ29ubmVjdGlvbjogJ2tlZXAtYWxpdmUnLFxuICAgIEFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgIEF1dGhvcml6YXRpb246IHRva2VuIHx8IHVuZGVmaW5lZFxuICB9XG4gIGNvbnN0IHN0cmF0ZWd5SWQgPSBvcHRpb25zLnN0cmF0ZWd5SWRcbiAgY29uc3QgYWxidW1JZCA9IG9wdGlvbnMuYWxidW1JZFxuICBsZXQgcGVybWlzc2lvbjogYW55ID0gb3B0aW9ucy5wZXJtaXNzaW9uLnZhbHVlXG4gIGlmIChwZXJtaXNzaW9uID09PSB1bmRlZmluZWQpIHtcbiAgICBwZXJtaXNzaW9uID0gb3B0aW9ucy5wZXJtaXNzaW9uXG4gIH1cbiAgY29uc3QgdjJGb3JtRGF0YTogSVYyRk9STURBVEEgPSB7XG4gICAgZmlsZToge1xuICAgICAgdmFsdWU6IGltYWdlLFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICBmaWxlbmFtZTogZmlsZU5hbWUhXG4gICAgICB9XG4gICAgfSxcbiAgICBzc2w6ICd0cnVlJyxcbiAgICBzdHJhdGVneV9pZDogc3RyYXRlZ3lJZCxcbiAgICBhbGJ1bV9pZDogYWxidW1JZCxcbiAgICBwZXJtaXNzaW9uXG4gIH1cbiAgaWYgKCFzdHJhdGVneUlkKSB7XG4gICAgZGVsZXRlIHYyRm9ybURhdGEuc3RyYXRlZ3lfaWRcbiAgfVxuICBpZiAoIWFsYnVtSWQpIHtcbiAgICBkZWxldGUgdjJGb3JtRGF0YS5hbGJ1bV9pZFxuICB9XG4gIGlmICghKHBlcm1pc3Npb24gPT09IDAgfHwgcGVybWlzc2lvbiA9PT0gMSkpIHtcbiAgICBkZWxldGUgdjJGb3JtRGF0YS5wZXJtaXNzaW9uXG4gIH1cblxuICBjb25zdCByZXF1ZXN0QWdlbnQgPSBuZXcgaHR0cHMuQWdlbnQoe1xuICAgIHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2VcbiAgfSlcbiAgcmV0dXJuIHtcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICB1cmw6IGlzVjIgPyBgJHtob3N0fS9hcGkvdjEvdXBsb2FkYCA6IGAke2hvc3R9L2FwaS91cGxvYWRgLFxuICAgIGFnZW50OiByZXF1ZXN0QWdlbnQsXG4gICAgaGVhZGVyczogaXNWMiA/IHYySGVhZGVycyA6IHYxSGVhZGVycyxcbiAgICBmb3JtRGF0YTogaXNWMiA/IHYyRm9ybURhdGEgOiB2MUZvcm1EYXRhXG4gIH1cbn1cblxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcbiAgY29uc3QgbHNreU9wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElMc2t5Q29uZmlnPigncGljQmVkLmxza3lwbGlzdCcpXG4gIGlmICghbHNreU9wdGlvbnMpIHRocm93IG5ldyBFcnJvcihcIkNhbid0IGZpbmQgbHNreSB1cGxvYWRlciBjb25maWdcIilcblxuICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxuICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XG4gICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlciFcbiAgICBpZiAoIWltYWdlICYmIGltZy5iYXNlNjRJbWFnZSkge1xuICAgICAgaW1hZ2UgPSBCdWZmZXIuZnJvbShpbWcuYmFzZTY0SW1hZ2UsICdiYXNlNjQnKVxuICAgIH1cbiAgICBjb25zdCBwb3N0Q29uZmlnID0gcG9zdE9wdGlvbnMobHNreU9wdGlvbnMsIGltZy5maWxlTmFtZSwgaW1hZ2UpXG4gICAgbGV0IGJvZHkgPSAoYXdhaXQgY3R4LnJlcXVlc3QocG9zdENvbmZpZykpIGFzIGFueVxuICAgIGJvZHkgPSB0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKGJvZHkpIDogYm9keVxuICAgIGNvbnN0IGlzVjIgPSBsc2t5T3B0aW9ucy52ZXJzaW9uID09PSAnVjInXG4gICAgY29uc3QgY29uZGl0aW9uID0gaXNWMiA/IGJvZHkuc3RhdHVzID09PSB0cnVlIDogYm9keS5jb2RlID09PSAyMDBcbiAgICBpZiAoY29uZGl0aW9uKSB7XG4gICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXG4gICAgICBkZWxldGUgaW1nLmJ1ZmZlclxuICAgICAgaW1nLmltZ1VybCA9IGlzVjIgPyBib2R5LmRhdGEubGlua3MudXJsIDogYm9keS5kYXRhLnVybFxuICAgICAgaWYgKGlzVjIpIHtcbiAgICAgICAgaW1nLmhhc2ggPSBib2R5LmRhdGEua2V5XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XG4gICAgICAgIHRpdGxlOiAndXBsb2FkIGZhaWxlZCcsXG4gICAgICAgIGJvZHk6IGJvZHkubWVzc2FnZVxuICAgICAgfSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihib2R5Lm1lc3NhZ2UpXG4gICAgfVxuICB9XG4gIHJldHVybiBjdHhcbn1cblxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SUxza3lDb25maWc+KCdwaWNCZWQubHNreXBsaXN0JykgfHwge31cbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXG4gICAge1xuICAgICAgbmFtZTogJ3ZlcnNpb24nLFxuICAgICAgdHlwZTogJ2xpc3QnLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy52ZXJzaW9uIHx8ICdWMScsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfVkVSU0lPTicpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfVkVSU0lPTicpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9NRVNTQUdFX1ZFUlNJT04nKVxuICAgICAgfSxcbiAgICAgIGNob2ljZXM6IFsnVjEnLCAnVjInXSxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnaG9zdCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MU0tZX0hPU1QnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MU0tZX0hPU1QnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfTUVTU0FHRV9IT1NUJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmhvc3QgfHwgJycsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3Rva2VuJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfVE9LRU4nKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MU0tZX1RPS0VOJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MU0tZX01FU1NBR0VfVE9LRU4nKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcudG9rZW4sXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3N0cmF0ZWd5SWQnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuc3RyYXRlZ3lJZCxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9TVFJBVEVHWV9JRCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfU1RSQVRFR1lfSUQnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfTUVTU0FHRV9TVFJBVEVHWV9JRCcpXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnYWxidW1JZCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hbGJ1bUlkLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9MU0tZX0FMQlVNX0lEJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9BTEJVTV9JRCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9NRVNTQUdFX0FMQlVNX0lEJylcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdwZXJtaXNzaW9uJyxcbiAgICAgIHR5cGU6ICdsaXN0JyxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGVybWlzc2lvbiB8fCAncHJpdmF0ZShkZWZhdWx0KScsXG4gICAgICBjaG9pY2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAncHJpdmF0ZShkZWZhdWx0KScsXG4gICAgICAgICAgdmFsdWU6IDBcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdwdWJsaWMnLFxuICAgICAgICAgIHZhbHVlOiAxXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfUEVSTUlTU0lPTicpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX0xTS1lfUEVSTUlTU0lPTicpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9NRVNTQUdFX1BFUk1JU1NJT04nKVxuICAgICAgfVxuICAgIH1cbiAgXVxuICByZXR1cm4gY29uZmlnXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyKGN0eDogSVBpY0dvKTogdm9pZCB7XG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ2xza3lwbGlzdCcsIHtcbiAgICBnZXQgbmFtZSgpIHtcbiAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfTFNLWV9QTElTVCcpXG4gICAgfSxcbiAgICBoYW5kbGUsXG4gICAgY29uZmlnXG4gIH0pXG59XG4iLCJpbXBvcnQgeyBsb29rdXAgfSBmcm9tICdtaW1lLXR5cGVzJ1xuaW1wb3J0IHsgSVBpY0xpc3RDb25maWcsIElQaWNHbywgSVBsdWdpbkNvbmZpZywgSU9sZFJlcU9wdGlvbnNXaXRoRnVsbFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcblxuY29uc3QgcG9zdE9wdGlvbnMgPSAob3B0aW9uczogSVBpY0xpc3RDb25maWcsIGZpbGVOYW1lOiBzdHJpbmcsIGltYWdlOiBCdWZmZXIpOiBJT2xkUmVxT3B0aW9uc1dpdGhGdWxsUmVzcG9uc2UgPT4ge1xuICBjb25zdCBob3N0ID0gb3B0aW9ucy5ob3N0IHx8ICcxMjcuMC4wLjEnXG4gIGNvbnN0IHBvcnQgPSBvcHRpb25zLnBvcnQgfHwgMzY2NzdcbiAgY29uc3QgcGljYmVkID0gb3B0aW9ucy5waWNiZWQgfHwgJydcbiAgY29uc3QgY29uZmlnTmFtZSA9IG9wdGlvbnMuY29uZmlnTmFtZSB8fCAnRGVmYXVsdCdcbiAgY29uc3Qgc2VydmVyS2V5ID0gb3B0aW9ucy5zZXJ2ZXJLZXkgfHwgJydcbiAgbGV0IHVybCA9IGBodHRwOi8vJHtob3N0fToke3BvcnR9L3VwbG9hZD9jb25maWdOYW1lPSR7Y29uZmlnTmFtZX1gXG4gIGlmIChwaWNiZWQpIHtcbiAgICB1cmwgKz0gYCZwaWNiZWQ9JHtwaWNiZWR9YFxuICB9XG4gIGlmIChzZXJ2ZXJLZXkpIHtcbiAgICB1cmwgKz0gYCZrZXk9JHtzZXJ2ZXJLZXl9YFxuICB9XG4gIHJldHVybiB7XG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgdXJsLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgICdjb250ZW50LXR5cGUnOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YSdcbiAgICB9LFxuICAgIGZvcm1EYXRhOiB7XG4gICAgICBmaWxlOiB7XG4gICAgICAgIHZhbHVlOiBpbWFnZSxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIGZpbGVuYW1lOiBmaWxlTmFtZSxcbiAgICAgICAgICBjb250ZW50VHlwZTogbG9va3VwKGZpbGVOYW1lKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogdHJ1ZVxuICB9XG59XG5cbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvIHwgYm9vbGVhbj4gPT4ge1xuICBjb25zdCBwaWNsaXN0T3B0aW9ucyA9IGN0eC5nZXRDb25maWc8SVBpY0xpc3RDb25maWc+KCdwaWNCZWQucGljbGlzdCcpXG4gIGlmICghcGljbGlzdE9wdGlvbnMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBmaW5kIFBpY0xpc3QgY29uZmlnXCIpXG4gIH1cbiAgdHJ5IHtcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxuICAgIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcbiAgICAgIGlmIChpbWcuZmlsZU5hbWUgJiYgaW1nLmJ1ZmZlcikge1xuICAgICAgICBsZXQgaW1hZ2UgPSBpbWcuYnVmZmVyXG4gICAgICAgIGlmICghaW1hZ2UgJiYgaW1nLmJhc2U2NEltYWdlKSB7XG4gICAgICAgICAgaW1hZ2UgPSBCdWZmZXIuZnJvbShpbWcuYmFzZTY0SW1hZ2UsICdiYXNlNjQnKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBwb3N0T3B0aW9ucyhwaWNsaXN0T3B0aW9ucywgaW1nLmZpbGVOYW1lLCBpbWFnZSlcblxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBjdHhcbiAgICAgICAgICAucmVxdWVzdChvcHRpb25zKVxuICAgICAgICAgIC50aGVuKChyZXM6IGFueSkgPT4gcmVzKVxuICAgICAgICAgIC5jYXRjaCgoZXJyOiBFcnJvcikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3RhdHVzQ29kZTogNDAwLFxuICAgICAgICAgICAgICBib2R5OiB7XG4gICAgICAgICAgICAgICAgbXNnOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdBVVRIX0ZBSUxFRCcpLFxuICAgICAgICAgICAgICAgIGVyclxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgaWYgKHJlcy5zdGF0dXNDb2RlID09PSAyMDAgJiYgcmVzLmJvZHk/LnN1Y2Nlc3MpIHtcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcbiAgICAgICAgICBpbWcuaW1nVXJsID0gcmVzLmJvZHkucmVzdWx0WzBdXG4gICAgICAgICAgaW1nLmZ1bGxSZXN1bHQgPSByZXMuYm9keS5mdWxsUmVzdWx0WzBdXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHJlcy5ib2R5Lm1lc3NhZ2UpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGN0eFxuICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XG4gICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxuICAgICAgYm9keTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQ0hFQ0tfU0VUVElOR1MnKVxuICAgIH0pXG4gICAgdGhyb3cgZXJyXG4gIH1cbn1cblxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SVBpY0xpc3RDb25maWc+KCdwaWNCZWQucGljbGlzdCcpIHx8IHt9XG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICdob3N0JyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1BJQ0xJU1RfSE9TVCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1BJQ0xJU1RfSE9TVCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5ob3N0IHx8ICcxMjcuMC4wLjEnLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdwb3J0JyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1BJQ0xJU1RfUE9SVCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1BJQ0xJU1RfUE9SVCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wb3J0IHx8IDM2Njc3LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAncGljYmVkJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1BJQ0xJU1RfUElDQkVEJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUElDTElTVF9QSUNCRUQnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGljYmVkIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnY29uZmlnTmFtZScsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9QSUNMSVNUX0NPTkZJR05BTUUnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9QSUNMSVNUX0NPTkZJR05BTUUnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuY29uZmlnTmFtZSB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3NlcnZlcktleScsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9QSUNMSVNUX0tFWScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1BJQ0xJU1RfS0VZJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnNlcnZlcktleSB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH1cbiAgXVxuICByZXR1cm4gY29uZmlnXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyKGN0eDogSVBpY0dvKTogdm9pZCB7XG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ3BpY2xpc3QnLCB7XG4gICAgZ2V0IG5hbWUoKSB7XG4gICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1BJQ0xJU1QnKVxuICAgIH0sXG4gICAgaGFuZGxlLFxuICAgIGNvbmZpZ1xuICB9KVxufVxuIiwiaW1wb3J0IHsgbG9va3VwIH0gZnJvbSAnbWltZS10eXBlcydcbmltcG9ydCBxaW5pdSBmcm9tICdxaW5pdSdcbmltcG9ydCB7IElQbHVnaW5Db25maWcsIElRaW5pdUNvbmZpZywgSVBpY0dvLCBJT2xkUmVxT3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXG5pbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXG5cbmZ1bmN0aW9uIHBvc3RPcHRpb25zKG9wdGlvbnM6IElRaW5pdUNvbmZpZywgZmlsZU5hbWU6IHN0cmluZywgdG9rZW46IHN0cmluZywgaW1nQmFzZTY0OiBzdHJpbmcpOiBJT2xkUmVxT3B0aW9ucyB7XG4gIGNvbnN0IGFyZWEgPSBzZWxlY3RBcmVhKG9wdGlvbnMuYXJlYSB8fCAnejAnKVxuICBjb25zdCBwYXRoID0gb3B0aW9ucy5wYXRoIHx8ICcnXG4gIGNvbnN0IGJhc2U2NEZpbGVOYW1lID0gQnVmZmVyLmZyb20ocGF0aCArIGZpbGVOYW1lLCAndXRmLTgnKVxuICAgIC50b1N0cmluZygnYmFzZTY0JylcbiAgICAucmVwbGFjZSgvXFwrL2csICctJylcbiAgICAucmVwbGFjZSgvXFwvL2csICdfJylcbiAgcmV0dXJuIHtcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICB1cmw6IGBodHRwOi8vdXBsb2FkJHthcmVhfS5xaW5pdXAuY29tL3B1dGI2NC8tMS9rZXkvJHtiYXNlNjRGaWxlTmFtZX1gLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIEF1dGhvcml6YXRpb246IGBVcFRva2VuICR7dG9rZW59YCxcbiAgICAgICdDb250ZW50LVR5cGUnOiBsb29rdXAoZmlsZU5hbWUpIHx8ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nXG4gICAgfSxcbiAgICBib2R5OiBpbWdCYXNlNjRcbiAgfVxufVxuXG5mdW5jdGlvbiBzZWxlY3RBcmVhKGFyZWE6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBhcmVhID09PSAnejAnID8gJycgOiAnLScgKyBhcmVhXG59XG5cbmZ1bmN0aW9uIGdldFRva2VuKHFpbml1T3B0aW9uczogYW55KTogc3RyaW5nIHtcbiAgY29uc3QgYWNjZXNzS2V5ID0gcWluaXVPcHRpb25zLmFjY2Vzc0tleVxuICBjb25zdCBzZWNyZXRLZXkgPSBxaW5pdU9wdGlvbnMuc2VjcmV0S2V5XG4gIGNvbnN0IG1hYyA9IG5ldyBxaW5pdS5hdXRoLmRpZ2VzdC5NYWMoYWNjZXNzS2V5LCBzZWNyZXRLZXkpXG4gIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgc2NvcGU6IHFpbml1T3B0aW9ucy5idWNrZXRcbiAgfVxuICBjb25zdCBwdXRQb2xpY3kgPSBuZXcgcWluaXUucnMuUHV0UG9saWN5KG9wdGlvbnMpXG4gIHJldHVybiBwdXRQb2xpY3kudXBsb2FkVG9rZW4obWFjKVxufVxuXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xuICBjb25zdCBxaW5pdU9wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElRaW5pdUNvbmZpZz4oJ3BpY0JlZC5xaW5pdScpXG4gIGlmICghcWluaXVPcHRpb25zKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgZmluZCBxaW5pdSBjb25maWdcIilcbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XG4gICAgZm9yIChjb25zdCBpbWcgb2YgaW1nTGlzdCkge1xuICAgICAgaWYgKGltZy5maWxlTmFtZSAmJiBpbWcuYnVmZmVyKSB7XG4gICAgICAgIGNvbnN0IGJhc2U2NEltYWdlID0gaW1nLmJhc2U2NEltYWdlIHx8IEJ1ZmZlci5mcm9tKGltZy5idWZmZXIpLnRvU3RyaW5nKCdiYXNlNjQnKVxuICAgICAgICBjb25zdCBvcHRpb25zID0gcG9zdE9wdGlvbnMocWluaXVPcHRpb25zLCBpbWcuZmlsZU5hbWUsIGdldFRva2VuKHFpbml1T3B0aW9ucyksIGJhc2U2NEltYWdlKVxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBjdHgucmVxdWVzdChvcHRpb25zKVxuICAgICAgICBjb25zdCBib2R5ID0gSlNPTi5wYXJzZShyZXMpXG4gICAgICAgIGlmIChib2R5Py5rZXkpIHtcbiAgICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXG4gICAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcbiAgICAgICAgICBjb25zdCBiYXNlVXJsID0gcWluaXVPcHRpb25zLnVybFxuICAgICAgICAgIGNvbnN0IHVybE9wdGlvbnMgPSBxaW5pdU9wdGlvbnMub3B0aW9ucyB8fCAnJ1xuICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHtiYXNlVXJsfS8ke2JvZHkua2V5IGFzIHN0cmluZ30ke3VybE9wdGlvbnN9YFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XG4gICAgICAgICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxuICAgICAgICAgICAgYm9keTogYm9keS5tc2dcbiAgICAgICAgICB9KVxuICAgICAgICAgIGN0eC5sb2cuZXJyb3IoJ3Fpbml1IGVycm9yJywgYm9keSlcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VwbG9hZCBmYWlsZWQnKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjdHhcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICBpZiAoZXJyLm1lc3NhZ2UgIT09ICdVcGxvYWQgZmFpbGVkJykge1xuICAgICAgLy8gZXJyLnJlc3BvbnNlIG1heWJlIHVuZGVmaW5lZFxuICAgICAgaWYgKGVyci5yZXNwb25zZSkge1xuICAgICAgICBjb25zdCBlcnJvciA9IGVyci5yZXNwb25zZS5ib2R5XG4gICAgICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XG4gICAgICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcbiAgICAgICAgICBib2R5OiBlcnJvci5lcnJvclxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgICB0aHJvdyBlcnJcbiAgfVxufVxuXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJUWluaXVDb25maWc+KCdwaWNCZWQucWluaXUnKSB8fCB7fVxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAnYWNjZXNzS2V5JyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX0FDQ0VTU0tFWScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX0FDQ0VTU0tFWScpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hY2Nlc3NLZXkgfHwgJycsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3NlY3JldEtleScsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9TRUNSRVRLRVknKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9TRUNSRVRLRVknKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuc2VjcmV0S2V5IHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdidWNrZXQnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfQlVDS0VUJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfQlVDS0VUJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmJ1Y2tldCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAndXJsJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX1VSTCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX1VSTCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfTUVTU0FHRV9VUkwnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcudXJsIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdhcmVhJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX0FSRUEnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9BUkVBJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9NRVNTQUdFX0FSRUEnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYXJlYSB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnb3B0aW9ucycsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9PUFRJT05TJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfT1BUSU9OUycpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfUUlOSVVfTUVTU0FHRV9PUFRJT05TJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLm9wdGlvbnMgfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdwYXRoJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1FJTklVX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9QQVRIJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVV9NRVNTQUdFX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGF0aCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH1cbiAgXVxuICByZXR1cm4gY29uZmlnXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyKGN0eDogSVBpY0dvKTogdm9pZCB7XG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ3Fpbml1Jywge1xuICAgIGdldCBuYW1lKCkge1xuICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9RSU5JVScpXG4gICAgfSxcbiAgICBoYW5kbGUsXG4gICAgY29uZmlnXG4gIH0pXG59XG4iLCJpbXBvcnQgeyBOb2RlU1NILCBDb25maWcgfSBmcm9tICdub2RlLXNzaC1uby1jcHUtZmVhdHVyZXMnXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuXG5pbXBvcnQgeyBJU2Z0cFBsaXN0Q29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnXG5cbmNsYXNzIFNTSENsaWVudCB7XG4gIHByaXZhdGUgc3RhdGljIGluc3RhbmNlOiBTU0hDbGllbnRcbiAgcHJpdmF0ZSBjbGllbnQgPSBuZXcgTm9kZVNTSCgpXG4gIGlzQ29ubmVjdGVkID0gZmFsc2VcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge31cblxuICBwdWJsaWMgc3RhdGljIGdldEluc3RhbmNlKCk6IFNTSENsaWVudCB7XG4gICAgaWYgKCFTU0hDbGllbnQuaW5zdGFuY2UpIHtcbiAgICAgIFNTSENsaWVudC5pbnN0YW5jZSA9IG5ldyBTU0hDbGllbnQoKVxuICAgIH1cbiAgICByZXR1cm4gU1NIQ2xpZW50Lmluc3RhbmNlXG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBjaGFuZ2VXaW5TdHlsZVBhdGhUb1VuaXgocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcGF0aC5yZXBsYWNlKC9cXFxcL2csICcvJylcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjb25uZWN0KGNvbmZpZzogSVNmdHBQbGlzdENvbmZpZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgaG9zdCwgcG9ydCwgdXNlcm5hbWUsIHBhc3N3b3JkLCBwcml2YXRlS2V5LCBwYXNzcGhyYXNlIH0gPSBjb25maWdcbiAgICBjb25zdCBsb2dpbkluZm86IENvbmZpZyA9IHByaXZhdGVLZXlcbiAgICAgID8ge1xuICAgICAgICAgIHVzZXJuYW1lLFxuICAgICAgICAgIHByaXZhdGVLZXlQYXRoOiBwcml2YXRlS2V5LFxuICAgICAgICAgIHBhc3NwaHJhc2U6IHBhc3NwaHJhc2UgfHwgdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgIDogeyB1c2VybmFtZSwgcGFzc3dvcmQgfVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmNsaWVudC5jb25uZWN0KHtcbiAgICAgICAgaG9zdDogaG9zdCxcbiAgICAgICAgcG9ydDogTnVtYmVyKHBvcnQpIHx8IDIyLFxuICAgICAgICAuLi5sb2dpbkluZm9cbiAgICAgIH0pXG4gICAgICB0aGlzLmlzQ29ubmVjdGVkID0gdHJ1ZVxuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyKVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGxvYWQobG9jYWw6IHN0cmluZywgcmVtb3RlOiBzdHJpbmcsIGNvbmZpZzogSVNmdHBQbGlzdENvbmZpZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5pc0Nvbm5lY3RlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTU0ggY2xpZW50IGlzIG5vdCBjb25uZWN0ZWQnKVxuICAgIH1cbiAgICB0cnkge1xuICAgICAgcmVtb3RlID0gU1NIQ2xpZW50LmNoYW5nZVdpblN0eWxlUGF0aFRvVW5peChyZW1vdGUpXG4gICAgICBhd2FpdCB0aGlzLm1rZGlyKHBhdGguZGlybmFtZShyZW1vdGUpLnJlcGxhY2UoL15cXC8rfFxcLyskL2csICcnKSwgY29uZmlnKVxuICAgICAgYXdhaXQgdGhpcy5jbGllbnQucHV0RmlsZShsb2NhbCwgcmVtb3RlKVxuICAgICAgY29uc3QgZmlsZU1vZGUgPSBjb25maWcuZmlsZU1vZGUgfHwgJzA2NDQnXG4gICAgICBpZiAoZmlsZU1vZGUgIT09ICcwNjQ0Jykge1xuICAgICAgICBhd2FpdCB0aGlzLmV4ZWMoYGNobW9kICR7ZmlsZU1vZGV9IFwiJHtyZW1vdGV9XCJgKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbWtkaXIoZGlyUGF0aDogc3RyaW5nLCBjb25maWc6IElTZnRwUGxpc3RDb25maWcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuY2xpZW50LmlzQ29ubmVjdGVkKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignc2Z0cCBjbGllbnQgaXMgbm90IGNvbm5lY3RlZCcpXG4gICAgfVxuICAgIGNvbnN0IGRpcmVjdG9yeU1vZGUgPSBjb25maWcuZGlyTW9kZSB8fCAnMDc1NSdcbiAgICBpZiAoZGlyZWN0b3J5TW9kZSAhPT0gJzA3NTUnKSB7XG4gICAgICBjb25zdCBkaXJzID0gZGlyUGF0aC5zcGxpdCgnLycpXG4gICAgICBsZXQgY3VycmVudFBhdGggPSAnJ1xuICAgICAgZm9yIChjb25zdCBkaXIgb2YgZGlycykge1xuICAgICAgICBpZiAoZGlyKSB7XG4gICAgICAgICAgY3VycmVudFBhdGggKz0gYC8ke2Rpcn1gXG4gICAgICAgICAgY29uc3Qgc2NyaXB0ID0gYG1rZGlyIFwiJHtjdXJyZW50UGF0aH1cIiAmJiBjaG1vZCAke2RpcmVjdG9yeU1vZGV9IFwiJHtjdXJyZW50UGF0aH1cImBcbiAgICAgICAgICBhd2FpdCB0aGlzLmV4ZWMoc2NyaXB0KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHNjcmlwdCA9IGBjZCAvICYmIG1rZGlyIC1wIFwiJHtkaXJQYXRofVwiYFxuICAgICAgYXdhaXQgdGhpcy5leGVjKHNjcmlwdClcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY2hvd24ocmVtb3RlOiBzdHJpbmcsIHVzZXI6IHN0cmluZywgZ3JvdXA/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZW1vdGUgPSBTU0hDbGllbnQuY2hhbmdlV2luU3R5bGVQYXRoVG9Vbml4KHJlbW90ZSlcbiAgICBjb25zdCBbX3VzZXIsIF9ncm91cF0gPSBncm91cCA/IFt1c2VyLCBncm91cF0gOiB1c2VyLmluY2x1ZGVzKCc6JykgPyB1c2VyLnNwbGl0KCc6JykgOiBbdXNlciwgdXNlcl1cblxuICAgIGF3YWl0IHRoaXMuZXhlYyhgY2hvd24gJHtfdXNlcn06JHtfZ3JvdXB9IFwiJHtyZW1vdGV9XCJgKVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBleGVjKHNjcmlwdDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgZXhlY1Jlc3VsdCA9IGF3YWl0IHRoaXMuY2xpZW50LmV4ZWNDb21tYW5kKHNjcmlwdClcbiAgICByZXR1cm4gZXhlY1Jlc3VsdC5jb2RlID09PSAwXG4gIH1cblxuICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5jbGllbnQuZGlzcG9zZSgpXG4gICAgdGhpcy5pc0Nvbm5lY3RlZCA9IGZhbHNlXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU1NIQ2xpZW50XG4iLCJpbXBvcnQgZnMsIHsgZW5zdXJlRGlyU3luYywgbW92ZVN5bmMsIHJlbW92ZVN5bmMgfSBmcm9tICdmcy1leHRyYSdcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5cbmltcG9ydCB7IElQaWNHbywgSVBsdWdpbkNvbmZpZywgSVNmdHBQbGlzdENvbmZpZyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXG5pbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXG5pbXBvcnQgU1NIQ2xpZW50IGZyb20gJy4uLy4uL3V0aWxzL3NzaENsaWVudCdcbmltcG9ydCB7IGVuY29kZVBhdGgsIGZvcm1hdFBhdGhIZWxwZXIgfSBmcm9tICcuL3V0aWxzJ1xuXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xuICBjb25zdCBzZnRwcGxpc3RDb25maWcgPSBjdHguZ2V0Q29uZmlnPElTZnRwUGxpc3RDb25maWc+KCdwaWNCZWQuc2Z0cHBsaXN0JylcbiAgaWYgKCFzZnRwcGxpc3RDb25maWcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbiBub3QgZmluZCBzZnRwcGxpc3QgY29uZmlnIScpXG4gIH1cbiAgc2Z0cHBsaXN0Q29uZmlnLnBvcnQgPSBOdW1iZXIoc2Z0cHBsaXN0Q29uZmlnLnBvcnQpIHx8IDIyXG4gIGlmIChzZnRwcGxpc3RDb25maWcucG9ydCA8IDAgfHwgc2Z0cHBsaXN0Q29uZmlnLnBvcnQgPiA2NTUzNSkge1xuICAgIHNmdHBwbGlzdENvbmZpZy5wb3J0ID0gMjJcbiAgfVxuICBzZnRwcGxpc3RDb25maWcudXBsb2FkUGF0aCA9IGZvcm1hdFBhdGhIZWxwZXIoe1xuICAgIHBhdGg6IHNmdHBwbGlzdENvbmZpZy51cGxvYWRQYXRoLFxuICAgIHJvb3RUb0VtcHR5OiBmYWxzZVxuICB9KVxuICBjb25zdCB3ZWJQYXRoID0gZm9ybWF0UGF0aEhlbHBlcih7XG4gICAgcGF0aDogc2Z0cHBsaXN0Q29uZmlnLndlYlBhdGgsXG4gICAgcm9vdFRvRW1wdHk6IGZhbHNlXG4gIH0pXG4gIHRyeSB7XG4gICAgY29uc3QgaW1nTGlzdCA9IGN0eC5vdXRwdXRcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcbiAgICAgICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlclxuICAgICAgICBpZiAoIWltYWdlICYmIGltZy5iYXNlNjRJbWFnZSkge1xuICAgICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cGxvYWRUZW1wUGF0aCA9IHBhdGguam9pbihjdHguYmFzZURpciwgJ3VwbG9hZFRlbXAnKVxuICAgICAgICBjb25zdCBpbWdUZW1wUGF0aCA9IHBhdGguam9pbihjdHguYmFzZURpciwgJ2ltZ1RlbXAnLCAnc2Z0cHBsaXN0JylcbiAgICAgICAgZW5zdXJlRGlyU3luYyhpbWdUZW1wUGF0aClcbiAgICAgICAgY29uc3QgdGVtcEZpbGVQYXRoID0gcGF0aC5qb2luKHVwbG9hZFRlbXBQYXRoLCBpbWcuZmlsZU5hbWUpXG4gICAgICAgIGVuc3VyZURpclN5bmMocGF0aC5kaXJuYW1lKHRlbXBGaWxlUGF0aCkpXG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmModGVtcEZpbGVQYXRoLCBpbWFnZSlcbiAgICAgICAgY29uc3QgY2xpZW50ID0gU1NIQ2xpZW50LmdldEluc3RhbmNlKClcbiAgICAgICAgYXdhaXQgY2xpZW50LmNvbm5lY3Qoc2Z0cHBsaXN0Q29uZmlnKVxuICAgICAgICBjb25zdCByZW1vdGVQYXRoID0gcGF0aC5qb2luKGAvJHtzZnRwcGxpc3RDb25maWcudXBsb2FkUGF0aH1gLnJlcGxhY2UoL1xcL1xcLysvZywgJy8nKSwgaW1nLmZpbGVOYW1lKVxuICAgICAgICBhd2FpdCBjbGllbnQudXBsb2FkKHRlbXBGaWxlUGF0aCwgcmVtb3RlUGF0aCwgc2Z0cHBsaXN0Q29uZmlnKVxuICAgICAgICBzZnRwcGxpc3RDb25maWcuZmlsZVVzZXIgJiYgKGF3YWl0IGNsaWVudC5jaG93bihyZW1vdGVQYXRoLCBzZnRwcGxpc3RDb25maWcuZmlsZVVzZXIpKVxuICAgICAgICBkZWxldGUgaW1nLmJhc2U2NEltYWdlXG4gICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXG4gICAgICAgIGNvbnN0IGJhc2VVcmwgPSBzZnRwcGxpc3RDb25maWcuY3VzdG9tVXJsIHx8IHNmdHBwbGlzdENvbmZpZy5ob3N0XG4gICAgICAgIGlmIChzZnRwcGxpc3RDb25maWcud2ViUGF0aCkge1xuICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHtiYXNlVXJsfS8ke2VuY29kZVBhdGgoYCR7d2ViUGF0aCA9PT0gJy8nID8gJycgOiB3ZWJQYXRofSR7aW1nLmZpbGVOYW1lfWApfWBcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpbWcuaW1nVXJsID0gYCR7YmFzZVVybH0vJHtlbmNvZGVQYXRoKGAke3NmdHBwbGlzdENvbmZpZy51cGxvYWRQYXRoID09PSAnLycgPyAnJyA6IHNmdHBwbGlzdENvbmZpZy51cGxvYWRQYXRofSR7aW1nLmZpbGVOYW1lfWApfWBcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbWdUZW1wRmlsZVBhdGggPSBwYXRoLmpvaW4oaW1nVGVtcFBhdGgsIGltZy5maWxlTmFtZSlcbiAgICAgICAgZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUoaW1nVGVtcEZpbGVQYXRoKSlcbiAgICAgICAgcmVtb3ZlU3luYyhpbWdUZW1wRmlsZVBhdGgpXG4gICAgICAgIG1vdmVTeW5jKHRlbXBGaWxlUGF0aCwgcGF0aC5qb2luKGltZ1RlbXBQYXRoLCBpbWcuZmlsZU5hbWUpKVxuICAgICAgICBpbWcuZ2FsbGVyeVBhdGggPSBgaHR0cDovL2xvY2FsaG9zdDozNjY5OS9zZnRwcGxpc3QvJHtlbmNvZGVVUklDb21wb25lbnQoaW1nLmZpbGVOYW1lKX1gXG4gICAgICAgIGNsaWVudC5jbG9zZSgpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjdHhcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xuICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcbiAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ0NIRUNLX1NFVFRJTkdTJylcbiAgICB9KVxuICAgIHRocm93IGVyclxuICB9XG59XG5cbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElTZnRwUGxpc3RDb25maWc+KCdwaWNCZWQuc2Z0cHBsaXN0JykgfHwge31cbiAgY29uc3QgY29uZmlnOiBJUGx1Z2luQ29uZmlnW10gPSBbXG4gICAge1xuICAgICAgbmFtZTogJ2hvc3QnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX0hPU1QnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfSE9TVCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfSE9TVCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5ob3N0IHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdwb3J0JyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9QT1JUJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX1BPUlQnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BPUlQnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucG9ydCB8fCAyMixcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3VzZXJuYW1lJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9VU0VSTkFNRScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9VU0VSTkFNRScpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy51c2VybmFtZSB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAncGFzc3dvcmQnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX1BBU1NXT1JEJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX1BBU1NXT1JEJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhc3N3b3JkIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAncHJpdmF0ZUtleScsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfUFJJVkFURUtFWScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QUklWQVRFS0VZJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnByaXZhdGVLZXkgfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdwYXNzcGhyYXNlJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZX1BBU1NQSFJBU0UnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfUFJJVkFURUtFWV9QQVNTUEhSQVNFJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QUklWQVRFS0VZX1BBU1NQSFJBU0UnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGFzc3BocmFzZSB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3VwbG9hZFBhdGgnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX1VQTE9BRFBBVEgnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfVVBMT0FEUEFUSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfVVBMT0FEUEFUSCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy51cGxvYWRQYXRoIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnY3VzdG9tVXJsJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9DVVNUT01VUkwnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfQ1VTVE9NVVJMJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9DVVNUT01VUkwnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuY3VzdG9tVXJsIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnd2ViUGF0aCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfV0VCU0lURV9QQVRIJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX1dFQlNJVEVfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfV0VCU0lURV9QQVRIJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLndlYlBhdGggfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdmaWxlVXNlcicsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfRklMRV9VU0VSJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX0ZJTEVfVVNFUicpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRklMRV9VU0VSJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmZpbGVVc2VyIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnZmlsZU1vZGUnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX0ZJTEVfTU9ERScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9GSUxFX01PREUnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0ZJTEVfTU9ERScpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5maWxlTW9kZSB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2Rpck1vZGUnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX0RJUl9NT0RFJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU0ZUUFBMSVNUX0RJUl9NT0RFJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9ESVJfTU9ERScpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5kaXJNb2RlIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfVxuICBdXG4gIHJldHVybiBjb25maWdcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIoY3R4OiBJUGljR28pOiB2b2lkIHtcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3Rlcignc2Z0cHBsaXN0Jywge1xuICAgIGdldCBuYW1lKCkge1xuICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TRlRQUExJU1QnKVxuICAgIH0sXG4gICAgaGFuZGxlLFxuICAgIGNvbmZpZ1xuICB9KVxufVxuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJ1xuaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJU21tc0NvbmZpZywgSU9sZFJlcU9wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xuXG5jb25zdCBwb3N0T3B0aW9ucyA9IChmaWxlTmFtZTogc3RyaW5nLCBpbWFnZTogQnVmZmVyLCBhcGlUb2tlbjogc3RyaW5nLCBiYWNrdXBEb21haW4gPSAnJyk6IElPbGRSZXFPcHRpb25zID0+IHtcbiAgbGV0IGRvbWFpbiA9IGJhY2t1cERvbWFpbiB8fCAnc20ubXMnXG4gIGRvbWFpbiA9IGRvbWFpbi5yZXBsYWNlKC9eaHR0cHM/OlxcL1xcLy8sICcnKS5yZXBsYWNlKC9cXC8kLywgJycpXG4gIHJldHVybiB7XG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgdXJsOiBgaHR0cHM6Ly8ke2RvbWFpbn0vYXBpL3YyL3VwbG9hZGAsXG4gICAgaGVhZGVyczoge1xuICAgICAgY29udGVudFR5cGU6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJyxcbiAgICAgICdVc2VyLUFnZW50JzogJ1BpY0xpc3QnLFxuICAgICAgQXV0aG9yaXphdGlvbjogYXBpVG9rZW5cbiAgICB9LFxuICAgIGZvcm1EYXRhOiB7XG4gICAgICBzbWZpbGU6IHtcbiAgICAgICAgdmFsdWU6IGltYWdlLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgZmlsZW5hbWU6IGZpbGVOYW1lXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzc2w6ICd0cnVlJ1xuICAgIH1cbiAgfVxufVxuXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xuICBjb25zdCBzbW1zQ29uZmlnID0gY3R4LmdldENvbmZpZzxJU21tc0NvbmZpZz4oJ3BpY0JlZC5zbW1zJylcbiAgaWYgKCFzbW1zQ29uZmlnKSB0aHJvdyBuZXcgRXJyb3IoJ0NhbiBub3QgZmluZCBzbW1zIGNvbmZpZyEnKVxuXG4gIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XG4gIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcbiAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcbiAgICAgIGxldCBpbWFnZSA9IGltZy5idWZmZXJcbiAgICAgIGlmICghaW1hZ2UgJiYgaW1nLmJhc2U2NEltYWdlKSB7XG4gICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBvc3RDb25maWcgPSBwb3N0T3B0aW9ucyhpbWcuZmlsZU5hbWUsIGltYWdlLCBzbW1zQ29uZmlnPy50b2tlbiwgc21tc0NvbmZpZz8uYmFja3VwRG9tYWluKVxuXG4gICAgICBjb25zdCByZXM6IHN0cmluZyA9IGF3YWl0IGN0eC5yZXF1ZXN0KHBvc3RDb25maWcpXG4gICAgICBjb25zdCBib2R5ID0gSlNPTi5wYXJzZShyZXMpXG4gICAgICBpZiAoYm9keS5jb2RlID09PSAnc3VjY2VzcycpIHtcbiAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxuICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxuICAgICAgICBpbWcuaW1nVXJsID0gYm9keS5kYXRhLnVybFxuICAgICAgICBpbWcuaGFzaCA9IGJvZHkuZGF0YS5oYXNoXG4gICAgICB9IGVsc2UgaWYgKGJvZHkuY29kZSA9PT0gJ2ltYWdlX3JlcGVhdGVkJyAmJiB0eXBlb2YgYm9keS5pbWFnZXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vIGRvIGV4dHJhIGNoZWNrIHNpbmNlIHRoaXMgZXJyb3IgcmV0dXJuIGlzIG5vdCBkb2N1bWVudGVkIGF0IGh0dHBzOi8vZG9jLnNtLm1zLyNhcGktSW1hZ2UtVXBsb2FkXG4gICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcbiAgICAgICAgZGVsZXRlIGltZy5idWZmZXJcbiAgICAgICAgaW1nLmltZ1VybCA9IGJvZHkuaW1hZ2VzXG4gICAgICAgIGNvbnN0IHVwbG9hZEhpc3RvcnkgPSBhd2FpdCBheGlvcy5nZXQoJ2h0dHBzOi8vc20ubXMvYXBpL3YyL3VwbG9hZF9oaXN0b3J5Jywge1xuICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgIEF1dGhvcml6YXRpb246IHNtbXNDb25maWcudG9rZW5cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIGlmICh1cGxvYWRIaXN0b3J5LmRhdGEuY29kZSA9PT0gJ3N1Y2Nlc3MnKSB7XG4gICAgICAgICAgY29uc3QgaW1hZ2VzID0gdXBsb2FkSGlzdG9yeS5kYXRhLmRhdGFcbiAgICAgICAgICBmb3IgKGNvbnN0IGltYWdlIG9mIGltYWdlcykge1xuICAgICAgICAgICAgaWYgKGltYWdlLnVybCA9PT0gYm9keS5pbWFnZXMpIHtcbiAgICAgICAgICAgICAgaW1nLmhhc2ggPSBpbWFnZS5oYXNoXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xuICAgICAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXG4gICAgICAgICAgYm9keTogYm9keS5tZXNzYWdlXG4gICAgICAgIH0pXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihib2R5Lm1lc3NhZ2UpXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBjdHhcbn1cblxuY29uc3QgY29uZmlnID0gKGN0eDogSVBpY0dvKTogSVBsdWdpbkNvbmZpZ1tdID0+IHtcbiAgY29uc3QgdXNlckNvbmZpZyA9IGN0eC5nZXRDb25maWc8SVNtbXNDb25maWc+KCdwaWNCZWQuc21tcycpIHx8IHt9XG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICd0b2tlbicsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TTU1TX1RPS0VOJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU01NU19UT0tFTicpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU01NU19NRVNTQUdFX1RPS0VOJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnRva2VuIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdiYWNrdXBEb21haW4nLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU01NU19CQUNLVVBfRE9NQUlOJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfU01NU19CQUNLVVBfRE9NQUlOJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TTU1TX01FU1NBR0VfQkFDS1VQX0RPTUFJTicpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5iYWNrdXBEb21haW4gfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9XG4gIF1cbiAgcmV0dXJuIGNvbmZpZ1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWdpc3RlcihjdHg6IElQaWNHbyk6IHZvaWQge1xuICBjdHguaGVscGVyLnVwbG9hZGVyLnJlZ2lzdGVyKCdzbW1zJywge1xuICAgIGdldCBuYW1lKCkge1xuICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9TTU1TJylcbiAgICB9LFxuICAgIGhhbmRsZSxcbiAgICBjb25maWdcbiAgfSlcbn1cbiIsImltcG9ydCBjcnlwdG8gZnJvbSAnY3J5cHRvJ1xuaW1wb3J0IHsgbG9va3VwIH0gZnJvbSAnbWltZS10eXBlcydcbmltcG9ydCB7IElQaWNHbywgSVBsdWdpbkNvbmZpZywgSVRjeXVuQ29uZmlnLCBJT2xkUmVxT3B0aW9uc1dpdGhGdWxsUmVzcG9uc2UgfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuLi8uLi91dGlscy9lbnVtJ1xuaW1wb3J0IHsgSUxvY2FsZXNLZXkgfSBmcm9tICcuLi8uLi9pMThuL3poLUNOJ1xuaW1wb3J0IHsgZW5jb2RlUGF0aCwgZm9ybWF0UGF0aEhlbHBlciB9IGZyb20gJy4vdXRpbHMnXG5cbi8vIGdlbmVyYXRlIENPUyBzaWduYXR1cmUgc3RyaW5nXG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNpZ25hdHVyZSB7XG4gIHNpZ25hdHVyZTogc3RyaW5nXG4gIGFwcElkOiBzdHJpbmdcbiAgYnVja2V0OiBzdHJpbmdcbiAgc2lnblRpbWU6IHN0cmluZ1xufVxuXG5jb25zdCBnZW5lcmF0ZVNpZ25hdHVyZSA9IChvcHRpb25zOiBJVGN5dW5Db25maWcsIGZpbGVOYW1lOiBzdHJpbmcpOiBJU2lnbmF0dXJlID0+IHtcbiAgY29uc3Qgc2VjcmV0SWQgPSBvcHRpb25zLnNlY3JldElkXG4gIGNvbnN0IHNlY3JldEtleSA9IG9wdGlvbnMuc2VjcmV0S2V5XG4gIGNvbnN0IGFwcElkID0gb3B0aW9ucy5hcHBJZFxuICBjb25zdCBidWNrZXQgPSBvcHRpb25zLmJ1Y2tldFxuICBsZXQgc2lnbmF0dXJlXG4gIGxldCBzaWduVGltZTogc3RyaW5nID0gJydcbiAgaWYgKCFvcHRpb25zLnZlcnNpb24gfHwgb3B0aW9ucy52ZXJzaW9uID09PSAndjQnKSB7XG4gICAgY29uc3QgcmFuZG9tID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMDAwMDAwMDApXG4gICAgY29uc3QgY3VycmVudCA9IE1hdGguZmxvb3IobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKSAtIDFcbiAgICBjb25zdCBleHBpcmVkID0gY3VycmVudCArIDM2MDBcblxuICAgIGNvbnN0IG11bHRpU2lnbmF0dXJlID0gYGE9JHthcHBJZH0mYj0ke2J1Y2tldH0maz0ke3NlY3JldElkfSZlPSR7ZXhwaXJlZH0mdD0ke2N1cnJlbnR9JnI9JHtyYW5kb219JmY9YFxuXG4gICAgY29uc3Qgc2lnbkhleEtleSA9IGNyeXB0by5jcmVhdGVIbWFjKCdzaGExJywgc2VjcmV0S2V5KS51cGRhdGUobXVsdGlTaWduYXR1cmUpLmRpZ2VzdCgpXG4gICAgY29uc3QgdGVtcFN0cmluZyA9IEJ1ZmZlci5jb25jYXQoW3NpZ25IZXhLZXksIEJ1ZmZlci5mcm9tKG11bHRpU2lnbmF0dXJlKV0pXG4gICAgc2lnbmF0dXJlID0gQnVmZmVyLmZyb20odGVtcFN0cmluZykudG9TdHJpbmcoJ2Jhc2U2NCcpXG4gIH0gZWxzZSB7XG4gICAgLy8gaHR0cHM6Ly9jbG91ZC50ZW5jZW50LmNvbS9kb2N1bWVudC9wcm9kdWN0LzQzNi83Nzc4I3NpZ25hdHVyZVxuICAgIGNvbnN0IHRvZGF5ID0gTWF0aC5mbG9vcihuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApXG4gICAgY29uc3QgdG9tb3Jyb3cgPSB0b2RheSArIDg2NDAwXG4gICAgc2lnblRpbWUgPSBgJHt0b2RheX07JHt0b21vcnJvd31gXG4gICAgY29uc3Qgc2lnbktleSA9IGNyeXB0by5jcmVhdGVIbWFjKCdzaGExJywgc2VjcmV0S2V5KS51cGRhdGUoc2lnblRpbWUpLmRpZ2VzdCgnaGV4JylcbiAgICBjb25zdCBlbmRwb2ludCA9IG9wdGlvbnMuZW5kcG9pbnQgPyBvcHRpb25zLmVuZHBvaW50IDogYGNvcy4ke29wdGlvbnMuYXJlYX0ubXlxY2xvdWQuY29tYFxuICAgIGNvbnN0IGh0dHBTdHJpbmcgPSBgcHV0XFxuLyR7b3B0aW9ucy5wYXRofSR7ZmlsZU5hbWV9XFxuXFxuaG9zdD0ke29wdGlvbnMuYnVja2V0fS4ke2VuZHBvaW50fVxcbmBcbiAgICBjb25zdCBzaGExZWRIdHRwU3RyaW5nID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTEnKS51cGRhdGUoaHR0cFN0cmluZykuZGlnZXN0KCdoZXgnKVxuICAgIGNvbnN0IHN0cmluZ1RvU2lnbiA9IGBzaGExXFxuJHtzaWduVGltZX1cXG4ke3NoYTFlZEh0dHBTdHJpbmd9XFxuYFxuICAgIHNpZ25hdHVyZSA9IGNyeXB0by5jcmVhdGVIbWFjKCdzaGExJywgc2lnbktleSkudXBkYXRlKHN0cmluZ1RvU2lnbikuZGlnZXN0KCdoZXgnKVxuICB9XG4gIHJldHVybiB7XG4gICAgc2lnbmF0dXJlLFxuICAgIGFwcElkLFxuICAgIGJ1Y2tldCxcbiAgICBzaWduVGltZVxuICB9XG59XG5cbmNvbnN0IHBvc3RPcHRpb25zID0gKFxuICBvcHRpb25zOiBJVGN5dW5Db25maWcsXG4gIGZpbGVOYW1lOiBzdHJpbmcsXG4gIHNpZ25hdHVyZTogSVNpZ25hdHVyZSxcbiAgaW1hZ2U6IEJ1ZmZlcixcbiAgdmVyc2lvbjogc3RyaW5nXG4pOiBJT2xkUmVxT3B0aW9uc1dpdGhGdWxsUmVzcG9uc2UgPT4ge1xuICBjb25zdCBhcmVhID0gb3B0aW9ucy5hcmVhXG4gIGNvbnN0IHBhdGggPSBvcHRpb25zLnBhdGhcbiAgaWYgKCFvcHRpb25zLnZlcnNpb24gfHwgb3B0aW9ucy52ZXJzaW9uID09PSAndjQnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgdXJsOiBgaHR0cDovLyR7YXJlYX0uZmlsZS5teXFjbG91ZC5jb20vZmlsZXMvdjIvJHtzaWduYXR1cmUuYXBwSWR9LyR7c2lnbmF0dXJlLmJ1Y2tldH0vJHtlbmNvZGVVUkkocGF0aCl9JHtmaWxlTmFtZX1gLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBIb3N0OiBgJHthcmVhfS5maWxlLm15cWNsb3VkLmNvbWAsXG4gICAgICAgIEF1dGhvcml6YXRpb246IHNpZ25hdHVyZS5zaWduYXR1cmUsXG4gICAgICAgIGNvbnRlbnRUeXBlOiAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScsXG4gICAgICAgICdVc2VyLUFnZW50JzogYFBpY0dvOyR7dmVyc2lvbn07bnVsbDtudWxsYFxuICAgICAgfSxcbiAgICAgIGZvcm1EYXRhOiB7XG4gICAgICAgIG9wOiAndXBsb2FkJyxcbiAgICAgICAgZmlsZWNvbnRlbnQ6IGltYWdlXG4gICAgICB9LFxuICAgICAgcmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2U6IHRydWVcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZW5kcG9pbnQgPSBvcHRpb25zLmVuZHBvaW50ID8gb3B0aW9ucy5lbmRwb2ludCA6IGBjb3MuJHtvcHRpb25zLmFyZWF9Lm15cWNsb3VkLmNvbWBcbiAgICByZXR1cm4ge1xuICAgICAgbWV0aG9kOiAnUFVUJyxcbiAgICAgIHVybDogYGh0dHA6Ly8ke29wdGlvbnMuYnVja2V0fS4ke2VuZHBvaW50fS8ke2VuY29kZVBhdGgoYCR7cGF0aH0ke2ZpbGVOYW1lfWApfWAsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIEhvc3Q6IGAke29wdGlvbnMuYnVja2V0fS4ke2VuZHBvaW50fWAsXG4gICAgICAgIEF1dGhvcml6YXRpb246IGBxLXNpZ24tYWxnb3JpdGhtPXNoYTEmcS1haz0ke29wdGlvbnMuc2VjcmV0SWR9JnEtc2lnbi10aW1lPSR7c2lnbmF0dXJlLnNpZ25UaW1lfSZxLWtleS10aW1lPSR7c2lnbmF0dXJlLnNpZ25UaW1lfSZxLWhlYWRlci1saXN0PWhvc3QmcS11cmwtcGFyYW0tbGlzdD0mcS1zaWduYXR1cmU9JHtzaWduYXR1cmUuc2lnbmF0dXJlfWAsXG4gICAgICAgIGNvbnRlbnRUeXBlOiBsb29rdXAoZmlsZU5hbWUpIHx8ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLFxuICAgICAgICAnVXNlci1BZ2VudCc6IGBQaWNHbzske3ZlcnNpb259O251bGw7bnVsbGBcbiAgICAgIH0sXG4gICAgICBib2R5OiBpbWFnZSxcbiAgICAgIHJlc29sdmVXaXRoRnVsbFJlc3BvbnNlOiB0cnVlXG4gICAgfVxuICB9XG59XG5cbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvIHwgYm9vbGVhbj4gPT4ge1xuICBjb25zdCB0Y1l1bk9wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElUY3l1bkNvbmZpZz4oJ3BpY0JlZC50Y3l1bicpXG4gIGlmICghdGNZdW5PcHRpb25zKSB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBmaW5kIHRlbmNlbnQgQ09TIGNvbmZpZ1wiKVxuICB0cnkge1xuICAgIGNvbnN0IGltZ0xpc3QgPSBjdHgub3V0cHV0XG4gICAgY29uc3QgY3VzdG9tVXJsID0gKHRjWXVuT3B0aW9ucy5jdXN0b21VcmwgfHwgJycpLnJlcGxhY2UoL1xcLyQvLCAnJylcbiAgICBjb25zdCBwYXRoID0gZm9ybWF0UGF0aEhlbHBlcih7XG4gICAgICBwYXRoOiB0Y1l1bk9wdGlvbnMucGF0aFxuICAgIH0pXG4gICAgdGNZdW5PcHRpb25zLnBhdGggPSBwYXRoXG4gICAgY29uc3QgdXNlVjQgPSAhdGNZdW5PcHRpb25zLnZlcnNpb24gfHwgdGNZdW5PcHRpb25zLnZlcnNpb24gPT09ICd2NCdcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcbiAgICAgICAgY29uc3Qgc2lnbmF0dXJlID0gZ2VuZXJhdGVTaWduYXR1cmUodGNZdW5PcHRpb25zLCBpbWcuZmlsZU5hbWUpXG4gICAgICAgIGlmICghc2lnbmF0dXJlKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlclxuICAgICAgICBpZiAoIWltYWdlICYmIGltZy5iYXNlNjRJbWFnZSkge1xuICAgICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHRpb25zID0gcG9zdE9wdGlvbnModGNZdW5PcHRpb25zLCBpbWcuZmlsZU5hbWUsIHNpZ25hdHVyZSwgaW1hZ2UsIGN0eC5HVUlfVkVSU0lPTiB8fCBjdHguVkVSU0lPTilcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgY3R4XG4gICAgICAgICAgLnJlcXVlc3Qob3B0aW9ucylcbiAgICAgICAgICAudGhlbigocmVzOiBhbnkpID0+IHJlcylcbiAgICAgICAgICAuY2F0Y2goKGVycjogRXJyb3IpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHN0YXR1c0NvZGU6IDQwMCxcbiAgICAgICAgICAgICAgYm9keToge1xuICAgICAgICAgICAgICAgIG1zZzogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQVVUSF9GQUlMRUQnKSxcbiAgICAgICAgICAgICAgICBlcnJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIGxldCBib2R5XG4gICAgICAgIGlmICh1c2VWNCAmJiB0eXBlb2YgcmVzID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGJvZHkgPSBKU09OLnBhcnNlKHJlcylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBib2R5ID0gcmVzXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gNDAwKSB7XG4gICAgICAgICAgaWYgKGJvZHk/LmJvZHk/LmVycikge1xuICAgICAgICAgICAgdGhyb3cgYm9keS5ib2R5LmVyclxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYm9keT8uYm9keT8ubXNnIHx8IGJvZHk/LmJvZHk/Lm1lc3NhZ2UpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdGlvblVybCA9IHRjWXVuT3B0aW9ucy5vcHRpb25zIHx8ICcnXG4gICAgICAgIGNvbnN0IHNsaW0gPSB0Y1l1bk9wdGlvbnMuc2xpbSA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiAhIXRjWXVuT3B0aW9ucy5zbGltXG4gICAgICAgIGlmICh1c2VWNCAmJiBib2R5Lm1lc3NhZ2UgPT09ICdTVUNDRVNTJykge1xuICAgICAgICAgIGRlbGV0ZSBpbWcuYmFzZTY0SW1hZ2VcbiAgICAgICAgICBkZWxldGUgaW1nLmJ1ZmZlclxuICAgICAgICAgIGlmIChjdXN0b21VcmwpIHtcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBgJHtjdXN0b21Vcmx9LyR7ZW5jb2RlUGF0aChgJHtwYXRofSR7aW1nLmZpbGVOYW1lfWApfSR7b3B0aW9uVXJsfWBcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW1nLmltZ1VybCA9IGAke2JvZHkuZGF0YS5zb3VyY2VfdXJsIGFzIHN0cmluZ30ke29wdGlvblVybH1gXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCF1c2VWNCAmJiBib2R5ICYmIGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XG4gICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXG4gICAgICAgICAgaWYgKGN1c3RvbVVybCkge1xuICAgICAgICAgICAgaW1nLmltZ1VybCA9IGAke2N1c3RvbVVybH0vJHtlbmNvZGVQYXRoKGAke3BhdGh9JHtpbWcuZmlsZU5hbWV9YCl9JHtvcHRpb25Vcmx9YFxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBlbmRwb2ludCA9IHRjWXVuT3B0aW9ucy5lbmRwb2ludCA/IHRjWXVuT3B0aW9ucy5lbmRwb2ludCA6IGBjb3MuJHt0Y1l1bk9wdGlvbnMuYXJlYX0ubXlxY2xvdWQuY29tYFxuICAgICAgICAgICAgaW1nLmltZ1VybCA9IGBodHRwczovLyR7dGNZdW5PcHRpb25zLmJ1Y2tldH0uJHtlbmRwb2ludH0vJHtlbmNvZGVQYXRoKGAke3BhdGh9JHtpbWcuZmlsZU5hbWV9YCl9JHtvcHRpb25Vcmx9YFxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IocmVzLmJvZHkubXNnKVxuICAgICAgICB9XG4gICAgICAgIGlmIChzbGltKSB7XG4gICAgICAgICAgaWYgKG9wdGlvblVybCkge1xuICAgICAgICAgICAgaW1nLmltZ1VybCArPSAnJmltYWdlU2xpbSdcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW1nLmltZ1VybCArPSAnP2ltYWdlU2xpbSdcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGN0eFxuICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgIGlmICghdGNZdW5PcHRpb25zLnZlcnNpb24gfHwgdGNZdW5PcHRpb25zLnZlcnNpb24gPT09ICd2NCcpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGJvZHkgPSBKU09OLnBhcnNlKGVyci5lcnJvcilcbiAgICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcbiAgICAgICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxuICAgICAgICAgIGJvZHk6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRURfUkVBU09OJywge1xuICAgICAgICAgICAgY29kZTogYm9keS5jb2RlIGFzIHN0cmluZ1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHRleHQ6ICdodHRwczovL2Nsb3VkLnRlbmNlbnQuY29tL2RvY3VtZW50L3Byb2R1Y3QvNDM2Lzg0MzInXG4gICAgICAgIH0pXG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8qIGVtcHR5ICovXG4gICAgICB9XG4gICAgfVxuICAgIHRocm93IGVyclxuICB9XG59XG5cbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElUY3l1bkNvbmZpZz4oJ3BpY0JlZC50Y3l1bicpIHx8IHt9XG4gIGNvbnN0IGNvbmZpZzogSVBsdWdpbkNvbmZpZ1tdID0gW1xuICAgIHtcbiAgICAgIG5hbWU6ICd2ZXJzaW9uJyxcbiAgICAgIHR5cGU6ICdsaXN0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1ZFUlNJT04nKVxuICAgICAgfSxcbiAgICAgIGFsaWFzOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1ZFUlNJT04nKSxcbiAgICAgIGNob2ljZXM6IFsndjQnLCAndjUnXSxcbiAgICAgIGRlZmF1bHQ6ICd2NScsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdzZWNyZXRJZCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUSUQnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUSUQnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuc2VjcmV0SWQgfHwgJycsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3NlY3JldEtleScsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUS0VZJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVEtFWScpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5zZWNyZXRLZXkgfHwgJycsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2J1Y2tldCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfQlVDS0VUJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX0JVQ0tFVCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5idWNrZXQgfHwgJycsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2FwcElkJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9BUFBJRCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9BUFBJRCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hcHBJZCB8fCAnJyxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FQUElEJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ2FyZWEnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX0FSRUEnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfQVJFQScpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5hcmVhIHx8ICcnLFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQVJFQScpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdlbmRwb2ludCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfRU5EUE9JTlQnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfRU5EUE9JTlQnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuZW5kcG9pbnQgfHwgJycsXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9FTkRQT0lOVCcpXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAncGF0aCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9QQVRIJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnBhdGggfHwgJycsXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9QQVRIJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdjdXN0b21VcmwnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX0NVU1RPTVVSTCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9DVVNUT01VUkwnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuY3VzdG9tVXJsIHx8ICcnLFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQ1VTVE9NVVJMJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdvcHRpb25zJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLm9wdGlvbnMgfHwgJycsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9PUFRJT05TJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX09QVElPTlMnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX09QVElPTlMnKVxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3NsaW0nLFxuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5zbGltID09PSB1bmRlZmluZWQgPyBmYWxzZSA6ICEhdXNlckNvbmZpZy5zbGltLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTScpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBnZXQgY29uZmlybVRleHQoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fQ09ORklSTScpXG4gICAgICB9LFxuICAgICAgZ2V0IGNhbmNlbFRleHQoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fQ0FOQ0VMJylcbiAgICAgIH0sXG4gICAgICBnZXQgdGlwcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9USVAnKVxuICAgICAgfVxuICAgIH1cbiAgXVxuICByZXR1cm4gY29uZmlnXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyKGN0eDogSVBpY0dvKTogdm9pZCB7XG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ3RjeXVuJywge1xuICAgIGdldCBuYW1lKCkge1xuICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URU5DRU5UQ0xPVUQnKVxuICAgIH0sXG4gICAgaGFuZGxlLFxuICAgIGNvbmZpZ1xuICB9KVxufVxuIiwiaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcbmltcG9ydCBmcywgeyBlbnN1cmVEaXJTeW5jLCByZW1vdmUgfSBmcm9tICdmcy1leHRyYSdcbmltcG9ydCB7IFJlYWRTdHJlYW0gfSBmcm9tICdmcydcblxuaW1wb3J0IHsgSVBpY0dvLCBJUGx1Z2luQ29uZmlnLCBJVGVsZWdyYXBoQ29uZmlnLCBJT2xkUmVxT3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXG5pbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXG5cbmNvbnN0IHBvc3RPcHRpb25zID0gYXN5bmMgKG9wdGlvbnM6IElUZWxlZ3JhcGhDb25maWcsIGltYWdlOiBSZWFkU3RyZWFtKTogUHJvbWlzZTxJT2xkUmVxT3B0aW9ucz4gPT4ge1xuICBjb25zdCByZXF1ZXN0T3B0aW9uczogSU9sZFJlcU9wdGlvbnMgPSB7XG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgdXJsOiAnaHR0cHM6Ly90ZWxlZ3JhLnBoL3VwbG9hZCcsXG4gICAgaGVhZGVyczoge1xuICAgICAgJ2NvbnRlbnQtdHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJ1xuICAgIH0sXG4gICAgZm9ybURhdGE6IHtcbiAgICAgIGZpbGU6IGltYWdlXG4gICAgfVxuICB9XG4gIGlmIChvcHRpb25zLnByb3h5KSB7XG4gICAgcmVxdWVzdE9wdGlvbnMucHJveHkgPSBvcHRpb25zLnByb3h5XG4gIH1cbiAgcmV0dXJuIHJlcXVlc3RPcHRpb25zXG59XG5cbmNvbnN0IGhhbmRsZSA9IGFzeW5jIChjdHg6IElQaWNHbyk6IFByb21pc2U8SVBpY0dvPiA9PiB7XG4gIGxldCB0Z09wdGlvbnMgPSBjdHguZ2V0Q29uZmlnPElUZWxlZ3JhcGhDb25maWc+KCdwaWNCZWQudGVsZWdyYXBocGxpc3QnKVxuICBpZiAoIXRnT3B0aW9ucykge1xuICAgIHRnT3B0aW9ucyA9IHt9XG4gIH1cbiAgdHJ5IHtcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxuICAgIGZvciAoY29uc3QgaW1nIG9mIGltZ0xpc3QpIHtcbiAgICAgIGlmIChpbWcuZmlsZU5hbWUgJiYgaW1nLmJ1ZmZlcikge1xuICAgICAgICBsZXQgaW1hZ2UgPSBpbWcuYnVmZmVyXG4gICAgICAgIGlmICghaW1hZ2UgJiYgaW1nLmJhc2U2NEltYWdlKSB7XG4gICAgICAgICAgaW1hZ2UgPSBCdWZmZXIuZnJvbShpbWcuYmFzZTY0SW1hZ2UsICdiYXNlNjQnKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHVwbG9hZFRlbXBQYXRoID0gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCAndXBsb2FkVGVtcCcpXG4gICAgICAgIGVuc3VyZURpclN5bmModXBsb2FkVGVtcFBhdGgpXG4gICAgICAgIGNvbnN0IHRlbXBGaWxlUGF0aCA9IHBhdGguam9pbih1cGxvYWRUZW1wUGF0aCwgaW1nLmZpbGVOYW1lKVxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRlbXBGaWxlUGF0aCwgaW1hZ2UpXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBhd2FpdCBwb3N0T3B0aW9ucyh0Z09wdGlvbnMsIGZzLmNyZWF0ZVJlYWRTdHJlYW0odGVtcEZpbGVQYXRoKSlcbiAgICAgICAgY29uc3QgcmVzOiBzdHJpbmcgPSBhd2FpdCBjdHgucmVxdWVzdChvcHRpb25zKVxuICAgICAgICBjb25zdCBib2R5ID0gdHlwZW9mIHJlcyA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKHJlcykgOiByZXNcbiAgICAgICAgcmVtb3ZlKHRlbXBGaWxlUGF0aClcbiAgICAgICAgaWYgKGJvZHk/LlswXT8uc3JjKSB7XG4gICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXG4gICAgICAgICAgaW1nLmltZ1VybCA9IGBodHRwczovL3RlbGVncmEucGgke2JvZHlbMF0uc3JjfWBcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlcnZlciBlcnJvciwgcGxlYXNlIHRyeSBhZ2FpbicpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGN0eFxuICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgIGN0eC5lbWl0KElCdWlsZEluRXZlbnQuTk9USUZJQ0FUSU9OLCB7XG4gICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxuICAgICAgYm9keTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQ0hFQ0tfU0VUVElOR1NfQU5EX05FVFdPUksnKSxcbiAgICAgIHRleHQ6ICcnXG4gICAgfSlcbiAgICB0aHJvdyBlcnI/LnJlc3BvbnNlPy5kYXRhIHx8IGVyclxuICB9XG59XG5cbmNvbnN0IGNvbmZpZyA9IChjdHg6IElQaWNHbyk6IElQbHVnaW5Db25maWdbXSA9PiB7XG4gIGNvbnN0IHVzZXJDb25maWcgPSBjdHguZ2V0Q29uZmlnPElUZWxlZ3JhcGhDb25maWc+KCdwaWNCZWQudGVsZWdyYXBocGxpc3QnKSB8fCB7fVxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAncHJveHknLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfUFJPWFknKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9JTUdVUl9QUk9YWScpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfSU1HVVJfTUVTU0FHRV9QUk9YWScpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wcm94eSB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH1cbiAgXVxuICByZXR1cm4gY29uZmlnXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyKGN0eDogSVBpY0dvKTogdm9pZCB7XG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ3RlbGVncmFwaHBsaXN0Jywge1xuICAgIGdldCBuYW1lKCkge1xuICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9URUxFR1JBUEgnKVxuICAgIH0sXG4gICAgaGFuZGxlLFxuICAgIGNvbmZpZ1xuICB9KVxufVxuIiwiaW1wb3J0IGNyeXB0byBmcm9tICdjcnlwdG8nXG5pbXBvcnQgeyBsb29rdXAgfSBmcm9tICdtaW1lLXR5cGVzJ1xuXG5pbXBvcnQgeyBJQnVpbGRJbkV2ZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvZW51bSdcbmltcG9ydCB7IElMb2NhbGVzS2V5IH0gZnJvbSAnLi4vLi4vaTE4bi96aC1DTidcbmltcG9ydCB7IHNhZmVQYXJzZSB9IGZyb20gJy4uLy4uL3V0aWxzL2NvbW1vbidcblxuaW1wb3J0IHsgZW5jb2RlUGF0aCwgZm9ybWF0UGF0aEhlbHBlciB9IGZyb20gJy4vdXRpbHMnXG5pbXBvcnQgeyBJUGljR28sIElQbHVnaW5Db25maWcsIElVcHl1bkNvbmZpZywgSU9sZFJlcU9wdGlvbnNXaXRoRnVsbFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vdHlwZXMnXG5cbi8vIGdlbmVyYXRlIENPUyBzaWduYXR1cmUgc3RyaW5nXG5jb25zdCBnZW5lcmF0ZVNpZ25hdHVyZSA9IChvcHRpb25zOiBJVXB5dW5Db25maWcsIGZpbGVOYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBwYXRoID0gb3B0aW9ucy5wYXRoIHx8ICcnXG4gIGNvbnN0IG9wZXJhdG9yID0gb3B0aW9ucy5vcGVyYXRvclxuICBjb25zdCBwYXNzd29yZCA9IG9wdGlvbnMucGFzc3dvcmRcbiAgY29uc3QgbWQ1UGFzc3dvcmQgPSBNRDUocGFzc3dvcmQpXG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpLnRvVVRDU3RyaW5nKClcbiAgY29uc3QgdXJpID0gYC8ke29wdGlvbnMuYnVja2V0fS8ke2VuY29kZVBhdGgoYCR7cGF0aH0ke2ZpbGVOYW1lfWApfWBcbiAgY29uc3QgdmFsdWUgPSBgUFVUJiR7dXJpfSYke2RhdGV9YFxuICBjb25zdCBzaWduID0gY3J5cHRvLmNyZWF0ZUhtYWMoJ3NoYTEnLCBtZDVQYXNzd29yZCkudXBkYXRlKHZhbHVlKS5kaWdlc3QoJ2Jhc2U2NCcpXG4gIHJldHVybiBgVVBZVU4gJHtvcGVyYXRvcn06JHtzaWdufWBcbn1cblxuY29uc3QgcG9zdE9wdGlvbnMgPSAoXG4gIG9wdGlvbnM6IElVcHl1bkNvbmZpZyxcbiAgZmlsZU5hbWU6IHN0cmluZyxcbiAgc2lnbmF0dXJlOiBzdHJpbmcsXG4gIGltYWdlOiBCdWZmZXJcbik6IElPbGRSZXFPcHRpb25zV2l0aEZ1bGxSZXNwb25zZSA9PiB7XG4gIGNvbnN0IGJ1Y2tldCA9IG9wdGlvbnMuYnVja2V0XG4gIGNvbnN0IHBhdGggPSBvcHRpb25zLnBhdGhcbiAgbGV0IGVuZHBvaW50ID0gKG9wdGlvbnMuZW5kcG9pbnQgfHwgJ2h0dHBzOi8vdjAuYXBpLnVweXVuLmNvbScpLnJlcGxhY2UoL1xcLyskL2csICcnKVxuICBpZiAoIWVuZHBvaW50LnN0YXJ0c1dpdGgoJ2h0dHAnKSkge1xuICAgIGVuZHBvaW50ID0gYGh0dHBzOi8vJHtlbmRwb2ludH1gXG4gIH1cbiAgcmV0dXJuIHtcbiAgICBtZXRob2Q6ICdQVVQnLFxuICAgIHVybDogYCR7ZW5kcG9pbnR9LyR7YnVja2V0fS8ke2VuY29kZVBhdGgoYCR7cGF0aH0ke2ZpbGVOYW1lfWApfWAsXG4gICAgaGVhZGVyczoge1xuICAgICAgQXV0aG9yaXphdGlvbjogc2lnbmF0dXJlLFxuICAgICAgRGF0ZTogbmV3IERhdGUoKS50b1VUQ1N0cmluZygpLFxuICAgICAgJ0NvbnRlbnQtVHlwZSc6IGxvb2t1cChmaWxlTmFtZSkgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSdcbiAgICB9LFxuICAgIGJvZHk6IGltYWdlLFxuICAgIHJlc29sdmVXaXRoRnVsbFJlc3BvbnNlOiB0cnVlXG4gIH1cbn1cblxuZnVuY3Rpb24gTUQ1KGNvbnRlbnQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBjcnlwdG8uY3JlYXRlSGFzaCgnbWQ1JykudXBkYXRlKGNvbnRlbnQpLmRpZ2VzdCgnaGV4Jylcbn1cblxuY29uc3QgZ2V0QW50aUxlZWNoUGFyYW0gPSAoXG4gIGFudGlMZWVjaFRva2VuOiBzdHJpbmcsXG4gIGV4cGlyZVRpbWU6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCxcbiAgb3B0aW9uczogSVVweXVuQ29uZmlnLFxuICBmaWxlTmFtZTogc3RyaW5nXG4pOiBzdHJpbmcgPT4ge1xuICBjb25zdCB1cmkgPSBgLyR7b3B0aW9ucy5wYXRoIHx8ICcnfSR7ZmlsZU5hbWV9YC5yZXBsYWNlKC8lMkYvZywgJy8nKS5yZXBsYWNlKC9eXFwvKy9nLCAnLycpXG4gIGNvbnN0IG5vdyA9IE1hdGgucm91bmQobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKVxuICBjb25zdCBleHBpcmUgPSBleHBpcmVUaW1lID8gbm93ICsgcGFyc2VJbnQoZXhwaXJlVGltZS50b1N0cmluZygpLCAxMCkgOiBub3cgKyAxODAwXG4gIGNvbnN0IHNpZ24gPSBNRDUoYCR7YW50aUxlZWNoVG9rZW59JiR7ZXhwaXJlfSYke3VyaX1gKVxuICBjb25zdCB1cHQgPSBgJHtzaWduLnN1YnN0cmluZygxMiwgMjApfSR7ZXhwaXJlfWBcbiAgcmV0dXJuIGBfdXB0PSR7dXB0fWBcbn1cblxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcbiAgY29uc3QgdXB5dW5PcHRpb25zID0gY3R4LmdldENvbmZpZzxJVXB5dW5Db25maWc+KCdwaWNCZWQudXB5dW4nKVxuICBpZiAoIXVweXVuT3B0aW9ucykgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgZmluZCB1cFl1biBjb25maWdcIilcbiAgdHJ5IHtcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxuICAgIGNvbnN0IHBhdGggPSBmb3JtYXRQYXRoSGVscGVyKHsgcGF0aDogdXB5dW5PcHRpb25zLnBhdGggfSlcbiAgICB1cHl1bk9wdGlvbnMucGF0aCA9IHBhdGhcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcbiAgICAgICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlclxuICAgICAgICBpZiAoIWltYWdlICYmIGltZy5iYXNlNjRJbWFnZSkge1xuICAgICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzaWduYXR1cmUgPSBnZW5lcmF0ZVNpZ25hdHVyZSh1cHl1bk9wdGlvbnMsIGltZy5maWxlTmFtZSlcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHBvc3RPcHRpb25zKHVweXVuT3B0aW9ucywgaW1nLmZpbGVOYW1lLCBzaWduYXR1cmUsIGltYWdlKVxuICAgICAgICBjb25zdCBzdWZmaXggPSB1cHl1bk9wdGlvbnMub3B0aW9ucyB8fCAnJ1xuICAgICAgICBjb25zdCBib2R5ID0gYXdhaXQgY3R4LnJlcXVlc3Qob3B0aW9ucylcbiAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XG4gICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXG4gICAgICAgICAgaW1nLmltZ1VybCA9IGAke3VweXVuT3B0aW9ucy51cmx9LyR7ZW5jb2RlUGF0aChgJHtwYXRofSR7aW1nLmZpbGVOYW1lfWApfSR7c3VmZml4fWBcbiAgICAgICAgICBpZiAodXB5dW5PcHRpb25zLmFudGlMZWVjaFRva2VuKSB7XG4gICAgICAgICAgICBjb25zdCB1cHQgPSBnZXRBbnRpTGVlY2hQYXJhbShcbiAgICAgICAgICAgICAgdXB5dW5PcHRpb25zLmFudGlMZWVjaFRva2VuLFxuICAgICAgICAgICAgICB1cHl1bk9wdGlvbnMuZXhwaXJlVGltZSxcbiAgICAgICAgICAgICAgdXB5dW5PcHRpb25zLFxuICAgICAgICAgICAgICBpbWcuZmlsZU5hbWVcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGltZy5pbWdVcmwgPSBpbWcuaW1nVXJsLmluY2x1ZGVzKCc/JykgPyBgJHtpbWcuaW1nVXJsfSYke3VwdH1gIDogYCR7aW1nLmltZ1VybH0/JHt1cHR9YFxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VwbG9hZCBmYWlsZWQnKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjdHhcbiAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICBpZiAoZXJyLm1lc3NhZ2UgPT09ICdVcGxvYWQgZmFpbGVkJykge1xuICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcbiAgICAgICAgdGl0bGU6IGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1VQTE9BRF9GQUlMRUQnKSxcbiAgICAgICAgYm9keTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignQ0hFQ0tfU0VUVElOR1MnKVxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYm9keSA9IHNhZmVQYXJzZTx7IGNvZGU6IHN0cmluZyB9PihlcnIuZXJyb3IpXG4gICAgICBjdHguZW1pdChJQnVpbGRJbkV2ZW50Lk5PVElGSUNBVElPTiwge1xuICAgICAgICB0aXRsZTogY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignVVBMT0FEX0ZBSUxFRCcpLFxuICAgICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEX1JFQVNPTicsIHtcbiAgICAgICAgICBjb2RlOiB0eXBlb2YgYm9keSA9PT0gJ29iamVjdCcgPyBib2R5LmNvZGUgOiBib2R5XG4gICAgICAgIH0pLFxuICAgICAgICB0ZXh0OiAnaHR0cDovL2RvY3MudXB5dW4uY29tL2FwaS9lcnJuby8nXG4gICAgICB9KVxuICAgIH1cbiAgICB0aHJvdyBlcnJcbiAgfVxufVxuXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJVXB5dW5Db25maWc+KCdwaWNCZWQudXB5dW4nKSB8fCB7fVxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAnYnVja2V0JyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX0JVQ0tFVCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX0JVQ0tFVCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5idWNrZXQgfHwgJycsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ29wZXJhdG9yJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX09QRVJBVE9SJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fT1BFUkFUT1InKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX01FU1NBR0VfT1BFUkFUT1InKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcub3BlcmF0b3IgfHwgJycsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3Bhc3N3b3JkJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX01FU1NBR0VfUEFTU1dPUkQnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9QQVNTV09SRCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fTUVTU0FHRV9QQVNTV09SRCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXNzd29yZCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAndXJsJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX1VSTCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX1VSTCcpXG4gICAgICB9LFxuICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fTUVTU0FHRV9VUkwnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcudXJsIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdvcHRpb25zJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX09QVElPTlMnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9PUFRJT05TJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9NRVNTQUdFX09QVElPTlMnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcub3B0aW9ucyB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3BhdGgnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fUEFUSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX01FU1NBR0VfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZGVmYXVsdDogdXNlckNvbmZpZy5wYXRoIHx8ICcnLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnYW50aUxlZWNoVG9rZW4nLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fQU5USV9MRUVDSF9UT0tFTicpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX0FOVElfTEVFQ0hfVE9LRU4nKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX0FOVElfTEVFQ0hfVE9LRU4nKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuYW50aUxlZWNoVG9rZW4gfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdleHBpcmVUaW1lJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX0VYUElSRV9USU1FJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfVVBZVU5fRVhQSVJFX1RJTUUnKVxuICAgICAgfSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX0VYUElSRV9USU1FJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmV4cGlyZVRpbWUgfHwgJycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdlbmRwb2ludCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9FTkRQT0lOVCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOX0VORFBPSU5UJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9VUFlVTl9NRVNTQUdFX0VORFBPSU5UJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmVuZHBvaW50IHx8ICdodHRwczovL3YwLmFwaS51cHl1bi5jb20nLFxuICAgICAgcmVxdWlyZWQ6IGZhbHNlXG4gICAgfVxuICBdXG4gIHJldHVybiBjb25maWdcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVnaXN0ZXIoY3R4OiBJUGljR28pOiB2b2lkIHtcbiAgY3R4LmhlbHBlci51cGxvYWRlci5yZWdpc3RlcigndXB5dW4nLCB7XG4gICAgZ2V0IG5hbWUoKSB7XG4gICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1VQWVVOJylcbiAgICB9LFxuICAgIGhhbmRsZSxcbiAgICBjb25maWdcbiAgfSlcbn1cbiIsImltcG9ydCBmcywgeyBlbnN1cmVEaXJTeW5jIH0gZnJvbSAnZnMtZXh0cmEnXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuaW1wb3J0IHsgV2ViREFWQ2xpZW50LCBXZWJEQVZDbGllbnRPcHRpb25zLCBBdXRoVHlwZSwgY3JlYXRlQ2xpZW50IH0gZnJvbSAnd2ViZGF2J1xuXG5pbXBvcnQgeyBJUGljR28sIElQbHVnaW5Db25maWcsIElXZWJkYXZQbGlzdENvbmZpZyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHsgSUJ1aWxkSW5FdmVudCB9IGZyb20gJy4uLy4uL3V0aWxzL2VudW0nXG5pbXBvcnQgeyBJTG9jYWxlc0tleSB9IGZyb20gJy4uLy4uL2kxOG4vemgtQ04nXG5pbXBvcnQgeyBlbmNvZGVQYXRoLCBmb3JtYXRQYXRoSGVscGVyIH0gZnJvbSAnLi91dGlscydcblxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28gfCBib29sZWFuPiA9PiB7XG4gIGNvbnN0IHdlYmRhdnBsaXN0T3B0aW9ucyA9IGN0eC5nZXRDb25maWc8SVdlYmRhdlBsaXN0Q29uZmlnPigncGljQmVkLndlYmRhdnBsaXN0JylcbiAgaWYgKCF3ZWJkYXZwbGlzdE9wdGlvbnMpIHRocm93IG5ldyBFcnJvcihcIkNhbid0IGZpbmQgd2ViZGF2cGxpc3QgY29uZmlnXCIpXG4gIHdlYmRhdnBsaXN0T3B0aW9ucy5ob3N0ID0gd2ViZGF2cGxpc3RPcHRpb25zLmhvc3QucmVwbGFjZSgvXmh0dHBzPzpcXC9cXC98XFwvKyQvZywgJycpXG4gIHdlYmRhdnBsaXN0T3B0aW9ucy5ob3N0ID0gKHdlYmRhdnBsaXN0T3B0aW9ucy5zc2xFbmFibGVkID8gJ2h0dHBzOi8vJyA6ICdodHRwOi8vJykgKyB3ZWJkYXZwbGlzdE9wdGlvbnMuaG9zdFxuICB3ZWJkYXZwbGlzdE9wdGlvbnMucGF0aCA9IGZvcm1hdFBhdGhIZWxwZXIoe1xuICAgIHBhdGg6IHdlYmRhdnBsaXN0T3B0aW9ucy5wYXRoLFxuICAgIHJvb3RUb0VtcHR5OiBmYWxzZVxuICB9KVxuICBjb25zdCBhdXRoVHlwZSA9IHdlYmRhdnBsaXN0T3B0aW9ucy5hdXRoVHlwZSB8fCAnYmFzaWMnXG4gIGNvbnN0IHdlYnBhdGggPSBmb3JtYXRQYXRoSGVscGVyKHtcbiAgICBwYXRoOiB3ZWJkYXZwbGlzdE9wdGlvbnMud2VicGF0aCxcbiAgICByb290VG9FbXB0eTogZmFsc2VcbiAgfSlcbiAgY29uc3Qgc3VmZml4ID0gd2ViZGF2cGxpc3RPcHRpb25zLm9wdGlvbnMgfHwgJydcbiAgdHJ5IHtcbiAgICBjb25zdCBpbWdMaXN0ID0gY3R4Lm91dHB1dFxuICAgIGNvbnN0IGN1c3RvbVVybCA9IHdlYmRhdnBsaXN0T3B0aW9ucy5jdXN0b21VcmxcbiAgICBjb25zdCB1cGxvYWRQYXRoID0gd2ViZGF2cGxpc3RPcHRpb25zLnBhdGhcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBpbWdMaXN0KSB7XG4gICAgICBpZiAoaW1nLmZpbGVOYW1lICYmIGltZy5idWZmZXIpIHtcbiAgICAgICAgbGV0IGltYWdlID0gaW1nLmJ1ZmZlclxuICAgICAgICBpZiAoIWltYWdlICYmIGltZy5iYXNlNjRJbWFnZSkge1xuICAgICAgICAgIGltYWdlID0gQnVmZmVyLmZyb20oaW1nLmJhc2U2NEltYWdlLCAnYmFzZTY0JylcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjbGllbnRPcHRpb25zOiBXZWJEQVZDbGllbnRPcHRpb25zID0ge1xuICAgICAgICAgIHVzZXJuYW1lOiB3ZWJkYXZwbGlzdE9wdGlvbnMudXNlcm5hbWUsXG4gICAgICAgICAgcGFzc3dvcmQ6IHdlYmRhdnBsaXN0T3B0aW9ucy5wYXNzd29yZCxcbiAgICAgICAgICBtYXhCb2R5TGVuZ3RoOiA0ICogMTAyNCAqIDEwMjQgKiAxMDI0LFxuICAgICAgICAgIG1heENvbnRlbnRMZW5ndGg6IDQgKiAxMDI0ICogMTAyNCAqIDEwMjRcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXV0aFR5cGUgPT09ICdkaWdlc3QnKSB7XG4gICAgICAgICAgY2xpZW50T3B0aW9ucy5hdXRoVHlwZSA9IEF1dGhUeXBlLkRpZ2VzdFxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNsaWVudDogV2ViREFWQ2xpZW50ID0gY3JlYXRlQ2xpZW50KHdlYmRhdnBsaXN0T3B0aW9ucy5ob3N0LCBjbGllbnRPcHRpb25zKVxuICAgICAgICBjb25zdCBwYXRoVG9DcmVhdGUgPSB1cGxvYWRQYXRoID09PSAnLycgPyAnJyA6IHVwbG9hZFBhdGhcbiAgICAgICAgaWYgKHBhdGhUb0NyZWF0ZSkge1xuICAgICAgICAgIGF3YWl0IGNsaWVudC5jcmVhdGVEaXJlY3RvcnkocGF0aFRvQ3JlYXRlLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGNsaWVudC5wdXRGaWxlQ29udGVudHMoYCR7dXBsb2FkUGF0aH0ke2ltZy5maWxlTmFtZX1gLnJlcGxhY2UoL15cXC8rfFxcLyskL2csICcnKSwgaW1hZ2UsIHtcbiAgICAgICAgICBvdmVyd3JpdGU6IHRydWVcbiAgICAgICAgfSlcbiAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgIGNvbnN0IGltZ1RlbXBQYXRoID0gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCAnaW1nVGVtcCcsICd3ZWJkYXZwbGlzdCcpXG4gICAgICAgICAgY29uc3QgaW1nVGVtcEZpbGVQYXRoID0gcGF0aC5qb2luKGltZ1RlbXBQYXRoLCBpbWcuZmlsZU5hbWUpXG4gICAgICAgICAgZW5zdXJlRGlyU3luYyhwYXRoLmRpcm5hbWUoaW1nVGVtcEZpbGVQYXRoKSlcbiAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKGltZ1RlbXBGaWxlUGF0aCwgaW1hZ2UpXG4gICAgICAgICAgZGVsZXRlIGltZy5iYXNlNjRJbWFnZVxuICAgICAgICAgIGRlbGV0ZSBpbWcuYnVmZmVyXG4gICAgICAgICAgY29uc3QgYmFzZVVybCA9IGN1c3RvbVVybCB8fCB3ZWJkYXZwbGlzdE9wdGlvbnMuaG9zdFxuICAgICAgICAgIGlmICh3ZWJkYXZwbGlzdE9wdGlvbnMud2VicGF0aCkge1xuICAgICAgICAgICAgaW1nLmltZ1VybCA9IGAke2Jhc2VVcmx9LyR7ZW5jb2RlUGF0aChgJHt3ZWJwYXRofSR7aW1nLmZpbGVOYW1lfWApfSR7c3VmZml4fWBcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW1nLmltZ1VybCA9IGAke2Jhc2VVcmx9LyR7ZW5jb2RlUGF0aChgJHt1cGxvYWRQYXRofSR7aW1nLmZpbGVOYW1lfWApfSR7c3VmZml4fWBcbiAgICAgICAgICB9XG4gICAgICAgICAgaW1nLmdhbGxlcnlQYXRoID0gYGh0dHA6Ly9sb2NhbGhvc3Q6MzY2OTkvd2ViZGF2cGxpc3QvJHtlbmNvZGVVUklDb21wb25lbnQoaW1nLmZpbGVOYW1lKX1gXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVcGxvYWQgZmFpbGVkJylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY3R4XG4gIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcbiAgICAgIHRpdGxlOiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdVUExPQURfRkFJTEVEJyksXG4gICAgICBib2R5OiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdDSEVDS19TRVRUSU5HUycpXG4gICAgfSlcbiAgICB0aHJvdyBlcnJcbiAgfVxufVxuXG5jb25zdCBjb25maWcgPSAoY3R4OiBJUGljR28pOiBJUGx1Z2luQ29uZmlnW10gPT4ge1xuICBjb25zdCB1c2VyQ29uZmlnID0gY3R4LmdldENvbmZpZzxJV2ViZGF2UGxpc3RDb25maWc+KCdwaWNCZWQud2ViZGF2cGxpc3QnKSB8fCB7fVxuICBjb25zdCBjb25maWc6IElQbHVnaW5Db25maWdbXSA9IFtcbiAgICB7XG4gICAgICBuYW1lOiAnaG9zdCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX0hPU1QnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcuaG9zdCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnc3NsRW5hYmxlZCcsXG4gICAgICB0eXBlOiAnY29uZmlybScsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1NTTEVOQUJMRUQnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9TU0xFTkFCTEVEJylcbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLnNzbEVuYWJsZWQgPz8gZmFsc2UsXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1NTTEVOQUJMRUQnKVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3VzZXJuYW1lJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1VTRVJOQU1FJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfVVNFUk5BTUUnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcudXNlcm5hbWUgfHwgJycsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfVVNFUk5BTUUnKVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3Bhc3N3b3JkJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1BBU1NXT1JEJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfUEFTU1dPUkQnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGFzc3dvcmQgfHwgJycsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFTU1dPUkQnKVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3BhdGgnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfUEFUSCcpXG4gICAgICB9LFxuICAgICAgZ2V0IGFsaWFzKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGF0aCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFUSCcpXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiAnd2VicGF0aCcsXG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgZ2V0IHByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9XRUJTSVRFX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9XRUJTSVRFX1BBVEgnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcucGF0aCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfV0VCU0lURV9QQVRIJylcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdjdXN0b21VcmwnLFxuICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgIGdldCBwcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfQ1VTVE9NVVJMJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfQ1VTVE9NVVJMJylcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmN1c3RvbVVybCB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfQ1VTVE9NVVJMJylcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdhdXRoVHlwZScsXG4gICAgICB0eXBlOiAnbGlzdCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX0FVVEhUWVBFJylcbiAgICAgIH0sXG4gICAgICBnZXQgYWxpYXMoKSB7XG4gICAgICAgIHJldHVybiBjdHguaTE4bi50cmFuc2xhdGU8SUxvY2FsZXNLZXk+KCdQSUNCRURfV0VCREFWUExJU1RfQVVUSFRZUEUnKVxuICAgICAgfSxcbiAgICAgIGNob2ljZXM6IFsnYmFzaWMnLCAnZGlnZXN0J10sXG4gICAgICBkZWZhdWx0OiB1c2VyQ29uZmlnLmF1dGhUeXBlIHx8ICdiYXNpYycsXG4gICAgICByZXF1aXJlZDogZmFsc2VcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICdvcHRpb25zJyxcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBnZXQgcHJlZml4KCkge1xuICAgICAgICByZXR1cm4gY3R4LmkxOG4udHJhbnNsYXRlPElMb2NhbGVzS2V5PignUElDQkVEX1dFQkRBVlBMSVNUX09QVElPTlMnKVxuICAgICAgfSxcbiAgICAgIGdldCBhbGlhcygpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9PUFRJT05TJylcbiAgICAgIH0sXG4gICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX09QVElPTlMnKVxuICAgICAgfSxcbiAgICAgIGRlZmF1bHQ6IHVzZXJDb25maWcub3B0aW9ucyB8fCAnJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZVxuICAgIH1cbiAgXVxuICByZXR1cm4gY29uZmlnXG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZ2lzdGVyKGN0eDogSVBpY0dvKTogdm9pZCB7XG4gIGN0eC5oZWxwZXIudXBsb2FkZXIucmVnaXN0ZXIoJ3dlYmRhdnBsaXN0Jywge1xuICAgIGdldCBuYW1lKCkge1xuICAgICAgcmV0dXJuIGN0eC5pMThuLnRyYW5zbGF0ZTxJTG9jYWxlc0tleT4oJ1BJQ0JFRF9XRUJEQVZQTElTVCcpXG4gICAgfSxcbiAgICBoYW5kbGUsXG4gICAgY29uZmlnXG4gIH0pXG59XG4iLCJpbXBvcnQgeyBJUGljR28gfSBmcm9tICcuLi8uLi90eXBlcydcbmltcG9ydCBhbGlzdFVwbG9hZGVyIGZyb20gJy4vYWxpc3QnXG5pbXBvcnQgYWxpWXVuVXBsb2FkZXIgZnJvbSAnLi9hbGl5dW4nXG5pbXBvcnQgYXdzczNwbGlzdFVwbG9hZGVyIGZyb20gJy4vYXdzczNwbGlzdCdcbmltcG9ydCBnaXRodWJVcGxvYWRlciBmcm9tICcuL2dpdGh1YidcbmltcG9ydCBpbWd1clVwbG9hZGVyIGZyb20gJy4vaW1ndXInXG5pbXBvcnQgbG9jYWxVcGxvYWRlciBmcm9tICcuL2xvY2FsJ1xuaW1wb3J0IGxza3lVcGxvYWRlciBmcm9tICcuL2xza3knXG5pbXBvcnQgcGljbGlzdFVwbG9hZGVyIGZyb20gJy4vcGljbGlzdCdcbmltcG9ydCBxaW5pdVVwbG9hZGVyIGZyb20gJy4vcWluaXUnXG5pbXBvcnQgc2Z0cFVwbG9hZGVyIGZyb20gJy4vc2Z0cCdcbmltcG9ydCBzbW1zVXBsb2FkZXIgZnJvbSAnLi9zbW1zJ1xuaW1wb3J0IHRjWXVuVXBsb2FkZXIgZnJvbSAnLi90Y3l1bidcbmltcG9ydCB0ZWxlZ3JhcGhVcGxvYWRlciBmcm9tICcuL3RlbGVncmFwaCdcbmltcG9ydCB1cFl1blVwbG9hZGVyIGZyb20gJy4vdXB5dW4nXG5pbXBvcnQgd2ViZGF2cGxpc3RVcGxvYWRlciBmcm9tICcuL3dlYmRhdidcblxuY29uc3QgYnVpbGRJblVwbG9hZGVycyA9ICgpID0+IHtcbiAgcmV0dXJuIHtcbiAgICByZWdpc3RlcihjdHg6IElQaWNHbykge1xuICAgICAgYWxpc3RVcGxvYWRlcihjdHgpXG4gICAgICBhbGlZdW5VcGxvYWRlcihjdHgpXG4gICAgICBhd3NzM3BsaXN0VXBsb2FkZXIoY3R4KVxuICAgICAgZ2l0aHViVXBsb2FkZXIoY3R4KVxuICAgICAgaW1ndXJVcGxvYWRlcihjdHgpXG4gICAgICBsb2NhbFVwbG9hZGVyKGN0eClcbiAgICAgIGxza3lVcGxvYWRlcihjdHgpXG4gICAgICBwaWNsaXN0VXBsb2FkZXIoY3R4KVxuICAgICAgcWluaXVVcGxvYWRlcihjdHgpXG4gICAgICBzZnRwVXBsb2FkZXIoY3R4KVxuICAgICAgc21tc1VwbG9hZGVyKGN0eClcbiAgICAgIHRjWXVuVXBsb2FkZXIoY3R4KVxuICAgICAgdGVsZWdyYXBoVXBsb2FkZXIoY3R4KVxuICAgICAgdXBZdW5VcGxvYWRlcihjdHgpXG4gICAgICB3ZWJkYXZwbGlzdFVwbG9hZGVyKGN0eClcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgYnVpbGRJblVwbG9hZGVyc1xuIiwiaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJ1xuXG5pbXBvcnQgeyBpc1VybCwgZ2V0SW1hZ2VTaXplLCBnZXRGU0ZpbGUsIGdldFVSTEZpbGUgfSBmcm9tICcuLi8uLi91dGlscy9jb21tb24nXG5pbXBvcnQgeyBJUGljR28sIElQYXRoVHJhbnNmb3JtZWRJbWdJbmZvLCBJSW1nSW5mbywgSUltZ1NpemUgfSBmcm9tICcuLi8uLi90eXBlcydcblxuY29uc3QgaGFuZGxlID0gYXN5bmMgKGN0eDogSVBpY0dvKTogUHJvbWlzZTxJUGljR28+ID0+IHtcbiAgY29uc3QgcmVzdWx0czogSUltZ0luZm9bXSA9IGN0eC5vdXRwdXRcbiAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgY3R4LmlucHV0Lm1hcChhc3luYyAoaXRlbTogc3RyaW5nIHwgQnVmZmVyLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBsZXQgaW5mbzogSVBhdGhUcmFuc2Zvcm1lZEltZ0luZm9cbiAgICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoaXRlbSkpIHtcbiAgICAgICAgaW5mbyA9IHtcbiAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgIGJ1ZmZlcjogaXRlbSxcbiAgICAgICAgICBmaWxlTmFtZTogJycsXG4gICAgICAgICAgZXh0bmFtZTogJydcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc1VybChpdGVtKSkge1xuICAgICAgICBpbmZvID0gYXdhaXQgZ2V0VVJMRmlsZShpdGVtLCBjdHgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbmZvID0gYXdhaXQgZ2V0RlNGaWxlKGl0ZW0pXG4gICAgICB9XG4gICAgICBpZiAoaW5mby5zdWNjZXNzICYmIGluZm8uYnVmZmVyKSB7XG4gICAgICAgIGNvbnN0IGltZ1NpemUgPSBnZXRJbWdTaXplKGN0eCwgaW5mby5idWZmZXIsIGl0ZW0pXG4gICAgICAgIGNvbnN0IGV4dG5hbWUgPSBpbmZvLmV4dG5hbWUgfHwgaW1nU2l6ZS5leHRuYW1lIHx8ICcucG5nJ1xuICAgICAgICByZXN1bHRzW2luZGV4XSA9IHtcbiAgICAgICAgICBidWZmZXI6IGluZm8uYnVmZmVyLFxuICAgICAgICAgIGZpbGVOYW1lOiBpbmZvLmZpbGVOYW1lIHx8IGAke2RheWpzKCkuZm9ybWF0KCdZWVlZTU1EREhIbW1zcycpfSR7ZXh0bmFtZX1gLFxuICAgICAgICAgIHdpZHRoOiBpbWdTaXplLndpZHRoLFxuICAgICAgICAgIGhlaWdodDogaW1nU2l6ZS5oZWlnaHQsXG4gICAgICAgICAgZXh0bmFtZTogaW5mby5leHRuYW1lXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN0eC5sb2cuZXJyb3IoaW5mby5yZWFzb24pXG4gICAgICB9XG4gICAgfSlcbiAgKVxuICAvLyByZW1vdmUgZW1wdHkgaXRlbVxuICBjdHgub3V0cHV0ID0gcmVzdWx0cy5maWx0ZXIoaXRlbSA9PiBpdGVtKVxuICByZXR1cm4gY3R4XG59XG5cbmNvbnN0IGdldEltZ1NpemUgPSAoY3R4OiBJUGljR28sIGZpbGU6IEJ1ZmZlciwgcGF0aDogc3RyaW5nIHwgQnVmZmVyKTogSUltZ1NpemUgPT4ge1xuICBjb25zdCBpbWFnZVNpemUgPSBnZXRJbWFnZVNpemUoZmlsZSlcbiAgaWYgKCFpbWFnZVNpemUucmVhbCkge1xuICAgIGlmICh0eXBlb2YgcGF0aCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGN0eC5sb2cud2FybihgY2FuJ3QgZ2V0ICR7cGF0aH0ncyBpbWFnZSBzaXplYClcbiAgICB9IGVsc2Uge1xuICAgICAgY3R4LmxvZy53YXJuKFwiY2FuJ3QgZ2V0IGltYWdlIHNpemVcIilcbiAgICB9XG4gICAgY3R4LmxvZy53YXJuKCdmYWxsYmFjayB0byAyMDAgKiAyMDAnKVxuICB9XG4gIHJldHVybiBpbWFnZVNpemVcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBoYW5kbGVcbn1cbiIsImltcG9ydCB7IElQaWNHbyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuXG5jb25zdCBoYW5kbGUgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElQaWNHbz4gPT4ge1xuICBjdHgub3V0cHV0LnB1c2goLi4uY3R4LmlucHV0KVxuICByZXR1cm4gY3R4XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaGFuZGxlXG59XG4iLCJleHBvcnQgY29uc3QgQ0xJUEJPQVJEX0lNQUdFX0ZPTERFUiA9ICdwaWNsaXN0LWNsaXBib2FyZC1pbWFnZXMnXG4iLCJpbXBvcnQgeyBzcGF3biB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnXG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnXG5pbXBvcnQgZnMsIHsgZW5zdXJlRGlyU3luYyB9IGZyb20gJ2ZzLWV4dHJhJ1xuaW1wb3J0IGlzV3NsIGZyb20gJ2lzLXdzbCdcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5pbXBvcnQgb3MgZnJvbSAnb3MnXG5cbmltcG9ydCBtYWNDbGlwYm9hcmRTY3JpcHQgZnJvbSAnLi9jbGlwYm9hcmQvbWFjLmFwcGxlc2NyaXB0J1xuaW1wb3J0IHdpbmRvd3NDbGlwYm9hcmRTY3JpcHQgZnJvbSAnLi9jbGlwYm9hcmQvd2luZG93cy5wczEnXG5pbXBvcnQgd2luZG93czEwQ2xpcGJvYXJkU2NyaXB0IGZyb20gJy4vY2xpcGJvYXJkL3dpbmRvd3MxMC5wczEnXG5pbXBvcnQgbGludXhDbGlwYm9hcmRTY3JpcHQgZnJvbSAnLi9jbGlwYm9hcmQvbGludXguc2gnXG5pbXBvcnQgd3NsQ2xpcGJvYXJkU2NyaXB0IGZyb20gJy4vY2xpcGJvYXJkL3dzbC5zaCdcbmltcG9ydCB7IElCdWlsZEluRXZlbnQgfSBmcm9tICcuL2VudW0nXG5pbXBvcnQgeyBJUGljR28sIElDbGlwYm9hcmRJbWFnZSB9IGZyb20gJy4uL3R5cGVzJ1xuaW1wb3J0IHsgQ0xJUEJPQVJEX0lNQUdFX0ZPTERFUiB9IGZyb20gJy4vc3RhdGljJ1xuXG5leHBvcnQgdHlwZSBQbGF0Zm9ybSA9ICdkYXJ3aW4nIHwgJ3dpbjMyJyB8ICd3aW4xMCcgfCAnbGludXgnIHwgJ3dzbCdcblxuY29uc3QgZ2V0Q3VycmVudFBsYXRmb3JtID0gKCk6IFBsYXRmb3JtID0+IHtcbiAgY29uc3QgcGxhdGZvcm0gPSBwcm9jZXNzLnBsYXRmb3JtXG4gIGlmIChpc1dzbCkgcmV0dXJuICd3c2wnXG4gIGlmIChwbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgIHJldHVybiBvcy5yZWxlYXNlKCkuc3BsaXQoJy4nKVswXSA9PT0gJzEwJyA/ICd3aW4xMCcgOiAnd2luMzInXG4gIH0gZWxzZSBpZiAocGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XG4gICAgcmV0dXJuICdkYXJ3aW4nXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuICdsaW51eCdcbiAgfVxufVxuXG5jb25zdCBwbGF0Zm9ybTJTY3JpcHRDb250ZW50OiB7XG4gIFtrZXkgaW4gUGxhdGZvcm1dOiBzdHJpbmdcbn0gPSB7XG4gIGRhcndpbjogbWFjQ2xpcGJvYXJkU2NyaXB0LFxuICB3aW4zMjogd2luZG93c0NsaXBib2FyZFNjcmlwdCxcbiAgd2luMTA6IHdpbmRvd3MxMENsaXBib2FyZFNjcmlwdCxcbiAgbGludXg6IGxpbnV4Q2xpcGJvYXJkU2NyaXB0LFxuICB3c2w6IHdzbENsaXBib2FyZFNjcmlwdFxufVxuXG4vKipcbiAqIHBvd2Vyc2hlbGwgd2lsbCByZXBvcnQgZXJyb3IgaWYgZmlsZSBkb2VzIG5vdCBoYXZlIGEgJy5wczEnIGV4dGVuc2lvbixcbiAqIHNvIHdlIHNob3VsZCBrZWVwIHRoZSBleHRlbnNpb24gbmFtZSBjb25zaXN0ZW50IHdpdGggY29ycmVzcG9uZGluZyBzaGVsbFxuICovXG5jb25zdCBwbGF0Zm9ybTJTY3JpcHRGaWxlbmFtZToge1xuICBba2V5IGluIFBsYXRmb3JtXTogc3RyaW5nXG59ID0ge1xuICBkYXJ3aW46ICdtYWMuYXBwbGVzY3JpcHQnLFxuICB3aW4zMjogJ3dpbmRvd3MucHMxJyxcbiAgd2luMTA6ICd3aW5kb3dzMTAucHMxJyxcbiAgbGludXg6ICdsaW51eC5zaCcsXG4gIHdzbDogJ3dzbC5zaCdcbn1cblxuZnVuY3Rpb24gY3JlYXRlSW1hZ2VGb2xkZXIoY3R4OiBJUGljR28pOiB2b2lkIHtcbiAgY29uc3QgaW1hZ2VQYXRoID0gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCBDTElQQk9BUkRfSU1BR0VfRk9MREVSKVxuICBlbnN1cmVEaXJTeW5jKGltYWdlUGF0aClcbn1cblxuLy8gVGhhbmtzIHRvIHZzLXBpY2dvOiBodHRwczovL2dpdGh1Yi5jb20vU3BhZGVzLVMvdnMtcGljZ28vYmxvYi9tYXN0ZXIvc3JjL2V4dGVuc2lvbi50c1xuY29uc3QgZ2V0Q2xpcGJvYXJkSW1hZ2UgPSBhc3luYyAoY3R4OiBJUGljR28pOiBQcm9taXNlPElDbGlwYm9hcmRJbWFnZT4gPT4ge1xuICBjcmVhdGVJbWFnZUZvbGRlcihjdHgpXG4gIC8vIGFkZCBhbiBjbGlwYm9hcmQgaW1hZ2UgZm9sZGVyIHRvIGNvbnRyb2wgdGhlIGltYWdlIGNhY2hlIGZpbGVcbiAgY29uc3QgaW1hZ2VQYXRoID0gcGF0aC5qb2luKGN0eC5iYXNlRGlyLCBDTElQQk9BUkRfSU1BR0VfRk9MREVSLCBgJHtkYXlqcygpLmZvcm1hdCgnWVlZWU1NRERISG1tc3MnKX0ucG5nYClcbiAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlPElDbGlwYm9hcmRJbWFnZT4oKHJlc29sdmU6IGFueSwgcmVqZWN0OiBhbnkpOiB2b2lkID0+IHtcbiAgICBjb25zdCBwbGF0Zm9ybSA9IGdldEN1cnJlbnRQbGF0Zm9ybSgpXG4gICAgY29uc3Qgc2NyaXB0UGF0aCA9IHBhdGguam9pbihjdHguYmFzZURpciwgcGxhdGZvcm0yU2NyaXB0RmlsZW5hbWVbcGxhdGZvcm1dKVxuICAgIC8vIElmIHRoZSBzY3JpcHQgZG9lcyBub3QgZXhpc3QgeWV0LCB3ZSBuZWVkIHRvIHdyaXRlIHRoZSBjb250ZW50IHRvIHRoZSBzY3JpcHQgZmlsZVxuICAgIGlmICghZnMuZXhpc3RzU3luYyhzY3JpcHRQYXRoKSkge1xuICAgICAgZnMud3JpdGVGaWxlU3luYyhzY3JpcHRQYXRoLCBwbGF0Zm9ybTJTY3JpcHRDb250ZW50W3BsYXRmb3JtXSwgJ3V0ZjgnKVxuICAgIH1cbiAgICBsZXQgZXhlY3V0aW9uXG4gICAgaWYgKHBsYXRmb3JtID09PSAnZGFyd2luJykge1xuICAgICAgZXhlY3V0aW9uID0gc3Bhd24oJ29zYXNjcmlwdCcsIFtzY3JpcHRQYXRoLCBpbWFnZVBhdGhdKVxuICAgIH0gZWxzZSBpZiAocGxhdGZvcm0gPT09ICd3aW4zMicgfHwgcGxhdGZvcm0gPT09ICd3aW4xMCcpIHtcbiAgICAgIGV4ZWN1dGlvbiA9IHNwYXduKCdwb3dlcnNoZWxsJywgW1xuICAgICAgICAnLW5vcHJvZmlsZScsXG4gICAgICAgICctbm9uaW50ZXJhY3RpdmUnLFxuICAgICAgICAnLW5vbG9nbycsXG4gICAgICAgICctc3RhJyxcbiAgICAgICAgJy1leGVjdXRpb25wb2xpY3knLFxuICAgICAgICAndW5yZXN0cmljdGVkJyxcbiAgICAgICAgLy8gZml4IHdpbmRvd3MgMTAgbmF0aXZlIGNtZCBjcmFzaCBidWcgd2hlbiBcInBpY2dvIHVwbG9hZFwiXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9QaWNHby9QaWNHby1Db3JlL2lzc3Vlcy8zMlxuICAgICAgICAvLyAnLXdpbmRvd3N0eWxlJywnaGlkZGVuJyxcbiAgICAgICAgLy8gJy1ub2V4aXQnLFxuICAgICAgICAnLWZpbGUnLFxuICAgICAgICBzY3JpcHRQYXRoLFxuICAgICAgICBpbWFnZVBhdGhcbiAgICAgIF0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGV4ZWN1dGlvbiA9IHNwYXduKCdzaCcsIFtzY3JpcHRQYXRoLCBpbWFnZVBhdGhdKVxuICAgIH1cblxuICAgIGV4ZWN1dGlvbi5zdGRvdXQub24oJ2RhdGEnLCAoZGF0YTogQnVmZmVyKSA9PiB7XG4gICAgICBpZiAocGxhdGZvcm0gPT09ICdsaW51eCcpIHtcbiAgICAgICAgaWYgKGRhdGEudG9TdHJpbmcoKS50cmltKCkgPT09ICdubyB4Y2xpcCBvciB3bC1jbGlwYm9hcmQnKSB7XG4gICAgICAgICAgY3R4LmVtaXQoSUJ1aWxkSW5FdmVudC5OT1RJRklDQVRJT04sIHtcbiAgICAgICAgICAgIHRpdGxlOiAneGNsaXAgb3Igd2wtY2xpcGJvYXJkIG5vdCBmb3VuZCcsXG4gICAgICAgICAgICBib2R5OiAnUGxlYXNlIGluc3RhbGwgeGNsaXAoZm9yIHgxMSkgb3Igd2wtY2xpcGJvYXJkKGZvciB3YXlsYW5kKSBiZWZvcmUgcnVuIHBpY2dvJ1xuICAgICAgICAgIH0pXG4gICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoJ1BsZWFzZSBpbnN0YWxsIHhjbGlwKGZvciB4MTEpIG9yIHdsLWNsaXBib2FyZChmb3Igd2F5bGFuZCkgYmVmb3JlIHJ1biBwaWNnbycpKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBpbWdQYXRoID0gZGF0YS50b1N0cmluZygpLnRyaW0oKVxuXG4gICAgICAvLyBpZiB0aGUgZmlsZVBhdGggaXMgdGhlIHJlYWwgZmlsZSBpbiBzeXN0ZW1cbiAgICAgIC8vIHdlIHNob3VsZCBrZWVwIGl0IGluc3RlYWQgb2YgcmVtb3ZpbmdcbiAgICAgIGxldCBzaG91bGRLZWVwQWZ0ZXJVcGxvYWRpbmcgPSBmYWxzZVxuXG4gICAgICAvLyBpbiBtYWNPUyBpZiB5b3VyIGNvcHkgdGhlIGZpbGUgaW4gc3lzdGVtLCBpdCdzIGJhc2VuYW1lIHdpbGwgbm90IGVxdWFsIHRvIG91ciBkZWZhdWx0IGJhc2VuYW1lXG4gICAgICBpZiAocGF0aC5iYXNlbmFtZShpbWdQYXRoKSAhPT0gcGF0aC5iYXNlbmFtZShpbWFnZVBhdGgpKSB7XG4gICAgICAgIC8vIGlmIHRoZSBwYXRoIGlzIG5vdCBnZW5lcmF0ZSBieSBwaWNnb1xuICAgICAgICAvLyBidXQgdGhlIHBhdGggZXhpc3RzLCB3ZSBzaG91bGQga2VlcCBpdFxuICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhpbWdQYXRoKSkge1xuICAgICAgICAgIHNob3VsZEtlZXBBZnRlclVwbG9hZGluZyA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gaWYgdGhlIGltZ1BhdGggaXMgaW52YWxpZFxuICAgICAgaWYgKGltZ1BhdGggIT09ICdubyBpbWFnZScgJiYgIWZzLmV4aXN0c1N5bmMoaW1nUGF0aCkpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoYENhbid0IGZpbmQgJHtpbWdQYXRofWApKVxuICAgICAgfVxuXG4gICAgICByZXNvbHZlKHtcbiAgICAgICAgaW1nUGF0aCxcbiAgICAgICAgc2hvdWxkS2VlcEFmdGVyVXBsb2FkaW5nXG4gICAgICB9KVxuICAgIH0pXG4gIH0pXG59XG5cbmV4cG9ydCBkZWZhdWx0IGdldENsaXBib2FyZEltYWdlXG4iLCJpbXBvcnQgeyBJQ29uZmlnLCBJUGljR28gfSBmcm9tICcuLi90eXBlcydcbmltcG9ydCB7IEpTT05TdG9yZSB9IGZyb20gJ0BwaWNnby9zdG9yZSdcbmltcG9ydCB7IElKU09OIH0gZnJvbSAnQHBpY2dvL3N0b3JlL2Rpc3QvdHlwZXMnXG5cbmNsYXNzIERCIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjdHg6IElQaWNHb1xuICBwcml2YXRlIHJlYWRvbmx5IGRiOiBKU09OU3RvcmVcbiAgY29uc3RydWN0b3IoY3R4OiBJUGljR28pIHtcbiAgICB0aGlzLmN0eCA9IGN0eFxuICAgIHRoaXMuZGIgPSBuZXcgSlNPTlN0b3JlKHRoaXMuY3R4LmNvbmZpZ1BhdGgpXG5cbiAgICBpZiAoIXRoaXMuZGIuaGFzKCdwaWNCZWQnKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5kYi5zZXQoJ3BpY0JlZCcsIHtcbiAgICAgICAgICB1cGxvYWRlcjogJ3NtbXMnLFxuICAgICAgICAgIGN1cnJlbnQ6ICdzbW1zJyxcbiAgICAgICAgICBzbW1zOiB7XG4gICAgICAgICAgICB0b2tlbjogJydcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgICAgdGhpcy5jdHgubG9nLmVycm9yKGUpXG4gICAgICAgIHRocm93IGVcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCF0aGlzLmRiLmhhcygncGljZ29QbHVnaW5zJykpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuZGIuc2V0KCdwaWNnb1BsdWdpbnMnLCB7fSlcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICB0aGlzLmN0eC5sb2cuZXJyb3IoZSlcbiAgICAgICAgdGhyb3cgZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJlYWQoZmx1c2g/OiBib29sZWFuKTogSUpTT04ge1xuICAgIHJldHVybiB0aGlzLmRiLnJlYWQoZmx1c2gpXG4gIH1cblxuICBnZXQoa2V5OiBzdHJpbmcgPSAnJyk6IGFueSB7XG4gICAgdGhpcy5yZWFkKHRydWUpXG4gICAgcmV0dXJuIHRoaXMuZGIuZ2V0KGtleSlcbiAgfVxuXG4gIHNldChrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMucmVhZCh0cnVlKVxuICAgIHRoaXMuZGIuc2V0KGtleSwgdmFsdWUpXG4gIH1cblxuICBoYXMoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0aGlzLnJlYWQodHJ1ZSlcbiAgICByZXR1cm4gdGhpcy5kYi5oYXMoa2V5KVxuICB9XG5cbiAgdW5zZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICB0aGlzLnJlYWQodHJ1ZSlcbiAgICByZXR1cm4gdGhpcy5kYi51bnNldChrZXksIHZhbHVlKVxuICB9XG5cbiAgc2F2ZUNvbmZpZyhjb25maWc6IFBhcnRpYWw8SUNvbmZpZz4pOiB2b2lkIHtcbiAgICBPYmplY3Qua2V5cyhjb25maWcpLmZvckVhY2goKG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgdGhpcy5zZXQobmFtZSwgY29uZmlnW25hbWVdKVxuICAgIH0pXG4gIH1cblxuICByZW1vdmVDb25maWcoY29uZmlnOiBJQ29uZmlnKTogdm9pZCB7XG4gICAgT2JqZWN0LmtleXMoY29uZmlnKS5mb3JFYWNoKChuYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIHRoaXMudW5zZXQobmFtZSwgY29uZmlnW25hbWVdKVxuICAgIH0pXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgREJcbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXRlbXBsYXRlLWN1cmx5LWluLXN0cmluZyAqL1xuZXhwb3J0IGNvbnN0IFpIX0NOID0ge1xuICBVUExPQURfRkFJTEVEOiAn5LiK5Lyg5aSx6LSlJyxcbiAgQ0hFQ0tfU0VUVElOR1M6ICfor7fmo4Dmn6XkvaDnmoTphY3nva7pobnmmK/lkKbmraPnoa4nLFxuICBDSEVDS19TRVRUSU5HU19BTkRfTkVUV09SSzogJ+ivt+ajgOafpeS9oOeahOmFjee9rumhueS7peWPiue9kee7nCcsXG4gIFVQTE9BRF9GQUlMRURfUkVBU09OOiAn6ZSZ6K+v56CB77yaJHtjb2Rlfe+8jOivt+aJk+W8gOa1j+iniOWZqOeymOi0tOWcsOWdgOafpeeci+ebuOWFs+WOn+WboCcsXG4gIFNFUlZFUl9FUlJPUjogJ+acjeWKoeerr+WHuumUme+8jOivt+mHjeivlScsXG4gIEFVVEhfRkFJTEVEOiAn6K6k6K+B5aSx6LSlJyxcblxuICAvLyBzbW1zXG4gIFBJQ0JFRF9TTU1TOiAnU00uTVMnLFxuICBQSUNCRURfU01NU19UT0tFTjogJ+iuvuWumlRva2VuJyxcbiAgUElDQkVEX1NNTVNfTUVTU0FHRV9UT0tFTjogJ+ivt+Whq+WGmVRva2VuJyxcbiAgUElDQkVEX1NNTVNfQkFDS1VQX0RPTUFJTjogJ+Wkh+eUqOS4iuS8oOWfn+WQjScsXG4gIFBJQ0JFRF9TTU1TX01FU1NBR0VfQkFDS1VQX0RPTUFJTjogJ+S+i+WmgiBzbW1zLmFwcCcsXG5cbiAgLy8gbG9jYWxcbiAgUElDQkVEX0xPQ0FMOiAn5pys5Zyw5LiK5LygJyxcbiAgUElDQkVEX0xPQ0FMX1BBVEg6ICforr7lrprot6/lvoQnLFxuICBQSUNCRURfTE9DQUxfTUVTU0FHRV9QQVRIOiAn5L6L5aaCIC91c3IvbG9jYWwvaW1hZ2VzLycsXG4gIFBJQ0JFRF9MT0NBTF9DVVNUT01VUkw6ICforr7lrproh6rlrprkuYnln5/lkI0nLFxuICBQSUNCRURfTE9DQUxfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoIgaHR0cHM6Ly90ZXN0LmNvbScsXG4gIFBJQ0JFRF9MT0NBTF9XRUJQQVRIOiAn6K6+5a6a572R56uZ6Lev5b6EJyxcbiAgUElDQkVEX0xPQ0FMX01FU1NBR0VfV0VCUEFUSDogJ+eUqOS6juaLvOaOpee9keWdgOi3r+W+hCcsXG5cbiAgLy8gYWxpc3RcbiAgUElDQkVEX0FMSVNUX1BMSVNUOiAnQUxpc3QnLFxuICBQSUNCRURfQUxJU1RfVVJMOiAn6K6+5a6aVVJMJyxcbiAgUElDQkVEX0FMSVNUX01FU1NBR0VfVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly9hbGlzdC5leGFtcGxlLmNvbScsXG4gIFBJQ0JFRF9BTElTVF9UT0tFTjogJ+iuvuWumlRva2VuJyxcbiAgUElDQkVEX0FMSVNUX01FU1NBR0VfVE9LRU46ICfor7fovpPlhaVUb2tlbijkuI7nlKjmiLflkI0t5a+G56CB5LqM6YCJ5LiAKScsXG4gIFBJQ0JFRF9BTElTVF9VU0VSTkFNRTogJ+iuvuWumueUqOaIt+WQjScsXG4gIFBJQ0JFRF9BTElTVF9NRVNTQUdFX1VTRVJOQU1FOiAn6K+36L6T5YWl55So5oi35ZCNKOS4jlRva2Vu5LqM6YCJ5LiAKScsXG4gIFBJQ0JFRF9BTElTVF9QQVNTV09SRDogJ+iuvuWumuWvhueggScsXG4gIFBJQ0JFRF9BTElTVF9NRVNTQUdFX1BBU1NXT1JEOiAn6K+36L6T5YWl5a+G56CBJyxcbiAgUElDQkVEX0FMSVNUX1VQTE9BRF9QQVRIOiAn6K6+5a6a5LiK5Lyg6Lev5b6EJyxcbiAgUElDQkVEX0FMSVNUX01FU1NBR0VfVVBMT0FEX1BBVEg6ICfkvovlpoLvvJovdGVzdCcsXG4gIFBJQ0JFRF9BTElTVF9XRUJfUEFUSDogJ+iuvuWumue9keermei3r+W+hCcsXG4gIFBJQ0JFRF9BTElTVF9NRVNTQUdFX1dFQl9QQVRIOiAn55So5LqO5ou85o6l572R5Z2A6Lev5b6EJyxcbiAgUElDQkVEX0FMSVNUX0NVU1RPTVVSTDogJ+iuvuWumuiHquWumuS5ieWfn+WQjScsXG4gIFBJQ0JFRF9BTElTVF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxuXG4gIC8vIEFsaS1jbG91ZFxuICBQSUNCRURfQUxJQ0xPVUQ6ICfpmL/ph4zkupFPU1MnLFxuICBQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZSUQ6ICforr7lrpphY2Nlc3NLZXlJZCcsXG4gIFBJQ0JFRF9BTElDTE9VRF9BQ0NFU1NLRVlTRUNSRVQ6ICforr7lrpphY2Nlc3NLZXlTZWNyZXQnLFxuICBQSUNCRURfQUxJQ0xPVURfQlVDS0VUOiAn6K6+5a6aQnVja2V0JyxcbiAgUElDQkVEX0FMSUNMT1VEX0FSRUE6ICforr7lrprlrZjlgqjljLrln58nLFxuICBQSUNCRURfQUxJQ0xPVURfUEFUSDogJ+iuvuWumuWtmOWCqOi3r+W+hCcsXG4gIFBJQ0JFRF9BTElDTE9VRF9DVVNUT01VUkw6ICforr7lrproh6rlrprkuYnln5/lkI0nLFxuICBQSUNCRURfQUxJQ0xPVURfT1BUSU9OUzogJ+iuvuWumue9keWdgOWQjue8gCcsXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0FSRUE6ICfkvovlpoLvvJpvc3MtY24tYmVpamluZycsXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJo/eC1vc3MtcHJvY2Vzcz14eHgnLFxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoLvvJpodHRwczovL3Rlc3QuY29tJyxcblxuICAvLyBUZW5jZW50LWNsb3VkXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVUQ6ICfohb7orq/kupFDT1MnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1ZFUlNJT046ICdDT1PniYjmnKwnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVElEOiAn6K6+5a6aU2VjcmV0SWQnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVEtFWTogJ+iuvuWumlNlY3JldEtleScsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQVBQSUQ6ICforr7lrppBcHBJZCcsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQlVDS0VUOiAn6K6+5a6aQnVja2V0JyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9BUkVBOiAn6K6+5a6a5a2Y5YKo5Yy65Z+fJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9FTkRQT0lOVDogJ+iuvuWumuaOpeWFpeeCuScsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfUEFUSDogJ+iuvuWumuWtmOWCqOi3r+W+hCcsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfT1BUSU9OUzogJ+iuvuWumue9keWdgOWQjue8gCcsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQ1VTVE9NVVJMOiAn6K6+5a6a6Ieq5a6a5LmJ5Z+f5ZCNJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FQUElEOiAn5L6L5aaC77yaMTIzNDU2Nzg5MCcsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9BUkVBOiAn5L6L5aaC77yaYXAtYmVpamluZycsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9PUFRJT05TOiAn5L6L5aaC77yaP2ltYWdlTW9ncjInLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfRU5EUE9JTlQ6ICfkvovlpoLvvJpjb3MtaW50ZXJuYWwuYWNjZWxlcmF0ZS50ZW5jZW50Y29zLmNuJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNOiAn5p6B5pm65Y6L57ypJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX1RJUDpcbiAgICAn5Zu+54mH5p6B5pm65Y6L57yp77yM6K+m5oOF6K+35Y+C6ICDW+aWh+aho+ivtOaYjl0oaHR0cHM6Ly9jbG91ZC50ZW5jZW50LmNvbS9kb2N1bWVudC9wcm9kdWN0LzQzNi84NjQzOCknLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fQ09ORklSTTogJ+W8gOWQrycsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9DQU5DRUw6ICflhbPpl60nLFxuXG4gIC8vIEdpdEh1YlxuICBQSUNCRURfR0lUSFVCOiAnR2l0SHViJyxcbiAgUElDQkVEX0dJVEhVQl9UT0tFTjogJ+iuvuWumlRva2VuJyxcbiAgUElDQkVEX0dJVEhVQl9SRVBPOiAn6K6+5a6a5LuT5bqT5ZCNJyxcbiAgUElDQkVEX0dJVEhVQl9QQVRIOiAn6K6+5a6a5a2Y5YKo6Lev5b6EJyxcbiAgUElDQkVEX0dJVEhVQl9CUkFOQ0g6ICforr7lrprliIbmlK/lkI0nLFxuICBQSUNCRURfR0lUSFVCX0NVU1RPTVVSTDogJ+iuvuWumuiHquWumuS5ieWfn+WQjScsXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9SRVBPOiAn5qC85byP77yadXNlcm5hbWUvcmVwbycsXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9CUkFOQ0g6ICfkvovlpoLvvJptYWluJyxcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXG4gIFBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoLvvJpodHRwczovL3Rlc3QuY29tJyxcblxuICAvLyBxaW5pdVxuICBQSUNCRURfUUlOSVU6ICfkuIPniZvkupEnLFxuICBQSUNCRURfUUlOSVVfQUNDRVNTS0VZOiAn6K6+5a6aQWNjZXNzS2V5JyxcbiAgUElDQkVEX1FJTklVX1NFQ1JFVEtFWTogJ+iuvuWumlNlY3JldEtleScsXG4gIFBJQ0JFRF9RSU5JVV9CVUNLRVQ6ICforr7lrppCdWNrZXQnLFxuICBQSUNCRURfUUlOSVVfUEFUSDogJ+iuvuWumuWtmOWCqOi3r+W+hCcsXG4gIFBJQ0JFRF9RSU5JVV9VUkw6ICforr7lrprorr/pl67nvZHlnYAnLFxuICBQSUNCRURfUUlOSVVfT1BUSU9OUzogJ+iuvuWumue9keWdgOWQjue8gCcsXG4gIFBJQ0JFRF9RSU5JVV9BUkVBOiAn6K6+5a6a5a2Y5YKo5Yy65Z+fJyxcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfQVJFQTogJ+S+i+Wmgu+8mnowJyxcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfT1BUSU9OUzogJ+S+i+Wmgu+8mj9pbWFnZXNsaW0nLFxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9VUkw6ICfkvovlpoLvvJpodHRwczovL3h4eC55eXkuZ2xiLmNsb3VkZG4uY29tJyxcbiAgUElDQkVEX1RFTEVHUkFQSDogJ1RlbGVncmFwaCcsXG4gIC8vIGltZ3VyXG4gIFBJQ0JFRF9JTUdVUjogJ0ltZ3VyJyxcbiAgUElDQkVEX0lNR1VSX0NMSUVOVElEOiAn6K6+5a6aQ2xpZW50SWQnLFxuICBQSUNCRURfSU1HVVJfVVNFUk5BTUU6ICforr7lrprnlKjmiLflkI0nLFxuICBQSUNCRURfSU1HVVJfQUNDRVNTX1RPS0VOOiAn6K6+5a6aYWNjZXNzVG9rZW4nLFxuICBQSUNCRURfSU1HVVJfQUxCVU06ICforr7lrprnm7jlhozlkI0nLFxuICBQSUNCRURfSU1HVVJfUFJPWFk6ICforr7lrprku6PnkIYnLFxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9DTElFTlRJRDogJ+WMv+WQjeS4iuS8oOaXtuWhq+WGmScsXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX1VTRVJOQU1FOiAn6ZyA6KaB5LiK5Lyg5Yiw6LSm5oi35pe25aGr5YaZJyxcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfQUNDRVNTX1RPS0VOOiAn6ZyA6KaB5LiK5Lyg5Yiw6LSm5oi35pe25aGr5YaZJyxcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfQUxCVU06ICfkvovlpoLvvJp0ZXN0JyxcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfUFJPWFk6ICfkvovlpoLvvJpodHRwOi8vMTI3LjAuMC4xOjEwODAnLFxuXG4gIC8vIHVweXVuXG4gIFBJQ0JFRF9VUFlVTjogJ+WPiOaLjeS6kScsXG4gIFBJQ0JFRF9VUFlVTl9CVUNLRVQ6ICforr7lrppCdWNrZXQnLFxuICBQSUNCRURfVVBZVU5fT1BFUkFUT1I6ICforr7lrprmk43kvZzlkZgnLFxuICBQSUNCRURfVVBZVU5fUEFTU1dPUkQ6ICforr7lrprmk43kvZzlkZjlr4bnoIEnLFxuICBQSUNCRURfVVBZVU5fUEFUSDogJ+iuvuWumuWtmOWCqOi3r+W+hCcsXG4gIFBJQ0JFRF9VUFlVTl9VUkw6ICforr7lrprliqDpgJ/ln5/lkI0nLFxuICBQSUNCRURfVVBZVU5fT1BUSU9OUzogJ+iuvuWumue9keWdgOWQjue8gCcsXG4gIFBJQ0JFRF9VUFlVTl9FTkRQT0lOVDogJ+iuvuWumuiHquWumuS5iUFQSeaOpeWFpeeCuScsXG4gIFBJQ0JFRF9VUFlVTl9BTlRJX0xFRUNIX1RPS0VOOiAn6K6+5a6a6Ziy55uX6ZO+VG9rZW4nLFxuICBQSUNCRURfVVBZVU5fRVhQSVJFX1RJTUU6ICforr7lrprov4fmnJ/ml7bpl7Qo56eSKScsXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QRVJBVE9SOiAn5L6L5aaC77yabWUnLFxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9QQVNTV09SRDogJ+i+k+WFpeaTjeS9nOWRmOWvhueggScsXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1VSTDogJ+S+i+Wmgu+8mmh0dHA6Ly94eHgudGVzdC51cGNkbi5uZXQnLFxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9PUFRJT05TOiAn5L6L5aaC77yaIWltZ3NsaW0nLFxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9FTkRQT0lOVDogJ+S+i+Wmgu+8mmh0dHBzOi8vdjAuYXBpLnVweXVuLmNvbScsXG5cbiAgLy8gd2ViZGF2cGxpc3RcbiAgUElDQkVEX1dFQkRBVlBMSVNUOiAnV2ViREFWJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX0hPU1Q6ICforr7lrprmjqXlj6PnvZHlnYAnLFxuICBQSUNCRURfV0VCREFWUExJU1RfU1NMRU5BQkxFRDogJ+WQr+eUqFNTTCcsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9VU0VSTkFNRTogJ+iuvuWumueUqOaIt+WQjScsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9QQVNTV09SRDogJ+iuvuWumuWvhueggScsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9QQVRIOiAn6K6+5a6a5a2Y5YKo6Lev5b6EJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX1dFQlNJVEVfUEFUSDogJ+iuvuWumue9keWdgOi3r+W+hCcsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9DVVNUT01VUkw6ICforr7lrproh6rlrprkuYnln5/lkI0nLFxuICBQSUNCRURfV0VCREFWUExJU1RfQVVUSFRZUEU6ICforr7lrprorqTor4HmlrnlvI8nLFxuICBQSUNCRURfV0VCREFWUExJU1RfT1BUSU9OUzogJ+iuvuWumue9keWdgOWQjue8gCcsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX0hPU1Q6ICfkvovlpoLvvJpodHRwczovL2V4YW1wbGUuY29tL3dlYmRhdicsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1NTTEVOQUJMRUQ6ICfpnIDopoFIVFRQU+aXtuWQr+eUqCcsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1VTRVJOQU1FOiAn5L6L5aaC77yabWUnLFxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9QQVNTV09SRDogJ+i+k+WFpeWvhueggScsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSDogJ+aLvOaOpee9keWdgOaXtuS9v+eUqCcsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9PUFRJT05TOiAn5L6L5aaC77yaP2tleT0xMjM0NTYnLFxuXG4gIC8vIHNmdHBwbGlzdFxuICBQSUNCRURfU0ZUUFBMSVNUOiAn5YaF572uU0ZUUCcsXG4gIFBJQ0JFRF9TRlRQUExJU1RfSE9TVDogJ+iuvuWumuS4u+acuicsXG4gIFBJQ0JFRF9TRlRQUExJU1RfUE9SVDogJ+iuvuWumuerr+WPoycsXG4gIFBJQ0JFRF9TRlRQUExJU1RfVVNFUk5BTUU6ICforr7lrprnlKjmiLflkI0nLFxuICBQSUNCRURfU0ZUUFBMSVNUX1BBU1NXT1JEOiAn6K6+5a6a5a+G56CBJyxcbiAgUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZOiAn6K6+5a6a56eB6ZKlJyxcbiAgUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZX1BBU1NQSFJBU0U6ICforr7lrprnp4HpkqXlr4bnoIEnLFxuICBQSUNCRURfU0ZUUFBMSVNUX1VQTE9BRFBBVEg6ICforr7lrprkuIrkvKDot6/lvoQnLFxuICBQSUNCRURfU0ZUUFBMSVNUX0NVU1RPTVVSTDogJ+iuvuWumuiHquWumuS5ieWfn+WQjScsXG4gIFBJQ0JFRF9TRlRQUExJU1RfV0VCU0lURV9QQVRIOiAn6K6+5a6a572R56uZ6Lev5b6EJyxcbiAgUElDQkVEX1NGVFBQTElTVF9GSUxFX1VTRVI6ICforr7lrprmlofku7bnlKjmiLc657uEJyxcbiAgUElDQkVEX1NGVFBQTElTVF9GSUxFX01PREU6ICforr7lrprmlofku7bmnYPpmZAnLFxuICBQSUNCRURfU0ZUUFBMSVNUX0RJUl9NT0RFOiAn6K6+5a6a5paH5Lu25aS55p2D6ZmQJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0hPU1Q6ICfkvovlpoLvvJoxLjEuMS4zJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BPUlQ6ICfpu5jorqQyMicsXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QUklWQVRFS0VZOiAn5L6L5aaC77yaL1VzZXJzL3h4eC8uc3NoL2lkX3JzYScsXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QUklWQVRFS0VZX1BBU1NQSFJBU0U6ICfovpPlhaXnp4HpkqXlr4bnoIEnLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfVVBMT0FEUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfV0VCU0lURV9QQVRIOiAn5ou85o6l572R5Z2A5pe25L2/55SoJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0ZJTEVfVVNFUjogJ+S+i+Wmgu+8mnd3dzpkYXRhJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0ZJTEVfTU9ERTogJ+S+i+Wmgu+8mjA2NjQnLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRElSX01PREU6ICfkvovlpoLvvJowNzc1JyxcblxuICAvLyBQaWNMaXN0XG4gIFBJQ0JFRF9QSUNMSVNUOiAnUGljTGlzdCcsXG4gIFBJQ0JFRF9QSUNMSVNUX0hPU1Q6ICforr7lrprkuLvmnLonLFxuICBQSUNCRURfUElDTElTVF9QT1JUOiAn6K6+5a6a56uv5Y+jJyxcbiAgUElDQkVEX1BJQ0xJU1RfUElDQkVEOiAn6K6+5a6a5Zu+5bqKJyxcbiAgUElDQkVEX1BJQ0xJU1RfQ09ORklHTkFNRTogJ+iuvuWumumFjee9ruWQjScsXG4gIFBJQ0JFRF9QSUNMSVNUX0tFWTogJ+iuvuWumumJtOadg0tleScsXG5cbiAgLy8gTHNreSBQcm9cbiAgUElDQkVEX0xTS1lfUExJU1Q6ICflhbDnqbrlm77luoonLFxuICBQSUNCRURfTFNLWV9WRVJTSU9OOiAn6K6+5a6a54mI5pysJyxcbiAgUElDQkVEX0xTS1lfTUVTU0FHRV9WRVJTSU9OOiAn5L6L5aaCVjEnLFxuICBQSUNCRURfTFNLWV9IT1NUOiAn6K6+5a6a5Li75py6JyxcbiAgUElDQkVEX0xTS1lfTUVTU0FHRV9IT1NUOiAn5L6L5aaC77yaaHR0cHM6Ly9leGFtcGxlLmNvbScsXG4gIFBJQ0JFRF9MU0tZX1RPS0VOOiAn6K6+5a6aVG9rZW4nLFxuICBQSUNCRURfTFNLWV9NRVNTQUdFX1RPS0VOOiAn5L6L5aaC77yaMTIzNDU2Nzg5MCcsXG4gIFBJQ0JFRF9MU0tZX1NUUkFURUdZX0lEOiAn6K6+5a6a562W55WlSUQnLFxuICBQSUNCRURfTFNLWV9NRVNTQUdFX1NUUkFURUdZX0lEOiAn5L6L5aaC77yaMScsXG4gIFBJQ0JFRF9MU0tZX0FMQlVNX0lEOiAn6K6+5a6a55u45YaMSUQnLFxuICBQSUNCRURfTFNLWV9NRVNTQUdFX0FMQlVNX0lEOiAn6YCJ5aGr77yMVjLniYjmnKzpmZDlrponLFxuICBQSUNCRURfTFNLWV9QRVJNSVNTSU9OOiAn6K6+5a6a5p2D6ZmQJyxcbiAgUElDQkVEX0xTS1lfTUVTU0FHRV9QRVJNSVNTSU9OOiAn5L6L5aaC77yacHVibGljJyxcblxuICAvLyBBd3NTM1BsaXN0XG4gIFBJQ0JFRF9BV1NTM1BMSVNUOiAnQVdTIFMzJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfQUNDRVNTS0VZSUQ6ICforr7lrppBY2Nlc3NLZXlJZCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1NFQ1JFVF9BQ0NFU1NLRVk6ICforr7lrppTZWNyZXRBY2Nlc3NLZXknLFxuICBQSUNCRURfQVdTUzNQTElTVF9CVUNLRVQ6ICforr7lrppCdWNrZXQnLFxuICBQSUNCRURfQVdTUzNQTElTVF9SRUdJT046ICforr7lrppSZWdpb24nLFxuICBQSUNCRURfQVdTUzNQTElTVF9VUExPQURQQVRIOiAn6K6+5a6a5LiK5Lyg6Lev5b6EJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfRU5EUE9JTlQ6ICforr7lrproh6rlrprkuYnoioLngrknLFxuICBQSUNCRURfQVdTUzNQTElTVF9QUk9YWTogJ+iuvuWumuS7o+eQhicsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1VSTFBSRUZJWDogJ+iuvuWumuiHquWumuS5ieWfn+WQjScsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1BBVEhTVFlMRUFDQ0VTUzogJ+WQr+eUqHMzRm9yY2VQYXRoU3R5bGUnLFxuICBQSUNCRURfQVdTUzNQTElTVF9SRUpFQ1RVTkFVVEhPUklaRUQ6ICfmi5Lnu53ml6DmlYhUTFPor4Hkuabov57mjqUnLFxuICBQSUNCRURfQVdTUzNQTElTVF9BQ0w6ICforr7lrprkuIrkvKDotYTmupDnmoTorr/pl67nrZbnlaUnLFxuICBQSUNCRURfQVdTUzNQTElTVF9ESVNBQkxFQlVDS0VUUFJFRklYVE9VUkw6ICflvIDlkK8gYHBhdGhTdHlsZUFjY2Vzc2Ag5pe277yM5piv5ZCm6KaB56aB55So5pyA57uI55Sf5oiQVVJM5Lit5re75YqgIGJ1Y2tldCDliY3nvIAnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0FDQ0VTU0tFWUlEOiAn5L6L5aaC77yaQUtJQXh4eHh4eHh4eHh4eHgnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1NFQ1JFVF9BQ0NFU1NLRVk6ICfkvovlpoLvvJp4eHh4eHh4eHh4JyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9CVUNLRVQ6ICfkvovlpoLvvJp0ZXN0JyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9SRUdJT046ICfkvovlpoLvvJp1cy1lYXN0LTEnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1VQTE9BRFBBVEg6ICfkvovlpoLvvJp0ZXN0L3tmdWxsTmFtZX0nLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0VORFBPSU5UOiAn5L6L5aaC77yaaHR0cHM6Ly9zMy51cy1lYXN0LTEuYW1hem9uYXdzLmNvbScsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUFJPWFk6ICfkvovlpoLvvJpodHRwOi8vMTI3LjAuMC4xOjEwODAnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1VSTFBSRUZJWDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1BBVEhTVFlMRUFDQ0VTUzogJ+mcgOimgeaXtuWQr+eUqCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUkVKRUNUVU5BVVRIT1JJWkVEOiAn6ZyA6KaB5pe25ZCv55SoJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9BQ0w6ICfkvovlpoLvvJpwdWJsaWMtcmVhZCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfRElTQUJMRUJVQ0tFVFBSRUZJWFRPVVJMOiAn6ZyA6KaB5pe25ZCv55SoJyxcblxuICBCVUlMRElOX1dBVEVSTUFSSzogJ+awtOWNsOiuvue9ricsXG4gIEJVSUxESU5fV0FURVJNQVJLX0lTQUREV0FURVJNQVJLOiAn5piv5ZCm5re75Yqg5rC05Y2wJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9JU0FERFdBVEVSTUFSSzogJ+mcgOimgea3u+WKoOawtOWNsOaXtuWQr+eUqCcsXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RZUEU6ICforr7lrprmsLTljbDnsbvlnosnLFxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1RZUEU6ICfor7fpgInmi6nmsLTljbDnsbvlnosnLFxuICBCVUlMRElOX1dBVEVSTUFSS19JU0ZVTExTQ1JFRU5XQVRFUk1BUks6ICfmmK/lkKblhajlsY/msLTljbAnLFxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX0lTRlVMTFNDUkVFTldBVEVSTUFSSzogJ+mcgOimgeWFqOWxj+awtOWNsOaXtuWQr+eUqCcsXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0RFR1JFRTogJ+iuvuWumuawtOWNsOinkuW6picsXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLREVHUkVFOiAn6K+36L6T5YWl5pWw5a2XJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVDogJ+iuvuWumuawtOWNsOaWh+WtlycsXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLVEVYVDogJ+ivt+i+k+WFpeawtOWNsOaWh+WtlycsXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFRGT05UUEFUSDogJ+iuvuWumuawtOWNsOWtl+S9k+aWh+S7tui3r+W+hCcsXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVFBBVEg6ICfor7fovpPlhaXmsLTljbDlrZfkvZPmlofku7bot6/lvoQnLFxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktGT05UUkFUSU86ICforr7lrprmsLTljbDnm7jlr7nkuo7lm77niYfnmoTmr5TkvosnLFxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRSQVRJTzogJ+ivt+i+k+WFpTAtMeeahOWwj+aVsCcsXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRDT0xPUjogJ+iuvuWumuawtOWNsOWtl+S9k+minOiJsicsXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVENPTE9SOiAn6K+36L6T5YWlcmdi6aKc6Imy5YC8JyxcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLSU1BR0VQQVRIOiAn6K6+5a6a5rC05Y2w5Zu+54mH6Lev5b6EJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktJTUFHRVBBVEg6ICfor7fovpPlhaXmsLTljbDlm77niYfot6/lvoQnLFxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktQT1NJVElPTjogJ+iuvuWumuawtOWNsOS9jee9ricsXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLUE9TSVRJT046ICfor7fpgInmi6nmsLTljbDkvY3nva4nLFxuXG4gIEJVSUxESU5fUkVOQU1FOiAn6YeN5ZG95ZCN6K6+572uJyxcbiAgQlVJTERJTl9SRU5BTUVfRk9STUFUOiAn6K6+5a6a6YeN5ZG95ZCN5qC85byPJyxcbiAgQlVJTERJTl9SRU5BTUVfRU5BQkxFOiAn5piv5ZCm5ZCv55So6YeN5ZG95ZCNJyxcblxuICBCVUlMRElOX0NPTVBSRVNTOiAn5Zu+54mH5aSE55CGJyxcbiAgQlVJTERJTl9DT01QUkVTU19RVUFMSVRZOiAn6K6+5a6a5Zu+54mH6LSo6YePJyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1FVQUxJVFk6ICfor7fovpPlhaUwLTEwMOeahOaVtOaVsCcsXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNDT05WRVJUOiAn5piv5ZCm6L+b6KGM5qC85byP6L2s5o2iJyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTQ09OVkVSVDogJ+mcgOimgei9rOaNouaXtuWQr+eUqCcsXG4gIEJVSUxESU5fQ09NUFJFU1NfQ09OVkVSVEZPUk1BVDogJ+iuvuWumui9rOaNouagvOW8jycsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9DT05WRVJURk9STUFUOiAn6K+36YCJ5oup6L2s5o2i5qC85byPJyxcbiAgQlVJTERJTl9DT01QUkVTU19JU1JFU0laRTogJ+aYr+WQpui/m+ihjOWbvueJh+e8qeaUvicsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFU0laRTogJ+mcgOimgee8qeaUvuaXtuWQr+eUqCcsXG4gIEJVSUxESU5fQ09NUFJFU1NfUkVTSVpFV0lEVEg6ICforr7lrprnvKnmlL7lrr3luqYnLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFV0lEVEg6ICfor7fovpPlhaXmlbDlrZcnLFxuICBCVUlMRElOX0NPTVBSRVNTX1JFU0laRUhFSUdIVDogJ+iuvuWumue8qeaUvumrmOW6picsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVIRUlHSFQ6ICfor7fovpPlhaXmlbDlrZcnLFxuICBCVUlMRElOX0NPTVBSRVNTX0lTUkVTSVpFQllQRVJDRU5UOiAn5piv5ZCm5oyJ55m+5YiG5q+U6L+b6KGM57yp5pS+JyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVTSVpFQllQRVJDRU5UOiAn6ZyA6KaB5oyJ55m+5YiG5q+U57yp5pS+5pe25ZCv55SoJyxcbiAgQlVJTERJTl9DT01QUkVTU19JU0ZMSVA6ICfmmK/lkKblnoLnm7Tnv7vovazlm77niYcnLFxuICBCVUlMRElOX0NPTVBSRVNTX0lTRkxPUDogJ+aYr+WQpuawtOW5s+e/u+i9rOWbvueJhycsXG4gIEJVSUxESU5fQ09NUFJFU1NfUkVTSVpFUEVSQ0VOVDogJ+iuvuWumue8qeaUvueZvuWIhuavlCcsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9SRVNJWkVQRVJDRU5UOiAn6K+36L6T5YWl5pWw5a2XJyxcbiAgQlVJTERJTl9DT01QUkVTU19TS0lQUkVTSVpFT0ZTTUFMTElNRzogJ+aYr+WQpui3s+i/h+Wwj+Wbvue8qeaUvicsXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNST1RBVEU6ICfmmK/lkKbov5vooYzlm77niYfml4vovawnLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNST1RBVEU6ICfpnIDopoHml4vovazml7blkK/nlKgnLFxuICBCVUlMRElOX0NPTVBSRVNTX1JPVEFURURFR1JFRTogJ+iuvuWumuaXi+i9rOinkuW6picsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9ST1RBVEVERUdSRUU6ICfor7fovpPlhaXmlbDlrZfvvIzlj6/kuLrotJ/mlbAnLFxuICBCVUlMRElOX0NPTVBSRVNTX0lTUkVNT1ZFRVhJRjogJ+aYr+WQpuenu+mZpEVYSUbkv6Hmga8nLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRU1PVkVFWElGOiAn6ZyA6KaB56e76ZmkRVhJRuS/oeaBr+aXtuWQr+eUqCcsXG5cbiAgLy8gUGx1Z2luIEhhbmRsZXJcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfU1VDQ0VTUzogJ+aPkuS7tuWuieijheaIkOWKnycsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRDogJ+aPkuS7tuWuieijheWksei0pScsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRF9SRUFTT046ICfmj5Lku7blronoo4XlpLHotKXvvIzlpLHotKXnoIHkuLoke2NvZGV977yM6ZSZ6K+v5pel5b+X5Li6IFxcbiAke2RhdGF9JyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfRkFJTEVEX1BBVEg6ICfmj5Lku7blronoo4XlpLHotKXvvIzor7fovpPlhaXlkIjms5Xmj5Lku7blkI3miJblkIjms5Xlronoo4Xot6/lvoQnLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX1NVQ0NFU1M6ICfmj5Lku7bljbjovb3miJDlip8nLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRDogJ+aPkuS7tuWNuOi9veWksei0pScsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1JFQVNPTjogJ+aPkuS7tuWNuOi9veWksei0pe+8jOWksei0peeggeS4uiR7Y29kZX3vvIzplJnor6/ml6Xlv5fkuLogXFxuICR7ZGF0YX0nLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9WQUxJRDogJ+aPkuS7tuWNuOi9veWksei0pe+8jOivt+i+k+WFpeWQiOazleaPkuS7tuWQjScsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfU1VDQ0VTUzogJ+aPkuS7tuabtOaWsOaIkOWKnycsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEOiAn5o+S5Lu25pu05paw5aSx6LSlJyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfUkVBU09OOiAn5o+S5Lu25pu05paw5aSx6LSl77yM5aSx6LSl56CB5Li6JHtjb2Rlfe+8jOmUmeivr+aXpeW/l+S4uiBcXG4gJHtkYXRhfScsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1ZBTElEOiAn5o+S5Lu25pu05paw5aSx6LSl77yM6K+36L6T5YWl5ZCI5rOV5o+S5Lu25ZCNJ1xufVxuXG5leHBvcnQgdHlwZSBJTG9jYWxlc0tleSA9IGtleW9mIHR5cGVvZiBaSF9DTlxuZXhwb3J0IHR5cGUgSUxvY2FsZXMgPSB0eXBlb2YgWkhfQ05cbiIsImltcG9ydCB7IFpIX0NOLCBJTG9jYWxlc0tleSwgSUxvY2FsZXMgfSBmcm9tICcuL3poLUNOJ1xuaW1wb3J0IHsgbWVyZ2UgfSBmcm9tICdsb2Rhc2gnXG5pbXBvcnQgeyBJUGljR28sIElTdHJpbmdLZXlNYXAsIElJMThuTWFuYWdlciB9IGZyb20gJy4uL3R5cGVzJ1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcbmltcG9ydCBmcywgeyBwYXRoRXhpc3RzU3luYywgZW5zdXJlRGlyU3luYyB9IGZyb20gJ2ZzLWV4dHJhJ1xuaW1wb3J0IHlhbWwgZnJvbSAnanMteWFtbCdcblxuaW1wb3J0IHsgT2JqZWN0QWRhcHRlciwgSTE4biB9IGZyb20gJ0BwaWNnby9pMThuJ1xuXG5pbXBvcnQgeyBJTG9jYWxlIH0gZnJvbSAnQHBpY2dvL2kxOG4vZGlzdC90eXBlcydcbmltcG9ydCB7IEVOIH0gZnJvbSAnLi9lbidcbmltcG9ydCB7IFpIX1RXIH0gZnJvbSAnLi96aC1UVydcblxuY29uc3QgbGFuZ3VhZ2VMaXN0OiBJU3RyaW5nS2V5TWFwPElTdHJpbmdLZXlNYXA8c3RyaW5nPj4gPSB7XG4gICd6aC1DTic6IFpIX0NOLFxuICAnemgtVFcnOiBaSF9UVyxcbiAgZW46IEVOXG59XG5cbmNsYXNzIEkxOG5NYW5hZ2VyIGltcGxlbWVudHMgSUkxOG5NYW5hZ2VyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBpMThuOiBJMThuXG4gIHByaXZhdGUgcmVhZG9ubHkgb2JqZWN0QWRhcHRlcjogT2JqZWN0QWRhcHRlclxuICBwcml2YXRlIHJlYWRvbmx5IGN0eDogSVBpY0dvXG4gIGNvbnN0cnVjdG9yKGN0eDogSVBpY0dvKSB7XG4gICAgdGhpcy5jdHggPSBjdHhcbiAgICB0aGlzLm9iamVjdEFkYXB0ZXIgPSBuZXcgT2JqZWN0QWRhcHRlcihsYW5ndWFnZUxpc3QpXG4gICAgbGV0IGxhbmd1YWdlID0gdGhpcy5jdHguZ2V0Q29uZmlnPHN0cmluZz4oJ3NldHRpbmdzLmxhbmd1YWdlJykgfHwgJ3poLUNOJ1xuICAgIGlmICghbGFuZ3VhZ2VMaXN0W2xhbmd1YWdlXSkge1xuICAgICAgbGFuZ3VhZ2UgPSAnemgtQ04nIC8vIHVzZSBkZWZhdWx0XG4gICAgfVxuICAgIHRoaXMuaTE4biA9IG5ldyBJMThuKHtcbiAgICAgIGFkYXB0ZXI6IHRoaXMub2JqZWN0QWRhcHRlcixcbiAgICAgIGRlZmF1bHRMYW5ndWFnZTogbGFuZ3VhZ2VcbiAgICB9KVxuICAgIHRoaXMubG9hZE91dHRlckkxOG4oKVxuICB9XG5cbiAgcHJpdmF0ZSBsb2FkT3V0dGVySTE4bigpOiB2b2lkIHtcbiAgICBjb25zdCBpMThuRm9sZGVyID0gdGhpcy5nZXRPdXR0ZXJJMThuRm9sZGVyKClcbiAgICBjb25zdCBmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKGkxOG5Gb2xkZXIsIHtcbiAgICAgIHdpdGhGaWxlVHlwZXM6IHRydWVcbiAgICB9KVxuICAgIGZpbGVzLmZvckVhY2goZmlsZSA9PiB7XG4gICAgICBpZiAoZmlsZS5pc0ZpbGUoKSAmJiBmaWxlLm5hbWUuZW5kc1dpdGgoJy55bWwnKSkge1xuICAgICAgICBjb25zdCBpMThuRmlsZVBhdGggPSBwYXRoLmpvaW4oaTE4bkZvbGRlciwgZmlsZS5uYW1lKVxuICAgICAgICBjb25zdCBpMThuRmlsZSA9IGZzLnJlYWRGaWxlU3luYyhpMThuRmlsZVBhdGgsICd1dGY4JylcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBpMThuRmlsZU9iaiA9IHlhbWwubG9hZChpMThuRmlsZSkgYXMgSUxvY2FsZXNcbiAgICAgICAgICBsYW5ndWFnZUxpc3RbZmlsZS5uYW1lLnJlcGxhY2UoL1xcLnltbCQvLCAnJyldID0gaTE4bkZpbGVPYmpcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBwcml2YXRlIGdldE91dHRlckkxOG5Gb2xkZXIoKTogc3RyaW5nIHtcbiAgICBjb25zdCBpMThuRm9sZGVyID0gcGF0aC5qb2luKHRoaXMuY3R4LmJhc2VEaXIsICdpMThuLWNsaScpXG4gICAgaWYgKCFwYXRoRXhpc3RzU3luYyhpMThuRm9sZGVyKSkge1xuICAgICAgZW5zdXJlRGlyU3luYyhpMThuRm9sZGVyKVxuICAgIH1cbiAgICByZXR1cm4gaTE4bkZvbGRlclxuICB9XG5cbiAgdHJhbnNsYXRlPFQgZXh0ZW5kcyBzdHJpbmc+KGtleTogSUxvY2FsZXNLZXkgfCBULCBhcmdzPzogSVN0cmluZ0tleU1hcDxzdHJpbmc+KTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pMThuLnRyYW5zbGF0ZShrZXksIGFyZ3MpIHx8IGtleVxuICB9XG5cbiAgc2V0TGFuZ3VhZ2UobGFuZ3VhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuaTE4bi5zZXRMYW5ndWFnZShsYW5ndWFnZSlcbiAgICB0aGlzLmN0eC5zYXZlQ29uZmlnKHtcbiAgICAgICdzZXR0aW5ncy5sYW5ndWFnZSc6IGxhbmd1YWdlXG4gICAgfSlcbiAgfVxuXG4gIGFkZExvY2FsZShsYW5ndWFnZTogc3RyaW5nLCBsb2NhbGVzOiBJTG9jYWxlKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgb3JpZ2luTG9jYWxlcyA9IHRoaXMub2JqZWN0QWRhcHRlci5nZXRMb2NhbGUobGFuZ3VhZ2UpXG4gICAgaWYgKCFvcmlnaW5Mb2NhbGVzKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgY29uc3QgbmV3TG9jYWxlcyA9IG1lcmdlKG9yaWdpbkxvY2FsZXMsIGxvY2FsZXMpXG4gICAgdGhpcy5vYmplY3RBZGFwdGVyLnNldExvY2FsZShsYW5ndWFnZSwgbmV3TG9jYWxlcylcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgYWRkTGFuZ3VhZ2UobGFuZ3VhZ2U6IHN0cmluZywgbG9jYWxlczogSUxvY2FsZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG9yaWdpbkxvY2FsZXMgPSB0aGlzLm9iamVjdEFkYXB0ZXIuZ2V0TG9jYWxlKGxhbmd1YWdlKVxuICAgIGlmIChvcmlnaW5Mb2NhbGVzKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgdGhpcy5vYmplY3RBZGFwdGVyLnNldExvY2FsZShsYW5ndWFnZSwgbG9jYWxlcylcbiAgICBsYW5ndWFnZUxpc3RbbGFuZ3VhZ2VdID0gbG9jYWxlc1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBnZXRMYW5ndWFnZUxpc3QoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhsYW5ndWFnZUxpc3QpXG4gIH1cbn1cblxuZXhwb3J0IHsgSTE4bk1hbmFnZXIgfVxuIiwiaW1wb3J0IHsgSUxvY2FsZXMgfSBmcm9tICcuL3poLUNOJ1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby10ZW1wbGF0ZS1jdXJseS1pbi1zdHJpbmcgKi9cbmV4cG9ydCBjb25zdCBaSF9UVzogSUxvY2FsZXMgPSB7XG4gIFVQTE9BRF9GQUlMRUQ6ICfkuIrlgrPlpLHmlZcnLFxuICBDSEVDS19TRVRUSU5HUzogJ+iri+aqouafpeS9oOeahOioreWumuaYr+WQpuato+eiuicsXG4gIENIRUNLX1NFVFRJTkdTX0FORF9ORVRXT1JLOiAn6KuL5qqi5p+l5L2g55qE6Kit5a6a5Y+K57ay6LevJyxcbiAgVVBMT0FEX0ZBSUxFRF9SRUFTT046ICfpjK/oqqTnorzvvJoke2NvZGV977yM6KuL5omT6ZaL54CP6Ka95Zmo6LK85LiK5Zyw5Z2A5p+l55yL55u46Zec5Y6f5ZugJyxcbiAgU0VSVkVSX0VSUk9SOiAn5Ly65pyN5Zmo5Ye66Yyv77yM6KuL6YeN6KmmJyxcbiAgQVVUSF9GQUlMRUQ6ICfoqo3orYnlpLHmlZcnLFxuXG4gIC8vIHNtbXNcbiAgUElDQkVEX1NNTVM6ICdTTS5NUycsXG4gIFBJQ0JFRF9TTU1TX1RPS0VOOiAn6Kit5a6aVG9rZW4nLFxuICBQSUNCRURfU01NU19NRVNTQUdFX1RPS0VOOiAn6KuL6Ly45YWlVG9rZW4nLFxuICBQSUNCRURfU01NU19CQUNLVVBfRE9NQUlOOiAn5YKZ55So5LiK5YKz57ay5Z2AJyxcbiAgUElDQkVEX1NNTVNfTUVTU0FHRV9CQUNLVVBfRE9NQUlOOiAn5L6L5aaCIHNtbXMuYXBwJyxcblxuICAvLyBsb2NhbFxuICBQSUNCRURfTE9DQUw6ICfmnKzlnLAnLFxuICBQSUNCRURfTE9DQUxfUEFUSDogJ+ioreWumuWEsuWtmOi3r+W+kScsXG4gIFBJQ0JFRF9MT0NBTF9NRVNTQUdFX1BBVEg6ICfkvovlpoIgL3Vzci9sb2NhbC9pbWFnZXMvJyxcbiAgUElDQkVEX0xPQ0FMX0NVU1RPTVVSTDogJ+ioreWumuiHquiogue2suWdgCcsXG4gIFBJQ0JFRF9MT0NBTF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+WmgiBodHRwczovL3Rlc3QuY29tJyxcbiAgUElDQkVEX0xPQ0FMX1dFQlBBVEg6ICfoqK3lrprntrLlnYDot6/lvpEnLFxuICBQSUNCRURfTE9DQUxfTUVTU0FHRV9XRUJQQVRIOiAn55So5LqO57ay6aCB6aGv56S655qE6Lev5b6RJyxcblxuICAvLyBhbGlzdFxuICBQSUNCRURfQUxJU1RfUExJU1Q6ICdBTGlzdCcsXG4gIFBJQ0JFRF9BTElTVF9VUkw6ICfoqK3lrppVUkwnLFxuICBQSUNCRURfQUxJU1RfTUVTU0FHRV9VUkw6ICfkvovlpoLvvJpodHRwczovL2FsaXN0LmV4YW1wbGUuY29tJyxcbiAgUElDQkVEX0FMSVNUX1RPS0VOOiAn6Kit5a6aVG9rZW4nLFxuICBQSUNCRURfQUxJU1RfTUVTU0FHRV9UT0tFTjogJ+iri+i8uOWFpVRva2VuKOiIh+eUqOaItuWQjS3lr4bnorzkuozpgbjkuIApJyxcbiAgUElDQkVEX0FMSVNUX1VTRVJOQU1FOiAn6Kit5a6a55So5oi25ZCNJyxcbiAgUElDQkVEX0FMSVNUX01FU1NBR0VfVVNFUk5BTUU6ICfoq4vovLjlhaXnlKjmiLblkI0o6IiHVG9rZW7kuozpgbjkuIApJyxcbiAgUElDQkVEX0FMSVNUX1BBU1NXT1JEOiAn6Kit5a6a5a+G56K8JyxcbiAgUElDQkVEX0FMSVNUX01FU1NBR0VfUEFTU1dPUkQ6ICfoq4vovLjlhaXlr4bnorwnLFxuICBQSUNCRURfQUxJU1RfVVBMT0FEX1BBVEg6ICfoqK3lrprkuIrlgrPot6/lvpEnLFxuICBQSUNCRURfQUxJU1RfTUVTU0FHRV9VUExPQURfUEFUSDogJ+S+i+Wmgu+8mi90ZXN0JyxcbiAgUElDQkVEX0FMSVNUX1dFQl9QQVRIOiAn6Kit5a6a57ay5Z2A6Lev5b6RJyxcbiAgUElDQkVEX0FMSVNUX01FU1NBR0VfV0VCX1BBVEg6ICfnlKjkuo7ntrLpoIHpoa/npLrnmoTot6/lvpEnLFxuICBQSUNCRURfQUxJU1RfQ1VTVE9NVVJMOiAn6Kit5a6a6Ieq6KiC57ay5Z2AJyxcbiAgUElDQkVEX0FMSVNUX01FU1NBR0VfQ1VTVE9NVVJMOiAn5L6L5aaC77yaaHR0cHM6Ly90ZXN0LmNvbScsXG5cbiAgLy8gQWxpLWNsb3VkXG4gIFBJQ0JFRF9BTElDTE9VRDogJ+mYv+mHjOS6kU9TUycsXG4gIFBJQ0JFRF9BTElDTE9VRF9BQ0NFU1NLRVlJRDogJ+ioreWummFjY2Vzc0tleUlkJyxcbiAgUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWVNFQ1JFVDogJ+ioreWummFjY2Vzc0tleVNlY3JldCcsXG4gIFBJQ0JFRF9BTElDTE9VRF9CVUNLRVQ6ICfoqK3lrppCdWNrZXQnLFxuICBQSUNCRURfQUxJQ0xPVURfQVJFQTogJ+ioreWumuWEsuWtmOWNgOWfnycsXG4gIFBJQ0JFRF9BTElDTE9VRF9QQVRIOiAn6Kit5a6a5YSy5a2Y6Lev5b6RJyxcbiAgUElDQkVEX0FMSUNMT1VEX0NVU1RPTVVSTDogJ+ioreWumuiHquiogue2suWdgCcsXG4gIFBJQ0JFRF9BTElDTE9VRF9PUFRJT05TOiAn6Kit5a6a57ay5Z2A5b6M57a0JyxcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfQVJFQTogJ+S+i+Wmgu+8mm9zcy1jbi1iZWlqaW5nJyxcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfT1BUSU9OUzogJ+S+i+Wmgu+8mj94LW9zcy1wcm9jZXNzPXh4eCcsXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxuXG4gIC8vIFRlbmNlbnQtY2xvdWRcbiAgUElDQkVEX1RFTkNFTlRDTE9VRDogJ+mosOioiuS6kUNPUycsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfVkVSU0lPTjogJ0NPU+eJiOacrCcsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUSUQ6ICfoqK3lrppTZWNyZXRJZCcsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUS0VZOiAn6Kit5a6aU2VjcmV0S2V5JyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9BUFBJRDogJ+ioreWumkFwcElkJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9CVUNLRVQ6ICfoqK3lrppCdWNrZXQnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0FSRUE6ICfoqK3lrprlhLLlrZjljYDln58nLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0VORFBPSU5UOiAn6Kit5a6a5o6l5YWl6bueJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9QQVRIOiAn6Kit5a6a5YSy5a2Y6Lev5b6RJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9PUFRJT05TOiAn6Kit5a6a57ay5Z2A5b6M57a0JyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9DVVNUT01VUkw6ICfoqK3lrproh6roqILntrLlnYAnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQVBQSUQ6ICfkvovlpoLvvJoxMjM0NTY3ODkwJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FSRUE6ICfkvovlpoLvvJphcC1iZWlqaW5nJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX1BBVEg6ICfkvovlpoLvvJp0ZXN0LycsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoLvvJpodHRwczovL3Rlc3QuY29tJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX09QVElPTlM6ICfkvovlpoLvvJo/aW1hZ2VNb2dyMicsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9FTkRQT0lOVDogJ+S+i+Wmgu+8mmNvcy1pbnRlcm5hbC5hY2NlbGVyYXRlLnRlbmNlbnRjb3MuY24nLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU06ICfmpbXmmbrlo5PnuK4nLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fQ0FOQ0VMOiAn6Zec6ZaJJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9TTElNX0NPTkZJUk06ICfplovllZMnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fVElQOlxuICAgICflnJbniYfmpbXmmbrlo5PnuK7vvIzoqbPmg4Xoq4vlj4PogINb5paH5qqU6Kqq5piOXShodHRwczovL2Nsb3VkLnRlbmNlbnQuY29tL2RvY3VtZW50L3Byb2R1Y3QvNDM2LzQ5MjU5KScsXG5cbiAgLy8gR2l0SHViXG4gIFBJQ0JFRF9HSVRIVUI6ICdHaXRIdWInLFxuICBQSUNCRURfR0lUSFVCX1RPS0VOOiAn6Kit5a6aVG9rZW4nLFxuICBQSUNCRURfR0lUSFVCX1JFUE86ICfoqK3lrprlgInluqvlkI3nqLEnLFxuICBQSUNCRURfR0lUSFVCX1BBVEg6ICfoqK3lrprlhLLlrZjot6/lvpEnLFxuICBQSUNCRURfR0lUSFVCX0JSQU5DSDogJ+ioreWumuWIhuaUr+WQjeeosScsXG4gIFBJQ0JFRF9HSVRIVUJfQ1VTVE9NVVJMOiAn6Kit5a6a6Ieq6KiC57ay5Z2AJyxcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX1JFUE86ICfmoLzlvI/vvJp1c2VybmFtZS9yZXBvJyxcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX0JSQU5DSDogJ+S+i+Wmgu+8mm1haW4nLFxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxuXG4gIC8vIHFpbml1XG4gIFBJQ0JFRF9RSU5JVTogJ+S4g+eJm+S6kScsXG4gIFBJQ0JFRF9RSU5JVV9BQ0NFU1NLRVk6ICfoqK3lrppBY2Nlc3NLZXknLFxuICBQSUNCRURfUUlOSVVfU0VDUkVUS0VZOiAn6Kit5a6aU2VjcmV0S2V5JyxcbiAgUElDQkVEX1FJTklVX0JVQ0tFVDogJ+ioreWumkJ1Y2tldCcsXG4gIFBJQ0JFRF9RSU5JVV9QQVRIOiAn6Kit5a6a5YSy5a2Y6Lev5b6RJyxcbiAgUElDQkVEX1FJTklVX1VSTDogJ+ioreWumuioquWVj+e2suWdgCcsXG4gIFBJQ0JFRF9RSU5JVV9PUFRJT05TOiAn6Kit5a6a57ay5Z2A5b6M57a0JyxcbiAgUElDQkVEX1FJTklVX0FSRUE6ICfoqK3lrprlhLLlrZjljYDln58nLFxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9BUkVBOiAn5L6L5aaC77yaejAnLFxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9PUFRJT05TOiAn5L6L5aaC77yaP2ltYWdlc2xpbScsXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX1VSTDogJ+S+i+Wmgu+8mmh0dHBzOi8veHh4Lnl5eS5nbGIuY2xvdWRkbi5jb20nLFxuICBQSUNCRURfVEVMRUdSQVBIOiAnVGVsZWdyYXBoJyxcbiAgLy8gaW1ndXJcbiAgUElDQkVEX0lNR1VSOiAnSW1ndXInLFxuICBQSUNCRURfSU1HVVJfQ0xJRU5USUQ6ICfoqK3lrppDbGllbnRJZCcsXG4gIFBJQ0JFRF9JTUdVUl9VU0VSTkFNRTogJ+ioreWumueUqOaItuWQjScsXG4gIFBJQ0JFRF9JTUdVUl9BQ0NFU1NfVE9LRU46ICfoqK3lrpphY2Nlc3NUb2tlbicsXG4gIFBJQ0JFRF9JTUdVUl9BTEJVTTogJ+ioreWumuebuOewv+WQjScsXG4gIFBJQ0JFRF9JTUdVUl9QUk9YWTogJ+ioreWumlBST1hZJyxcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfQ0xJRU5USUQ6ICfljL/lkI3kuIrlgrPmmYLloavlr6snLFxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9VU0VSTkFNRTogJ+mcgOimgeS4iuWCs+WIsOizrOaItuaZguWhq+WvqycsXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX0FDQ0VTU19UT0tFTjogJ+mcgOimgeS4iuWCs+WIsOizrOaItuaZguWhq+WvqycsXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX0FMQlVNOiAn5L6L5aaC77yadGVzdCcsXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX1BST1hZOiAn5L6L5aaC77yaaHR0cDovLzEyNy4wLjAuMToxMDgwJyxcblxuICAvLyB1cHl1blxuICBQSUNCRURfVVBZVU46ICflj4jmi43kupEnLFxuICBQSUNCRURfVVBZVU5fQlVDS0VUOiAn6Kit5a6aQnVja2V0JyxcbiAgUElDQkVEX1VQWVVOX0VORFBPSU5UOiAn6Kit5a6a5o6l5YWl6bueJyxcbiAgUElDQkVEX1VQWVVOX09QRVJBVE9SOiAn6Kit5a6a5pON5L2c5ZOhJyxcbiAgUElDQkVEX1VQWVVOX1BBU1NXT1JEOiAn6Kit5a6a5pON5L2c5ZOh5a+G56K8JyxcbiAgUElDQkVEX1VQWVVOX1BBVEg6ICfoqK3lrprlhLLlrZjot6/lvpEnLFxuICBQSUNCRURfVVBZVU5fVVJMOiAn6Kit5a6a5Yqg6YCf57ay5Z2AJyxcbiAgUElDQkVEX1VQWVVOX09QVElPTlM6ICfoqK3lrprntrLlnYDlvozntrQnLFxuICBQSUNCRURfVVBZVU5fQU5USV9MRUVDSF9UT0tFTjogJ+ioreWumumYsuebnOmPiFRva2VuJyxcbiAgUElDQkVEX1VQWVVOX0VYUElSRV9USU1FOiAn6Kit5a6a6YGO5pyf5pmC6ZaTKOenkiknLFxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9PUEVSQVRPUjogJ+S+i+Wmgu+8mm1lJyxcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfUEFTU1dPUkQ6ICfovLjlhaXmk43kvZzlk6Hlr4bnorwnLFxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9VUkw6ICfkvovlpoLvvJpodHRwOi8veHh4LnRlc3QudXBjZG4ubmV0JyxcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfT1BUSU9OUzogJ+S+i+Wmgu+8miFpbWdzbGltJyxcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfRU5EUE9JTlQ6ICfkvovlpoLvvJpodHRwczovL3YwLmFwaS51cHl1bi5jb20nLFxuXG4gIC8vIHdlYmRhdlxuICBQSUNCRURfV0VCREFWUExJU1Q6ICdXZWJEQVYnLFxuICBQSUNCRURfV0VCREFWUExJU1RfSE9TVDogJ+ioreWumkFQSeS4u+apnycsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9TU0xFTkFCTEVEOiAn6ZyA6KaBSFRUUFPmmYLllZ/nlKgnLFxuICBQSUNCRURfV0VCREFWUExJU1RfVVNFUk5BTUU6ICfoqK3lrprnlKjmiLblkI0nLFxuICBQSUNCRURfV0VCREFWUExJU1RfUEFTU1dPUkQ6ICfoqK3lrprlr4bnorwnLFxuICBQSUNCRURfV0VCREFWUExJU1RfUEFUSDogJ+ioreWumuWEsuWtmOi3r+W+kScsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9DVVNUT01VUkw6ICfoqK3lrproh6roqILntrLlnYAnLFxuICBQSUNCRURfV0VCREFWUExJU1RfQVVUSFRZUEU6ICfoqK3lrproqo3orYnmlrnlvI8nLFxuICBQSUNCRURfV0VCREFWUExJU1RfT1BUSU9OUzogJ+ioreWumue2suWdgOW+jOe2tCcsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9XRUJTSVRFX1BBVEg6ICfoqK3lrprntrLnq5not6/lvpEnLFxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9IT1NUOiAn5L6L5aaC77yaaHR0cHM6Ly9leGFtcGxlLmNvbS93ZWJkYXYnLFxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9TU0xFTkFCTEVEOiAn6ZyA6KaBSFRUUFPmmYLllZ/nlKgnLFxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9VU0VSTkFNRTogJ+S+i+Wmgu+8mm1lJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFTU1dPUkQ6ICfovLjlhaXnlKjmiLblr4bnorwnLFxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9QQVRIOiAn5L6L5aaC77yadGVzdC8nLFxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9XRUJTSVRFX1BBVEg6ICfmi7zmjqXntrLlnYDmmYLkvb/nlKgnLFxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9DVVNUT01VUkw6ICfkvovlpoLvvJpodHRwczovL3Rlc3QuY29tJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfT1BUSU9OUzogJ+S+i+Wmgu+8mj9rZXk9dmFsdWUnLFxuXG4gIC8vIHNmdHBwbGlzdFxuICBQSUNCRURfU0ZUUFBMSVNUOiAn5YWn572uU0ZUUCcsXG4gIFBJQ0JFRF9TRlRQUExJU1RfSE9TVDogJ+ioreWumuS4u+apnycsXG4gIFBJQ0JFRF9TRlRQUExJU1RfUE9SVDogJ+ioreWumuerr+WPoycsXG4gIFBJQ0JFRF9TRlRQUExJU1RfVVNFUk5BTUU6ICfoqK3lrprnlKjmiLblkI0nLFxuICBQSUNCRURfU0ZUUFBMSVNUX1BBU1NXT1JEOiAn6Kit5a6a5a+G56K8JyxcbiAgUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZOiAn6Kit5a6a56eB6ZGwJyxcbiAgUElDQkVEX1NGVFBQTElTVF9QUklWQVRFS0VZX1BBU1NQSFJBU0U6ICfoqK3lrprnp4HpkbDlr4bnorwnLFxuICBQSUNCRURfU0ZUUFBMSVNUX1VQTE9BRFBBVEg6ICfoqK3lrprkuIrlgrPot6/lvpEnLFxuICBQSUNCRURfU0ZUUFBMSVNUX0NVU1RPTVVSTDogJ+ioreWumuiHquiogue2suWdgCcsXG4gIFBJQ0JFRF9TRlRQUExJU1RfV0VCU0lURV9QQVRIOiAn6Kit5a6a57ay56uZ6Lev5b6RJyxcbiAgUElDQkVEX1NGVFBQTElTVF9GSUxFX1VTRVI6ICfoqK3lrprmlofku7bnlKjmiLY657WEJyxcbiAgUElDQkVEX1NGVFBQTElTVF9GSUxFX01PREU6ICfoqK3lrprmlofku7bmrIrpmZAnLFxuICBQSUNCRURfU0ZUUFBMSVNUX0RJUl9NT0RFOiAn6Kit5a6a5paH5Lu25aS+5qyK6ZmQJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0hPU1Q6ICfkvovlpoLvvJoxLjEuMS4zJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BPUlQ6ICfpu5joqo0yMicsXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QUklWQVRFS0VZOiAn5L6L5aaC77yaL1VzZXJzL3h4eC8uc3NoL2lkX3JzYScsXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QUklWQVRFS0VZX1BBU1NQSFJBU0U6ICfovLjlhaXnp4HpkbDlr4bnorwnLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfVVBMT0FEUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0NVU1RPTVVSTDogJ+S+i+Wmgu+8mmh0dHBzOi8vdGVzdC5jb20nLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfV0VCU0lURV9QQVRIOiAn5ou85o6l57ay5Z2A5pmC5L2/55SoJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0ZJTEVfVVNFUjogJ+S+i+Wmgu+8mnd3dzpkYXRhJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0ZJTEVfTU9ERTogJ+S+i+Wmgu+8mjA2NjQnLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRElSX01PREU6ICfkvovlpoLvvJowNzc1JyxcblxuICAvLyBQaWNMaXN0XG4gIFBJQ0JFRF9QSUNMSVNUOiAnUGljTGlzdCcsXG4gIFBJQ0JFRF9QSUNMSVNUX0hPU1Q6ICfoqK3lrprkuLvmqZ8nLFxuICBQSUNCRURfUElDTElTVF9QT1JUOiAn6Kit5a6a56uv5Y+jJyxcbiAgUElDQkVEX1BJQ0xJU1RfUElDQkVEOiAn6Kit5a6a5ZyW5bqKJyxcbiAgUElDQkVEX1BJQ0xJU1RfQ09ORklHTkFNRTogJ+ioreWumumFjee9ruWQjScsXG4gIFBJQ0JFRF9QSUNMSVNUX0tFWTogJ+ioreWumumRkuasiktleScsXG5cbiAgLy8gTHNreSBQcm9cbiAgUElDQkVEX0xTS1lfUExJU1Q6ICfomK3nqbrlnJbluoonLFxuICBQSUNCRURfTFNLWV9WRVJTSU9OOiAn6Kit5a6a54mI5pysJyxcbiAgUElDQkVEX0xTS1lfTUVTU0FHRV9WRVJTSU9OOiAn6KuL6YG45pOH54mI5pysJyxcbiAgUElDQkVEX0xTS1lfSE9TVDogJ+ioreWumuS4u+apnycsXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfSE9TVDogJ+S+i+Wmgu+8mmh0dHBzOi8vZXhhbXBsZS5jb20nLFxuICBQSUNCRURfTFNLWV9UT0tFTjogJ+ioreWumlRva2VuJyxcbiAgUElDQkVEX0xTS1lfTUVTU0FHRV9UT0tFTjogJ+iri+i8uOWFpVRva2VuJyxcbiAgUElDQkVEX0xTS1lfU1RSQVRFR1lfSUQ6ICfoqK3lrprnrZbnlaVJRCcsXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfU1RSQVRFR1lfSUQ6ICfkvovlpoIxJyxcbiAgUElDQkVEX0xTS1lfQUxCVU1fSUQ6ICfoqK3lrprnm7jlhopJRCcsXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfQUxCVU1fSUQ6ICfkvovlpoIxJyxcbiAgUElDQkVEX0xTS1lfUEVSTUlTU0lPTjogJ+ioreWumuS4iuWCs+asiumZkCcsXG4gIFBJQ0JFRF9MU0tZX01FU1NBR0VfUEVSTUlTU0lPTjogJ+iri+mBuOaTh+S4iuWCs+asiumZkCcsXG5cbiAgLy8gQXdzUzNQbGlzdFxuICBQSUNCRURfQVdTUzNQTElTVDogJ0FXUyBTMycsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX0FDQ0VTU0tFWUlEOiAn6Kit5a6aQWNjZXNzS2V5SWQnLFxuICBQSUNCRURfQVdTUzNQTElTVF9TRUNSRVRfQUNDRVNTS0VZOiAn6Kit5a6aU2VjcmV0QWNjZXNzS2V5JyxcbiAgUElDQkVEX0FXU1MzUExJU1RfQlVDS0VUOiAn6Kit5a6aQnVja2V0JyxcbiAgUElDQkVEX0FXU1MzUExJU1RfUkVHSU9OOiAn6Kit5a6aUmVnaW9uJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfVVBMT0FEUEFUSDogJ+ioreWumuS4iuWCs+i3r+W+kScsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX0VORFBPSU5UOiAn6Kit5a6a6Ieq5a6a576p56+A6bueJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfUFJPWFk6ICfoqK3lrprku6PnkIYnLFxuICBQSUNCRURfQVdTUzNQTElTVF9VUkxQUkVGSVg6ICfoqK3lrproh6rlrprnvqnntrLlnYAnLFxuICBQSUNCRURfQVdTUzNQTElTVF9QQVRIU1RZTEVBQ0NFU1M6ICfplovllZ8gYHBhdGhTdHlsZUFjY2Vzc2AnLFxuICBQSUNCRURfQVdTUzNQTElTVF9SRUpFQ1RVTkFVVEhPUklaRUQ6ICfplovllZ8gYHJlamVjdFVuYXV0aG9yaXplZGAnLFxuICBQSUNCRURfQVdTUzNQTElTVF9BQ0w6ICfoqK3lrppBQ0wnLFxuICBQSUNCRURfQVdTUzNQTElTVF9ESVNBQkxFQlVDS0VUUFJFRklYVE9VUkw6ICfplovllZ8gYHBhdGhTdHlsZUFjY2Vzc2Ag5pmC77yM5piv5ZCm6KaB56aB55So5pyA57WC55Sf5oiQVVJM5Lit5re75YqgIGJ1Y2tldCDliY3ntrQnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0FDQ0VTU0tFWUlEOiAn5L6L5aaC77yaQUtJQXh4eHh4eHh4eHh4eHgnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1NFQ1JFVF9BQ0NFU1NLRVk6ICfkvovlpoLvvJp4eHh4eHh4eHh4JyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9CVUNLRVQ6ICfkvovlpoLvvJp0ZXN0L3tmdWxsTmFtZX0nLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1JFR0lPTjogJ+S+i+Wmgu+8mnVzLWVhc3QtMScsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfVVBMT0FEUEFUSDogJ+S+i+Wmgu+8mnRlc3QvJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9FTkRQT0lOVDogJ+S+i+Wmgu+8mmh0dHBzOi8vczMudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20nLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1BST1hZOiAn5L6L5aaC77yaaHR0cDovLzEyNy4wLjAuMToxMDgwJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9VUkxQUkVGSVg6ICfkvovlpoLvvJpodHRwczovL3Rlc3QuY29tJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9QQVRIU1RZTEVBQ0NFU1M6ICfpnIDopoHmmYLllZ/nlKgnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1JFSkVDVFVOQVVUSE9SSVpFRDogJ+mcgOimgeaZguWVn+eUqCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfQUNMOiAn5L6L5aaC77yacHVibGljLXJlYWQnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0RJU0FCTEVCVUNLRVRQUkVGSVhUT1VSTDogJ+mcgOimgeaZguWVn+eUqCcsXG5cbiAgQlVJTERJTl9XQVRFUk1BUks6ICfmsLTljbDoqK3lrponLFxuICBCVUlMRElOX1dBVEVSTUFSS19JU0FERFdBVEVSTUFSSzogJ+aYr+WQpua3u+WKoOawtOWNsCcsXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfSVNBRERXQVRFUk1BUks6ICfpnIDopoHmt7vliqDmsLTljbDmmYLllZ/nlKgnLFxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktUWVBFOiAn6Kit5a6a5rC05Y2w6aGe5Z6LJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktUWVBFOiAn6KuL6YG45pOH5rC05Y2w6aGe5Z6LJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfSVNGVUxMU0NSRUVOV0FURVJNQVJLOiAn5piv5ZCm5YWo5bGP5rC05Y2wJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9JU0ZVTExTQ1JFRU5XQVRFUk1BUks6ICfpnIDopoHlhajlsY/msLTljbDmmYLllZ/nlKgnLFxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktERUdSRUU6ICfoqK3lrprmsLTljbDop5LluqYnLFxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0RFR1JFRTogJ+iri+i8uOWFpeaVuOWtlycsXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFQ6ICfoqK3lrprmsLTljbDmloflrZcnLFxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1RFWFQ6ICfoq4vovLjlhaXmsLTljbDmloflrZcnLFxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhURk9OVFBBVEg6ICfoqK3lrprmsLTljbDlrZfpq5QnLFxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRQQVRIOiAn6KuL6Ly45YWl5rC05Y2w5a2X6auU5paH5Lu26Lev5b6RJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVFJBVElPOiAn6Kit5a6a5rC05Y2w5ZyW54mH5q+U5L6LJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UUkFUSU86ICfoq4vovLjlhaUwLTHnmoTmlbjlrZcnLFxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktGT05UQ09MT1I6ICfoqK3lrprmsLTljbDlrZfpq5TpoY/oibInLFxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRDT0xPUjogJ+iri+i8uOWFpXJnYumhj+iJsuWAvCcsXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0lNQUdFUEFUSDogJ+ioreWumuawtOWNsOWclueJh+i3r+W+kScsXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLSU1BR0VQQVRIOiAn6KuL6Ly45YWl5rC05Y2w5ZyW54mH6Lev5b6RJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLUE9TSVRJT046ICfoqK3lrprmsLTljbDkvY3nva4nLFxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1BPU0lUSU9OOiAn6KuL6YG45pOH5rC05Y2w5L2N572uJyxcblxuICBCVUlMRElOX1JFTkFNRTogJ+mHjeWRveWQjeioreWumicsXG4gIEJVSUxESU5fUkVOQU1FX0ZPUk1BVDogJ+ioreWumumHjeWRveWQjeagvOW8jycsXG4gIEJVSUxESU5fUkVOQU1FX0VOQUJMRTogJ+aYr+WQpuWVn+eUqOmHjeWRveWQjScsXG5cbiAgQlVJTERJTl9DT01QUkVTUzogJ+WclueJh+iZleeQhuioreWumicsXG4gIEJVSUxESU5fQ09NUFJFU1NfUVVBTElUWTogJ+ioreWumuWclueJh+izqumHjycsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9RVUFMSVRZOiAn6KuL6Ly45YWlMC0xMDDnmoTmlbTmlbgnLFxuICBCVUlMRElOX0NPTVBSRVNTX0lTQ09OVkVSVDogJ+aYr+WQpumAsuihjOagvOW8j+i9ieaPmycsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU0NPTlZFUlQ6ICfpnIDopoHovYnmj5vmmYLllZ/nlKgnLFxuICBCVUlMRElOX0NPTVBSRVNTX0NPTlZFUlRGT1JNQVQ6ICfoqK3lrprovYnmj5vmoLzlvI8nLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfQ09OVkVSVEZPUk1BVDogJ+iri+mBuOaTh+i9ieaPm+agvOW8jycsXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkU6ICfmmK/lkKbpgLLooYzlnJbniYfnuK7mlL4nLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRVNJWkU6ICfpnIDopoHnuK7mlL7mmYLllZ/nlKgnLFxuICBCVUlMRElOX0NPTVBSRVNTX1JFU0laRVdJRFRIOiAn6Kit5a6a57iu5pS+5a+s5bqmJyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRVdJRFRIOiAn6KuL6Ly45YWl5pW45a2XJyxcbiAgQlVJTERJTl9DT01QUkVTU19SRVNJWkVIRUlHSFQ6ICfoqK3lrprnuK7mlL7pq5jluqYnLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFSEVJR0hUOiAn6KuL6Ly45YWl5pW45a2XJyxcbiAgQlVJTERJTl9DT01QUkVTU19JU1JFU0laRUJZUEVSQ0VOVDogJ+aYr+WQpuaMieeZvuWIhuavlOmAsuihjOe4ruaUvicsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFU0laRUJZUEVSQ0VOVDogJ+mcgOimgeaMieeZvuWIhuavlOe4ruaUvuaZguWVn+eUqCcsXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNGTElQOiAn5piv5ZCm5Z6C55u057+76L2J5ZyW54mHJyxcbiAgQlVJTERJTl9DT01QUkVTU19JU0ZMT1A6ICfmmK/lkKbmsLTlubPnv7vovYnlnJbniYcnLFxuICBCVUlMRElOX0NPTVBSRVNTX1JFU0laRVBFUkNFTlQ6ICfoqK3lrprnuK7mlL7nmb7liIbmr5QnLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFUEVSQ0VOVDogJ+iri+i8uOWFpeaVsOWtlycsXG4gIEJVSUxESU5fQ09NUFJFU1NfU0tJUFJFU0laRU9GU01BTExJTUc6ICfmmK/lkKbot7PpgY7lsI/lnJbnuK7mlL4nLFxuICBCVUlMRElOX0NPTVBSRVNTX0lTUk9UQVRFOiAn5piv5ZCm6YCy6KGM5ZyW54mH5peL6L2JJyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUk9UQVRFOiAn6ZyA6KaB5peL6L2J5pmC5ZWf55SoJyxcbiAgQlVJTERJTl9DT01QUkVTU19ST1RBVEVERUdSRUU6ICfoqK3lrprml4vovYnop5LluqYnLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUk9UQVRFREVHUkVFOiAn6KuL6Ly45YWl5pW45a2X77yM5Y+v54K66LKg5pW4JyxcbiAgQlVJTERJTl9DT01QUkVTU19JU1JFTU9WRUVYSUY6ICfmmK/lkKbnp7vpmaRFWElG6LOH6KiKJyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVNT1ZFRVhJRjogJ+mcgOimgeenu+mZpEVYSUbos4foqIrmmYLllZ/nlKgnLFxuXG4gIC8vIFBsdWdpbiBIYW5kbGVyXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX1NVQ0NFU1M6ICfmj5Lku7blronoo53miJDlip8nLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRUQ6ICfmj5Lku7blronoo53lpLHmlZcnLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRURfUkVBU09OOiAn5o+S5Lu25a6J6KOd5aSx5pWX77yM5aSx5pWX56K854K6JHtjb2Rlfe+8jOmMr+iqpOe0gOmMhOeCuiBcXG4gJHtkYXRhfScsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRF9QQVRIOiAn5o+S5Lu25a6J6KOd5aSx5pWX77yM6KuL6Ly45YWl5q2j56K655qE5o+S5Lu25ZCN56ix5oiW5q2j56K655qE5a6J6KOd6Lev5b6RJyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9TVUNDRVNTOiAn5o+S5Lu25Y246LyJ5oiQ5YqfJyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRUQ6ICfmj5Lku7bljbjovInlpLHmlZcnLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX0ZBSUxFRF9SRUFTT046ICfmj5Lku7bljbjovInlpLHmlZfvvIzlpLHmlZfnorzngroke2NvZGV977yM6Yyv6Kqk57SA6YyE54K6IFxcbiAke2RhdGF9JyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfVkFMSUQ6ICfmj5Lku7bljbjovInlpLHmlZfvvIzoq4vovLjlhaXmraPnorrnmoTmj5Lku7blkI3nqLEnLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX1NVQ0NFU1M6ICfmj5Lku7bmm7TmlrDmiJDlip8nLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRDogJ+aPkuS7tuabtOaWsOWkseaVlycsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1JFQVNPTjogJ+aPkuS7tuabtOaWsOWkseaVl++8jOWkseaVl+eivOeCuiR7Y29kZX3vvIzpjK/oqqTntIDpjITngrogXFxuICR7ZGF0YX0nLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRF9WQUxJRDogJ+aPkuS7tuabtOaWsOWkseaVl++8jOiri+i8uOWFpeato+eiuueahOaPkuS7tuWQjeeosSdcbn1cbiIsImltcG9ydCB7IElMb2NhbGVzIH0gZnJvbSAnLi96aC1DTidcblxuLyogZXNsaW50LWRpc2FibGUgbm8tdGVtcGxhdGUtY3VybHktaW4tc3RyaW5nICovXG5leHBvcnQgY29uc3QgRU46IElMb2NhbGVzID0ge1xuICBVUExPQURfRkFJTEVEOiAnVXBsb2FkIGZhaWxlZCcsXG4gIENIRUNLX1NFVFRJTkdTOiAnUGxlYXNlIGNoZWNrIHlvdXIgc2V0dGluZ3MnLFxuICBDSEVDS19TRVRUSU5HU19BTkRfTkVUV09SSzogJ1BsZWFzZSBjaGVjayB5b3VyIHNldHRpbmdzIGFuZCBuZXR3b3JrJyxcbiAgVVBMT0FEX0ZBSUxFRF9SRUFTT046ICdFcnJvciBjb2RlOiAke2NvZGV9LCBwbGVhc2Ugb3BlbiB0aGUgYnJvd3NlciBhbmQgcGFzdGUgdGhlIGFkZHJlc3MgdG8gc2VlIHRoZSByZWFzb24nLFxuICBTRVJWRVJfRVJST1I6ICdTZXJ2ZXIgZXJyb3IsIHBsZWFzZSB0cnkgYWdhaW4gbGF0ZXInLFxuICBBVVRIX0ZBSUxFRDogJ0F1dGhlbnRpY2F0aW9uIGZhaWxlZCcsXG5cbiAgLy8gc21tc1xuICBQSUNCRURfU01NUzogJ1NNLk1TJyxcbiAgUElDQkVEX1NNTVNfVE9LRU46ICdTZXQgVG9rZW4nLFxuICBQSUNCRURfU01NU19NRVNTQUdFX1RPS0VOOiAnUGxlYXNlIGVudGVyIHRoZSB0b2tlbicsXG4gIFBJQ0JFRF9TTU1TX0JBQ0tVUF9ET01BSU46ICdTZXQgQmFja3VwIFVwbG9hZCBEb21haW4nLFxuICBQSUNCRURfU01NU19NRVNTQUdFX0JBQ0tVUF9ET01BSU46ICdFeC4gc21tcy5hcHAnLFxuXG4gIC8vIGxvY2FsXG4gIFBJQ0JFRF9MT0NBTDogJ0xvY2FsJyxcbiAgUElDQkVEX0xPQ0FMX1BBVEg6ICdTZXQgUGF0aCcsXG4gIFBJQ0JFRF9MT0NBTF9NRVNTQUdFX1BBVEg6ICdFeC4gL1VzZXJzL25hbWUvUGljdHVyZXMvJyxcbiAgUElDQkVEX0xPQ0FMX0NVU1RPTVVSTDogJ1NldCBDdXN0b20gVVJMJyxcbiAgUElDQkVEX0xPQ0FMX01FU1NBR0VfQ1VTVE9NVVJMOiAnRXguIGh0dHBzOi8vdGVzdC5jb20nLFxuICBQSUNCRURfTE9DQUxfV0VCUEFUSDogJ1NldCBXZWIgUGF0aCcsXG4gIFBJQ0JFRF9MT0NBTF9NRVNTQUdFX1dFQlBBVEg6ICdVc2VkIHRvIGdlbmVyYXRlIHVybCBwYXRoJyxcblxuICAvLyBhbGlzdFxuICBQSUNCRURfQUxJU1RfUExJU1Q6ICdBTGlzdCcsXG4gIFBJQ0JFRF9BTElTVF9VUkw6ICdTZXQgVVJMJyxcbiAgUElDQkVEX0FMSVNUX01FU1NBR0VfVVJMOiAnRXguIGh0dHBzOi8vYWxpc3QuZXhhbXBsZS5jb20nLFxuICBQSUNCRURfQUxJU1RfVE9LRU46ICdTZXQgVG9rZW4nLFxuICBQSUNCRURfQUxJU1RfTUVTU0FHRV9UT0tFTjogJ1BsZWFzZSBlbnRlciB0aGUgdG9rZW4oY2hvb3NlIG9uZSBvZiBlaXRoZXIgdXNlcm5hbWUtcGFzc3dvcmQgb3IgdG9rZW4pJyxcbiAgUElDQkVEX0FMSVNUX1VTRVJOQU1FOiAnU2V0IFVzZXJuYW1lJyxcbiAgUElDQkVEX0FMSVNUX01FU1NBR0VfVVNFUk5BTUU6ICdQbGVhc2UgZW50ZXIgdGhlIHVzZXJuYW1lKGNob29zZSBvbmUgb2YgZWl0aGVyIHVzZXJuYW1lLXBhc3N3b3JkIG9yIHRva2VuKScsXG4gIFBJQ0JFRF9BTElTVF9QQVNTV09SRDogJ1NldCBQYXNzd29yZCcsXG4gIFBJQ0JFRF9BTElTVF9NRVNTQUdFX1BBU1NXT1JEOiAnUGxlYXNlIGVudGVyIHRoZSBwYXNzd29yZCcsXG4gIFBJQ0JFRF9BTElTVF9VUExPQURfUEFUSDogJ1NldCBVcGxvYWQgUGF0aCcsXG4gIFBJQ0JFRF9BTElTVF9NRVNTQUdFX1VQTE9BRF9QQVRIOiAnRXguIC90ZXN0LycsXG4gIFBJQ0JFRF9BTElTVF9XRUJfUEFUSDogJ1NldCBXZWIgUGF0aCcsXG4gIFBJQ0JFRF9BTElTVF9NRVNTQUdFX1dFQl9QQVRIOiAnVXNlZCB0byBnZW5lcmF0ZSB1cmwgcGF0aCcsXG4gIFBJQ0JFRF9BTElTVF9DVVNUT01VUkw6ICdTZXQgQ3VzdG9tIFVSTCcsXG4gIFBJQ0JFRF9BTElTVF9NRVNTQUdFX0NVU1RPTVVSTDogJ0V4LiBodHRwczovL3Rlc3QuY29tJyxcblxuICAvLyBBbGktY2xvdWRcbiAgUElDQkVEX0FMSUNMT1VEOiAnQWxpIENsb3VkJyxcbiAgUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWUlEOiAnU2V0IGFjY2Vzc0tleUlkJyxcbiAgUElDQkVEX0FMSUNMT1VEX0FDQ0VTU0tFWVNFQ1JFVDogJ1NldCBhY2Nlc3NLZXlTZWNyZXQnLFxuICBQSUNCRURfQUxJQ0xPVURfQlVDS0VUOiAnU2V0IEJ1Y2tldCcsXG4gIFBJQ0JFRF9BTElDTE9VRF9BUkVBOiAnU2V0IEFyZWEnLFxuICBQSUNCRURfQUxJQ0xPVURfUEFUSDogJ1NldCBQYXRoJyxcbiAgUElDQkVEX0FMSUNMT1VEX0NVU1RPTVVSTDogJ1NldCBDdXN0b20gVVJMJyxcbiAgUElDQkVEX0FMSUNMT1VEX09QVElPTlM6ICdTZXQgVVJMIFN1ZmZpeCcsXG4gIFBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX0FSRUE6ICdFeC4gb3NzLWNuLWJlaWppbmcnLFxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9QQVRIOiAnRXguIHRlc3QvJyxcbiAgUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfT1BUSU9OUzogJ0V4LiA/eC1vc3MtcHJvY2Vzcz14eHgnLFxuICBQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9DVVNUT01VUkw6ICdFeC4gaHR0cHM6Ly90ZXN0LmNvbScsXG5cbiAgLy8gVGVuY2VudC1jbG91ZFxuICBQSUNCRURfVEVOQ0VOVENMT1VEOiAnVGVuY2VudCBDbG91ZCcsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfVkVSU0lPTjogJ0Nob29zZSBDT1MgdmVyc2lvbicsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUSUQ6ICdTZXQgU2VjcmV0SWQnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NFQ1JFVEtFWTogJ1NldCBTZWNyZXRLZXknLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0FQUElEOiAnU2V0IEFwcElkJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9CVUNLRVQ6ICdTZXQgQnVja2V0JyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9BUkVBOiAnU2V0IEFyZWEnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX0VORFBPSU5UOiAnU2V0IEVuZHBvaW50JyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9QQVRIOiAnU2V0IFBhdGgnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX09QVElPTlM6ICdTZXQgVVJMIFN1ZmZpeCcsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfQ1VTVE9NVVJMOiAnU2V0IEN1c3RvbSBVUkwnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfQVBQSUQ6ICdFeC4gMTIzNDU2Nzg5MCcsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9BUkVBOiAnRXguIGFwLWJlaWppbmcnLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfUEFUSDogJ0V4LiB0ZXN0LycsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9DVVNUT01VUkw6ICdFeC4gaHR0cDovL3Rlc3QuY29tJyxcbiAgUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX09QVElPTlM6ICdFeC4gP2ltYWdlTW9ncjInLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfRU5EUE9JTlQ6ICdFeC4gY29zLWludGVybmFsLmFjY2VsZXJhdGUudGVuY2VudGNvcy5jbicsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTTogJ1NldCBJbWFnZVNsaW0nLFxuICBQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fVElQOlxuICAgICdJbWFnZSBleHRyZW1lbHkgaW50ZWxsaWdlbnQgY29tcHJlc3Npb24sIHBsZWFzZSByZWZlciB0byB0aGUgW2RvY3VtZW50IGRlc2NyaXB0aW9uXShodHRwczovL2Nsb3VkLnRlbmNlbnQuY29tL2RvY3VtZW50L3Byb2R1Y3QvNDM2Lzg2NDM4KScsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9DT05GSVJNOiAnT1BFTicsXG4gIFBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9DQU5DRUw6ICdDTE9TRScsXG4gIC8vIEdpdEh1YlxuICBQSUNCRURfR0lUSFVCOiAnR2l0SHViJyxcbiAgUElDQkVEX0dJVEhVQl9UT0tFTjogJ1NldCBUb2tlbicsXG4gIFBJQ0JFRF9HSVRIVUJfUkVQTzogJ1NldCBSZXBvIE5hbWUnLFxuICBQSUNCRURfR0lUSFVCX1BBVEg6ICdTZXQgUGF0aCcsXG4gIFBJQ0JFRF9HSVRIVUJfQlJBTkNIOiAnU2V0IEJyYW5jaCcsXG4gIFBJQ0JFRF9HSVRIVUJfQ1VTVE9NVVJMOiAnU2V0IEN1c3RvbSBVUkwnLFxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfUkVQTzogJ0V4LiB1c2VybmFtZS9yZXBvJyxcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX0JSQU5DSDogJ0V4LiBtYWluJyxcbiAgUElDQkVEX0dJVEhVQl9NRVNTQUdFX1BBVEg6ICdFeC4gdGVzdC8nLFxuICBQSUNCRURfR0lUSFVCX01FU1NBR0VfQ1VTVE9NVVJMOiAnRXguIGh0dHBzOi8vdGVzdC5jb20nLFxuXG4gIC8vIHFpbml1XG4gIFBJQ0JFRF9RSU5JVTogJ1Fpbml1JyxcbiAgUElDQkVEX1FJTklVX0FDQ0VTU0tFWTogJ1NldCBBY2Nlc3NLZXknLFxuICBQSUNCRURfUUlOSVVfU0VDUkVUS0VZOiAnU2V0IFNlY3JldEtleScsXG4gIFBJQ0JFRF9RSU5JVV9CVUNLRVQ6ICdTZXQgQnVja2V0JyxcbiAgUElDQkVEX1FJTklVX1BBVEg6ICdTZXQgUGF0aCcsXG4gIFBJQ0JFRF9RSU5JVV9VUkw6ICdTZXQgVVJMJyxcbiAgUElDQkVEX1FJTklVX09QVElPTlM6ICdTZXQgVVJMIFN1ZmZpeCcsXG4gIFBJQ0JFRF9RSU5JVV9BUkVBOiAnU2V0IEFyZWEnLFxuICBQSUNCRURfUUlOSVVfTUVTU0FHRV9QQVRIOiAnRXguIHRlc3QvJyxcbiAgUElDQkVEX1FJTklVX01FU1NBR0VfQVJFQTogJ0V4LiB6MCcsXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX09QVElPTlM6ICdFeC4gP2ltYWdlc2xpbScsXG4gIFBJQ0JFRF9RSU5JVV9NRVNTQUdFX1VSTDogJ0V4LiBodHRwczovL3h4eC55eXkuZ2xiLmNsb3VkZG4uY29tJyxcblxuICAvLyB0ZWxlZ3JhcGhcbiAgUElDQkVEX1RFTEVHUkFQSDogJ1RlbGVncmFwaCcsXG5cbiAgLy8gaW1ndXJcbiAgUElDQkVEX0lNR1VSOiAnSW1ndXInLFxuICBQSUNCRURfSU1HVVJfQ0xJRU5USUQ6ICdTZXQgQ2xpZW50SWQnLFxuICBQSUNCRURfSU1HVVJfVVNFUk5BTUU6ICdTZXQgVXNlcm5hbWUnLFxuICBQSUNCRURfSU1HVVJfQUNDRVNTX1RPS0VOOiAnU2V0IEFjY2VzcyBUb2tlbicsXG4gIFBJQ0JFRF9JTUdVUl9BTEJVTTogJ1NldCBBbGJ1bSBOYW1lJyxcbiAgUElDQkVEX0lNR1VSX1BST1hZOiAnU2V0IFByb3h5JyxcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfQ0xJRU5USUQ6ICdGaWxsIGluIHdoZW4geW91IG5lZWQgdG8gdXBsb2FkIGFzIGFub255bW91cycsXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX1VTRVJOQU1FOiAnRmlsbCBpbiB3aGVuIHlvdSBuZWVkIHRvIHVwbG9hZCB0byB0aGUgYWNjb3VudCcsXG4gIFBJQ0JFRF9JTUdVUl9NRVNTQUdFX0FDQ0VTU19UT0tFTjogJ0ZpbGwgaW4gd2hlbiB5b3UgbmVlZCB0byB1cGxvYWQgdG8gdGhlIGFjY291bnQnLFxuICBQSUNCRURfSU1HVVJfTUVTU0FHRV9BTEJVTTogJ0V4LiB0ZXN0JyxcbiAgUElDQkVEX0lNR1VSX01FU1NBR0VfUFJPWFk6ICdFeC4gaHR0cDovLzEyNy4wLjAuMToxMDgwJyxcblxuICAvLyB1cHl1blxuICBQSUNCRURfVVBZVU46ICdVcHl1bicsXG4gIFBJQ0JFRF9VUFlVTl9CVUNLRVQ6ICdTZXQgQnVja2V0JyxcbiAgUElDQkVEX1VQWVVOX0VORFBPSU5UOiAnU2V0IEVuZHBvaW50JyxcbiAgUElDQkVEX1VQWVVOX09QRVJBVE9SOiAnU2V0IE9wZXJhdG9yJyxcbiAgUElDQkVEX1VQWVVOX1BBU1NXT1JEOiAnU2V0IE9wZXJhdG9yIFBhc3N3b3JkJyxcbiAgUElDQkVEX1VQWVVOX1BBVEg6ICdTZXQgUGF0aCcsXG4gIFBJQ0JFRF9VUFlVTl9VUkw6ICdTZXQgVVJMJyxcbiAgUElDQkVEX1VQWVVOX09QVElPTlM6ICdTZXQgVVJMIFN1ZmZpeCcsXG4gIFBJQ0JFRF9VUFlVTl9BTlRJX0xFRUNIX1RPS0VOOiAnU2V0IEFudGktTGVlY2ggVG9rZW4nLFxuICBQSUNCRURfVVBZVU5fRVhQSVJFX1RJTUU6ICdTZXQgRXhwaXJlIFRpbWUoc2Vjb25kcyknLFxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9PUEVSQVRPUjogJ0V4LiBtZScsXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX1BBU1NXT1JEOiAnUGxlYXNlIHR5cGUgdGhlIG9wZXJhdG9yIHBhc3N3b3JkJyxcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfVVJMOiAnRXguIGh0dHA6Ly94eHgudGVzdC51cGNkbi5uZXQnLFxuICBQSUNCRURfVVBZVU5fTUVTU0FHRV9PUFRJT05TOiAnRXguICFpbWdzbGltJyxcbiAgUElDQkVEX1VQWVVOX01FU1NBR0VfUEFUSDogJ0V4LiB0ZXN0LycsXG4gIFBJQ0JFRF9VUFlVTl9NRVNTQUdFX0VORFBPSU5UOiAnRXguIGh0dHBzOi8vdjAuYXBpLnVweXVuLmNvbScsXG5cbiAgLy8gd2ViZGF2XG4gIFBJQ0JFRF9XRUJEQVZQTElTVDogJ1dlYkRBVicsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9IT1NUOiAnU2V0IEhvc3QnLFxuICBQSUNCRURfV0VCREFWUExJU1RfU1NMRU5BQkxFRDogJ0VuYWJsZSBIVFRQUycsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9VU0VSTkFNRTogJ1NldCBVc2VybmFtZScsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9QQVNTV09SRDogJ1NldCBQYXNzd29yZCcsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9QQVRIOiAnU2V0IFBhdGgnLFxuICBQSUNCRURfV0VCREFWUExJU1RfV0VCU0lURV9QQVRIOiAnU2V0IFdlYnNpdGUgUGF0aCcsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9DVVNUT01VUkw6ICdTZXQgQ3VzdG9tIFVSTCcsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9BVVRIVFlQRTogJ1NldCBBdXRoIFR5cGUnLFxuICBQSUNCRURfV0VCREFWUExJU1RfT1BUSU9OUzogJ1NldCBVUkwgU3VmZml4JyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfSE9TVDogJ0V4LiBodHRwczovL2V4YW1wbGUuY29tL3dlYmRhdicsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1NTTEVOQUJMRUQ6ICdFbmFibGUgSFRUUFMnLFxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9VU0VSTkFNRTogJ0V4LiBtZScsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBU1NXT1JEOiAnUGxlYXNlIHR5cGUgdGhlIHBhc3N3b3JkJyxcbiAgUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFUSDogJ0V4LiB0ZXN0LycsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSDogJ1VzZWQgdG8gZ2VuZXJhdGUgdGhlIFVSTCBvZiB0aGUgaW1hZ2UnLFxuICBQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9DVVNUT01VUkw6ICdFeC4gaHR0cHM6Ly90ZXN0LmNvbScsXG4gIFBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX09QVElPTlM6ICdFeC4gP2tleT12YWx1ZScsXG5cbiAgLy8gc2Z0cHBsaXN0XG4gIFBJQ0JFRF9TRlRQUExJU1Q6ICdTRlRQIEJ1aWxkaW4nLFxuICBQSUNCRURfU0ZUUFBMSVNUX0hPU1Q6ICdTZXQgSG9zdCcsXG4gIFBJQ0JFRF9TRlRQUExJU1RfUE9SVDogJ1NldCBQb3J0JyxcbiAgUElDQkVEX1NGVFBQTElTVF9VU0VSTkFNRTogJ1NldCBVc2VybmFtZScsXG4gIFBJQ0JFRF9TRlRQUExJU1RfUEFTU1dPUkQ6ICdTZXQgUGFzc3dvcmQnLFxuICBQSUNCRURfU0ZUUFBMSVNUX1BSSVZBVEVLRVk6ICdTZXQgUHJpdmF0ZSBLZXknLFxuICBQSUNCRURfU0ZUUFBMSVNUX1BSSVZBVEVLRVlfUEFTU1BIUkFTRTogJ1NldCBQcml2YXRlIEtleSBQYXNzcGhyYXNlJyxcbiAgUElDQkVEX1NGVFBQTElTVF9VUExPQURQQVRIOiAnU2V0IFVwbG9hZCBQYXRoJyxcbiAgUElDQkVEX1NGVFBQTElTVF9DVVNUT01VUkw6ICdTZXQgQ3VzdG9tIFVSTCcsXG4gIFBJQ0JFRF9TRlRQUExJU1RfV0VCU0lURV9QQVRIOiAnU2V0IFdlYnNpdGUgUGF0aCcsXG4gIFBJQ0JFRF9TRlRQUExJU1RfRklMRV9VU0VSOiAnU2V0IEZpbGUgVXNlcjpHcm91cCcsXG4gIFBJQ0JFRF9TRlRQUExJU1RfRklMRV9NT0RFOiAnU2V0IEZpbGUgTW9kZScsXG4gIFBJQ0JFRF9TRlRQUExJU1RfRElSX01PREU6ICdTZXQgRGlyZWN0b3J5IE1vZGUnLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfSE9TVDogJ0V4LiAxLjEuMS4zJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BPUlQ6ICdEZWZhdWx0IDIyJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BSSVZBVEVLRVk6ICdFeC4gL1VzZXJzL3h4eC8uc3NoL2lkX3JzYScsXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QUklWQVRFS0VZX1BBU1NQSFJBU0U6ICdQbGVhc2UgdHlwZSB0aGUgcHJpdmF0ZSBrZXkgcGFzc3BocmFzZScsXG4gIFBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9VUExPQURQQVRIOiAnRXguIHRlc3QvJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0NVU1RPTVVSTDogJ0V4LiBodHRwczovL3Rlc3QuY29tJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSDogJ1VzZWQgdG8gZ2VuZXJhdGUgdGhlIFVSTCBvZiB0aGUgaW1hZ2UnLFxuICBQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRklMRV9VU0VSOiAnRXguIHd3dzpkYXRhJyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0ZJTEVfTU9ERTogJ0V4LiAwNjY0JyxcbiAgUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0RJUl9NT0RFOiAnRXguIDA3NzUnLFxuXG4gIC8vIFBpY0xpc3RcbiAgUElDQkVEX1BJQ0xJU1Q6ICdQaWNMaXN0JyxcbiAgUElDQkVEX1BJQ0xJU1RfSE9TVDogJ1NldCBIb3N0JyxcbiAgUElDQkVEX1BJQ0xJU1RfUE9SVDogJ1NldCBQb3J0JyxcbiAgUElDQkVEX1BJQ0xJU1RfUElDQkVEOiAnU2V0IFBpY0JlZCcsXG4gIFBJQ0JFRF9QSUNMSVNUX0NPTkZJR05BTUU6ICdTZXQgQ29uZmlnIE5hbWUnLFxuICBQSUNCRURfUElDTElTVF9LRVk6ICdTZXQgS2V5JyxcblxuICAvLyBMc2t5IFByb1xuICBQSUNCRURfTFNLWV9QTElTVDogJ0xza3knLFxuICBQSUNCRURfTFNLWV9WRVJTSU9OOiAnU2V0IFZlcnNpb24nLFxuICBQSUNCRURfTFNLWV9NRVNTQUdFX1ZFUlNJT046ICdFeC4gdjEnLFxuICBQSUNCRURfTFNLWV9IT1NUOiAnU2V0IEhvc3QnLFxuICBQSUNCRURfTFNLWV9NRVNTQUdFX0hPU1Q6ICdFeC4gaHR0cHM6Ly9sc2t5LmNvJyxcbiAgUElDQkVEX0xTS1lfVE9LRU46ICdTZXQgVG9rZW4nLFxuICBQSUNCRURfTFNLWV9NRVNTQUdFX1RPS0VOOiAnRXguIHh4eCcsXG4gIFBJQ0JFRF9MU0tZX1NUUkFURUdZX0lEOiAnU2V0IFN0cmF0ZWd5IElEJyxcbiAgUElDQkVEX0xTS1lfTUVTU0FHRV9TVFJBVEVHWV9JRDogJ0V4LiAxJyxcbiAgUElDQkVEX0xTS1lfQUxCVU1fSUQ6ICdTZXQgQWxidW0gSUQnLFxuICBQSUNCRURfTFNLWV9NRVNTQUdFX0FMQlVNX0lEOiAnT3B0aW9uYWwsIG9ubHkgZm9yIFYyJyxcbiAgUElDQkVEX0xTS1lfUEVSTUlTU0lPTjogJ1NldCBQZXJtaXNzb24nLFxuICBQSUNCRURfTFNLWV9NRVNTQUdFX1BFUk1JU1NJT046ICdFeC4gcHVibGljJyxcblxuICAvLyBBd3NTM1BsaXN0XG4gIFBJQ0JFRF9BV1NTM1BMSVNUOiAnQVdTIFMzJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfQUNDRVNTS0VZSUQ6ICdTZXQgQWNjZXNzS2V5SWQnLFxuICBQSUNCRURfQVdTUzNQTElTVF9TRUNSRVRfQUNDRVNTS0VZOiAnU2V0IFNlY3JldEFjY2Vzc0tleScsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX0JVQ0tFVDogJ1NldCBCdWNrZXQnLFxuICBQSUNCRURfQVdTUzNQTElTVF9SRUdJT046ICdTZXQgUmVnaW9uJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfVVBMT0FEUEFUSDogJ1NldCBVcGxvYWQgUGF0aCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX0VORFBPSU5UOiAnU2V0IEVuZHBvaW50JyxcbiAgUElDQkVEX0FXU1MzUExJU1RfUFJPWFk6ICdTZXQgUHJveHknLFxuICBQSUNCRURfQVdTUzNQTElTVF9VUkxQUkVGSVg6ICdTZXQgQ3VzdG9tIFVSTCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX1BBVEhTVFlMRUFDQ0VTUzogJ1NldCBQYXRoU3R5bGVBY2Nlc3MnLFxuICBQSUNCRURfQVdTUzNQTElTVF9SRUpFQ1RVTkFVVEhPUklaRUQ6ICdTZXQgUmVqZWN0VW5hdXRob3JpemVkJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfQUNMOiAnU2V0IEFDTCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX0RJU0FCTEVCVUNLRVRQUkVGSVhUT1VSTDpcbiAgICAnd2hlbiBgcGF0aFN0eWxlQWNjZXNzYCBpcyBlbmFibGVkLCB3aGV0aGVyIHRvIGRpc2FibGUgYWRkaW5nIGJ1Y2tldCBwcmVmaXggdG8gdXJsJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9BQ0NFU1NLRVlJRDogJ0V4LiB4eHgnLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1NFQ1JFVF9BQ0NFU1NLRVk6ICdFeC4geHh4JyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9CVUNLRVQ6ICdFeC4gdGVzdCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUkVHSU9OOiAnRXguIHVzLWVhc3QtMScsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfVVBMT0FEUEFUSDogJ0V4LiB0ZXN0L3tmdWxsTmFtZX0nLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0VORFBPSU5UOiAnRXguIGh0dHBzOi8vczMudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20nLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1BST1hZOiAnRXguIGh0dHA6Ly8xMjcuMC4wLjE6MTA4MCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfVVJMUFJFRklYOiAnRXguIGh0dHBzOi8vdGVzdC5jb20nLFxuICBQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1BBVEhTVFlMRUFDQ0VTUzogJ0VuYWJsZSB3aGVuIGBwYXRoU3R5bGVBY2Nlc3NgIGlzIHJlcXVpcmVkJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9SRUpFQ1RVTkFVVEhPUklaRUQ6ICdFbmFibGUgd2hlbiByZWplY3RpbmcgaW52YWxpZCBUTFMgY2VydGlmaWNhdGUgY29ubmVjdGlvbiBpcyByZXF1aXJlZCcsXG4gIFBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfQUNMOiAnRXguIHB1YmxpYy1yZWFkJyxcbiAgUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9ESVNBQkxFQlVDS0VUUFJFRklYVE9VUkw6ICdFbmFibGUgd2hlbiBgcGF0aFN0eWxlQWNjZXNzYCBpcyBlbmFibGVkJyxcblxuICBCVUlMRElOX1JFTkFNRTogJ1JlbmFtZSBTZXR0aW5ncycsXG4gIEJVSUxESU5fUkVOQU1FX0ZPUk1BVDogJ1NldCByZW5hbWUgZm9ybWF0JyxcbiAgQlVJTERJTl9SRU5BTUVfRU5BQkxFOiAnRW5hYmxlIHJlbmFtZScsXG5cbiAgQlVJTERJTl9XQVRFUk1BUks6ICdXYXRlcm1hcmsgU2V0dGluZ3MnLFxuICBCVUlMRElOX1dBVEVSTUFSS19JU0FERFdBVEVSTUFSSzogJ1doZXRoZXIgdG8gYWRkIHdhdGVybWFyaycsXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfSVNBRERXQVRFUk1BUks6ICdFbmFibGUgd2hlbiB3YXRlcm1hcmsgaXMgcmVxdWlyZWQnLFxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktUWVBFOiAnU2V0IHdhdGVybWFyayB0eXBlJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktUWVBFOiAnUGxlYXNlIHNlbGVjdCB3YXRlcm1hcmsgdHlwZScsXG4gIEJVSUxESU5fV0FURVJNQVJLX0lTRlVMTFNDUkVFTldBVEVSTUFSSzogJ1doZXRoZXIgdG8gdXNlIGZ1bGwtc2NyZWVuIHdhdGVybWFyaycsXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfSVNGVUxMU0NSRUVOV0FURVJNQVJLOiAnRW5hYmxlIHdoZW4gZnVsbC1zY3JlZW4gd2F0ZXJtYXJrIGlzIHJlcXVpcmVkJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLREVHUkVFOiAnU2V0IHdhdGVybWFyayBhbmdsZScsXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLREVHUkVFOiAnUGxlYXNlIGVudGVyIGEgbnVtYmVyJyxcbiAgQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLVEVYVDogJ1NldCB3YXRlcm1hcmsgdGV4dCcsXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLVEVYVDogJ1BsZWFzZSBlbnRlciB3YXRlcm1hcmsgdGV4dCcsXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFRGT05UUEFUSDogJ1NldCB3YXRlcm1hcmsgZm9udCcsXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVFBBVEg6ICdQbGVhc2UgZW50ZXIgdGhlIHdhdGVybWFyayBmb250IGZpbGUgcGF0aCcsXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRSQVRJTzogJ1NldCB0aGUgcmF0aW8gb2YgdGhlIHdhdGVybWFyayB0byB0aGUgaW1hZ2UnLFxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRSQVRJTzogJ1BsZWFzZSBlbnRlciBhIG51bWJlciBiZXR3ZWVuIDAtMScsXG4gIEJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0ZPTlRDT0xPUjogJ1NldCB3YXRlcm1hcmsgZm9udCBjb2xvcicsXG4gIEJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLRk9OVENPTE9SOiAnUGxlYXNlIGVudGVyIHRoZSBSR0IgY29sb3IgdmFsdWUnLFxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktJTUFHRVBBVEg6ICdTZXQgd2F0ZXJtYXJrIGltYWdlIHBhdGgnLFxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0lNQUdFUEFUSDogJ1BsZWFzZSBlbnRlciB0aGUgd2F0ZXJtYXJrIGltYWdlIHBhdGgnLFxuICBCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktQT1NJVElPTjogJ1NldCB3YXRlcm1hcmsgcG9zaXRpb24nLFxuICBCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1BPU0lUSU9OOiAnUGxlYXNlIHNlbGVjdCB3YXRlcm1hcmsgcG9zaXRpb24nLFxuXG4gIEJVSUxESU5fQ09NUFJFU1M6ICdQcm9jZXNzaW5nIFNldHRpbmdzJyxcbiAgQlVJTERJTl9DT01QUkVTU19RVUFMSVRZOiAnU2V0IGltYWdlIHF1YWxpdHknLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUVVBTElUWTogJ1BsZWFzZSBlbnRlciBhbiBpbnRlZ2VyIGJldHdlZW4gMC0xMDAnLFxuICBCVUlMRElOX0NPTVBSRVNTX0lTQ09OVkVSVDogJ1doZXRoZXIgdG8gcGVyZm9ybSBmb3JtYXQgY29udmVyc2lvbicsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU0NPTlZFUlQ6ICdFbmFibGUgd2hlbiBmb3JtYXQgY29udmVyc2lvbiBpcyByZXF1aXJlZCcsXG4gIEJVSUxESU5fQ09NUFJFU1NfQ09OVkVSVEZPUk1BVDogJ1NldCBjb252ZXJzaW9uIGZvcm1hdCcsXG4gIEJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9DT05WRVJURk9STUFUOiAnUGxlYXNlIHNlbGVjdCBjb252ZXJzaW9uIGZvcm1hdCcsXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkU6ICdXaGV0aGVyIHRvIHJlc2l6ZSB0aGUgaW1hZ2UnLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRVNJWkU6ICdFbmFibGUgd2hlbiBpbWFnZSByZXNpemluZyBpcyByZXF1aXJlZCcsXG4gIEJVSUxESU5fQ09NUFJFU1NfUkVTSVpFV0lEVEg6ICdTZXQgcmVzaXppbmcgd2lkdGgnLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFV0lEVEg6ICdQbGVhc2UgZW50ZXIgYSBudW1iZXInLFxuICBCVUlMRElOX0NPTVBSRVNTX1JFU0laRUhFSUdIVDogJ1NldCByZXNpemluZyBoZWlnaHQnLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFSEVJR0hUOiAnUGxlYXNlIGVudGVyIGEgbnVtYmVyJyxcbiAgQlVJTERJTl9DT01QUkVTU19JU1JFU0laRUJZUEVSQ0VOVDogJ1doZXRoZXIgdG8gcmVzaXplIHRoZSBpbWFnZSBieSBwZXJjZW50YWdlJyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVTSVpFQllQRVJDRU5UOiAnRW5hYmxlIHdoZW4gcmVzaXppbmcgYnkgcGVyY2VudGFnZSBpcyByZXF1aXJlZCcsXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNGTElQOiAnV2hldGhlciB0byBmbGlwIHRoZSBpbWFnZSB2ZXJ0aWNhbGx5JyxcbiAgQlVJTERJTl9DT01QUkVTU19JU0ZMT1A6ICdXaGV0aGVyIHRvIGZsaXAgdGhlIGltYWdlIGhvcml6b250YWxseScsXG4gIEJVSUxESU5fQ09NUFJFU1NfUkVTSVpFUEVSQ0VOVDogJ1NldCByZXNpemluZyBwZXJjZW50YWdlJyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRVBFUkNFTlQ6ICdQbGVhc2UgZW50ZXIgYSBudW1iZXInLFxuICBCVUlMRElOX0NPTVBSRVNTX1NLSVBSRVNJWkVPRlNNQUxMSU1HOiAnV2hldGhlciB0byBza2lwIHJlc2l6aW5nIG9mIHNtYWxsIGltYWdlcycsXG4gIEJVSUxESU5fQ09NUFJFU1NfSVNST1RBVEU6ICdXaGV0aGVyIHRvIHJvdGF0ZSB0aGUgaW1hZ2UnLFxuICBCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNST1RBVEU6ICdFbmFibGUgd2hlbiBpbWFnZSByb3RhdGlvbiBpcyByZXF1aXJlZCcsXG4gIEJVSUxESU5fQ09NUFJFU1NfUk9UQVRFREVHUkVFOiAnU2V0IHJvdGF0aW9uIGFuZ2xlJyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JPVEFURURFR1JFRTogJ1BsZWFzZSBlbnRlciBhIG51bWJlciwgY2FuIGJlIG5lZ2F0aXZlJyxcbiAgQlVJTERJTl9DT01QUkVTU19JU1JFTU9WRUVYSUY6ICdXaGV0aGVyIHRvIHJlbW92ZSBFWElGIGluZm9ybWF0aW9uJyxcbiAgQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUkVNT1ZFRVhJRjogJ0VuYWJsZSB3aGVuIHJlbW92aW5nIEVYSUYgaW5mb3JtYXRpb24gaXMgcmVxdWlyZWQnLFxuICAvLyBQbHVnaW4gSGFuZGxlclxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9TVUNDRVNTOiAnUGx1Z2luIGluc3RhbGxlZCBzdWNjZXNzZnVsbHknLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRUQ6ICdQbHVnaW4gaW5zdGFsbGF0aW9uIGZhaWxlZCcsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRF9SRUFTT046XG4gICAgJ1BsdWdpbiBpbnN0YWxsYXRpb24gZmFpbGVkLCBlcnJvciBjb2RlIGlzICR7Y29kZX0sIGVycm9yIGxvZyBpcyBcXG4gJHtkYXRhfScsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRF9QQVRIOlxuICAgICdQbHVnaW4gaW5zdGFsbGF0aW9uIGZhaWxlZCwgcGxlYXNlIGVudGVyIGEgdmFsaWQgcGx1Z2luIG5hbWUgb3IgdmFsaWQgaW5zdGFsbGF0aW9uIHBhdGgnLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVU5JTlNUQUxMX1NVQ0NFU1M6ICdQbHVnaW4gdW5pbnN0YWxsZWQgc3VjY2Vzc2Z1bGx5JyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRUQ6ICdQbHVnaW4gdW5pbnN0YWxsIGZhaWxlZCcsXG4gIFBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEX1JFQVNPTjpcbiAgICAnUGx1Z2luIHVuaW5zdGFsbCBmYWlsZWQsIGVycm9yIGNvZGUgaXMgJHtjb2RlfSwgZXJyb3IgbG9nIGlzIFxcbiAke2RhdGF9JyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfVkFMSUQ6ICdQbHVnaW4gdW5pbnN0YWxsIGZhaWxlZCwgcGxlYXNlIGVudGVyIGEgdmFsaWQgcGx1Z2luIG5hbWUnLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX1NVQ0NFU1M6ICdQbHVnaW4gdXBkYXRlZCBzdWNjZXNzZnVsbHknLFxuICBQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRDogJ1BsdWdpbiB1cGRhdGUgZmFpbGVkJyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfUkVBU09OOiAnUGx1Z2luIHVwZGF0ZSBmYWlsZWQsIGVycm9yIGNvZGUgaXMgJHtjb2RlfSwgZXJyb3IgbG9nIGlzIFxcbiAke2RhdGF9JyxcbiAgUExVR0lOX0hBTkRMRVJfUExVR0lOX1VQREFURV9GQUlMRURfVkFMSUQ6ICdQbHVnaW4gdXBkYXRlIGZhaWxlZCwgcGxlYXNlIGVudGVyIGEgdmFsaWQgcGx1Z2luIG5hbWUnXG59XG4iLCJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudHMnXG5pbXBvcnQgeyByZW1vdmUsIGVuc3VyZUZpbGVTeW5jLCBwYXRoRXhpc3RzU3luYyB9IGZyb20gJ2ZzLWV4dHJhJ1xuaW1wb3J0IHsgZ2V0LCBzZXQsIHVuc2V0IH0gZnJvbSAnbG9kYXNoJ1xuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ29zJ1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCdcblxuaW1wb3J0IHsgQ29tbWFuZGVyIH0gZnJvbSAnLi4vbGliL0NvbW1hbmRlcidcbmltcG9ydCB7IExpZmVjeWNsZVBsdWdpbnMsIHNldEN1cnJlbnRQbHVnaW5OYW1lIH0gZnJvbSAnLi4vbGliL0xpZmVjeWNsZVBsdWdpbnMnXG5pbXBvcnQgeyBMb2dnZXIgfSBmcm9tICcuLi9saWIvTG9nZ2VyJ1xuaW1wb3J0IHsgUGx1Z2luSGFuZGxlciB9IGZyb20gJy4uL2xpYi9QbHVnaW5IYW5kbGVyJ1xuaW1wb3J0IHsgUGx1Z2luTG9hZGVyIH0gZnJvbSAnLi4vbGliL1BsdWdpbkxvYWRlcidcbmltcG9ydCB7IFJlcXVlc3QgfSBmcm9tICcuLi9saWIvUmVxdWVzdCdcblxuaW1wb3J0IHsgTGlmZWN5Y2xlIH0gZnJvbSAnLi9MaWZlY3ljbGUnXG5cbmltcG9ydCBidWlsZEluVXBsb2FkZXJzIGZyb20gJy4uL3BsdWdpbnMvdXBsb2FkZXInXG5pbXBvcnQgYnVpbGRJblRyYW5zZm9ybWVycyBmcm9tICcuLi9wbHVnaW5zL3RyYW5zZm9ybWVyJ1xuXG5pbXBvcnQgZ2V0Q2xpcGJvYXJkSW1hZ2UgZnJvbSAnLi4vdXRpbHMvZ2V0Q2xpcGJvYXJkSW1hZ2UnXG5cbmltcG9ydCB7IGlzQ29uZmlnS2V5SW5CbGFja0xpc3QsIGlzSW5wdXRDb25maWdWYWxpZCB9IGZyb20gJy4uL3V0aWxzL2NvbW1vbidcbmltcG9ydCBEQiBmcm9tICcuLi91dGlscy9kYidcbmltcG9ydCB7IElCdWlsZEluRXZlbnQsIElCdXNFdmVudCB9IGZyb20gJy4uL3V0aWxzL2VudW0nXG5pbXBvcnQgeyBldmVudEJ1cyB9IGZyb20gJy4uL3V0aWxzL2V2ZW50QnVzJ1xuXG5pbXBvcnQgeyBJMThuTWFuYWdlciB9IGZyb20gJy4uL2kxOG4nXG5cbmltcG9ydCB7XG4gIElIZWxwZXIsXG4gIElJbWdJbmZvLFxuICBJQ29uZmlnLFxuICBJUGljR28sXG4gIElTdHJpbmdLZXlNYXAsXG4gIElQbHVnaW5Mb2FkZXIsXG4gIElJMThuTWFuYWdlcixcbiAgSVBpY0dvUGx1Z2luLFxuICBJUGljR29QbHVnaW5JbnRlcmZhY2UsXG4gIElSZXF1ZXN0XG59IGZyb20gJy4uL3R5cGVzJ1xuXG5leHBvcnQgY2xhc3MgUGljR28gZXh0ZW5kcyBFdmVudEVtaXR0ZXIgaW1wbGVtZW50cyBJUGljR28ge1xuICBwcml2YXRlIF9jb25maWchOiBJQ29uZmlnXG4gIHByaXZhdGUgbGlmZWN5Y2xlITogTGlmZWN5Y2xlXG4gIHByaXZhdGUgZGIhOiBEQlxuICBwcml2YXRlIF9wbHVnaW5Mb2FkZXIhOiBQbHVnaW5Mb2FkZXJcbiAgY29uZmlnUGF0aDogc3RyaW5nXG4gIGJhc2VEaXIhOiBzdHJpbmdcbiAgaGVscGVyITogSUhlbHBlclxuICBsb2c6IExvZ2dlclxuICBjbWQ6IENvbW1hbmRlclxuICBvdXRwdXQ6IElJbWdJbmZvW11cbiAgaW5wdXQ6IGFueVtdXG4gIHJhd0lucHV0OiBhbnlbXVxuICBwbHVnaW5IYW5kbGVyOiBQbHVnaW5IYW5kbGVyXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB3aWxsIGJlIHJlbW92ZWQgaW4gdjEuNS4wK1xuICAgKlxuICAgKiB1c2UgcmVxdWVzdCBpbnN0ZWFkXG4gICAqL1xuICBSZXF1ZXN0ITogUmVxdWVzdFxuICBpMThuITogSUkxOG5NYW5hZ2VyXG4gIFZFUlNJT046IHN0cmluZyA9IHByb2Nlc3MuZW52LlBJQ0dPX1ZFUlNJT05cbiAgR1VJX1ZFUlNJT04/OiBzdHJpbmdcblxuICBnZXQgcGx1Z2luTG9hZGVyKCk6IElQbHVnaW5Mb2FkZXIge1xuICAgIHJldHVybiB0aGlzLl9wbHVnaW5Mb2FkZXJcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZ1BhdGg6IHN0cmluZyA9ICcnKSB7XG4gICAgc3VwZXIoKVxuICAgIHRoaXMuY29uZmlnUGF0aCA9IGNvbmZpZ1BhdGhcbiAgICB0aGlzLmlucHV0ID0gW11cbiAgICB0aGlzLnJhd0lucHV0ID0gW11cbiAgICB0aGlzLm91dHB1dCA9IFtdXG4gICAgdGhpcy5oZWxwZXIgPSB7XG4gICAgICB0cmFuc2Zvcm1lcjogbmV3IExpZmVjeWNsZVBsdWdpbnMoJ3RyYW5zZm9ybWVyJyksXG4gICAgICB1cGxvYWRlcjogbmV3IExpZmVjeWNsZVBsdWdpbnMoJ3VwbG9hZGVyJyksXG4gICAgICBiZWZvcmVUcmFuc2Zvcm1QbHVnaW5zOiBuZXcgTGlmZWN5Y2xlUGx1Z2lucygnYmVmb3JlVHJhbnNmb3JtUGx1Z2lucycpLFxuICAgICAgYmVmb3JlVXBsb2FkUGx1Z2luczogbmV3IExpZmVjeWNsZVBsdWdpbnMoJ2JlZm9yZVVwbG9hZFBsdWdpbnMnKSxcbiAgICAgIGFmdGVyVXBsb2FkUGx1Z2luczogbmV3IExpZmVjeWNsZVBsdWdpbnMoJ2FmdGVyVXBsb2FkUGx1Z2lucycpXG4gICAgfVxuICAgIHRoaXMuaW5pdENvbmZpZ1BhdGgoKVxuICAgIHRoaXMubG9nID0gbmV3IExvZ2dlcih0aGlzKVxuICAgIHRoaXMuY21kID0gbmV3IENvbW1hbmRlcih0aGlzKVxuICAgIHRoaXMucGx1Z2luSGFuZGxlciA9IG5ldyBQbHVnaW5IYW5kbGVyKHRoaXMpXG4gICAgdGhpcy5pbml0Q29uZmlnKClcbiAgICB0aGlzLmluaXQoKVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0Q29uZmlnUGF0aCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZ1BhdGggPSB0aGlzLmNvbmZpZ1BhdGggfHwgcGF0aC5qb2luKGhvbWVkaXIoKSwgJy5waWNsaXN0L2NvbmZpZy5qc29uJylcbiAgICBpZiAocGF0aC5leHRuYW1lKHRoaXMuY29uZmlnUGF0aCkudG9VcHBlckNhc2UoKSAhPT0gJy5KU09OJykge1xuICAgICAgdGhpcy5jb25maWdQYXRoID0gJydcbiAgICAgIHRocm93IEVycm9yKCdUaGUgY29uZmlndXJhdGlvbiBmaWxlIG9ubHkgc3VwcG9ydHMgSlNPTiBmb3JtYXQuJylcbiAgICB9XG4gICAgdGhpcy5iYXNlRGlyID0gcGF0aC5kaXJuYW1lKHRoaXMuY29uZmlnUGF0aClcbiAgICBpZiAoIXBhdGhFeGlzdHNTeW5jKHRoaXMuY29uZmlnUGF0aCkpIHtcbiAgICAgIGVuc3VyZUZpbGVTeW5jKGAke3RoaXMuY29uZmlnUGF0aH1gKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdENvbmZpZygpOiB2b2lkIHtcbiAgICB0aGlzLmRiID0gbmV3IERCKHRoaXMpXG4gICAgdGhpcy5fY29uZmlnID0gdGhpcy5kYi5yZWFkKHRydWUpIGFzIElDb25maWdcbiAgfVxuXG4gIHByaXZhdGUgaW5pdCgpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgLy8gaW5pdCAxOG4gYXQgZmlyc3RcbiAgICAgIHRoaXMuaTE4biA9IG5ldyBJMThuTWFuYWdlcih0aGlzKVxuICAgICAgdGhpcy5SZXF1ZXN0ID0gbmV3IFJlcXVlc3QodGhpcylcbiAgICAgIHRoaXMuX3BsdWdpbkxvYWRlciA9IG5ldyBQbHVnaW5Mb2FkZXIodGhpcylcbiAgICAgIC8vIGxvYWQgc2VsZiBwbHVnaW5zXG4gICAgICBzZXRDdXJyZW50UGx1Z2luTmFtZSgncGljZ28nKVxuICAgICAgYnVpbGRJblVwbG9hZGVycygpLnJlZ2lzdGVyKHRoaXMpXG4gICAgICBidWlsZEluVHJhbnNmb3JtZXJzKCkucmVnaXN0ZXIodGhpcylcbiAgICAgIHNldEN1cnJlbnRQbHVnaW5OYW1lKCcnKVxuICAgICAgLy8gbG9hZCB0aGlyZC1wYXJ0eSBwbHVnaW5zXG4gICAgICB0aGlzLl9wbHVnaW5Mb2FkZXIubG9hZCgpXG4gICAgICB0aGlzLmxpZmVjeWNsZSA9IG5ldyBMaWZlY3ljbGUodGhpcylcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRoaXMuZW1pdChJQnVpbGRJbkV2ZW50LlVQTE9BRF9QUk9HUkVTUywgLTEpXG4gICAgICB0aGlzLmxvZy5lcnJvcihlKVxuICAgICAgdGhyb3cgZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBlYXNpbHkgbWFubnVhbGx5IGxvYWQgYSBwbHVnaW5cbiAgICogaWYgcHJvdmlkZSBwbHVnaW4gbmFtZSwgd2lsbCByZWdpc3RlciBwbHVnaW4gYnkgbmFtZVxuICAgKiBvciBqdXN0IGluc3RhbnRpYXRlIGEgcGx1Z2luXG4gICAqL1xuICB1c2UocGx1Z2luOiBJUGljR29QbHVnaW4sIG5hbWU/OiBzdHJpbmcpOiBJUGljR29QbHVnaW5JbnRlcmZhY2Uge1xuICAgIGlmIChuYW1lKSB7XG4gICAgICB0aGlzLnBsdWdpbkxvYWRlci5yZWdpc3RlclBsdWdpbihuYW1lLCBwbHVnaW4pXG4gICAgICByZXR1cm4gdGhpcy5wbHVnaW5Mb2FkZXIuZ2V0UGx1Z2luKG5hbWUpIVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBwbHVnaW5JbnN0YW5jZSA9IHBsdWdpbih0aGlzKVxuICAgICAgcmV0dXJuIHBsdWdpbkluc3RhbmNlXG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJDb21tYW5kcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb25maWdQYXRoICE9PSAnJykge1xuICAgICAgdGhpcy5jbWQuaW5pdCgpXG4gICAgICB0aGlzLmNtZC5sb2FkQ29tbWFuZHMoKVxuICAgIH1cbiAgfVxuXG4gIGdldENvbmZpZzxUPihuYW1lPzogc3RyaW5nKTogVCB7XG4gICAgaWYgKCFuYW1lKSB7XG4gICAgICB0aGlzLl9jb25maWcgPSB0aGlzLmRiLnJlYWQodHJ1ZSkgYXMgSUNvbmZpZ1xuICAgICAgcmV0dXJuIHRoaXMuX2NvbmZpZyBhcyB1bmtub3duIGFzIFRcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGdldCh0aGlzLl9jb25maWcsIG5hbWUpXG4gICAgfVxuICB9XG5cbiAgc2F2ZUNvbmZpZyhjb25maWc6IElTdHJpbmdLZXlNYXA8YW55Pik6IHZvaWQge1xuICAgIGlmICghaXNJbnB1dENvbmZpZ1ZhbGlkKGNvbmZpZykpIHtcbiAgICAgIHRoaXMubG9nLndhcm4oJ3RoZSBmb3JtYXQgb2YgY29uZmlnIGlzIGludmFsaWQsIHBsZWFzZSBwcm92aWRlIG9iamVjdCcpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGhpcy5zZXRDb25maWcoY29uZmlnKVxuICAgIHRoaXMuZGIuc2F2ZUNvbmZpZyhjb25maWcpXG4gIH1cblxuICByZW1vdmVDb25maWcoa2V5OiBzdHJpbmcsIHByb3BOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIWtleSB8fCAhcHJvcE5hbWUpIHJldHVyblxuICAgIGlmIChpc0NvbmZpZ0tleUluQmxhY2tMaXN0KGtleSkpIHtcbiAgICAgIHRoaXMubG9nLndhcm4oYHRoZSBjb25maWcuJHtrZXl9IGNhbid0IGJlIHJlbW92ZWRgKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRoaXMudW5zZXRDb25maWcoa2V5LCBwcm9wTmFtZSlcbiAgICB0aGlzLmRiLnVuc2V0KGtleSwgcHJvcE5hbWUpXG4gIH1cblxuICBzZXRDb25maWcoY29uZmlnOiBJU3RyaW5nS2V5TWFwPGFueT4pOiB2b2lkIHtcbiAgICBpZiAoIWlzSW5wdXRDb25maWdWYWxpZChjb25maWcpKSB7XG4gICAgICB0aGlzLmxvZy53YXJuKCd0aGUgZm9ybWF0IG9mIGNvbmZpZyBpcyBpbnZhbGlkLCBwbGVhc2UgcHJvdmlkZSBvYmplY3QnKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIE9iamVjdC5rZXlzKGNvbmZpZykuZm9yRWFjaCgobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoaXNDb25maWdLZXlJbkJsYWNrTGlzdChuYW1lKSkge1xuICAgICAgICB0aGlzLmxvZy53YXJuKGB0aGUgY29uZmlnLiR7bmFtZX0gY2FuJ3QgYmUgbW9kaWZpZWRgKVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWR5bmFtaWMtZGVsZXRlXG4gICAgICAgIGRlbGV0ZSBjb25maWdbbmFtZV1cbiAgICAgIH1cbiAgICAgIHNldCh0aGlzLl9jb25maWcsIG5hbWUsIGNvbmZpZ1tuYW1lXSlcbiAgICAgIGV2ZW50QnVzLmVtaXQoSUJ1c0V2ZW50LkNPTkZJR19DSEFOR0UsIHtcbiAgICAgICAgY29uZmlnTmFtZTogbmFtZSxcbiAgICAgICAgdmFsdWU6IGNvbmZpZ1tuYW1lXVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgdW5zZXRDb25maWcoa2V5OiBzdHJpbmcsIHByb3BOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIWtleSB8fCAhcHJvcE5hbWUpIHJldHVyblxuICAgIGlmIChpc0NvbmZpZ0tleUluQmxhY2tMaXN0KGtleSkpIHtcbiAgICAgIHRoaXMubG9nLndhcm4oYHRoZSBjb25maWcuJHtrZXl9IGNhbid0IGJlIHVuc2V0YClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB1bnNldCh0aGlzLmdldENvbmZpZyhrZXkpLCBwcm9wTmFtZSlcbiAgfVxuXG4gIGdldCByZXF1ZXN0KCk6IElSZXF1ZXN0WydyZXF1ZXN0J10ge1xuICAgIHJldHVybiB0aGlzLlJlcXVlc3QucmVxdWVzdC5iaW5kKHRoaXMuUmVxdWVzdClcbiAgfVxuXG4gIGFzeW5jIHVwbG9hZChpbnB1dD86IGFueVtdKTogUHJvbWlzZTxJSW1nSW5mb1tdIHwgRXJyb3I+IHtcbiAgICBpZiAodGhpcy5jb25maWdQYXRoID09PSAnJykge1xuICAgICAgdGhpcy5sb2cuZXJyb3IoJ05vIGNvbmZpZyBmaWxlIGZvdW5kLCBwbGVhc2UgY2hlY2sgeW91ciBjb25maWcgZmlsZSBwYXRoJylcbiAgICAgIHJldHVybiBbXVxuICAgIH1cblxuICAgIGlmIChpbnB1dCA9PT0gdW5kZWZpbmVkIHx8IGlucHV0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgeyBpbWdQYXRoLCBzaG91bGRLZWVwQWZ0ZXJVcGxvYWRpbmcgfSA9IGF3YWl0IGdldENsaXBib2FyZEltYWdlKHRoaXMpXG4gICAgICAgIGNvbnN0IGNsZWFudXAgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgaWYgKCFzaG91bGRLZWVwQWZ0ZXJVcGxvYWRpbmcpIHtcbiAgICAgICAgICAgIHJlbW92ZShpbWdQYXRoKS5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5sb2cuZXJyb3IoZSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpbWdQYXRoID09PSAnbm8gaW1hZ2UnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbWFnZSBub3QgZm91bmQgaW4gY2xpcGJvYXJkJylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm9uY2UoSUJ1aWxkSW5FdmVudC5GQUlMRUQsIGNsZWFudXApXG4gICAgICAgICAgdGhpcy5vbmNlKElCdWlsZEluRXZlbnQuRklOSVNIRUQsIGNsZWFudXApXG4gICAgICAgICAgY29uc3QgeyBvdXRwdXQgfSA9IGF3YWl0IHRoaXMubGlmZWN5Y2xlLnN0YXJ0KFtpbWdQYXRoXSlcbiAgICAgICAgICByZXR1cm4gb3V0cHV0XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhpcy5lbWl0KElCdWlsZEluRXZlbnQuRkFJTEVELCBlKVxuICAgICAgICB0aHJvdyBlXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHsgb3V0cHV0IH0gPSBhd2FpdCB0aGlzLmxpZmVjeWNsZS5zdGFydChpbnB1dClcbiAgICAgIHJldHVybiBvdXRwdXRcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IElQaWNHbyB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IEltZ0Zyb21QYXRoIGZyb20gJy4vcGF0aCdcbmltcG9ydCBJbWdGcm9tQmFzZTY0IGZyb20gJy4vYmFzZTY0J1xuXG5jb25zdCBidWlsZEluVHJhbnNmb3JtZXJzID0gKCkgPT4ge1xuICByZXR1cm4ge1xuICAgIHJlZ2lzdGVyKGN0eDogSVBpY0dvKSB7XG4gICAgICBjdHguaGVscGVyLnRyYW5zZm9ybWVyLnJlZ2lzdGVyKCdwYXRoJywgSW1nRnJvbVBhdGgpXG4gICAgICBjdHguaGVscGVyLnRyYW5zZm9ybWVyLnJlZ2lzdGVyKCdiYXNlNjQnLCBJbWdGcm9tQmFzZTY0KVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBidWlsZEluVHJhbnNmb3JtZXJzXG4iXSwibmFtZXMiOlsiY3JlYXRlQ29tbWFuZCIsImNtZCIsImNvbW1hbmQiLCJkZXNjcmlwdGlvbiIsImFsaWFzIiwiYWN0aW9uIiwib3B0aW9ucyIsInByb2dyYW0iLCJwcm94eSIsIm9wdGlvbiIsInJlZ2lzdHJ5IiwicGx1Z2luSGFuZGxlciIsImhhbmRsZSIsImN0eCIsInBsdWdpbnMiLCJpbnN0YWxsIiwiY2F0Y2giLCJlIiwibG9nIiwiZXJyb3IiLCJ1bmluc3RhbGwiLCJ1cGRhdGUiLCJjb25maWciLCJyYW5kb21TdHJpbmdHZW5lcmF0b3IiLCJsZW5ndGgiLCJjaGFycyIsIkFycmF5IiwiZnJvbSIsIm1hcCIsImNoYXJBdCIsIk1hdGgiLCJmbG9vciIsInJhbmRvbSIsImpvaW4iLCJmb3JtYXRIZWxwZXIiLCJudW0iLCJ0b1N0cmluZyIsImdldE1kNSIsImlucHV0IiwiY3J5cHRvIiwiY3JlYXRlSGFzaCIsImRpZ2VzdCIsInJlbmFtZUZpbGVOYW1lV2l0aEN1c3RvbVN0cmluZyIsIm9sZE5hbWUiLCJjdXN0b21Gb3JtYXQiLCJhZmZpeEZpbGVOYW1lIiwiZmlsZUJ1ZmZlciIsIm5vdyIsIkRhdGUiLCJ5ZWFyIiwiZ2V0RnVsbFllYXIiLCJmaWxlYmFzZW5hbWUiLCJwYXRoIiwiYmFzZW5hbWUiLCJleHRuYW1lIiwiY29udmVyc2lvbk1hcCIsInNsaWNlIiwiZ2V0TW9udGgiLCJnZXREYXRlIiwiZ2V0SG91cnMiLCJnZXRNaW51dGVzIiwiZ2V0U2Vjb25kcyIsImdldE1pbGxpc2Vjb25kcyIsInBhZFN0YXJ0IiwidXVpZHY0IiwicmVwbGFjZSIsImdldFRpbWUiLCJ1bmRlZmluZWQiLCJPYmplY3QiLCJrZXlzIiwic29tZSIsIml0ZW0iLCJpbmNsdWRlcyIsImV4dCIsIm5ld05hbWUiLCJyZWR1Y2UiLCJhY2MiLCJjdXIiLCJSZWdFeHAiLCJfIiwiZ3JvdXAxIiwicGFyc2VJbnQiLCJfcmVzdWx0Iiwia2V5IiwiY291bnQiLCJtYXgiLCJkaXJuYW1lIiwic3BsaXQiLCJzZXAiLCJhIiwiYiIsImlzVXJsIiwidXJsIiwidGVzdCIsImlzVXJsRW5jb2RlIiwiZGVjb2RlVVJJIiwiaGFuZGxlVXJsRW5jb2RlIiwiZW5jb2RlVVJJIiwiZ2V0SW1hZ2VTaXplIiwiZmlsZSIsIndpZHRoIiwiaGVpZ2h0IiwidHlwZSIsImltYWdlU2l6ZSIsInJlYWwiLCJnZXRGU0ZpbGUiLCJhc3luYyIsImZpbGVQYXRoIiwiZmlsZU5hbWUiLCJidWZmZXIiLCJyZWFkRmlsZSIsInN1Y2Nlc3MiLCJfYSIsInJlYXNvbiIsImdldFVSTEZpbGUiLCJ0aW1lb3V0SWQiLCJyZXF1ZXN0Rm4iLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInJlcyIsInJlcXVlc3QiLCJtZXRob2QiLCJyZXNvbHZlV2l0aEZ1bGxSZXNwb25zZSIsInJlc3BvbnNlVHlwZSIsInRoZW4iLCJyZXNwIiwiZGF0YSIsImNsZWFyVGltZW91dCIsInVybFBhdGgiLCJVUkwiLCJwYXRobmFtZSIsInNlYXJjaFBhcmFtcyIsImdldCIsInN0YXJ0c1dpdGgiLCJtZXNzYWdlIiwidGltZW91dFByb21pc2UiLCJzZXRUaW1lb3V0IiwicmFjZSIsImdldFBsdWdpbk5hbWVUeXBlIiwibmFtZSIsImlzU2ltcGxlTmFtZSIsIm5hbWVPclBhdGgiLCJpc0Fic29sdXRlIiwicGx1Z2luUGF0aCIsInByb2Nlc3MiLCJjd2QiLCJmcyIsImV4aXN0c1N5bmMiLCJoYW5kbGVDb21wbGV0ZVBsdWdpbk5hbWUiLCJzY29wZSIsImdldFByb2Nlc3NQbHVnaW5OYW1lIiwibG9nZ2VyIiwiY29uc29sZSIsImhhbmRsZVVuaXhTdHlsZVBhdGgiLCJ3YXJuIiwiZ2V0Tm9ybWFsUGx1Z2luTmFtZSIsInJlbW92ZVBsdWdpblZlcnNpb24iLCJwYWNrYWdlSlNPTlBhdGgiLCJwb3NpeCIsInBrZyIsInJlYWRKU09OU3luYyIsInBhdGhTdHIiLCJyZWciLCJtYXRjaEFyciIsIm1hdGNoIiwiY29uZmlnQmxhY2tMaXN0IiwiaXNDb25maWdLZXlJbkJsYWNrTGlzdCIsImJsYWNrSXRlbSIsImlzSW5wdXRDb25maWdWYWxpZCIsImlzQXJyYXkiLCJzYWZlUGFyc2UiLCJzdHIiLCJKU09OIiwicGFyc2UiLCJmb3JjZU51bWJlciIsImlzTmFOIiwiTnVtYmVyIiwiaXNEZXYiLCJlbnYiLCJOT0RFX0VOViIsImRlZmF1bHRXYXRlcm1hcmtJbWFnZVBhdGgiLCJfX2Rpcm5hbWUiLCJBZGRXYXRlcm1hcmsiLCJpbWciLCJ3YXRlcm1hcmtUeXBlIiwiZGVmYXVsdFdhdGVybWFya0ZvbnRQYXRoIiwiaXNGdWxsU2NyZWVuV2F0ZXJtYXJrIiwid2F0ZXJtYXJrRGVncmVlIiwidGV4dCIsIndhdGVybWFya0ZvbnRQYXRoIiwid2F0ZXJtYXJrU2NhbGVSYXRpbyIsIndhdGVybWFya0NvbG9yIiwid2F0ZXJtYXJrSW1hZ2VQYXRoIiwicG9zaXRpb24iLCJpbWFnZSIsInNoYXJwIiwiYW5pbWF0ZWQiLCJpbWdXaWR0aCIsIm1ldGFkYXRhIiwid2F0ZXJtYXJrIiwidG9CdWZmZXIiLCJjb2xvciIsImZvbnRGYW1pbHkiLCJhbmNob3IiLCJhdHRyaWJ1dGVzIiwiZmlsbCIsInRleHRTVkciLCJUZXh0VG9TVkciLCJsb2FkU3luYyIsImdldFNWRyIsIkJ1ZmZlciIsInRleHQyU1ZHIiwid2F0ZXJtYXJrV2lkdGgiLCJ3YXRlcm1hcmtIZWlnaHQiLCJnZXRTaXplIiwid2F0ZXJtYXJrUmVzaXplV2lkdGgiLCJ3YXRlcm1hcmtSZXNpemVIZWlnaHQiLCJyZXNpemUiLCJmaXQiLCJyb3RhdGUiLCJiYWNrZ3JvdW5kIiwiciIsImciLCJhbHBoYSIsImNyZWF0ZVdhdGVybWFyayIsImNvbXBvc2l0ZSIsImdyYXZpdHkiLCJ0aWxlIiwidmFsaWRQYXJhbSIsInBhcmFtcyIsImV2ZXJ5IiwicGFyYW0iLCJhdmFpbGFibGVDb252ZXJ0Rm9ybWF0TGlzdCIsImltYWdlRm9ybWF0TGlzdCIsInZhbGlkT3V0cHV0Rm9ybWF0IiwiZm9ybWF0IiwiaW1hZ2VBZGRXYXRlck1hcmsiLCJ3YXRlcm1hcmtUZXh0Iiwid2F0ZXJtYXJrUG9zaXRpb24iLCJmb3JtYXRPcHRpb25zIiwiZm9ybWF0Q29udmVydE9iaiIsInF1YWxpdHkiLCJpc0NvbnZlcnQiLCJjb252ZXJ0Rm9ybWF0IiwiaXNSZVNpemUiLCJyZVNpemVIZWlnaHQiLCJyZVNpemVXaWR0aCIsInNraXBSZVNpemVPZlNtYWxsSW1nIiwiaXNSZVNpemVCeVBlcmNlbnQiLCJyZVNpemVQZXJjZW50IiwiaXNSb3RhdGUiLCJpc0ZsaXAiLCJpc0Zsb3AiLCJyb3RhdGVEZWdyZWUiLCJwaWNCZWQiLCJpbWFnZUNvbXByZXNzIiwicmF3Rm9ybWF0Iiwibm9ybWFsaXplSW1hZ2VFeHQiLCJpbWFnZVdpZHRoIiwiaW1hZ2VIZWlnaHQiLCJyb3VuZCIsInNjYWxlUmF0aW8iLCJmbGlwIiwiZmxvcCIsIm5ld0Zvcm1hdCIsImdldENvbnZlcnRlZEZvcm1hdCIsInRvRm9ybWF0IiwibW96anBlZyIsInRvTG93ZXJDYXNlIiwiaXNOZWVkQWRkV2F0ZXJtYXJrIiwid2F0ZXJtYXJrT3B0aW9ucyIsImZpbGVFeHQiLCJpc0FkZFdhdGVybWFyayIsImlzTmVlZENvbXByZXNzIiwiY29tcHJlc3NPcHRpb25zIiwicmVtb3ZlRXhpZiIsInVwbG9hZCIsImFyZ3VtZW50cyIsImlucHV0TGlzdCIsImZpbHRlciIsImV4aXN0IiwiY29tcHJlc3MiLCJ1c2VyQ29uZmlnIiwiZ2V0Q29uZmlnIiwicHJlZml4IiwiaTE4biIsInRyYW5zbGF0ZSIsInJlcXVpcmVkIiwiZGVmYXVsdCIsImNob2ljZXMiLCJpc1JlbW92ZUV4aWYiLCJyZW5hbWUiLCJlbmFibGUiLCJ1cGxvYWRlclRyYW5zbGF0b3JzIiwiYWxpc3RwbGlzdCIsImFsaXl1biIsImdpdGh1YiIsImltZ3VyIiwibG9jYWwiLCJsc2t5cGxpc3QiLCJwaWNsaXN0IiwicWluaXUiLCJzZnRwcGxpc3QiLCJzbW1zIiwidGN5dW4iLCJ0ZWxlZ3JhcGhwbGlzdCIsInVweXVuIiwid2ViZGF2cGxpc3QiLCJoYW5kbGVDb25maWciLCJwcm9tcHRzIiwibW9kdWxlIiwiYW5zd2VyIiwiaW5xdWlyZXIiLCJwcm9tcHQiLCJjb25maWdOYW1lIiwic2F2ZUNvbmZpZyIsInNldHRpbmciLCJ2YWx1ZSIsImJ1aWxkaW4iLCJoZWxwZXIiLCJnZXRJZExpc3QiLCJwbHVnaW5Mb2FkZXIiLCJnZXRQbHVnaW4iLCJnZXRGdWxsTGlzdCIsIl9iIiwicGx1Z2luIiwiaW5mbyIsImFyZ3YiLCJ1c2UiLCJ1cGxvYWRlciIsInRyYW5zZm9ybWVyIiwicHVzaCIsImZvckVhY2giLCJwaWNnb1BsdWdpbnMiLCJzZXRDb25maWciLCJnZW5lcmF0ZSIsIm9wdHMiLCJnZXRPcHRpb25zIiwidG1wIiwic291cmNlIiwiYW5zd2VycyIsIl9maWxlcyIsImdsb2JieSIsImRvdCIsImdsb2IiLCJmaWx0ZXJzIiwiZmlsZXMiLCJyZW5kZXIiLCJ3cml0ZUZpbGVUcmVlIiwiZGVzdCIsImNvbXBsZXRlIiwiY29tcGxldGVNZXNzYWdlIiwiZXhwIiwiZm4iLCJGdW5jdGlvbiIsInN0cmluZ2lmeSIsInRlbXBsYXRlUGF0aCIsIm9wdGlvbnNQYXRoIiwicmVxdWlyZSIsImZpbGVUcmVlIiwicmVhZEZpbGVTeW5jIiwiY29udGVudCIsImVqc1JlbmRlciIsImlzQnVmZmVyIiwiZGlyIiwiZW5zdXJlRGlyU3luYyIsIndyaXRlRmlsZVN5bmMiLCJydW4iLCJvZmZsaW5lIiwidGVtcGxhdGUiLCJoYXNTbGFzaCIsImRvd25sb2FkQW5kR2VuZXJhdGUiLCJzeW5jIiwiZG93bmxvYWQiLCJjbG9uZSIsImVyciIsImluaXQiLCJwcm9qZWN0IiwiaW5QbGFjZSIsImhvbWVkaXIiLCJvayIsIm9uIiwiY2hhbGsiLCJncmF5IiwibGFuZyIsImxpc3QiLCJnZXRMYW5ndWFnZUxpc3QiLCJzZXRMYW5ndWFnZSIsIkxpZmVjeWNsZVBsdWdpbnMiLCJjb25zdHJ1Y3RvciIsInRoaXMiLCJNYXAiLCJwbHVnaW5JZE1hcCIsInJlZ2lzdGVyIiwiaWQiLCJUeXBlRXJyb3IiLCJoYXMiLCJzZXQiLCJjdXJyZW50UGx1Z2luIiwidW5yZWdpc3RlciIsInBsdWdpbk5hbWUiLCJwbHVnaW5MaXN0IiwiZGVsZXRlIiwiZ2V0TmFtZSIsImdldExpc3QiLCJ2YWx1ZXMiLCJzZXRDdXJyZW50UGx1Z2luTmFtZSIsIkNvbW1hbmRlciIsIkNvbW1hbmQiLCJ2ZXJzaW9uIiwiZGVidWciLCJzaWxlbnQiLCJhcmdzIiwiZXhpdCIsImN1cnJlbnRQbHVnaW5OYW1lIiwibG9hZENvbW1hbmRzIiwiSUxvZ1R5cGUiLCJJQnVpbGRJbkV2ZW50IiwiSUJ1c0V2ZW50IiwiTG9nZ2VyIiwibGV2ZWwiLCJoYW5kbGVMb2ciLCJtc2ciLCJsb2dMZXZlbCIsImNoZWNrTG9nTGV2ZWwiLCJsb2dIZWFkZXIiLCJ0b1VwcGVyQ2FzZSIsImxvZ1BhdGgiLCJiYXNlRGlyIiwicmVzdWx0IiwiY2hlY2tMb2dGaWxlSXNMYXJnZSIsImlzTGFyZ2UiLCJ3YXJuaW5nTXNnIiwibG9nRmlsZVNpemVMaW1pdCIsInllbGxvdyIsInJlY3JlYXRlTG9nRmlsZSIsInVuc2hpZnQiLCJoYW5kbGVXcml0ZUxvZyIsImxvZ0ZpbGVTaXplIiwic3RhdFN5bmMiLCJzaXplIiwidW5saW5rU3luYyIsImNyZWF0ZUZpbGVTeW5jIiwiZGF5anMiLCJFcnJvciIsInV0aWwiLCJzdGFjayIsImFwcGVuZEZpbGVTeW5jIiwiUGx1Z2luSGFuZGxlciIsImluc3RhbGxlZFBsdWdpbnMiLCJwcm9jZXNzUGx1Z2lucyIsImhhbmRsZVBsdWdpbk5hbWVQcm9jZXNzIiwiaGFzUGx1Z2luIiwicGtnTmFtZSIsImZ1bGxOYW1lTGlzdCIsImZ1bGxOYW1lIiwicGtnTmFtZUxpc3QiLCJleGVjQ29tbWFuZCIsImNvZGUiLCJlbWl0IiwidGl0bGUiLCJib2R5IiwicmVnaXN0ZXJQbHVnaW4iLCJ1bnJlZ2lzdGVyUGx1Z2luIiwibW9kdWxlcyIsIndoZXJlIiwiY29uY2F0IiwibnBtIiwic3Bhd24iLCJhc3NpZ24iLCJvdXRwdXQiLCJzdGRvdXQiLCJwaXBlIiwic3RkZXJyIiwiRkFJTEVEIiwiUGx1Z2luTG9hZGVyIiwiZnVsbExpc3QiLCJTZXQiLCJwbHVnaW5NYXAiLCJwYWNrYWdlUGF0aCIsInJlcG9zaXRvcnkiLCJsaWNlbnNlIiwicmVzb2x2ZVBsdWdpbiIsImJhc2VkaXIiLCJsb2FkIiwicGx1Z2luRGlyIiwianNvbiIsImRlcHMiLCJkZXBlbmRlbmNpZXMiLCJkZXZEZXBzIiwiZGV2RGVwZW5kZW5jaWVzIiwiYWRkIiwicGx1Z2luSW50ZXJmYWNlIiwiTk9USUZJQ0FUSU9OIiwiYmVmb3JlVHJhbnNmb3JtUGx1Z2lucyIsImJlZm9yZVVwbG9hZFBsdWdpbnMiLCJhZnRlclVwbG9hZFBsdWdpbnMiLCJyZW1vdmVDb25maWciLCJldmVudEJ1cyIsIkV2ZW50RW1pdHRlciIsImh0dHBzQWdlbnQiLCJodHRwcyIsIkFnZW50IiwibWF4VmVyc2lvbiIsIm1pblZlcnNpb24iLCJyZWplY3RVbmF1dGhvcml6ZWQiLCJhcHBlbmRGb3JtRGF0YSIsImZvcm0iLCJhcHBlbmQiLCJyZXNwb25zZUludGVyY2VwdG9yIiwicmVzcG9uc2UiLCJzdGF0dXNDb2RlIiwic3RhdHVzIiwicmVzcG9uc2VFcnJvckhhbmRsZXIiLCJlcnJvck9iaiIsIl9jIiwiX2QiLCJfZSIsIl9mIiwiX2ciLCJSZXF1ZXN0IiwiQ09ORklHX0NIQU5HRSIsImhhbmRsZVByb3h5IiwicHJveHlPcHRpb25zIiwiaG9zdCIsImhvc3RuYW1lIiwicG9ydCIsInByb3RvY29sIiwiaGVhZGVycyIsIm1heEJvZHlMZW5ndGgiLCJJbmZpbml0eSIsIm1heENvbnRlbnRMZW5ndGgiLCJodHRwc092ZXJIdHRwIiwiaW5zdGFuY2UiLCJheGlvcyIsImNyZWF0ZSIsImludGVyY2VwdG9ycyIsIm9wdCIsIl9faXNPbGRPcHRpb25zIiwiRm9ybURhdGEiLCJmb3JtRGF0YSIsImdldEhlYWRlcnMiLCJxcyIsInJlcXVlc3RJbnRlcmNlcHRvciIsIm9iaiIsImNvbnRlbnRUeXBlIiwiQ29udGVudFR5cGUiLCJMaWZlY3ljbGUiLCJzdXBlciIsInR0ZlBhdGgiLCJlbXB0eURpclN5bmMiLCJoZWxwR2V0T3B0aW9uIiwiY29uZmlnUGF0aCIsInJhd0lucHV0IiwiVkVSU0lPTiIsIkdVSV9WRVJTSU9OIiwiYmluZCIsInVuc2V0Q29uZmlnIiwiYWRkTGlzdGVuZXIiLCJvbmNlIiwicmVtb3ZlTGlzdGVuZXIiLCJvZmYiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJzZXRNYXhMaXN0ZW5lcnMiLCJnZXRNYXhMaXN0ZW5lcnMiLCJsaXN0ZW5lcnMiLCJyYXdMaXN0ZW5lcnMiLCJsaXN0ZW5lckNvdW50IiwicHJlcGVuZExpc3RlbmVyIiwicHJlcGVuZE9uY2VMaXN0ZW5lciIsImV2ZW50TmFtZXMiLCJjcmVhdGVDb250ZXh0IiwicmF3SW5wdXRQYXRoIiwiY2xvbmVEZWVwIiwiVVBMT0FEX1BST0dSRVNTIiwiQkVGT1JFX1RSQU5TRk9STSIsInRlbXBGaWxlUGF0aCIsImFsbFNldHRsZWQiLCJpbmRleCIsIml0ZW1Jc1VybCIsInRyYW5zZm9ybWVkQnVmZmVyIiwiaXNTa2lwIiwiZXh0ZW50aW9uIiwiZG93bmxvYWRUVEYiLCJoZWljUmVzdWx0IiwiaGVpY0NvbnZlcnQiLCJ0ZW1wSGVpY0NvbnZlcnRGaWxlIiwibmV3RXh0IiwidGVtcEZpbGUiLCJiZWZvcmVUcmFuc2Zvcm0iLCJkb1RyYW5zZm9ybSIsInJlbmFtZUNvbmZpZyIsImJhc2U2NEltYWdlIiwiYmVmb3JlVXBsb2FkIiwiZG9VcGxvYWQiLCJhZnRlclVwbG9hZCIsImhhbmRsZVBsdWdpbnMiLCJjdXJyZW50VHJhbnNmb3JtZXIiLCJCRUZPUkVfVVBMT0FEIiwib3V0cHV0SW1nIiwiQUZURVJfVVBMT0FEIiwiaXNFbmNvZGVPdXRwdXRVUkwiLCJpIiwiaW1nVXJsIiwiRklOSVNIRUQiLCJsaWZlQ3ljbGVQbHVnaW5zIiwicGx1Z2luTmFtZXMiLCJsaWZlQ3ljbGVOYW1lIiwiYWxsIiwiZm9ybWF0UGF0aEhlbHBlciIsInN0YXJ0U2xhc2giLCJlbmRTbGFzaCIsInJvb3RUb0VtcHR5IiwiY2xlYW5QYXRoIiwiZW5jb2RlUGF0aCIsInAiLCJlbmNvZGVVUklDb21wb25lbnQiLCJwb3N0T3B0aW9ucyIsInRva2VuIiwiQXV0aG9yaXphdGlvbiIsImZpbGVuYW1lIiwiaGFuZGxlUmVzRXJyb3IiLCJleHRyYWN0Q29uZmlnIiwidXNlcm5hbWUiLCJwYXNzd29yZCIsInVwbG9hZFBhdGgiLCJ3ZWJQYXRoIiwiY3VzdG9tVXJsIiwiYWxpc3RDb25maWciLCJ0b2tlblN0b3JlIiwicmVmcmVzaGVkQXQiLCJwb3N0IiwiZ2V0QWxpc3RUb2tlbiIsImltZ0xpc3QiLCJmdWxsVXBsb2FkUGF0aCIsInBvc3RDb25maWciLCJ1cGxvYWRSZXMiLCJyZWZyZXNoVXJsIiwiZ2V0SW5mb1VybCIsInJlZnJlc2hSZXMiLCJwYWdlIiwicGVyX3BhZ2UiLCJyZWZyZXNoIiwiZ2V0SW5mb1JlcyIsInNpZ24iLCJlbmNvZGVkUGF0aCIsImdldEN1cnJlbnRVVENEYXRlIiwidG9VVENTdHJpbmciLCJnZW5lcmF0ZVNpZ25hdHVyZSIsImRhdGUiLCJzaWduU3RyaW5nIiwibG9va3VwIiwiYnVja2V0Iiwic2lnbmF0dXJlIiwiY3JlYXRlSG1hYyIsImFjY2Vzc0tleVNlY3JldCIsImFjY2Vzc0tleUlkIiwiYXJlYSIsIkhvc3QiLCJhbGlZdW5PcHRpb25zIiwib3B0aW9uVXJsIiwiRmlsZU5hbWVHZW5lcmF0b3IiLCJtb250aCIsImRheSIsImV4dE5hbWUiLCJtZDUiLCJpbWdCdWZmZXIiLCJtZDVCNjQiLCJtZDVCNjRTaG9ydCIsInNoYTEiLCJzaGEyNTYiLCJ0aW1lc3RhbXAiLCJ0aW1lc3RhbXBNUyIsImZvcm1hdFBhdGgiLCJmaWxlTmFtZUdlbmVyYXRvciIsImZpZWxkcyIsInJlIiwiZ2V0UHJveHlBZ2VudCIsInNzbEVuYWJsZWQiLCJmb3JtYXRlZFByb3h5IiwiZm9ybWF0SHR0cFByb3h5VVJMIiwiSHR0cHNQcm94eUFnZW50IiwiSHR0cFByb3h5QWdlbnQiLCJrZWVwQWxpdmUiLCJrZWVwQWxpdmVNc2VjcyIsInNjaGVkdWxpbmciLCJnZXRGaWxlVVJMIiwiZVRhZyIsInZlcnNpb25JZCIsInNpZ25lZFVybCIsImdldFNpZ25lZFVybCIsImNsaWVudCIsIkdldE9iamVjdENvbW1hbmQiLCJCdWNrZXQiLCJidWNrZXROYW1lIiwiS2V5IiwiSWZNYXRjaCIsIlZlcnNpb25JZCIsImV4cGlyZXNJbiIsInVybE9iamVjdCIsInNlYXJjaCIsImhyZWYiLCJjcmVhdGVTM0NsaWVudCIsImVuZHBvaW50IiwiaHR0cEhhbmRsZXJPcHRzIiwiaHR0cEFnZW50IiwiY2xpZW50T3B0aW9ucyIsInJlZ2lvbiIsImNyZWRlbnRpYWxzIiwiYWNjZXNzS2V5SUQiLCJzZWNyZXRBY2Nlc3NLZXkiLCJ0bHMiLCJmb3JjZVBhdGhTdHlsZSIsInBhdGhTdHlsZUFjY2VzcyIsInJlcXVlc3RIYW5kbGVyIiwiTm9kZUh0dHBIYW5kbGVyIiwiUzNDbGllbnQiLCJjcmVhdGVVcGxvYWRUYXNrIiwiY29udGVudEVuY29kaW5nIiwibWltZSIsImdldFR5cGUiLCJmaWxlVHlwZSIsIkZpbGVUeXBlIiwiZnJvbUJ1ZmZlciIsImV4dHJhY3RJbmZvIiwiUHV0T2JqZWN0Q29tbWFuZCIsIkFDTCIsImFjbCIsIkJvZHkiLCJDb250ZW50RW5jb2RpbmciLCJzZW5kIiwidXJsUHJlZml4IiwiRVRhZyIsImltZ1VSTCIsImZvcm1hdERpc2FibGVCdWNrZXRQcmVmaXhUb1VSTCIsImRpc2FibGVCdWNrZXRQcmVmaXhUb1VSTCIsIkJvb2xlYW4iLCJ0YXNrcyIsImlkeCIsInJlc3VsdHMiLCJidWlsZEdpdGh1YkFwaVVybCIsInJlcG8iLCJleHRyYSIsImJyYW5jaCIsImdpdGh1Yk9wdGlvbnMiLCJkb3dubG9hZF91cmwiLCJoYXNoIiwic2hhIiwiaW1nQmFzZTY0IiwiY2xpZW50SWQiLCJhY2Nlc3NUb2tlbiIsImZvcm1hdEFjY2Vzc1Rva2VuIiwiYWxidW0iLCJhdXRob3JpemF0aW9uIiwicmVxdWVzdE9wdGlvbnMiLCJpbml0UGFnZXMiLCJhbGJ1bUhhc2giLCJnZXRBbGJ1bUhhc2hPcHRpb25zIiwidGltZW91dCIsImFsYnVtTGlzdCIsImltZ3VyT3B0aW9ucyIsImxpbmsiLCJkZWxldGVoYXNoIiwibG9jYWxDb25maWciLCJpbWdUZW1wUGF0aCIsImZpbGVJbWdUZW1wUGF0aCIsImZpbGVVcGxvYWRQYXRoIiwiY29weUZpbGVTeW5jIiwiZ2FsbGVyeVBhdGgiLCJpc1YyIiwidjFIZWFkZXJzIiwiQ29ubmVjdGlvbiIsInYxRm9ybURhdGEiLCJzc2wiLCJ2MkhlYWRlcnMiLCJBY2NlcHQiLCJzdHJhdGVneUlkIiwiYWxidW1JZCIsInBlcm1pc3Npb24iLCJ2MkZvcm1EYXRhIiwic3RyYXRlZ3lfaWQiLCJhbGJ1bV9pZCIsImFnZW50IiwibHNreU9wdGlvbnMiLCJsaW5rcyIsInBpY2JlZCIsInNlcnZlcktleSIsInBpY2xpc3RPcHRpb25zIiwiZnVsbFJlc3VsdCIsInNlbGVjdEFyZWEiLCJnZXRUb2tlbiIsInFpbml1T3B0aW9ucyIsImFjY2Vzc0tleSIsInNlY3JldEtleSIsIm1hYyIsImF1dGgiLCJNYWMiLCJycyIsIlB1dFBvbGljeSIsInVwbG9hZFRva2VuIiwiYmFzZVVybCIsInVybE9wdGlvbnMiLCJTU0hDbGllbnQiLCJOb2RlU1NIIiwiaXNDb25uZWN0ZWQiLCJzdGF0aWMiLCJwcml2YXRlS2V5IiwicGFzc3BocmFzZSIsImxvZ2luSW5mbyIsInByaXZhdGVLZXlQYXRoIiwiY29ubmVjdCIsInJlbW90ZSIsImNoYW5nZVdpblN0eWxlUGF0aFRvVW5peCIsIm1rZGlyIiwicHV0RmlsZSIsImZpbGVNb2RlIiwiZXhlYyIsImRpclBhdGgiLCJkaXJlY3RvcnlNb2RlIiwiZGlyTW9kZSIsImRpcnMiLCJjdXJyZW50UGF0aCIsInNjcmlwdCIsInVzZXIiLCJncm91cCIsIl91c2VyIiwiX2dyb3VwIiwiY2xvc2UiLCJkaXNwb3NlIiwic2Z0cHBsaXN0Q29uZmlnIiwidXBsb2FkVGVtcFBhdGgiLCJnZXRJbnN0YW5jZSIsInJlbW90ZVBhdGgiLCJmaWxlVXNlciIsImNob3duIiwiaW1nVGVtcEZpbGVQYXRoIiwicmVtb3ZlU3luYyIsIm1vdmVTeW5jIiwiYXBpVG9rZW4iLCJiYWNrdXBEb21haW4iLCJkb21haW4iLCJzbWZpbGUiLCJzbW1zQ29uZmlnIiwiaW1hZ2VzIiwidXBsb2FkSGlzdG9yeSIsInNlY3JldElkIiwiYXBwSWQiLCJzaWduVGltZSIsInRvZGF5Iiwic2lnbktleSIsImh0dHBTdHJpbmciLCJzdHJpbmdUb1NpZ24iLCJjdXJyZW50IiwibXVsdGlTaWduYXR1cmUiLCJzaWduSGV4S2V5IiwidGVtcFN0cmluZyIsIm9wIiwiZmlsZWNvbnRlbnQiLCJ0Y1l1bk9wdGlvbnMiLCJ1c2VWNCIsInNsaW0iLCJzb3VyY2VfdXJsIiwiY29uZmlybVRleHQiLCJjYW5jZWxUZXh0IiwidGlwcyIsInRnT3B0aW9ucyIsImNyZWF0ZVJlYWRTdHJlYW0iLCJyZW1vdmUiLCJzcmMiLCJvcGVyYXRvciIsIm1kNVBhc3N3b3JkIiwiTUQ1IiwiZ2V0QW50aUxlZWNoUGFyYW0iLCJhbnRpTGVlY2hUb2tlbiIsImV4cGlyZVRpbWUiLCJ1cmkiLCJleHBpcmUiLCJzdWJzdHJpbmciLCJ1cHl1bk9wdGlvbnMiLCJzdWZmaXgiLCJ1cHQiLCJ3ZWJkYXZwbGlzdE9wdGlvbnMiLCJhdXRoVHlwZSIsIndlYnBhdGgiLCJBdXRoVHlwZSIsIkRpZ2VzdCIsImNyZWF0ZUNsaWVudCIsInBhdGhUb0NyZWF0ZSIsImNyZWF0ZURpcmVjdG9yeSIsInJlY3Vyc2l2ZSIsInB1dEZpbGVDb250ZW50cyIsIm92ZXJ3cml0ZSIsImJ1aWxkSW5VcGxvYWRlcnMiLCJhbGlzdFVwbG9hZGVyIiwiYWxpWXVuVXBsb2FkZXIiLCJhd3NzM3BsaXN0VXBsb2FkZXIiLCJnaXRodWJVcGxvYWRlciIsImltZ3VyVXBsb2FkZXIiLCJsb2NhbFVwbG9hZGVyIiwibHNreVVwbG9hZGVyIiwicGljbGlzdFVwbG9hZGVyIiwicWluaXVVcGxvYWRlciIsInNmdHBVcGxvYWRlciIsInNtbXNVcGxvYWRlciIsInRjWXVuVXBsb2FkZXIiLCJ0ZWxlZ3JhcGhVcGxvYWRlciIsInVwWXVuVXBsb2FkZXIiLCJ3ZWJkYXZwbGlzdFVwbG9hZGVyIiwiZ2V0SW1nU2l6ZSIsIkltZ0Zyb21QYXRoIiwiaW1nU2l6ZSIsIkltZ0Zyb21CYXNlNjQiLCJwbGF0Zm9ybTJTY3JpcHRDb250ZW50IiwiZGFyd2luIiwid2luMzIiLCJ3aW4xMCIsImxpbnV4Iiwid3NsIiwicGxhdGZvcm0yU2NyaXB0RmlsZW5hbWUiLCJnZXRDbGlwYm9hcmRJbWFnZSIsImltYWdlUGF0aCIsImNyZWF0ZUltYWdlRm9sZGVyIiwicGxhdGZvcm0iLCJpc1dzbCIsIm9zIiwicmVsZWFzZSIsImdldEN1cnJlbnRQbGF0Zm9ybSIsInNjcmlwdFBhdGgiLCJleGVjdXRpb24iLCJ0cmltIiwiaW1nUGF0aCIsInNob3VsZEtlZXBBZnRlclVwbG9hZGluZyIsIkRCIiwiZGIiLCJKU09OU3RvcmUiLCJyZWFkIiwiZmx1c2giLCJ1bnNldCIsImxhbmd1YWdlTGlzdCIsIlVQTE9BRF9GQUlMRUQiLCJDSEVDS19TRVRUSU5HUyIsIkNIRUNLX1NFVFRJTkdTX0FORF9ORVRXT1JLIiwiVVBMT0FEX0ZBSUxFRF9SRUFTT04iLCJTRVJWRVJfRVJST1IiLCJBVVRIX0ZBSUxFRCIsIlBJQ0JFRF9TTU1TIiwiUElDQkVEX1NNTVNfVE9LRU4iLCJQSUNCRURfU01NU19NRVNTQUdFX1RPS0VOIiwiUElDQkVEX1NNTVNfQkFDS1VQX0RPTUFJTiIsIlBJQ0JFRF9TTU1TX01FU1NBR0VfQkFDS1VQX0RPTUFJTiIsIlBJQ0JFRF9MT0NBTCIsIlBJQ0JFRF9MT0NBTF9QQVRIIiwiUElDQkVEX0xPQ0FMX01FU1NBR0VfUEFUSCIsIlBJQ0JFRF9MT0NBTF9DVVNUT01VUkwiLCJQSUNCRURfTE9DQUxfTUVTU0FHRV9DVVNUT01VUkwiLCJQSUNCRURfTE9DQUxfV0VCUEFUSCIsIlBJQ0JFRF9MT0NBTF9NRVNTQUdFX1dFQlBBVEgiLCJQSUNCRURfQUxJU1RfUExJU1QiLCJQSUNCRURfQUxJU1RfVVJMIiwiUElDQkVEX0FMSVNUX01FU1NBR0VfVVJMIiwiUElDQkVEX0FMSVNUX1RPS0VOIiwiUElDQkVEX0FMSVNUX01FU1NBR0VfVE9LRU4iLCJQSUNCRURfQUxJU1RfVVNFUk5BTUUiLCJQSUNCRURfQUxJU1RfTUVTU0FHRV9VU0VSTkFNRSIsIlBJQ0JFRF9BTElTVF9QQVNTV09SRCIsIlBJQ0JFRF9BTElTVF9NRVNTQUdFX1BBU1NXT1JEIiwiUElDQkVEX0FMSVNUX1VQTE9BRF9QQVRIIiwiUElDQkVEX0FMSVNUX01FU1NBR0VfVVBMT0FEX1BBVEgiLCJQSUNCRURfQUxJU1RfV0VCX1BBVEgiLCJQSUNCRURfQUxJU1RfTUVTU0FHRV9XRUJfUEFUSCIsIlBJQ0JFRF9BTElTVF9DVVNUT01VUkwiLCJQSUNCRURfQUxJU1RfTUVTU0FHRV9DVVNUT01VUkwiLCJQSUNCRURfQUxJQ0xPVUQiLCJQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZSUQiLCJQSUNCRURfQUxJQ0xPVURfQUNDRVNTS0VZU0VDUkVUIiwiUElDQkVEX0FMSUNMT1VEX0JVQ0tFVCIsIlBJQ0JFRF9BTElDTE9VRF9BUkVBIiwiUElDQkVEX0FMSUNMT1VEX1BBVEgiLCJQSUNCRURfQUxJQ0xPVURfQ1VTVE9NVVJMIiwiUElDQkVEX0FMSUNMT1VEX09QVElPTlMiLCJQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9BUkVBIiwiUElDQkVEX0FMSUNMT1VEX01FU1NBR0VfUEFUSCIsIlBJQ0JFRF9BTElDTE9VRF9NRVNTQUdFX09QVElPTlMiLCJQSUNCRURfQUxJQ0xPVURfTUVTU0FHRV9DVVNUT01VUkwiLCJQSUNCRURfVEVOQ0VOVENMT1VEIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9WRVJTSU9OIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9TRUNSRVRJRCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfU0VDUkVUS0VZIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9BUFBJRCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfQlVDS0VUIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9BUkVBIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9FTkRQT0lOVCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfUEFUSCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfT1BUSU9OUyIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfQ1VTVE9NVVJMIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FQUElEIiwiUElDQkVEX1RFTkNFTlRDTE9VRF9NRVNTQUdFX0FSRUEiLCJQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfUEFUSCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9DVVNUT01VUkwiLCJQSUNCRURfVEVOQ0VOVENMT1VEX01FU1NBR0VfT1BUSU9OUyIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfTUVTU0FHRV9FTkRQT0lOVCIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTSIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9USVAiLCJQSUNCRURfVEVOQ0VOVENMT1VEX1NMSU1fQ09ORklSTSIsIlBJQ0JFRF9URU5DRU5UQ0xPVURfU0xJTV9DQU5DRUwiLCJQSUNCRURfR0lUSFVCIiwiUElDQkVEX0dJVEhVQl9UT0tFTiIsIlBJQ0JFRF9HSVRIVUJfUkVQTyIsIlBJQ0JFRF9HSVRIVUJfUEFUSCIsIlBJQ0JFRF9HSVRIVUJfQlJBTkNIIiwiUElDQkVEX0dJVEhVQl9DVVNUT01VUkwiLCJQSUNCRURfR0lUSFVCX01FU1NBR0VfUkVQTyIsIlBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9CUkFOQ0giLCJQSUNCRURfR0lUSFVCX01FU1NBR0VfUEFUSCIsIlBJQ0JFRF9HSVRIVUJfTUVTU0FHRV9DVVNUT01VUkwiLCJQSUNCRURfUUlOSVUiLCJQSUNCRURfUUlOSVVfQUNDRVNTS0VZIiwiUElDQkVEX1FJTklVX1NFQ1JFVEtFWSIsIlBJQ0JFRF9RSU5JVV9CVUNLRVQiLCJQSUNCRURfUUlOSVVfUEFUSCIsIlBJQ0JFRF9RSU5JVV9VUkwiLCJQSUNCRURfUUlOSVVfT1BUSU9OUyIsIlBJQ0JFRF9RSU5JVV9BUkVBIiwiUElDQkVEX1FJTklVX01FU1NBR0VfUEFUSCIsIlBJQ0JFRF9RSU5JVV9NRVNTQUdFX0FSRUEiLCJQSUNCRURfUUlOSVVfTUVTU0FHRV9PUFRJT05TIiwiUElDQkVEX1FJTklVX01FU1NBR0VfVVJMIiwiUElDQkVEX1RFTEVHUkFQSCIsIlBJQ0JFRF9JTUdVUiIsIlBJQ0JFRF9JTUdVUl9DTElFTlRJRCIsIlBJQ0JFRF9JTUdVUl9VU0VSTkFNRSIsIlBJQ0JFRF9JTUdVUl9BQ0NFU1NfVE9LRU4iLCJQSUNCRURfSU1HVVJfQUxCVU0iLCJQSUNCRURfSU1HVVJfUFJPWFkiLCJQSUNCRURfSU1HVVJfTUVTU0FHRV9DTElFTlRJRCIsIlBJQ0JFRF9JTUdVUl9NRVNTQUdFX1VTRVJOQU1FIiwiUElDQkVEX0lNR1VSX01FU1NBR0VfQUNDRVNTX1RPS0VOIiwiUElDQkVEX0lNR1VSX01FU1NBR0VfQUxCVU0iLCJQSUNCRURfSU1HVVJfTUVTU0FHRV9QUk9YWSIsIlBJQ0JFRF9VUFlVTiIsIlBJQ0JFRF9VUFlVTl9CVUNLRVQiLCJQSUNCRURfVVBZVU5fT1BFUkFUT1IiLCJQSUNCRURfVVBZVU5fUEFTU1dPUkQiLCJQSUNCRURfVVBZVU5fUEFUSCIsIlBJQ0JFRF9VUFlVTl9VUkwiLCJQSUNCRURfVVBZVU5fT1BUSU9OUyIsIlBJQ0JFRF9VUFlVTl9FTkRQT0lOVCIsIlBJQ0JFRF9VUFlVTl9BTlRJX0xFRUNIX1RPS0VOIiwiUElDQkVEX1VQWVVOX0VYUElSRV9USU1FIiwiUElDQkVEX1VQWVVOX01FU1NBR0VfT1BFUkFUT1IiLCJQSUNCRURfVVBZVU5fTUVTU0FHRV9QQVNTV09SRCIsIlBJQ0JFRF9VUFlVTl9NRVNTQUdFX1VSTCIsIlBJQ0JFRF9VUFlVTl9NRVNTQUdFX09QVElPTlMiLCJQSUNCRURfVVBZVU5fTUVTU0FHRV9QQVRIIiwiUElDQkVEX1VQWVVOX01FU1NBR0VfRU5EUE9JTlQiLCJQSUNCRURfV0VCREFWUExJU1QiLCJQSUNCRURfV0VCREFWUExJU1RfSE9TVCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9TU0xFTkFCTEVEIiwiUElDQkVEX1dFQkRBVlBMSVNUX1VTRVJOQU1FIiwiUElDQkVEX1dFQkRBVlBMSVNUX1BBU1NXT1JEIiwiUElDQkVEX1dFQkRBVlBMSVNUX1BBVEgiLCJQSUNCRURfV0VCREFWUExJU1RfV0VCU0lURV9QQVRIIiwiUElDQkVEX1dFQkRBVlBMSVNUX0NVU1RPTVVSTCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9BVVRIVFlQRSIsIlBJQ0JFRF9XRUJEQVZQTElTVF9PUFRJT05TIiwiUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfSE9TVCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1NTTEVOQUJMRUQiLCJQSUNCRURfV0VCREFWUExJU1RfTUVTU0FHRV9VU0VSTkFNRSIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1BBU1NXT1JEIiwiUElDQkVEX1dFQkRBVlBMSVNUX01FU1NBR0VfUEFUSCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX1dFQlNJVEVfUEFUSCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX0NVU1RPTVVSTCIsIlBJQ0JFRF9XRUJEQVZQTElTVF9NRVNTQUdFX09QVElPTlMiLCJQSUNCRURfU0ZUUFBMSVNUIiwiUElDQkVEX1NGVFBQTElTVF9IT1NUIiwiUElDQkVEX1NGVFBQTElTVF9QT1JUIiwiUElDQkVEX1NGVFBQTElTVF9VU0VSTkFNRSIsIlBJQ0JFRF9TRlRQUExJU1RfUEFTU1dPUkQiLCJQSUNCRURfU0ZUUFBMSVNUX1BSSVZBVEVLRVkiLCJQSUNCRURfU0ZUUFBMSVNUX1BSSVZBVEVLRVlfUEFTU1BIUkFTRSIsIlBJQ0JFRF9TRlRQUExJU1RfVVBMT0FEUEFUSCIsIlBJQ0JFRF9TRlRQUExJU1RfQ1VTVE9NVVJMIiwiUElDQkVEX1NGVFBQTElTVF9XRUJTSVRFX1BBVEgiLCJQSUNCRURfU0ZUUFBMSVNUX0ZJTEVfVVNFUiIsIlBJQ0JFRF9TRlRQUExJU1RfRklMRV9NT0RFIiwiUElDQkVEX1NGVFBQTElTVF9ESVJfTU9ERSIsIlBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9IT1NUIiwiUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX1BPUlQiLCJQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfUFJJVkFURUtFWSIsIlBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9QUklWQVRFS0VZX1BBU1NQSFJBU0UiLCJQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfVVBMT0FEUEFUSCIsIlBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9DVVNUT01VUkwiLCJQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfV0VCU0lURV9QQVRIIiwiUElDQkVEX1NGVFBQTElTVF9NRVNTQUdFX0ZJTEVfVVNFUiIsIlBJQ0JFRF9TRlRQUExJU1RfTUVTU0FHRV9GSUxFX01PREUiLCJQSUNCRURfU0ZUUFBMSVNUX01FU1NBR0VfRElSX01PREUiLCJQSUNCRURfUElDTElTVCIsIlBJQ0JFRF9QSUNMSVNUX0hPU1QiLCJQSUNCRURfUElDTElTVF9QT1JUIiwiUElDQkVEX1BJQ0xJU1RfUElDQkVEIiwiUElDQkVEX1BJQ0xJU1RfQ09ORklHTkFNRSIsIlBJQ0JFRF9QSUNMSVNUX0tFWSIsIlBJQ0JFRF9MU0tZX1BMSVNUIiwiUElDQkVEX0xTS1lfVkVSU0lPTiIsIlBJQ0JFRF9MU0tZX01FU1NBR0VfVkVSU0lPTiIsIlBJQ0JFRF9MU0tZX0hPU1QiLCJQSUNCRURfTFNLWV9NRVNTQUdFX0hPU1QiLCJQSUNCRURfTFNLWV9UT0tFTiIsIlBJQ0JFRF9MU0tZX01FU1NBR0VfVE9LRU4iLCJQSUNCRURfTFNLWV9TVFJBVEVHWV9JRCIsIlBJQ0JFRF9MU0tZX01FU1NBR0VfU1RSQVRFR1lfSUQiLCJQSUNCRURfTFNLWV9BTEJVTV9JRCIsIlBJQ0JFRF9MU0tZX01FU1NBR0VfQUxCVU1fSUQiLCJQSUNCRURfTFNLWV9QRVJNSVNTSU9OIiwiUElDQkVEX0xTS1lfTUVTU0FHRV9QRVJNSVNTSU9OIiwiUElDQkVEX0FXU1MzUExJU1QiLCJQSUNCRURfQVdTUzNQTElTVF9BQ0NFU1NLRVlJRCIsIlBJQ0JFRF9BV1NTM1BMSVNUX1NFQ1JFVF9BQ0NFU1NLRVkiLCJQSUNCRURfQVdTUzNQTElTVF9CVUNLRVQiLCJQSUNCRURfQVdTUzNQTElTVF9SRUdJT04iLCJQSUNCRURfQVdTUzNQTElTVF9VUExPQURQQVRIIiwiUElDQkVEX0FXU1MzUExJU1RfRU5EUE9JTlQiLCJQSUNCRURfQVdTUzNQTElTVF9QUk9YWSIsIlBJQ0JFRF9BV1NTM1BMSVNUX1VSTFBSRUZJWCIsIlBJQ0JFRF9BV1NTM1BMSVNUX1BBVEhTVFlMRUFDQ0VTUyIsIlBJQ0JFRF9BV1NTM1BMSVNUX1JFSkVDVFVOQVVUSE9SSVpFRCIsIlBJQ0JFRF9BV1NTM1BMSVNUX0FDTCIsIlBJQ0JFRF9BV1NTM1BMSVNUX0RJU0FCTEVCVUNLRVRQUkVGSVhUT1VSTCIsIlBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfQUNDRVNTS0VZSUQiLCJQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1NFQ1JFVF9BQ0NFU1NLRVkiLCJQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0JVQ0tFVCIsIlBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUkVHSU9OIiwiUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9VUExPQURQQVRIIiwiUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9FTkRQT0lOVCIsIlBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUFJPWFkiLCJQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX1VSTFBSRUZJWCIsIlBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfUEFUSFNUWUxFQUNDRVNTIiwiUElDQkVEX0FXU1MzUExJU1RfTUVTU0FHRV9SRUpFQ1RVTkFVVEhPUklaRUQiLCJQSUNCRURfQVdTUzNQTElTVF9NRVNTQUdFX0FDTCIsIlBJQ0JFRF9BV1NTM1BMSVNUX01FU1NBR0VfRElTQUJMRUJVQ0tFVFBSRUZJWFRPVVJMIiwiQlVJTERJTl9XQVRFUk1BUksiLCJCVUlMRElOX1dBVEVSTUFSS19JU0FERFdBVEVSTUFSSyIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfSVNBRERXQVRFUk1BUksiLCJCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktUWVBFIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktUWVBFIiwiQlVJTERJTl9XQVRFUk1BUktfSVNGVUxMU0NSRUVOV0FURVJNQVJLIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9JU0ZVTExTQ1JFRU5XQVRFUk1BUksiLCJCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktERUdSRUUiLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0RFR1JFRSIsIkJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS1RFWFQiLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1RFWFQiLCJCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktURVhURk9OVFBBVEgiLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRQQVRIIiwiQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLRk9OVFJBVElPIiwiQlVJTERJTl9XQVRFUk1BUktfTUVTU0FHRV9XQVRFUk1BUktGT05UUkFUSU8iLCJCVUlMRElOX1dBVEVSTUFSS19XQVRFUk1BUktGT05UQ09MT1IiLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS0ZPTlRDT0xPUiIsIkJVSUxESU5fV0FURVJNQVJLX1dBVEVSTUFSS0lNQUdFUEFUSCIsIkJVSUxESU5fV0FURVJNQVJLX01FU1NBR0VfV0FURVJNQVJLSU1BR0VQQVRIIiwiQlVJTERJTl9XQVRFUk1BUktfV0FURVJNQVJLUE9TSVRJT04iLCJCVUlMRElOX1dBVEVSTUFSS19NRVNTQUdFX1dBVEVSTUFSS1BPU0lUSU9OIiwiQlVJTERJTl9SRU5BTUUiLCJCVUlMRElOX1JFTkFNRV9GT1JNQVQiLCJCVUlMRElOX1JFTkFNRV9FTkFCTEUiLCJCVUlMRElOX0NPTVBSRVNTIiwiQlVJTERJTl9DT01QUkVTU19RVUFMSVRZIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1FVQUxJVFkiLCJCVUlMRElOX0NPTVBSRVNTX0lTQ09OVkVSVCIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU0NPTlZFUlQiLCJCVUlMRElOX0NPTVBSRVNTX0NPTlZFUlRGT1JNQVQiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfQ09OVkVSVEZPUk1BVCIsIkJVSUxESU5fQ09NUFJFU1NfSVNSRVNJWkUiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRVNJWkUiLCJCVUlMRElOX0NPTVBSRVNTX1JFU0laRVdJRFRIIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX1JFU0laRVdJRFRIIiwiQlVJTERJTl9DT01QUkVTU19SRVNJWkVIRUlHSFQiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFSEVJR0hUIiwiQlVJTERJTl9DT01QUkVTU19JU1JFU0laRUJZUEVSQ0VOVCIsIkJVSUxESU5fQ09NUFJFU1NfTUVTU0FHRV9JU1JFU0laRUJZUEVSQ0VOVCIsIkJVSUxESU5fQ09NUFJFU1NfSVNGTElQIiwiQlVJTERJTl9DT01QUkVTU19JU0ZMT1AiLCJCVUlMRElOX0NPTVBSRVNTX1JFU0laRVBFUkNFTlQiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUkVTSVpFUEVSQ0VOVCIsIkJVSUxESU5fQ09NUFJFU1NfU0tJUFJFU0laRU9GU01BTExJTUciLCJCVUlMRElOX0NPTVBSRVNTX0lTUk9UQVRFIiwiQlVJTERJTl9DT01QUkVTU19NRVNTQUdFX0lTUk9UQVRFIiwiQlVJTERJTl9DT01QUkVTU19ST1RBVEVERUdSRUUiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfUk9UQVRFREVHUkVFIiwiQlVJTERJTl9DT01QUkVTU19JU1JFTU9WRUVYSUYiLCJCVUlMRElOX0NPTVBSRVNTX01FU1NBR0VfSVNSRU1PVkVFWElGIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX0lOU1RBTExfU1VDQ0VTUyIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRCIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9JTlNUQUxMX0ZBSUxFRF9SRUFTT04iLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fSU5TVEFMTF9GQUlMRURfUEFUSCIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfU1VDQ0VTUyIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VTklOU1RBTExfRkFJTEVEIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfUkVBU09OIiwiUExVR0lOX0hBTkRMRVJfUExVR0lOX1VOSU5TVEFMTF9GQUlMRURfVkFMSUQiLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX1NVQ0NFU1MiLCJQTFVHSU5fSEFORExFUl9QTFVHSU5fVVBEQVRFX0ZBSUxFRCIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1JFQVNPTiIsIlBMVUdJTl9IQU5ETEVSX1BMVUdJTl9VUERBVEVfRkFJTEVEX1ZBTElEIiwiZW4iLCJJMThuTWFuYWdlciIsIm9iamVjdEFkYXB0ZXIiLCJPYmplY3RBZGFwdGVyIiwibGFuZ3VhZ2UiLCJJMThuIiwiYWRhcHRlciIsImRlZmF1bHRMYW5ndWFnZSIsImxvYWRPdXR0ZXJJMThuIiwiaTE4bkZvbGRlciIsImdldE91dHRlckkxOG5Gb2xkZXIiLCJyZWFkZGlyU3luYyIsIndpdGhGaWxlVHlwZXMiLCJpc0ZpbGUiLCJlbmRzV2l0aCIsImkxOG5GaWxlUGF0aCIsImkxOG5GaWxlIiwiaTE4bkZpbGVPYmoiLCJ5YW1sIiwicGF0aEV4aXN0c1N5bmMiLCJhZGRMb2NhbGUiLCJsb2NhbGVzIiwib3JpZ2luTG9jYWxlcyIsImdldExvY2FsZSIsIm5ld0xvY2FsZXMiLCJtZXJnZSIsInNldExvY2FsZSIsImFkZExhbmd1YWdlIiwiUGljR28iLCJfcGx1Z2luTG9hZGVyIiwiaW5pdENvbmZpZ1BhdGgiLCJpbml0Q29uZmlnIiwiZW5zdXJlRmlsZVN5bmMiLCJfY29uZmlnIiwibGlmZWN5Y2xlIiwicmVnaXN0ZXJDb21tYW5kcyIsInByb3BOYW1lIiwic3RhcnQiLCJjbGVhbnVwIl0sIm1hcHBpbmdzIjoicW5EQUlBLE1BQU1BLEdBQWdCLENBQ3BCQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxLQUVBLElBQUlDLEVBQVVOLEVBQUlNLFFBQVFMLFFBQVFBLEdBQVNDLFlBQVlBLEdBQWFDLE1BQU1BLElBQ3RFRSxNQUFBQSxTQUFBQSxFQUFTRSxTQUNYRCxFQUFVQSxFQUFRRSxPQUFPLHNCQUF1QixzQ0FFOUNILE1BQUFBLFNBQUFBLEVBQVNJLFlBQ1hILEVBQVVBLEVBQVFFLE9BQU8sNEJBQTZCLDZDQUV4REYsRUFBUUYsT0FBT0EsSUFHWE0sR0FBeUIsQ0FDN0JDLE9BQVNDLElBQ1AsTUFBTVosRUFBTVksRUFBSVosSUFDaEJELEdBQ0VDLEVBQ0EsdUJBQ0EsdUJBQ0EsT0FDQSxDQUFDYSxFQUFtQlAsS0FDbEIsTUFBTUMsTUFBRUEsRUFBS0UsU0FBRUEsR0FBYUgsRUFDdEJELEVBQVUsQ0FBRUUsTUFBQUEsRUFBT0UsU0FBQUEsR0FDekJHLEVBQUlGLGNBQWNJLFFBQVFELEVBQVNSLEdBQVNVLE9BQU1DLElBQ2hESixFQUFJSyxJQUFJQyxNQUFNRixRQUdsQixDQUFFVCxPQUFPLEVBQU1FLFVBQVUsSUFFM0JWLEdBQWNDLEVBQUsseUJBQTBCLHlCQUEwQixNQUFPYSxJQUM1RUQsRUFBSUYsY0FBY1MsVUFBVU4sR0FBU0UsT0FBTUMsSUFDekNKLEVBQUlLLElBQUlDLE1BQU1GLFNBR2xCakIsR0FDRUMsRUFDQSxzQkFDQSxzQkFDQSxNQUNBLENBQUNhLEVBQW1CUCxLQUNsQixNQUFNQyxNQUFFQSxFQUFLRSxTQUFFQSxHQUFhSCxFQUN0QkQsRUFBVSxDQUFFRSxNQUFBQSxFQUFPRSxTQUFBQSxHQUN6QkcsRUFBSUYsY0FBY1UsT0FBT1AsRUFBU1IsR0FBU1UsT0FBT0MsSUFDaERKLEVBQUlLLElBQUlDLE1BQU1GLFFBR2xCLENBQUVULE9BQU8sRUFBTUUsVUFBVSxNQ3REekJZLEdBQWtCLENBQ3RCVixPQUFTQyxJQUNLQSxFQUFJWixJQUNaTSxRQUFRRSxPQUFPLHNCQUF1QixxQkNjeEMsU0FBVWMsR0FBc0JDLEdBQ3BDLE1BQU1DLEVBQVEsaUVBQ2QsT0FBT0MsTUFBTUMsS0FBSyxDQUFFSCxPQUFBQSxJQUNqQkksS0FBSSxJQUFNSCxFQUFNSSxPQUFPQyxLQUFLQyxNQUFNRCxLQUFLRSxTQUFXUCxFQUFNRCxXQUN4RFMsS0FBSyxJQVdWLFNBQVNDLEdBQWFDLEdBQ3BCLE9BQWlDLElBQTFCQSxFQUFJQyxXQUFXWixPQUFlLElBQUlXLElBQVFBLEVBQUlDLFdBR3ZELFNBQVNDLEdBQU9DLEdBQ2QsT0FBT0MsRUFBT0MsV0FBVyxPQUFPbkIsT0FBT2lCLEdBQU9HLE9BQU8sT0FHakQsU0FBVUMsR0FDZEMsRUFDQUMsRUFDQUMsRUFDQUMsR0FFQSxNQUFNQyxFQUFNLElBQUlDLEtBQ1ZDLEVBQU9GLEVBQUlHLGNBQWNkLFdBQ3pCZSxFQUFlQyxFQUFLQyxTQUFTVixFQUFTUyxFQUFLRSxRQUFRWCxJQUNuRFksRUFBOEMsQ0FDbEQsTUFBTyxJQUFNTixFQUNiLE1BQU8sSUFBTUEsRUFBS08sTUFBTSxHQUN4QixNQUFPLElBQU10QixHQUFhYSxFQUFJVSxXQUFhLEdBQzNDLE1BQU8sSUFBTXZCLEdBQWFhLEVBQUlXLFdBQzlCLE1BQU8sSUFBTXhCLEdBQWFhLEVBQUlZLFlBQzlCLE1BQU8sSUFBTXpCLEdBQWFhLEVBQUlhLGNBQzlCLE1BQU8sSUFBTTFCLEdBQWFhLEVBQUljLGNBQzlCLE9BQVEsSUFBTWQsRUFBSWUsa0JBQWtCMUIsV0FBVzJCLFNBQVMsRUFBRyxLQUMzRCxRQUFTLElBQU0xQixHQUFPUyxHQUFjSyxHQUNwQyxXQUFZLElBQU1kLEdBQU9TLEdBQWNLLEdBQWNLLE1BQU0sRUFBRyxJQUM5RCxhQUFjLElBQU9YLEVBQWdCTyxFQUFLQyxTQUFTUixFQUFlTyxFQUFLRSxRQUFRVCxJQUFrQk0sRUFDakcsU0FBVSxJQUFNYSxJQUFTQyxRQUFRLEtBQU0sSUFDdkMsY0FBZSxJQUFNbEIsRUFBSW1CLFVBQVU5QixZQUVyQyxRQUNtQitCLElBQWpCdkIsSUFDRXdCLE9BQU9DLEtBQUtkLEdBQWVlLE1BQUtDLEdBQVEzQixFQUFhNEIsU0FBU0QsT0FDN0QzQixFQUFhNEIsU0FBUyxrQkFDdEI1QixFQUFhNEIsU0FBUyxRQUV6QixPQUFPN0IsRUFFVCxNQUFNOEIsRUFBTXJCLEVBQUtFLFFBQVFYLEdBQ3pCLElBQUkrQixFQUNGTixPQUFPQyxLQUFLZCxHQUFlb0IsUUFBTyxDQUFDQyxFQUFLQyxJQUMvQkQsRUFBSVgsUUFBUSxJQUFJYSxPQUFPRCxFQUFLLEtBQU10QixFQUFjc0IsT0FDdERqQyxHQUFnQjZCLEVBWXJCLE9BVkFDLEVBQVVBLEVBQVFULFFBREQsaUJBQ21CLENBQUNjLEVBQUdDLElBRS9CekQsR0FEUTBELFNBQVNELEVBQVEsT0FHbENOLEVBQVVBLEVBQVFULFFBQVEsNkJBQTZCLENBQUNpQixFQUFTQyxFQUFLQyxLQUNwRUEsRUFBUXRELEtBQUt1RCxJQUFJLEVBQUdELEdBQVMsR0FHN0IsT0FGY2hDLEVBQUtrQyxRQUFRM0MsR0FBUzRDLE1BQU1uQyxFQUFLb0MsS0FDbkNoQyxNQUFNLEVBQUk0QixHQUFPVCxRQUFPLENBQUNjLEVBQUdDLElBQU0sR0FBR0QsS0FBS0MsTUFDM0N6QixRQUFRLEtBQU0sT0FFcEJTLEVBR0YsTUFBTWlCLEdBQVNDLEdBQXlCLGVBQWVDLEtBQUtELEdBRXRERSxHQUFlRixJQUMxQkEsRUFBTUEsR0FBTyxHQUNiLElBRUUsT0FBT0EsSUFBUUcsVUFBVUgsR0FDekIsTUFBTzNFLEdBQ1AsT0FBTyxJQUdFK0UsR0FBbUJKLElBQ3pCRSxHQUFZRixLQUNmQSxFQUFNSyxVQUFVTCxJQUVYQSxHQUdJTSxHQUFnQkMsSUFDM0IsSUFDRSxNQUFNQyxNQUFFQSxFQUFRLEVBQUNDLE9BQUVBLEVBQVMsRUFBQ0MsS0FBRUEsR0FBU0MsRUFBVUosR0FFbEQsTUFBTyxDQUNMSyxNQUFNLEVBQ05KLE1BQUFBLEVBQ0FDLE9BQUFBLEVBQ0EvQyxRQUxjZ0QsRUFBTyxJQUFJQSxJQUFTLFFBT3BDLE1BQU9yRixHQUVQLE1BQU8sQ0FDTHVGLE1BQU0sRUFDTkosTUFBTyxJQUNQQyxPQUFRLElBQ1IvQyxRQUFTLFVBS0ZtRCxHQUFZQyxNQUFPQyxJQUM5QixJQUNFLE1BQU8sQ0FDTHJELFFBQVNGLEVBQUtFLFFBQVFxRCxHQUN0QkMsU0FBVXhELEVBQUtDLFNBQVNzRCxHQUN4QkUsYUFBY0MsRUFBU0gsR0FDdkJJLFNBQVMsR0FFWCxNQUFNQyxHQUNOLE1BQU8sQ0FDTEMsT0FBUSxhQUFhTixVQUNyQkksU0FBUyxLQUtGRyxHQUFhUixNQUFPZCxFQUFhL0UsS0FFNUMsSUFBSXNHLEVBREp2QixFQUFNSSxHQUFnQkosR0FFdEIsTUFBTXdCLEVBQVksSUFBSUMsU0FBaUMsQ0FBQ0MsRUFBU0MsS0FDOUQsaUJBQ0MsSUFDRSxNQUFNQyxRQUFZM0csRUFDZjRHLFFBQVEsQ0FDUEMsT0FBUSxNQUNSOUIsSUFBQUEsRUFDQStCLHlCQUF5QixFQUN6QkMsYUFBYyxnQkFFZkMsTUFBS0MsR0FDR0EsRUFBS0MsT0FFaEJDLGFBQWFiLEdBQ2IsTUFBTWMsRUFBVSxJQUFJQyxFQUFJdEMsR0FBS3VDLFNBQzdCLElBQUk3RSxFQUFVLEdBQ2QsSUFFRUEsRUFEa0IsSUFBSTRFLEVBQUl0QyxHQUFLd0MsYUFDWEMsSUFBSSxXQUFhakYsRUFBS0UsUUFBUTJFLElBQVksR0FDOUQsTUFBTzlHLEdBQ1BtQyxFQUFVRixFQUFLRSxRQUFRMkUsSUFBWSxJQUVoQzNFLEVBQVFnRixXQUFXLE1BQVFoRixJQUM5QkEsRUFBVSxJQUFJQSxLQUVoQmdFLEVBQVEsQ0FDTlQsT0FBUVcsRUFDUlosU0FBVXhELEVBQUtDLFNBQVM0RSxHQUN4QjNFLFFBQUFBLEVBQ0F5RCxTQUFTLElBRVgsTUFBTzVGLEdBQ1A2RyxhQUFhYixHQUNiRyxFQUFRLENBQ05QLFNBQVMsRUFFVEUsT0FBUSxXQUFXckIsWUFBNEIsVUFBZHpFLE1BQUFBLE9BQUssRUFBTEEsRUFBT29ILGVBQU8sSUFBQXZCLEVBQUFBLEVBQUksU0FuQ3hELEdBc0NJaEcsTUFBTXVHLE1BRVBpQixFQUFpQixJQUFJbkIsU0FBa0NDLElBQzNESCxFQUFZc0IsWUFBVyxLQUNyQm5CLEVBQVEsQ0FDTlAsU0FBUyxFQUNURSxPQUFRLFdBQVdyQixnQkFFcEIsUUFFTCxPQUFPeUIsUUFBUXFCLEtBQUssQ0FBQ3RCLEVBQVdvQixLQVlyQkcsR0FBcUJDLEdBQzVCLHlCQUF5Qi9DLEtBQUsrQyxHQUN6QixRQUNFQSxFQUFLTixXQUFXLGlCQUNsQixTQUNFTyxHQUFhRCxHQUNmLFNBRUYsVUFVSUMsR0FBZ0JDLElBQzNCLEdBQUkxRixFQUFLMkYsV0FBV0QsR0FDbEIsT0FBTyxFQUVULE1BQU1FLEVBQWE1RixFQUFLbkIsS0FBS2dILFFBQVFDLE1BQU9KLEdBQzVDLE9BQUlLLEVBQUdDLFdBQVdKLE1BR2RGLEVBQVd0RSxTQUFTLE9BQVFzRSxFQUFXdEUsU0FBUyxRQTZCekM2RSxHQUEyQixDQUFDVCxFQUFjVSxFQUFRLEtBQzdEQSxFQUFRLElBQUlBLGtCQUFzQlYsSUFBUyxnQkFBZ0JBLElBWWhEVyxHQUF1QixDQUFDVCxFQUFvQlUsRUFBNEJDLFdBRW5GLE9BRHVCZCxHQUFrQkcsSUFFdkMsSUFBSyxTQUNMLElBQUssUUFDSCxPQUFPQSxFQUNULElBQUssU0FDSCxPQUFPTyxHQUF5QlAsR0FDbEMsUUFBUyxDQUdQLElBQUlFLEVBQWFGLEVBQ2pCLE9BQUkxRixFQUFLMkYsV0FBV0QsSUFBZUssRUFBR0MsV0FBV04sR0FDeENZLEdBQW9CVixJQUc3QkEsRUFBYTVGLEVBQUtuQixLQUFLZ0gsUUFBUUMsTUFBT0osR0FDbENLLEVBQUdDLFdBQVdKLEdBQ1RVLEdBQW9CVixJQUc3QlEsRUFBT0csS0FBSyxxQkFBcUJiLEtBQzFCLFFBaUJBYyxHQUFzQixDQUFDZCxFQUFvQlUsRUFBNEJDLGlCQUVsRixPQUR1QmQsR0FBa0JHLElBRXZDLElBQUssU0FDSCxPQUFPZSxHQUFvQmYsR0FDN0IsSUFBSyxRQUNILE9BQU9lLEdBQW9CZixHQUFZLEdBQ3pDLElBQUssU0FDSCxPQUFPZSxHQUFvQlIsR0FBeUJQLElBQ3RELFFBQVMsQ0FJUCxJQUFLSyxFQUFHQyxXQUFXTixHQUVqQixPQURBVSxFQUFPRyxLQUFLLHNCQUFzQmIsS0FDM0IsR0FFVCxNQUFNZ0IsRUFBa0IxRyxFQUFLMkcsTUFBTTlILEtBQUs2RyxFQUFZLGdCQUNwRCxHQUFLSyxFQUFHQyxXQUFXVSxHQUdaLENBQ0wsTUFBTUUsRUFBTUMsRUFBYUgsSUFBb0IsR0FDN0MsT0FBZSxRQUFWOUMsRUFBQWdELEVBQUlwQixZQUFNLElBQUE1QixPQUFBLEVBQUFBLEVBQUF4QyxTQUFTLGtCQU1qQndGLEVBQUlwQixNQUxUWSxFQUFPRyxLQUNMLDJDQUE0Q0ssRUFBSXBCLE1BQW1CLHNEQUU5RCxJQVBULE9BREFZLEVBQU9HLEtBQUssc0JBQXNCYixLQUMzQixNQXNCRlksR0FBdUJRLEdBQ2xCQSxFQUFRM0UsTUFBTW5DLEVBQUtvQyxLQUNwQnZELEtBQUssS0FVVDRILEdBQXNCLENBQUNmLEVBQW9CUSxHQUFpQixLQUN2RSxHQUFLUixFQUFXdEUsU0FBUyxLQUVsQixDQUNMLElBQUkyRixFQUFNLGtDQUVOYixJQUNGYSxFQUFNLDRDQUVSLE1BQU1DLEVBQVd0QixFQUFXdUIsTUFBTUYsR0FDbEMsT0FBS0MsRUFJSUEsRUFBUyxJQUhoQlgsUUFBUUUsS0FBSyxpQ0FDTmIsR0FWVCxPQUFPQSxHQXFCRXdCLEdBQWtCLEdBTWxCQyxHQUEwQnBGLEdBQzlCbUYsR0FBZ0JoRyxNQUFLa0csR0FBYXJGLEVBQUltRCxXQUFXa0MsS0FVN0NDLEdBQXNCbkosR0FDWCxpQkFBWEEsSUFBd0JJLE1BQU1nSixRQUFRcEosSUFBVzhDLE9BQU9DLEtBQUsvQyxHQUFRRSxPQUFTLEVBTXJGLFNBQVVtSixHQUFhQyxHQUMzQixJQUNFLE9BQU9DLEtBQUtDLE1BQU1GLEdBQ2xCLE1BQU96SixHQUNQLE9BQU95SixHQUlKLE1BQU1HLEdBQWMsQ0FBQzVJLEVBQXVCLElBQzFDNkksTUFBTUMsT0FBTzlJLElBQVEsRUFBSThJLE9BQU85SSxHQUc1QitJLEdBQVEsSUFBd0MsZ0JBQXpCakMsUUFBUWtDLElBQUlDLFNBc0JoRCxNQUFNQyxHQUE0QmpJLEVBQUtuQixLQUFLcUosVUFBVyxTQUFVLGVBRTFENUUsZUFBZTZFLEdBQ3BCQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxHQUVBSCxHQUNHQSxHQUF1QkEsRUFBc0IsR0FBS0EsRUFBc0IsRUFBSSxJQUFPQSxFQUN0RixNQUFNSSxFQUFRQyxFQUFNWixFQUFLLENBQUVhLFVBQVUsS0FDN0JqRyxNQUFPa0csRUFBVyxXQUFjSCxFQUFNSSxXQUN4Q0MsUUFzQlI5RixlQUNFK0UsRUFDQUMsRUFDQUcsRUFDQUMsRUFDQUMsRUFDQUMsRUFDQUMsRUFDQUssRUFBbUIsSUFDbkJWLEVBQTBCLEdBRTFCLElBQUlZLEVBQ2tCLFVBQWxCZixHQUNGUSxFQUFxQkEsR0FBc0JaLEdBQzNDbUIsUUFBa0JKLEVBQU1ILEdBQW9CUSxZQUU1Q0QsUUE3RUo5RixlQUNFZ0YsRUFDQUcsRUFDQWEsRUFDQUMsR0FFQWQsRUFBUUEsR0FBTyxLQUNmYyxFQUFjQSxHQUFhakIsRUFFM0IsTUFDTXBMLEVBQXVDLENBQzNDc00sT0FBUSxNQUNSQyxXQUFZLENBQ1ZDLEtBTEpKLEVBQVNBLEdBQVEsOEJBUVhLLEVBUFdDLEVBQVVDLFNBQVNOLEdBT1hPLE9BQU9yQixFQUFNdkwsR0FDdEMsT0FBTzZNLE9BQU94TCxLQUFLb0wsR0E0RENLLENBQ2hCMUIsRUFDQUcsRUFDQUcsRUFDQUYsR0FBcUJKLEdBR3pCLE1BQVF0RixNQUFPaUgsRUFBZ0JoSCxPQUFRaUgsU0FhekM1RyxlQUF1QnlGLEdBQ3JCLE1BQU0vRixNQUFFQSxFQUFLQyxPQUFFQSxTQUFpQitGLEVBQU1ELEdBQU9JLFdBQzdDLE1BQU8sQ0FBRW5HLE1BQU9BLEdBQVMsSUFBS0MsT0FBUUEsR0FBVSxLQWZpQmtILENBQVFmLEdBQ25FZ0IsRUFBdUIxTCxLQUFLQyxNQUFNdUssRUFBV3ZCLEdBQVlnQixJQUN6RDBCLEVBQXdCM0wsS0FBS0MsTUFBT3lMLEVBQXVCRixFQUFtQkQsR0FDcEYsYUFBYWpCLEVBQU1JLEdBQ2hCa0IsT0FBT0YsRUFBc0JDLEVBQXVCLENBQ25ERSxJQUFLLFdBRU5DLE9BQU9oQyxFQUFpQixDQUN2QmlDLFdBQVksQ0FBRUMsRUFBRyxJQUFLQyxFQUFHLElBQUtySSxFQUFHLElBQUtzSSxNQUFPLEtBRTlDdkIsV0F2RHFCd0IsQ0FDdEJ4QyxFQUNBQyxFQUNBRyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBSyxFQUNBVixHQUVGLGFBQWFPLEVBQ1YrQixVQUFVLENBQ1QsQ0FDRTVMLE1BQU9rSyxFQUNQMkIsUUFBU2pDLEdBQVksWUFDckJrQyxLQUFNekMsS0FHVGMsV0E0Q0wsTUFBTTRCLEdBQWEsSUFBSUMsSUFDZEEsRUFBT0MsT0FBTUMsR0FDZEEsTUFBQUEsSUFDaUIsaUJBQVZBLEVBQXFDLEtBQVZBLEVBQ2pCLGlCQUFWQSxFQUEyQkEsRUFBUSxFQUN6QixpQkFBVkEsR0FBMkJwSyxPQUFPQyxLQUFLbUssR0FBT2hOLE9BQVMsS0FRaEVpTixHQUE2QixDQUNqQyxPQUNBLEtBQ0EsT0FDQSxNQUNBLE9BQ0EsUUFDQSxPQUNBLE1BQ0EsTUFDQSxNQUNBLFNBQ0EsWUFDQSxNQUNBLE1BQ0EsTUFDQSxNQUNBLE1BQ0EsT0FDQSxNQUNBLElBQ0EsUUFNSUMsR0FBa0IsQ0FDdEIsTUFDQSxPQUNBLE1BQ0EsT0FDQSxNQUNBLE9BQ0EsTUFDQSxNQUNBLE1BQ0EsT0FDQSxPQUNBLE9BQ0EsT0FHSUMsR0FBcUJDLEdBQTRCSCxHQUEyQmpLLFNBQVNvSyxHQUVwRmxJLGVBQWVtSSxHQUNwQnJELEVBQ0FsTCxFQUNBb0wsRUFDQWxDLEdBRUEsSUFDRSxJQUFJMkMsRUFBcUJDLEVBQU1aLEVBQUssQ0FBRWEsVUFBVSxJQWlCaEQsT0FoQkFGLEVBQVFDLFFBQ0FiLEdBQ0pDLEVBQ0FsTCxFQUFRbUwsZUFBaUIsT0FDekJDLEVBQ0FwTCxFQUFRcUwsc0JBQ1JaLEdBQVl6SyxFQUFRc0wsaUJBQ3BCdEwsRUFBUXdPLGNBQ1J4TyxFQUFRd0wsa0JBQ1JmLEdBQVl6SyxFQUFReUwscUJBQ3BCekwsRUFBUTBMLGVBQ1IxTCxFQUFRMkwsbUJBQ1IzTCxFQUFReU8sbUJBRVYsQ0FBRTFDLFVBQVUsVUFFREYsRUFBTU0sV0FDbkIsTUFBT3RMLEdBRVAsT0FEQXFJLEVBQU9ySSxNQUFNLDhCQUE4QkEsS0FDcENxSyxHQUlYLFNBQVN3RCxHQUFjMU8sR0FDckIsTUFBTTJPLEVBQ2dDLGlCQUE3QjNPLEVBQVEyTyxpQkFBZ0N0RSxHQUFVckssRUFBUTJPLGtCQUFvQjNPLEVBQVEyTyxpQkFDL0YsTUFBTyxDQUNMQyxRQUFTbkUsR0FBWXpLLEVBQVE0TyxTQUM3QkMsVUFBVzdPLEVBQVE2TyxZQUFhLEVBQ2hDQyxjQUFlOU8sRUFBUThPLGVBQWlCLE1BQ3hDQyxTQUFVL08sRUFBUStPLFdBQVksRUFDOUJDLGFBQWN2RSxHQUFZekssRUFBUWdQLGNBQ2xDQyxZQUFheEUsR0FBWXpLLEVBQVFpUCxhQUNqQ0MscUJBQXNCbFAsRUFBUWtQLHVCQUF3QixFQUN0REMsa0JBQW1CblAsRUFBUW1QLG9CQUFxQixFQUNoREMsY0FBZTNFLEdBQVl6SyxFQUFRb1AsZUFDbkNDLFNBQVVyUCxFQUFRcVAsV0FBWSxFQUM5QkMsT0FBUXRQLEVBQVFzUCxTQUFVLEVBQzFCQyxPQUFRdlAsRUFBUXVQLFNBQVUsRUFDMUJDLGFBQWMvRSxHQUFZekssRUFBUXdQLGNBQ2xDQyxPQUFRelAsRUFBUXlQLFFBQVUsT0FDMUJkLGlCQUFrQkEsR0FBb0IsSUFJbkN2SSxlQUFlc0osR0FDcEJ4RSxFQUNBbEwsRUFDQTJQLEVBQ0F6RyxHQUVBbEosRUFBVTBPLEdBQWMxTyxHQUN4QixJQUVFLEdBREEyUCxFQUFZQyxHQUFrQkQsSUFDekJ2QixHQUFnQmxLLFNBQVN5TCxJQUE0QixRQUFkQSxFQUFxQixPQUFPekUsRUFDeEUsSUFBSVcsRUFBcUJDLEVBQU1aLEVBQUssQ0FBRWEsVUFBVSxJQUM1QzZDLEVBQVUsSUFJZCxHQUhJYixHQUFXL04sRUFBUTRPLFVBQVk1TyxFQUFRNE8sUUFBVyxNQUNwREEsRUFBVTVPLEVBQVE0TyxTQUVoQjVPLEVBQVFtUCxtQkFDVixHQUFJcEIsR0FBVy9OLEVBQVFvUCxlQUFnQixDQUNyQyxNQUFNUyxRQUFtQmhFLEVBQU1JLFdBQVcxRSxNQUFLMEUsR0FBWUEsRUFBU25HLFFBQzlEZ0ssUUFBb0JqRSxFQUFNSSxXQUFXMUUsTUFBSzBFLEdBQVlBLEVBQVNsRyxTQUNqRThKLEdBQWNDLElBQ2hCakUsRUFBUUEsRUFBTXVCLE9BQ1o1TCxLQUFLdU8sTUFBT0YsRUFBYTdQLEVBQVFvUCxjQUFrQixLQUNuRDVOLEtBQUt1TyxNQUFPRCxFQUFjOVAsRUFBUW9QLGNBQWtCLEtBQ3BELENBQ0UvQixJQUFLLGtCQUtSLEdBQUlyTixFQUFRK08sU0FDakIsR0FDa0MsaUJBQXpCL08sRUFBUWdQLGNBQ2ZoUCxFQUFRZ1AsYUFBZSxHQUNRLGlCQUF4QmhQLEVBQVFpUCxhQUNmalAsRUFBUWlQLFlBQWMsRUFFdEJwRCxFQUFRQSxFQUFNdUIsT0FBT3BOLEVBQVFpUCxZQUFhalAsRUFBUWdQLGFBQWMsQ0FDOUQzQixJQUFLLGNBRUYsR0FDMkIsaUJBQXpCck4sRUFBUWdQLGNBQ2ZoUCxFQUFRZ1AsYUFBZSxJQUNTLGlCQUF4QmhQLEVBQVFpUCxhQUFvRCxJQUF4QmpQLEVBQVFpUCxhQUNwRCxDQUNBLE1BQU1ZLFFBQW1CaEUsRUFBTUksV0FBVzFFLE1BQUswRSxHQUFZQSxFQUFTbkcsUUFDOURnSyxRQUFvQmpFLEVBQU1JLFdBQVcxRSxNQUFLMEUsR0FBWUEsRUFBU2xHLFNBQ3JFLEdBQUk4SixHQUFjQyxLQUNYOVAsRUFBUWtQLHNCQUF5QmxQLEVBQVFrUCxzQkFBd0JsUCxFQUFRZ1AsYUFBZWMsR0FBYyxDQUN6RyxNQUFNRSxFQUFhaFEsRUFBUWdQLGFBQWVjLEVBQzFDakUsRUFBUUEsRUFBTXVCLE9BQU81TCxLQUFLdU8sTUFBTUYsRUFBYUcsR0FBYWhRLEVBQVFnUCxhQUFjLENBQzlFM0IsSUFBSyxpQkFJTixHQUMwQixpQkFBeEJyTixFQUFRaVAsYUFDZmpQLEVBQVFpUCxZQUFjLElBQ1csaUJBQXpCalAsRUFBUWdQLGNBQXNELElBQXpCaFAsRUFBUWdQLGNBQ3JELENBQ0EsTUFBTWEsUUFBbUJoRSxFQUFNSSxXQUFXMUUsTUFBSzBFLEdBQVlBLEVBQVNuRyxRQUM5RGdLLFFBQW9CakUsRUFBTUksV0FBVzFFLE1BQUswRSxHQUFZQSxFQUFTbEcsU0FDckUsR0FBSThKLEdBQWNDLEtBQ1g5UCxFQUFRa1Asc0JBQXlCbFAsRUFBUWtQLHNCQUF3QmxQLEVBQVFpUCxZQUFjWSxHQUFhLENBQ3ZHLE1BQU1HLEVBQWFoUSxFQUFRaVAsWUFBY1ksRUFDekNoRSxFQUFRQSxFQUFNdUIsT0FBT3BOLEVBQVFpUCxZQUFhek4sS0FBS3VPLE1BQU1ELEVBQWNFLEdBQWEsQ0FDOUUzQyxJQUFLLFlBaUJmLEdBWElyTixFQUFRcVAsVUFBWXJQLEVBQVF3UCxlQUM5QjNELEVBQVFBLEVBQU15QixPQUFPdE4sRUFBUXdQLGFBQWMsQ0FDekNqQyxXQUFZLENBQUVDLEVBQUcsSUFBS0MsRUFBRyxJQUFLckksRUFBRyxJQUFLc0ksTUFBTyxNQUc3QzFOLEVBQVFzUCxTQUNWekQsRUFBUUEsRUFBTW9FLFFBRVpqUSxFQUFRdVAsU0FDVjFELEVBQVFBLEVBQU1xRSxRQUVabFEsRUFBUTZPLFVBQVcsQ0FDckIsTUFBTXNCLEVBQVlDLEdBQW1CcFEsRUFBUzJQLEdBQzFDUSxJQUFjUixJQUNoQjlELEVBQVFBLEVBQU13RSxTQUFTRixFQUFXLENBQ2hDdkIsUUFBQUEsRUFDQTBCLFNBQVMsVUFLWHpFLEVBREU4RCxHQUFhdEIsR0FBa0JzQixHQUN6QjlELEVBQU13RSxTQUFTVixFQUFrQixDQUN2Q2YsUUFBQUEsRUFDQTBCLFNBQVMsSUFHSHpFLEVBQU13RSxTQUFTLE1BQU8sQ0FDNUJ6QixRQUFBQSxFQUNBMEIsU0FBUyxJQUlmLGFBQWF6RSxFQUFNTSxXQUNuQixNQUFPdEwsR0FFUCxPQURBcUksRUFBT3JJLE1BQU0sd0JBQXdCQSxLQUM5QnFLLEdBSVgsTUFBTTBFLEdBQXFCekwsR0FDbEJBLEVBQUlvTSxjQUFjNU0sUUFBUSxJQUFLLElBR3hCLFNBQUF5TSxHQUFtQnBRLEVBQThDMlAsR0FHL0UsR0FGQTNQLEVBQVUwTyxHQUFjMU8sR0FBVyxJQUVqQixTQURsQjJQLEVBQVlDLEdBQWtCRCxJQUNMLE1BQU8sTUFDaEMsSUFBSVEsR0FBWW5RLE1BQUFBLE9BQUEsRUFBQUEsRUFBUzhPLGdCQUFpQixNQUMxQyxJQUFJOU8sTUFBQUEsU0FBQUEsRUFBUzJPLG1CQUFvQjdLLE9BQU9DLEtBQUsvRCxFQUFRMk8sa0JBQWtCek4sT0FBUyxFQUFHLENBQ2pGLE1BQU15TixFQUFtQjNPLEVBQVEyTyxpQkFDSjdLLE9BQU9DLEtBQUs0SyxHQUNoQnpLLFNBQVN5TCxLQUNoQ1EsRUFBWXhCLEVBQWlCZ0IsR0FDeEJ0QixHQUFrQjhCLEtBQ3JCQSxFQUFZLFFBT2xCLE1BSHdCLFdBQXBCblEsTUFBQUEsU0FBQUEsRUFBU3lQLFNBQW9DLFNBQWRVLElBQ2pDQSxFQUFZLE9BRVBBLEVBR0YsTUFBTUssR0FBcUIsQ0FDaENDLEVBQ0FDLEtBRUFBLEVBQVVkLEdBQWtCYyxLQUV4QkQsS0FBc0JBLEVBQWlCRSxnQkFBa0J2QyxHQUFnQmxLLFNBQVN3TSxJQUF3QixRQUFaQSxHQUl2RkUsR0FBaUIsQ0FBQ0MsRUFBc0RILEtBQ25GLElBQUt0QyxHQUFnQmxLLFNBQVMwTCxHQUFrQmMsTUFBY0csRUFBaUIsT0FBTyxFQUV0RixNQUFNakMsUUFDSkEsRUFBT08sa0JBQ1BBLEVBQWlCQyxjQUNqQkEsRUFBYUwsU0FDYkEsRUFBUUMsYUFDUkEsRUFBWUMsWUFDWkEsRUFBV0ksU0FDWEEsRUFBUUcsYUFDUkEsRUFBWVgsVUFDWkEsRUFBU0MsY0FDVEEsRUFBYVEsT0FDYkEsRUFBTUMsT0FDTkEsR0FDRWIsR0FBY21DLEdBRWxCLEdBQUk5QyxHQUFXYSxJQUFZQSxFQUFXLElBQUssT0FBTyxFQUNsRCxHQUFJTyxHQUFxQnBCLEdBQVdxQixHQUFnQixPQUFPLEVBQzNELEdBQ0VMLElBQzBCLGlCQUFqQkMsR0FBNkJBLEVBQWUsR0FBOEIsaUJBQWhCQyxHQUE0QkEsRUFBYyxHQUU3RyxPQUFPLEVBRVQsR0FBSUksR0FBWUcsRUFBYyxPQUFPLEVBQ3JDLEdBQUlGLEdBQVVDLEVBQVEsT0FBTyxFQUM3QixHQUFJVixFQUFXLENBRWIsT0FBTzZCLEtBRFc1QixHQUFpQixPQUdyQyxPQUFPLEdBR0lnQyxHQUFhMUssTUFBTzhFLEVBQWF3RixLQUM1Q0EsRUFBVWQsR0FBa0JjLEdBQ3ZCdEMsR0FBZ0JsSyxTQUFTd00sSUFBd0IsUUFBWkEsUUFDN0I1RSxFQUFNWixFQUFLLENBQ3RCYSxVQUFVLElBQ1RJLFdBSGlFakIsNkZBbnlCaEUsU0FBc0M3SSxHQUMxQyxNQUFPLEdBQUdiLEtBQUtDLE1BQU1pQixLQUFLRCxNQUFRLE9BQVF4QixHQUFzQixLQUFLNkIsRUFBS0UsUUFBUVgsOENBR3JDQSxFQUFpQm5CLEVBQWlCLEdBQy9FLE1BQU8sR0FBR0QsR0FBc0JDLEtBQVU0QixFQUFLRSxRQUFRWCw4TEE0TmRpRyxHQUNyQyx5QkFBeUIvQyxLQUFLK0MsR0FDekJBLEVBQUszRSxRQUFRLHlCQUEwQixJQUV2QzJFLEVBQUszRSxRQUFRLGdCQUFpQix5V0MxUHpDLE1BQU1vTixHQUFrQixDQUN0QnpRLE9BQVNDLElBQ0tBLEVBQUlaLElBQ1pNLFFBQ0RMLFFBQVEsVUFDUkMsWUFBWSxvQkFDWm1SLFVBQVUsY0FDVmxSLE1BQU0sS0FDTkMsUUFBUWlDLElBQ04sV0FDQyxNQUFNaVAsRUFBWWpQLEVBQ2ZWLEtBQUsyQyxHQUNHb0IsR0FBTXBCLEdBQVFBLEVBQU9uQixFQUFLa0UsUUFBUS9DLEtBRTFDaU4sUUFBUWpOLElBQ1AsTUFBTWtOLEVBQVF0SSxFQUFHQyxXQUFXN0UsSUFBU29CLEdBQU1wQixHQUkzQyxPQUhLa04sR0FDSDVRLEVBQUlLLElBQUl5SSxLQUFLLEdBQUdwRixxQkFFWGtOLFdBRUw1USxFQUFJd1EsT0FBT0UsSUFabEIsR0FhSXZRLE9BQU1DLElBQ1RKLEVBQUlLLElBQUlDLE1BQU1GLFdDNkt4QixJQUFleVEsR0F0TUM3USxJQUNkLE1BQU04USxFQUFhOVEsRUFBSStRLFVBQW1DLHFCQUF1QixHQWtNakYsTUFqTWdDLENBQzlCLENBQ0VoSixLQUFNLFVBQ050QyxLQUFNLFFBQ0Z1TCxhQUNGLE9BQU9oUixFQUFJaVIsS0FBS0MsVUFBdUIsNkJBRXJDM1IsWUFDRixPQUFPUyxFQUFJaVIsS0FBS0MsVUFBdUIsNkJBRXpDQyxVQUFVLEVBQ1ZDLFFBQVNOLEVBQVd6QyxTQUFXLEtBRWpDLENBQ0V0RyxLQUFNLFlBQ050QyxLQUFNLFVBQ0Z1TCxhQUNGLE9BQU9oUixFQUFJaVIsS0FBS0MsVUFBdUIsK0JBRXJDM1IsWUFDRixPQUFPUyxFQUFJaVIsS0FBS0MsVUFBdUIsK0JBRXpDQyxVQUFVLEVBQ1ZDLFFBQVNOLEVBQVd4QyxZQUFhLEdBRW5DLENBQ0V2RyxLQUFNLGdCQUNOdEMsS0FBTSxPQUNGdUwsYUFDRixPQUFPaFIsRUFBSWlSLEtBQUtDLFVBQXVCLG1DQUVyQzNSLFlBQ0YsT0FBT1MsRUFBSWlSLEtBQUtDLFVBQXVCLG1DQUV6Q0MsVUFBVSxFQUNWRSxRQUFTLENBQ1AsT0FDQSxLQUNBLE9BQ0EsTUFDQSxPQUNBLFFBQ0EsT0FDQSxNQUNBLE1BQ0EsTUFDQSxTQUNBLFlBQ0EsTUFDQSxNQUNBLE1BQ0EsTUFDQSxNQUNBLE9BQ0EsTUFDQSxJQUNBLFFBRUZELFFBQVMsT0FFWCxDQUNFckosS0FBTSxXQUNOdEMsS0FBTSxVQUNGdUwsYUFDRixPQUFPaFIsRUFBSWlSLEtBQUtDLFVBQXVCLDhCQUVyQzNSLFlBQ0YsT0FBT1MsRUFBSWlSLEtBQUtDLFVBQXVCLDhCQUV6Q0MsVUFBVSxFQUNWQyxRQUFTTixFQUFXdEMsV0FBWSxHQUVsQyxDQUNFekcsS0FBTSxjQUNOdEMsS0FBTSxRQUNGdUwsYUFDRixPQUFPaFIsRUFBSWlSLEtBQUtDLFVBQXVCLGlDQUVyQzNSLFlBQ0YsT0FBT1MsRUFBSWlSLEtBQUtDLFVBQXVCLGlDQUV6Q0MsVUFBVSxFQUNWQyxRQUFTTixFQUFXcEMsYUFBZSxLQUVyQyxDQUNFM0csS0FBTSxlQUNOdEMsS0FBTSxRQUNGdUwsYUFDRixPQUFPaFIsRUFBSWlSLEtBQUtDLFVBQXVCLGtDQUVyQzNSLFlBQ0YsT0FBT1MsRUFBSWlSLEtBQUtDLFVBQXVCLGtDQUV6Q0MsVUFBVSxFQUNWQyxRQUFTTixFQUFXckMsY0FBZ0IsS0FFdEMsQ0FDRTFHLEtBQU0sdUJBQ050QyxLQUFNLFVBQ0Z1TCxhQUNGLE9BQU9oUixFQUFJaVIsS0FBS0MsVUFBdUIsMENBRXJDM1IsWUFDRixPQUFPUyxFQUFJaVIsS0FBS0MsVUFBdUIsMENBRXpDQyxVQUFVLEVBQ1ZDLFFBQVNOLEVBQVduQyx1QkFBd0IsR0FFOUMsQ0FDRTVHLEtBQU0sb0JBQ050QyxLQUFNLFVBQ0Z1TCxhQUNGLE9BQU9oUixFQUFJaVIsS0FBS0MsVUFBdUIsdUNBRXJDM1IsWUFDRixPQUFPUyxFQUFJaVIsS0FBS0MsVUFBdUIsdUNBRXpDQyxVQUFVLEVBQ1ZDLFFBQVNOLEVBQVdsQyxvQkFBcUIsR0FFM0MsQ0FDRTdHLEtBQU0sZ0JBQ050QyxLQUFNLFFBQ0Z1TCxhQUNGLE9BQU9oUixFQUFJaVIsS0FBS0MsVUFBdUIsbUNBRXJDM1IsWUFDRixPQUFPUyxFQUFJaVIsS0FBS0MsVUFBdUIsbUNBRXpDQyxVQUFVLEVBQ1ZDLFFBQVNOLEVBQVdqQyxlQUFpQixJQUV2QyxDQUNFOUcsS0FBTSxTQUNOdEMsS0FBTSxVQUNGdUwsYUFDRixPQUFPaFIsRUFBSWlSLEtBQUtDLFVBQXVCLDRCQUVyQzNSLFlBQ0YsT0FBT1MsRUFBSWlSLEtBQUtDLFVBQXVCLDRCQUV6Q0MsVUFBVSxFQUNWQyxRQUFTTixFQUFXL0IsU0FBVSxHQUVoQyxDQUNFaEgsS0FBTSxTQUNOdEMsS0FBTSxVQUNGdUwsYUFDRixPQUFPaFIsRUFBSWlSLEtBQUtDLFVBQXVCLDRCQUVyQzNSLFlBQ0YsT0FBT1MsRUFBSWlSLEtBQUtDLFVBQXVCLDRCQUV6Q0MsVUFBVSxFQUNWQyxRQUFTTixFQUFXOUIsU0FBVSxHQUVoQyxDQUNFakgsS0FBTSxXQUNOdEMsS0FBTSxVQUNGdUwsYUFDRixPQUFPaFIsRUFBSWlSLEtBQUtDLFVBQXVCLDhCQUVyQzNSLFlBQ0YsT0FBT1MsRUFBSWlSLEtBQUtDLFVBQXVCLDhCQUV6Q0MsVUFBVSxFQUNWQyxRQUFTTixFQUFXaEMsV0FBWSxHQUVsQyxDQUNFL0csS0FBTSxlQUNOdEMsS0FBTSxRQUNGdUwsYUFDRixPQUFPaFIsRUFBSWlSLEtBQUtDLFVBQXVCLGtDQUVyQzNSLFlBQ0YsT0FBT1MsRUFBSWlSLEtBQUtDLFVBQXVCLGtDQUV6Q0MsVUFBVSxFQUNWQyxRQUFTTixFQUFXN0IsY0FBZ0IsSUFFdEMsQ0FDRWxILEtBQU0sZUFDTnRDLEtBQU0sVUFDRnVMLGFBQ0YsT0FBT2hSLEVBQUlpUixLQUFLQyxVQUF1QixrQ0FFckMzUixZQUNGLE9BQU9TLEVBQUlpUixLQUFLQyxVQUF1QixrQ0FFekNDLFVBQVUsRUFDVkMsUUFBU04sRUFBV1EsZUFBZ0IsS0NwRDFDLElBQWUzRixHQTVJQzNMLElBQ2QsTUFBTThRLEVBQWE5USxFQUFJK1EsVUFBb0Msc0JBQXdCLEdBd0luRixNQXZJZ0MsQ0FDOUIsQ0FDRWhKLEtBQU0saUJBQ050QyxLQUFNLFVBQ0Z1TCxhQUNGLE9BQU9oUixFQUFJaVIsS0FBS0MsVUFBdUIscUNBRXJDM1IsWUFDRixPQUFPUyxFQUFJaVIsS0FBS0MsVUFBdUIscUNBRXpDQyxVQUFVLEVBQ1ZDLFFBQVNOLEVBQVdWLGlCQUFrQixHQUV4QyxDQUNFckksS0FBTSxnQkFDTnRDLEtBQU0sT0FDRnVMLGFBQ0YsT0FBT2hSLEVBQUlpUixLQUFLQyxVQUF1QixvQ0FFckMzUixZQUNGLE9BQU9TLEVBQUlpUixLQUFLQyxVQUF1QixvQ0FFekNDLFVBQVUsRUFDVkUsUUFBUyxDQUFDLE9BQVEsU0FDbEJELFFBQVNOLEVBQVdsRyxlQUFpQixRQUV2QyxDQUNFN0MsS0FBTSx3QkFDTnRDLEtBQU0sVUFDRnVMLGFBQ0YsT0FBT2hSLEVBQUlpUixLQUFLQyxVQUF1Qiw0Q0FFckMzUixZQUNGLE9BQU9TLEVBQUlpUixLQUFLQyxVQUF1Qiw0Q0FFekNDLFVBQVUsRUFDVkMsUUFBU04sRUFBV2hHLHdCQUF5QixHQUUvQyxDQUNFL0MsS0FBTSxrQkFDTnRDLEtBQU0sUUFDRnVMLGFBQ0YsT0FBT2hSLEVBQUlpUixLQUFLQyxVQUF1QixzQ0FFckMzUixZQUNGLE9BQU9TLEVBQUlpUixLQUFLQyxVQUF1QixzQ0FFekNDLFVBQVUsRUFDVkMsUUFBU04sRUFBVy9GLGlCQUFtQixHQUV6QyxDQUNFaEQsS0FBTSxnQkFDTnRDLEtBQU0sUUFDRnVMLGFBQ0YsT0FBT2hSLEVBQUlpUixLQUFLQyxVQUF1QixvQ0FFckMzUixZQUNGLE9BQU9TLEVBQUlpUixLQUFLQyxVQUF1QixvQ0FFekNDLFVBQVUsRUFDVkMsUUFBU04sRUFBVzdDLGVBQWlCLElBRXZDLENBQ0VsRyxLQUFNLG9CQUNOdEMsS0FBTSxRQUNGdUwsYUFDRixPQUFPaFIsRUFBSWlSLEtBQUtDLFVBQXVCLDRDQUVyQzNSLFlBQ0YsT0FBT1MsRUFBSWlSLEtBQUtDLFVBQXVCLDRDQUV6Q0MsVUFBVSxFQUNWQyxRQUFTTixFQUFXN0YsbUJBQXFCLElBRTNDLENBQ0VsRCxLQUFNLHNCQUNOdEMsS0FBTSxRQUNGdUwsYUFDRixPQUFPaFIsRUFBSWlSLEtBQUtDLFVBQXVCLHlDQUVyQzNSLFlBQ0YsT0FBT1MsRUFBSWlSLEtBQUtDLFVBQXVCLHlDQUV6Q0MsVUFBVSxFQUNWQyxRQUFTTixFQUFXNUYscUJBQXVCLEtBRTdDLENBQ0VuRCxLQUFNLGlCQUNOdEMsS0FBTSxRQUNGdUwsYUFDRixPQUFPaFIsRUFBSWlSLEtBQUtDLFVBQXVCLHlDQUVyQzNSLFlBQ0YsT0FBT1MsRUFBSWlSLEtBQUtDLFVBQXVCLHlDQUV6Q0MsVUFBVSxFQUNWQyxRQUFTTixFQUFXM0YsZ0JBQWtCLDZCQUV4QyxDQUNFcEQsS0FBTSxxQkFDTnRDLEtBQU0sUUFDRnVMLGFBQ0YsT0FBT2hSLEVBQUlpUixLQUFLQyxVQUF1Qix5Q0FFckMzUixZQUNGLE9BQU9TLEVBQUlpUixLQUFLQyxVQUF1Qix5Q0FFekNDLFVBQVUsRUFDVkMsUUFBU04sRUFBVzFGLG9CQUFzQixJQUU1QyxDQUNFckQsS0FBTSxvQkFDTnRDLEtBQU0sT0FDRnVMLGFBQ0YsT0FBT2hSLEVBQUlpUixLQUFLQyxVQUF1Qix3Q0FFckMzUixZQUNGLE9BQU9TLEVBQUlpUixLQUFLQyxVQUF1Qix3Q0FFekNDLFVBQVUsRUFDVkUsUUFBUyxDQUNQLFFBQ0EsWUFDQSxZQUNBLFFBQ0EsWUFDQSxZQUNBLE9BQ0EsT0FDQSxTQUNBLFVBRUZELFFBQVNOLEVBQVc1QyxtQkFBcUIsZUN2Ry9DLElBQWVxRCxHQS9CQ3ZSLElBQ2QsTUFBTThRLEVBQWE5USxFQUFJK1EsVUFBZSxtQkFBcUIsR0EyQjNELE1BMUJnQyxDQUM5QixDQUNFaEosS0FBTSxTQUNOdEMsS0FBTSxRQUNGdUwsYUFDRixPQUFPaFIsRUFBSWlSLEtBQUtDLFVBQXVCLDBCQUVyQzNSLFlBQ0YsT0FBT1MsRUFBSWlSLEtBQUtDLFVBQXVCLDBCQUV6Q0MsVUFBVSxFQUNWQyxRQUFTTixFQUFXL0MsUUFBVSxjQUVoQyxDQUNFaEcsS0FBTSxTQUNOdEMsS0FBTSxVQUNGdUwsYUFDRixPQUFPaFIsRUFBSWlSLEtBQUtDLFVBQXVCLDBCQUVyQzNSLFlBQ0YsT0FBT1MsRUFBSWlSLEtBQUtDLFVBQXVCLDBCQUV6Q0MsVUFBVSxFQUNWQyxRQUFTTixFQUFXVSxTQUFVLEtDekI3QixNQUFNQyxHQUF1QnpSLElBQzNCLENBQ0wwUixXQUFZMVIsRUFBSWlSLEtBQUtDLFVBQXVCLHNCQUM1Q1MsT0FBUTNSLEVBQUlpUixLQUFLQyxVQUF1QixtQkFDeEMsZUFBZ0JsUixFQUFJaVIsS0FBS0MsVUFBdUIscUJBQ2hEVSxPQUFRNVIsRUFBSWlSLEtBQUtDLFVBQXVCLGlCQUN4Q1csTUFBTzdSLEVBQUlpUixLQUFLQyxVQUF1QixnQkFDdkNZLE1BQU85UixFQUFJaVIsS0FBS0MsVUFBdUIsZ0JBQ3ZDYSxVQUFXL1IsRUFBSWlSLEtBQUtDLFVBQXVCLHFCQUMzQ2MsUUFBU2hTLEVBQUlpUixLQUFLQyxVQUF1QixrQkFDekNlLE1BQU9qUyxFQUFJaVIsS0FBS0MsVUFBdUIsZ0JBQ3ZDZ0IsVUFBV2xTLEVBQUlpUixLQUFLQyxVQUF1QixvQkFDM0NpQixLQUFNblMsRUFBSWlSLEtBQUtDLFVBQXVCLGVBQ3RDa0IsTUFBT3BTLEVBQUlpUixLQUFLQyxVQUF1Qix1QkFDdkNtQixlQUFnQnJTLEVBQUlpUixLQUFLQyxVQUF1QixvQkFDaERvQixNQUFPdFMsRUFBSWlSLEtBQUtDLFVBQXVCLGdCQUN2Q3FCLFlBQWF2UyxFQUFJaVIsS0FBS0MsVUFBdUIsd0JDWDNDc0IsR0FBZTNNLE1BQU83RixFQUFheVMsRUFBMEJDLEVBQWdCM0ssS0FDakYsTUFBTTRLLFFBQWUzUyxFQUFJWixJQUFJd1QsU0FBU0MsT0FBT0osR0FDdkNLLEVBQ08sYUFBWEosRUFDSSxVQUFVM0ssSUFDQyxnQkFBWDJLLEVBQ0UsZUFBZTNLLElBQ0osWUFBWDJLLEVBQ0UsV0FBVzNLLElBQ1hBLEVBQ1YvSCxFQUFJK1MsV0FBVyxDQUNiRCxDQUFDQSxHQUFhSCxJQUVELGFBQVhELEVBQ0YxUyxFQUFJK1MsV0FBVyxDQUNiLGlCQUFrQmhMLEVBQ2xCLGtCQUFtQkEsSUFFRCxnQkFBWDJLLEdBQ1QxUyxFQUFJK1MsV0FBVyxDQUNiLHFCQUFzQmhMLEtBS3RCaUwsR0FBVSxDQUNkalQsT0FBU0MsSUFDS0EsRUFBSVosSUFDWk0sUUFDREwsUUFBUSxPQUNSRSxNQUFNLFVBQ05rUixVQUFVLG1CQUNWblIsWUFBWSwwRUFDWkUsUUFBTyxDQUFDa1QsRUFBZ0IzSyxLQUN0QixtQkFDQyxJQUlFLE9BQVEySyxHQUNOLElBQUssVUFDSCxHQUFhLGFBQVQzSyxRQUNJeUssR0FBYXhTLEVBQUs2USxHQUFnQjdRLEdBQU0wUyxFQUFRM0ssUUFDakQsR0FBYSxjQUFUQSxRQUNIeUssR0FBYXhTLEVBQUsyTCxHQUFpQjNMLEdBQU0wUyxFQUFRM0ssUUFDbEQsR0FBYSxXQUFUQSxRQUNIeUssR0FBYXhTLEVBQUt1UixHQUFjdlIsR0FBTTBTLEVBQVEzSyxPQUMvQyxDQUNMLE1BQU0wSyxFQUFVLENBQ2QsQ0FDRWhOLEtBQU0sT0FDTnNDLEtBQU0sVUFDTnNKLFFBQVMsQ0FDUCxDQUFFdEosS0FBTS9ILEVBQUlpUixLQUFLQyxVQUF1QixvQkFBcUIrQixNQUFPLFlBQ3BFLENBQUVsTCxLQUFNL0gsRUFBSWlSLEtBQUtDLFVBQXVCLHFCQUFzQitCLE1BQU8sYUFDckUsQ0FBRWxMLEtBQU0vSCxFQUFJaVIsS0FBS0MsVUFBdUIsa0JBQW1CK0IsTUFBTyxXQUVwRXZMLFFBQVMsNEJBR1BpTCxRQUFlM1MsRUFBSVosSUFBSXdULFNBQVNDLE9BQTJCSixHQUMxQyxhQUFuQkUsRUFBT08sY0FDSFYsR0FBYXhTLEVBQUs2USxHQUFnQjdRLEdBQU0wUyxFQUFRQyxFQUFPTyxTQUNqQyxjQUFuQlAsRUFBT08sY0FDVlYsR0FBYXhTLEVBQUsyTCxHQUFpQjNMLEdBQU0wUyxFQUFRQyxFQUFPTyxTQUNsQyxXQUFuQlAsRUFBT08sZUFDVlYsR0FBYXhTLEVBQUt1UixHQUFjdlIsR0FBTTBTLEVBQVFDLEVBQU9PLFNBRy9ELE1BQ0YsSUFBSyxXQUNMLElBQUssY0FDSCxHQUFJbkwsRUFBTSxDQUNSLE1BQU1yRSxFQUFPMUQsRUFBSW1ULE9BQU9ULEdBQVFsTCxJQUFJTyxHQUNwQyxJQUFLckUsRUFFSCxZQURBMUQsRUFBSUssSUFBSUMsTUFBTSxNQUFNb1MsV0FBZ0IzSyxLQUdsQ3JFLEVBQUtqRCxjQUNEK1IsR0FBYXhTLEVBQUswRCxFQUFLakQsT0FBT1QsR0FBTTBTLEVBQVEzSyxPQUUvQyxDQUNMLE1BQU0wSyxFQUFVLENBQ2QsQ0FDRWhOLEtBQU0sT0FDTnNDLEtBQU0sR0FBRzJLLElBQ1RyQixRQUFTclIsRUFBSW1ULE9BQU9ULEdBQVFVLFlBQVlyUyxLQUFLMkMsSUFDcEMsQ0FDTHFFLEtBQU0wSixHQUFvQnpSLEdBQUswRCxJQUFTQSxFQUN4Q3VQLE1BQU92UCxNQUdYZ0UsUUFBUyxlQUFlZ0wsTUFJdEJDLFFBQWUzUyxFQUFJWixJQUFJd1QsU0FBU0MsT0FBMkJKLEdBQzNEL08sRUFBTzFELEVBQUltVCxPQUFPVCxHQUFRbEwsSUFBSW1MLEVBQU9ELEtBQ3ZDaFAsTUFBQUEsU0FBQUEsRUFBTWpELGVBQ0YrUixHQUFheFMsRUFBSzBELEVBQUtqRCxPQUFPVCxHQUFNMFMsRUFBUUMsRUFBT0QsSUFHN0QsTUFDRixJQUFLLFNBQ0gsR0FBSTNLLEVBQU0sQ0FJUixHQUhLQSxFQUFLcEUsU0FBUyxtQkFDakJvRSxFQUFPLGdCQUFnQkEsTUFFckJ4RSxPQUFPQyxLQUFLeEQsRUFBSStRLFVBQVUsaUJBQWlCcE4sU0FBU29FLEdBTXRELFlBREEvSCxFQUFJSyxJQUFJQyxNQUFNLG1CQUFtQnlILE1BSkssUUFBbEM1QixFQUFBbkcsRUFBSXFULGFBQWFDLFVBQVV2TCxVQUFPLElBQUE1QixPQUFBLEVBQUFBLEVBQUExRixlQUM5QitSLEdBQWF4UyxFQUFLQSxFQUFJcVQsYUFBYUMsVUFBVXZMLEdBQU90SCxPQUFRVCxHQUFNLFNBQVUrSCxPQU1qRixDQUNMLE1BQU0wSyxFQUFVLENBQ2QsQ0FDRWhOLEtBQU0sT0FDTnNDLEtBQU0sU0FDTnNKLFFBQVNyUixFQUFJcVQsYUFBYUUsY0FDMUI3TCxRQUFTLG9CQUdQaUwsUUFBZTNTLEVBQUlaLElBQUl3VCxTQUFTQyxPQUFZSixJQUNMLFFBQXpDZSxFQUFBeFQsRUFBSXFULGFBQWFDLFVBQVVYLEVBQU9jLGVBQU8sSUFBQUQsT0FBQSxFQUFBQSxFQUFFL1MsZUFDdkMrUixHQUNKeFMsRUFDQUEsRUFBSXFULGFBQWFDLFVBQVVYLEVBQU9jLFFBQVNoVCxPQUFRVCxHQUNuRCxTQUNBMlMsRUFBT2MsUUFJYixNQUNGLFFBR0UsT0FGQXpULEVBQUlLLElBQUl5SSxLQUFLLG1CQUFtQjRKLFVBQ2hDMVMsRUFBSUssSUFBSXlJLEtBQUssNkRBR2pCOUksRUFBSUssSUFBSTZGLFFBQVEsa0NBQ0QsV0FBWHdNLEdBQ0YxUyxFQUFJSyxJQUFJcVQsS0FBSyxrRUFFZixNQUFPdFQsR0FFUCxHQURBSixFQUFJSyxJQUFJQyxNQUFNRixHQUNWZ0ksUUFBUXVMLEtBQUtoUSxTQUFTLFdBQ3hCLE1BQU12RCxJQWxIWCxHQXFISUQsT0FBTUMsSUFDVEosRUFBSUssSUFBSUMsTUFBTUYsV0M3SmxCd1QsR0FBZSxDQUNuQjdULE9BQVE4RixNQUFPN0YsSUFDYixNQUFNWixFQUFNWSxFQUFJWixJQUNoQkEsRUFBSU0sUUFDREwsUUFBUSxPQUNSb1IsVUFBVSxZQUNWblIsWUFBWSx3QkFDWkUsUUFBUWtULElBQ04sV0FDQyxJQUNFLElBQUlELEVBQWlCLEdBQ3JCLE1BQU1oUyxFQUFzQixDQUMxQm9ULFNBQVUsQ0FDUnBPLEtBQU0sT0FDTnNDLEtBQU0sV0FDTkwsUUFBUyxrQkFDVDJKLFFBQVNyUixFQUFJbVQsT0FBT1UsU0FBU1QsWUFBWXJTLEtBQUsyQyxJQUNyQyxDQUNMcUUsS0FBTTBKLEdBQW9CelIsR0FBSzBELElBQVNBLEVBQ3hDdVAsTUFBT3ZQLE1BR1gwTixRQUFTcFIsRUFBSStRLFVBQVUsb0JBQXNCL1EsRUFBSStRLFVBQVUsbUJBQXFCLFFBRWxGK0MsWUFBYSxDQUNYck8sS0FBTSxPQUNOc0MsS0FBTSxjQUNOTCxRQUFTLG9CQUNUMkosUUFBU3JSLEVBQUltVCxPQUFPVyxZQUFZVixZQUNoQ2hDLFFBQVNwUixFQUFJK1EsVUFBK0IsdUJBQXlCLFFBRXZFOVEsUUFBUyxDQUNQd0YsS0FBTSxXQUNOc0MsS0FBTSxVQUNOTCxRQUFTLGNBQ1QySixRQUFTclIsRUFBSXFULGFBQWFFLGNBQzFCbkMsUUFBUzdOLE9BQU9DLEtBQUt4RCxFQUFJK1EsVUFBVSxpQkFBaUJKLFFBQVFqTixHQUMxRDFELEVBQUkrUSxVQUFVLGdCQUFnQnJOLFNBS3BDLEdBQUlnUCxFQUFRLENBQ1YsSUFBSWpTLEVBQU9pUyxHQUtULE9BRkExUyxFQUFJSyxJQUFJeUksS0FBSyxtQkFBbUI0SixVQUNoQzFTLEVBQUlLLElBQUl5SSxLQUFLLHNEQUhiMkosRUFBUXNCLEtBQUt0VCxFQUFPaVMsU0FPdEJELEVBQVVsUCxPQUFPQyxLQUFLL0MsR0FBUU0sS0FBSzJDLEdBQWlCakQsRUFBT2lELEtBRTdELE1BQU1pUCxRQUFldlQsRUFBSXdULFNBQVNDLE9BQVlKLEdBRzlDLEdBQUlFLEVBQU8xUyxRQUFTLENBQ2xCLE1BQU1BLEVBQVVELEVBQUkrUSxVQUFrQyxnQkFDdER4TixPQUFPQyxLQUFLdkQsR0FBUytULFNBQVN0USxJQUN4QmlQLEVBQU8xUyxRQUFRMEQsU0FBU0QsR0FDMUJ6RCxFQUFReUQsSUFBUSxFQUVoQnpELEVBQVF5RCxJQUFRLEtBSXBCMUQsRUFBSStTLFdBQVcsQ0FDYmtCLGFBQWNoVSxJQUlsQkQsRUFBSStTLFdBQVcsQ0FDYixpQkFBa0JKLEVBQU9rQixVQUFZN1QsRUFBSStRLFVBQWtCLGtCQUMzRCxrQkFBbUI0QixFQUFPa0IsVUFBWTdULEVBQUkrUSxVQUFrQixrQkFDNUQscUJBQXNCNEIsRUFBT21CLGFBQWUsU0FFOUM5VCxFQUFJSyxJQUFJNkYsUUFBUSxpQ0FDaEIsTUFBTzlGLEdBRVAsR0FEQUosRUFBSUssSUFBSUMsTUFBTUYsR0FDVmdJLFFBQVF1TCxLQUFLaFEsU0FBUyxXQUN4QixNQUFNdkQsSUF4RVgsR0EyRUlELE9BQU1DLElBQ1RKLEVBQUlLLElBQUlDLE1BQU1GLFdDckZsQlQsR0FBaUIsQ0FDckJJLE9BQVNDLElBQ0tBLEVBQUlaLElBQ1pNLFFBQVFFLE9BQU8sb0JBQXFCLDJCQUE0QkQsSUFDbEVLLEVBQUlrVSxVQUFVLENBQ1osZUFBZ0J2VSxTQ09sQndVLEdBQVd0TyxNQUFPN0YsRUFBYVAsS0FDbkMsSUFDRSxNQUFNMlUsRUFBT0MsR0FBVzVVLEVBQVE2VSxLQUMxQkMsRUFBU2hTLEVBQUtuQixLQUFLM0IsRUFBUTZVLElBQUssWUFDdEMsSUFBSUUsRUFBVSxHQUNWSixFQUFLM0IsU0FBVzJCLEVBQUszQixRQUFROVIsT0FBUyxJQUN4QzZULFFBQWdCeFUsRUFBSVosSUFBSXdULFNBQVNDLE9BQU91QixFQUFLM0IsVUFFL0MsSUFBSWdDLFFBQXlCQyxFQUFPLENBQUMsUUFBUyxDQUFFck0sSUFBS2tNLEVBQVFJLEtBQUssSUFlbEUsR0FkQUYsRUFBU0EsRUFBTzlELFFBQVFqTixJQUN0QixJQUFJa1IsRUFBTyxHQU1YLE9BTEFyUixPQUFPQyxLQUFLNFEsRUFBS1MsU0FBU2IsU0FBUzFQLElBQzdCa0YsRUFBTTlGLEVBQU1ZLEVBQUssQ0FBRXFRLEtBQUssTUFDMUJDLEVBQU9sUixPQUdQa1IsR0FFS0MsR0FBUTdVLEVBQUtvVSxFQUFLUyxRQUFRRCxHQUFPSixNQUt0QixJQUFsQkMsRUFBTzlULE9BRVQsWUFEQVgsRUFBSUssSUFBSXlJLEtBQUssNkJBR2YsTUFBTWdNLEVBQVFDLEdBQU9OLEVBQVFGLEVBQVFDLEdBQ3JDUSxHQUFjdlYsRUFBUXdWLEtBQU1ILEdBQ0MsbUJBQWxCVixFQUFLYyxVQUNkZCxFQUFLYyxTQUFTLENBQUVWLFFBQUFBLEVBQVMvVSxRQUFBQSxFQUFTcVYsTUFBT0wsRUFBUXpVLElBQUFBLElBRS9Db1UsRUFBS2UsaUJBQ1BuVixFQUFJSyxJQUFJNkYsUUFBUWtPLEVBQUtlLGlCQUV2Qm5WLEVBQUlLLElBQUk2RixRQUFRLFNBQ2hCLE1BQU85RixHQUNQSixFQUFJSyxJQUFJQyxNQUFNRixLQVVaeVUsR0FBVSxDQUFDN1UsRUFBYW9WLEVBQVVsTyxLQUV0QyxNQUFNbU8sRUFBSyxJQUFJQyxTQUFTLE9BQVEsd0JBQTBCRixFQUFNLEtBQ2hFLElBQ0UsT0FBT0MsRUFBR25PLEdBQ1YsTUFBTzlHLEdBRVAsT0FEQUosRUFBSUssSUFBSUMsTUFBTSwyQ0FBMkMwSixLQUFLdUwsVUFBVUgsT0FDakUsSUFRTGYsR0FBY21CLElBQ2xCLE1BQU1DLEVBQWNsVCxFQUFLbkIsS0FBS29VLEVBQWMsWUFDNUMsR0FBSWxOLEVBQUdDLFdBQVdrTixHQUFjLENBRzlCLE9BRGdCQyxRQUFRRCxHQUd4QixNQUFPLElBUUxWLEdBQVMsQ0FBQ0QsRUFBaUJQLEVBQWdCOVUsS0FDL0MsTUFBTWtXLEVBQXNCLEdBUTVCLE9BUEFiLEVBQU1kLFNBQVNsTyxJQUNiLE1BQU1SLEVBQU9nRCxFQUFHc04sYUFBYXJULEVBQUtuQixLQUFLbVQsRUFBUXpPLEdBQVcsUUFDcEQrUCxFQUFVQyxFQUFVeFEsRUFBTTdGLElBQzVCNk0sT0FBT3lKLFNBQVNGLElBQVksUUFBUTdRLEtBQUs2USxNQUMzQ0YsRUFBUzdQLEdBQVkrUCxNQUdsQkYsR0FRSFgsR0FBZ0IsQ0FBQ2dCLEVBQWFsQixLQUNsQ3ZSLE9BQU9DLEtBQUtzUixHQUFPZCxTQUFTak0sSUFDMUIsTUFBTWpDLEVBQVd2RCxFQUFLbkIsS0FBSzRVLEVBQUtqTyxHQUNoQ2tPLEVBQWMxVCxFQUFLa0MsUUFBUXFCLElBQzNCd0MsRUFBRzROLGNBQWNwUSxFQUFVZ1AsRUFBTS9NLFFDdEcvQm9PLEdBQU0sQ0FBQ25XLEVBQWFQLEtBQ3BCQSxFQUFRMlcsUUFFTjlOLEVBQUdDLFdBQVc5SSxFQUFRNFcsVUFDeEJsQyxHQUFTblUsRUFBS1AsR0FBU1UsT0FBTUMsSUFDM0JKLEVBQUlLLElBQUlDLE1BQU1GLE1BR2hCSixFQUFJSyxJQUFJQyxNQUFNLGtCQUFrQmIsRUFBUTRXLHVCQUkxQzVXLEVBQVE0VyxTQUFZNVcsRUFBUTZXLFNBRXhCN1csRUFBUTRXLFNBRFIsd0JBQTBCNVcsRUFBUTRXLFNBRXRDRSxHQUFvQnZXLEVBQUtQLEtBU3ZCOFcsR0FBc0IsQ0FBQ3ZXLEVBQWFQLEtBQ3BDNkksRUFBR0MsV0FBVzlJLEVBQVE2VSxNQUN4QmtDLEVBQUsvVyxFQUFRNlUsS0FFZnRVLEVBQUlLLElBQUlxVCxLQUFLLHFDQUNiK0MsRUFBU2hYLEVBQVE0VyxTQUFVNVcsRUFBUTZVLElBQUssQ0FBRW9DLE1BQU9qWCxFQUFRaVgsUUFBVUMsSUFDN0RBLEVBQ0YzVyxFQUFJSyxJQUFJQyxNQUFNcVcsSUFHaEIzVyxFQUFJSyxJQUFJNkYsUUFBUSxrQ0FDaEJpTyxHQUFTblUsRUFBS1AsR0FBU1UsT0FBTUMsSUFDM0JKLEVBQUlLLElBQUlDLE1BQU1GLFdBS2R3VyxHQUFnQixDQUNwQjdXLE9BQVE4RixNQUFPN0YsSUFDREEsRUFBSVosSUFDWk0sUUFDREwsUUFBUSxRQUNSb1IsVUFBVSx3QkFDVjdRLE9BQU8sVUFBVyxpQkFDbEJBLE9BQU8sWUFBYSx1QkFDcEJOLFlBQVksK0NBQ1pFLFFBQU8sQ0FBQzZXLEVBQWtCUSxFQUFpQm5YLEtBQ3pDLFdBRUMsSUFDRSxNQUFNNFcsRUFBV0QsRUFBUzFTLFNBQVMsS0FDN0JtVCxHQUFXRCxHQUF1QixNQUFaQSxFQUN0QjVCLEVBQU8xUyxFQUFLa0UsUUFBUW9RLEdBQVcsS0FDL0JILEVBQVFoWCxFQUFRZ1gsUUFBUyxFQUN6Qk4sRUFBVTFXLEVBQVEwVyxVQUFXLEVBQzdCOUIsRUFBTS9SLEVBQUtuQixLQUFLMlYsSUFBVyxxQkFBc0JWLEVBQVNqVCxRQUFRLFFBQVMsTUFFN0UxRCxFQUFRMFcsVUFDVkMsRUFBVy9CLEdBR2IsTUFBTTdVLEVBQVUsQ0FDZDRXLFNBQUFBLEVBQ0FRLFFBQUFBLEVBQ0FQLFNBQUFBLEVBQ0FRLFFBQUFBLEVBQ0E3QixLQUFBQSxFQUNBeUIsTUFBQUEsRUFDQXBDLElBQUFBLEVBQ0E4QixRQUFBQSxHQUlFVSxHQUFXeE8sRUFBR0MsV0FBVzBNLFNBQ3JCalYsRUFBSVosSUFBSXdULFNBQ1hDLE9BQU8sQ0FDTixDQUNFcE4sS0FBTSxVQUNOaUMsUUFBU29QLEVBQVUseUNBQTJDLHFDQUM5RC9PLEtBQU0sUUFHVGYsTUFBTTJMLElBQ0RBLEVBQU9xRSxJQUNUYixHQUFJblcsRUFBS1AsTUFLZjBXLEdBQUluVyxFQUFLUCxHQUVYLE1BQU9XLEdBRVAsR0FEQUosRUFBSUssSUFBSUMsTUFBTUYsR0FDVmdJLFFBQVF1TCxLQUFLaFEsU0FBUyxXQUN4QixNQUFNdkQsSUEvQ1gsR0FrRElELE9BQU1DLElBQ1RKLEVBQUlLLElBQUlDLE1BQU1GLFNBR2pCNlcsR0FBRyxVQUFVLEtBQ1pyTyxRQUFRdkksTUFDUnVJLFFBQVF2SSxJQUFJLGFBQ1p1SSxRQUFRdkksTUFDUnVJLFFBQVF2SSxJQUFJNlcsRUFBTUMsS0FBSyx1REFDdkJ2TyxRQUFRdkksSUFBSSxvQ0FDWnVJLFFBQVF2SSxNQUNSdUksUUFBUXZJLElBQUk2VyxFQUFNQyxLQUFLLDZEQUN2QnZPLFFBQVF2SSxJQUFJLDJDQUNadUksUUFBUXZJLFdDMUhWNFEsR0FBZ0IsQ0FDcEJsUixPQUFTQyxJQUNLQSxFQUFJWixJQUNaTSxRQUNETCxRQUFRLFFBQ1JvUixVQUFVLFVBQ1ZuUixZQUFZLHFDQUNaRSxRQUFPcUcsTUFBT3VSLEVBQWUsTUFDNUIsTUFBTUMsRUFBT3JYLEVBQUlpUixLQUFLcUcsa0JBQ3RCLElBQUtGLEVBQU0sQ0FDVCxNQUFNM0UsRUFBVSxDQUNkLENBQ0VoTixLQUFNLE9BQ05zQyxLQUFNLE9BQ05zSixRQUFTZ0csRUFDVDNQLFFBQVMsb0JBQ1QwSixRQUFTcFIsRUFBSStRLFVBQVUsc0JBQXdCLFVBSW5EcUcsU0FEcUJwWCxFQUFJWixJQUFJd1QsU0FBU0MsT0FBOEJKLElBQ3REeEIsS0FFWG9HLEVBQUsxVCxTQUFTeVQsSUFHakJwWCxFQUFJaVIsS0FBS3NHLFlBQVlILEdBQ3JCcFgsRUFBSUssSUFBSTZGLFFBQVEsbUJBQW1Ca1IsTUFIbkNwWCxFQUFJSyxJQUFJeUksS0FBSywrQkN2QlYwTyxHQWdCWEMsWUFBWTFQLEdBQ1YyUCxLQUFLM1AsS0FBT0EsRUFDWjJQLEtBQUtMLEtBQU8sSUFBSU0sSUFDaEJELEtBQUtFLFlBQWMsSUFBSUQsSUFHekJFLFNBQVNDLEVBQVlyRSxTQUNuQixJQUFLcUUsRUFBSSxNQUFNLElBQUlDLFVBQVUsbUJBQzdCLEdBQTZCLG1CQUFsQnRFLEVBQU8xVCxPQUF1QixNQUFNLElBQUlnWSxVQUFVLHFDQUM3RCxHQUFJTCxLQUFLTCxLQUFLVyxJQUFJRixHQUFLLE1BQU0sSUFBSUMsVUFBVSxHQUFHTCxLQUFLM1Asc0JBQXNCK1AsTUFFekVKLEtBQUtMLEtBQUtZLElBQUlILEVBQUlyRSxHQUVkK0QsR0FBaUJVLGdCQUNmUixLQUFLRSxZQUFZSSxJQUFJUixHQUFpQlUsZUFDYyxRQUF0RC9SLEVBQUF1UixLQUFLRSxZQUFZcFEsSUFBSWdRLEdBQWlCVSxzQkFBZ0IsSUFBQS9SLEdBQUFBLEVBQUE0TixLQUFLK0QsR0FFM0RKLEtBQUtFLFlBQVlLLElBQUlULEdBQWlCVSxjQUFlLENBQUNKLEtBSzVESyxXQUFXQyxHQUNULEdBQUlWLEtBQUtFLFlBQVlJLElBQUlJLEdBQWEsQ0FDcEMsTUFBTUMsRUFBYVgsS0FBS0UsWUFBWXBRLElBQUk0USxHQUN4Q0MsTUFBQUEsR0FBQUEsRUFBWXJFLFNBQVNQLElBQ25CaUUsS0FBS0wsS0FBS2lCLE9BQU83RSxPQUt2QjhFLFVBQ0UsT0FBT2IsS0FBSzNQLEtBR2RQLElBQUlzUSxHQUNGLE9BQU9KLEtBQUtMLEtBQUs3UCxJQUFJc1EsR0FHdkJVLFVBQ0UsTUFBTyxJQUFJZCxLQUFLTCxLQUFLb0IsVUFHdkJyRixZQUNFLE1BQU8sSUFBSXNFLEtBQUtMLEtBQUs3VCxTQUlsQixNQUFNa1YsR0FBdUIsQ0FBQzNRLEVBQXNCLFFBQ3pEeVAsR0FBaUJVLGNBQWdCblEsU0MxRHRCNFEsR0FVWGxCLFlBQVl6WCxHQVRLMFgsS0FBSTNQLEtBQUcsWUFFUDJQLEtBQUFMLEtBQU8sSUFBSU0sSUFDWEQsS0FBQUUsWUFBYyxJQUFJRCxJQU9qQ0QsS0FBS2hZLFFBQVUsSUFBSWtaLEVBQ25CbEIsS0FBSzlFLFNBQVdBLEVBQ2hCOEUsS0FBSzFYLElBQU1BLEVBR2J1WSxVQUNFLE9BQU9iLEtBQUszUCxLQUdkNk8sT0NsQmEsSUFBQzVXLEVEbUJaMFgsS0FBS2hZLFFBQ0ZtWixRQUFRLFFBQTJCLGlCQUNuQ2paLE9BQU8sY0FBZSxjQUFjLEtBQ25DOFgsS0FBSzFYLElBQUlrVSxVQUFVLENBQ2pCNEUsT0FBTyxPQUdWbFosT0FBTyxlQUFnQixlQUFlLEtBQ3JDOFgsS0FBSzFYLElBQUlrVSxVQUFVLENBQ2pCNkUsUUFBUSxPQUdYOUIsR0FBRyxhQUFhLEtBQ2ZTLEtBQUsxWCxJQUFJSyxJQUFJQyxNQUNYLG9CQUFvQm9YLEtBQUtoWSxRQUFRc1osS0FBSzVYLEtBQUssc0RBRTdDZ0gsUUFBUTZRLEtBQUssT0NuQ0xqWixFRHVDRDBYLEtBQUsxWCxLQ3RDZFosSUFBSXlZLFNBQVMsZ0JBQWlCL1gsSUFDbENFLEVBQUlaLElBQUl5WSxTQUFTLFNBQVVwWCxJQUMzQlQsRUFBSVosSUFBSXlZLFNBQVMsVUFBVzdFLElBQzVCaFQsRUFBSVosSUFBSXlZLFNBQVMsU0FBVXJILElBQzNCeFEsRUFBSVosSUFBSXlZLFNBQVMsTUFBT2pFLElBQ3hCNVQsRUFBSVosSUFBSXlZLFNBQVMsUUFBU2xZLElBQzFCSyxFQUFJWixJQUFJeVksU0FBUyxPQUFRakIsSUFDekI1VyxFQUFJWixJQUFJeVksU0FBUyxPQUFRNUcsSURrQ3pCNEcsU0FBU0MsRUFBWXJFLFNBQ25CLElBQUtxRSxFQUFJLE1BQU0sSUFBSUMsVUFBVSxxQkFDN0IsR0FBNkIsbUJBQWxCdEUsRUFBTzFULE9BQXVCLE1BQU0sSUFBSWdZLFVBQVUscUNBQzdELEdBQUlMLEtBQUtMLEtBQUtXLElBQUlGLEdBQUssTUFBTSxJQUFJQyxVQUFVLEdBQUdMLEtBQUszUCw2QkFBNkIrUCxNQUNoRkosS0FBS0wsS0FBS1ksSUFBSUgsRUFBSXJFLEdBQ2xCLE1BQU15RixFRGFEMUIsR0FBaUJVLGNDWkksT0FBdEJnQixJQUNFeEIsS0FBS0UsWUFBWUksSUFBSWtCLEdBQ2tCLFFBQXpDL1MsRUFBQXVSLEtBQUtFLFlBQVlwUSxJQUFJMFIsVUFBb0IsSUFBQS9TLEdBQUFBLEVBQUE0TixLQUFLK0QsR0FFOUNKLEtBQUtFLFlBQVlLLElBQUlpQixFQUFtQixDQUFDcEIsS0FLL0NLLFdBQVdDLEdBQ1QsR0FBSVYsS0FBS0UsWUFBWUksSUFBSUksR0FBYSxDQUNwQyxNQUFNQyxFQUFhWCxLQUFLRSxZQUFZcFEsSUFBSTRRLEdBQ3hDQyxNQUFBQSxHQUFBQSxFQUFZckUsU0FBU1AsSUFDbkJpRSxLQUFLTCxLQUFLaUIsT0FBTzdFLE9BS3ZCMEYsZUFDRXpCLEtBQUtjLFVBQVV4RSxTQUFTdFEsSUFDdEIsSUFDRUEsRUFBSzNELE9BQU8yWCxLQUFLMVgsS0FDakIsTUFBT0ksR0FDUHNYLEtBQUsxWCxJQUFJSyxJQUFJQyxNQUFNRixPQUt6Qm9ILElBQUlzUSxHQUNGLE9BQU9KLEtBQUtMLEtBQUs3UCxJQUFJc1EsR0FHdkJVLFVBQ0UsTUFBTyxJQUFJZCxLQUFLTCxLQUFLb0IsVUFHdkJyRixZQUNFLE1BQU8sSUFBSXNFLEtBQUtMLEtBQUs3VCxTRWhHekIsSUFBWTRWLEdBVUFDLEdBZ0JBQyxJQTFCWixTQUFZRixHQUNWQSxFQUFBLFFBQUEsVUFDQUEsRUFBQSxLQUFBLE9BQ0FBLEVBQUEsS0FBQSxPQUNBQSxFQUFBLE1BQUEsUUFKRixDQUFZQSxLQUFBQSxHQUtYLEtBS0QsU0FBWUMsR0FDVkEsRUFBQSxnQkFBQSxpQkFDQUEsRUFBQSxPQUFBLFNBQ0FBLEVBQUEsaUJBQUEsa0JBQ0FBLEVBQUEsY0FBQSxlQUNBQSxFQUFBLGFBQUEsY0FDQUEsRUFBQSxTQUFBLFdBQ0FBLEVBQUEsUUFBQSxVQUNBQSxFQUFBLFVBQUEsWUFDQUEsRUFBQSxPQUFBLFNBQ0FBLEVBQUEsYUFBQSxlQVZGLENBQVlBLEtBQUFBLEdBV1gsS0FLRCxTQUFZQyxHQUNWQSxFQUFBLGNBQUEsZ0JBREYsQ0FBWUEsS0FBQUEsR0FFWCxXQ2xCWUMsR0FXWDlCLFlBQVl6WCxHQVZLMFgsS0FBQThCLE1BQVEsQ0FDdkIsQ0FBQ0osR0FBU2xULFNBQVUsUUFDcEIsQ0FBQ2tULEdBQVMxRixNQUFPLE9BQ2pCLENBQUMwRixHQUFTdFEsTUFBTyxTQUNqQixDQUFDc1EsR0FBUzlZLE9BQVEsT0FPbEJvWCxLQUFLMVgsSUFBTUEsRUFHTHlaLFVBQVVoVSxLQUFtQmlVLEdBRW5DLEdBREFoQyxLQUFLaUMsU0FBV2pDLEtBQUsxWCxJQUFJK1EsVUFBVSxzQkFDOUIyRyxLQUFLMVgsSUFBSStRLFVBQStCLFdBQWEyRyxLQUFLa0MsY0FBY25VLEVBQU1pUyxLQUFLaUMsVUFBVyxDQUNqRyxNQUFNRSxFQUFZM0MsRUFBTVEsS0FBSzhCLE1BQU0vVCxJQUFvQixZQUFZQSxFQUFLcVUsbUJBQ3hFbFIsUUFBUXZJLElBQUl3WixLQUFjSCxHQUMxQmhDLEtBQUtxQyxRQUNIckMsS0FBSzFYLElBQUkrUSxVQUErQixxQkFBdUJ4TyxFQUFLbkIsS0FBS3NXLEtBQUsxWCxJQUFJZ2EsUUFBUyxpQkFDN0ZwUyxZQUFXLEtBQ1QsSUFDRSxNQUFNcVMsRUFBU3ZDLEtBQUt3QyxvQkFBb0J4QyxLQUFLcUMsU0FDN0MsR0FBSUUsRUFBT0UsUUFBUyxDQUNsQixNQUFNQyxFQUFhLDRCQUE0QkgsRUFBT0ksaUJBQW9CLEtBQU8sTUFBUSw4QkFDekZ6UixRQUFRdkksSUFBSTZXLEVBQU1vRCxPQUFPLG1CQUFvQkYsR0FDN0MxQyxLQUFLNkMsZ0JBQWdCN0MsS0FBS3FDLFNBQzFCTCxFQUFJYyxRQUFRSixHQUVkMUMsS0FBSytDLGVBQWUvQyxLQUFLcUMsUUFBU3RVLEtBQVNpVSxHQUMzQyxNQUFPdFosR0FDUHdJLFFBQVF0SSxNQUFNLDRDQUE2Q0YsTUFFNUQsSUFJQzhaLG9CQUFvQkgsR0FLMUIsR0FBSXpSLEVBQUdDLFdBQVd3UixHQUFVLENBQzFCLE1BQU1XLEVBQWNwUyxFQUFHcVMsU0FBU1osR0FBU2EsS0FDbkNQLEVBQ3NGLEtBQTFGblEsR0FBWXdOLEtBQUsxWCxJQUFJK1EsVUFBK0IsOEJBQWdDLElBQWEsS0FDbkcsTUFBTyxDQUNMb0osUUFBU08sRUFBY0wsRUFDdkJLLFlBQUFBLEVBQ0FMLGlCQUFBQSxHQUdKLE1BQU8sQ0FBRUYsU0FBUyxHQUdaSSxnQkFBZ0JSLEdBQ2xCelIsRUFBR0MsV0FBV3dSLEtBQ2hCelIsRUFBR3VTLFdBQVdkLEdBQ2RlLEVBQWVmLElBSVhVLGVBQWVWLEVBQWlCdFUsS0FBaUJpVSxHQUN2RCxJQUNFLElBQUlyWixFQUFNLEdBQUcwYSxJQUFRaE4sT0FBTyxtQ0FBbUN0SSxFQUFLcVUsa0JBQ3BFSixFQUFJMUYsU0FBU3RRLElBQ1BBLGFBQWdCc1gsT0FBa0IsVUFBVHZWLEVBQzNCcEYsR0FBTyxvQ0FBb0M0YSxFQUFLbE4sT0FBT3JLLE1BQUFBLFNBQUFBLEVBQU13WCwwQ0FFekMsaUJBQVR4WCxJQUNUQSxFQUFPc0csS0FBS3VMLFVBQVU3UixFQUFNLEtBQU0sSUFFcENyRCxHQUFPLEdBQUdxRCxTQUdkckQsR0FBTyxLQUNQaUksRUFBRzZTLGVBQWVwQixFQUFTMVosR0FDM0IsTUFBT0QsR0FDUHdJLFFBQVF0SSxNQUFNLHNDQUF1Q0YsSUFJakR3WixjQUFjblUsRUFBYytULEdBQ2xDLFlBQWNsVyxJQUFWa1csR0FBaUMsUUFBVkEsSUFDdkIzWSxNQUFNZ0osUUFBUTJQLEdBQ1RBLEVBQU0vVixNQUFNQyxHQUFpQkEsSUFBUytCLEdBQWlCLFFBQVQvQixJQUVoRCtCLElBQVMrVCxHQUdsQnRULFdBQVd3VCxHQUNUaEMsS0FBSytCLFVBQVVMLEdBQVNsVCxXQUFZd1QsR0FHdENoRyxRQUFRZ0csR0FDTmhDLEtBQUsrQixVQUFVTCxHQUFTMUYsUUFBU2dHLEdBR25DcFosU0FBU29aLEdBQ1BoQyxLQUFLK0IsVUFBVUwsR0FBUzlZLFNBQVVvWixHQUdwQzVRLFFBQVE0USxHQUNOaEMsS0FBSytCLFVBQVVMLEdBQVN0USxRQUFTNFEsR0FHbkNaLFNBQVNZLEdBQ0hyUCxNQUNGcU4sS0FBSytCLFVBQVVMLEdBQVMxRixRQUFTZ0csVUN6RzFCMEIsR0FHWDNELFlBQVl6WCxHQUNWMFgsS0FBSzFYLElBQU1BLEVBR2I2RixjQUNFNUYsRUFDQVIsRUFBaUMsR0FDakM2SyxHQUVBLE1BQU0rUSxFQUE2QixHQUM3QkMsRUFBaUJyYixFQUNwQmMsS0FBSzJDLEdBQWlCNlgsR0FBd0I3RCxLQUFLMVgsSUFBSzBELEtBQ3hEaU4sUUFBT2pOLEdBR0ZnVSxLQUFLMVgsSUFBSXFULGFBQWFtSSxVQUFVOVgsRUFBSytYLFVBQ3ZDSixFQUFpQnRILEtBQUtyUSxFQUFLK1gsU0FDM0IvRCxLQUFLMVgsSUFBSUssSUFBSTZGLFFBQVEsaUNBQWlDeEMsRUFBSytYLFlBQ3BELEtBR0ovWCxFQUFLd0MsVUFLUndWLEVBQWVKLEVBQWV2YSxLQUFJMkMsR0FBUUEsRUFBS2lZLFdBQy9DQyxFQUFjTixFQUFldmEsS0FBSTJDLEdBQVFBLEVBQUsrWCxVQUNwRCxHQUFJQyxFQUFhL2EsT0FBUyxFQUFHLENBSTNCLE1BQU1zWixRQUFldkMsS0FBS21FLFlBQVksVUFBV0gsRUFBY2hFLEtBQUsxWCxJQUFJZ2EsUUFBU3ZhLEVBQVM2SyxHQUMxRixHQUFLMlAsRUFBTzZCLEtBY0wsQ0FDTCxNQUFNbkYsRUFBTWUsS0FBSzFYLElBQUlpUixLQUFLQyxVQUF1Qiw4Q0FBK0MsQ0FDOUY0SyxLQUFNLEdBQUc3QixFQUFPNkIsT0FDaEI1VSxLQUFNK1MsRUFBTy9TLE9BRWZ3USxLQUFLMVgsSUFBSUssSUFBSUMsTUFBTXFXLEdBQ25CZSxLQUFLMVgsSUFBSStiLEtBQUssZ0JBQWlCLENBQzdCQyxNQUFPdEUsS0FBSzFYLElBQUlpUixLQUFLQyxVQUF1Qix3Q0FDNUMrSyxLQUFNdEYsSUFNUixNQUp5QyxDQUN2Q3pRLFNBQVMsRUFDVCtWLEtBQU10RixHQXpCUmlGLEVBQVk1SCxTQUFTb0UsSUFDbkJWLEtBQUsxWCxJQUFJcVQsYUFBYTZJLGVBQWU5RCxNQUV2Q1YsS0FBSzFYLElBQUlLLElBQUk2RixRQUFRd1IsS0FBSzFYLElBQUlpUixLQUFLQyxVQUF1QiwwQ0FDMUR3RyxLQUFLMVgsSUFBSStiLEtBQUssaUJBQWtCLENBQzlCQyxNQUFPdEUsS0FBSzFYLElBQUlpUixLQUFLQyxVQUF1Qix5Q0FDNUMrSyxLQUFNLElBQUlMLEtBQWdCUCxLQU01QixNQUp3QyxDQUN0Q25WLFNBQVMsRUFDVCtWLEtBQU0sSUFBSUwsS0FBZ0JQLElBbUJ6QixHQUFnQyxJQUE1QkEsRUFBaUIxYSxPQUFjLENBQ3hDLE1BQU1nVyxFQUFNZSxLQUFLMVgsSUFBSWlSLEtBQUtDLFVBQXVCLGdEQUNqRHdHLEtBQUsxWCxJQUFJSyxJQUFJQyxNQUFNcVcsR0FDbkJlLEtBQUsxWCxJQUFJK2IsS0FBSyxnQkFBaUIsQ0FDN0JDLE1BQU90RSxLQUFLMVgsSUFBSWlSLEtBQUtDLFVBQXVCLHdDQUM1QytLLEtBQU10RixJQU1SLE1BSnlDLENBQ3ZDelEsU0FBUyxFQUNUK1YsS0FBTXRGLEdBSVJlLEtBQUsxWCxJQUFJSyxJQUFJNkYsUUFBUXdSLEtBQUsxWCxJQUFJaVIsS0FBS0MsVUFBdUIsMENBQzFEd0csS0FBSzFYLElBQUkrYixLQUFLLGlCQUFrQixDQUM5QkMsTUFBT3RFLEtBQUsxWCxJQUFJaVIsS0FBS0MsVUFBdUIseUNBQzVDK0ssS0FBTSxJQUFJTCxLQUFnQlAsS0FNNUIsTUFKd0MsQ0FDdENuVixTQUFTLEVBQ1QrVixLQUFNLElBQUlMLEtBQWdCUCxJQU1oQ3hWLGdCQUFnQjVGLEdBQ2QsTUFHTTJiLEVBSGlCM2IsRUFDcEJjLEtBQUsyQyxHQUFpQjZYLEdBQXdCN0QsS0FBSzFYLElBQUswRCxLQUN4RGlOLFFBQU9qTixHQUFRQSxFQUFLd0MsVUFDWW5GLEtBQUkyQyxHQUFRQSxFQUFLK1gsVUFDcEQsR0FBSUcsRUFBWWpiLE9BQVMsRUFBRyxDQUcxQixNQUFNc1osUUFBZXZDLEtBQUttRSxZQUFZLFlBQWFELEVBQWFsRSxLQUFLMVgsSUFBSWdhLFNBQ3pFLEdBQUtDLEVBQU82QixLQWNMLENBQ0wsTUFBTW5GLEVBQU1lLEtBQUsxWCxJQUFJaVIsS0FBS0MsVUFBdUIsZ0RBQWlELENBQ2hHNEssS0FBTSxHQUFHN0IsRUFBTzZCLE9BQ2hCNVUsS0FBTStTLEVBQU8vUyxPQUVmd1EsS0FBSzFYLElBQUlLLElBQUlDLE1BQU1xVyxHQUNuQmUsS0FBSzFYLElBQUkrYixLQUFLLGtCQUFtQixDQUMvQkMsTUFBT3RFLEtBQUsxWCxJQUFJaVIsS0FBS0MsVUFBdUIsMENBQzVDK0ssS0FBTXRGLElBTVIsTUFKeUMsQ0FDdkN6USxTQUFTLEVBQ1QrVixLQUFNdEYsR0F6QlJpRixFQUFZNUgsU0FBU29FLElBQ25CVixLQUFLMVgsSUFBSXFULGFBQWE4SSxpQkFBaUIvRCxNQUV6Q1YsS0FBSzFYLElBQUlLLElBQUk2RixRQUFRd1IsS0FBSzFYLElBQUlpUixLQUFLQyxVQUF1Qiw0Q0FDMUR3RyxLQUFLMVgsSUFBSStiLEtBQUssbUJBQW9CLENBQ2hDQyxNQUFPdEUsS0FBSzFYLElBQUlpUixLQUFLQyxVQUF1QiwyQ0FDNUMrSyxLQUFNTCxJQU1SLE1BSndDLENBQ3RDMVYsU0FBUyxFQUNUK1YsS0FBTUwsR0FtQkwsQ0FDTCxNQUFNakYsRUFBTWUsS0FBSzFYLElBQUlpUixLQUFLQyxVQUF1QixnREFDakR3RyxLQUFLMVgsSUFBSUssSUFBSUMsTUFBTXFXLEdBQ25CZSxLQUFLMVgsSUFBSStiLEtBQUssa0JBQW1CLENBQy9CQyxNQUFPdEUsS0FBSzFYLElBQUlpUixLQUFLQyxVQUF1QiwwQ0FDNUMrSyxLQUFNdEYsSUFNUixNQUp5QyxDQUN2Q3pRLFNBQVMsRUFDVCtWLEtBQU10RixJQU1aOVEsYUFDRTVGLEVBQ0FSLEVBQWlDLEdBQ2pDNkssR0FFQSxNQUdNc1IsRUFIaUIzYixFQUNwQmMsS0FBSzJDLEdBQWlCNlgsR0FBd0I3RCxLQUFLMVgsSUFBSzBELEtBQ3hEaU4sUUFBT2pOLEdBQVFBLEVBQUt3QyxVQUNZbkYsS0FBSTJDLEdBQVFBLEVBQUsrWCxVQUNwRCxHQUFJRyxFQUFZamIsT0FBUyxFQUFHLENBRzFCLE1BQU1zWixRQUFldkMsS0FBS21FLFlBQVksU0FBVUQsRUFBYWxFLEtBQUsxWCxJQUFJZ2EsUUFBU3ZhLEVBQVM2SyxHQUN4RixHQUFLMlAsRUFBTzZCLEtBV0wsQ0FDTCxNQUFNbkYsRUFBTWUsS0FBSzFYLElBQUlpUixLQUFLQyxVQUF1Qiw2Q0FBOEMsQ0FDN0Y0SyxLQUFNLEdBQUc3QixFQUFPNkIsT0FDaEI1VSxLQUFNK1MsRUFBTy9TLE9BRWZ3USxLQUFLMVgsSUFBSUssSUFBSUMsTUFBTXFXLEdBQ25CZSxLQUFLMVgsSUFBSStiLEtBQUssZUFBZ0IsQ0FDNUJDLE1BQU90RSxLQUFLMVgsSUFBSWlSLEtBQUtDLFVBQXVCLHVDQUM1QytLLEtBQU10RixJQU1SLE1BSnlDLENBQ3ZDelEsU0FBUyxFQUNUK1YsS0FBTXRGLEdBdEJSZSxLQUFLMVgsSUFBSUssSUFBSTZGLFFBQVF3UixLQUFLMVgsSUFBSWlSLEtBQUtDLFVBQXVCLHlDQUMxRHdHLEtBQUsxWCxJQUFJK2IsS0FBSyxnQkFBaUIsQ0FDN0JDLE1BQU90RSxLQUFLMVgsSUFBSWlSLEtBQUtDLFVBQXVCLHdDQUM1QytLLEtBQU1MLElBTVIsTUFKd0MsQ0FDdEMxVixTQUFTLEVBQ1QrVixLQUFNTCxHQW1CTCxDQUNMLE1BQU1qRixFQUFNZSxLQUFLMVgsSUFBSWlSLEtBQUtDLFVBQXVCLDZDQUNqRHdHLEtBQUsxWCxJQUFJSyxJQUFJQyxNQUFNcVcsR0FDbkJlLEtBQUsxWCxJQUFJK2IsS0FBSyxlQUFnQixDQUM1QkMsTUFBT3RFLEtBQUsxWCxJQUFJaVIsS0FBS0MsVUFBdUIsdUNBQzVDK0ssS0FBTXRGLElBTVIsTUFKeUMsQ0FDdkN6USxTQUFTLEVBQ1QrVixLQUFNdEYsSUFNSjlRLGtCQUNOekcsRUFDQWdkLEVBQ0FDLEVBQ0E1YyxFQUFpQyxHQUNqQzZLLEVBQW1CLElBR25CLE1BQU16SyxFQUFXSixFQUFRSSxVQUFZNlgsS0FBSzFYLElBQUkrUSxVQUErQixxQkFDdkVwUixFQUFRRixFQUFRRSxPQUFTK1gsS0FBSzFYLElBQUkrUSxVQUErQixrQkFDdkUsYUFBYSxJQUFJdkssU0FBU0MsWUFDeEIsSUFBSXVTLEVBQU8sQ0FBQzVaLEdBQUtrZCxPQUFPRixHQUFTRSxPQUFPLGtCQUFrQkEsT0FBTyxVQUM3RHpjLElBQ0ZtWixFQUFPQSxFQUFLc0QsT0FBTyxjQUFjemMsTUFFL0JGLElBQ0ZxWixFQUFPQSxFQUFLc0QsT0FBTyxXQUFXM2MsTUFFaEMsSUFDRSxNQUFNNGMsRUFBTUMsRUFBTSxNQUFPeEQsRUFBTSxDQUM3QjNRLElBQUtnVSxFQUNML1IsSUFBSy9HLE9BQU9rWixPQUFPLEdBQUlyVSxRQUFRa0MsSUFBS0EsS0FHdEMsSUFBSW9TLEVBQVMsR0FFVCxRQURKdlcsRUFBQW9XLEVBQUlJLGNBQ0EsSUFBQXhXLEdBQUFBLEVBQUE4USxHQUFHLFFBQVMvUCxJQUNad1YsR0FBVXhWLEtBRVgwVixLQUFLeFUsUUFBUXVVLFFBR1osUUFESm5KLEVBQUErSSxFQUFJTSxjQUNBLElBQUFySixHQUFBQSxFQUFBeUQsR0FBRyxRQUFTL1AsSUFDWndWLEdBQVV4VixLQUVYMFYsS0FBS3hVLFFBQVF5VSxRQUVoQk4sRUFBSXRGLEdBQUcsU0FBVTZFLElBSWJyVixFQUhHcVYsRUFHSyxDQUFFQSxLQUFBQSxFQUFNNVUsS0FBTXdWLEdBRmQsQ0FBRVosS0FBTSxFQUFHNVUsS0FBTXdWLE9BTTdCSCxFQUFJdEYsR0FBRyxTQUFVTixJQUNmZSxLQUFLMVgsSUFBSUssSUFBSUMsTUFBTXFXLEdBQ25CZSxLQUFLMVgsSUFBSUssSUFBSUMsTUFBTSx3QkFDbkJvWCxLQUFLMVgsSUFBSStiLEtBQUsxQyxHQUFjeUQsT0FBUSwyQkFFdEMsTUFBTzFjLEdBQ1BzWCxLQUFLMVgsSUFBSUssSUFBSUMsTUFBTUYsR0FDbkJzWCxLQUFLMVgsSUFBSStiLEtBQUsxQyxHQUFjeUQsT0FBUTFjLFFBVzVDLE1BQU1tYixHQUEwQixDQUFDdmIsRUFBYWlJLEtBQzVDLE1BQU10QixFQUFNLENBQ1ZULFNBQVMsRUFDVHlWLFNBQVUsR0FDVkYsUUFBUyxJQUVMeEIsRUFBU3ZSLEdBQXFCVCxFQUFZakksRUFBSUssS0FDcEQsSUFBSzRaLEVBQ0gsT0FBT3RULEVBSVQsTUFBTThVLEVBQVUxUyxHQUFvQmtSLEVBQVFqYSxFQUFJSyxLQUNoRCxPQUFLb2IsRUFHRSxDQUNMdlYsU0FBUyxFQUNUeVYsU0FBVTFCLEVBQ1Z3QixRQUFBQSxHQUxPOVUsU0MzUkVvVyxHQUtYdEYsWUFBWXpYLEdBSEowWCxLQUFJTCxLQUFhLEdBQ1JLLEtBQUFzRixTQUFXLElBQUlDLElBQ2Z2RixLQUFBd0YsVUFBWSxJQUFJdkYsSUFFL0JELEtBQUsxWCxJQUFNQSxFQUNYMFgsS0FBS2QsT0FHQ0EsT0FDTixNQUFNdUcsRUFBYzVhLEVBQUtuQixLQUFLc1csS0FBSzFYLElBQUlnYSxRQUFTLGdCQUNoRCxJQUFLMVIsRUFBR0MsV0FBVzRVLEdBQWMsQ0FDL0IsTUFBTWhVLEVBQU0sQ0FDVnBCLEtBQU0sZ0JBQ056SSxZQUFhLGdCQUNiOGQsV0FBWSw2Q0FDWkMsUUFBUyxPQUVYL1UsRUFBRzROLGNBQWNpSCxFQUFhblQsS0FBS3VMLFVBQVVwTSxHQUFNLFNBSy9DbVUsY0FBY3RkLEVBQWErSCxHQUNqQyxJQUNFLE9BQU95TyxFQUFLek8sRUFBTSxDQUFFd1YsUUFBU3ZkLEVBQUlnYSxVQUNqQyxNQUFPckQsR0FDUCxPQUFPcFUsRUFBS25CLEtBQUtwQixFQUFJZ2EsUUFBUyxlQUFnQmpTLElBS2xEeVYsT0FDRSxNQUFNQyxFQUFZbGIsRUFBS25CLEtBQUtzVyxLQUFLMVgsSUFBSWdhLFFBQVMsaUJBRTlDLElBQUsxUixFQUFHQyxXQUFXa1YsR0FDakIsT0FBTyxFQUVULE1BQU1OLEVBQWM1YSxFQUFLbkIsS0FBS3NXLEtBQUsxWCxJQUFJZ2EsUUFBUyxnQkFDMUMwRCxFQUFPdFUsRUFBYStULEdBQ3BCUSxFQUFPcGEsT0FBT0MsS0FBS2thLEVBQUtFLGNBQWdCLElBQ3hDQyxFQUFVdGEsT0FBT0MsS0FBS2thLEVBQUtJLGlCQUFtQixJQUM5QzFCLEVBQVV1QixFQUFLckIsT0FBT3VCLEdBQVNsTixRQUFRNUksSUFDM0MsSUFBSyx3Q0FBd0MvQyxLQUFLK0MsR0FBTyxPQUFPLEVBQ2hFLE1BQU14RixFQUFPbVYsS0FBSzRGLGNBQWM1RixLQUFLMVgsSUFBSytILEdBQzFDLE9BQU9PLEVBQUdDLFdBQVdoRyxNQUV2QixJQUFLLE1BQU1tUSxLQUFVMEosRUFDbkIxRSxLQUFLd0UsZUFBZXhKLEdBRXRCLE9BQU8sRUFHVHdKLGVBQWVuVSxFQUFjMEwsR0FDM0IsR0FBSzFMLEdBQXdCLGlCQUFUQSxFQUFwQixDQUlBMlAsS0FBS3NGLFNBQVNlLElBQUloVyxHQUNsQixJQUVFLEdBQUswTCxFQWNFLENBR0xpRSxLQUFLTCxLQUFLdEQsS0FBS2hNLEdBQ2YyUSxHQUFxQjNRLEdBQ3JCLE1BQU1pVyxFQUFrQnZLLEVBQU9pRSxLQUFLMVgsS0FDcEMwWCxLQUFLd0YsVUFBVWpGLElBQUlsUSxFQUFNaVcsR0FDekJBLEVBQWdCbkcsU0FBU0gsS0FBSzFYLFVBcEI5QixJQUNpRCxJQUEvQzBYLEtBQUsxWCxJQUFJK1EsVUFBVSxnQkFBZ0JoSixXQUNZekUsSUFBL0NvVSxLQUFLMVgsSUFBSStRLFVBQVUsZ0JBQWdCaEosS0FDbkMsQ0FDQTJQLEtBQUtMLEtBQUt0RCxLQUFLaE0sR0FDZjJRLEdBQXFCM1EsR0FFckIyUCxLQUFLcEUsVUFBVXZMLEdBQU84UCxTQUFTSCxLQUFLMVgsS0FDcEMsTUFBTXlULEVBQVMsZ0JBQWdCMUwsS0FDL0IyUCxLQUFLMVgsSUFBSStTLFdBQVcsQ0FDbEJVLENBQUNBLElBQVMsS0FZaEIsTUFBT3JULEdBQ1BzWCxLQUFLd0YsVUFBVTVFLE9BQU92USxHQUN0QjJQLEtBQUtMLEtBQU9LLEtBQUtMLEtBQUsxRyxRQUFRak4sR0FBaUJBLElBQVNxRSxJQUN4RDJQLEtBQUtzRixTQUFTMUUsT0FBT3ZRLEdBQ3JCMlAsS0FBSzFYLElBQUlLLElBQUlDLE1BQU1GLEdBQ25Cc1gsS0FBSzFYLElBQUkrYixLQUFLMUMsR0FBYzRFLGFBQWMsQ0FDeENqQyxNQUFPLFVBQVVqVSxlQUNqQmtVLEtBQU03YixVQXBDUnNYLEtBQUsxWCxJQUFJSyxJQUFJeUksS0FBSywrQkF5Q3RCcVQsaUJBQWlCcFUsR0FDZjJQLEtBQUtMLEtBQU9LLEtBQUtMLEtBQUsxRyxRQUFRak4sR0FBaUJBLElBQVNxRSxJQUN4RDJQLEtBQUtzRixTQUFTMUUsT0FBT3ZRLEdBQ3JCMlAsS0FBS3dGLFVBQVU1RSxPQUFPdlEsR0FDdEIyUSxHQUFxQjNRLEdBQ3JCMlAsS0FBSzFYLElBQUltVCxPQUFPVSxTQUFTc0UsV0FBV3BRLEdBQ3BDMlAsS0FBSzFYLElBQUltVCxPQUFPVyxZQUFZcUUsV0FBV3BRLEdBQ3ZDMlAsS0FBSzFYLElBQUltVCxPQUFPK0ssdUJBQXVCL0YsV0FBV3BRLEdBQ2xEMlAsS0FBSzFYLElBQUltVCxPQUFPZ0wsb0JBQW9CaEcsV0FBV3BRLEdBQy9DMlAsS0FBSzFYLElBQUltVCxPQUFPaUwsbUJBQW1CakcsV0FBV3BRLEdBQzlDMlAsS0FBSzFYLElBQUlaLElBQUkrWSxXQUFXcFEsR0FDeEIyUCxLQUFLMVgsSUFBSXFlLGFBQWEsZUFBZ0J0VyxHQUl4Q3VMLFVBQVV2TCxHQUNSLEdBQUkyUCxLQUFLd0YsVUFBVWxGLElBQUlqUSxHQUNyQixPQUFPMlAsS0FBS3dGLFVBQVUxVixJQUFJTyxHQUU1QixNQUFNMFYsRUFBWWxiLEVBQUtuQixLQUFLc1csS0FBSzFYLElBQUlnYSxRQUFTLGlCQUV4Q3ZHLEVBQVNpQyxRQUFRK0gsRUFBWTFWLEVBQXBCMk4sQ0FBMEJnQyxLQUFLMVgsS0FFOUMsT0FEQTBYLEtBQUt3RixVQUFVakYsSUFBSWxRLEVBQU0wTCxHQUNsQkEsRUFNVCtFLFVBQ0UsT0FBT2QsS0FBS0wsS0FHZG1FLFVBQVV6VCxHQUNSLE9BQU8yUCxLQUFLc0YsU0FBU2hGLElBQUlqUSxHQU0zQndMLGNBQ0UsTUFBTyxJQUFJbUUsS0FBS3NGLFdDbEpwQixNQUFNc0IsR0FBVyxJQUFJQyxFQ21CZkMsR0FBYSxJQUFJQyxFQUFNQyxNQUFNLENBQ2pDQyxXQUFZLFVBQ1pDLFdBQVksVUFDWkMsb0JBQW9CLElBSXRCLFNBQVNDLEdBQWVDLEVBQWdCemEsRUFBYTRDLEdBQy9CLGlCQUFUQSxHQUFxQixVQUFXQSxHQUFRLFlBQWFBLEVBQzlENlgsRUFBS0MsT0FBTzFhLEVBQUs0QyxFQUFLK0wsTUFBTy9MLEVBQUt6SCxTQUVsQ3NmLEVBQUtDLE9BQU8xYSxFQUFLNEMsR0F3RXJCLFNBQVMrWCxHQUFvQkMsR0FDM0IsT0FBQTNiLE9BQUFrWixPQUFBbFosT0FBQWtaLE9BQUEsR0FDS3lDLEdBQVEsQ0FDWEMsV0FBWUQsRUFBU0UsT0FDckJuRCxLQUFNaUQsRUFBU2hZLE9BSW5CLFNBQVNtWSxHQUFxQi9lLHFCQUM1QixNQUFNZ2YsRUFBVyxDQUNmelksZ0JBQVEyTSxFQUFlLFFBQWZyTixFQUFBN0YsTUFBQUEsT0FBSyxFQUFMQSxFQUFPRyxjQUFRLElBQUEwRixPQUFBLEVBQUFBLEVBQUFVLDZCQUFRaVQsZ0JBQWlCLEdBQ2hEL1UsS0FBb0IsUUFBZndhLEVBQUFqZixNQUFBQSxPQUFBLEVBQUFBLEVBQU9HLGNBQVEsSUFBQThlLE9BQUEsRUFBQUEsRUFBQXhhLE1BQU8sR0FDM0JvYSxZQUE2QixRQUFqQkssRUFBQWxmLE1BQUFBLE9BQUEsRUFBQUEsRUFBTzRlLGdCQUFVLElBQUFNLE9BQUEsRUFBQUEsRUFBQUosU0FBVSxFQUN2QzFYLFNBQVNwSCxNQUFBQSxTQUFBQSxFQUFPb0gsVUFBVyxHQUMzQndULE9BQU81YSxNQUFBQSxTQUFBQSxFQUFPNGEsUUFBUyxHQUN2QmdFLFNBQVUsQ0FDUkUsUUFBeUIsUUFBakJLLEVBQUFuZixNQUFBQSxPQUFBLEVBQUFBLEVBQU80ZSxnQkFBVSxJQUFBTyxPQUFBLEVBQUFBLEVBQUFMLFNBQVUsRUFDbkNELFlBQTZCLFFBQWpCTyxFQUFBcGYsTUFBQUEsT0FBQSxFQUFBQSxFQUFPNGUsZ0JBQVUsSUFBQVEsT0FBQSxFQUFBQSxFQUFBTixTQUFVLEVBQ3ZDbkQsTUFBdUIsUUFBakIwRCxFQUFBcmYsTUFBQUEsT0FBQSxFQUFBQSxFQUFPNGUsZ0JBQVUsSUFBQVMsT0FBQSxFQUFBQSxFQUFBelksT0FBUSxLQUduQyxPQUFPVixRQUFRRSxPQUFPNFksU0FHWE0sR0FJWG5JLFlBQVl6WCxHQUZKMFgsS0FBSy9YLE1BQXdCLEdBQ3JDK1gsS0FBT2pZLFFBQTRCLEdBRWpDaVksS0FBSzFYLElBQU1BLEVBQ1gwWCxLQUFLZCxPQUNMMEgsR0FBU3JILEdBQUdxQyxHQUFVdUcsZUFBZ0IzWSxVQUNwQyxPQUFRQSxFQUFLNEwsWUFDWCxJQUFLLFVBQ2tDLFVBQWhDNUwsRUFBSytMLGFBQTJCLElBQUE5TSxPQUFBLEVBQUFBLEVBQUV4RyxTQUNyQytYLEtBQUsvWCxNQUFTdUgsRUFBSytMLE1BQTRCdFQsT0FFakQsTUFDRixJQUFLLGVBQ0grWCxLQUFLL1gsTUFBUXVILEVBQUsrTCxVQU1sQjJELE9BQ04sTUFBTWpYLEVBQVErWCxLQUFLMVgsSUFBSStRLFVBQStCLGdCQUNsRHBSLElBQ0YrWCxLQUFLL1gsTUFBUUEsR0FJVG1nQixjQUNOLEdBQUlwSSxLQUFLL1gsTUFDUCxJQUNFLE1BQU1vZ0IsRUFBZSxJQUFJMVksRUFBSXFRLEtBQUsvWCxPQUNsQyxNQUFPLENBQ0xxZ0IsS0FBTUQsRUFBYUUsU0FDbkJDLEtBQU05YixTQUFTMmIsRUFBYUcsTUFBUSxJQUFLLElBQ3pDQyxTQUFVSixFQUFhSSxVQUV6QixNQUFPL2YsSUFJWCxPQUFPLEVBSVR3RyxRQU9FbkgsU0FDQWlZLEtBQUtqWSxRQUFRRSxNQUFRK1gsS0FBS29JLGNBQzFCcEksS0FBS2pZLFFBQVEyZ0IsUUFBVTNnQixFQUFRMmdCLFNBQVcsR0FDMUMxSSxLQUFLalksUUFBUTRnQixjQUFnQkMsRUFBQUEsRUFDN0I1SSxLQUFLalksUUFBUThnQixpQkFBbUJELEVBQUFBLEVBQzVCNUksS0FBS2pZLFFBQVFFLGdCQUFTd0csRUFBQTFHLEVBQVFzRiwwQkFBSzBDLFdBQVcsY0FDaERpUSxLQUFLalksUUFBUStlLFdBQWFnQyxFQUFjLENBQ3RDN2dCLE1BQU8sQ0FDTHFnQixLQUFNdEksS0FBS2pZLFFBQVFFLE1BQU1xZ0IsS0FDekJFLEtBQU14SSxLQUFLalksUUFBUUUsTUFBTXVnQixRQUc3QnhJLEtBQUtqWSxRQUFRRSxPQUFRLEdBRXJCK1gsS0FBS2pZLFFBQVErZSxXQUFhQSxHQUk1QixNQUFNaUMsRUFBV0MsRUFBTUMsT0FBT2pKLEtBQUtqWSxTQUNuQ2doQixFQUFTRyxhQUFhMUIsU0FBU3RMLElBQUlxTCxHQUFxQkksSUFHeEQsTUFBTXdCLEVBdEtWLFNBQTRCcGhCLFNBRzFCLElBQUlxaEIsR0FBaUIsRUFDckIsTUFBTUQsaUNBR0RwaEIsR0FBTyxDQUNWc0YsSUFBTXRGLEVBQVFzRixLQUFrQixHQUNoQ3FiLFFBQVMzZ0IsRUFBUTJnQixTQUFXLEtBRzlCLEdBQUkzZ0IsRUFBUUUsTUFBTyxDQUNqQixJQUFJb2dCLEVBQWV0Z0IsRUFBUUUsTUFDM0IsR0FBNEIsaUJBQWpCb2dCLEVBQTJCLENBQ3BDLElBQ0VBLEVBQWUsSUFBSTFZLEVBQUk1SCxFQUFRRSxPQUMvQixNQUFPUyxHQUNQMmYsR0FBZSxFQUNmYyxFQUFJbGhCLE9BQVEsRUFDWmlKLFFBQVF0SSxNQUFNRixHQUVoQjBnQixHQUFpQixFQUVmZixhQUNFNVosRUFBQTFHLEVBQVFzRiwwQkFBSzBDLFdBQVcsY0FDMUJvWixFQUFJbGhCLE9BQVEsRUFDWmtoQixFQUFJckMsV0FBYWdDLEVBQWMsQ0FDN0I3Z0IsTUFBTyxDQUNMcWdCLEtBQU1ELE1BQUFBLE9BQUEsRUFBQUEsRUFBY0UsU0FDcEJDLEtBQU05YixTQUFTMmIsTUFBQUEsT0FBQSxFQUFBQSxFQUFjRyxLQUFNLFFBSXZDVyxFQUFJbGhCLE1BQVEsQ0FDVnFnQixLQUFNRCxFQUFhRSxTQUNuQkMsS0FBTTliLFNBQVMyYixFQUFhRyxLQUFNLElBQ2xDQyxTQUFVLFNBS2xCLEdBQUksYUFBYzFnQixFQUFTLENBQ3pCLE1BQU1zZixFQUFPLElBQUlnQyxFQUNqQixJQUFLLE1BQU16YyxLQUFPN0UsRUFBUXVoQixTQUV4QmxDLEdBQWVDLEVBQU16YSxFQURSN0UsRUFBUXVoQixTQUFTMWMsSUFHaEN1YyxFQUFJM1osS0FBTzZYLEVBQ1g4QixFQUFJVCxRQUFVN2MsT0FBT2taLE9BQU9vRSxFQUFJVCxTQUFXLEdBQUlyQixFQUFLa0MsY0FDcERILEdBQWlCLFNBRVZELEVBQUlHLFNBYWIsTUFYSSxTQUFVdmhCLElBQ1pvaEIsRUFBSTNaLEtBQU96SCxFQUFRd2MsS0FDbkI2RSxHQUFpQixTQUVWRCxFQUFJNUUsTUFFVCxPQUFReGMsSUFDVm9oQixFQUFJcFQsT0FBU2hPLEVBQVF5aEIsR0FDckJKLEdBQWlCLEdBRW5CRCxFQUFJQyxlQUFpQkEsRUFDZEQsRUFxR09NLENBQW1CMWhCLEdBb0IvQixPQWxCQWdoQixFQUFTRyxhQUFhaGEsUUFBUWdOLEtBQUksU0FBVXdOLGFBRTFDLElBQUlDLEVBQWMsR0FjbEIsT0Fia0IsUUFBZGxiLEVBQUFpYixNQUFBQSxPQUFHLEVBQUhBLEVBQUtoQixlQUFTLElBQUFqYSxPQUFBLEVBQUFBLEVBQUFrYixjQUNoQkEsRUFBY0QsRUFBSWhCLFFBQVFpQixtQkFDbkJELEVBQUloQixRQUFRaUIsY0FDSSxRQUFkN04sRUFBQTROLE1BQUFBLE9BQUcsRUFBSEEsRUFBS2hCLGVBQVMsSUFBQTVNLE9BQUEsRUFBQUEsRUFBQThOLGNBQ3ZCRCxFQUFjRCxFQUFJaEIsUUFBUWtCLG1CQUNuQkYsRUFBSWhCLFFBQVFrQixjQUNFLFFBQVovQixFQUFBNkIsTUFBQUEsT0FBRyxFQUFIQSxFQUFLaEIsZUFBTyxJQUFBYixPQUFBLEVBQUFBLEVBQUcsbUJBQ3hCOEIsRUFBY0QsRUFBSWhCLFFBQVEsdUJBQ25CZ0IsRUFBSWhCLFFBQVEsaUJBRUQsS0FBaEJpQixHQUFzQkQsRUFBSWhCLFVBQzVCZ0IsRUFBSWhCLFFBQVEsZ0JBQWtCaUIsR0FFekJELEtBRUwsNEJBQTZCM2hCLEdBQVdBLEVBQVFxSCx3QkFDM0MyWixFQUFTN1osUUFBUWlhLEdBRWpCSixFQUFTN1osUUFBUWlhLEdBQUs3WixNQUFLTCxHQUU1QmthLEVBQUlDLGVBQ0YsU0FBVXJoQixFQUNSQSxFQUFRaWUsS0FDSC9XLEVBQUlPLFVBRGIsRUFJTzhDLEtBQUt1TCxVQUFVNU8sRUFBSU8sTUFHckJQLEVBQUlPLFFDdk1mLE1BQU9xYSxXQUFrQmhELEVBSTdCOUcsWUFBWXpYLEdBQ1Z3aEIsUUFDQTlKLEtBQUsxWCxJQUFNQSxFQUNYMFgsS0FBSytKLFFBQVVsZixFQUFLbkIsS0FBS3BCLEVBQUlnYSxRQUFTLFNBQVUsY0FDaEQvRCxFQUFjMVQsRUFBS25CLEtBQUtwQixFQUFJZ2EsUUFBUyxZQUNyQzBILEVBQWFuZixFQUFLbkIsS0FBS3BCLEVBQUlnYSxRQUFTLGdCQUc5Qm5VLG9CQUNOLElBRUUsR0FEQW9RLEVBQWMxVCxFQUFLa0MsUUFBUWlULEtBQUsrSixVQUM1Qm5aLEVBQUdDLFdBQVdtUCxLQUFLK0osVUFBWW5aLEVBQUdxUyxTQUFTakQsS0FBSytKLFNBQVM3RyxLQUFPLEVBQUcsT0FBTyxFQUM5RWxELEtBQUsxWCxJQUFJSyxJQUFJcVQsS0FBSyxzQkFDbEIsTUFBTS9NLFFBQVkrWixFQUFNbFosSUFuQlYsd0NBbUIyQixDQUFFVCxhQUFjLGdCQUd6RCxPQUZBdUIsRUFBRzROLGNBQWN3QixLQUFLK0osUUFBUzlhLEVBQUlPLE1BQ25Dd1EsS0FBSzFYLElBQUlLLElBQUlxVCxLQUFLLG9DQUNYLEVBQ1AsTUFBT3RULEdBRVAsT0FEQXNYLEtBQUsxWCxJQUFJSyxJQUFJQyxNQUFNLDhCQUNaLEdBSUhxaEIsY0FBYzNoQixHQUlwQixNQUFNc1EsRUFBa0J0USxFQUFJK1EsVUFBZ0Qsb0JBQ3RFYixFQUFtQmxRLEVBQUkrUSxVQUFpRCxxQkFDeEV0TCxFQUNKekYsRUFBSStRLFVBQStCLG9CQUNuQy9RLEVBQUkrUSxVQUErQixtQkFDbkMsT0FPRixPQU5pQi9RLEVBQUltVCxPQUFPVSxTQUFTck0sSUFBSS9CLElBQ3hCNkssRUFDZkEsRUFBZ0JwQixPQUFTLE9BQ2hCb0IsSUFDVEEsRUFBZ0JwQixPQUFTekosR0FFcEIsQ0FDTDZLLGdCQUFBQSxFQUNBSixpQkFBQUEsR0FJSnJLLFlBQVlwRSxHQUVWLE1BQU16QixFQ2xGbUIsQ0FBQ0EsSUFDckIsQ0FDTDRoQixXQUFZNWhCLEVBQUk0aEIsV0FDaEI1SCxRQUFTaGEsRUFBSWdhLFFBQ2IzWixJQUFLTCxFQUFJSyxJQUNUakIsSUFBS1ksRUFBSVosSUFDVHNkLE9BQVEsR0FDUmpiLE1BQU8sR0FDUG9nQixTQUFVLEdBQ1Z4TyxhQUFjclQsRUFBSXFULGFBQ2xCdlQsY0FBZUUsRUFBSUYsY0FDbkI4ZixRQUFTNWYsRUFBSTRmLFFBQ2J6TSxPQUFRblQsRUFBSW1ULE9BQ1oyTyxRQUFTOWhCLEVBQUk4aEIsUUFDYkMsWUFBYS9oQixFQUFJK2hCLFlBQ2pCbmIsUUFBUzVHLEVBQUk0RyxRQUNicUssS0FBTWpSLEVBQUlpUixLQUNWRixVQUFXL1EsRUFBSStRLFVBQVVpUixLQUFLaGlCLEdBQzlCK1MsV0FBWS9TLEVBQUkrUyxXQUFXaVAsS0FBS2hpQixHQUNoQ3FlLGFBQWNyZSxFQUFJcWUsYUFBYTJELEtBQUtoaUIsR0FDcENrVSxVQUFXbFUsRUFBSWtVLFVBQVU4TixLQUFLaGlCLEdBQzlCaWlCLFlBQWFqaUIsRUFBSWlpQixZQUFZRCxLQUFLaGlCLEdBQ2xDd1EsT0FBUXhRLEVBQUl3USxPQUFPd1IsS0FBS2hpQixHQUN4QmtpQixZQUFhbGlCLEVBQUlraUIsWUFBWUYsS0FBS2hpQixHQUNsQ2lYLEdBQUlqWCxFQUFJaVgsR0FBRytLLEtBQUtoaUIsR0FDaEJtaUIsS0FBTW5pQixFQUFJbWlCLEtBQUtILEtBQUtoaUIsR0FDcEJvaUIsZUFBZ0JwaUIsRUFBSW9pQixlQUFlSixLQUFLaGlCLEdBQ3hDcWlCLElBQUtyaUIsRUFBSXFpQixJQUFJTCxLQUFLaGlCLEdBQ2xCc2lCLG1CQUFvQnRpQixFQUFJc2lCLG1CQUFtQk4sS0FBS2hpQixHQUNoRHVpQixnQkFBaUJ2aUIsRUFBSXVpQixnQkFBZ0JQLEtBQUtoaUIsR0FDMUN3aUIsZ0JBQWlCeGlCLEVBQUl3aUIsZ0JBQWdCUixLQUFLaGlCLEdBQzFDeWlCLFVBQVd6aUIsRUFBSXlpQixVQUFVVCxLQUFLaGlCLEdBQzlCMGlCLGFBQWMxaUIsRUFBSTBpQixhQUFhVixLQUFLaGlCLEdBQ3BDK2IsS0FBTS9iLEVBQUkrYixLQUFLaUcsS0FBS2hpQixHQUNwQjJpQixjQUFlM2lCLEVBQUkyaUIsY0FBY1gsS0FBS2hpQixHQUN0QzRpQixnQkFBaUI1aUIsRUFBSTRpQixnQkFBZ0JaLEtBQUtoaUIsR0FDMUM2aUIsb0JBQXFCN2lCLEVBQUk2aUIsb0JBQW9CYixLQUFLaGlCLEdBQ2xEOGlCLFdBQVk5aUIsRUFBSThpQixXQUFXZCxLQUFLaGlCLEtENkNwQitpQixDQUFjckwsS0FBSzFYLEtBQy9CLElBQ0UsSUFBS2EsTUFBTWdKLFFBQVFwSSxHQUFRLE1BQU0sSUFBSXVaLE1BQU0sMkJBQzNDaGIsRUFBSXlCLE1BQVFBLEVBQ1p6QixFQUFJZ2pCLGFBQWUsR0FDbkJoakIsRUFBSTZoQixTQUFXb0IsRUFBVXhoQixHQUN6QnpCLEVBQUkwYyxPQUFTLEdBQ2IsTUFBTXBNLGdCQUFFQSxFQUFlSixpQkFBRUEsR0FBcUJ3SCxLQUFLaUssY0FBYzNoQixHQUlqRSxHQUhBQSxFQUFJK2IsS0FBSzFDLEdBQWM2SixnQkFBaUIsR0FDeENsakIsRUFBSStiLEtBQUsxQyxHQUFjOEosaUJBQWtCbmpCLEdBQ3pDQSxFQUFJSyxJQUFJcVQsS0FBSyxvQkFDVHBELEdBQW1CSixFQUFrQixDQUN2QyxNQUFNa1QsRUFBZTdnQixFQUFLbkIsS0FBS3BCLEVBQUlnYSxRQUFTLHFCQUV0Q3hULFFBQVE2YyxXQUNacmpCLEVBQUl5QixNQUFNVixLQUFJOEUsTUFBT25DLEVBQWM0ZixLQUNqQyxNQUFNQyxFQUFZemUsR0FBTXBCLEdBQ2xCZ1EsRUFBZ0M2UCxRQUFrQmxkLEdBQVczQyxFQUFNMUQsR0FBTyxDQUFFa0csU0FBUyxHQUMzRixHQUFJcWQsS0FBZTdQLEVBQUt4TixVQUFZd04sRUFBSzFOLFFBQVMsT0FFbEQsSUFBSXdkLEVBQ0FDLEdBQVMsRUFDYnpqQixFQUFJZ2pCLGFBQWNNLEdBQVM1ZixFQUMzQixNQUFNZ2dCLEVBQVlILEVBQVk3UCxFQUFLalIsU0FBVyxHQUFLRixFQUFLRSxRQUFRaUIsR0FDMUR6QixFQUFxQnNoQixFQUFZN1AsRUFBSzFOLE9BQVVzQyxFQUFHc04sYUFBYWxTLEdBQ3RFLEdBQUl1TSxHQUFtQkMsRUFBa0J3VCxHQUFZLENBQ25ELEtBQU14VCxNQUFBQSxPQUFnQixFQUFoQkEsRUFBa0JqRixvQkFBeUQsV0FBcENpRixNQUFBQSxPQUFBLEVBQUFBLEVBQWtCdEYsZUFBNEIsT0FDNUQ4TSxLQUFLaU0sZ0JBRWhDak0sS0FBSzFYLElBQUlLLElBQUl5SSxLQUFLLGlEQUNsQjJhLEdBQVMsR0FHUkEsSUFDSHpqQixFQUFJSyxJQUFJcVQsS0ExRkgsMEJBMkZMOFAsUUFBMEJ4VixHQUFrQi9MLEVBQVlpTyxFQUFtQndILEtBQUsrSixRQUFTemhCLEVBQUlLLE1BR2pHLEdBQUlnUSxHQUFlQyxFQUFpQm9ULEdBRWxDLEdBREExakIsRUFBSUssSUFBSXFULEtBOUZGLDZCQStGRDZQLEdBQTRCLFVBQWRHLEdBQXVDLFVBQWRBLEVBZTFDRixRQUEwQnJVLEdBQ3hCcVUsTUFBQUEsRUFBQUEsRUFBcUJ2aEIsRUFDckJxTyxFQUNBb1QsRUFDQTFqQixFQUFJSyxTQW5CNEQsQ0FDbEUsTUFBTXVqQixRQUFtQkMsRUFBWSxDQUNuQzdkLE9BQVEvRCxFQUNSOEwsT0FBUSxPQUNSTSxRQUFTLElBRUx5VixFQUFzQnZoQixFQUFLbkIsS0FBS2dpQixFQUFjLEdBQUc3Z0IsRUFBS0MsU0FBU2tCLEVBQU1nZ0IsVUFDM0VwYixFQUFHNE4sY0FBYzROLEVBQXFCeFgsT0FBT3hMLEtBQUs4aUIsSUFDbERKLFFBQTBCclUsR0FDeEI3RyxFQUFHc04sYUFBYWtPLEdBQ2hCeFQsRUFDQSxPQUNBdFEsRUFBSUssS0FlVixJQUpLbWpCLElBQXFCbFQsTUFBQUEsT0FBZSxFQUFmQSxFQUFpQmdCLGdCQUN6Q3RSLEVBQUlLLElBQUlxVCxLQUFLLHFCQUNiOFAsUUFBMEJqVCxHQUFXdE8sRUFBWXloQixJQUUvQ0YsRUFBbUIsQ0FDckIsSUFBSU8sR0FBU3pULE1BQUFBLE9BQWUsRUFBZkEsRUFBaUJoQyxXQUFZdUIsR0FBbUJTLEVBQWlCb1QsR0FBYUEsRUFDM0ZLLEVBQVNBLEVBQU90YyxXQUFXLEtBQU9zYyxFQUFTLElBQUlBLElBQy9DLE1BQU1DLEVBQVdULEVBQ2JoaEIsRUFBS25CLEtBQ0hnaUIsRUFDQSxHQUNFMVAsRUFBSzNOLFNBQ0QsR0FBR3hELEVBQUtDLFNBQVNrUixFQUFLM04sU0FBVXhELEVBQUtFLFFBQVFpUixFQUFLM04sY0FDbEQsSUFBSTVELE1BQU9rQixZQUNkMGdCLEtBRUx4aEIsRUFBS25CLEtBQUtnaUIsRUFBYyxHQUFHN2dCLEVBQUtDLFNBQVNrQixFQUFNZ2dCLEtBQWFLLEtBQ2hFL2pCLEVBQUlnakIsYUFBY00sR0FBUy9nQixFQUFLbkIsS0FDOUJtQixFQUFLa0MsUUFBUWYsR0FDYjZmLEVBQVloaEIsRUFBS0MsU0FBU3doQixHQUFZLEdBQUd6aEIsRUFBS0MsU0FBU2tCLEVBQU1nZ0IsS0FBYUssS0FFNUV6YixFQUFHNE4sY0FBYzhOLEVBQVVSLEdBQzNCeGpCLEVBQUl5QixNQUFNNmhCLEdBQVNVLFlBS3pCLElBQUssTUFBTXRnQixLQUFRMUQsRUFBSXlCLE1BQ3JCekIsRUFBSWdqQixhQUFhalAsS0FBS3JRLFNBSXBCZ1UsS0FBS3VNLGdCQUFnQmprQixTQUNyQjBYLEtBQUt3TSxZQUFZbGtCLEdBQ3ZCLE1BQU1ta0IsRUFBZW5rQixFQUFJK1EsVUFBZSxtQkFBcUIsR0FDN0QsR0FBSW9ULEVBQWEzUyxPQUFRLENBQ3ZCLE1BQU16RCxFQUFTb1csRUFBYXBXLFFBQVUsYUFDdEMvTixFQUFJMGMsT0FBUzFjLEVBQUkwYyxPQUFPM2IsS0FBSSxDQUFDMkMsRUFBZ0I0ZixLQUMzQyxJQUFJdmQsRUFBV3JDLEVBQUtxQyxTQWNwQixPQWJJZ0ksSUFDRmhJLEVBQVdsRSxHQUNUN0IsRUFBSWdqQixhQUFjTSxHQUNsQnZWLE9BQ0F6SyxFQUNBSSxFQUFLMGdCLFlBQWMxZ0IsRUFBSzBnQixZQUFjMWdCLEVBQUtzQyxRQUU3Q0QsRUFBV0EsRUFBUzNDLFFBQVEsT0FBUSxLQUNULE1BQXZCMkMsRUFBU3BELE9BQU8sS0FDbEJvRCxHQUFzQnVkLEVBQU0vaEIsYUFHaENtQyxFQUFLcUMsU0FBV0EsRUFDVHJDLEtBT1gsYUFKTWdVLEtBQUsyTSxhQUFhcmtCLFNBQ2xCMFgsS0FBSzRNLFNBQVN0a0IsR0FDcEJBLEVBQUl5QixNQUFRekIsRUFBSTZoQixlQUNWbkssS0FBSzZNLFlBQVl2a0IsR0FDaEJBLEVBQ1AsTUFBT0ksR0FLUCxHQUpBSixFQUFJSyxJQUFJeUksS0FBS3VRLEdBQWN5RCxRQUMzQjljLEVBQUkrYixLQUFLMUMsR0FBYzZKLGlCQUFrQixHQUN6Q2xqQixFQUFJK2IsS0FBSzFDLEdBQWN5RCxPQUFRMWMsR0FDL0JKLEVBQUlLLElBQUlDLE1BQU1GLEdBQ1ZKLEVBQUkrUSxVQUErQixTQUNyQyxNQUFNM1EsRUFFUixPQUFPSixHQUlINkYsc0JBQXNCN0YsR0FFNUIsYUFETTBYLEtBQUs4TSxjQUFjeGtCLEVBQUltVCxPQUFPK0ssdUJBQXdCbGUsR0FDckRBLEVBR0Q2RixrQkFBa0I3RixHQUN4QkEsRUFBSStiLEtBQUsxQyxHQUFjNkosZ0JBQWlCLElBQ3hDLE1BQU16ZCxFQUFPekYsRUFBSStRLFVBQStCLHVCQUF5QixPQUN6RSxJQUFJMFQsRUFBcUJoZixFQUNyQnFPLEVBQWM5VCxFQUFJbVQsT0FBT1csWUFBWXRNLElBQUkvQixHQVE3QyxPQVBLcU8sSUFDSEEsRUFBYzlULEVBQUltVCxPQUFPVyxZQUFZdE0sSUFBSSxRQUN6Q2lkLEVBQXFCLE9BQ3JCemtCLEVBQUlLLElBQUl5SSxLQUFLLDRCQUE0QnJELDRDQUUzQ3pGLEVBQUlLLElBQUlxVCxLQUFLLDJDQUEyQytRLFlBQ2xEM1EsTUFBQUEsT0FBQSxFQUFBQSxFQUFhL1QsT0FBT0MsSUFDbkJBLEVBR0Q2RixtQkFBbUI3RixHQUt6QixPQUpBQSxFQUFJK2IsS0FBSzFDLEdBQWM2SixnQkFBaUIsSUFDeENsakIsRUFBSUssSUFBSXFULEtBQUssaUJBQ2IxVCxFQUFJK2IsS0FBSzFDLEdBQWNxTCxjQUFlMWtCLFNBQ2hDMFgsS0FBSzhNLGNBQWN4a0IsRUFBSW1ULE9BQU9nTCxvQkFBcUJuZSxHQUNsREEsRUFHRDZGLGVBQWU3RixHQUNyQixJQUFJeUYsRUFDRnpGLEVBQUkrUSxVQUErQixvQkFDbkMvUSxFQUFJK1EsVUFBK0IsbUJBQ25DLE9BQ0U4QyxFQUFXN1QsRUFBSW1ULE9BQU9VLFNBQVNyTSxJQUFJL0IsR0FDbkNnZixFQUFxQmhmLEVBQ3BCb08sSUFDSDdULEVBQUlLLElBQUl5SSxLQUFLLHlCQUF5QnJELHdDQUN0Q0EsRUFBTyxPQUNQZ2YsRUFBcUIsT0FDckI1USxFQUFXN1QsRUFBSW1ULE9BQU9VLFNBQVNyTSxJQUFJLFNBRXJDeEgsRUFBSUssSUFBSXFULEtBQUsscUNBQXFDK1EsWUFDNUM1USxNQUFBQSxPQUFBLEVBQUFBLEVBQVU5VCxPQUFPQyxJQUN2QixJQUFLLE1BQU0ya0IsS0FBYTNrQixFQUFJMGMsT0FDMUJpSSxFQUFVbGYsS0FBT0EsRUFFbkIsT0FBT3pGLEVBR0Q2RixrQkFBa0I3RixHQUN4QkEsRUFBSStiLEtBQUsxQyxHQUFjdUwsYUFBYzVrQixHQUNyQ0EsRUFBSStiLEtBQUsxQyxHQUFjNkosZ0JBQWlCLFdBQ2xDeEwsS0FBSzhNLGNBQWN4a0IsRUFBSW1ULE9BQU9pTCxtQkFBb0JwZSxHQUN4RCxJQUFJMFosRUFBTSxHQUNWLE1BQU0vWSxFQUFTWCxFQUFJMGMsT0FBTy9iLE9BQ3BCa2tCLEdBQXdGLElBQXBFN2tCLEVBQUkrUSxVQUFnQyw0QkFDOUQsSUFBSyxJQUFJK1QsRUFBSSxFQUFHQSxFQUFJbmtCLEVBQVFta0IsU0FDVSxJQUF6QjlrQixFQUFJMGMsT0FBT29JLEdBQUdDLFNBQ3ZCckwsR0FBT21MLEVBQW9CMWYsR0FBZ0JuRixFQUFJMGMsT0FBT29JLEdBQUdDLFFBQVcva0IsRUFBSTBjLE9BQU9vSSxHQUFHQyxPQUM5RUQsSUFBTW5rQixFQUFTLElBQ2pCK1ksR0FBTyxjQUdKMVosRUFBSTBjLE9BQU9vSSxHQUFHVixtQkFDZHBrQixFQUFJMGMsT0FBT29JLEdBQUc5ZSxPQUl2QixPQUZBaEcsRUFBSStiLEtBQUsxQyxHQUFjMkwsU0FBVWhsQixHQUNqQ0EsRUFBSUssSUFBSTZGLFFBQVEsS0FBS3dULEtBQ2QxWixFQUdENkYsb0JBQW9Cb2YsRUFBcUNqbEIsR0FDL0QsTUFBTUMsRUFBVWdsQixFQUFpQnpNLFVBQzNCME0sRUFBY0QsRUFBaUI3UixZQUMvQitSLEVBQWdCRixFQUFpQjFNLFVBWXZDLGFBWE0vUixRQUFRNGUsSUFDWm5sQixFQUFRYyxLQUFJOEUsTUFBTzROLEVBQWlCNlAsS0FDbEMsSUFDRXRqQixFQUFJSyxJQUFJcVQsS0FBSyxHQUFHeVIsTUFBa0JELEVBQVk1QixvQkFDeEM3UCxFQUFPMVQsT0FBT0MsR0FDcEIsTUFBT0ksR0FFUCxNQURBSixFQUFJSyxJQUFJQyxNQUFNLEdBQUc2a0IsTUFBa0JELEVBQVk1QixZQUN6Q2xqQixPQUlMSixZRXJUS3FsQixJQUFpQjlpQixLQUMvQkEsRUFBSStpQixXQUNKQSxHQUFhLEVBQUtDLFNBQ2xCQSxHQUFXLEVBQUlDLFlBQ2ZBLEdBQWMsSUFPZCxNQUFNQyxFQUFZbGpCLE1BQUFBLE9BQUEsRUFBQUEsRUFBTWEsUUFBUSxhQUFjLElBQUlBLFFBQVEsVUFBVyxLQUNyRSxPQUFLcWlCLEVBR0UsR0FBR0gsRUFBYSxJQUFNLEtBQUtHLElBQVlGLEVBQVcsSUFBTSxLQUZ0REMsRUFBYyxHQUFLLElBS3hCLFNBQVVFLEdBQVduakIsR0FDekIsT0FBT0EsRUFDSmEsUUFBUSxVQUFXLEtBQ25Cc0IsTUFBTSxLQUNOM0QsS0FBSTRrQixHQUFLQyxtQkFBbUJELEtBQzVCdmtCLEtBQUssS0NYVixNQXNCTXlrQixHQUFjLENBQUM5Z0IsRUFBYStnQixFQUFlL2YsRUFBa0JELEVBQWtCd0YsS0FDNUUsQ0FDTHpFLE9BQVEsTUFDUjlCLElBQUssR0FBR0EsZ0JBQ1JxYixRQUFTLENBQ1BpQixZQUFhLHNCQUNiLGFBQWMsVUFDZDBFLGNBQWVELEVBQ2YsWUFBYUYsbUJBQW1COWYsSUFFbENrYixTQUFVLENBQ1IxYixLQUFNLENBQ0oyTixNQUFPM0gsRUFDUDdMLFFBQVMsQ0FDUHVtQixTQUFVamdCLEtBSWhCZSx5QkFBeUIsSUFJdkJtZixHQUFpQixDQUFDam1CLEVBQWEyRyxLQUNuQyxHQUF1QixNQUFuQkEsRUFBSXdZLFlBQXdDLE1BQWxCeFksRUFBSXNWLEtBQUtILE1BQXFDLFlBQXJCblYsRUFBSXNWLEtBQUt2VSxRQU05RCxNQUxBMUgsRUFBSStiLEtBQUsxQyxHQUFjNEUsYUFBYyxDQUNuQ2pDLE1BQU9oYyxFQUFJaVIsS0FBS0MsVUFBdUIsaUJBQ3ZDK0ssS0FBTWpjLEVBQUlpUixLQUFLQyxVQUF1Qiw4QkFDdENsRyxLQUFNckUsRUFBSXNWLEtBQUt2VSxVQUVYLElBQUlzVCxNQUFNclUsRUFBSXNWLEtBQUt2VSxVQUl2QndlLEdBQWlCemxCLElBQ3JCLE1BQU1zRSxJQUFFQSxFQUFHK2dCLE1BQUVBLEVBQUtLLFNBQUVBLEVBQVFDLFNBQUVBLEVBQVFDLFdBQUVBLEVBQVVDLFFBQUVBLEVBQU9DLFVBQUVBLEdBQWM5bEIsRUFDM0UsTUFBTyxDQUNMc0UsS0FBTUEsR0FBTyxJQUFJM0IsUUFBUSxNQUFPLElBQ2hDMGlCLE1BQU9BLEdBQVMsR0FDaEJLLFNBQVVBLEdBQVksR0FDdEJDLFNBQVVBLEdBQVksR0FDdEJDLFdBQVloQixHQUFpQixDQUMzQjlpQixLQUFNOGpCLEdBQWMsR0FDcEJmLFlBQVksRUFDWkMsVUFBVSxFQUNWQyxhQUFhLElBRWZjLFFBQVNBLEVBQ0xqQixHQUFpQixDQUNmOWlCLEtBQU0rakIsR0FBVyxHQUNqQmhCLFlBQVksRUFDWkMsVUFBVSxFQUNWQyxhQUFhLElBRWYsR0FDSmUsV0FBWUEsR0FBYSxJQUFJbmpCLFFBQVEsTUFBTyxNQUkxQ3JELEdBQVM4RixNQUFPN0YsSUFDcEIsTUFBTXdtQixFQUFjeG1CLEVBQUkrUSxVQUF3QixxQkFDaEQsSUFBS3lWLEVBQWEsTUFBTSxJQUFJeEwsTUFBTSw4QkFFbEMsTUFBTWpXLElBQUVBLEVBQUdvaEIsU0FBRUEsRUFBUUMsU0FBRUEsRUFBUUMsV0FBRUEsRUFBVUMsUUFBRUEsRUFBT0MsVUFBRUEsR0FBY0wsR0FBY00sR0FDbEYsSUFBSVYsTUFBRUEsR0FBVUksR0FBY00sR0FJOUIsR0FIS1YsSUFDSEEsT0F2RmtCamdCLE9BQU83RixFQUFhK0UsRUFBYW9oQixFQUFrQkMsS0FDdkUsTUFBTUssRUFBYXptQixFQUFJK1EsVUFBNEIsbUNBQ25ELEdBQUkwVixHQUFjQSxFQUFXQyxhQUFldmtCLEtBQUtELE1BQVF1a0IsRUFBV0MsWUFBYyxNQUFXRCxFQUFXWCxNQUN0RyxPQUFPVyxFQUFXWCxNQUVwQixNQUFNbmYsUUFBWStaLEVBQU1pRyxLQUFLLEdBQUc1aEIsbUJBQXNCLENBQ3BEb2hCLFNBQUFBLEVBQ0FDLFNBQUFBLElBRUYsR0FBc0IsTUFBbEJ6ZixFQUFJTyxLQUFLNFUsTUFBcUMsWUFBckJuVixFQUFJTyxLQUFLUSxRQUF1QixDQUMzRCxNQUFNb2UsRUFBUW5mLEVBQUlPLEtBQUtBLEtBQUs0ZSxNQU81QixPQU5BOWxCLEVBQUkrUyxXQUFXLENBQ2Isa0NBQW1DLENBQ2pDK1MsTUFBQUEsRUFDQVksWUFBYXZrQixLQUFLRCxTQUdmNGpCLEVBRVQsTUFBTSxJQUFJOUssTUFBTSxxQkFvRUE0TCxDQUFjNW1CLEVBQUsrRSxFQUFLb2hCLEVBQVVDLEtBRTdDcmhCLEtBQVMrZ0IsR0FBVUssR0FBWUMsR0FBWSxNQUFNLElBQUlwTCxNQUFNLG1DQUVoRSxNQUFNNkwsRUFBVTdtQixFQUFJMGMsT0FDcEIsSUFBSyxNQUFNL1IsS0FBT2tjLEVBQ2hCLEdBQUlsYyxFQUFJNUUsVUFBWTRFLEVBQUkzRSxPQUFRLENBQzlCLElBQUlzRixFQUFRWCxFQUFJM0UsUUFDWHNGLEdBQVNYLEVBQUl5WixjQUNoQjlZLEVBQVFnQixPQUFPeEwsS0FBSzZKLEVBQUl5WixZQUFhLFdBRXZDLE1BQU0wQyxFQUFpQixHQUFHVCxJQUFhMWIsRUFBSTVFLFdBQ3JDZ2hCLEVBQWFsQixHQUFZOWdCLEVBQUsrZ0IsRUFBT25iLEVBQUk1RSxTQUFVK2dCLEVBQWdCeGIsR0FDbkUwYixRQUFtQmhuQixFQUFJNEcsUUFBUW1nQixHQUNyQ2QsR0FBZWptQixFQUFLZ25CLEdBQ3BCLE1BQU1DLEVBQWEsR0FBR2xpQixnQkFDaEJtaUIsRUFBYSxHQUFHbmlCLGVBQ2hCb2lCLFFBQW9Cbm5CLEVBQUk0RyxRQUFRLENBQ3BDQyxPQUFRLE9BQ1I5QixJQUFLa2lCLEVBQ0w3RyxRQUFTLENBQ1AyRixjQUFlRCxFQUNmLGVBQWdCLG9CQUVsQjdKLEtBQU0sQ0FDSm1LLFNBQVUsR0FDVmdCLEtBQU0sRUFDTkMsU0FBVSxFQUNWQyxTQUFTLEVBQ1Qva0IsS0FBTUEsRUFBS2tDLFFBQVFxaUIsSUFFckJoZ0IseUJBQXlCLElBRTNCbWYsR0FBZWptQixFQUFLbW5CLEdBQ3BCLE1BQU1JLFFBQW9Cdm5CLEVBQUk0RyxRQUFRLENBQ3BDQyxPQUFRLE9BQ1I5QixJQUFLbWlCLEVBQ0w5RyxRQUFTLENBQ1AyRixjQUFlRCxFQUNmLGVBQWdCLG9CQUVsQjdKLEtBQU0sQ0FDSm1LLFNBQVUsR0FDVjdqQixLQUFNdWtCLEVBQ05NLEtBQU0sRUFDTkMsU0FBVSxFQUNWQyxTQUFTLEdBRVh4Z0IseUJBQXlCLElBRTNCbWYsR0FBZWptQixFQUFLdW5CLEdBQ3BCLE1BQU1DLEVBQU9ELEVBQVd0TCxLQUFLL1UsS0FBS3NnQixLQUM1QkMsRUFBYy9CLEdBQVcsR0FBR1ksR0FBV0QsSUFBYTFiLEVBQUk1RSxZQUM5RDRFLEVBQUlvYSxPQUFTLEdBQUd3QixHQUFheGhCLE1BQVEwaUIsSUFDckM5YyxFQUFJb2EsUUFBVXlDLEVBQU8sU0FBU0EsSUFBUyxVQUNoQzdjLEVBQUl5WixtQkFDSnpaLEVBQUkzRSxPQUdmLE9BQU9oRyxHQUdIUyxHQUFVVCxJQUNkLE1BQU04USxFQUFhOVEsRUFBSStRLFVBQXdCLHNCQUF3QixHQTRHdkUsTUEzR2dDLENBQzlCLENBQ0VoSixLQUFNLE1BQ050QyxLQUFNLFFBQ0Z1TCxhQUNGLE9BQU9oUixFQUFJaVIsS0FBS0MsVUFBdUIscUJBRXJDM1IsWUFDRixPQUFPUyxFQUFJaVIsS0FBS0MsVUFBdUIscUJBRXJDeEosY0FDRixPQUFPMUgsRUFBSWlSLEtBQUtDLFVBQXVCLDZCQUV6Q0UsUUFBU04sRUFBVy9MLEtBQU8sR0FDM0JvTSxVQUFVLEdBRVosQ0FDRXBKLEtBQU0sUUFDTnRDLEtBQU0sUUFDRnVMLGFBQ0YsT0FBT2hSLEVBQUlpUixLQUFLQyxVQUF1Qix1QkFFckMzUixZQUNGLE9BQU9TLEVBQUlpUixLQUFLQyxVQUF1Qix1QkFFckN4SixjQUNGLE9BQU8xSCxFQUFJaVIsS0FBS0MsVUFBdUIsK0JBRXpDRSxRQUFTTixFQUFXZ1YsT0FBUyxHQUM3QjNVLFVBQVUsR0FFWixDQUNFcEosS0FBTSxXQUNOdEMsS0FBTSxRQUNGdUwsYUFDRixPQUFPaFIsRUFBSWlSLEtBQUtDLFVBQXVCLDBCQUVyQzNSLFlBQ0YsT0FBT1MsRUFBSWlSLEtBQUtDLFVBQXVCLDBCQUVyQ3hKLGNBQ0YsT0FBTzFILEVBQUlpUixLQUFLQyxVQUF1QixrQ0FFekNFLFFBQVNOLEVBQVdxVixVQUFZLEdBQ2hDaFYsVUFBVSxHQUVaLENBQ0VwSixLQUFNLFdBQ050QyxLQUFNLFFBQ0Z1TCxhQUNGLE9BQU9oUixFQUFJaVIsS0FBS0MsVUFBdUIsMEJBRXJDM1IsWUFDRixPQUFPUyxFQUFJaVIsS0FBS0MsVUFBdUIsMEJBRXJDeEosY0FDRixPQUFPMUgsRUFBSWlSLEtBQUtDLFVBQXVCLGtDQUV6Q0UsUUFBU04sRUFBV3NWLFVBQVksR0FDaENqVixVQUFVLEdBRVosQ0FDRXBKLEtBQU0sYUFDTnRDLEtBQU0sUUFDRnVMLGFBQ0YsT0FBT2hSLEVBQUlpUixLQUFLQyxVQUF1Qiw2QkFFckMzUixZQUNGLE9BQU9TLEVBQUlpUixLQUFLQyxVQUF1Qiw2QkFFckN4SixjQUNGLE9BQU8xSCxFQUFJaVIsS0FBS0MsVUFBdUIscUNBRXpDRSxRQUFTTixFQUFXdVYsWUFBYyxHQUNsQ2xWLFVBQVUsR0FFWixDQUNFcEosS0FBTSxVQUNOdEMsS0FBTSxRQUNGdUwsYUFDRixPQUFPaFIsRUFBSWlSLEtBQUtDLFVBQXVCLDBCQUVyQzNSLFlBQ0YsT0FBT1MsRUFBSWlSLEtBQUtDLFVBQXVCLDBCQUVyQ3hKLGNBQ0YsT0FBTzFILEVBQUlpUixLQUFLQyxVQUF1QixrQ0FFekNFLFFBQVNOLEVBQVd3VixTQUFXLEdBQy9CblYsVUFBVSxHQUVaLENBQ0VwSixLQUFNLFlBQ050QyxLQUFNLFFBQ0Z1TCxhQUNGLE9BQU9oUixFQUFJaVIsS0FBS0MsVUFBdUIsMkJBRXJDM1IsWUFDRixPQUFPUyxFQUFJaVIsS0FBS0MsVUFBdUIsMkJBRXJDeEosY0FDRixPQUFPMUgsRUFBSWlSLEtBQUtDLFVBQXVCLG1DQUV6Q0UsUUFBU04sRUFBV3lWLFdBQWEsR0FDakNwVixVQUFVLEtDcFFoQixNQUFNdVcsR0FBb0IsS0FBYyxJQUFJdmxCLE1BQU93bEIsY0FHN0NDLEdBQW9CLENBQUNub0IsRUFBd0JzRyxLQUNqRCxNQUFNOGhCLEVBQU9ILEtBRVBJLEVBQWEsVUFERkMsRUFBT2hpQixJQUFhLCtCQUNLOGhCLE9BQVVwb0IsRUFBUXVvQixVQUFVdm9CLEVBQVE4QyxPQUFPd0QsSUFDL0VraUIsRUFBWXZtQixFQUFPd21CLFdBQVcsT0FBUXpvQixFQUFRMG9CLGlCQUFpQjNuQixPQUFPc25CLEdBQVlsbUIsT0FBTyxVQUMvRixNQUFPLE9BQU9uQyxFQUFRMm9CLGVBQWVILEtBR2pDcEMsR0FBYyxDQUNsQnBtQixFQUNBc0csRUFDQWtpQixFQUNBM2MsS0FFTyxDQUNMekUsT0FBUSxNQUNSOUIsSUFBSyxXQUFXdEYsRUFBUXVvQixVQUFVdm9CLEVBQVE0b0IscUJBQXFCM0MsR0FBVyxHQUFHam1CLEVBQVE4QyxPQUFPd0QsT0FDNUZxYSxRQUFTLENBQ1BrSSxLQUFNLEdBQUc3b0IsRUFBUXVvQixVQUFVdm9CLEVBQVE0b0Isb0JBQ25DdEMsY0FBZWtDLEVBQ2Y5bEIsS0FBTXVsQixLQUNOLGVBQWdCSyxFQUFPaGlCLElBQWEsNEJBRXRDa1csS0FBTTNRLEVBQ054RSx5QkFBeUIsSUFJdkIvRyxHQUFTOEYsTUFBTzdGLElBQ3BCLE1BQU11b0IsRUFBZ0J2b0IsRUFBSStRLFVBQXlCLGlCQUNuRCxJQUFLd1gsRUFBZSxNQUFNLElBQUl2TixNQUFNLGdDQUNwQ3VOLEVBQWNobUIsS0FBTzhpQixHQUFpQixDQUFFOWlCLEtBQU1nbUIsRUFBY2htQixPQUM1RCxJQUNFLE1BQU1za0IsRUFBVTdtQixFQUFJMGMsT0FDZDZKLEdBQWFnQyxFQUFjaEMsV0FBYSxJQUFJbmpCLFFBQVEsTUFBTyxJQUMzRGIsRUFBT2dtQixFQUFjaG1CLEtBQzNCLElBQUssTUFBTW9JLEtBQU9rYyxFQUNoQixHQUFJbGMsRUFBSTVFLFVBQVk0RSxFQUFJM0UsT0FBUSxDQUM5QixNQUFNaWlCLEVBQVlMLEdBQWtCVyxFQUFlNWQsRUFBSTVFLFVBQ3ZELElBQUl1RixFQUFRWCxFQUFJM0UsUUFDWHNGLEdBQVNYLEVBQUl5WixjQUNoQjlZLEVBQVFnQixPQUFPeEwsS0FBSzZKLEVBQUl5WixZQUFhLFdBRXZDLE1BQU0za0IsRUFBVW9tQixHQUFZMEMsRUFBZTVkLEVBQUk1RSxTQUFVa2lCLEVBQVczYyxHQUVwRSxHQUF3QixhQURMdEwsRUFBSTRHLFFBQVFuSCxJQUN0QjBmLFdBVVAsTUFBTSxJQUFJbkUsTUFBTSxpQkFWVyxRQUNwQnJRLEVBQUl5WixtQkFDSnpaLEVBQUkzRSxPQUNYLE1BQU13aUIsRUFBWUQsRUFBYzlvQixTQUFXLEdBRXpDa0wsRUFBSW9hLE9BREZ3QixFQUNXLEdBQUdBLEtBQWFiLEdBQVcsR0FBR25qQixJQUFPb0ksRUFBSTVFLGNBQWN5aUIsSUFFdkQsV0FBV0QsRUFBY1AsVUFBVU8sRUFBY0YscUJBQXFCM0MsR0FBVyxHQUFHbmpCLElBQU9vSSxFQUFJNUUsY0FBY3lpQixLQU9sSSxPQUFPeG9CLEVBQ1AsTUFBTzJXLEdBS1AsTUFKQTNXLEVBQUkrYixLQUFLMUMsR0FBYzRFLGFBQWMsQ0FDbkNqQyxNQUFPaGMsRUFBSWlSLEtBQUtDLFVBQXVCLGlCQUN2QytLLEtBQU1qYyxFQUFJaVIsS0FBS0MsVUFBdUIsb0JBRWxDeUYsSUFJSmxXLEdBQVVULElBQ2QsTUFBTThRLEVBQWE5USxFQUFJK1EsVUFBeUIsa0JBQW9CLEdBbUdwRSxNQWxHZ0MsQ0FDOUIsQ0FDRWhKLEtBQU0sY0FDTnRDLEtBQU0sUUFDRnVMLGFBQ0YsT0FBT2hSLEVBQUlpUixLQUFLQyxVQUF1QixnQ0FFckMzUixZQUNGLE9BQU9TLEVBQUlpUixLQUFLQyxVQUF1QixnQ0FFekNFLFFBQVNOLEVBQVdzWCxhQUFlLEdBQ25DalgsVUFBVSxHQUVaLENBQ0VwSixLQUFNLGtCQUNOdEMsS0FBTSxRQUNGdUwsYUFDRixPQUFPaFIsRUFBSWlSLEtBQUtDLFVBQXVCLG9DQUVyQzNSLFlBQ0YsT0FBT1MsRUFBSWlSLEtBQUtDLFVBQXVCLG9DQUV6Q0UsUUFBU04sRUFBV3FYLGlCQUFtQixHQUN2Q2hYLFVBQVUsR0FFWixDQUNFcEosS0FBTSxTQUNOdEMsS0FBTSxRQUNGdUwsYUFDRixPQUFPaFIsRUFBSWlSLEtBQUtDLFVBQXVCLDJCQUVyQzNSLFlBQ0YsT0FBT1MsRUFBSWlSLEtBQUtDLFVBQXVCLDJCQUV6Q0UsUUFBU04sRUFBV2tYLFFBQVUsR0FDOUI3VyxVQUFVLEdBRVosQ0FDRXBKLEtBQU0sT0FDTnRDLEtBQU0sUUFDRnVMLGFBQ0YsT0FBT2hSLEVBQUlpUixLQUFLQyxVQUF1Qix5QkFFckMzUixZQUNGLE9BQU9TLEVBQUlpUixLQUFLQyxVQUF1Qix5QkFFekNFLFFBQVNOLEVBQVd1WCxNQUFRLEdBQ3hCM2dCLGNBQ0YsT0FBTzFILEVBQUlpUixLQUFLQyxVQUF1QixpQ0FFekNDLFVBQVUsR0FFWixDQUNFcEosS0FBTSxPQUNOdEMsS0FBTSxRQUNGdUwsYUFDRixPQUFPaFIsRUFBSWlSLEtBQUtDLFVBQXVCLHlCQUVyQzNSLFlBQ0YsT0FBT1MsRUFBSWlSLEtBQUtDLFVBQXVCLHlCQUVyQ3hKLGNBQ0YsT0FBTzFILEVBQUlpUixLQUFLQyxVQUF1QixpQ0FFekNFLFFBQVNOLEVBQVd2TyxNQUFRLEdBQzVCNE8sVUFBVSxHQUVaLENBQ0VwSixLQUFNLFlBQ050QyxLQUFNLFFBQ0Z1TCxhQUNGLE9BQU9oUixFQUFJaVIsS0FBS0MsVUFBdUIsOEJBRXJDM1IsWUFDRixPQUFPUyxFQUFJaVIsS0FBS0MsVUFBdUIsOEJBRXJDeEosY0FDRixPQUFPMUgsRUFBSWlSLEtBQUtDLFVBQXVCLHNDQUV6Q0UsUUFBU04sRUFBV3lWLFdBQWEsR0FDakNwVixVQUFVLEdBRVosQ0FDRXBKLEtBQU0sVUFDTnRDLEtBQU0sUUFDRnVMLGFBQ0YsT0FBT2hSLEVBQUlpUixLQUFLQyxVQUF1Qiw0QkFFckMzUixZQUNGLE9BQU9TLEVBQUlpUixLQUFLQyxVQUF1Qiw0QkFFckN4SixjQUNGLE9BQU8xSCxFQUFJaVIsS0FBS0MsVUFBdUIsb0NBRXpDRSxRQUFTTixFQUFXclIsU0FBVyxHQUMvQjBSLFVBQVUsS0N6S2hCLE1BQU1zWCxHQW9CSmhSLFlBQVkvRCxHQUNWZ0UsS0FBS21RLEtBQU8sSUFBSTFsQixLQUNoQnVWLEtBQUtoRSxLQUFPQSxFQUdQdFIsT0FDTCxNQUFPLEdBQUdzVixLQUFLbVEsS0FBS3hsQixnQkFHZnFtQixRQUNMLE9BQVFoUixLQUFLbVEsS0FBS2psQixXQUFhLEdBQUdyQixXQUFXMkIsU0FBUyxFQUFHLEtBR3BEeWxCLE1BQ0wsT0FBT2pSLEtBQUttUSxLQUFLaGxCLFVBQVV0QixXQUFXMkIsU0FBUyxFQUFHLEtBRzdDeVksV0FDTCxPQUFPakUsS0FBS2hFLEtBQUszTixTQUdaQSxtQkFDTCxPQUEwQixRQUFsQkksRUFBQXVSLEtBQUtoRSxLQUFLM04sZ0JBQVEsSUFBQUksRUFBQUEsRUFBSSxJQUFJL0MsZ0JBQVFvUSxFQUFBa0UsS0FBS2hFLEtBQUtqUix1QkFBVyxHQUFJLElBRzlEbW1CLGdCQUNMLE9BQXlCLFFBQWpCemlCLEVBQUF1UixLQUFLaEUsS0FBS2pSLGVBQU8sSUFBQTBELEVBQUFBLEVBQUksSUFBSS9DLFFBQVEsSUFBSyxJQUd6Q3lsQixNQUNMLE9BQU9ubkIsRUFBT0MsV0FBVyxPQUFPbkIsT0FBT2tYLEtBQUtvUixhQUFjbG5CLE9BQU8sT0FHNURtbkIsU0FDTCxPQUFPcm5CLEVBQ0pDLFdBQVcsT0FDWG5CLE9BQU9rWCxLQUFLb1IsYUFDWmxuQixPQUFPLFVBQ1B3QixRQUFRLE1BQU8sS0FDZkEsUUFBUSxNQUFPLEtBQ2ZBLFFBQVEsTUFBTyxJQUdiNGxCLGNBQ0wsT0FBT3RuQixFQUNKQyxXQUFXLE9BQ1huQixPQUFPa1gsS0FBS29SLGFBQ1psbkIsT0FBTyxVQUNQd0IsUUFBUSxNQUFPLEtBQ2ZBLFFBQVEsTUFBTyxLQUNmVCxNQUFNLEVBQUcsR0FHUHNtQixPQUNMLE9BQU92bkIsRUFBT0MsV0FBVyxRQUFRbkIsT0FBT2tYLEtBQUtvUixhQUFjbG5CLE9BQU8sT0FHN0RzbkIsU0FDTCxPQUFPeG5CLEVBQU9DLFdBQVcsVUFBVW5CLE9BQU9rWCxLQUFLb1IsYUFBY2xuQixPQUFPLE9BRy9EdW5CLFlBQ0wsT0FBT2xvQixLQUFLQyxNQUFNaUIsS0FBS0QsTUFBUSxLQUFNWCxXQUdoQzZuQixjQUNMLE9BQU9qbkIsS0FBS0QsTUFBTVgsV0FHWnVuQixZQUNOLE9BQU9wUixLQUFLaEUsS0FBSzBRLFlBQWMxTSxLQUFLaEUsS0FBSzBRLFlBQWMxTSxLQUFLaEUsS0FBSzFOLFFBSXJELFNBQUFxakIsR0FBVzNWLEVBQWdCM0YsR0FDekMsSUFBS0EsRUFDSCxPQUFPMkYsRUFBSzNOLFNBR2QsTUFBTXVqQixFQUFvQixJQUFJYixHQUFrQi9VLEdBRWhELElBQUkyVixFQUFxQnRiLEVBRXpCLElBQUssTUFBTXpKLEtBQU9ta0IsR0FBa0JjLE9BQVEsQ0FDMUMsTUFBTUMsRUFBSyxJQUFJdmxCLE9BQU8sSUFBSUssS0FBUSxLQUVsQytrQixFQUFhQSxFQUFXam1CLFFBQVFvbUIsRUFBSUYsRUFBa0JobEIsTUFHeEQsT0FBTytrQixXQW1ET0ksR0FDZDlwQixFQUNBK3BCLEVBQ0E3SyxHQUVBLE1BQU04SyxFQXJCUixTQUE0QjVrQixFQUFNLElBQ2hDLElBQUtBLEVBQUssTUFBTyxHQUVqQixJQUFLLGVBQWVDLEtBQUtELEdBQU0sQ0FDN0IsTUFBT2liLEVBQU1FLEdBQVFuYixFQUFJTCxNQUFNLEtBQy9CLE1BQU8sVUFBVXNiLEVBQUs1YyxRQUFRLFlBQWEsZ0JBQWdCOGMsSUFHN0QsSUFDRSxNQUFNQyxTQUFFQSxFQUFRRixTQUFFQSxFQUFRQyxLQUFFQSxHQUFTLElBQUk3WSxFQUFJdEMsR0FDN0MsTUFBTyxHQUFHb2IsTUFBYUYsRUFBUzdjLFFBQVEsWUFBYSxnQkFBZ0I4YyxJQUNyRSxNQUFPOWYsR0FDUCxNQUFPLElBU2F3cEIsQ0FBbUJqcUIsR0FDekMsSUFBS2dxQixFQUNILE9BWUYsT0FBTyxJQVRPRCxFQUFhRyxFQUFrQkMsR0FDN0IsQ0FDZEMsV0FBVyxFQUNYQyxlQUFnQixJQUNoQkMsV0FBWSxPQUNacEwsbUJBQUFBLEVBQ0FsZixNQUFPZ3FCLElDakVYOWpCLGVBQWVxa0IsR0FBVzlWLEVBQTZCK1YsRUFBY0MsR0FDbkUsSUFDRSxNQUFNQyxRQUFrQkMsRUFDdEJsVyxFQUFLbVcsT0FDTCxJQUFJQyxFQUFpQixDQUNuQkMsT0FBUXJXLEVBQUtzVyxXQUNiQyxJQUFLdlcsRUFBSzdSLEtBQ1Zxb0IsUUFBU1QsRUFDVFUsVUFBV1QsSUFFYixDQUFFVSxVQUFXLE9BRVRDLEVBQVksSUFBSWhtQixFQUFJc0MsSUFBSWdqQixHQUU5QixPQURBVSxFQUFVQyxPQUFTLEdBQ1pELEVBQVVFLEtBQ2pCLE1BQU90VSxHQUNQLE9BQU9uUSxRQUFRRSxPQUFPaVEsSUQzSGpCOFIsR0FBQWMsT0FBUyxDQUNkLE9BQ0EsUUFDQSxNQUNBLFdBQ0EsV0FDQSxVQUNBLE1BQ0EsU0FDQSxjQUNBLE9BQ0EsU0FDQSxZQUNBLGVDa0hKLElBQWUxVixHQUFBLENBQ2JxWCxlQW5IRixTQUF3QjlXLFdBQ3RCLElBQUlzVixHQUFhLEVBQ2pCLElBRUVBLEVBQTRCLFdBRGxCLElBQUkza0IsRUFBSXNDLElBQUkrTSxFQUFLK1csVUFDWmhMLFNBQ2YsTUFBTVosSUFJUixNQUFNNkwsRUFBMEMsR0FDNUMxQixFQUNGMEIsRUFBZ0I1TSxXQUFhaUwsR0FBY3JWLEVBQUt6VSxPQUFPLEVBQWlDLFVBQTNCeVUsRUFBS3lLLDBCQUFzQixJQUFBMVksR0FBQUEsR0FFeEZpbEIsRUFBZ0JDLFVBQVk1QixHQUFjclYsRUFBS3pVLE9BQU8sRUFBa0MsVUFBM0J5VSxFQUFLeUssMEJBQXNCLElBQUFyTCxHQUFBQSxHQUcxRixNQUFNOFgsRUFBZ0MsQ0FDcENDLE9BQVFuWCxFQUFLbVgsUUFBVSxPQUN2QkosU0FBVS9XLEVBQUsrVyxlQUFZN25CLEVBQzNCa29CLFlBQWEsQ0FDWHBELFlBQWFoVSxFQUFLcVgsWUFDbEJDLGdCQUFpQnRYLEVBQUtzWCxpQkFFeEJDLElBQUtqQyxFQUNMa0MsZUFBZ0J4WCxFQUFLeVgsZ0JBQ3JCQyxlQUFnQixJQUFJQyxFQUFnQlgsSUFJdEMsT0FEZSxJQUFJWSxFQUFTVixJQXdGNUJXLGlCQTFFRnBtQixlQUFnQ3VPLEdBQzlCLElBQUtBLEVBQUsxUSxLQUFLc0MsU0FBV29PLEVBQUsxUSxLQUFLMGdCLFlBQ2xDLE9BQU81ZCxRQUFRRSxPQUFPLElBQUlzVSxNQUFNLG9CQUdsQyxJQUFJaUIsRUFDQW9GLEVBQ0E2SyxFQUVKLE1BQ01qUSxLQUFBQSxFQUFNb0YsWUFBQUEsRUFBYTZLLGdCQUFBQSxTRDJDcEJybUIsZUFBMkI2TixTQUtoQyxNQUFNdUcsRUFJRixHQUVKLEdBQUl2RyxFQUFLMFEsWUFBYSxDQUNwQixNQUFNbkksRUFBT3ZJLEVBQUswUSxZQUFZaGhCLFFBQVEsdUJBQXdCLElBQzlENlcsRUFBT29ILFlBQXFFLFFBQXZEbGIsRUFBQXVOLEVBQUswUSxZQUFZNWEsTUFBTSxxQ0FBZ0MsSUFBQXJELE9BQUEsRUFBQUEsRUFBQSxHQUM1RThULEVBQU9nQyxLQUFPM1AsT0FBT3hMLEtBQUttYixFQUFNLFVBQ2hDaEMsRUFBT2lTLGdCQUFrQixjQUVyQnhZLEVBQUtqUixVQUNQd1gsRUFBT29ILFlBQWM4SyxFQUFLQyxRQUFRMVksRUFBS2pSLFVBRXpDd1gsRUFBT2dDLEtBQU92SSxFQUFLMU4sT0FJckIsSUFBS2lVLEVBQU9vSCxZQUFhLENBQ3ZCLE1BQU1nTCxRQUFpQkMsRUFBU0MsV0FBV3RTLEVBQU9nQyxNQUNsRGhDLEVBQU9vSCxZQUFjZ0wsTUFBQUEsT0FBQSxFQUFBQSxFQUFVRixLQUdqQyxPQUFPbFMsRUN4RTRDdVMsQ0FBWXBZLEVBQUsxUSxPQUNsRSxNQUFPaVQsR0FDUCxPQUFPblEsUUFBUUUsT0FBT2lRLEdBR3hCLE1BQU10WCxFQUFVLElBQUlvdEIsRUFBaUIsQ0FDbkNoQyxPQUFRclcsRUFBS3NXLFdBQ2JDLElBQUt2VyxFQUFLN1IsS0FDVm1xQixJQUFLdFksRUFBS3VZLElBQ1ZDLEtBQU0zUSxFQUNOcUYsWUFBYUQsRUFDYndMLGdCQUFpQlgsSUFHbkIsSUFBSXhQLEVBT0EzWCxFQU5KLElBQ0UyWCxRQUFldEksRUFBS21XLE9BQU91QyxLQUFLenRCLEdBQ2hDLE1BQU9zWCxHQUNQLE9BQU9uUSxRQUFRRSxPQUFPaVEsR0FJeEIsR0FBS3ZDLEVBQUsyWSxVQU9SaG9CLEVBQU0sR0FBR3FQLEVBQUsyWSxhQUFhM1ksRUFBSzdSLFlBTmhDLElBQ0V3QyxRQUFZbWxCLEdBQVc5VixFQUFNc0ksRUFBT3NRLEtBQU90USxFQUFPbU8sV0FDbEQsTUFBT2xVLEdBQ1AsT0FBT25RLFFBQVFFLE9BQU9pUSxHQU0xQixNQUFPLENBQ0wyTSxNQUFPbFAsRUFBS2tQLE1BQ1poZixJQUFLOFAsRUFBSzdSLEtBQ1Z3QyxJQUFBQSxFQUNBa29CLE9BQVFsb0IsRUFDUnFsQixVQUFXMU4sRUFBT21PLFVBQ2xCVixLQUFNek4sRUFBT3NRLE9BMkJmOUMsV0FBQUEsSUN0SUYsU0FBU2dELEdBQStCQyxHQUN0QyxNQUF3QyxpQkFBN0JBLEVBQ3lDLFNBQTNDQSxFQUF5Qm5kLGNBRTNCb2QsUUFBUUQsR0FHakIsTUFBTXB0QixHQUFTOEYsTUFBTzdGLElBQ3BCLE1BQU04USxFQUFvQzlRLEVBQUkrUSxVQUFVLHVCQUN4RCxJQUFLRCxFQUFZLE1BQU0sSUFBSWtLLE1BQU0scUNBRWpDLE1BQU1tUyxFQUEyQkQsR0FBK0JwYyxFQUFXcWMsMEJBQzNFLElBQUlKLEVBQVlqYyxFQUFXaWMsVUFDdkJBLElBQ0ZBLEVBQVlBLEVBQVUzcEIsUUFBUSxPQUFRLElBQ2xDME4sRUFBVythLGtCQUFvQnNCLElBQ2pDSixHQUFhLElBQU1qYyxFQUFXNFosYUFJbEMsTUFBTUgsRUFBUzFXLEdBQVNxWCxlQUFlcGEsR0FDakM0TCxFQUFTMWMsRUFBSTBjLE9BRWIyUSxFQUFRM1EsRUFBTzNiLEtBQUk4RSxNQUFPbkMsRUFBTTRwQixJQUNwQ3paLEdBQVNvWSxpQkFBaUIsQ0FDeEIxQixPQUFBQSxFQUNBakgsTUFBT2dLLEVBQ1A1QyxXQUFZNVosRUFBVzRaLFdBQ3ZCbm9CLEtBQU04bUIsR0FBVzNsQixFQUFNb04sRUFBV3VWLFlBQ2xDM2lCLEtBQUFBLEVBQ0FpcEIsSUFBSzdiLEVBQVc2YixLQUFPLGNBQ3ZCSSxVQUFBQSxNQUlKLElBQUlRLEVBRUosSUFDRUEsUUFBZ0IvbUIsUUFBUTRlLElBQUlpSSxHQUM1QixNQUFPMVcsR0FPUCxNQU5BM1csRUFBSUssSUFBSUMsTUFBTSxnQ0FDZE4sRUFBSStiLEtBQUsxQyxHQUFjNEUsYUFBYyxDQUNuQ2pDLE1BQU8sWUFDUEMsS0FBTSxZQUNOalIsS0FBTSxLQUVGMkwsRUFHUixJQUFLLE1BQU1zRCxLQUFVc1QsRUFBUyxDQUM1QixNQUFNakssTUFBRUEsRUFBS3ZlLElBQUVBLEVBQUdrb0IsT0FBRUEsR0FBV2hULFNBQ3hCeUMsRUFBTzRHLEdBQU90ZCxjQUNkMFcsRUFBTzRHLEdBQU9jLFlBQ3JCMUgsRUFBTzRHLEdBQU95QixPQUFTa0ksRUFDdkJ2USxFQUFPNEcsR0FBT3ZlLElBQU1BLEVBR3RCLE9BQU8vRSxHQUdIUyxHQUFVVCxJQVVkLElBQUk4USxFQUFhOVEsRUFBSStRLFVBQWlDLHdCQUEwQixHQUNoRkQsRUFBa0J2TixPQUFBa1osT0FBQWxaLE9BQUFrWixPQUFBLEdBVjJCLENBQzNDZ1AsWUFBYSxHQUNiQyxnQkFBaUIsR0FDakJoQixXQUFZLEdBQ1pyRSxXQUFZLGlDQUNad0YsaUJBQWlCLEVBQ2pCaE4sb0JBQW9CLEVBQ3BCOE4sSUFBSyxnQkFHNkI3YixHQWdNcEMsTUEvTGdDLENBQzlCLENBQ0UvSSxLQUFNLGNBQ050QyxLQUFNLFFBQ04yTCxRQUFTTixFQUFXMmEsWUFDcEJ0YSxVQUFVLEVBQ05ILGFBQ0YsT0FBT2hSLEVBQUlpUixLQUFLQyxVQUF1QixrQ0FFckMzUixZQUNGLE9BQU9TLEVBQUlpUixLQUFLQyxVQUF1QixrQ0FFckN4SixjQUNGLE9BQU8xSCxFQUFJaVIsS0FBS0MsVUFBdUIsMkNBRzNDLENBQ0VuSixLQUFNLGtCQUNOdEMsS0FBTSxRQUNOMkwsUUFBU04sRUFBVzRhLGdCQUNwQnZhLFVBQVUsRUFDTkgsYUFDRixPQUFPaFIsRUFBSWlSLEtBQUtDLFVBQXVCLHVDQUVyQzNSLFlBQ0YsT0FBT1MsRUFBSWlSLEtBQUtDLFVBQXVCLHVDQUVyQ3hKLGNBQ0YsT0FBTzFILEVBQUlpUixLQUFLQyxVQUF1QixnREFHM0MsQ0FDRW5KLEtBQU0sYUFDTnRDLEtBQU0sUUFDTjJMLFFBQVNOLEVBQVc0WixXQUNwQnZaLFVBQVUsRUFDTkgsYUFDRixPQUFPaFIsRUFBSWlSLEtBQUtDLFVBQXVCLDZCQUVyQzNSLFlBQ0YsT0FBT1MsRUFBSWlSLEtBQUtDLFVBQXVCLDZCQUVyQ3hKLGNBQ0YsT0FBTzFILEVBQUlpUixLQUFLQyxVQUF1QixzQ0FHM0MsQ0FDRW5KLEtBQU0sYUFDTnRDLEtBQU0sUUFDTjJMLFFBQVNOLEVBQVd1VixXQUNwQmxWLFVBQVUsRUFDTkgsYUFDRixPQUFPaFIsRUFBSWlSLEtBQUtDLFVBQXVCLGlDQUVyQzNSLFlBQ0YsT0FBT1MsRUFBSWlSLEtBQUtDLFVBQXVCLGlDQUVyQ3hKLGNBQ0YsT0FBTzFILEVBQUlpUixLQUFLQyxVQUF1QiwwQ0FHM0MsQ0FDRW5KLEtBQU0sU0FDTnRDLEtBQU0sUUFDTjJMLFFBQVNOLEVBQVd5YSxPQUNwQnBhLFVBQVUsRUFDTkgsYUFDRixPQUFPaFIsRUFBSWlSLEtBQUtDLFVBQXVCLDZCQUVyQzNSLFlBQ0YsT0FBT1MsRUFBSWlSLEtBQUtDLFVBQXVCLDZCQUVyQ3hKLGNBQ0YsT0FBTzFILEVBQUlpUixLQUFLQyxVQUF1QixzQ0FHM0MsQ0FDRW5KLEtBQU0sV0FDTnRDLEtBQU0sUUFDTjJMLFFBQVNOLEVBQVdxYSxTQUNwQmhhLFVBQVUsRUFDTkgsYUFDRixPQUFPaFIsRUFBSWlSLEtBQUtDLFVBQXVCLCtCQUVyQzNSLFlBQ0YsT0FBT1MsRUFBSWlSLEtBQUtDLFVBQXVCLCtCQUVyQ3hKLGNBQ0YsT0FBTzFILEVBQUlpUixLQUFLQyxVQUF1Qix3Q0FHM0MsQ0FDRW5KLEtBQU0sUUFDTnRDLEtBQU0sUUFDTjJMLFFBQVNOLEVBQVduUixNQUNwQndSLFVBQVUsRUFDTkgsYUFDRixPQUFPaFIsRUFBSWlSLEtBQUtDLFVBQXVCLDRCQUVyQzNSLFlBQ0YsT0FBT1MsRUFBSWlSLEtBQUtDLFVBQXVCLDRCQUVyQ3hKLGNBQ0YsT0FBTzFILEVBQUlpUixLQUFLQyxVQUF1QixxQ0FHM0MsQ0FDRW5KLEtBQU0sWUFDTnRDLEtBQU0sUUFDTjJMLFFBQVNOLEVBQVdpYyxVQUNwQjViLFVBQVUsRUFDTkgsYUFDRixPQUFPaFIsRUFBSWlSLEtBQUtDLFVBQXVCLGdDQUVyQzNSLFlBQ0YsT0FBT1MsRUFBSWlSLEtBQUtDLFVBQXVCLGdDQUVyQ3hKLGNBQ0YsT0FBTzFILEVBQUlpUixLQUFLQyxVQUF1Qix5Q0FHM0MsQ0FDRW5KLEtBQU0sa0JBQ050QyxLQUFNLFVBQ04yTCxRQUFTTixFQUFXK2Esa0JBQW1CLEVBQ3ZDMWEsVUFBVSxFQUNOSCxhQUNGLE9BQU9oUixFQUFJaVIsS0FBS0MsVUFBdUIsc0NBRXJDM1IsWUFDRixPQUFPUyxFQUFJaVIsS0FBS0MsVUFBdUIsc0NBRXJDeEosY0FDRixPQUFPMUgsRUFBSWlSLEtBQUtDLFVBQXVCLCtDQUczQyxDQUNFbkosS0FBTSxxQkFDTnRDLEtBQU0sVUFDTjJMLFFBQVNOLEVBQVcrTixxQkFBc0IsRUFDMUMxTixVQUFVLEVBQ05ILGFBQ0YsT0FBT2hSLEVBQUlpUixLQUFLQyxVQUF1Qix5Q0FFckMzUixZQUNGLE9BQU9TLEVBQUlpUixLQUFLQyxVQUF1Qix5Q0FFckN4SixjQUNGLE9BQU8xSCxFQUFJaVIsS0FBS0MsVUFBdUIsa0RBRzNDLENBQ0VuSixLQUFNLE1BQ050QyxLQUFNLE9BQ04yTCxRQUFTTixFQUFXNmIsS0FBTyxjQUMzQnRiLFFBQVMsQ0FDUCxVQUNBLGNBQ0Esb0JBQ0EscUJBQ0EsZ0JBQ0Esb0JBQ0EsNkJBRUZGLFVBQVUsRUFDTkgsYUFDRixPQUFPaFIsRUFBSWlSLEtBQUtDLFVBQXVCLDBCQUVyQzNSLFlBQ0YsT0FBT1MsRUFBSWlSLEtBQUtDLFVBQXVCLDBCQUVyQ3hKLGNBQ0YsT0FBTzFILEVBQUlpUixLQUFLQyxVQUF1QixtQ0FHM0MsQ0FDRW5KLEtBQU0sMkJBQ050QyxLQUFNLFVBQ04yTCxRQUFTOGIsR0FBK0JwYyxFQUFXcWMsNEJBQTZCLEVBQ2hGaGMsVUFBVSxFQUNOSCxhQUNGLE9BQU9oUixFQUFJaVIsS0FBS0MsVUFBdUIsK0NBRXJDM1IsWUFDRixPQUFPUyxFQUFJaVIsS0FBS0MsVUFBdUIsK0NBRXJDeEosY0FDRixPQUFPMUgsRUFBSWlSLEtBQUtDLFVBQXVCLDBEQ25RL0MsU0FBU3NjLEdBQWtCQyxFQUFjbHJCLEVBQWN3RCxFQUFrQjJuQixFQUFnQixJQUN2RixNQUFPLGdDQUFnQ0QsY0FBaUIvSCxHQUFXLEdBQUduakIsSUFBT3dELE9BQWMybkIsSUFHN0YsTUFBTTdILEdBQWMsQ0FBQzlmLEVBQWtCdEcsRUFBd0J5SCxLQUM3RCxNQUFNNGUsTUFBRUEsRUFBSzJILEtBQUVBLEdBQVNodUIsRUFDbEI0aEIsRUFBYzBHLEVBQU9oaUIsSUFBYSwyQkFDeEMsTUFBTyxDQUNMYyxPQUFRLE1BQ1I5QixJQUFLeW9CLEdBQWtCQyxFQUFNaHVCLEVBQVE4QyxLQUFNd0QsR0FDM0NxYSxRQUFTLENBQ1AyRixjQUFlLFNBQVNELElBQ3hCLGFBQWMsVUFDZCxlQUFnQnpFLEdBRWxCcEYsS0FBTS9VLEVBQ053VyxNQUFNLElBSUpySixHQUFhLENBQUN0TyxFQUFrQnRHLEtBQ3BDLE1BQU1xbUIsTUFBRUEsRUFBSzJILEtBQUVBLEVBQUlFLE9BQUVBLEdBQVdsdUIsRUFDaEMsTUFBTyxDQUNMb0gsT0FBUSxNQUNSOUIsSUFBS3lvQixHQUFrQkMsRUFBTWh1QixFQUFROEMsS0FBTXdELEVBQVUsUUFBUTRuQixLQUM3RHZOLFFBQVMsQ0FDUDJGLGNBQWUsU0FBU0QsSUFDeEIsYUFBYyxXQUVoQnBJLE1BQU0sSUFJSjNkLEdBQVM4RixNQUFPN0YsSUFDcEIsTUFBTTR0QixFQUFnQjV0QixFQUFJK1EsVUFBeUIsaUJBQ25ELElBQUs2YyxFQUFlLE1BQU0sSUFBSTVTLE1BQU0sNEJBRXBDLE1BQU1xTCxFQUFhaEIsR0FBaUIsQ0FBRTlpQixLQUFNcXJCLEVBQWNyckIsT0FDMURxckIsRUFBY3JyQixLQUFPOGpCLEVBQ3JCdUgsRUFBY3JILFdBQWFxSCxFQUFjckgsV0FBYSxJQUFJbmpCLFFBQVEsTUFBTyxJQUN6RSxJQUNFLE1BQU15akIsRUFBVTdtQixFQUFJMGMsT0FDcEIsSUFBSyxNQUFNL1IsS0FBT2tjLEVBQ2hCLEdBQUlsYyxFQUFJNUUsVUFBWTRFLEVBQUkzRSxPQUFRLENBQzlCLE1BQU1vZSxFQUFjelosRUFBSXlaLGFBQWU5WCxPQUFPeEwsS0FBSzZKLEVBQUkzRSxRQUFRekUsU0FBUyxVQUNsRTJGLEVBQU8sQ0FDWFEsUUFBUyxvQkFDVGltQixPQUFRQyxFQUFjRCxPQUN0QjlYLFFBQVN1TyxFQUNUN2hCLEtBQU04akIsRUFBYWpoQixVQUFVdUYsRUFBSTVFLFdBRTdCZ2hCLEVBQWFsQixHQUFZbGIsRUFBSTVFLFNBQVU2bkIsRUFBZTFtQixHQUM1RCxJQUNFLE1BQU0rVSxRQUtJamMsRUFBSTRHLFFBQVFtZ0IsR0FDdEIsSUFBSTlLLEVBUUYsTUFBTSxJQUFJakIsTUFBTSx5Q0FQVHJRLEVBQUl5WixtQkFDSnpaLEVBQUkzRSxPQUNYMkUsRUFBSW9hLE9BQVM2SSxFQUFjckgsVUFDdkIsR0FBR3FILEVBQWNySCxhQUFhYixHQUFXLEdBQUdXLElBQWExYixFQUFJNUUsY0FDN0RrVyxFQUFLcEcsUUFBUWdZLGFBQ2pCbGpCLEVBQUltakIsS0FBTzdSLEVBQUtwRyxRQUFRa1ksSUFJMUIsTUFBT3BYLEdBQ1AsR0FBdUIsTUFBbkJBLEVBQUl3SSxXQUFvQixNQUFNeEksU0FDM0JoTSxFQUFJeVosbUJBQ0p6WixFQUFJM0UsT0FDWCxNQUFNVyxRQUFhM0csRUFBSTRHLFFBQVF5TixHQUFXMUosRUFBSTVFLFNBQVU2bkIsSUFDeEQsSUFBSXJxQixPQUFPQyxLQUFLbUQsR0FBS2hHLE9BTW5CLE1BQU1nVyxFQUxOaE0sRUFBSW1qQixLQUFPbm5CLEVBQUlvbkIsSUFDZnBqQixFQUFJb2EsT0FBUzZJLEVBQWNySCxVQUN2QixHQUFHcUgsRUFBY3JILGFBQWFiLEdBQVcsR0FBR1csSUFBYTFiLEVBQUk1RSxjQUM3RFksRUFBSWtuQixjQU9oQixPQUFPN3RCLEVBQ1AsTUFBTzJXLEdBS1AsTUFKQTNXLEVBQUkrYixLQUFLMUMsR0FBYzRFLGFBQWMsQ0FDbkNqQyxNQUFPaGMsRUFBSWlSLEtBQUtDLFVBQXVCLGlCQUN2QytLLEtBQU1qYyxFQUFJaVIsS0FBS0MsVUFBdUIsZ0NBRWxDeUYsSUFJSmxXLEdBQVVULElBQ2QsTUFBTThRLEVBQWE5USxFQUFJK1EsVUFBeUIsa0JBQW9CLEdBMkVwRSxNQTFFZ0MsQ0FDOUIsQ0FDRWhKLEtBQU0sT0FDTnRDLEtBQU0sUUFDRnVMLGFBQ0YsT0FBT2hSLEVBQUlpUixLQUFLQyxVQUF1Qix1QkFFckMzUixZQUNGLE9BQU9TLEVBQUlpUixLQUFLQyxVQUF1Qix1QkFFckN4SixjQUNGLE9BQU8xSCxFQUFJaVIsS0FBS0MsVUFBdUIsK0JBRXpDRSxRQUFTTixFQUFXMmMsTUFBUSxHQUM1QnRjLFVBQVUsR0FFWixDQUNFcEosS0FBTSxTQUNOdEMsS0FBTSxRQUNGdUwsYUFDRixPQUFPaFIsRUFBSWlSLEtBQUtDLFVBQXVCLHlCQUVyQzNSLFlBQ0YsT0FBT1MsRUFBSWlSLEtBQUtDLFVBQXVCLHlCQUVyQ3hKLGNBQ0YsT0FBTzFILEVBQUlpUixLQUFLQyxVQUF1QixpQ0FFekNFLFFBQVNOLEVBQVc2YyxRQUFVLFNBQzlCeGMsVUFBVSxHQUVaLENBQ0VwSixLQUFNLFFBQ050QyxLQUFNLFFBQ0Z1TCxhQUNGLE9BQU9oUixFQUFJaVIsS0FBS0MsVUFBdUIsd0JBRXJDM1IsWUFDRixPQUFPUyxFQUFJaVIsS0FBS0MsVUFBdUIsd0JBRXpDRSxRQUFTTixFQUFXZ1YsT0FBUyxHQUM3QjNVLFVBQVUsR0FFWixDQUNFcEosS0FBTSxPQUNOdEMsS0FBTSxRQUNGdUwsYUFDRixPQUFPaFIsRUFBSWlSLEtBQUtDLFVBQXVCLHVCQUVyQzNSLFlBQ0YsT0FBT1MsRUFBSWlSLEtBQUtDLFVBQXVCLHVCQUVyQ3hKLGNBQ0YsT0FBTzFILEVBQUlpUixLQUFLQyxVQUF1QiwrQkFFekNFLFFBQVNOLEVBQVd2TyxNQUFRLEdBQzVCNE8sVUFBVSxHQUVaLENBQ0VwSixLQUFNLFlBQ050QyxLQUFNLFFBQ0Z1TCxhQUNGLE9BQU9oUixFQUFJaVIsS0FBS0MsVUFBdUIsNEJBRXJDM1IsWUFDRixPQUFPUyxFQUFJaVIsS0FBS0MsVUFBdUIsNEJBRXJDeEosY0FDRixPQUFPMUgsRUFBSWlSLEtBQUtDLFVBQXVCLG9DQUV6Q0UsUUFBU04sRUFBV3lWLFdBQWEsR0FDakNwVixVQUFVLEtDM0toQixNQUdNMFUsR0FBY2hnQixNQUNsQjdGLEVBQ0FQLEVBQ0FzRyxFQUNBaW9CLEtBRUEsTUFBTUMsRUFBV3h1QixFQUFRd3VCLFVBQVksR0FDL0I5SCxFQUFXMW1CLEVBQVEwbUIsVUFBWSxHQUMvQitILEVBWGtCLENBQUNBLEdBQ3pCQSxFQUFlQSxFQUFZem1CLFdBQVcsVUFBWXltQixFQUFjLFVBQVVBLElBQWlCLEdBVXZFQyxDQUFrQjF1QixFQUFReXVCLGFBQWUsSUFDdkRFLEVBQVEzdUIsRUFBUTJ1QixPQUFTLEdBQy9CLElBQUlDLEVBQ0osR0FBSWxJLEdBQVkrSCxFQUNkRyxFQUFnQkgsTUFDWCxDQUFBLElBQUlELEVBR1QsTUFBTSxJQUFJalQsTUFBTSx1Q0FGaEJxVCxFQUFnQixhQUFhSixJQUkvQixNQUFNSyxFQUFpQyxDQUNyQ3puQixPQUFRLE9BQ1I5QixJQUFLLGdDQUNMcWIsUUFBUyxDQUNQMkYsY0FBZXNJLEVBQ2YsZUFBZ0Isc0JBQ2hCL0YsS0FBTSxnQkFDTixhQUFjLFdBRWhCdEgsU0FBVSxDQUNSMVYsTUFBTzBpQixFQUNQdm9CLEtBQU0sU0FDTnNDLEtBQU1oQyxFQUNOekcsWUFBYSwwQkFHakIsR0FBSTZtQixHQUFZK0gsR0FBZUUsRUFBTyxDQUNwQyxJQUNJem5CLEVBREE0bkIsRUFBWSxFQUVaQyxFQUFZLEdBQ2hCLEVBQUcsQ0FDRCxNQUFNQyxFQUFzQyxDQUMxQzVuQixPQUFRLE1BQ1I5QixJQUFLLG1DQUFtQ29oQixZQUFtQm9JLElBQzNEbk8sUUFBUyxDQUNQMkYsY0FBZXNJLEdBRWpCM1EsTUFBTSxFQUNONVcseUJBQXlCLEVBQ3pCNG5CLFFBQVMsS0FNWCxHQUpJanZCLEVBQVFFLFFBQ1Y4dUIsRUFBb0I5dUIsTUFBUUYsRUFBUUUsT0FFdENnSCxRQUFhM0csRUFBSTRHLFFBQVE2bkIsR0FDQSxNQUFuQjluQixFQUFJd1ksYUFBc0J4WSxFQUFJc1YsS0FBSy9WLFFBQ3ZDLE1BQU0sSUFBSThVLE1BQU0sa0NBRWxCLE1BQU0yVCxFQUFZaG9CLEVBQUlzVixLQUFLL1UsS0FDM0IsSUFBSyxNQUFNeEQsS0FBUWlyQixFQUNqQixHQUFJanJCLEVBQUtzWSxRQUFVb1MsRUFBTyxDQUN4QkksRUFBWTlxQixFQUFLb1UsR0FDakIsTUFHSnlXLFVBQ081bkIsRUFBSXNWLEtBQUsvVSxLQUFLdkcsT0FBUyxHQUM1QjZ0QixHQUFhRixFQUFldE4sV0FDOUJzTixFQUFldE4sU0FBU29OLE1BQVFJLEdBTXBDLE9BSEkvdUIsRUFBUUUsUUFDVjJ1QixFQUFlM3VCLE1BQVFGLEVBQVFFLE9BRTFCMnVCLEdBR0h2dUIsR0FBUzhGLE1BQU83RixVQUNwQixNQUFNNHVCLEVBQWU1dUIsRUFBSStRLFVBQXdCLGdCQUNqRCxJQUFLNmQsRUFBYyxNQUFNLElBQUk1VCxNQUFNLDJCQUNuQyxJQUNFLE1BQU02TCxFQUFVN21CLEVBQUkwYyxPQUNwQixJQUFLLE1BQU0vUixLQUFPa2MsRUFDaEIsR0FBSWxjLEVBQUk1RSxVQUFZNEUsRUFBSTNFLE9BQVEsQ0FDOUIsTUFBTW9lLEVBQWN6WixFQUFJeVosYUFBZTlYLE9BQU94TCxLQUFLNkosRUFBSTNFLFFBQVF6RSxTQUFTLFVBQ2xFOUIsUUFBZ0JvbUIsR0FBWTdsQixFQUFLNHVCLEVBQWNqa0IsRUFBSTVFLFNBQVVxZSxHQUM3RHpkLFFBQW9CM0csRUFBSTRHLFFBQVFuSCxHQUNoQ3djLEVBQXNCLGlCQUFSdFYsRUFBbUJxRCxLQUFLQyxNQUFNdEQsR0FBT0EsRUFDekQsSUFBSXNWLEVBQUsvVixRQU1QLE1BQU0sSUFBSThVLE1BQU0seUNBTFRyUSxFQUFJeVosbUJBQ0p6WixFQUFJM0UsT0FDWDJFLEVBQUlvYSxPQUFTOUksRUFBSy9VLEtBQUsybkIsS0FDdkJsa0IsRUFBSW1qQixLQUFPN1IsRUFBSy9VLEtBQUs0bkIsV0FNM0IsT0FBTzl1QixFQUNQLE1BQU8yVyxHQU1QLE1BTEEzVyxFQUFJK2IsS0FBSzFDLEdBQWM0RSxhQUFjLENBQ25DakMsTUFBT2hjLEVBQUlpUixLQUFLQyxVQUF1QixpQkFDdkMrSyxLQUFNamMsRUFBSWlSLEtBQUtDLFVBQXVCLDhCQUN0Q2xHLEtBQU0sc0NBRVcsUUFBYjdFLEVBQUF3USxNQUFBQSxPQUFHLEVBQUhBLEVBQUt1SSxnQkFBUSxJQUFBL1ksT0FBQSxFQUFBQSxFQUFFZSxPQUFReVAsSUFJM0JsVyxHQUFVVCxJQUNkLE1BQU04USxFQUFhOVEsRUFBSStRLFVBQXdCLGlCQUFtQixHQThFbEUsTUE3RWdDLENBQzlCLENBQ0VoSixLQUFNLFdBQ050QyxLQUFNLFFBQ0Z1TCxhQUNGLE9BQU9oUixFQUFJaVIsS0FBS0MsVUFBdUIsMEJBRXJDM1IsWUFDRixPQUFPUyxFQUFJaVIsS0FBS0MsVUFBdUIsMEJBRXJDeEosY0FDRixPQUFPMUgsRUFBSWlSLEtBQUtDLFVBQXVCLGtDQUV6Q0UsUUFBU04sRUFBV21kLFVBQVksR0FDaEM5YyxVQUFVLEdBRVosQ0FDRXBKLEtBQU0sV0FDTnRDLEtBQU0sUUFDRnVMLGFBQ0YsT0FBT2hSLEVBQUlpUixLQUFLQyxVQUF1QiwwQkFFckMzUixZQUNGLE9BQU9TLEVBQUlpUixLQUFLQyxVQUF1QiwwQkFFckN4SixjQUNGLE9BQU8xSCxFQUFJaVIsS0FBS0MsVUFBdUIsa0NBRXpDRSxRQUFTTixFQUFXcVYsVUFBWSxHQUNoQ2hWLFVBQVUsR0FFWixDQUNFcEosS0FBTSxjQUNOdEMsS0FBTSxRQUNGdUwsYUFDRixPQUFPaFIsRUFBSWlSLEtBQUtDLFVBQXVCLDhCQUVyQzNSLFlBQ0YsT0FBT1MsRUFBSWlSLEtBQUtDLFVBQXVCLDhCQUVyQ3hKLGNBQ0YsT0FBTzFILEVBQUlpUixLQUFLQyxVQUF1QixzQ0FFekNFLFFBQVNOLEVBQVdvZCxhQUFlLEdBQ25DL2MsVUFBVSxHQUVaLENBQ0VwSixLQUFNLFFBQ050QyxLQUFNLFFBQ0Z1TCxhQUNGLE9BQU9oUixFQUFJaVIsS0FBS0MsVUFBdUIsdUJBRXJDM1IsWUFDRixPQUFPUyxFQUFJaVIsS0FBS0MsVUFBdUIsdUJBRXJDeEosY0FDRixPQUFPMUgsRUFBSWlSLEtBQUtDLFVBQXVCLCtCQUV6Q0UsUUFBU04sRUFBV3NkLE9BQVMsR0FDN0JqZCxVQUFVLEdBRVosQ0FDRXBKLEtBQU0sUUFDTnRDLEtBQU0sUUFDRnVMLGFBQ0YsT0FBT2hSLEVBQUlpUixLQUFLQyxVQUF1Qix1QkFFckMzUixZQUNGLE9BQU9TLEVBQUlpUixLQUFLQyxVQUF1Qix1QkFFckN4SixjQUNGLE9BQU8xSCxFQUFJaVIsS0FBS0MsVUFBdUIsK0JBRXpDRSxRQUFTTixFQUFXblIsT0FBUyxHQUM3QndSLFVBQVUsS0NyTGhCLE1BQU1wUixHQUFTOEYsTUFBTzdGLFVBQ3BCLE1BQU0rdUIsRUFBYy91QixFQUFJK1EsVUFBd0IsZ0JBQ2hELElBQUtnZSxFQUFhLE1BQU0sSUFBSS9ULE1BQU0sOEJBRWxDLE1BQU1xTCxFQUFhMEksRUFBWXhzQixNQUFRLEdBQ2pDZ2tCLEdBQWF3SSxFQUFZeEksV0FBYSxJQUFJbmpCLFFBQVEsTUFBTyxJQUN6RGtqQixFQUFVakIsR0FBaUIsQ0FDL0I5aUIsS0FBMkIsUUFBckI0RCxFQUFBNG9CLEVBQVl6SSxlQUFTLElBQUFuZ0IsT0FBQSxFQUFBQSxFQUFBL0MsUUFBUSxNQUFPLE9BRXRDeWpCLEVBQVU3bUIsRUFBSTBjLE9BQ3BCLElBQUssTUFBTS9SLEtBQU9rYyxFQUNoQixHQUFJbGMsRUFBSTVFLFVBQVk0RSxFQUFJM0UsT0FBUSxDQUM5QixJQUFJc0YsRUFBUVgsRUFBSTNFLFFBQ1hzRixHQUFTWCxFQUFJeVosY0FDaEI5WSxFQUFRZ0IsT0FBT3hMLEtBQUs2SixFQUFJeVosWUFBYSxXQUV2QyxJQUNFLE1BQU00SyxFQUFjenNCLEVBQUtuQixLQUFLcEIsRUFBSWdhLFFBQVMsVUFBVyxTQUNoRGlWLEVBQWtCMXNCLEVBQUtuQixLQUFLNHRCLEVBQWFya0IsRUFBSTVFLFVBQzdDbXBCLEVBQWlCM3NCLEVBQUtuQixLQUFLaWxCLEVBQVkxYixFQUFJNUUsVUFDakRrUSxFQUFjMVQsRUFBS2tDLFFBQVF5cUIsSUFDM0JqWixFQUFjMVQsRUFBS2tDLFFBQVF3cUIsSUFDM0IzbUIsRUFBRzROLGNBQWNnWixFQUFnQjVqQixHQUNqQ2hELEVBQUc2bUIsYUFBYUQsRUFBZ0JELFVBQ3pCdGtCLEVBQUl5WixtQkFDSnpaLEVBQUkzRSxPQUVUMkUsRUFBSW9hLE9BREZ3QixFQUNXLEdBQUdBLEtBQWFiLEdBQVcsR0FBR1ksSUFBVTNiLEVBQUk1RSxjQUU1Q3hELEVBQUtuQixLQUFLaWxCLEVBQVkxYixFQUFJNUUsVUFFekM0RSxFQUFJbWpCLEtBQU92ckIsRUFBS25CLEtBQUtpbEIsRUFBWTFiLEVBQUk1RSxVQUNyQzRFLEVBQUl5a0IsWUFBYyxnQ0FBZ0MxSixHQUFXL2EsRUFBSTVFLFVBQVUzQyxRQUFRLE1BQU8sTUFDMUYsTUFBT2hELEdBS1AsTUFKQUosRUFBSStiLEtBQUsxQyxHQUFjNEUsYUFBYyxDQUNuQ2pDLE1BQU9oYyxFQUFJaVIsS0FBS0MsVUFBdUIsaUJBQ3ZDK0ssS0FBTSwyQkFFRixJQUFJakIsTUFBTSwyQkFJdEIsT0FBT2hiLEdBR0hTLEdBQVVULElBQ2QsTUFBTThRLEVBQWE5USxFQUFJK1EsVUFBd0IsaUJBQW1CLEdBZ0RsRSxNQS9DZ0MsQ0FDOUIsQ0FDRWhKLEtBQU0sT0FDTnRDLEtBQU0sUUFDRnVMLGFBQ0YsT0FBT2hSLEVBQUlpUixLQUFLQyxVQUF1QixzQkFFckMzUixZQUNGLE9BQU9TLEVBQUlpUixLQUFLQyxVQUF1QixzQkFFekNFLFFBQVNOLEVBQVd2TyxNQUFRLEdBQ3hCbUYsY0FDRixPQUFPMUgsRUFBSWlSLEtBQUtDLFVBQXVCLDhCQUV6Q0MsVUFBVSxHQUVaLENBQ0VwSixLQUFNLFlBQ050QyxLQUFNLFFBQ0Z1TCxhQUNGLE9BQU9oUixFQUFJaVIsS0FBS0MsVUFBdUIsMkJBRXJDM1IsWUFDRixPQUFPUyxFQUFJaVIsS0FBS0MsVUFBdUIsMkJBRXpDRSxRQUFTTixFQUFXeVYsV0FBYSxHQUM3QjdlLGNBQ0YsT0FBTzFILEVBQUlpUixLQUFLQyxVQUF1QixtQ0FFekNDLFVBQVUsR0FFWixDQUNFcEosS0FBTSxVQUNOdEMsS0FBTSxRQUNGdUwsYUFDRixPQUFPaFIsRUFBSWlSLEtBQUtDLFVBQXVCLHlCQUVyQzNSLFlBQ0YsT0FBT1MsRUFBSWlSLEtBQUtDLFVBQXVCLHlCQUV6Q0UsUUFBU04sRUFBV3dWLFNBQVcsR0FDL0JuVixVQUFVLEVBQ056SixjQUNGLE9BQU8xSCxFQUFJaVIsS0FBS0MsVUFBdUIsb0NDdkUvQyxNQUFNMlUsR0FBYyxDQUFDcG1CLEVBQXNCc0csRUFBOEJ1RixLQUN2RSxJQUFJMFUsRUFBT3ZnQixFQUFRdWdCLEtBQ25CQSxFQUFPQSxFQUFLNWMsUUFBUSxNQUFPLElBQzNCLE1BQU1pc0IsRUFBMkIsT0FBcEI1dkIsRUFBUW9aLFFBQ2ZpTixFQUFRcm1CLEVBQVFxbUIsTUFFaEJ3SixFQUFZLENBQ2hCLGVBQWdCLHNCQUNoQixhQUFjLFVBQ2RDLFdBQVksYUFDWnpKLE1BQU9BLFFBQVN4aUIsR0FFWmtzQixFQUFhLENBQ2pCbGtCLE1BQU8sQ0FDTDJILE1BQU8zSCxFQUNQN0wsUUFBUyxDQUNQdW1CLFNBQVVqZ0IsSUFHZDBwQixJQUFLLFFBR0RDLEVBQVksQ0FDaEIsZUFBZ0Isc0JBQ2hCLGFBQWMsVUFDZEgsV0FBWSxhQUNaSSxPQUFRLG1CQUNSNUosY0FBZUQsUUFBU3hpQixHQUVwQnNzQixFQUFhbndCLEVBQVFtd0IsV0FDckJDLEVBQVVwd0IsRUFBUW93QixRQUN4QixJQUFJQyxFQUFrQnJ3QixFQUFRcXdCLFdBQVc3YyxXQUN0QjNQLElBQWZ3c0IsSUFDRkEsRUFBYXJ3QixFQUFRcXdCLFlBRXZCLE1BQU1DLEVBQTBCLENBQzlCenFCLEtBQU0sQ0FDSjJOLE1BQU8zSCxFQUNQN0wsUUFBUyxDQUNQdW1CLFNBQVVqZ0IsSUFHZDBwQixJQUFLLE9BQ0xPLFlBQWFKLEVBQ2JLLFNBQVVKLEVBQ1ZDLFdBQUFBLEdBRUdGLFVBQ0lHLEVBQVdDLFlBRWZILFVBQ0lFLEVBQVdFLFNBRUMsSUFBZkgsR0FBbUMsSUFBZkEsVUFDakJDLEVBQVdELFdBTXBCLE1BQU8sQ0FDTGpwQixPQUFRLE9BQ1I5QixJQUFLc3FCLEVBQU8sR0FBR3JQLGtCQUF1QixHQUFHQSxlQUN6Q2tRLE1BTm1CLElBQUl6UixFQUFNQyxNQUFNLENBQ25DRyxvQkFBb0IsSUFNcEJ1QixRQUFTaVAsRUFBT0ssRUFBWUosRUFDNUJ0TyxTQUFVcU8sRUFBT1UsRUFBYVAsSUFJNUJ6dkIsR0FBUzhGLE1BQU83RixJQUNwQixNQUFNbXdCLEVBQWNud0IsRUFBSStRLFVBQXVCLG9CQUMvQyxJQUFLb2YsRUFBYSxNQUFNLElBQUluVixNQUFNLG1DQUVsQyxNQUFNNkwsRUFBVTdtQixFQUFJMGMsT0FDcEIsSUFBSyxNQUFNL1IsS0FBT2tjLEVBQVMsQ0FDekIsSUFBSXZiLEVBQVFYLEVBQUkzRSxRQUNYc0YsR0FBU1gsRUFBSXlaLGNBQ2hCOVksRUFBUWdCLE9BQU94TCxLQUFLNkosRUFBSXlaLFlBQWEsV0FFdkMsTUFBTTJDLEVBQWFsQixHQUFZc0ssRUFBYXhsQixFQUFJNUUsU0FBVXVGLEdBQzFELElBQUkyUSxRQUFjamMsRUFBSTRHLFFBQVFtZ0IsR0FDOUI5SyxFQUF1QixpQkFBVEEsRUFBb0JqUyxLQUFLQyxNQUFNZ1MsR0FBUUEsRUFDckQsTUFBTW9ULEVBQStCLE9BQXhCYyxFQUFZdFgsUUFFekIsS0FEa0J3VyxHQUF1QixJQUFoQnBULEVBQUttRCxPQUFnQyxNQUFkbkQsRUFBS0gsTUFhbkQsTUFKQTliLEVBQUkrYixLQUFLMUMsR0FBYzRFLGFBQWMsQ0FDbkNqQyxNQUFPLGdCQUNQQyxLQUFNQSxFQUFLdlUsVUFFUCxJQUFJc1QsTUFBTWlCLEVBQUt2VSxnQkFYZGlELEVBQUl5WixtQkFDSnpaLEVBQUkzRSxPQUNYMkUsRUFBSW9hLE9BQVNzSyxFQUFPcFQsRUFBSy9VLEtBQUtrcEIsTUFBTXJyQixJQUFNa1gsRUFBSy9VLEtBQUtuQyxJQUNoRHNxQixJQUNGMWtCLEVBQUltakIsS0FBTzdSLEVBQUsvVSxLQUFLNUMsS0FVM0IsT0FBT3RFLEdBR0hTLEdBQVVULElBQ2QsTUFBTThRLEVBQWE5USxFQUFJK1EsVUFBdUIscUJBQXVCLEdBd0dyRSxNQXZHZ0MsQ0FDOUIsQ0FDRWhKLEtBQU0sVUFDTnRDLEtBQU0sT0FDTjJMLFFBQVNOLEVBQVcrSCxTQUFXLEtBQzNCN0gsYUFDRixPQUFPaFIsRUFBSWlSLEtBQUtDLFVBQXVCLHdCQUVyQzNSLFlBQ0YsT0FBT1MsRUFBSWlSLEtBQUtDLFVBQXVCLHdCQUVyQ3hKLGNBQ0YsT0FBTzFILEVBQUlpUixLQUFLQyxVQUF1QixnQ0FFekNHLFFBQVMsQ0FBQyxLQUFNLE1BQ2hCRixVQUFVLEdBRVosQ0FDRXBKLEtBQU0sT0FDTnRDLEtBQU0sUUFDRnVMLGFBQ0YsT0FBT2hSLEVBQUlpUixLQUFLQyxVQUF1QixxQkFFckMzUixZQUNGLE9BQU9TLEVBQUlpUixLQUFLQyxVQUF1QixxQkFFckN4SixjQUNGLE9BQU8xSCxFQUFJaVIsS0FBS0MsVUFBdUIsNkJBRXpDRSxRQUFTTixFQUFXa1AsTUFBUSxHQUM1QjdPLFVBQVUsR0FFWixDQUNFcEosS0FBTSxRQUNOdEMsS0FBTSxRQUNGdUwsYUFDRixPQUFPaFIsRUFBSWlSLEtBQUtDLFVBQXVCLHNCQUVyQzNSLFlBQ0YsT0FBT1MsRUFBSWlSLEtBQUtDLFVBQXVCLHNCQUVyQ3hKLGNBQ0YsT0FBTzFILEVBQUlpUixLQUFLQyxVQUF1Qiw4QkFFekNFLFFBQVNOLEVBQVdnVixNQUNwQjNVLFVBQVUsR0FFWixDQUNFcEosS0FBTSxhQUNOdEMsS0FBTSxRQUNOMkwsUUFBU04sRUFBVzhlLFdBQ3BCemUsVUFBVSxFQUNOSCxhQUNGLE9BQU9oUixFQUFJaVIsS0FBS0MsVUFBdUIsNEJBRXJDM1IsWUFDRixPQUFPUyxFQUFJaVIsS0FBS0MsVUFBdUIsNEJBRXJDeEosY0FDRixPQUFPMUgsRUFBSWlSLEtBQUtDLFVBQXVCLHFDQUczQyxDQUNFbkosS0FBTSxVQUNOdEMsS0FBTSxRQUNOMkwsUUFBU04sRUFBVytlLFFBQ3BCMWUsVUFBVSxFQUNOSCxhQUNGLE9BQU9oUixFQUFJaVIsS0FBS0MsVUFBdUIseUJBRXJDM1IsWUFDRixPQUFPUyxFQUFJaVIsS0FBS0MsVUFBdUIseUJBRXJDeEosY0FDRixPQUFPMUgsRUFBSWlSLEtBQUtDLFVBQXVCLGtDQUczQyxDQUNFbkosS0FBTSxhQUNOdEMsS0FBTSxPQUNOMkwsUUFBU04sRUFBV2dmLFlBQWMsbUJBQ2xDemUsUUFBUyxDQUNQLENBQ0V0SixLQUFNLG1CQUNOa0wsTUFBTyxHQUVULENBQ0VsTCxLQUFNLFNBQ05rTCxNQUFPLElBR1g5QixVQUFVLEVBQ05ILGFBQ0YsT0FBT2hSLEVBQUlpUixLQUFLQyxVQUF1QiwyQkFFckMzUixZQUNGLE9BQU9TLEVBQUlpUixLQUFLQyxVQUF1QiwyQkFFckN4SixjQUNGLE9BQU8xSCxFQUFJaVIsS0FBS0MsVUFBdUIsc0NDbE8vQyxNQUFNMlUsR0FBYyxDQUFDcG1CLEVBQXlCc0csRUFBa0J1RixLQUM5RCxNQUFNMFUsRUFBT3ZnQixFQUFRdWdCLE1BQVEsWUFDdkJFLEVBQU96Z0IsRUFBUXlnQixNQUFRLE1BQ3ZCbVEsRUFBUzV3QixFQUFRNHdCLFFBQVUsR0FDM0J2ZCxFQUFhclQsRUFBUXFULFlBQWMsVUFDbkN3ZCxFQUFZN3dCLEVBQVE2d0IsV0FBYSxHQUN2QyxJQUFJdnJCLEVBQU0sVUFBVWliLEtBQVFFLHVCQUEwQnBOLElBT3RELE9BTkl1ZCxJQUNGdHJCLEdBQU8sV0FBV3NyQixLQUVoQkMsSUFDRnZyQixHQUFPLFFBQVF1ckIsS0FFVixDQUNMenBCLE9BQVEsT0FDUjlCLElBQUFBLEVBQ0FxYixRQUFTLENBQ1AsZUFBZ0IsdUJBRWxCWSxTQUFVLENBQ1IxYixLQUFNLENBQ0oyTixNQUFPM0gsRUFDUDdMLFFBQVMsQ0FDUHVtQixTQUFVamdCLEVBQ1ZzYixZQUFhMEcsRUFBT2hpQixNQUkxQmUseUJBQXlCLElBSXZCL0csR0FBUzhGLE1BQU83RixVQUNwQixNQUFNdXdCLEVBQWlCdndCLEVBQUkrUSxVQUEwQixrQkFDckQsSUFBS3dmLEVBQ0gsTUFBTSxJQUFJdlYsTUFBTSw2QkFFbEIsSUFDRSxNQUFNNkwsRUFBVTdtQixFQUFJMGMsT0FDcEIsSUFBSyxNQUFNL1IsS0FBT2tjLEVBQ2hCLEdBQUlsYyxFQUFJNUUsVUFBWTRFLEVBQUkzRSxPQUFRLENBQzlCLElBQUlzRixFQUFRWCxFQUFJM0UsUUFDWHNGLEdBQVNYLEVBQUl5WixjQUNoQjlZLEVBQVFnQixPQUFPeEwsS0FBSzZKLEVBQUl5WixZQUFhLFdBRXZDLE1BQU0za0IsRUFBVW9tQixHQUFZMEssRUFBZ0I1bEIsRUFBSTVFLFNBQVV1RixHQUVwRDNFLFFBQVkzRyxFQUNmNEcsUUFBUW5ILEdBQ1J1SCxNQUFNTCxHQUFhQSxJQUNuQnhHLE9BQU93VyxJQUNDLENBQ0x3SSxXQUFZLElBQ1psRCxLQUFNLENBQ0p2QyxJQUFLMVosRUFBSWlSLEtBQUtDLFVBQXVCLGVBQ3JDeUYsSUFBQUEsT0FJUixHQUF1QixNQUFuQmhRLEVBQUl3WSxjQUFnQyxRQUFWaFosRUFBQVEsRUFBSXNWLFlBQU0sSUFBQTlWLE9BQUEsRUFBQUEsRUFBQUQsU0FNdEMsTUFBTSxJQUFJOFUsTUFBTXJVLEVBQUlzVixLQUFLdlUsZ0JBTGxCaUQsRUFBSXlaLG1CQUNKelosRUFBSTNFLE9BQ1gyRSxFQUFJb2EsT0FBU3BlLEVBQUlzVixLQUFLaEMsT0FBTyxHQUM3QnRQLEVBQUk2bEIsV0FBYTdwQixFQUFJc1YsS0FBS3VVLFdBQVcsR0FNM0MsT0FBT3h3QixFQUNQLE1BQU8yVyxHQUtQLE1BSkEzVyxFQUFJK2IsS0FBSzFDLEdBQWM0RSxhQUFjLENBQ25DakMsTUFBT2hjLEVBQUlpUixLQUFLQyxVQUF1QixpQkFDdkMrSyxLQUFNamMsRUFBSWlSLEtBQUtDLFVBQXVCLG9CQUVsQ3lGLElBSUpsVyxHQUFVVCxJQUNkLE1BQU04USxFQUFhOVEsRUFBSStRLFVBQTBCLG1CQUFxQixHQStEdEUsTUE5RGdDLENBQzlCLENBQ0VoSixLQUFNLE9BQ050QyxLQUFNLFFBQ0Z1TCxhQUNGLE9BQU9oUixFQUFJaVIsS0FBS0MsVUFBdUIsd0JBRXJDM1IsWUFDRixPQUFPUyxFQUFJaVIsS0FBS0MsVUFBdUIsd0JBRXpDRSxRQUFTTixFQUFXa1AsTUFBUSxZQUM1QjdPLFVBQVUsR0FFWixDQUNFcEosS0FBTSxPQUNOdEMsS0FBTSxRQUNGdUwsYUFDRixPQUFPaFIsRUFBSWlSLEtBQUtDLFVBQXVCLHdCQUVyQzNSLFlBQ0YsT0FBT1MsRUFBSWlSLEtBQUtDLFVBQXVCLHdCQUV6Q0UsUUFBU04sRUFBV29QLE1BQVEsTUFDNUIvTyxVQUFVLEdBRVosQ0FDRXBKLEtBQU0sU0FDTnRDLEtBQU0sUUFDRnVMLGFBQ0YsT0FBT2hSLEVBQUlpUixLQUFLQyxVQUF1QiwwQkFFckMzUixZQUNGLE9BQU9TLEVBQUlpUixLQUFLQyxVQUF1QiwwQkFFekNFLFFBQVNOLEVBQVd1ZixRQUFVLEdBQzlCbGYsVUFBVSxHQUVaLENBQ0VwSixLQUFNLGFBQ050QyxLQUFNLFFBQ0Z1TCxhQUNGLE9BQU9oUixFQUFJaVIsS0FBS0MsVUFBdUIsOEJBRXJDM1IsWUFDRixPQUFPUyxFQUFJaVIsS0FBS0MsVUFBdUIsOEJBRXpDRSxRQUFTTixFQUFXZ0MsWUFBYyxHQUNsQzNCLFVBQVUsR0FFWixDQUNFcEosS0FBTSxZQUNOdEMsS0FBTSxRQUNGdUwsYUFDRixPQUFPaFIsRUFBSWlSLEtBQUtDLFVBQXVCLHVCQUVyQzNSLFlBQ0YsT0FBT1MsRUFBSWlSLEtBQUtDLFVBQXVCLHVCQUV6Q0UsUUFBU04sRUFBV3dmLFdBQWEsR0FDakNuZixVQUFVLEtDM0loQixTQUFTMFUsR0FBWXBtQixFQUF1QnNHLEVBQWtCK2YsRUFBZWtJLEdBQzNFLE1BQU0zRixFQWlCUixTQUFvQkEsR0FDbEIsTUFBZ0IsT0FBVEEsRUFBZ0IsR0FBSyxJQUFNQSxFQWxCckJvSSxDQUFXaHhCLEVBQVE0b0IsTUFBUSxNQUNsQzlsQixFQUFPOUMsRUFBUThDLE1BQVEsR0FLN0IsTUFBTyxDQUNMc0UsT0FBUSxPQUNSOUIsSUFBSyxnQkFBZ0JzakIsOEJBTkEvYixPQUFPeEwsS0FBS3lCLEVBQU93RCxFQUFVLFNBQ2pEeEUsU0FBUyxVQUNUNkIsUUFBUSxNQUFPLEtBQ2ZBLFFBQVEsTUFBTyxPQUloQmdkLFFBQVMsQ0FDUDJGLGNBQWUsV0FBV0QsSUFDMUIsZUFBZ0JpQyxFQUFPaGlCLElBQWEsNEJBRXRDa1csS0FBTStSLEdBUVYsU0FBUzBDLEdBQVNDLEdBQ2hCLE1BQU1DLEVBQVlELEVBQWFDLFVBQ3pCQyxFQUFZRixFQUFhRSxVQUN6QkMsRUFBTSxJQUFJN2UsR0FBTThlLEtBQUtudkIsT0FBT292QixJQUFJSixFQUFXQyxHQUMzQ3B4QixFQUFVLENBQ2RnSixNQUFPa29CLEVBQWEzSSxRQUd0QixPQURrQixJQUFJL1YsR0FBTWdmLEdBQUdDLFVBQVV6eEIsR0FDeEIweEIsWUFBWUwsR0FHL0IsTUFBTS93QixHQUFTOEYsTUFBTzdGLElBQ3BCLE1BQU0yd0IsRUFBZTN3QixFQUFJK1EsVUFBd0IsZ0JBQ2pELElBQUs0ZixFQUNILE1BQU0sSUFBSTNWLE1BQU0sMkJBRWxCLElBQ0UsTUFBTTZMLEVBQVU3bUIsRUFBSTBjLE9BQ3BCLElBQUssTUFBTS9SLEtBQU9rYyxFQUNoQixHQUFJbGMsRUFBSTVFLFVBQVk0RSxFQUFJM0UsT0FBUSxDQUM5QixNQUFNb2UsRUFBY3paLEVBQUl5WixhQUFlOVgsT0FBT3hMLEtBQUs2SixFQUFJM0UsUUFBUXpFLFNBQVMsVUFDbEU5QixFQUFVb21CLEdBQVk4SyxFQUFjaG1CLEVBQUk1RSxTQUFVMnFCLEdBQVNDLEdBQWV2TSxHQUMxRXpkLFFBQVkzRyxFQUFJNEcsUUFBUW5ILEdBQ3hCd2MsRUFBT2pTLEtBQUtDLE1BQU10RCxHQUN4QixLQUFJc1YsTUFBQUEsU0FBQUEsRUFBTTNYLEtBWVIsTUFMQXRFLEVBQUkrYixLQUFLMUMsR0FBYzRFLGFBQWMsQ0FDbkNqQyxNQUFPaGMsRUFBSWlSLEtBQUtDLFVBQXVCLGlCQUN2QytLLEtBQU1BLEVBQUt2QyxNQUViMVosRUFBSUssSUFBSUMsTUFBTSxjQUFlMmIsR0FDdkIsSUFBSWpCLE1BQU0saUJBWkgsUUFDTnJRLEVBQUl5WixtQkFDSnpaLEVBQUkzRSxPQUNYLE1BQU1vckIsRUFBVVQsRUFBYTVyQixJQUN2QnNzQixFQUFhVixFQUFhbHhCLFNBQVcsR0FDM0NrTCxFQUFJb2EsT0FBUyxHQUFHcU0sS0FBV25WLEVBQUszWCxNQUFnQitzQixLQVd0RCxPQUFPcnhCLEVBQ1AsTUFBTzJXLEdBQ1AsR0FBb0Isa0JBQWhCQSxFQUFJalAsU0FFRmlQLEVBQUl1SSxTQUFVLENBQ2hCLE1BQU01ZSxFQUFRcVcsRUFBSXVJLFNBQVNqRCxLQUMzQmpjLEVBQUkrYixLQUFLMUMsR0FBYzRFLGFBQWMsQ0FDbkNqQyxNQUFPaGMsRUFBSWlSLEtBQUtDLFVBQXVCLGlCQUN2QytLLEtBQU0zYixFQUFNQSxRQUlsQixNQUFNcVcsSUFJSmxXLEdBQVVULElBQ2QsTUFBTThRLEVBQWE5USxFQUFJK1EsVUFBd0IsaUJBQW1CLEdBbUdsRSxNQWxHZ0MsQ0FDOUIsQ0FDRWhKLEtBQU0sWUFDTnRDLEtBQU0sUUFDRnVMLGFBQ0YsT0FBT2hSLEVBQUlpUixLQUFLQyxVQUF1QiwyQkFFckMzUixZQUNGLE9BQU9TLEVBQUlpUixLQUFLQyxVQUF1QiwyQkFFekNFLFFBQVNOLEVBQVc4ZixXQUFhLEdBQ2pDemYsVUFBVSxHQUVaLENBQ0VwSixLQUFNLFlBQ050QyxLQUFNLFFBQ0Z1TCxhQUNGLE9BQU9oUixFQUFJaVIsS0FBS0MsVUFBdUIsMkJBRXJDM1IsWUFDRixPQUFPUyxFQUFJaVIsS0FBS0MsVUFBdUIsMkJBRXpDRSxRQUFTTixFQUFXK2YsV0FBYSxHQUNqQzFmLFVBQVUsR0FFWixDQUNFcEosS0FBTSxTQUNOdEMsS0FBTSxRQUNGdUwsYUFDRixPQUFPaFIsRUFBSWlSLEtBQUtDLFVBQXVCLHdCQUVyQzNSLFlBQ0YsT0FBT1MsRUFBSWlSLEtBQUtDLFVBQXVCLHdCQUV6Q0UsUUFBU04sRUFBV2tYLFFBQVUsR0FDOUI3VyxVQUFVLEdBRVosQ0FDRXBKLEtBQU0sTUFDTnRDLEtBQU0sUUFDRnVMLGFBQ0YsT0FBT2hSLEVBQUlpUixLQUFLQyxVQUF1QixxQkFFckMzUixZQUNGLE9BQU9TLEVBQUlpUixLQUFLQyxVQUF1QixxQkFFckN4SixjQUNGLE9BQU8xSCxFQUFJaVIsS0FBS0MsVUFBdUIsNkJBRXpDRSxRQUFTTixFQUFXL0wsS0FBTyxHQUMzQm9NLFVBQVUsR0FFWixDQUNFcEosS0FBTSxPQUNOdEMsS0FBTSxRQUNGdUwsYUFDRixPQUFPaFIsRUFBSWlSLEtBQUtDLFVBQXVCLHNCQUVyQzNSLFlBQ0YsT0FBT1MsRUFBSWlSLEtBQUtDLFVBQXVCLHNCQUVyQ3hKLGNBQ0YsT0FBTzFILEVBQUlpUixLQUFLQyxVQUF1Qiw4QkFFekNFLFFBQVNOLEVBQVd1WCxNQUFRLEdBQzVCbFgsVUFBVSxHQUVaLENBQ0VwSixLQUFNLFVBQ050QyxLQUFNLFFBQ0Z1TCxhQUNGLE9BQU9oUixFQUFJaVIsS0FBS0MsVUFBdUIseUJBRXJDM1IsWUFDRixPQUFPUyxFQUFJaVIsS0FBS0MsVUFBdUIseUJBRXJDeEosY0FDRixPQUFPMUgsRUFBSWlSLEtBQUtDLFVBQXVCLGlDQUV6Q0UsUUFBU04sRUFBV3JSLFNBQVcsR0FDL0IwUixVQUFVLEdBRVosQ0FDRXBKLEtBQU0sT0FDTnRDLEtBQU0sUUFDRnVMLGFBQ0YsT0FBT2hSLEVBQUlpUixLQUFLQyxVQUF1QixzQkFFckMzUixZQUNGLE9BQU9TLEVBQUlpUixLQUFLQyxVQUF1QixzQkFFckN4SixjQUNGLE9BQU8xSCxFQUFJaVIsS0FBS0MsVUFBdUIsOEJBRXpDRSxRQUFTTixFQUFXdk8sTUFBUSxHQUM1QjRPLFVBQVUsS0NoTGhCLE1BQU1tZ0IsR0FLSjdaLGNBSFFDLEtBQUE2UyxPQUFTLElBQUlnSCxHQUNyQjdaLEtBQVc4WixhQUFHLEVBSVBDLHFCQUlMLE9BSEtILEdBQVU3USxXQUNiNlEsR0FBVTdRLFNBQVcsSUFBSTZRLElBRXBCQSxHQUFVN1EsU0FHWGdSLGdDQUFnQ2x2QixHQUN0QyxPQUFPQSxFQUFLYSxRQUFRLE1BQU8sS0FHdEJ5QyxjQUFjcEYsR0FDbkIsTUFBTXVmLEtBQUVBLEVBQUlFLEtBQUVBLEVBQUlpRyxTQUFFQSxFQUFRQyxTQUFFQSxFQUFRc0wsV0FBRUEsRUFBVUMsV0FBRUEsR0FBZWx4QixFQUM3RG14QixFQUFvQkYsRUFDdEIsQ0FDRXZMLFNBQUFBLEVBQ0EwTCxlQUFnQkgsRUFDaEJDLFdBQVlBLFFBQWNydUIsR0FFNUIsQ0FBRTZpQixTQUFBQSxFQUFVQyxTQUFBQSxHQUNoQixVQUNRMU8sS0FBSzZTLE9BQU91SCxRQUNoQnZ1QixPQUFBa1osT0FBQSxDQUFBdUQsS0FBTUEsRUFDTkUsS0FBTTlWLE9BQU84VixJQUFTLElBQ25CMFIsSUFFTGxhLEtBQUs4WixhQUFjLEVBQ25CLE1BQU83YSxHQUNQLE1BQU0sSUFBSXFFLE1BQU1yRSxJQUliOVEsYUFBYWlNLEVBQWVpZ0IsRUFBZ0J0eEIsR0FDakQsSUFBS2lYLEtBQUs4WixZQUNSLE1BQU0sSUFBSXhXLE1BQU0sK0JBRWxCLElBQ0UrVyxFQUFTVCxHQUFVVSx5QkFBeUJELFNBQ3RDcmEsS0FBS3VhLE1BQU0xdkIsRUFBS2tDLFFBQVFzdEIsR0FBUTN1QixRQUFRLGFBQWMsSUFBSzNDLFNBQzNEaVgsS0FBSzZTLE9BQU8ySCxRQUFRcGdCLEVBQU9pZ0IsR0FDakMsTUFBTUksRUFBVzF4QixFQUFPMHhCLFVBQVksT0FDbkIsU0FBYkEsU0FDSXphLEtBQUswYSxLQUFLLFNBQVNELE1BQWFKLE1BRXhDLE1BQU9wYixHQUNQLE1BQU0sSUFBSXFFLE1BQU1yRSxJQUlaOVEsWUFBWXdzQixFQUFpQjV4QixHQUNuQyxJQUFLaVgsS0FBSzZTLE9BQU9pSCxjQUNmLE1BQU0sSUFBSXhXLE1BQU0sZ0NBRWxCLE1BQU1zWCxFQUFnQjd4QixFQUFPOHhCLFNBQVcsT0FDeEMsR0FBc0IsU0FBbEJELEVBQTBCLENBQzVCLE1BQU1FLEVBQU9ILEVBQVEzdEIsTUFBTSxLQUMzQixJQUFJK3RCLEVBQWMsR0FDbEIsSUFBSyxNQUFNemMsS0FBT3djLEVBQ2hCLEdBQUl4YyxFQUFLLENBQ1B5YyxHQUFlLElBQUl6YyxJQUNuQixNQUFNMGMsRUFBUyxVQUFVRCxlQUF5QkgsTUFBa0JHLFdBQzlEL2EsS0FBSzBhLEtBQUtNLFFBR2YsQ0FDTCxNQUFNQSxFQUFTLHFCQUFxQkwsV0FDOUIzYSxLQUFLMGEsS0FBS00sSUFJYjdzQixZQUFZa3NCLEVBQWdCWSxFQUFjQyxHQUMvQ2IsRUFBU1QsR0FBVVUseUJBQXlCRCxHQUM1QyxNQUFPYyxFQUFPQyxHQUFVRixFQUFRLENBQUNELEVBQU1DLEdBQVNELEVBQUtodkIsU0FBUyxLQUFPZ3ZCLEVBQUtqdUIsTUFBTSxLQUFPLENBQUNpdUIsRUFBTUEsU0FFeEZqYixLQUFLMGEsS0FBSyxTQUFTUyxLQUFTQyxNQUFXZixNQUd2Q2xzQixXQUFXNnNCLEdBRWpCLE9BQTJCLFdBREZoYixLQUFLNlMsT0FBTzFPLFlBQVk2VyxJQUMvQjVXLEtBR2JpWCxRQUNMcmIsS0FBSzZTLE9BQU95SSxVQUNadGIsS0FBSzhaLGFBQWMsR0N2RnZCLE1BQU16eEIsR0FBUzhGLE1BQU83RixJQUNwQixNQUFNaXpCLEVBQWtCanpCLEVBQUkrUSxVQUE0QixvQkFDeEQsSUFBS2tpQixFQUNILE1BQU0sSUFBSWpZLE1BQU0sa0NBRWxCaVksRUFBZ0IvUyxLQUFPOVYsT0FBTzZvQixFQUFnQi9TLE9BQVMsSUFDbkQrUyxFQUFnQi9TLEtBQU8sR0FBSytTLEVBQWdCL1MsS0FBTyxTQUNyRCtTLEVBQWdCL1MsS0FBTyxJQUV6QitTLEVBQWdCNU0sV0FBYWhCLEdBQWlCLENBQzVDOWlCLEtBQU0wd0IsRUFBZ0I1TSxXQUN0QmIsYUFBYSxJQUVmLE1BQU1jLEVBQVVqQixHQUFpQixDQUMvQjlpQixLQUFNMHdCLEVBQWdCM00sUUFDdEJkLGFBQWEsSUFFZixJQUNFLE1BQU1xQixFQUFVN21CLEVBQUkwYyxPQUNwQixJQUFLLE1BQU0vUixLQUFPa2MsRUFDaEIsR0FBSWxjLEVBQUk1RSxVQUFZNEUsRUFBSTNFLE9BQVEsQ0FDOUIsSUFBSXNGLEVBQVFYLEVBQUkzRSxRQUNYc0YsR0FBU1gsRUFBSXlaLGNBQ2hCOVksRUFBUWdCLE9BQU94TCxLQUFLNkosRUFBSXlaLFlBQWEsV0FFdkMsTUFBTThPLEVBQWlCM3dCLEVBQUtuQixLQUFLcEIsRUFBSWdhLFFBQVMsY0FDeENnVixFQUFjenNCLEVBQUtuQixLQUFLcEIsRUFBSWdhLFFBQVMsVUFBVyxhQUN0RC9ELEVBQWMrWSxHQUNkLE1BQU01TCxFQUFlN2dCLEVBQUtuQixLQUFLOHhCLEVBQWdCdm9CLEVBQUk1RSxVQUNuRGtRLEVBQWMxVCxFQUFLa0MsUUFBUTJlLElBQzNCOWEsRUFBRzROLGNBQWNrTixFQUFjOVgsR0FDL0IsTUFBTWlmLEVBQVMrRyxHQUFVNkIsb0JBQ25CNUksRUFBT3VILFFBQVFtQixHQUNyQixNQUFNRyxFQUFhN3dCLEVBQUtuQixLQUFLLElBQUk2eEIsRUFBZ0I1TSxhQUFhampCLFFBQVEsU0FBVSxLQUFNdUgsRUFBSTVFLGdCQUNwRndrQixFQUFPL1osT0FBTzRTLEVBQWNnUSxFQUFZSCxHQUM5Q0EsRUFBZ0JJLGdCQUFtQjlJLEVBQU8rSSxNQUFNRixFQUFZSCxFQUFnQkksaUJBQ3JFMW9CLEVBQUl5WixtQkFDSnpaLEVBQUkzRSxPQUNYLE1BQU1vckIsRUFBVTZCLEVBQWdCMU0sV0FBYTBNLEVBQWdCalQsS0FDekRpVCxFQUFnQjNNLFFBQ2xCM2IsRUFBSW9hLE9BQVMsR0FBR3FNLEtBQVcxTCxHQUFXLEdBQWUsTUFBWlksRUFBa0IsR0FBS0EsSUFBVTNiLEVBQUk1RSxjQUU5RTRFLEVBQUlvYSxPQUFTLEdBQUdxTSxLQUFXMUwsR0FBVyxHQUFrQyxNQUEvQnVOLEVBQWdCNU0sV0FBcUIsR0FBSzRNLEVBQWdCNU0sYUFBYTFiLEVBQUk1RSxjQUV0SCxNQUFNd3RCLEVBQWtCaHhCLEVBQUtuQixLQUFLNHRCLEVBQWFya0IsRUFBSTVFLFVBQ25Ea1EsRUFBYzFULEVBQUtrQyxRQUFROHVCLElBQzNCQyxFQUFXRCxHQUNYRSxFQUFTclEsRUFBYzdnQixFQUFLbkIsS0FBSzR0QixFQUFhcmtCLEVBQUk1RSxXQUNsRDRFLEVBQUl5a0IsWUFBYyxvQ0FBb0N4SixtQkFBbUJqYixFQUFJNUUsWUFDN0V3a0IsRUFBT3dJLFFBR1gsT0FBTy95QixFQUNQLE1BQU8yVyxHQUtQLE1BSkEzVyxFQUFJK2IsS0FBSzFDLEdBQWM0RSxhQUFjLENBQ25DakMsTUFBT2hjLEVBQUlpUixLQUFLQyxVQUF1QixpQkFDdkMrSyxLQUFNamMsRUFBSWlSLEtBQUtDLFVBQXVCLG9CQUVsQ3lGLElBSUpsVyxHQUFVVCxJQUNkLE1BQU04USxFQUFhOVEsRUFBSStRLFVBQTRCLHFCQUF1QixHQWlMMUUsTUFoTGdDLENBQzlCLENBQ0VoSixLQUFNLE9BQ050QyxLQUFNLFFBQ0Z1TCxhQUNGLE9BQU9oUixFQUFJaVIsS0FBS0MsVUFBdUIsMEJBRXJDM1IsWUFDRixPQUFPUyxFQUFJaVIsS0FBS0MsVUFBdUIsMEJBRXJDeEosY0FDRixPQUFPMUgsRUFBSWlSLEtBQUtDLFVBQXVCLGtDQUV6Q0UsUUFBU04sRUFBV2tQLE1BQVEsR0FDNUI3TyxVQUFVLEdBRVosQ0FDRXBKLEtBQU0sT0FDTnRDLEtBQU0sUUFDRnVMLGFBQ0YsT0FBT2hSLEVBQUlpUixLQUFLQyxVQUF1QiwwQkFFckMzUixZQUNGLE9BQU9TLEVBQUlpUixLQUFLQyxVQUF1QiwwQkFFckN4SixjQUNGLE9BQU8xSCxFQUFJaVIsS0FBS0MsVUFBdUIsa0NBRXpDRSxRQUFTTixFQUFXb1AsTUFBUSxHQUM1Qi9PLFVBQVUsR0FFWixDQUNFcEosS0FBTSxXQUNOdEMsS0FBTSxRQUNGdUwsYUFDRixPQUFPaFIsRUFBSWlSLEtBQUtDLFVBQXVCLDhCQUVyQzNSLFlBQ0YsT0FBT1MsRUFBSWlSLEtBQUtDLFVBQXVCLDhCQUV6Q0UsUUFBU04sRUFBV3FWLFVBQVksR0FDaENoVixVQUFVLEdBRVosQ0FDRXBKLEtBQU0sV0FDTnRDLEtBQU0sUUFDRnVMLGFBQ0YsT0FBT2hSLEVBQUlpUixLQUFLQyxVQUF1Qiw4QkFFckMzUixZQUNGLE9BQU9TLEVBQUlpUixLQUFLQyxVQUF1Qiw4QkFFekNFLFFBQVNOLEVBQVdzVixVQUFZLEdBQ2hDalYsVUFBVSxHQUVaLENBQ0VwSixLQUFNLGFBQ050QyxLQUFNLFFBQ0Z1TCxhQUNGLE9BQU9oUixFQUFJaVIsS0FBS0MsVUFBdUIsZ0NBRXJDM1IsWUFDRixPQUFPUyxFQUFJaVIsS0FBS0MsVUFBdUIsZ0NBRXJDeEosY0FDRixPQUFPMUgsRUFBSWlSLEtBQUtDLFVBQXVCLHdDQUV6Q0UsUUFBU04sRUFBVzRnQixZQUFjLEdBQ2xDdmdCLFVBQVUsR0FFWixDQUNFcEosS0FBTSxhQUNOdEMsS0FBTSxRQUNGdUwsYUFDRixPQUFPaFIsRUFBSWlSLEtBQUtDLFVBQXVCLDJDQUVyQzNSLFlBQ0YsT0FBT1MsRUFBSWlSLEtBQUtDLFVBQXVCLDJDQUVyQ3hKLGNBQ0YsT0FBTzFILEVBQUlpUixLQUFLQyxVQUF1QixtREFFekNFLFFBQVNOLEVBQVc2Z0IsWUFBYyxHQUNsQ3hnQixVQUFVLEdBRVosQ0FDRXBKLEtBQU0sYUFDTnRDLEtBQU0sUUFDRnVMLGFBQ0YsT0FBT2hSLEVBQUlpUixLQUFLQyxVQUF1QixnQ0FFckMzUixZQUNGLE9BQU9TLEVBQUlpUixLQUFLQyxVQUF1QixnQ0FFckN4SixjQUNGLE9BQU8xSCxFQUFJaVIsS0FBS0MsVUFBdUIsd0NBRXpDRSxRQUFTTixFQUFXdVYsWUFBYyxHQUNsQ2xWLFVBQVUsR0FFWixDQUNFcEosS0FBTSxZQUNOdEMsS0FBTSxRQUNGdUwsYUFDRixPQUFPaFIsRUFBSWlSLEtBQUtDLFVBQXVCLCtCQUVyQzNSLFlBQ0YsT0FBT1MsRUFBSWlSLEtBQUtDLFVBQXVCLCtCQUVyQ3hKLGNBQ0YsT0FBTzFILEVBQUlpUixLQUFLQyxVQUF1Qix1Q0FFekNFLFFBQVNOLEVBQVd5VixXQUFhLEdBQ2pDcFYsVUFBVSxHQUVaLENBQ0VwSixLQUFNLFVBQ050QyxLQUFNLFFBQ0Z1TCxhQUNGLE9BQU9oUixFQUFJaVIsS0FBS0MsVUFBdUIsa0NBRXJDM1IsWUFDRixPQUFPUyxFQUFJaVIsS0FBS0MsVUFBdUIsa0NBRXJDeEosY0FDRixPQUFPMUgsRUFBSWlSLEtBQUtDLFVBQXVCLDBDQUV6Q0UsUUFBU04sRUFBV3dWLFNBQVcsR0FDL0JuVixVQUFVLEdBRVosQ0FDRXBKLEtBQU0sV0FDTnRDLEtBQU0sUUFDRnVMLGFBQ0YsT0FBT2hSLEVBQUlpUixLQUFLQyxVQUF1QiwrQkFFckMzUixZQUNGLE9BQU9TLEVBQUlpUixLQUFLQyxVQUF1QiwrQkFFckN4SixjQUNGLE9BQU8xSCxFQUFJaVIsS0FBS0MsVUFBdUIsdUNBRXpDRSxRQUFTTixFQUFXdWlCLFVBQVksR0FDaENsaUIsVUFBVSxHQUVaLENBQ0VwSixLQUFNLFdBQ050QyxLQUFNLFFBQ0Z1TCxhQUNGLE9BQU9oUixFQUFJaVIsS0FBS0MsVUFBdUIsK0JBRXJDM1IsWUFDRixPQUFPUyxFQUFJaVIsS0FBS0MsVUFBdUIsK0JBRXJDeEosY0FDRixPQUFPMUgsRUFBSWlSLEtBQUtDLFVBQXVCLHVDQUV6Q0UsUUFBU04sRUFBV3FoQixVQUFZLEdBQ2hDaGhCLFVBQVUsR0FFWixDQUNFcEosS0FBTSxVQUNOdEMsS0FBTSxRQUNGdUwsYUFDRixPQUFPaFIsRUFBSWlSLEtBQUtDLFVBQXVCLDhCQUVyQzNSLFlBQ0YsT0FBT1MsRUFBSWlSLEtBQUtDLFVBQXVCLDhCQUVyQ3hKLGNBQ0YsT0FBTzFILEVBQUlpUixLQUFLQyxVQUF1QixzQ0FFekNFLFFBQVNOLEVBQVd5aEIsU0FBVyxHQUMvQnBoQixVQUFVLEtDalBoQixNQUFNMFUsR0FBYyxDQUFDOWYsRUFBa0J1RixFQUFlb29CLEVBQWtCQyxFQUFlLE1BQ3JGLElBQUlDLEVBQVNELEdBQWdCLFFBRTdCLE9BREFDLEVBQVNBLEVBQU94d0IsUUFBUSxlQUFnQixJQUFJQSxRQUFRLE1BQU8sSUFDcEQsQ0FDTHlELE9BQVEsT0FDUjlCLElBQUssV0FBVzZ1QixrQkFDaEJ4VCxRQUFTLENBQ1BpQixZQUFhLHNCQUNiLGFBQWMsVUFDZDBFLGNBQWUyTixHQUVqQjFTLFNBQVUsQ0FDUjZTLE9BQVEsQ0FDTjVnQixNQUFPM0gsRUFDUDdMLFFBQVMsQ0FDUHVtQixTQUFVamdCLElBR2QwcEIsSUFBSyxVQUtMMXZCLEdBQVM4RixNQUFPN0YsSUFDcEIsTUFBTTh6QixFQUFhOXpCLEVBQUkrUSxVQUF1QixlQUM5QyxJQUFLK2lCLEVBQVksTUFBTSxJQUFJOVksTUFBTSw2QkFFakMsTUFBTTZMLEVBQVU3bUIsRUFBSTBjLE9BQ3BCLElBQUssTUFBTS9SLEtBQU9rYyxFQUNoQixHQUFJbGMsRUFBSTVFLFVBQVk0RSxFQUFJM0UsT0FBUSxDQUM5QixJQUFJc0YsRUFBUVgsRUFBSTNFLFFBQ1hzRixHQUFTWCxFQUFJeVosY0FDaEI5WSxFQUFRZ0IsT0FBT3hMLEtBQUs2SixFQUFJeVosWUFBYSxXQUV2QyxNQUFNMkMsRUFBYWxCLEdBQVlsYixFQUFJNUUsU0FBVXVGLEVBQU93b0IsTUFBQUEsU0FBQUEsRUFBWWhPLE1BQU9nTyxNQUFBQSxPQUFVLEVBQVZBLEVBQVlILGNBRTdFaHRCLFFBQW9CM0csRUFBSTRHLFFBQVFtZ0IsR0FDaEM5SyxFQUFPalMsS0FBS0MsTUFBTXRELEdBQ3hCLEdBQWtCLFlBQWRzVixFQUFLSCxZQUNBblIsRUFBSXlaLG1CQUNKelosRUFBSTNFLE9BQ1gyRSxFQUFJb2EsT0FBUzlJLEVBQUsvVSxLQUFLbkMsSUFDdkI0RixFQUFJbWpCLEtBQU83UixFQUFLL1UsS0FBSzRtQixTQUNoQixDQUFBLEdBQWtCLG1CQUFkN1IsRUFBS0gsTUFBb0QsaUJBQWhCRyxFQUFLOFgsT0F3QnZELE1BSkEvekIsRUFBSStiLEtBQUsxQyxHQUFjNEUsYUFBYyxDQUNuQ2pDLE1BQU9oYyxFQUFJaVIsS0FBS0MsVUFBdUIsaUJBQ3ZDK0ssS0FBTUEsRUFBS3ZVLFVBRVAsSUFBSXNULE1BQU1pQixFQUFLdlUsU0F4QnVELFFBRXJFaUQsRUFBSXlaLG1CQUNKelosRUFBSTNFLE9BQ1gyRSxFQUFJb2EsT0FBUzlJLEVBQUs4WCxPQUNsQixNQUFNQyxRQUFzQnRULEVBQU1sWixJQUFJLHNDQUF1QyxDQUMzRTRZLFFBQVMsQ0FDUDJGLGNBQWUrTixFQUFXaE8sU0FHOUIsR0FBZ0MsWUFBNUJrTyxFQUFjOXNCLEtBQUs0VSxLQUFvQixDQUN6QyxNQUFNaVksRUFBU0MsRUFBYzlzQixLQUFLQSxLQUNsQyxJQUFLLE1BQU1vRSxLQUFTeW9CLEVBQ2xCLEdBQUl6b0IsRUFBTXZHLE1BQVFrWCxFQUFLOFgsT0FBUSxDQUM3QnBwQixFQUFJbWpCLEtBQU94aUIsRUFBTXdpQixLQUNqQixVQWFaLE9BQU85dEIsR0FHSFMsR0FBVVQsSUFDZCxNQUFNOFEsRUFBYTlRLEVBQUkrUSxVQUF1QixnQkFBa0IsR0FpQ2hFLE1BaENnQyxDQUM5QixDQUNFaEosS0FBTSxRQUNOdEMsS0FBTSxRQUNGdUwsYUFDRixPQUFPaFIsRUFBSWlSLEtBQUtDLFVBQXVCLHNCQUVyQzNSLFlBQ0YsT0FBT1MsRUFBSWlSLEtBQUtDLFVBQXVCLHNCQUVyQ3hKLGNBQ0YsT0FBTzFILEVBQUlpUixLQUFLQyxVQUF1Qiw4QkFFekNFLFFBQVNOLEVBQVdnVixPQUFTLEdBQzdCM1UsVUFBVSxHQUVaLENBQ0VwSixLQUFNLGVBQ050QyxLQUFNLFFBQ0Z1TCxhQUNGLE9BQU9oUixFQUFJaVIsS0FBS0MsVUFBdUIsOEJBRXJDM1IsWUFDRixPQUFPUyxFQUFJaVIsS0FBS0MsVUFBdUIsOEJBRXJDeEosY0FDRixPQUFPMUgsRUFBSWlSLEtBQUtDLFVBQXVCLHNDQUV6Q0UsUUFBU04sRUFBVzZpQixjQUFnQixHQUNwQ3hpQixVQUFVLEtDOUZoQixNQUFNeVcsR0FBb0IsQ0FBQ25vQixFQUF1QnNHLEtBQ2hELE1BQU1rdUIsRUFBV3gwQixFQUFRdzBCLFNBQ25CcEQsRUFBWXB4QixFQUFRb3hCLFVBQ3BCcUQsRUFBUXowQixFQUFReTBCLE1BQ2hCbE0sRUFBU3ZvQixFQUFRdW9CLE9BQ3ZCLElBQUlDLEVBQ0FrTSxFQUFtQixHQUN2QixHQUFLMTBCLEVBQVFvWixTQUErQixPQUFwQnBaLEVBQVFvWixRQVV6QixDQUVMLE1BQU11YixFQUFRbnpCLEtBQUtDLE9BQU0sSUFBSWlCLE1BQU9rQixVQUFZLEtBRWhEOHdCLEVBQVcsR0FBR0MsS0FER0EsRUFBUSxRQUV6QixNQUFNQyxFQUFVM3lCLEVBQU93bUIsV0FBVyxPQUFRMkksR0FBV3J3QixPQUFPMnpCLEdBQVV2eUIsT0FBTyxPQUN2RXVwQixFQUFXMXJCLEVBQVEwckIsU0FBVzFyQixFQUFRMHJCLFNBQVcsT0FBTzFyQixFQUFRNG9CLG9CQUNoRWlNLEVBQWEsU0FBUzcwQixFQUFROEMsT0FBT3dELGFBQW9CdEcsRUFBUXVvQixVQUFVbUQsTUFFM0VvSixFQUFlLFNBQVNKLE1BREx6eUIsRUFBT0MsV0FBVyxRQUFRbkIsT0FBTzh6QixHQUFZMXlCLE9BQU8sV0FFN0VxbUIsRUFBWXZtQixFQUFPd21CLFdBQVcsT0FBUW1NLEdBQVM3ekIsT0FBTyt6QixHQUFjM3lCLE9BQU8sV0FwQjNCLENBQ2hELE1BQU1ULEVBQVNGLEtBQUtDLE1BQXNCLEtBQWhCRCxLQUFLRSxVQUN6QnF6QixFQUFVdnpCLEtBQUtDLE9BQU0sSUFBSWlCLE1BQU9rQixVQUFZLEtBQVEsRUFHcERveEIsRUFBaUIsS0FBS1AsT0FBV2xNLE9BQVlpTSxPQUZuQ08sRUFBVSxVQUVvREEsT0FBYXJ6QixPQUVyRnV6QixFQUFhaHpCLEVBQU93bUIsV0FBVyxPQUFRMkksR0FBV3J3QixPQUFPaTBCLEdBQWdCN3lCLFNBQ3pFK3lCLEVBQWFyb0IsT0FBT2dRLE9BQU8sQ0FBQ29ZLEVBQVlwb0IsT0FBT3hMLEtBQUsyekIsS0FDMUR4TSxFQUFZM2IsT0FBT3hMLEtBQUs2ekIsR0FBWXB6QixTQUFTLFVBYS9DLE1BQU8sQ0FDTDBtQixVQUFBQSxFQUNBaU0sTUFBQUEsRUFDQWxNLE9BQUFBLEVBQ0FtTSxTQUFBQSxJQUlFdE8sR0FBYyxDQUNsQnBtQixFQUNBc0csRUFDQWtpQixFQUNBM2MsRUFDQXVOLEtBRUEsTUFBTXdQLEVBQU81b0IsRUFBUTRvQixLQUNmOWxCLEVBQU85QyxFQUFROEMsS0FDckIsR0FBSzlDLEVBQVFvWixTQUErQixPQUFwQnBaLEVBQVFvWixRQWdCekIsQ0FDTCxNQUFNc1MsRUFBVzFyQixFQUFRMHJCLFNBQVcxckIsRUFBUTByQixTQUFXLE9BQU8xckIsRUFBUTRvQixvQkFDdEUsTUFBTyxDQUNMeGhCLE9BQVEsTUFDUjlCLElBQUssVUFBVXRGLEVBQVF1b0IsVUFBVW1ELEtBQVl6RixHQUFXLEdBQUduakIsSUFBT3dELE9BQ2xFcWEsUUFBUyxDQUNQa0ksS0FBTSxHQUFHN29CLEVBQVF1b0IsVUFBVW1ELElBQzNCcEYsY0FBZSw4QkFBOEJ0bUIsRUFBUXcwQix3QkFBd0JoTSxFQUFVa00sdUJBQXVCbE0sRUFBVWtNLDZEQUE2RGxNLEVBQVVBLFlBQy9MNUcsWUFBYTBHLEVBQU9oaUIsSUFBYSwyQkFDakMsYUFBYyxTQUFTOFMsZUFFekJvRCxLQUFNM1EsRUFDTnhFLHlCQUF5QixHQTNCM0IsTUFBTyxDQUNMRCxPQUFRLE9BQ1I5QixJQUFLLFVBQVVzakIsZ0NBQW1DSixFQUFVaU0sU0FBU2pNLEVBQVVELFVBQVU1aUIsVUFBVTdDLEtBQVF3RCxJQUMzR3FhLFFBQVMsQ0FDUGtJLEtBQU0sR0FBR0Qsc0JBQ1R0QyxjQUFla0MsRUFBVUEsVUFDekI1RyxZQUFhLHNCQUNiLGFBQWMsU0FBU3hJLGVBRXpCbUksU0FBVSxDQUNSNFQsR0FBSSxTQUNKQyxZQUFhdnBCLEdBRWZ4RSx5QkFBeUIsSUFtQnpCL0csR0FBUzhGLE1BQU83RixjQUNwQixNQUFNODBCLEVBQWU5MEIsRUFBSStRLFVBQXdCLGdCQUNqRCxJQUFLK2pCLEVBQWMsTUFBTSxJQUFJOVosTUFBTSxpQ0FDbkMsSUFDRSxNQUFNNkwsRUFBVTdtQixFQUFJMGMsT0FDZDZKLEdBQWF1TyxFQUFhdk8sV0FBYSxJQUFJbmpCLFFBQVEsTUFBTyxJQUMxRGIsRUFBTzhpQixHQUFpQixDQUM1QjlpQixLQUFNdXlCLEVBQWF2eUIsT0FFckJ1eUIsRUFBYXZ5QixLQUFPQSxFQUNwQixNQUFNd3lCLEdBQVNELEVBQWFqYyxTQUFvQyxPQUF6QmljLEVBQWFqYyxRQUNwRCxJQUFLLE1BQU1sTyxLQUFPa2MsRUFDaEIsR0FBSWxjLEVBQUk1RSxVQUFZNEUsRUFBSTNFLE9BQVEsQ0FDOUIsTUFBTWlpQixFQUFZTCxHQUFrQmtOLEVBQWNucUIsRUFBSTVFLFVBQ3RELElBQUtraUIsRUFDSCxPQUFPLEVBRVQsSUFBSTNjLEVBQVFYLEVBQUkzRSxRQUNYc0YsR0FBU1gsRUFBSXlaLGNBQ2hCOVksRUFBUWdCLE9BQU94TCxLQUFLNkosRUFBSXlaLFlBQWEsV0FFdkMsTUFBTTNrQixFQUFVb21CLEdBQVlpUCxFQUFjbnFCLEVBQUk1RSxTQUFVa2lCLEVBQVczYyxFQUFPdEwsRUFBSStoQixhQUFlL2hCLEVBQUk4aEIsU0FDM0ZuYixRQUFZM0csRUFDZjRHLFFBQVFuSCxHQUNSdUgsTUFBTUwsR0FBYUEsSUFDbkJ4RyxPQUFPd1csSUFDQyxDQUNMd0ksV0FBWSxJQUNabEQsS0FBTSxDQUNKdkMsSUFBSzFaLEVBQUlpUixLQUFLQyxVQUF1QixlQUNyQ3lGLElBQUFBLE9BSVIsSUFBSXNGLEVBTUosR0FKRUEsRUFERThZLEdBQXdCLGlCQUFScHVCLEVBQ1hxRCxLQUFLQyxNQUFNdEQsR0FFWEEsRUFFZSxNQUFwQnNWLEVBQUtrRCxXQUNQLE1BQWdCLFFBQVpoWixFQUFBOFYsTUFBQUEsT0FBSSxFQUFKQSxFQUFNQSxZQUFNLElBQUE5VixPQUFBLEVBQUFBLEVBQUF3USxLQUNSc0YsRUFBS0EsS0FBS3RGLElBRVYsSUFBSXFFLE9BQWdCLFFBQVZ4SCxFQUFBeUksTUFBQUEsT0FBSSxFQUFKQSxFQUFNQSxZQUFJLElBQUF6SSxPQUFBLEVBQUFBLEVBQUVrRyxPQUFtQixRQUFaNkYsRUFBQXRELE1BQUFBLE9BQUEsRUFBQUEsRUFBTUEsWUFBTSxJQUFBc0QsT0FBQSxFQUFBQSxFQUFBN1gsVUFHbkQsTUFBTThnQixFQUFZc00sRUFBYXIxQixTQUFXLEdBQ3BDdTFCLE9BQTZCMXhCLElBQXRCd3hCLEVBQWFFLFFBQStCRixFQUFhRSxLQUN0RSxHQUFJRCxHQUEwQixZQUFqQjlZLEVBQUt2VSxlQUNUaUQsRUFBSXlaLG1CQUNKelosRUFBSTNFLE9BRVQyRSxFQUFJb2EsT0FERndCLEVBQ1csR0FBR0EsS0FBYWIsR0FBVyxHQUFHbmpCLElBQU9vSSxFQUFJNUUsY0FBY3lpQixJQUV2RCxHQUFHdk0sRUFBSy9VLEtBQUsrdEIsYUFBdUJ6TSxRQUU5QyxDQUFBLEdBQUt1TSxJQUFTOVksR0FBNEIsTUFBcEJBLEVBQUtrRCxXQVVoQyxNQUFNLElBQUluRSxNQUFNclUsRUFBSXNWLEtBQUt2QyxLQVB6QixVQUZPL08sRUFBSXlaLG1CQUNKelosRUFBSTNFLE9BQ1B1Z0IsRUFDRjViLEVBQUlvYSxPQUFTLEdBQUd3QixLQUFhYixHQUFXLEdBQUduakIsSUFBT29JLEVBQUk1RSxjQUFjeWlCLFFBQy9ELENBQ0wsTUFBTTJDLEVBQVcySixFQUFhM0osU0FBVzJKLEVBQWEzSixTQUFXLE9BQU8ySixFQUFhek0sb0JBQ3JGMWQsRUFBSW9hLE9BQVMsV0FBVytQLEVBQWE5TSxVQUFVbUQsS0FBWXpGLEdBQVcsR0FBR25qQixJQUFPb0ksRUFBSTVFLGNBQWN5aUIsS0FLbEd3TSxJQUVBcnFCLEVBQUlvYSxRQURGeUQsRUFDWSxhQUVBLGNBS3RCLE9BQU94b0IsRUFDUCxNQUFPMlcsR0FDUCxJQUFLbWUsRUFBYWpjLFNBQW9DLE9BQXpCaWMsRUFBYWpjLFFBQ3hDLElBQ0UsTUFBTW9ELEVBQU9qUyxLQUFLQyxNQUFNME0sRUFBSXJXLE9BQzVCTixFQUFJK2IsS0FBSzFDLEdBQWM0RSxhQUFjLENBQ25DakMsTUFBT2hjLEVBQUlpUixLQUFLQyxVQUF1QixpQkFDdkMrSyxLQUFNamMsRUFBSWlSLEtBQUtDLFVBQXVCLHVCQUF3QixDQUM1RDRLLEtBQU1HLEVBQUtILE9BRWI5USxLQUFNLHdEQUVSLE1BQU81SyxJQUlYLE1BQU11VyxJQUlKbFcsR0FBVVQsSUFDZCxNQUFNOFEsRUFBYTlRLEVBQUkrUSxVQUF3QixpQkFBbUIsR0FpS2xFLE1BaEtnQyxDQUM5QixDQUNFaEosS0FBTSxVQUNOdEMsS0FBTSxPQUNGdUwsYUFDRixPQUFPaFIsRUFBSWlSLEtBQUtDLFVBQXVCLGdDQUV6QzNSLE1BQU9TLEVBQUlpUixLQUFLQyxVQUF1QiwrQkFDdkNHLFFBQVMsQ0FBQyxLQUFNLE1BQ2hCRCxRQUFTLEtBQ1RELFVBQVUsR0FFWixDQUNFcEosS0FBTSxXQUNOdEMsS0FBTSxRQUNGdUwsYUFDRixPQUFPaFIsRUFBSWlSLEtBQUtDLFVBQXVCLGlDQUVyQzNSLFlBQ0YsT0FBT1MsRUFBSWlSLEtBQUtDLFVBQXVCLGlDQUV6Q0UsUUFBU04sRUFBV21qQixVQUFZLEdBQ2hDOWlCLFVBQVUsR0FFWixDQUNFcEosS0FBTSxZQUNOdEMsS0FBTSxRQUNGdUwsYUFDRixPQUFPaFIsRUFBSWlSLEtBQUtDLFVBQXVCLGtDQUVyQzNSLFlBQ0YsT0FBT1MsRUFBSWlSLEtBQUtDLFVBQXVCLGtDQUV6Q0UsUUFBU04sRUFBVytmLFdBQWEsR0FDakMxZixVQUFVLEdBRVosQ0FDRXBKLEtBQU0sU0FDTnRDLEtBQU0sUUFDRnVMLGFBQ0YsT0FBT2hSLEVBQUlpUixLQUFLQyxVQUF1QiwrQkFFckMzUixZQUNGLE9BQU9TLEVBQUlpUixLQUFLQyxVQUF1QiwrQkFFekNFLFFBQVNOLEVBQVdrWCxRQUFVLEdBQzlCN1csVUFBVSxHQUVaLENBQ0VwSixLQUFNLFFBQ050QyxLQUFNLFFBQ0Z1TCxhQUNGLE9BQU9oUixFQUFJaVIsS0FBS0MsVUFBdUIsOEJBRXJDM1IsWUFDRixPQUFPUyxFQUFJaVIsS0FBS0MsVUFBdUIsOEJBRXpDRSxRQUFTTixFQUFXb2pCLE9BQVMsR0FDekJ4c0IsY0FDRixPQUFPMUgsRUFBSWlSLEtBQUtDLFVBQXVCLHNDQUV6Q0MsVUFBVSxHQUVaLENBQ0VwSixLQUFNLE9BQ050QyxLQUFNLFFBQ0Z1TCxhQUNGLE9BQU9oUixFQUFJaVIsS0FBS0MsVUFBdUIsNkJBRXJDM1IsWUFDRixPQUFPUyxFQUFJaVIsS0FBS0MsVUFBdUIsNkJBRXpDRSxRQUFTTixFQUFXdVgsTUFBUSxHQUN4QjNnQixjQUNGLE9BQU8xSCxFQUFJaVIsS0FBS0MsVUFBdUIscUNBRXpDQyxVQUFVLEdBRVosQ0FDRXBKLEtBQU0sV0FDTnRDLEtBQU0sUUFDRnVMLGFBQ0YsT0FBT2hSLEVBQUlpUixLQUFLQyxVQUF1QixpQ0FFckMzUixZQUNGLE9BQU9TLEVBQUlpUixLQUFLQyxVQUF1QixpQ0FFekNFLFFBQVNOLEVBQVdxYSxVQUFZLEdBQzVCempCLGNBQ0YsT0FBTzFILEVBQUlpUixLQUFLQyxVQUF1Qix5Q0FFekNDLFVBQVUsR0FFWixDQUNFcEosS0FBTSxPQUNOdEMsS0FBTSxRQUNGdUwsYUFDRixPQUFPaFIsRUFBSWlSLEtBQUtDLFVBQXVCLDZCQUVyQzNSLFlBQ0YsT0FBT1MsRUFBSWlSLEtBQUtDLFVBQXVCLDZCQUV6Q0UsUUFBU04sRUFBV3ZPLE1BQVEsR0FDeEJtRixjQUNGLE9BQU8xSCxFQUFJaVIsS0FBS0MsVUFBdUIscUNBRXpDQyxVQUFVLEdBRVosQ0FDRXBKLEtBQU0sWUFDTnRDLEtBQU0sUUFDRnVMLGFBQ0YsT0FBT2hSLEVBQUlpUixLQUFLQyxVQUF1QixrQ0FFckMzUixZQUNGLE9BQU9TLEVBQUlpUixLQUFLQyxVQUF1QixrQ0FFekNFLFFBQVNOLEVBQVd5VixXQUFhLEdBQzdCN2UsY0FDRixPQUFPMUgsRUFBSWlSLEtBQUtDLFVBQXVCLDBDQUV6Q0MsVUFBVSxHQUVaLENBQ0VwSixLQUFNLFVBQ050QyxLQUFNLFFBQ04yTCxRQUFTTixFQUFXclIsU0FBVyxHQUMzQnVSLGFBQ0YsT0FBT2hSLEVBQUlpUixLQUFLQyxVQUF1QixnQ0FFckMzUixZQUNGLE9BQU9TLEVBQUlpUixLQUFLQyxVQUF1QixnQ0FFckN4SixjQUNGLE9BQU8xSCxFQUFJaVIsS0FBS0MsVUFBdUIsd0NBRXpDQyxVQUFVLEdBRVosQ0FDRXBKLEtBQU0sT0FDTnRDLEtBQU0sVUFDTjJMLGFBQTZCOU4sSUFBcEJ3TixFQUFXa2tCLFFBQStCbGtCLEVBQVdra0IsS0FDMURoa0IsYUFDRixPQUFPaFIsRUFBSWlSLEtBQUtDLFVBQXVCLDZCQUVyQzNSLFlBQ0YsT0FBT1MsRUFBSWlSLEtBQUtDLFVBQXVCLDZCQUV6Q0MsVUFBVSxFQUNOK2pCLGtCQUNGLE9BQU9sMUIsRUFBSWlSLEtBQUtDLFVBQXVCLHFDQUVyQ2lrQixpQkFDRixPQUFPbjFCLEVBQUlpUixLQUFLQyxVQUF1QixvQ0FFckNra0IsV0FDRixPQUFPcDFCLEVBQUlpUixLQUFLQyxVQUF1QixvQ0N2Vi9DLE1BQU0yVSxHQUFjaGdCLE1BQU9wRyxFQUEyQjZMLEtBQ3BELE1BQU1nakIsRUFBaUMsQ0FDckN6bkIsT0FBUSxPQUNSOUIsSUFBSyw0QkFDTHFiLFFBQVMsQ0FDUCxlQUFnQix1QkFFbEJZLFNBQVUsQ0FDUjFiLEtBQU1nRyxJQU1WLE9BSEk3TCxFQUFRRSxRQUNWMnVCLEVBQWUzdUIsTUFBUUYsRUFBUUUsT0FFMUIydUIsR0FHSHZ1QixHQUFTOEYsTUFBTzdGLFlBQ3BCLElBQUlxMUIsRUFBWXIxQixFQUFJK1EsVUFBNEIseUJBQzNDc2tCLElBQ0hBLEVBQVksSUFFZCxJQUNFLE1BQU14TyxFQUFVN21CLEVBQUkwYyxPQUNwQixJQUFLLE1BQU0vUixLQUFPa2MsRUFDaEIsR0FBSWxjLEVBQUk1RSxVQUFZNEUsRUFBSTNFLE9BQVEsQ0FDOUIsSUFBSXNGLEVBQVFYLEVBQUkzRSxRQUNYc0YsR0FBU1gsRUFBSXlaLGNBQ2hCOVksRUFBUWdCLE9BQU94TCxLQUFLNkosRUFBSXlaLFlBQWEsV0FFdkMsTUFBTThPLEVBQWlCM3dCLEVBQUtuQixLQUFLcEIsRUFBSWdhLFFBQVMsY0FDOUMvRCxFQUFjaWQsR0FDZCxNQUFNOVAsRUFBZTdnQixFQUFLbkIsS0FBSzh4QixFQUFnQnZvQixFQUFJNUUsVUFDbkR1QyxFQUFHNE4sY0FBY2tOLEVBQWM5WCxHQUMvQixNQUFNN0wsUUFBZ0JvbUIsR0FBWXdQLEVBQVcvc0IsRUFBR2d0QixpQkFBaUJsUyxJQUMzRHpjLFFBQW9CM0csRUFBSTRHLFFBQVFuSCxHQUNoQ3djLEVBQXNCLGlCQUFSdFYsRUFBbUJxRCxLQUFLQyxNQUFNdEQsR0FBT0EsRUFFekQsR0FEQTR1QixFQUFPblMsS0FDUSxRQUFYamQsRUFBQThWLE1BQUFBLE9BQUksRUFBSkEsRUFBTyxVQUFJLElBQUE5VixPQUFBLEVBQUFBLEVBQUFxdkIsS0FLYixNQUFNLElBQUl4YSxNQUFNLHlDQUpUclEsRUFBSXlaLG1CQUNKelosRUFBSTNFLE9BQ1gyRSxFQUFJb2EsT0FBUyxxQkFBcUI5SSxFQUFLLEdBQUd1WixNQU1oRCxPQUFPeDFCLEVBQ1AsTUFBTzJXLEdBTVAsTUFMQTNXLEVBQUkrYixLQUFLMUMsR0FBYzRFLGFBQWMsQ0FDbkNqQyxNQUFPaGMsRUFBSWlSLEtBQUtDLFVBQXVCLGlCQUN2QytLLEtBQU1qYyxFQUFJaVIsS0FBS0MsVUFBdUIsOEJBQ3RDbEcsS0FBTSxNQUVXLFFBQWJ3SSxFQUFBbUQsTUFBQUEsT0FBRyxFQUFIQSxFQUFLdUksZ0JBQVEsSUFBQTFMLE9BQUEsRUFBQUEsRUFBRXRNLE9BQVF5UCxJQUkzQmxXLEdBQVVULEdBRWtCLENBQzlCLENBQ0UrSCxLQUFNLFFBQ050QyxLQUFNLFFBQ0Z1TCxhQUNGLE9BQU9oUixFQUFJaVIsS0FBS0MsVUFBdUIsdUJBRXJDM1IsWUFDRixPQUFPUyxFQUFJaVIsS0FBS0MsVUFBdUIsdUJBRXJDeEosY0FDRixPQUFPMUgsRUFBSWlSLEtBQUtDLFVBQXVCLCtCQUV6Q0UsU0FkZXBSLEVBQUkrUSxVQUE0QiwwQkFBNEIsSUFjdkRwUixPQUFTLEdBQzdCd1IsVUFBVSxJQ3ZFaEIsTUFBTXlXLEdBQW9CLENBQUNub0IsRUFBdUJzRyxLQUNoRCxNQUFNeEQsRUFBTzlDLEVBQVE4QyxNQUFRLEdBQ3ZCa3pCLEVBQVdoMkIsRUFBUWcyQixTQUVuQkMsRUFBY0MsR0FESGwyQixFQUFRMm1CLFVBRW5CeUIsR0FBTyxJQUFJMWxCLE1BQU93bEIsY0FFbEIxVSxFQUFRLE9BREYsSUFBSXhULEVBQVF1b0IsVUFBVXRDLEdBQVcsR0FBR25qQixJQUFPd0QsVUFDM0I4aEIsSUFFNUIsTUFBTyxTQUFTNE4sS0FESC96QixFQUFPd21CLFdBQVcsT0FBUXdOLEdBQWFsMUIsT0FBT3lTLEdBQU9yUixPQUFPLGFBSXJFaWtCLEdBQWMsQ0FDbEJwbUIsRUFDQXNHLEVBQ0FraUIsRUFDQTNjLEtBRUEsTUFBTTBjLEVBQVN2b0IsRUFBUXVvQixPQUNqQnpsQixFQUFPOUMsRUFBUThDLEtBQ3JCLElBQUk0b0IsR0FBWTFyQixFQUFRMHJCLFVBQVksNEJBQTRCL25CLFFBQVEsUUFBUyxJQUlqRixPQUhLK25CLEVBQVMxakIsV0FBVyxVQUN2QjBqQixFQUFXLFdBQVdBLEtBRWpCLENBQ0x0a0IsT0FBUSxNQUNSOUIsSUFBSyxHQUFHb21CLEtBQVluRCxLQUFVdEMsR0FBVyxHQUFHbmpCLElBQU93RCxPQUNuRHFhLFFBQVMsQ0FDUDJGLGNBQWVrQyxFQUNmOWxCLE1BQU0sSUFBSUEsTUFBT3dsQixjQUNqQixlQUFnQkksRUFBT2hpQixJQUFhLDRCQUV0Q2tXLEtBQU0zUSxFQUNOeEUseUJBQXlCLElBSTdCLFNBQVM2dUIsR0FBSTlmLEdBQ1gsT0FBT25VLEVBQU9DLFdBQVcsT0FBT25CLE9BQU9xVixHQUFTalUsT0FBTyxPQUd6RCxNQUFNZzBCLEdBQW9CLENBQ3hCQyxFQUNBQyxFQUNBcjJCLEVBQ0FzRyxLQUVBLE1BQU1nd0IsRUFBTSxJQUFJdDJCLEVBQVE4QyxNQUFRLEtBQUt3RCxJQUFXM0MsUUFBUSxPQUFRLEtBQUtBLFFBQVEsUUFBUyxLQUNoRmxCLEVBQU1qQixLQUFLdU8sT0FBTSxJQUFJck4sTUFBT2tCLFVBQVksS0FDeEMyeUIsRUFBU0YsRUFBYTV6QixFQUFNa0MsU0FBUzB4QixFQUFXdjBCLFdBQVksSUFBTVcsRUFBTSxLQUc5RSxNQUFPLFFBREssR0FEQ3l6QixHQUFJLEdBQUdFLEtBQWtCRyxLQUFVRCxLQUM1QkUsVUFBVSxHQUFJLE1BQU1ELE9BSXBDajJCLEdBQVM4RixNQUFPN0YsSUFDcEIsTUFBTWsyQixFQUFlbDJCLEVBQUkrUSxVQUF3QixnQkFDakQsSUFBS21sQixFQUFjLE1BQU0sSUFBSWxiLE1BQU0sMkJBQ25DLElBQ0UsTUFBTTZMLEVBQVU3bUIsRUFBSTBjLE9BQ2RuYSxFQUFPOGlCLEdBQWlCLENBQUU5aUIsS0FBTTJ6QixFQUFhM3pCLE9BQ25EMnpCLEVBQWEzekIsS0FBT0EsRUFDcEIsSUFBSyxNQUFNb0ksS0FBT2tjLEVBQ2hCLEdBQUlsYyxFQUFJNUUsVUFBWTRFLEVBQUkzRSxPQUFRLENBQzlCLElBQUlzRixFQUFRWCxFQUFJM0UsUUFDWHNGLEdBQVNYLEVBQUl5WixjQUNoQjlZLEVBQVFnQixPQUFPeEwsS0FBSzZKLEVBQUl5WixZQUFhLFdBRXZDLE1BQU02RCxFQUFZTCxHQUFrQnNPLEVBQWN2ckIsRUFBSTVFLFVBQ2hEdEcsRUFBVW9tQixHQUFZcVEsRUFBY3ZyQixFQUFJNUUsU0FBVWtpQixFQUFXM2MsR0FDN0Q2cUIsRUFBU0QsRUFBYXoyQixTQUFXLEdBRXZDLEdBQXdCLGFBRExPLEVBQUk0RyxRQUFRbkgsSUFDdEIwZixXQWNQLE1BQU0sSUFBSW5FLE1BQU0saUJBVmhCLFVBSE9yUSxFQUFJeVosbUJBQ0p6WixFQUFJM0UsT0FDWDJFLEVBQUlvYSxPQUFTLEdBQUdtUixFQUFhbnhCLE9BQU8yZ0IsR0FBVyxHQUFHbmpCLElBQU9vSSxFQUFJNUUsY0FBY293QixJQUN2RUQsRUFBYUwsZUFBZ0IsQ0FDL0IsTUFBTU8sRUFBTVIsR0FDVk0sRUFBYUwsZUFDYkssRUFBYUosV0FDYkksRUFDQXZyQixFQUFJNUUsVUFFTjRFLEVBQUlvYSxPQUFTcGEsRUFBSW9hLE9BQU9waEIsU0FBUyxLQUFPLEdBQUdnSCxFQUFJb2EsVUFBVXFSLElBQVEsR0FBR3pyQixFQUFJb2EsVUFBVXFSLEtBTzFGLE9BQU9wMkIsRUFDUCxNQUFPMlcsR0FDUCxHQUFvQixrQkFBaEJBLEVBQUlqUCxRQUNOMUgsRUFBSStiLEtBQUsxQyxHQUFjNEUsYUFBYyxDQUNuQ2pDLE1BQU9oYyxFQUFJaVIsS0FBS0MsVUFBdUIsaUJBQ3ZDK0ssS0FBTWpjLEVBQUlpUixLQUFLQyxVQUF1Qix3QkFFbkMsQ0FDTCxNQUFNK0ssRUFBT25TLEdBQTRCNk0sRUFBSXJXLE9BQzdDTixFQUFJK2IsS0FBSzFDLEdBQWM0RSxhQUFjLENBQ25DakMsTUFBT2hjLEVBQUlpUixLQUFLQyxVQUF1QixpQkFDdkMrSyxLQUFNamMsRUFBSWlSLEtBQUtDLFVBQXVCLHVCQUF3QixDQUM1RDRLLEtBQXNCLGlCQUFURyxFQUFvQkEsRUFBS0gsS0FBT0csSUFFL0NqUixLQUFNLHFDQUdWLE1BQU0yTCxJQUlKbFcsR0FBVVQsSUFDZCxNQUFNOFEsRUFBYTlRLEVBQUkrUSxVQUF3QixpQkFBbUIsR0F1SWxFLE1BdElnQyxDQUM5QixDQUNFaEosS0FBTSxTQUNOdEMsS0FBTSxRQUNGdUwsYUFDRixPQUFPaFIsRUFBSWlSLEtBQUtDLFVBQXVCLHdCQUVyQzNSLFlBQ0YsT0FBT1MsRUFBSWlSLEtBQUtDLFVBQXVCLHdCQUV6Q0UsUUFBU04sRUFBV2tYLFFBQVUsR0FDOUI3VyxVQUFVLEdBRVosQ0FDRXBKLEtBQU0sV0FDTnRDLEtBQU0sUUFDRnVMLGFBQ0YsT0FBT2hSLEVBQUlpUixLQUFLQyxVQUF1QiwwQkFFckMzUixZQUNGLE9BQU9TLEVBQUlpUixLQUFLQyxVQUF1QiwwQkFFckN4SixjQUNGLE9BQU8xSCxFQUFJaVIsS0FBS0MsVUFBdUIsa0NBRXpDRSxRQUFTTixFQUFXMmtCLFVBQVksR0FDaEN0a0IsVUFBVSxHQUVaLENBQ0VwSixLQUFNLFdBQ050QyxLQUFNLFFBQ0Z1TCxhQUNGLE9BQU9oUixFQUFJaVIsS0FBS0MsVUFBdUIsa0NBRXJDM1IsWUFDRixPQUFPUyxFQUFJaVIsS0FBS0MsVUFBdUIsMEJBRXJDeEosY0FDRixPQUFPMUgsRUFBSWlSLEtBQUtDLFVBQXVCLGtDQUV6Q0UsUUFBU04sRUFBV3NWLFVBQVksR0FDaENqVixVQUFVLEdBRVosQ0FDRXBKLEtBQU0sTUFDTnRDLEtBQU0sUUFDRnVMLGFBQ0YsT0FBT2hSLEVBQUlpUixLQUFLQyxVQUF1QixxQkFFckMzUixZQUNGLE9BQU9TLEVBQUlpUixLQUFLQyxVQUF1QixxQkFFckN4SixjQUNGLE9BQU8xSCxFQUFJaVIsS0FBS0MsVUFBdUIsNkJBRXpDRSxRQUFTTixFQUFXL0wsS0FBTyxHQUMzQm9NLFVBQVUsR0FFWixDQUNFcEosS0FBTSxVQUNOdEMsS0FBTSxRQUNGdUwsYUFDRixPQUFPaFIsRUFBSWlSLEtBQUtDLFVBQXVCLHlCQUVyQzNSLFlBQ0YsT0FBT1MsRUFBSWlSLEtBQUtDLFVBQXVCLHlCQUVyQ3hKLGNBQ0YsT0FBTzFILEVBQUlpUixLQUFLQyxVQUF1QixpQ0FFekNFLFFBQVNOLEVBQVdyUixTQUFXLEdBQy9CMFIsVUFBVSxHQUVaLENBQ0VwSixLQUFNLE9BQ050QyxLQUFNLFFBQ0Z1TCxhQUNGLE9BQU9oUixFQUFJaVIsS0FBS0MsVUFBdUIsc0JBRXJDM1IsWUFDRixPQUFPUyxFQUFJaVIsS0FBS0MsVUFBdUIsc0JBRXJDeEosY0FDRixPQUFPMUgsRUFBSWlSLEtBQUtDLFVBQXVCLDhCQUV6Q0UsUUFBU04sRUFBV3ZPLE1BQVEsR0FDNUI0TyxVQUFVLEdBRVosQ0FDRXBKLEtBQU0saUJBQ050QyxLQUFNLFFBQ0Z1TCxhQUNGLE9BQU9oUixFQUFJaVIsS0FBS0MsVUFBdUIsa0NBRXJDM1IsWUFDRixPQUFPUyxFQUFJaVIsS0FBS0MsVUFBdUIsa0NBRXJDeEosY0FDRixPQUFPMUgsRUFBSWlSLEtBQUtDLFVBQXVCLGtDQUV6Q0UsUUFBU04sRUFBVytrQixnQkFBa0IsR0FDdEMxa0IsVUFBVSxHQUVaLENBQ0VwSixLQUFNLGFBQ050QyxLQUFNLFFBQ0Z1TCxhQUNGLE9BQU9oUixFQUFJaVIsS0FBS0MsVUFBdUIsNkJBRXJDM1IsWUFDRixPQUFPUyxFQUFJaVIsS0FBS0MsVUFBdUIsNkJBRXJDeEosY0FDRixPQUFPMUgsRUFBSWlSLEtBQUtDLFVBQXVCLDZCQUV6Q0UsUUFBU04sRUFBV2dsQixZQUFjLEdBQ2xDM2tCLFVBQVUsR0FFWixDQUNFcEosS0FBTSxXQUNOdEMsS0FBTSxRQUNGdUwsYUFDRixPQUFPaFIsRUFBSWlSLEtBQUtDLFVBQXVCLDBCQUVyQzNSLFlBQ0YsT0FBT1MsRUFBSWlSLEtBQUtDLFVBQXVCLDBCQUVyQ3hKLGNBQ0YsT0FBTzFILEVBQUlpUixLQUFLQyxVQUF1QixrQ0FFekNFLFFBQVNOLEVBQVdxYSxVQUFZLDJCQUNoQ2hhLFVBQVUsS0N0UGhCLE1BQU1wUixHQUFTOEYsTUFBTzdGLElBQ3BCLE1BQU1xMkIsRUFBcUJyMkIsRUFBSStRLFVBQThCLHNCQUM3RCxJQUFLc2xCLEVBQW9CLE1BQU0sSUFBSXJiLE1BQU0saUNBQ3pDcWIsRUFBbUJyVyxLQUFPcVcsRUFBbUJyVyxLQUFLNWMsUUFBUSxxQkFBc0IsSUFDaEZpekIsRUFBbUJyVyxNQUFRcVcsRUFBbUIzTSxXQUFhLFdBQWEsV0FBYTJNLEVBQW1CclcsS0FDeEdxVyxFQUFtQjl6QixLQUFPOGlCLEdBQWlCLENBQ3pDOWlCLEtBQU04ekIsRUFBbUI5ekIsS0FDekJpakIsYUFBYSxJQUVmLE1BQU04USxFQUFXRCxFQUFtQkMsVUFBWSxRQUMxQ0MsRUFBVWxSLEdBQWlCLENBQy9COWlCLEtBQU04ekIsRUFBbUJFLFFBQ3pCL1EsYUFBYSxJQUVUMlEsRUFBU0UsRUFBbUI1MkIsU0FBVyxHQUM3QyxJQUNFLE1BQU1vbkIsRUFBVTdtQixFQUFJMGMsT0FDZDZKLEVBQVk4UCxFQUFtQjlQLFVBQy9CRixFQUFhZ1EsRUFBbUI5ekIsS0FDdEMsSUFBSyxNQUFNb0ksS0FBT2tjLEVBQ2hCLEdBQUlsYyxFQUFJNUUsVUFBWTRFLEVBQUkzRSxPQUFRLENBQzlCLElBQUlzRixFQUFRWCxFQUFJM0UsUUFDWHNGLEdBQVNYLEVBQUl5WixjQUNoQjlZLEVBQVFnQixPQUFPeEwsS0FBSzZKLEVBQUl5WixZQUFhLFdBRXZDLE1BQU1rSCxFQUFxQyxDQUN6Q25GLFNBQVVrUSxFQUFtQmxRLFNBQzdCQyxTQUFVaVEsRUFBbUJqUSxTQUM3Qi9GLGNBQWUsV0FDZkUsaUJBQWtCLFlBRUgsV0FBYitWLElBQ0ZoTCxFQUFjZ0wsU0FBV0UsR0FBU0MsUUFFcEMsTUFBTWxNLEVBQXVCbU0sR0FBYUwsRUFBbUJyVyxLQUFNc0wsR0FDN0RxTCxFQUE4QixNQUFmdFEsRUFBcUIsR0FBS0EsRUFDM0NzUSxTQUNJcE0sRUFBT3FNLGdCQUFnQkQsRUFBYyxDQUFFRSxXQUFXLElBSzFELFVBSGtCdE0sRUFBT3VNLGdCQUFnQixHQUFHelEsSUFBYTFiLEVBQUk1RSxXQUFXM0MsUUFBUSxhQUFjLElBQUtrSSxFQUFPLENBQ3hHeXJCLFdBQVcsSUFpQlgsTUFBTSxJQUFJL2IsTUFBTSxpQkFmVCxDQUNQLE1BQU1nVSxFQUFjenNCLEVBQUtuQixLQUFLcEIsRUFBSWdhLFFBQVMsVUFBVyxlQUNoRHVaLEVBQWtCaHhCLEVBQUtuQixLQUFLNHRCLEVBQWFya0IsRUFBSTVFLFVBQ25Ea1EsRUFBYzFULEVBQUtrQyxRQUFROHVCLElBQzNCanJCLEVBQUc0TixjQUFjcWQsRUFBaUJqb0IsVUFDM0JYLEVBQUl5WixtQkFDSnpaLEVBQUkzRSxPQUNYLE1BQU1vckIsRUFBVTdLLEdBQWE4UCxFQUFtQnJXLEtBQzVDcVcsRUFBbUJFLFFBQ3JCNXJCLEVBQUlvYSxPQUFTLEdBQUdxTSxLQUFXMUwsR0FBVyxHQUFHNlEsSUFBVTVyQixFQUFJNUUsY0FBY293QixJQUVyRXhyQixFQUFJb2EsT0FBUyxHQUFHcU0sS0FBVzFMLEdBQVcsR0FBR1csSUFBYTFiLEVBQUk1RSxjQUFjb3dCLElBRTFFeHJCLEVBQUl5a0IsWUFBYyxzQ0FBc0N4SixtQkFBbUJqYixFQUFJNUUsYUFNckYsT0FBTy9GLEVBQ1AsTUFBTzJXLEdBS1AsTUFKQTNXLEVBQUkrYixLQUFLMUMsR0FBYzRFLGFBQWMsQ0FDbkNqQyxNQUFPaGMsRUFBSWlSLEtBQUtDLFVBQXVCLGlCQUN2QytLLEtBQU1qYyxFQUFJaVIsS0FBS0MsVUFBdUIsb0JBRWxDeUYsSUFJSmxXLEdBQVVULFVBQ2QsTUFBTThRLEVBQWE5USxFQUFJK1EsVUFBOEIsdUJBQXlCLEdBa0k5RSxNQWpJZ0MsQ0FDOUIsQ0FDRWhKLEtBQU0sT0FDTnRDLEtBQU0sUUFDRmxHLFlBQ0YsT0FBT1MsRUFBSWlSLEtBQUtDLFVBQXVCLDRCQUV6Q0UsUUFBU04sRUFBV2tQLE1BQVEsR0FDNUI3TyxVQUFVLEdBRVosQ0FDRXBKLEtBQU0sYUFDTnRDLEtBQU0sVUFDRnVMLGFBQ0YsT0FBT2hSLEVBQUlpUixLQUFLQyxVQUF1QixrQ0FFckMzUixZQUNGLE9BQU9TLEVBQUlpUixLQUFLQyxVQUF1QixrQ0FFekNDLFVBQVUsRUFDVkMsZ0JBQVNqTCxFQUFBMkssRUFBVzRZLDJCQUNoQmhpQixjQUNGLE9BQU8xSCxFQUFJaVIsS0FBS0MsVUFBdUIsMkNBRzNDLENBQ0VuSixLQUFNLFdBQ050QyxLQUFNLFFBQ0Z1TCxhQUNGLE9BQU9oUixFQUFJaVIsS0FBS0MsVUFBdUIsZ0NBRXJDM1IsWUFDRixPQUFPUyxFQUFJaVIsS0FBS0MsVUFBdUIsZ0NBRXpDRSxRQUFTTixFQUFXcVYsVUFBWSxHQUNoQ2hWLFVBQVUsRUFDTnpKLGNBQ0YsT0FBTzFILEVBQUlpUixLQUFLQyxVQUF1Qix5Q0FHM0MsQ0FDRW5KLEtBQU0sV0FDTnRDLEtBQU0sUUFDRnVMLGFBQ0YsT0FBT2hSLEVBQUlpUixLQUFLQyxVQUF1QixnQ0FFckMzUixZQUNGLE9BQU9TLEVBQUlpUixLQUFLQyxVQUF1QixnQ0FFekNFLFFBQVNOLEVBQVdzVixVQUFZLEdBQ2hDalYsVUFBVSxFQUNOekosY0FDRixPQUFPMUgsRUFBSWlSLEtBQUtDLFVBQXVCLHlDQUczQyxDQUNFbkosS0FBTSxPQUNOdEMsS0FBTSxRQUNGdUwsYUFDRixPQUFPaFIsRUFBSWlSLEtBQUtDLFVBQXVCLDRCQUVyQzNSLFlBQ0YsT0FBT1MsRUFBSWlSLEtBQUtDLFVBQXVCLDRCQUV6Q0UsUUFBU04sRUFBV3ZPLE1BQVEsR0FDNUI0TyxVQUFVLEVBQ056SixjQUNGLE9BQU8xSCxFQUFJaVIsS0FBS0MsVUFBdUIscUNBRzNDLENBQ0VuSixLQUFNLFVBQ050QyxLQUFNLFFBQ0Z1TCxhQUNGLE9BQU9oUixFQUFJaVIsS0FBS0MsVUFBdUIsb0NBRXJDM1IsWUFDRixPQUFPUyxFQUFJaVIsS0FBS0MsVUFBdUIsb0NBRXpDRSxRQUFTTixFQUFXdk8sTUFBUSxHQUM1QjRPLFVBQVUsRUFDTnpKLGNBQ0YsT0FBTzFILEVBQUlpUixLQUFLQyxVQUF1Qiw2Q0FHM0MsQ0FDRW5KLEtBQU0sWUFDTnRDLEtBQU0sUUFDRnVMLGFBQ0YsT0FBT2hSLEVBQUlpUixLQUFLQyxVQUF1QixpQ0FFckMzUixZQUNGLE9BQU9TLEVBQUlpUixLQUFLQyxVQUF1QixpQ0FFekNFLFFBQVNOLEVBQVd5VixXQUFhLEdBQ2pDcFYsVUFBVSxFQUNOekosY0FDRixPQUFPMUgsRUFBSWlSLEtBQUtDLFVBQXVCLDBDQUczQyxDQUNFbkosS0FBTSxXQUNOdEMsS0FBTSxPQUNGdUwsYUFDRixPQUFPaFIsRUFBSWlSLEtBQUtDLFVBQXVCLGdDQUVyQzNSLFlBQ0YsT0FBT1MsRUFBSWlSLEtBQUtDLFVBQXVCLGdDQUV6Q0csUUFBUyxDQUFDLFFBQVMsVUFDbkJELFFBQVNOLEVBQVd3bEIsVUFBWSxRQUNoQ25sQixVQUFVLEdBRVosQ0FDRXBKLEtBQU0sVUFDTnRDLEtBQU0sUUFDRnVMLGFBQ0YsT0FBT2hSLEVBQUlpUixLQUFLQyxVQUF1QiwrQkFFckMzUixZQUNGLE9BQU9TLEVBQUlpUixLQUFLQyxVQUF1QiwrQkFFckN4SixjQUNGLE9BQU8xSCxFQUFJaVIsS0FBS0MsVUFBdUIsdUNBRXpDRSxRQUFTTixFQUFXclIsU0FBVyxHQUMvQjBSLFVBQVUsS0MvTGhCLE1BQU02bEIsR0FBbUIsS0FDaEIsQ0FDTG5mLFNBQVM3WCxJbEI4UFcsU0FBU0EsR0FDL0JBLEVBQUltVCxPQUFPVSxTQUFTZ0UsU0FBUyxhQUFjLENBQ3JDOVAsV0FDRixPQUFPL0gsRUFBSWlSLEtBQUtDLFVBQXVCLDhCQUV6Q25SLFVBQ0FVLEtrQm5RRXcyQixDQUFjajNCLEdqQmtLSSxTQUFTQSxHQUMvQkEsRUFBSW1ULE9BQU9VLFNBQVNnRSxTQUFTLFNBQVUsQ0FDakM5UCxXQUNGLE9BQU8vSCxFQUFJaVIsS0FBS0MsVUFBdUIsMkJBRXpDblIsVUFDQVUsS2lCdktFeTJCLENBQWVsM0IsR2Q0UEcsU0FBU0EsR0FDL0JBLEVBQUltVCxPQUFPVSxTQUFTZ0UsU0FBUyxlQUFnQixDQUN2QzlQLFdBQ0YsT0FBTy9ILEVBQUlpUixLQUFLQyxVQUF1Qiw2QkFFekNuUixVQUNBVSxLY2pRRTAyQixDQUFtQm4zQixHYitKRCxTQUFTQSxHQUMvQkEsRUFBSW1ULE9BQU9VLFNBQVNnRSxTQUFTLFNBQVUsQ0FDakM5UCxXQUNGLE9BQU8vSCxFQUFJaVIsS0FBS0MsVUFBdUIseUJBRXpDblIsVUFDQVUsS2FwS0UyMkIsQ0FBZXAzQixHWjZLRyxTQUFTQSxHQUMvQkEsRUFBSW1ULE9BQU9VLFNBQVNnRSxTQUFTLFFBQVMsQ0FDaEM5UCxXQUNGLE9BQU8vSCxFQUFJaVIsS0FBS0MsVUFBdUIsd0JBRXpDblIsVUFDQVUsS1lsTEU0MkIsQ0FBY3IzQixHWGtGSSxTQUFTQSxHQUMvQkEsRUFBSW1ULE9BQU9VLFNBQVNnRSxTQUFTLFFBQVMsQ0FDaEM5UCxXQUNGLE9BQU8vSCxFQUFJaVIsS0FBS0MsVUFBdUIsd0JBRXpDblIsVUFDQVUsS1d2RkU2MkIsQ0FBY3QzQixHVnFOSSxTQUFTQSxHQUMvQkEsRUFBSW1ULE9BQU9VLFNBQVNnRSxTQUFTLFlBQWEsQ0FDcEM5UCxXQUNGLE9BQU8vSCxFQUFJaVIsS0FBS0MsVUFBdUIsNkJBRXpDblIsVUFDQVUsS1UxTkU4MkIsQ0FBYXYzQixHVDZISyxTQUFTQSxHQUMvQkEsRUFBSW1ULE9BQU9VLFNBQVNnRSxTQUFTLFVBQVcsQ0FDbEM5UCxXQUNGLE9BQU8vSCxFQUFJaVIsS0FBS0MsVUFBdUIsMEJBRXpDblIsVUFDQVUsS1NsSUUrMkIsQ0FBZ0J4M0IsR1JnS0UsU0FBU0EsR0FDL0JBLEVBQUltVCxPQUFPVSxTQUFTZ0UsU0FBUyxRQUFTLENBQ2hDOVAsV0FDRixPQUFPL0gsRUFBSWlSLEtBQUtDLFVBQXVCLHdCQUV6Q25SLFVBQ0FVLEtRcktFZzNCLENBQWN6M0IsR05nT0ksU0FBU0EsR0FDL0JBLEVBQUltVCxPQUFPVSxTQUFTZ0UsU0FBUyxZQUFhLENBQ3BDOVAsV0FDRixPQUFPL0gsRUFBSWlSLEtBQUtDLFVBQXVCLDRCQUV6Q25SLFVBQ0FVLEtNck9FaTNCLENBQWExM0IsR0x1RkssU0FBU0EsR0FDL0JBLEVBQUltVCxPQUFPVSxTQUFTZ0UsU0FBUyxPQUFRLENBQy9COVAsV0FDRixPQUFPL0gsRUFBSWlSLEtBQUtDLFVBQXVCLHVCQUV6Q25SLFVBQ0FVLEtLNUZFazNCLENBQWEzM0IsR0p3VUssU0FBU0EsR0FDL0JBLEVBQUltVCxPQUFPVSxTQUFTZ0UsU0FBUyxRQUFTLENBQ2hDOVAsV0FDRixPQUFPL0gsRUFBSWlSLEtBQUtDLFVBQXVCLCtCQUV6Q25SLFVBQ0FVLEtJN1VFbTNCLENBQWM1M0IsR0h5REksU0FBU0EsR0FDL0JBLEVBQUltVCxPQUFPVSxTQUFTZ0UsU0FBUyxpQkFBa0IsQ0FDekM5UCxXQUNGLE9BQU8vSCxFQUFJaVIsS0FBS0MsVUFBdUIsNEJBRXpDblIsVUFDQVUsS0c5REVvM0IsQ0FBa0I3M0IsR0ZxT0EsU0FBU0EsR0FDL0JBLEVBQUltVCxPQUFPVSxTQUFTZ0UsU0FBUyxRQUFTLENBQ2hDOVAsV0FDRixPQUFPL0gsRUFBSWlSLEtBQUtDLFVBQXVCLHdCQUV6Q25SLFVBQ0FVLEtFMU9FcTNCLENBQWM5M0IsR0RxTEksU0FBU0EsR0FDL0JBLEVBQUltVCxPQUFPVSxTQUFTZ0UsU0FBUyxjQUFlLENBQ3RDOVAsV0FDRixPQUFPL0gsRUFBSWlSLEtBQUtDLFVBQXVCLDhCQUV6Q25SLEdBQ0FVLE9BQUFBLEtDMUxFczNCLENBQW9CLzNCLE1DUXBCZzRCLEdBQWEsQ0FBQ2g0QixFQUFhc0YsRUFBYy9DLEtBQzdDLE1BQU1tRCxFQUFZTCxHQUFhQyxHQVMvQixPQVJLSSxFQUFVQyxPQUNPLGlCQUFUcEQsRUFDVHZDLEVBQUlLLElBQUl5SSxLQUFLLGFBQWF2RyxrQkFFMUJ2QyxFQUFJSyxJQUFJeUksS0FBSyx3QkFFZjlJLEVBQUlLLElBQUl5SSxLQUFLLDBCQUVScEQsR0FHVCxJQUFldXlCLEdBQUEsUUFsREFweUIsTUFBTzdGLElBQ3BCLE1BQU11dEIsRUFBc0J2dEIsRUFBSTBjLE9BaUNoQyxhQWhDTWxXLFFBQVE0ZSxJQUNacGxCLEVBQUl5QixNQUFNVixLQUFJOEUsTUFBT25DLEVBQXVCNGYsS0FDMUMsSUFBSTVQLEVBYUosR0FYRUEsRUFERXBILE9BQU95SixTQUFTclMsR0FDWCxDQUNMd0MsU0FBUyxFQUNURixPQUFRdEMsRUFDUnFDLFNBQVUsR0FDVnRELFFBQVMsSUFFRnFDLEdBQU1wQixTQUNGMkMsR0FBVzNDLEVBQU0xRCxTQUVqQjRGLEdBQVVsQyxHQUVyQmdRLEVBQUt4TixTQUFXd04sRUFBSzFOLE9BQVEsQ0FDL0IsTUFBTWt5QixFQUFVRixHQUFXaDRCLEVBQUswVCxFQUFLMU4sT0FBUXRDLEdBQ3ZDakIsRUFBVWlSLEVBQUtqUixTQUFXeTFCLEVBQVF6MUIsU0FBVyxPQUNuRDhxQixFQUFRakssR0FBUyxDQUNmdGQsT0FBUTBOLEVBQUsxTixPQUNiRCxTQUFVMk4sRUFBSzNOLFVBQVksR0FBR2dWLElBQVFoTixPQUFPLG9CQUFvQnRMLElBQ2pFOEMsTUFBTzJ5QixFQUFRM3lCLE1BQ2ZDLE9BQVEweUIsRUFBUTF5QixPQUNoQi9DLFFBQVNpUixFQUFLalIsY0FHaEJ6QyxFQUFJSyxJQUFJQyxNQUFNb1QsRUFBS3ROLFlBS3pCcEcsRUFBSTBjLE9BQVM2USxFQUFRNWMsUUFBT2pOLEdBQVFBLElBQzdCMUQsSUNoQ1QsSUFBZW00QixHQUFBLENBQ2JwNEIsT0FOYThGLE1BQU83RixJQUNwQkEsRUFBSTBjLE9BQU8zSSxRQUFRL1QsRUFBSXlCLE9BQ2hCekIsSUNKRixNQzhCRG80QixHQUVGLENBQ0ZDLDJxQ0FDQUMsaXdCQUNBQyxnNENBQ0FDLGs1Q0FDQUMsa3VCQU9JQyxHQUVGLENBQ0ZMLE9BQVEsa0JBQ1JDLE1BQU8sY0FDUEMsTUFBTyxnQkFDUEMsTUFBTyxXQUNQQyxJQUFLLFVBU1AsTUFBTUUsR0FBb0I5eUIsTUFBTzdGLEtBTmpDLFNBQTJCQSxHQUN6QixNQUFNNDRCLEVBQVlyMkIsRUFBS25CLEtBQUtwQixFQUFJZ2EsUUR2REksNEJDd0RwQy9ELEVBQWMyaUIsR0FLZEMsQ0FBa0I3NEIsR0FFbEIsTUFBTTQ0QixFQUFZcjJCLEVBQUtuQixLQUFLcEIsRUFBSWdhLFFEL0RJLDJCQytENkIsR0FBR2UsSUFBUWhOLE9BQU8seUJBQ25GLGFBQWEsSUFBSXZILFNBQXlCLENBQUNDLEVBQWNDLEtBQ3ZELE1BQU1veUIsRUEvQ2lCLE1BQ3pCLE1BQU1BLEVBQVcxd0IsUUFBUTB3QixTQUN6QixPQUFJQyxHQUFjLE1BQ0QsVUFBYkQsRUFDb0MsT0FBL0JFLEVBQUdDLFVBQVV2MEIsTUFBTSxLQUFLLEdBQWMsUUFBVSxRQUNqQyxXQUFibzBCLEVBQ0YsU0FFQSxTQXVDVUksR0FDWEMsRUFBYTUyQixFQUFLbkIsS0FBS3BCLEVBQUlnYSxRQUFTMGUsR0FBd0JJLElBS2xFLElBQUlNLEVBSEM5d0IsRUFBR0MsV0FBVzR3QixJQUNqQjd3QixFQUFHNE4sY0FBY2lqQixFQUFZZixHQUF1QlUsR0FBVyxRQUkvRE0sRUFEZSxXQUFiTixFQUNVdGMsR0FBTSxZQUFhLENBQUMyYyxFQUFZUCxJQUN0QixVQUFiRSxHQUFxQyxVQUFiQSxFQUNyQnRjLEdBQU0sYUFBYyxDQUM5QixhQUNBLGtCQUNBLFVBQ0EsT0FDQSxtQkFDQSxlQUtBLFFBQ0EyYyxFQUNBUCxJQUdVcGMsR0FBTSxLQUFNLENBQUMyYyxFQUFZUCxJQUd2Q1EsRUFBVXpjLE9BQU8xRixHQUFHLFFBQVMvUCxJQUMzQixHQUFpQixVQUFiNHhCLEdBQzZCLDZCQUEzQjV4QixFQUFLM0YsV0FBVzgzQixPQUtsQixPQUpBcjVCLEVBQUkrYixLQUFLMUMsR0FBYzRFLGFBQWMsQ0FDbkNqQyxNQUFPLGtDQUNQQyxLQUFNLGdGQUVEdlYsRUFBTyxJQUFJc1UsTUFBTSxnRkFHNUIsTUFBTXNlLEVBQVVweUIsRUFBSzNGLFdBQVc4M0IsT0FJaEMsSUFBSUUsR0FBMkIsRUFXL0IsR0FSSWgzQixFQUFLQyxTQUFTODJCLEtBQWEvMkIsRUFBS0MsU0FBU28yQixJQUd2Q3R3QixFQUFHQyxXQUFXK3dCLEtBQ2hCQyxHQUEyQixHQUlmLGFBQVpELElBQTJCaHhCLEVBQUdDLFdBQVcrd0IsR0FDM0MsT0FBTzV5QixFQUFPLElBQUlzVSxNQUFNLGNBQWNzZSxNQUd4Qzd5QixFQUFRLENBQ042eUIsUUFBQUEsRUFDQUMseUJBQUFBLFdDekhSLE1BQU1DLEdBR0ovaEIsWUFBWXpYLEdBSVYsR0FIQTBYLEtBQUsxWCxJQUFNQSxFQUNYMFgsS0FBSytoQixHQUFLLElBQUlDLEdBQVVoaUIsS0FBSzFYLElBQUk0aEIsYUFFNUJsSyxLQUFLK2hCLEdBQUd6aEIsSUFBSSxVQUNmLElBQ0VOLEtBQUsraEIsR0FBR3hoQixJQUFJLFNBQVUsQ0FDcEJwRSxTQUFVLE9BQ1YyZ0IsUUFBUyxPQUNUcmlCLEtBQU0sQ0FDSjJULE1BQU8sTUFHWCxNQUFPMWxCLEdBRVAsTUFEQXNYLEtBQUsxWCxJQUFJSyxJQUFJQyxNQUFNRixHQUNiQSxFQUdWLElBQUtzWCxLQUFLK2hCLEdBQUd6aEIsSUFBSSxnQkFDZixJQUNFTixLQUFLK2hCLEdBQUd4aEIsSUFBSSxlQUFnQixJQUM1QixNQUFPN1gsR0FFUCxNQURBc1gsS0FBSzFYLElBQUlLLElBQUlDLE1BQU1GLEdBQ2JBLEdBS1p1NUIsS0FBS0MsR0FDSCxPQUFPbGlCLEtBQUsraEIsR0FBR0UsS0FBS0MsR0FHdEJweUIsSUFBSWxELEVBQWMsSUFFaEIsT0FEQW9ULEtBQUtpaUIsTUFBSyxHQUNIamlCLEtBQUsraEIsR0FBR2p5QixJQUFJbEQsR0FHckIyVCxJQUFJM1QsRUFBYTJPLEdBQ2Z5RSxLQUFLaWlCLE1BQUssR0FDVmppQixLQUFLK2hCLEdBQUd4aEIsSUFBSTNULEVBQUsyTyxHQUduQitFLElBQUkxVCxHQUVGLE9BREFvVCxLQUFLaWlCLE1BQUssR0FDSGppQixLQUFLK2hCLEdBQUd6aEIsSUFBSTFULEdBR3JCdTFCLE1BQU12MUIsRUFBYTJPLEdBRWpCLE9BREF5RSxLQUFLaWlCLE1BQUssR0FDSGppQixLQUFLK2hCLEdBQUdJLE1BQU12MUIsRUFBSzJPLEdBRzVCRixXQUFXdFMsR0FDVDhDLE9BQU9DLEtBQUsvQyxHQUFRdVQsU0FBU2pNLElBQzNCMlAsS0FBS08sSUFBSWxRLEVBQU10SCxFQUFPc0gsT0FJMUJzVyxhQUFhNWQsR0FDWDhDLE9BQU9DLEtBQUsvQyxHQUFRdVQsU0FBU2pNLElBQzNCMlAsS0FBS21pQixNQUFNOXhCLEVBQU10SCxFQUFPc0gsUUNsRXZCLE1DWUQreEIsR0FBcUQsQ0FDekQsUURibUIsQ0FDbkJDLGNBQWUsT0FDZkMsZUFBZ0IsZUFDaEJDLDJCQUE0QixlQUM1QkMscUJBQXNCLCtCQUN0QkMsYUFBYyxZQUNkQyxZQUFhLE9BR2JDLFlBQWEsUUFDYkMsa0JBQW1CLFVBQ25CQywwQkFBMkIsV0FDM0JDLDBCQUEyQixTQUMzQkMsa0NBQW1DLGNBR25DQyxhQUFjLE9BQ2RDLGtCQUFtQixPQUNuQkMsMEJBQTJCLHdCQUMzQkMsdUJBQXdCLFVBQ3hCQywrQkFBZ0Msc0JBQ2hDQyxxQkFBc0IsU0FDdEJDLDZCQUE4QixXQUc5QkMsbUJBQW9CLFFBQ3BCQyxpQkFBa0IsUUFDbEJDLHlCQUEwQiwrQkFDMUJDLG1CQUFvQixVQUNwQkMsMkJBQTRCLHVCQUM1QkMsc0JBQXVCLFFBQ3ZCQyw4QkFBK0Isb0JBQy9CQyxzQkFBdUIsT0FDdkJDLDhCQUErQixRQUMvQkMseUJBQTBCLFNBQzFCQyxpQ0FBa0MsV0FDbENDLHNCQUF1QixTQUN2QkMsOEJBQStCLFdBQy9CQyx1QkFBd0IsVUFDeEJDLCtCQUFnQyxzQkFHaENDLGdCQUFpQixTQUNqQkMsNEJBQTZCLGdCQUM3QkMsZ0NBQWlDLG9CQUNqQ0MsdUJBQXdCLFdBQ3hCQyxxQkFBc0IsU0FDdEJDLHFCQUFzQixTQUN0QkMsMEJBQTJCLFVBQzNCQyx3QkFBeUIsU0FDekJDLDZCQUE4QixvQkFDOUJDLDZCQUE4QixXQUM5QkMsZ0NBQWlDLHdCQUNqQ0Msa0NBQW1DLHNCQUduQ0Msb0JBQXFCLFNBQ3JCQyw0QkFBNkIsUUFDN0JDLDZCQUE4QixhQUM5QkMsOEJBQStCLGNBQy9CQywwQkFBMkIsVUFDM0JDLDJCQUE0QixXQUM1QkMseUJBQTBCLFNBQzFCQyw2QkFBOEIsUUFDOUJDLHlCQUEwQixTQUMxQkMsNEJBQTZCLFNBQzdCQyw4QkFBK0IsVUFDL0JDLGtDQUFtQyxnQkFDbkNDLGlDQUFrQyxnQkFDbENDLGlDQUFrQyxXQUNsQ0Msc0NBQXVDLHNCQUN2Q0Msb0NBQXFDLGlCQUNyQ0MscUNBQXNDLDJDQUN0Q0MseUJBQTBCLE9BQzFCQyw2QkFDRSwyRUFDRkMsaUNBQWtDLEtBQ2xDQyxnQ0FBaUMsS0FHakNDLGNBQWUsU0FDZkMsb0JBQXFCLFVBQ3JCQyxtQkFBb0IsUUFDcEJDLG1CQUFvQixTQUNwQkMscUJBQXNCLFFBQ3RCQyx3QkFBeUIsVUFDekJDLDJCQUE0QixtQkFDNUJDLDZCQUE4QixVQUM5QkMsMkJBQTRCLFdBQzVCQyxnQ0FBaUMsc0JBR2pDQyxhQUFjLE1BQ2RDLHVCQUF3QixjQUN4QkMsdUJBQXdCLGNBQ3hCQyxvQkFBcUIsV0FDckJDLGtCQUFtQixTQUNuQkMsaUJBQWtCLFNBQ2xCQyxxQkFBc0IsU0FDdEJDLGtCQUFtQixTQUNuQkMsMEJBQTJCLFdBQzNCQywwQkFBMkIsUUFDM0JDLDZCQUE4QixnQkFDOUJDLHlCQUEwQixxQ0FDMUJDLGlCQUFrQixZQUVsQkMsYUFBYyxRQUNkQyxzQkFBdUIsYUFDdkJDLHNCQUF1QixRQUN2QkMsMEJBQTJCLGdCQUMzQkMsbUJBQW9CLFFBQ3BCQyxtQkFBb0IsT0FDcEJDLDhCQUErQixVQUMvQkMsOEJBQStCLGFBQy9CQyxrQ0FBbUMsYUFDbkNDLDJCQUE0QixVQUM1QkMsMkJBQTRCLDJCQUc1QkMsYUFBYyxNQUNkQyxvQkFBcUIsV0FDckJDLHNCQUF1QixRQUN2QkMsc0JBQXVCLFVBQ3ZCQyxrQkFBbUIsU0FDbkJDLGlCQUFrQixTQUNsQkMscUJBQXNCLFNBQ3RCQyxzQkFBdUIsY0FDdkJDLDhCQUErQixhQUMvQkMseUJBQTBCLFlBQzFCQyw4QkFBK0IsUUFDL0JDLDhCQUErQixVQUMvQkMseUJBQTBCLCtCQUMxQkMsNkJBQThCLGNBQzlCQywwQkFBMkIsV0FDM0JDLDhCQUErQiw4QkFHL0JDLG1CQUFvQixTQUNwQkMsd0JBQXlCLFNBQ3pCQyw4QkFBK0IsUUFDL0JDLDRCQUE2QixRQUM3QkMsNEJBQTZCLE9BQzdCQyx3QkFBeUIsU0FDekJDLGdDQUFpQyxTQUNqQ0MsNkJBQThCLFVBQzlCQyw0QkFBNkIsU0FDN0JDLDJCQUE0QixTQUM1QkMsZ0NBQWlDLGdDQUNqQ0Msc0NBQXVDLGFBQ3ZDQyxvQ0FBcUMsUUFDckNDLG9DQUFxQyxPQUNyQ0MsZ0NBQWlDLFdBQ2pDQyx3Q0FBeUMsVUFDekNDLHFDQUFzQyxzQkFDdENDLG1DQUFvQyxpQkFHcENDLGlCQUFrQixTQUNsQkMsc0JBQXVCLE9BQ3ZCQyxzQkFBdUIsT0FDdkJDLDBCQUEyQixRQUMzQkMsMEJBQTJCLE9BQzNCQyw0QkFBNkIsT0FDN0JDLHVDQUF3QyxTQUN4Q0MsNEJBQTZCLFNBQzdCQywyQkFBNEIsVUFDNUJDLDhCQUErQixTQUMvQkMsMkJBQTRCLFdBQzVCQywyQkFBNEIsU0FDNUJDLDBCQUEyQixVQUMzQkMsOEJBQStCLGFBQy9CQyw4QkFBK0IsT0FDL0JDLG9DQUFxQyw0QkFDckNDLCtDQUFnRCxTQUNoREMsb0NBQXFDLFdBQ3JDQyxtQ0FBb0Msc0JBQ3BDQyxzQ0FBdUMsVUFDdkNDLG1DQUFvQyxjQUNwQ0MsbUNBQW9DLFVBQ3BDQyxrQ0FBbUMsVUFHbkNDLGVBQWdCLFVBQ2hCQyxvQkFBcUIsT0FDckJDLG9CQUFxQixPQUNyQkMsc0JBQXVCLE9BQ3ZCQywwQkFBMkIsUUFDM0JDLG1CQUFvQixVQUdwQkMsa0JBQW1CLE9BQ25CQyxvQkFBcUIsT0FDckJDLDRCQUE2QixPQUM3QkMsaUJBQWtCLE9BQ2xCQyx5QkFBMEIseUJBQzFCQyxrQkFBbUIsVUFDbkJDLDBCQUEyQixnQkFDM0JDLHdCQUF5QixTQUN6QkMsZ0NBQWlDLE9BQ2pDQyxxQkFBc0IsU0FDdEJDLDZCQUE4QixZQUM5QkMsdUJBQXdCLE9BQ3hCQywrQkFBZ0MsWUFHaENDLGtCQUFtQixTQUNuQkMsOEJBQStCLGdCQUMvQkMsbUNBQW9DLG9CQUNwQ0MseUJBQTBCLFdBQzFCQyx5QkFBMEIsV0FDMUJDLDZCQUE4QixTQUM5QkMsMkJBQTRCLFVBQzVCQyx3QkFBeUIsT0FDekJDLDRCQUE2QixVQUM3QkMsa0NBQW1DLHFCQUNuQ0MscUNBQXNDLGNBQ3RDQyxzQkFBdUIsY0FDdkJDLDJDQUE0QyxtREFDNUNDLHNDQUF1Qyx1QkFDdkNDLDJDQUE0QyxnQkFDNUNDLGlDQUFrQyxVQUNsQ0MsaUNBQWtDLGVBQ2xDQyxxQ0FBc0MscUJBQ3RDQyxtQ0FBb0Msd0NBQ3BDQyxnQ0FBaUMsMkJBQ2pDQyxvQ0FBcUMsc0JBQ3JDQywwQ0FBMkMsUUFDM0NDLDZDQUE4QyxRQUM5Q0MsOEJBQStCLGlCQUMvQkMsbURBQW9ELFFBRXBEQyxrQkFBbUIsT0FDbkJDLGlDQUFrQyxTQUNsQ0MseUNBQTBDLFlBQzFDQyxnQ0FBaUMsU0FDakNDLHdDQUF5QyxVQUN6Q0Msd0NBQXlDLFNBQ3pDQyxnREFBaUQsWUFDakRDLGtDQUFtQyxTQUNuQ0MsMENBQTJDLFFBQzNDQyxnQ0FBaUMsU0FDakNDLHdDQUF5QyxVQUN6Q0Msd0NBQXlDLGFBQ3pDQyw0Q0FBNkMsY0FDN0NDLHFDQUFzQyxlQUN0Q0MsNkNBQThDLFlBQzlDQyxxQ0FBc0MsV0FDdENDLDZDQUE4QyxZQUM5Q0MscUNBQXNDLFdBQ3RDQyw2Q0FBOEMsWUFDOUNDLG9DQUFxQyxTQUNyQ0MsNENBQTZDLFVBRTdDQyxlQUFnQixRQUNoQkMsc0JBQXVCLFVBQ3ZCQyxzQkFBdUIsVUFFdkJDLGlCQUFrQixPQUNsQkMseUJBQTBCLFNBQzFCQyxpQ0FBa0MsY0FDbENDLDJCQUE0QixXQUM1QkMsbUNBQW9DLFVBQ3BDQywrQkFBZ0MsU0FDaENDLHVDQUF3QyxVQUN4Q0MsMEJBQTJCLFdBQzNCQyxrQ0FBbUMsVUFDbkNDLDZCQUE4QixTQUM5QkMscUNBQXNDLFFBQ3RDQyw4QkFBK0IsU0FDL0JDLHNDQUF1QyxRQUN2Q0MsbUNBQW9DLGFBQ3BDQywyQ0FBNEMsY0FDNUNDLHdCQUF5QixXQUN6QkMsd0JBQXlCLFdBQ3pCQywrQkFBZ0MsVUFDaENDLHVDQUF3QyxRQUN4Q0Msc0NBQXVDLFdBQ3ZDQywwQkFBMkIsV0FDM0JDLGtDQUFtQyxVQUNuQ0MsOEJBQStCLFNBQy9CQyxzQ0FBdUMsYUFDdkNDLDhCQUErQixhQUMvQkMsc0NBQXVDLGdCQUd2Q0Msc0NBQXVDLFNBQ3ZDQyxxQ0FBc0MsU0FDdENDLDRDQUE2QyxzQ0FDN0NDLDBDQUEyQyx5QkFDM0NDLHdDQUF5QyxTQUN6Q0MsdUNBQXdDLFNBQ3hDQyw4Q0FBK0Msc0NBQy9DQyw2Q0FBOEMsa0JBQzlDQyxxQ0FBc0MsU0FDdENDLG9DQUFxQyxTQUNyQ0MsMkNBQTRDLHNDQUM1Q0MsMENBQTJDLG1CQzFSM0MsUUNaNkIsQ0FDN0J0USxjQUFlLE9BQ2ZDLGVBQWdCLGNBQ2hCQywyQkFBNEIsYUFDNUJDLHFCQUFzQiwrQkFDdEJDLGFBQWMsWUFDZEMsWUFBYSxPQUdiQyxZQUFhLFFBQ2JDLGtCQUFtQixVQUNuQkMsMEJBQTJCLFdBQzNCQywwQkFBMkIsU0FDM0JDLGtDQUFtQyxjQUduQ0MsYUFBYyxLQUNkQyxrQkFBbUIsU0FDbkJDLDBCQUEyQix3QkFDM0JDLHVCQUF3QixTQUN4QkMsK0JBQWdDLHNCQUNoQ0MscUJBQXNCLFNBQ3RCQyw2QkFBOEIsWUFHOUJDLG1CQUFvQixRQUNwQkMsaUJBQWtCLFFBQ2xCQyx5QkFBMEIsK0JBQzFCQyxtQkFBb0IsVUFDcEJDLDJCQUE0Qix1QkFDNUJDLHNCQUF1QixRQUN2QkMsOEJBQStCLG9CQUMvQkMsc0JBQXVCLE9BQ3ZCQyw4QkFBK0IsUUFDL0JDLHlCQUEwQixTQUMxQkMsaUNBQWtDLFdBQ2xDQyxzQkFBdUIsU0FDdkJDLDhCQUErQixZQUMvQkMsdUJBQXdCLFNBQ3hCQywrQkFBZ0Msc0JBR2hDQyxnQkFBaUIsU0FDakJDLDRCQUE2QixnQkFDN0JDLGdDQUFpQyxvQkFDakNDLHVCQUF3QixXQUN4QkMscUJBQXNCLFNBQ3RCQyxxQkFBc0IsU0FDdEJDLDBCQUEyQixTQUMzQkMsd0JBQXlCLFNBQ3pCQyw2QkFBOEIsb0JBQzlCQyw2QkFBOEIsV0FDOUJDLGdDQUFpQyx3QkFDakNDLGtDQUFtQyxzQkFHbkNDLG9CQUFxQixTQUNyQkMsNEJBQTZCLFFBQzdCQyw2QkFBOEIsYUFDOUJDLDhCQUErQixjQUMvQkMsMEJBQTJCLFVBQzNCQywyQkFBNEIsV0FDNUJDLHlCQUEwQixTQUMxQkMsNkJBQThCLFFBQzlCQyx5QkFBMEIsU0FDMUJDLDRCQUE2QixTQUM3QkMsOEJBQStCLFNBQy9CQyxrQ0FBbUMsZ0JBQ25DQyxpQ0FBa0MsZ0JBQ2xDQyxpQ0FBa0MsV0FDbENDLHNDQUF1QyxzQkFDdkNDLG9DQUFxQyxpQkFDckNDLHFDQUFzQywyQ0FDdENDLHlCQUEwQixPQUMxQkcsZ0NBQWlDLEtBQ2pDRCxpQ0FBa0MsS0FDbENELDZCQUNFLDJFQUdGRyxjQUFlLFNBQ2ZDLG9CQUFxQixVQUNyQkMsbUJBQW9CLFNBQ3BCQyxtQkFBb0IsU0FDcEJDLHFCQUFzQixTQUN0QkMsd0JBQXlCLFNBQ3pCQywyQkFBNEIsbUJBQzVCQyw2QkFBOEIsVUFDOUJDLDJCQUE0QixXQUM1QkMsZ0NBQWlDLHNCQUdqQ0MsYUFBYyxNQUNkQyx1QkFBd0IsY0FDeEJDLHVCQUF3QixjQUN4QkMsb0JBQXFCLFdBQ3JCQyxrQkFBbUIsU0FDbkJDLGlCQUFrQixTQUNsQkMscUJBQXNCLFNBQ3RCQyxrQkFBbUIsU0FDbkJDLDBCQUEyQixXQUMzQkMsMEJBQTJCLFFBQzNCQyw2QkFBOEIsZ0JBQzlCQyx5QkFBMEIscUNBQzFCQyxpQkFBa0IsWUFFbEJDLGFBQWMsUUFDZEMsc0JBQXVCLGFBQ3ZCQyxzQkFBdUIsUUFDdkJDLDBCQUEyQixnQkFDM0JDLG1CQUFvQixRQUNwQkMsbUJBQW9CLFVBQ3BCQyw4QkFBK0IsVUFDL0JDLDhCQUErQixhQUMvQkMsa0NBQW1DLGFBQ25DQywyQkFBNEIsVUFDNUJDLDJCQUE0QiwyQkFHNUJDLGFBQWMsTUFDZEMsb0JBQXFCLFdBQ3JCTSxzQkFBdUIsUUFDdkJMLHNCQUF1QixRQUN2QkMsc0JBQXVCLFVBQ3ZCQyxrQkFBbUIsU0FDbkJDLGlCQUFrQixTQUNsQkMscUJBQXNCLFNBQ3RCRSw4QkFBK0IsYUFDL0JDLHlCQUEwQixZQUMxQkMsOEJBQStCLFFBQy9CQyw4QkFBK0IsVUFDL0JDLHlCQUEwQiwrQkFDMUJDLDZCQUE4QixjQUM5QkMsMEJBQTJCLFdBQzNCQyw4QkFBK0IsOEJBRy9CQyxtQkFBb0IsU0FDcEJDLHdCQUF5QixVQUN6QkMsOEJBQStCLGFBQy9CQyw0QkFBNkIsUUFDN0JDLDRCQUE2QixPQUM3QkMsd0JBQXlCLFNBQ3pCRSw2QkFBOEIsU0FDOUJDLDRCQUE2QixTQUM3QkMsMkJBQTRCLFNBQzVCSCxnQ0FBaUMsU0FDakNJLGdDQUFpQyxnQ0FDakNDLHNDQUF1QyxhQUN2Q0Msb0NBQXFDLFFBQ3JDQyxvQ0FBcUMsU0FDckNDLGdDQUFpQyxXQUNqQ0Msd0NBQXlDLFVBQ3pDQyxxQ0FBc0Msc0JBQ3RDQyxtQ0FBb0MsZ0JBR3BDQyxpQkFBa0IsU0FDbEJDLHNCQUF1QixPQUN2QkMsc0JBQXVCLE9BQ3ZCQywwQkFBMkIsUUFDM0JDLDBCQUEyQixPQUMzQkMsNEJBQTZCLE9BQzdCQyx1Q0FBd0MsU0FDeENDLDRCQUE2QixTQUM3QkMsMkJBQTRCLFNBQzVCQyw4QkFBK0IsU0FDL0JDLDJCQUE0QixXQUM1QkMsMkJBQTRCLFNBQzVCQywwQkFBMkIsVUFDM0JDLDhCQUErQixhQUMvQkMsOEJBQStCLE9BQy9CQyxvQ0FBcUMsNEJBQ3JDQywrQ0FBZ0QsU0FDaERDLG9DQUFxQyxXQUNyQ0MsbUNBQW9DLHNCQUNwQ0Msc0NBQXVDLFVBQ3ZDQyxtQ0FBb0MsY0FDcENDLG1DQUFvQyxVQUNwQ0Msa0NBQW1DLFVBR25DQyxlQUFnQixVQUNoQkMsb0JBQXFCLE9BQ3JCQyxvQkFBcUIsT0FDckJDLHNCQUF1QixPQUN2QkMsMEJBQTJCLFFBQzNCQyxtQkFBb0IsVUFHcEJDLGtCQUFtQixPQUNuQkMsb0JBQXFCLE9BQ3JCQyw0QkFBNkIsUUFDN0JDLGlCQUFrQixPQUNsQkMseUJBQTBCLHlCQUMxQkMsa0JBQW1CLFVBQ25CQywwQkFBMkIsV0FDM0JDLHdCQUF5QixTQUN6QkMsZ0NBQWlDLE1BQ2pDQyxxQkFBc0IsU0FDdEJDLDZCQUE4QixNQUM5QkMsdUJBQXdCLFNBQ3hCQywrQkFBZ0MsVUFHaENDLGtCQUFtQixTQUNuQkMsOEJBQStCLGdCQUMvQkMsbUNBQW9DLG9CQUNwQ0MseUJBQTBCLFdBQzFCQyx5QkFBMEIsV0FDMUJDLDZCQUE4QixTQUM5QkMsMkJBQTRCLFVBQzVCQyx3QkFBeUIsT0FDekJDLDRCQUE2QixVQUM3QkMsa0NBQW1DLHVCQUNuQ0MscUNBQXNDLDBCQUN0Q0Msc0JBQXVCLFFBQ3ZCQywyQ0FBNEMsbURBQzVDQyxzQ0FBdUMsdUJBQ3ZDQywyQ0FBNEMsZ0JBQzVDQyxpQ0FBa0MscUJBQ2xDQyxpQ0FBa0MsZUFDbENDLHFDQUFzQyxXQUN0Q0MsbUNBQW9DLHdDQUNwQ0MsZ0NBQWlDLDJCQUNqQ0Msb0NBQXFDLHNCQUNyQ0MsMENBQTJDLFFBQzNDQyw2Q0FBOEMsUUFDOUNDLDhCQUErQixpQkFDL0JDLG1EQUFvRCxRQUVwREMsa0JBQW1CLE9BQ25CQyxpQ0FBa0MsU0FDbENDLHlDQUEwQyxZQUMxQ0MsZ0NBQWlDLFNBQ2pDQyx3Q0FBeUMsVUFDekNDLHdDQUF5QyxTQUN6Q0MsZ0RBQWlELFlBQ2pEQyxrQ0FBbUMsU0FDbkNDLDBDQUEyQyxRQUMzQ0MsZ0NBQWlDLFNBQ2pDQyx3Q0FBeUMsVUFDekNDLHdDQUF5QyxTQUN6Q0MsNENBQTZDLGNBQzdDQyxxQ0FBc0MsV0FDdENDLDZDQUE4QyxZQUM5Q0MscUNBQXNDLFdBQ3RDQyw2Q0FBOEMsWUFDOUNDLHFDQUFzQyxXQUN0Q0MsNkNBQThDLFlBQzlDQyxvQ0FBcUMsU0FDckNDLDRDQUE2QyxVQUU3Q0MsZUFBZ0IsUUFDaEJDLHNCQUF1QixVQUN2QkMsc0JBQXVCLFVBRXZCQyxpQkFBa0IsU0FDbEJDLHlCQUEwQixTQUMxQkMsaUNBQWtDLGNBQ2xDQywyQkFBNEIsV0FDNUJDLG1DQUFvQyxVQUNwQ0MsK0JBQWdDLFNBQ2hDQyx1Q0FBd0MsVUFDeENDLDBCQUEyQixXQUMzQkMsa0NBQW1DLFVBQ25DQyw2QkFBOEIsU0FDOUJDLHFDQUFzQyxRQUN0Q0MsOEJBQStCLFNBQy9CQyxzQ0FBdUMsUUFDdkNDLG1DQUFvQyxhQUNwQ0MsMkNBQTRDLGNBQzVDQyx3QkFBeUIsV0FDekJDLHdCQUF5QixXQUN6QkMsK0JBQWdDLFVBQ2hDQyx1Q0FBd0MsUUFDeENDLHNDQUF1QyxXQUN2Q0MsMEJBQTJCLFdBQzNCQyxrQ0FBbUMsVUFDbkNDLDhCQUErQixTQUMvQkMsc0NBQXVDLGFBQ3ZDQyw4QkFBK0IsYUFDL0JDLHNDQUF1QyxnQkFHdkNDLHNDQUF1QyxTQUN2Q0MscUNBQXNDLFNBQ3RDQyw0Q0FBNkMsc0NBQzdDQywwQ0FBMkMsNEJBQzNDQyx3Q0FBeUMsU0FDekNDLHVDQUF3QyxTQUN4Q0MsOENBQStDLHNDQUMvQ0MsNkNBQThDLG9CQUM5Q0MscUNBQXNDLFNBQ3RDQyxvQ0FBcUMsU0FDckNDLDJDQUE0QyxzQ0FDNUNDLDBDQUEyQyxxQkQzUjNDQyxHRWIwQixDQUMxQnZRLGNBQWUsZ0JBQ2ZDLGVBQWdCLDZCQUNoQkMsMkJBQTRCLHlDQUM1QkMscUJBQXNCLHVGQUN0QkMsYUFBYyx1Q0FDZEMsWUFBYSx3QkFHYkMsWUFBYSxRQUNiQyxrQkFBbUIsWUFDbkJDLDBCQUEyQix5QkFDM0JDLDBCQUEyQiwyQkFDM0JDLGtDQUFtQyxlQUduQ0MsYUFBYyxRQUNkQyxrQkFBbUIsV0FDbkJDLDBCQUEyQiw0QkFDM0JDLHVCQUF3QixpQkFDeEJDLCtCQUFnQyx1QkFDaENDLHFCQUFzQixlQUN0QkMsNkJBQThCLDRCQUc5QkMsbUJBQW9CLFFBQ3BCQyxpQkFBa0IsVUFDbEJDLHlCQUEwQixnQ0FDMUJDLG1CQUFvQixZQUNwQkMsMkJBQTRCLDBFQUM1QkMsc0JBQXVCLGVBQ3ZCQyw4QkFBK0IsNkVBQy9CQyxzQkFBdUIsZUFDdkJDLDhCQUErQiw0QkFDL0JDLHlCQUEwQixrQkFDMUJDLGlDQUFrQyxhQUNsQ0Msc0JBQXVCLGVBQ3ZCQyw4QkFBK0IsNEJBQy9CQyx1QkFBd0IsaUJBQ3hCQywrQkFBZ0MsdUJBR2hDQyxnQkFBaUIsWUFDakJDLDRCQUE2QixrQkFDN0JDLGdDQUFpQyxzQkFDakNDLHVCQUF3QixhQUN4QkMscUJBQXNCLFdBQ3RCQyxxQkFBc0IsV0FDdEJDLDBCQUEyQixpQkFDM0JDLHdCQUF5QixpQkFDekJDLDZCQUE4QixxQkFDOUJDLDZCQUE4QixZQUM5QkMsZ0NBQWlDLHlCQUNqQ0Msa0NBQW1DLHVCQUduQ0Msb0JBQXFCLGdCQUNyQkMsNEJBQTZCLHFCQUM3QkMsNkJBQThCLGVBQzlCQyw4QkFBK0IsZ0JBQy9CQywwQkFBMkIsWUFDM0JDLDJCQUE0QixhQUM1QkMseUJBQTBCLFdBQzFCQyw2QkFBOEIsZUFDOUJDLHlCQUEwQixXQUMxQkMsNEJBQTZCLGlCQUM3QkMsOEJBQStCLGlCQUMvQkMsa0NBQW1DLGlCQUNuQ0MsaUNBQWtDLGlCQUNsQ0MsaUNBQWtDLFlBQ2xDQyxzQ0FBdUMsc0JBQ3ZDQyxvQ0FBcUMsa0JBQ3JDQyxxQ0FBc0MsNENBQ3RDQyx5QkFBMEIsZ0JBQzFCQyw2QkFDRSw0SUFDRkMsaUNBQWtDLE9BQ2xDQyxnQ0FBaUMsUUFFakNDLGNBQWUsU0FDZkMsb0JBQXFCLFlBQ3JCQyxtQkFBb0IsZ0JBQ3BCQyxtQkFBb0IsV0FDcEJDLHFCQUFzQixhQUN0QkMsd0JBQXlCLGlCQUN6QkMsMkJBQTRCLG9CQUM1QkMsNkJBQThCLFdBQzlCQywyQkFBNEIsWUFDNUJDLGdDQUFpQyx1QkFHakNDLGFBQWMsUUFDZEMsdUJBQXdCLGdCQUN4QkMsdUJBQXdCLGdCQUN4QkMsb0JBQXFCLGFBQ3JCQyxrQkFBbUIsV0FDbkJDLGlCQUFrQixVQUNsQkMscUJBQXNCLGlCQUN0QkMsa0JBQW1CLFdBQ25CQywwQkFBMkIsWUFDM0JDLDBCQUEyQixTQUMzQkMsNkJBQThCLGlCQUM5QkMseUJBQTBCLHNDQUcxQkMsaUJBQWtCLFlBR2xCQyxhQUFjLFFBQ2RDLHNCQUF1QixlQUN2QkMsc0JBQXVCLGVBQ3ZCQywwQkFBMkIsbUJBQzNCQyxtQkFBb0IsaUJBQ3BCQyxtQkFBb0IsWUFDcEJDLDhCQUErQiwrQ0FDL0JDLDhCQUErQixpREFDL0JDLGtDQUFtQyxpREFDbkNDLDJCQUE0QixXQUM1QkMsMkJBQTRCLDRCQUc1QkMsYUFBYyxRQUNkQyxvQkFBcUIsYUFDckJNLHNCQUF1QixlQUN2Qkwsc0JBQXVCLGVBQ3ZCQyxzQkFBdUIsd0JBQ3ZCQyxrQkFBbUIsV0FDbkJDLGlCQUFrQixVQUNsQkMscUJBQXNCLGlCQUN0QkUsOEJBQStCLHVCQUMvQkMseUJBQTBCLDJCQUMxQkMsOEJBQStCLFNBQy9CQyw4QkFBK0Isb0NBQy9CQyx5QkFBMEIsZ0NBQzFCQyw2QkFBOEIsZUFDOUJDLDBCQUEyQixZQUMzQkMsOEJBQStCLCtCQUcvQkMsbUJBQW9CLFNBQ3BCQyx3QkFBeUIsV0FDekJDLDhCQUErQixlQUMvQkMsNEJBQTZCLGVBQzdCQyw0QkFBNkIsZUFDN0JDLHdCQUF5QixXQUN6QkMsZ0NBQWlDLG1CQUNqQ0MsNkJBQThCLGlCQUM5QkMsNEJBQTZCLGdCQUM3QkMsMkJBQTRCLGlCQUM1QkMsZ0NBQWlDLGlDQUNqQ0Msc0NBQXVDLGVBQ3ZDQyxvQ0FBcUMsU0FDckNDLG9DQUFxQywyQkFDckNDLGdDQUFpQyxZQUNqQ0Msd0NBQXlDLHdDQUN6Q0MscUNBQXNDLHVCQUN0Q0MsbUNBQW9DLGlCQUdwQ0MsaUJBQWtCLGVBQ2xCQyxzQkFBdUIsV0FDdkJDLHNCQUF1QixXQUN2QkMsMEJBQTJCLGVBQzNCQywwQkFBMkIsZUFDM0JDLDRCQUE2QixrQkFDN0JDLHVDQUF3Qyw2QkFDeENDLDRCQUE2QixrQkFDN0JDLDJCQUE0QixpQkFDNUJDLDhCQUErQixtQkFDL0JDLDJCQUE0QixzQkFDNUJDLDJCQUE0QixnQkFDNUJDLDBCQUEyQixxQkFDM0JDLDhCQUErQixjQUMvQkMsOEJBQStCLGFBQy9CQyxvQ0FBcUMsNkJBQ3JDQywrQ0FBZ0QseUNBQ2hEQyxvQ0FBcUMsWUFDckNDLG1DQUFvQyx1QkFDcENDLHNDQUF1Qyx3Q0FDdkNDLG1DQUFvQyxlQUNwQ0MsbUNBQW9DLFdBQ3BDQyxrQ0FBbUMsV0FHbkNDLGVBQWdCLFVBQ2hCQyxvQkFBcUIsV0FDckJDLG9CQUFxQixXQUNyQkMsc0JBQXVCLGFBQ3ZCQywwQkFBMkIsa0JBQzNCQyxtQkFBb0IsVUFHcEJDLGtCQUFtQixPQUNuQkMsb0JBQXFCLGNBQ3JCQyw0QkFBNkIsU0FDN0JDLGlCQUFrQixXQUNsQkMseUJBQTBCLHNCQUMxQkMsa0JBQW1CLFlBQ25CQywwQkFBMkIsVUFDM0JDLHdCQUF5QixrQkFDekJDLGdDQUFpQyxRQUNqQ0MscUJBQXNCLGVBQ3RCQyw2QkFBOEIsd0JBQzlCQyx1QkFBd0IsZ0JBQ3hCQywrQkFBZ0MsYUFHaENDLGtCQUFtQixTQUNuQkMsOEJBQStCLGtCQUMvQkMsbUNBQW9DLHNCQUNwQ0MseUJBQTBCLGFBQzFCQyx5QkFBMEIsYUFDMUJDLDZCQUE4QixrQkFDOUJDLDJCQUE0QixlQUM1QkMsd0JBQXlCLFlBQ3pCQyw0QkFBNkIsaUJBQzdCQyxrQ0FBbUMsc0JBQ25DQyxxQ0FBc0MseUJBQ3RDQyxzQkFBdUIsVUFDdkJDLDJDQUNFLG9GQUNGQyxzQ0FBdUMsVUFDdkNDLDJDQUE0QyxVQUM1Q0MsaUNBQWtDLFdBQ2xDQyxpQ0FBa0MsZ0JBQ2xDQyxxQ0FBc0Msc0JBQ3RDQyxtQ0FBb0MseUNBQ3BDQyxnQ0FBaUMsNEJBQ2pDQyxvQ0FBcUMsdUJBQ3JDQywwQ0FBMkMsNENBQzNDQyw2Q0FBOEMsdUVBQzlDQyw4QkFBK0Isa0JBQy9CQyxtREFBb0QsMkNBRXBEc0IsZUFBZ0Isa0JBQ2hCQyxzQkFBdUIsb0JBQ3ZCQyxzQkFBdUIsZ0JBRXZCdkIsa0JBQW1CLHFCQUNuQkMsaUNBQWtDLDJCQUNsQ0MseUNBQTBDLG9DQUMxQ0MsZ0NBQWlDLHFCQUNqQ0Msd0NBQXlDLCtCQUN6Q0Msd0NBQXlDLHVDQUN6Q0MsZ0RBQWlELGdEQUNqREMsa0NBQW1DLHNCQUNuQ0MsMENBQTJDLHdCQUMzQ0MsZ0NBQWlDLHFCQUNqQ0Msd0NBQXlDLDhCQUN6Q0Msd0NBQXlDLHFCQUN6Q0MsNENBQTZDLDRDQUM3Q0MscUNBQXNDLDhDQUN0Q0MsNkNBQThDLG9DQUM5Q0MscUNBQXNDLDJCQUN0Q0MsNkNBQThDLG1DQUM5Q0MscUNBQXNDLDJCQUN0Q0MsNkNBQThDLHdDQUM5Q0Msb0NBQXFDLHlCQUNyQ0MsNENBQTZDLG1DQUU3Q0ksaUJBQWtCLHNCQUNsQkMseUJBQTBCLG9CQUMxQkMsaUNBQWtDLHdDQUNsQ0MsMkJBQTRCLHVDQUM1QkMsbUNBQW9DLDRDQUNwQ0MsK0JBQWdDLHdCQUNoQ0MsdUNBQXdDLGtDQUN4Q0MsMEJBQTJCLDhCQUMzQkMsa0NBQW1DLHlDQUNuQ0MsNkJBQThCLHFCQUM5QkMscUNBQXNDLHdCQUN0Q0MsOEJBQStCLHNCQUMvQkMsc0NBQXVDLHdCQUN2Q0MsbUNBQW9DLDRDQUNwQ0MsMkNBQTRDLGlEQUM1Q0Msd0JBQXlCLHVDQUN6QkMsd0JBQXlCLHlDQUN6QkMsK0JBQWdDLDBCQUNoQ0MsdUNBQXdDLHdCQUN4Q0Msc0NBQXVDLDJDQUN2Q0MsMEJBQTJCLDhCQUMzQkMsa0NBQW1DLHlDQUNuQ0MsOEJBQStCLHFCQUMvQkMsc0NBQXVDLHlDQUN2Q0MsOEJBQStCLHFDQUMvQkMsc0NBQXVDLG9EQUV2Q0Msc0NBQXVDLGdDQUN2Q0MscUNBQXNDLDZCQUN0Q0MsNENBQ0UsNkVBQ0ZDLDBDQUNFLDBGQUNGQyx3Q0FBeUMsa0NBQ3pDQyx1Q0FBd0MsMEJBQ3hDQyw4Q0FDRSwwRUFDRkMsNkNBQThDLDREQUM5Q0MscUNBQXNDLDhCQUN0Q0Msb0NBQXFDLHVCQUNyQ0MsMkNBQTRDLHVFQUM1Q0MsMENBQTJDLDJERjdSN0MsTUFBTUUsR0FJSjl5QixZQUFZelgsR0FDVjBYLEtBQUsxWCxJQUFNQSxFQUNYMFgsS0FBSzh5QixjQUFnQixJQUFJQyxHQUFjM1EsSUFDdkMsSUFBSTRRLEVBQVdoekIsS0FBSzFYLElBQUkrUSxVQUFrQixzQkFBd0IsUUFDN0Qrb0IsR0FBYTRRLEtBQ2hCQSxFQUFXLFNBRWJoekIsS0FBS3pHLEtBQU8sSUFBSTA1QixHQUFLLENBQ25CQyxRQUFTbHpCLEtBQUs4eUIsY0FDZEssZ0JBQWlCSCxJQUVuQmh6QixLQUFLb3pCLGlCQUdDQSxpQkFDTixNQUFNQyxFQUFhcnpCLEtBQUtzekIsc0JBQ1YxaUMsRUFBRzJpQyxZQUFZRixFQUFZLENBQ3ZDRyxlQUFlLElBRVhsM0IsU0FBUTFPLElBQ1osR0FBSUEsRUFBSzZsQyxVQUFZN2xDLEVBQUt5QyxLQUFLcWpDLFNBQVMsUUFBUyxDQUMvQyxNQUFNQyxFQUFlOW9DLEVBQUtuQixLQUFLMnBDLEVBQVl6bEMsRUFBS3lDLE1BQzFDdWpDLEVBQVdoakMsRUFBR3NOLGFBQWF5MUIsRUFBYyxRQUMvQyxJQUNFLE1BQU1FLEVBQWNDLEdBQUtodUIsS0FBSzh0QixHQUM5QnhSLEdBQWF4MEIsRUFBS3lDLEtBQUszRSxRQUFRLFNBQVUsS0FBT21vQyxFQUNoRCxNQUFPbnJDLEdBQ1B3SSxRQUFRdEksTUFBTUYsUUFNZDRxQyxzQkFDTixNQUFNRCxFQUFheG9DLEVBQUtuQixLQUFLc1csS0FBSzFYLElBQUlnYSxRQUFTLFlBSS9DLE9BSEt5eEIsRUFBZVYsSUFDbEI5MEIsRUFBYzgwQixHQUVUQSxFQUdUNzVCLFVBQTRCNU0sRUFBc0IwVSxHQUNoRCxPQUFPdEIsS0FBS3pHLEtBQUtDLFVBQVU1TSxFQUFLMFUsSUFBUzFVLEVBRzNDaVQsWUFBWW16QixHQUNWaHpCLEtBQUt6RyxLQUFLc0csWUFBWW16QixHQUN0Qmh6QixLQUFLMVgsSUFBSStTLFdBQVcsQ0FDbEIsb0JBQXFCMjNCLElBSXpCZ0IsVUFBVWhCLEVBQWtCaUIsR0FDMUIsTUFBTUMsRUFBZ0JsMEIsS0FBSzh5QixjQUFjcUIsVUFBVW5CLEdBQ25ELElBQUtrQixFQUNILE9BQU8sRUFFVCxNQUFNRSxFQUFhQyxFQUFNSCxFQUFlRCxHQUV4QyxPQURBajBCLEtBQUs4eUIsY0FBY3dCLFVBQVV0QixFQUFVb0IsSUFDaEMsRUFHVEcsWUFBWXZCLEVBQWtCaUIsR0FFNUIsT0FEc0JqMEIsS0FBSzh5QixjQUFjcUIsVUFBVW5CLEtBSW5EaHpCLEtBQUs4eUIsY0FBY3dCLFVBQVV0QixFQUFVaUIsR0FDdkM3UixHQUFhNFEsR0FBWWlCLEdBQ2xCLEdBR1RyMEIsa0JBQ0UsT0FBTy9ULE9BQU9DLEtBQUtzMkIsS0d4RGpCLE1BQU9vUyxXQUFjM3RCLEVBd0JyQmxMLG1CQUNGLE9BQU9xRSxLQUFLeTBCLGNBR2QxMEIsWUFBWW1LLEVBQXFCLElBQy9CSixRQVJGOUosS0FBQW9LLFFBQWtCLFFBU2hCcEssS0FBS2tLLFdBQWFBLEVBQ2xCbEssS0FBS2pXLE1BQVEsR0FDYmlXLEtBQUttSyxTQUFXLEdBQ2hCbkssS0FBS2dGLE9BQVMsR0FDZGhGLEtBQUt2RSxPQUFTLENBQ1pXLFlBQWEsSUFBSTBELEdBQWlCLGVBQ2xDM0QsU0FBVSxJQUFJMkQsR0FBaUIsWUFDL0IwRyx1QkFBd0IsSUFBSTFHLEdBQWlCLDBCQUM3QzJHLG9CQUFxQixJQUFJM0csR0FBaUIsdUJBQzFDNEcsbUJBQW9CLElBQUk1RyxHQUFpQix1QkFFM0NFLEtBQUswMEIsaUJBQ0wxMEIsS0FBS3JYLElBQU0sSUFBSWtaLEdBQU83QixNQUN0QkEsS0FBS3RZLElBQU0sSUFBSXVaLEdBQVVqQixNQUN6QkEsS0FBSzVYLGNBQWdCLElBQUlzYixHQUFjMUQsTUFDdkNBLEtBQUsyMEIsYUFDTDMwQixLQUFLZCxPQUdDdzFCLGlCQUVOLEdBREExMEIsS0FBS2tLLFdBQWFsSyxLQUFLa0ssWUFBY3JmLEVBQUtuQixLQUFLMlYsSUFBVyx3QkFDTixVQUFoRHhVLEVBQUtFLFFBQVFpVixLQUFLa0ssWUFBWTlILGNBRWhDLE1BREFwQyxLQUFLa0ssV0FBYSxHQUNaNUcsTUFBTSxxREFFZHRELEtBQUtzQyxRQUFVelgsRUFBS2tDLFFBQVFpVCxLQUFLa0ssWUFDNUI2cEIsRUFBZS96QixLQUFLa0ssYUFDdkIwcUIsRUFBZSxHQUFHNTBCLEtBQUtrSyxjQUluQnlxQixhQUNOMzBCLEtBQUsraEIsR0FBSyxJQUFJRCxHQUFHOWhCLE1BQ2pCQSxLQUFLNjBCLFFBQVU3MEIsS0FBSytoQixHQUFHRSxNQUFLLEdBR3RCL2lCLE9BQ04sSUFFRWMsS0FBS3pHLEtBQU8sSUFBSXM1QixHQUFZN3lCLE1BQzVCQSxLQUFLa0ksUUFBVSxJQUFJQSxHQUFRbEksTUFDM0JBLEtBQUt5MEIsY0FBZ0IsSUFBSXB2QixHQUFhckYsTUFFdENnQixHQUFxQixTQUNyQnNlLEtBQW1CbmYsU0FBU0gsTUM3R3pCLENBQ0xHLFNBQVM3WCxHQUNQQSxFQUFJbVQsT0FBT1csWUFBWStELFNBQVMsT0FBUW9nQixJQUN4Q2o0QixFQUFJbVQsT0FBT1csWUFBWStELFNBQVMsU0FBVXNnQixNRDJHcEJ0Z0IsU0FBU0gsTUFDL0JnQixHQUFxQixJQUVyQmhCLEtBQUt5MEIsY0FBYzN1QixPQUNuQjlGLEtBQUs4MEIsVUFBWSxJQUFJanJCLEdBQVU3SixNQUMvQixNQUFPdFgsR0FHUCxNQUZBc1gsS0FBS3FFLEtBQUsxQyxHQUFjNkosaUJBQWtCLEdBQzFDeEwsS0FBS3JYLElBQUlDLE1BQU1GLEdBQ1RBLEdBU1Z3VCxJQUFJSCxFQUFzQjFMLEdBQ3hCLEdBQUlBLEVBRUYsT0FEQTJQLEtBQUtyRSxhQUFhNkksZUFBZW5VLEVBQU0wTCxHQUNoQ2lFLEtBQUtyRSxhQUFhQyxVQUFVdkwsR0FHbkMsT0FEdUIwTCxFQUFPaUUsTUFLbEMrMEIsbUJBQzBCLEtBQXBCLzBCLEtBQUtrSyxhQUNQbEssS0FBS3RZLElBQUl3WCxPQUNUYyxLQUFLdFksSUFBSStaLGdCQUlicEksVUFBYWhKLEdBQ1gsT0FBS0EsRUFJSVAsRUFBSWtRLEtBQUs2MEIsUUFBU3hrQyxJQUh6QjJQLEtBQUs2MEIsUUFBVTcwQixLQUFLK2hCLEdBQUdFLE1BQUssR0FDckJqaUIsS0FBSzYwQixTQU1oQng1QixXQUFXdFMsR0FDSm1KLEdBQW1CbkosSUFJeEJpWCxLQUFLeEQsVUFBVXpULEdBQ2ZpWCxLQUFLK2hCLEdBQUcxbUIsV0FBV3RTLElBSmpCaVgsS0FBS3JYLElBQUl5SSxLQUFLLDBEQU9sQnVWLGFBQWEvWixFQUFhb29DLEdBQ25CcG9DLEdBQVFvb0MsSUFDVGhqQyxHQUF1QnBGLEdBQ3pCb1QsS0FBS3JYLElBQUl5SSxLQUFLLGNBQWN4RSx1QkFHOUJvVCxLQUFLdUssWUFBWTNkLEVBQUtvb0MsR0FDdEJoMUIsS0FBSytoQixHQUFHSSxNQUFNdjFCLEVBQUtvb0MsS0FHckJ4NEIsVUFBVXpULEdBQ0htSixHQUFtQm5KLEdBSXhCOEMsT0FBT0MsS0FBSy9DLEdBQVF1VCxTQUFTak0sSUFDdkIyQixHQUF1QjNCLEtBQ3pCMlAsS0FBS3JYLElBQUl5SSxLQUFLLGNBQWNmLDhCQUVyQnRILEVBQU9zSCxJQUVoQmtRLEVBQUlQLEtBQUs2MEIsUUFBU3hrQyxFQUFNdEgsRUFBT3NILElBQy9CdVcsR0FBU3ZDLEtBQUt6QyxHQUFVdUcsY0FBZSxDQUNyQy9NLFdBQVkvSyxFQUNaa0wsTUFBT3hTLEVBQU9zSCxRQVpoQjJQLEtBQUtyWCxJQUFJeUksS0FBSywwREFpQmxCbVosWUFBWTNkLEVBQWFvb0MsR0FDbEJwb0MsR0FBUW9vQyxJQUNUaGpDLEdBQXVCcEYsR0FDekJvVCxLQUFLclgsSUFBSXlJLEtBQUssY0FBY3hFLG9CQUc5QnUxQixFQUFNbmlCLEtBQUszRyxVQUFVek0sR0FBTW9vQyxJQUd6QjlsQyxjQUNGLE9BQU84USxLQUFLa0ksUUFBUWhaLFFBQVFvYixLQUFLdEssS0FBS2tJLFNBR3hDL1osYUFBYXBFLEdBQ1gsR0FBd0IsS0FBcEJpVyxLQUFLa0ssV0FFUCxPQURBbEssS0FBS3JYLElBQUlDLE1BQU0sNERBQ1IsR0FHVCxRQUFjZ0QsSUFBVjdCLEdBQXdDLElBQWpCQSxFQUFNZCxPQXNCMUIsQ0FDTCxNQUFNK2IsT0FBRUEsU0FBaUJoRixLQUFLODBCLFVBQVVHLE1BQU1sckMsR0FDOUMsT0FBT2liLEVBdkJQLElBQ0UsTUFBTTRjLFFBQUVBLEVBQU9DLHlCQUFFQSxTQUFtQ1osR0FBa0JqaEIsTUFDaEVrMUIsRUFBVSxLQUNUclQsR0FDSGhFLEVBQU8rRCxHQUFTbjVCLE9BQU1DLElBQ3BCc1gsS0FBS3JYLElBQUlDLE1BQU1GLE9BSXJCLEdBQWdCLGFBQVprNUIsRUFDRixNQUFNLElBQUl0ZSxNQUFNLGdDQUNYLENBQ0x0RCxLQUFLeUssS0FBSzlJLEdBQWN5RCxPQUFROHZCLEdBQ2hDbDFCLEtBQUt5SyxLQUFLOUksR0FBYzJMLFNBQVU0bkIsR0FDbEMsTUFBTWx3QixPQUFFQSxTQUFpQmhGLEtBQUs4MEIsVUFBVUcsTUFBTSxDQUFDclQsSUFDL0MsT0FBTzVjLEdBRVQsTUFBT3RjLEdBRVAsTUFEQXNYLEtBQUtxRSxLQUFLMUMsR0FBY3lELE9BQVExYyxHQUMxQkEifQ==
|