@discordeno/rest 19.0.0-next.3264b4e → 19.0.0-next.3bbb03b

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/dist/manager.js CHANGED
@@ -1,2 +1,2 @@
1
- import{InteractionResponseTypes as e}from"@discordeno/types";import{calculateBits as t,camelize as s,camelToSnakeCase as a,delay as i,findFiles as n,getBotIdFromToken as o,isGetMessagesAfter as r,isGetMessagesAround as l,isGetMessagesBefore as d,isGetMessagesLimit as u,logger as c,processReactionString as m,urlToBase64 as g}from"@discordeno/utils";import{createInvalidRequestBucket as p}from"./invalidBucket.js";import{Queue as h}from"./queue.js";export function createRestManager(w){if(!w.token)throw Error("You must provide a valid token.");let y={token:w.token,applicationId:w.applicationId?BigInt(w.applicationId):o(w.token),version:w.version??10,baseUrl:w.baseUrl??"https://discord.com/api",maxRetryCount:1/0,globallyRateLimited:!1,processingRateLimitedPaths:!1,deleteQueueDelay:6e4,queues:new Map,rateLimitedPaths:new Map,invalidBucket:p({}),routes:{webhooks:{id:e=>`/webhooks/${e}`,message:(e,t,s,a)=>{let i=`/webhooks/${e}/${t}/messages/${s}?`;return a&&a.threadId&&(i+=`thread_id=${a.threadId}`),i},original:(e,t,s)=>{let a=`/webhooks/${e}/${t}/messages/@original?`;return s&&s.threadId&&(a+=`thread_id=${s.threadId}`),a},webhook:(e,t,s)=>{let a=`/webhooks/${e}/${t}?`;return s&&(s?.wait!==void 0&&(a+=`wait=${s.wait.toString()}`),s.threadId&&(a+=`thread_id=${s.threadId}`)),a}},sessionInfo:()=>y.routes.gatewayBot(),channels:{bulk:e=>`/channels/${e}/messages/bulk-delete`,dm:()=>"/users/@me/channels",pin:(e,t)=>`/channels/${e}/pins/${t}`,pins:e=>`/channels/${e}/pins`,reactions:{bot:(e,t,s)=>`/channels/${e}/messages/${t}/reactions/${encodeURIComponent(s)}/@me`,user:(e,t,s,a)=>`/channels/${e}/messages/${t}/reactions/${encodeURIComponent(s)}/${a}`,all:(e,t)=>`/channels/${e}/messages/${t}/reactions`,emoji:(e,t,s,a)=>{let i=`/channels/${e}/messages/${t}/reactions/${encodeURIComponent(s)}?`;return a&&(a.after&&(i+=`after=${a.after}`),a.limit&&(i+=`&limit=${a.limit}`)),i},message:(e,t,s,a)=>{let i=`/channels/${e}/messages/${t}/reactions/${encodeURIComponent(s)}?`;return a&&(a.after&&(i+=`after=${a.after}`),a.limit&&(i+=`&limit=${a.limit}`)),i}},webhooks:e=>`/channels/${e}/webhooks`,channel:e=>`/channels/${e}`,follow:e=>`/channels/${e}/followers`,forum:e=>`/channels/${e}/threads?has_message=true`,invites:e=>`/channels/${e}/invites`,message:(e,t)=>`/channels/${e}/messages/${t}`,messages:(e,t)=>{let s=`/channels/${e}/messages?`;return t&&(r(t)&&t.after&&(s+=`after=${t.after}`),d(t)&&t.before&&(s+=`&before=${t.before}`),l(t)&&t.around&&(s+=`&around=${t.around}`),u(t)&&t.limit&&(s+=`&limit=${t.limit}`)),s},overwrite:(e,t)=>`/channels/${e}/permissions/${t}`,crosspost:(e,t)=>`/channels/${e}/messages/${t}/crosspost`,stages:()=>"/stage-instances",stage:e=>`/stage-instances/${e}`,threads:{message:(e,t)=>`/channels/${e}/messages/${t}/threads`,all:e=>`/channels/${e}/threads`,active:e=>`/guilds/${e}/threads/active`,members:e=>`/channels/${e}/thread-members`,me:e=>`/channels/${e}/thread-members/@me`,user:(e,t)=>`/channels/${e}/thread-members/${t}`,archived:e=>`/channels/${e}/threads/archived`,public:(e,t)=>{let s=`/channels/${e}/threads/archived/public?`;return t&&(t.before&&(s+=`before=${new Date(t.before).toISOString()}`),t.limit&&(s+=`&limit=${t.limit}`)),s},private:(e,t)=>{let s=`/channels/${e}/threads/archived/private?`;return t&&(t.before&&(s+=`before=${new Date(t.before).toISOString()}`),t.limit&&(s+=`&limit=${t.limit}`)),s},joined:(e,t)=>{let s=`/channels/${e}/users/@me/threads/archived/private?`;return t&&(t.before&&(s+=`before=${new Date(t.before).toISOString()}`),t.limit&&(s+=`&limit=${t.limit}`)),s}},typing:e=>`/channels/${e}/typing`},guilds:{all:()=>"/guilds",auditlogs:(e,t)=>{let s=`/guilds/${e}/audit-logs?`;return t&&(t.actionType&&(s+=`action_type=${t.actionType}`),t.before&&(s+=`&before=${t.before}`),t.limit&&(s+=`&limit=${t.limit}`),t.userId&&(s+=`&user_id=${t.userId}`)),s},automod:{rule:(e,t)=>`/guilds/${e}/auto-moderation/rules/${t}`,rules:e=>`/guilds/${e}/auto-moderation/rules`},channels:e=>`/guilds/${e}/channels`,emoji:(e,t)=>`/guilds/${e}/emojis/${t}`,emojis:e=>`/guilds/${e}/emojis`,events:{events:(e,t)=>{let s=`/guilds/${e}/scheduled-events?`;return void 0!==t&&(s+=`with_user_count=${t.toString()}`),s},event:(e,t,s)=>{let a=`/guilds/${e}/scheduled-events/${t}`;return void 0!==s&&(a+=`with_user_count=${s.toString()}`),a},users:(e,t,s)=>{let a=`/guilds/${e}/scheduled-events/${t}/users?`;return s&&(void 0!==s.limit&&(a+=`limit=${s.limit}`),void 0!==s.withMember&&(a+=`&with_member=${s.withMember.toString()}`),void 0!==s.after&&(a+=`&after=${s.after}`),void 0!==s.before&&(a+=`&before=${s.before}`)),a}},guild(e,t){let s=`/guilds/${e}?`;return void 0!==t&&(s+=`with_counts=${t.toString()}`),s},integration:(e,t)=>`/guilds/${e}/integrations/${t}`,integrations:e=>`/guilds/${e}/integrations?include_applications=true`,invite(e,t){let s=`/invites/${e}?`;return t&&(void 0!==t.withCounts&&(s+=`with_counts=${t.withCounts.toString()}`),void 0!==t.withExpiration&&(s+=`&with_expiration=${t.withExpiration.toString()}`),t.scheduledEventId&&(s+=`&guild_scheduled_event_id=${t.scheduledEventId}`)),s},invites:e=>`/guilds/${e}/invites`,leave:e=>`/users/@me/guilds/${e}`,members:{ban:(e,t)=>`/guilds/${e}/bans/${t}`,bans:(e,t)=>{let s=`/guilds/${e}/bans?`;return t&&(t.limit&&(s+=`limit=${t.limit}`),t.after&&(s+=`&after=${t.after}`),t.before&&(s+=`&before=${t.before}`)),s},bot:e=>`/guilds/${e}/members/@me`,member:(e,t)=>`/guilds/${e}/members/${t}`,members:(e,t)=>{let s=`/guilds/${e}/members?`;return void 0!==t&&(t.limit&&(s+=`limit=${t.limit}`),t.after&&(s+=`&after=${t.after}`)),s},search:(e,t,s)=>{let a=`/guilds/${e}/members/search?query=${encodeURIComponent(t)}`;return s&&void 0!==s.limit&&(a+=`&limit=${s.limit}`),a},prune:(e,t)=>{let s=`/guilds/${e}/prune?`;return t&&(t.days&&(s+=`days=${t.days}`),Array.isArray(t.includeRoles)?s+=`&include_roles=${t.includeRoles.join(",")}`:t.includeRoles&&(s+=`&include_roles=${t.includeRoles}`)),s}},mfa:e=>`/guilds/${e}/mfa`,preview:e=>`/guilds/${e}/preview`,prune:(e,t)=>{let s=`/guilds/${e}/prune?`;return t&&(t.days&&(s+=`days=${t.days}`),Array.isArray(t.includeRoles)?s+=`&include_roles=${t.includeRoles.join(",")}`:t.includeRoles&&(s+=`&include_roles=${t.includeRoles}`)),s},roles:{one:(e,t)=>`/guilds/${e}/roles/${t}`,all:e=>`/guilds/${e}/roles`,member:(e,t,s)=>`/guilds/${e}/members/${t}/roles/${s}`},stickers:e=>`/guilds/${e}/stickers`,sticker:(e,t)=>`/guilds/${e}/stickers/${t}`,voice:(e,t)=>`/guilds/${e}/voice-states/${t??"@me"}`,templates:{code:e=>`/guilds/templates/${e}`,guild:(e,t)=>`/guilds/${e}/templates/${t}`,all:e=>`/guilds/${e}/templates`},vanity:e=>`/guilds/${e}/vanity-url`,regions:e=>`/guilds/${e}/regions`,webhooks:e=>`/guilds/${e}/webhooks`,welcome:e=>`/guilds/${e}/welcome-screen`,widget:e=>`/guilds/${e}/widget`,widgetJson:e=>`/guilds/${e}/widget.json`},sticker:e=>`/stickers/${e}`,regions:()=>"/voice/regions",interactions:{commands:{commands:e=>`/applications/${e}/commands`,guilds:{all:(e,t)=>`/applications/${e}/guilds/${t}/commands`,one(e,t,s,a){let i=`/applications/${e}/guilds/${t}/commands/${s}?`;return void 0!==a&&(i+=`with_localizations=${a.toString()}`),i}},permissions:(e,t)=>`/applications/${e}/guilds/${t}/commands/permissions`,permission:(e,t,s)=>`/applications/${e}/guilds/${t}/commands/${s}/permissions`,command:(e,t,s)=>{let a=`/applications/${e}/commands/${t}?`;return void 0!==s&&(a+=`withLocalizations=${s.toString()}`),a}},responses:{callback:(e,t)=>`/interactions/${e}/${t}/callback`,original:(e,t)=>`/webhooks/${e}/${t}/messages/@original`,message:(e,t,s)=>`/webhooks/${e}/${t}/messages/${s}`}},user:e=>`/users/${e}`,userBot:()=>"/users/@me",oauth2Application:()=>"oauth2/applications/@me",gatewayBot:()=>"/gateway/bot",nitroStickerPacks:()=>"/sticker-packs"},checkRateLimits(e){let t=y.rateLimitedPaths.get(e),s=y.rateLimitedPaths.get("global"),a=Date.now();return t&&a<t.resetTimestamp?t.resetTimestamp-a:!!s&&a<s.resetTimestamp&&s.resetTimestamp-a},changeToDiscordFormat(e){if(null===e)return null;if("object"==typeof e){if(Array.isArray(e))return e.map(e=>y.changeToDiscordFormat(e));let s={};for(let i of Object.keys(e)){if("permissions"===i){s.permissions=t(e[i]);continue}s[a(i)]=y.changeToDiscordFormat(e[i])}return s}return"bigint"==typeof e?e.toString():e},createRequest(e){let t={"user-agent":"DiscordBot (https://github.com/discordeno/discordeno, v19.0.0-alpha.1)"};if(e.unauthorized||(t.authorization=`Bot ${y.token}`),e.headers)for(let s in e.headers)t[s.toLowerCase()]=e.headers[s];if("GET"===e.method&&(e.body=void 0),e.body?.reason&&(t["X-Audit-Log-Reason"]=encodeURIComponent(e.body.reason),e.body.reason=void 0),e.body){let{file:a}=e.body;if(a){let i=n(a),o=new FormData;if(e.url?.endsWith("/stickers")&&"POST"===e.method)o.append("file",i[0].blob,i[0].name),o.append("name",e.body.name),o.append("description",e.body.description),o.append("tags",e.body.tags);else{for(let r=0;r<i.length;r++)o.append(`file${r}`,i[r].blob,i[r].name);a&&(e.body.file=void 0),o.append("payload_json",JSON.stringify(y.changeToDiscordFormat(e.body)))}e.body.file=o}else e.body&&!["GET","DELETE"].includes(e.method)&&(t["Content-Type"]="application/json")}return{headers:t,body:e.body?.file??JSON.stringify(y.changeToDiscordFormat(e.body)),method:e.method}},processRateLimitedPaths(){let e=Date.now();for(let[t,s]of y.rateLimitedPaths.entries())s.resetTimestamp>e||(y.rateLimitedPaths.delete(t),"global"!==t||(y.globallyRateLimited=!1));0===y.rateLimitedPaths.size?y.processingRateLimitedPaths=!1:(y.processingRateLimitedPaths=!0,setTimeout(()=>{y.processRateLimitedPaths()},1e3))},processHeaders(e,t){let s=!1,a=t.get("x-ratelimit-remaining"),i=t.get("x-ratelimit-reset-after"),n=Date.now()+1e3*Number(i),o=t.get("x-ratelimit-global"),r=t.get("x-ratelimit-bucket")??void 0,l=t.get("x-ratelimit-limit");if(y.queues.get(e)?.handleCompletedRequest({remaining:a?Number(a):void 0,interval:i?1e3*Number(i):void 0,max:l?Number(l):void 0}),"0"===a&&(s=!0,y.rateLimitedPaths.set(e,{url:e,resetTimestamp:n,bucketId:r}),r&&y.rateLimitedPaths.set(r,{url:e,resetTimestamp:n,bucketId:r})),o){let d=t.get("retry-after"),u=Date.now()+1e3*Number(d);y.globallyRateLimited=!0,s=!0,setTimeout(()=>{y.globallyRateLimited=!1},u),y.rateLimitedPaths.set("global",{url:"global",resetTimestamp:u,bucketId:r}),r&&y.rateLimitedPaths.set(r,{url:"global",resetTimestamp:u,bucketId:r})}return s&&!y.processingRateLimitedPaths&&y.processRateLimitedPaths(),s?r:void 0},async sendRequest(e){let t=e.url.startsWith("https://")?e.url:`${y.baseUrl}/v${y.version}${e.url}`,s=y.createRequest({method:e.method,url:e.url,body:e.body,...e.options});c.debug(`sending request to ${t}`,"with payload:",{...s,headers:{...s.headers,authorization:"Bot tokenhere"}});let a=await fetch(t,s);c.debug(`request fetched from ${t} with status ${a.status} & ${a.statusText}`);let n=y.processHeaders(y.simplifyUrl(e.url,e.method),a.headers);if(n&&(e.bucketId=n),a.status<200||a.status>=400){if(c.debug(`Request to ${t} failed.`),429===a.status){if(c.debug(`Request to ${t} was ratelimited.`),e.retryCount++>=y.maxRetryCount)return c.debug(`Request to ${t} exceeded the maximum allowed retries.`,"with payload:",s),e.reject({ok:!1,status:a.status,error:"The options was rate limited and it maxed out the retries limit."});y.invalidBucket.handleCompletedRequest(a.status,"shared"===a.headers.get("X-RateLimit-Scope"));let o=a.headers.get("x-ratelimit-reset-after");return o&&await i(1e3*Number(o)),await e.retryRequest?.(e)}return e.reject({ok:!1,status:a.status,body:JSON.stringify(await a.json())})}let r=204===a.status,l=r?void 0:await a.json();return e.resolve({ok:!0,status:a.status,body:JSON.stringify(l)})},simplifyUrl(e,t){let s=e.replace(/\/([a-z-]+)\/(?:[0-9]{17,19})/g,function(e,t){return["channels","guilds"].includes(t)?e:`/${t}/x`}).replace(/\/reactions\/[^/]+/g,"/reactions/x");return s.includes("/reactions")&&(s=s.substring(0,s.indexOf("/reactions")+10)),"DELETE"===t&&s.endsWith("/messages/x")&&(s=t+s),s},processRequest(e){let t=e.url.substring(e.url.indexOf("api/")),s=t.split("/");s.shift(),s[0]?.startsWith("v")&&s.shift(),e.url=`${y.baseUrl}/v${y.version}/${s.join("/")}`;let a=y.simplifyUrl(e.url,e.method),i=y.queues.get(a);if(void 0!==i)i.makeRequest(e);else{let n=new h(y,{url:a,deleteQueueDelay:y.deleteQueueDelay});n.makeRequest(e),y.queues.set(a,n)}},makeRequest:async(e,t,s,a)=>await new Promise((i,n)=>{y.processRequest({url:t,method:e,body:s,retryCount:0,retryRequest:async function(e){await y.sendRequest(e)},resolve:e=>i(204!==e.status?JSON.parse(e.body??"{}"):void 0),reject:n,options:a})}),get:async e=>s(await y.makeRequest("GET",e)),post:async(e,t)=>s(await y.makeRequest("POST",e,t)),delete:async(e,t)=>s(await y.makeRequest("DELETE",e,t)),patch:async(e,t)=>s(await y.makeRequest("PATCH",e,t)),put:async(e,t,a)=>s(await y.makeRequest("PUT",e,t,a)),addReaction:async(e,t,s)=>await y.put(y.routes.channels.reactions.bot(e,t,s=m(s))),async addReactions(e,t,s,a=!1){if(!a){await Promise.all(s.map(async s=>await y.addReaction(e,t,s)));return}for(let i of s)await y.addReaction(e,t,i)},addRole:async(e,t,s,a)=>await y.put(y.routes.guilds.roles.member(e,t,s),{reason:a}),addThreadMember:async(e,t)=>await y.put(y.routes.channels.threads.user(e,t)),createAutomodRule:async(e,t)=>await y.post(y.routes.guilds.automod.rules(e),t),createChannel:async(e,t)=>await y.post(y.routes.guilds.channels(e),t),createEmoji:async(e,t)=>await y.post(y.routes.guilds.emojis(e),t),createGlobalApplicationCommand:async e=>await y.post(y.routes.interactions.commands.commands(y.applicationId),e),createGuild:async e=>await y.post(y.routes.guilds.all(),e),createGuildApplicationCommand:async(e,t)=>await y.post(y.routes.interactions.commands.guilds.all(y.applicationId,t),e),createGuildFromTemplate:async(e,t)=>(t.icon&&(t.icon=await g(t.icon)),await y.post(y.routes.guilds.templates.code(e),t)),createGuildSticker:async(e,t)=>await y.post(y.routes.guilds.stickers(e),t),createGuildTemplate:async(e,t)=>await y.post(y.routes.guilds.templates.all(e),t),createForumThread:async(e,t)=>await y.post(y.routes.channels.forum(e),t),createInvite:async(e,t={})=>await y.post(y.routes.channels.invites(e),t),createRole:async(e,t,s)=>await y.post(y.routes.guilds.roles.all(e),{...t,reason:s}),createScheduledEvent:async(e,t)=>await y.post(y.routes.guilds.events.events(e),t),createStageInstance:async e=>await y.post(y.routes.channels.stages(),e),createWebhook:async(e,t)=>await y.post(y.routes.channels.webhooks(e),{name:t.name,avatar:t.avatar?await g(t.avatar):void 0,reason:t.reason}),deleteAutomodRule:async(e,t,s)=>await y.delete(y.routes.guilds.automod.rule(e,t),{reason:s}),deleteChannel:async(e,t)=>await y.delete(y.routes.channels.channel(e),{reason:t}),deleteChannelPermissionOverride:async(e,t,s)=>await y.delete(y.routes.channels.overwrite(e,t),s?{reason:s}:void 0),deleteEmoji:async(e,t,s)=>await y.delete(y.routes.guilds.emoji(e,t),{reason:s}),deleteFollowupMessage:async(e,t)=>await y.delete(y.routes.interactions.responses.message(y.applicationId,e,t)),deleteGlobalApplicationCommand:async e=>await y.delete(y.routes.interactions.commands.command(y.applicationId,e)),deleteGuild:async e=>await y.delete(y.routes.guilds.guild(e)),deleteGuildApplicationCommand:async(e,t)=>await y.delete(y.routes.interactions.commands.guilds.one(y.applicationId,t,e)),deleteGuildSticker:async(e,t,s)=>await y.delete(y.routes.guilds.sticker(e,t),s?{reason:s}:void 0),deleteGuildTemplate:async(e,t)=>await y.delete(y.routes.guilds.templates.guild(e,t)),deleteIntegration:async(e,t)=>await y.delete(y.routes.guilds.integration(e,t)),deleteInvite:async(e,t)=>await y.delete(y.routes.guilds.invite(e),t?{reason:t}:void 0),deleteMessage:async(e,t,s)=>await y.delete(y.routes.channels.message(e,t),{reason:s}),deleteMessages:async(e,t,s)=>await y.post(y.routes.channels.bulk(e),{messages:t.slice(0,100).map(e=>e.toString()),reason:s}),deleteOriginalInteractionResponse:async e=>await y.delete(y.routes.interactions.responses.original(y.applicationId,e)),deleteOwnReaction:async(e,t,s)=>await y.delete(y.routes.channels.reactions.bot(e,t,s=m(s))),deleteReactionsAll:async(e,t)=>await y.delete(y.routes.channels.reactions.all(e,t)),deleteReactionsEmoji:async(e,t,s)=>await y.delete(y.routes.channels.reactions.emoji(e,t,s=m(s))),deleteRole:async(e,t)=>await y.delete(y.routes.guilds.roles.one(e,t)),deleteScheduledEvent:async(e,t)=>await y.delete(y.routes.guilds.events.event(e,t)),deleteStageInstance:async(e,t)=>await y.delete(y.routes.channels.stage(e),t?{reason:t}:void 0),deleteUserReaction:async(e,t,s,a)=>await y.delete(y.routes.channels.reactions.user(e,t,a=m(a),s)),deleteWebhook:async(e,t)=>await y.delete(y.routes.webhooks.id(e),{reason:t}),deleteWebhookMessage:async(e,t,s,a)=>await y.delete(y.routes.webhooks.message(e,t,s,a)),deleteWebhookWithToken:async(e,t)=>await y.delete(y.routes.webhooks.webhook(e,t)),editApplicationCommandPermissions:async(e,t,s,a)=>await y.put(y.routes.interactions.commands.permission(y.applicationId,e,t),{permissions:a},{headers:{authorization:`Bearer ${s}`}}),editAutomodRule:async(e,t,s)=>await y.patch(y.routes.guilds.automod.rule(e,t),s),async editBotProfile(e){let t=e?.botAvatarURL?await g(e?.botAvatarURL):e?.botAvatarURL;return await y.patch(y.routes.userBot(),{username:e.username?.trim(),avatar:t})},editChannel:async(e,t)=>await y.patch(y.routes.channels.channel(e),t),editChannelPermissionOverrides:async(e,t)=>await y.put(y.routes.channels.overwrite(e,t.id),t),editChannelPositions:async(e,t)=>await y.patch(y.routes.guilds.channels(e),t),editEmoji:async(e,t,s)=>await y.patch(y.routes.guilds.emoji(e,t),s),editFollowupMessage:async(e,t,s)=>await y.patch(y.routes.interactions.responses.message(y.applicationId,e,t),s),editGlobalApplicationCommand:async(e,t)=>await y.patch(y.routes.interactions.commands.command(y.applicationId,e),t),editGuild:async(e,t)=>await y.patch(y.routes.guilds.guild(e),t),editGuildApplicationCommand:async(e,t,s)=>await y.patch(y.routes.interactions.commands.guilds.one(y.applicationId,t,e),s),editGuildMfaLevel:async(e,t,s)=>await y.post(y.routes.guilds.mfa(e),{level:t,reason:s}),editGuildSticker:async(e,t,s)=>await y.patch(y.routes.guilds.sticker(e,t),s),editGuildTemplate:async(e,t,s)=>await y.patch(y.routes.guilds.templates.guild(e,t),s),editMessage:async(e,t,s)=>await y.patch(y.routes.channels.message(e,t),s),editOriginalInteractionResponse:async(e,t)=>await y.patch(y.routes.interactions.responses.original(y.applicationId,e),t),editOriginalWebhookMessage:async(t,s,a)=>await y.patch(y.routes.webhooks.original(t,s,a),{type:e.UpdateMessage,data:a}),editOwnVoiceState:async(e,t)=>await y.patch(y.routes.guilds.voice(e),{channel_id:t.channelId,suppress:t.suppress,request_to_speak_timestamp:t.requestToSpeakTimestamp?new Date(t.requestToSpeakTimestamp).toISOString():t.requestToSpeakTimestamp}),editScheduledEvent:async(e,t,s)=>await y.patch(y.routes.guilds.events.event(e,t),s),editRole:async(e,t,s)=>await y.patch(y.routes.guilds.roles.one(e,t),s),editRolePositions:async(e,t)=>await y.patch(y.routes.guilds.roles.all(e),t),editStageInstance:async(e,t)=>await y.patch(y.routes.channels.stage(e),{topic:t.topic}),editUserVoiceState:async(e,t)=>await y.patch(y.routes.guilds.voice(e,t.userId),{channel_id:t.channelId,suppress:t.suppress,user_id:t.userId}),editWebhook:async(e,t)=>await y.patch(y.routes.webhooks.id(e),t),editWebhookMessage:async(e,t,s,a)=>await y.patch(y.routes.webhooks.message(e,t,s,a),a),editWebhookWithToken:async(e,t,s)=>await y.patch(y.routes.webhooks.webhook(e,t),s),editWelcomeScreen:async(e,t)=>await y.patch(y.routes.guilds.welcome(e),t),editWidgetSettings:async(e,t)=>await y.patch(y.routes.guilds.widget(e),t),executeWebhook:async(e,t,s)=>await y.post(y.routes.webhooks.webhook(e,t,s),s),followAnnouncement:async(e,t)=>await y.post(y.routes.channels.follow(e),{webhook_channel_id:t}),getActiveThreads:async e=>await y.get(y.routes.channels.threads.active(e)),getApplicationCommandPermission:async(e,t)=>await y.get(y.routes.interactions.commands.permission(y.applicationId,e,t)),getApplicationCommandPermissions:async e=>await y.get(y.routes.interactions.commands.permissions(y.applicationId,e)),getApplicationInfo:async()=>await y.get(y.routes.oauth2Application()),getAuditLog:async(e,t)=>await y.get(y.routes.guilds.auditlogs(e,t)),getAutomodRule:async(e,t)=>await y.get(y.routes.guilds.automod.rule(e,t)),getAutomodRules:async e=>await y.get(y.routes.guilds.automod.rules(e)),getAvailableVoiceRegions:async()=>await y.get(y.routes.regions()),getBan:async(e,t)=>await y.get(y.routes.guilds.members.ban(e,t)),getBans:async(e,t)=>await y.get(y.routes.guilds.members.bans(e,t)),getChannel:async e=>await y.get(y.routes.channels.channel(e)),getChannelInvites:async e=>await y.get(y.routes.channels.invites(e)),getChannels:async e=>await y.get(y.routes.guilds.channels(e)),getChannelWebhooks:async e=>await y.get(y.routes.channels.webhooks(e)),getDmChannel:async e=>await y.post(y.routes.channels.dm(),{recipient_id:e.toString()}),getEmoji:async(e,t)=>await y.get(y.routes.guilds.emoji(e,t)),getEmojis:async e=>await y.get(y.routes.guilds.emojis(e)),getFollowupMessage:async(e,t)=>await y.get(y.routes.interactions.responses.message(y.applicationId,e,t)),getGatewayBot:async()=>await y.get(y.routes.gatewayBot()),getGlobalApplicationCommand:async e=>await y.get(y.routes.interactions.commands.command(y.applicationId,e)),getGlobalApplicationCommands:async()=>await y.get(y.routes.interactions.commands.commands(y.applicationId)),getGuild:async(e,t={counts:!0})=>await y.get(y.routes.guilds.guild(e,t.counts)),getGuildApplicationCommand:async(e,t)=>await y.get(y.routes.interactions.commands.guilds.one(y.applicationId,t,e)),getGuildApplicationCommands:async e=>await y.get(y.routes.interactions.commands.guilds.all(y.applicationId,e)),getGuildPreview:async e=>await y.get(y.routes.guilds.preview(e)),getGuildTemplate:async e=>await y.get(y.routes.guilds.templates.code(e)),getGuildTemplates:async e=>await y.get(y.routes.guilds.templates.all(e)),getGuildWebhooks:async e=>await y.get(y.routes.guilds.webhooks(e)),getIntegrations:async e=>await y.get(y.routes.guilds.integrations(e)),getInvite:async(e,t)=>await y.get(y.routes.guilds.invite(e,t)),getInvites:async e=>await y.get(y.routes.guilds.invites(e)),getMessage:async(e,t)=>await y.get(y.routes.channels.message(e,t)),getMessages:async(e,t)=>await y.get(y.routes.channels.messages(e,t)),getNitroStickerPacks:async()=>await y.get(y.routes.nitroStickerPacks()),getOriginalInteractionResponse:async e=>await y.get(y.routes.interactions.responses.original(y.applicationId,e)),getPinnedMessages:async e=>await y.get(y.routes.channels.pins(e)),getPrivateArchivedThreads:async(e,t)=>await y.get(y.routes.channels.threads.private(e,t)),getPrivateJoinedArchivedThreads:async(e,t)=>await y.get(y.routes.channels.threads.joined(e,t)),getPruneCount:async(e,t)=>await y.get(y.routes.guilds.prune(e,t)),getPublicArchivedThreads:async(e,t)=>await y.get(y.routes.channels.threads.public(e,t)),getRoles:async e=>await y.get(y.routes.guilds.roles.all(e)),getScheduledEvent:async(e,t,s)=>await y.get(y.routes.guilds.events.event(e,t,s?.withUserCount)),getScheduledEvents:async(e,t)=>await y.get(y.routes.guilds.events.events(e,t?.withUserCount)),getScheduledEventUsers:async(e,t,s)=>await y.get(y.routes.guilds.events.users(e,t,s)),getSessionInfo:async()=>await y.getGatewayBot(),getStageInstance:async e=>await y.get(y.routes.channels.stage(e)),getSticker:async e=>await y.get(y.routes.sticker(e)),getGuildSticker:async(e,t)=>await y.get(y.routes.guilds.sticker(e,t)),getGuildStickers:async e=>await y.get(y.routes.guilds.stickers(e)),getThreadMember:async(e,t)=>await y.get(y.routes.channels.threads.user(e,t)),getThreadMembers:async e=>await y.get(y.routes.channels.threads.members(e)),getReactions:async(e,t,s,a)=>await y.get(y.routes.channels.reactions.message(e,t,s,a)),getUser:async e=>await y.get(y.routes.user(e)),getVanityUrl:async e=>await y.get(y.routes.guilds.vanity(e)),getVoiceRegions:async e=>await y.get(y.routes.guilds.regions(e)),getWebhook:async e=>await y.get(y.routes.webhooks.id(e)),getWebhookMessage:async(e,t,s,a)=>await y.get(y.routes.webhooks.message(e,t,s,a)),getWebhookWithToken:async(e,t)=>await y.get(y.routes.webhooks.webhook(e,t)),getWelcomeScreen:async e=>await y.get(y.routes.guilds.welcome(e)),getWidget:async e=>await y.get(y.routes.guilds.widgetJson(e)),getWidgetSettings:async e=>await y.get(y.routes.guilds.widget(e)),joinThread:async e=>await y.put(y.routes.channels.threads.me(e)),leaveGuild:async e=>await y.delete(y.routes.guilds.leave(e)),leaveThread:async e=>await y.delete(y.routes.channels.threads.me(e)),publishMessage:async(e,t)=>await y.post(y.routes.channels.crosspost(e,t)),removeRole:async(e,t,s,a)=>await y.delete(y.routes.guilds.roles.member(e,t,s),{reason:a}),removeThreadMember:async(e,t)=>await y.delete(y.routes.channels.threads.user(e,t)),sendFollowupMessage:async(e,t)=>await new Promise((s,a)=>{y.sendRequest({url:y.routes.webhooks.webhook(y.applicationId,e),method:"POST",body:t,retryCount:0,retryRequest:async function(e){await y.sendRequest(e)},resolve:e=>s(204!==e.status?JSON.parse(e.body??"{}"):void 0),reject:a})}),sendInteractionResponse:async(e,t,s)=>await new Promise((a,i)=>{y.sendRequest({url:y.routes.interactions.responses.callback(e,t),method:"POST",body:s,retryCount:0,retryRequest:async function(e){await y.sendRequest(e)},resolve:e=>a(204!==e.status?JSON.parse(e.body??"{}"):void 0),reject:i})}),sendMessage:async(e,t)=>await y.post(y.routes.channels.messages(e),t),startThreadWithMessage:async(e,t,s)=>await y.post(y.routes.channels.threads.message(e,t),s),startThreadWithoutMessage:async(e,t)=>await y.post(y.routes.channels.threads.all(e),t),syncGuildTemplate:async e=>await y.put(y.routes.guilds.templates.all(e)),banMember:async(e,t,s)=>await y.put(y.routes.guilds.members.ban(e,t),s),editBotMember:async(e,t)=>await y.patch(y.routes.guilds.members.bot(e),t),editMember:async(e,t,s)=>await y.patch(y.routes.guilds.members.member(e,t),s),getMember:async(e,t)=>await y.get(y.routes.guilds.members.member(e,t)),getMembers:async(e,t)=>await y.get(y.routes.guilds.members.members(e,t)),kickMember:async(e,t,s)=>await y.delete(y.routes.guilds.members.member(e,t),{reason:s}),pinMessage:async(e,t,s)=>await y.put(y.routes.channels.pin(e,t),s?{reason:s}:void 0),pruneMembers:async(e,t)=>await y.post(y.routes.guilds.members.prune(e),t),searchMembers:async(e,t,s)=>await y.get(y.routes.guilds.members.search(e,t,s)),unbanMember:async(e,t)=>await y.delete(y.routes.guilds.members.ban(e,t)),unpinMessage:async(e,t,s)=>await y.delete(y.routes.channels.pin(e,t),s?{reason:s}:void 0),triggerTypingIndicator:async e=>await y.post(y.routes.channels.typing(e)),upsertGlobalApplicationCommands:async e=>await y.put(y.routes.interactions.commands.commands(y.applicationId),e),upsertGuildApplicationCommands:async(e,t)=>await y.put(y.routes.interactions.commands.guilds.all(y.applicationId,e),t)};return y}
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9tYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9ucyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY29uc3QtYXNzaWduICovXG5pbXBvcnQgeyBJbnRlcmFjdGlvblJlc3BvbnNlVHlwZXMgfSBmcm9tICdAZGlzY29yZGVuby90eXBlcydcbmltcG9ydCB7XG4gIGNhbGN1bGF0ZUJpdHMsXG4gIGNhbWVsaXplLFxuICBjYW1lbFRvU25ha2VDYXNlLFxuICBkZWxheSxcbiAgZmluZEZpbGVzLFxuICBnZXRCb3RJZEZyb21Ub2tlbixcbiAgaXNHZXRNZXNzYWdlc0FmdGVyLFxuICBpc0dldE1lc3NhZ2VzQXJvdW5kLFxuICBpc0dldE1lc3NhZ2VzQmVmb3JlLFxuICBpc0dldE1lc3NhZ2VzTGltaXQsXG4gIGxvZ2dlcixcbiAgcHJvY2Vzc1JlYWN0aW9uU3RyaW5nLFxuICB1cmxUb0Jhc2U2NCxcbn0gZnJvbSAnQGRpc2NvcmRlbm8vdXRpbHMnXG5cbmltcG9ydCB7IGNyZWF0ZUludmFsaWRSZXF1ZXN0QnVja2V0IH0gZnJvbSAnLi9pbnZhbGlkQnVja2V0LmpzJ1xuaW1wb3J0IHsgUXVldWUgfSBmcm9tICcuL3F1ZXVlLmpzJ1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zLFxuICBBdExlYXN0T25lLFxuICBCaWdTdHJpbmcsXG4gIENhbWVsaXplLFxuICBDcmVhdGVBcHBsaWNhdGlvbkNvbW1hbmQsXG4gIENyZWF0ZUF1dG9Nb2RlcmF0aW9uUnVsZU9wdGlvbnMsXG4gIENyZWF0ZUNoYW5uZWxJbnZpdGUsXG4gIENyZWF0ZUZvcnVtUG9zdFdpdGhNZXNzYWdlLFxuICBDcmVhdGVHdWlsZCxcbiAgQ3JlYXRlR3VpbGRDaGFubmVsLFxuICBDcmVhdGVHdWlsZEVtb2ppLFxuICBDcmVhdGVHdWlsZEZyb21UZW1wbGF0ZSxcbiAgQ3JlYXRlR3VpbGRSb2xlLFxuICBDcmVhdGVHdWlsZFN0aWNrZXJPcHRpb25zLFxuICBDcmVhdGVNZXNzYWdlT3B0aW9ucyxcbiAgQ3JlYXRlU2NoZWR1bGVkRXZlbnQsXG4gIENyZWF0ZVN0YWdlSW5zdGFuY2UsXG4gIERlbGV0ZVdlYmhvb2tNZXNzYWdlT3B0aW9ucyxcbiAgRGlzY29yZEFjdGl2ZVRocmVhZHMsXG4gIERpc2NvcmRBcHBsaWNhdGlvbixcbiAgRGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZCxcbiAgRGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zLFxuICBEaXNjb3JkQXJjaGl2ZWRUaHJlYWRzLFxuICBEaXNjb3JkQXVkaXRMb2csXG4gIERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGUsXG4gIERpc2NvcmRCYW4sXG4gIERpc2NvcmRDaGFubmVsLFxuICBEaXNjb3JkRW1vamksXG4gIERpc2NvcmRGb2xsb3dBbm5vdW5jZW1lbnRDaGFubmVsLFxuICBEaXNjb3JkRm9sbG93ZWRDaGFubmVsLFxuICBEaXNjb3JkR2V0R2F0ZXdheUJvdCxcbiAgRGlzY29yZEd1aWxkLFxuICBEaXNjb3JkR3VpbGRQcmV2aWV3LFxuICBEaXNjb3JkR3VpbGRXaWRnZXQsXG4gIERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzLFxuICBEaXNjb3JkSW50ZWdyYXRpb24sXG4gIERpc2NvcmRJbnZpdGUsXG4gIERpc2NvcmRJbnZpdGVNZXRhZGF0YSxcbiAgRGlzY29yZExpc3RBY3RpdmVUaHJlYWRzLFxuICBEaXNjb3JkTGlzdEFyY2hpdmVkVGhyZWFkcyxcbiAgRGlzY29yZE1lbWJlcixcbiAgRGlzY29yZE1lbWJlcldpdGhVc2VyLFxuICBEaXNjb3JkTWVzc2FnZSxcbiAgRGlzY29yZE1vZGlmeUd1aWxkV2VsY29tZVNjcmVlbixcbiAgRGlzY29yZFBydW5lZENvdW50LFxuICBEaXNjb3JkUm9sZSxcbiAgRGlzY29yZFNjaGVkdWxlZEV2ZW50LFxuICBEaXNjb3JkU3RhZ2VJbnN0YW5jZSxcbiAgRGlzY29yZFN0aWNrZXIsXG4gIERpc2NvcmRTdGlja2VyUGFjayxcbiAgRGlzY29yZFRlbXBsYXRlLFxuICBEaXNjb3JkVGhyZWFkTWVtYmVyLFxuICBEaXNjb3JkVXNlcixcbiAgRGlzY29yZFZhbml0eVVybCxcbiAgRGlzY29yZFZvaWNlUmVnaW9uLFxuICBEaXNjb3JkV2ViaG9vayxcbiAgRGlzY29yZFdlbGNvbWVTY3JlZW4sXG4gIEVkaXRBdXRvTW9kZXJhdGlvblJ1bGVPcHRpb25zLFxuICBFZGl0Q2hhbm5lbFBlcm1pc3Npb25PdmVycmlkZXNPcHRpb25zLFxuICBFZGl0R3VpbGRSb2xlLFxuICBFZGl0R3VpbGRTdGlja2VyT3B0aW9ucyxcbiAgRWRpdE1lc3NhZ2UsXG4gIEVkaXRPd25Wb2ljZVN0YXRlLFxuICBFZGl0U2NoZWR1bGVkRXZlbnQsXG4gIEVkaXRTdGFnZUluc3RhbmNlT3B0aW9ucyxcbiAgRWRpdFVzZXJWb2ljZVN0YXRlLFxuICBFeGVjdXRlV2ViaG9vayxcbiAgR2V0QmFucyxcbiAgR2V0R3VpbGRBdWRpdExvZyxcbiAgR2V0R3VpbGRQcnVuZUNvdW50UXVlcnksXG4gIEdldEludml0ZSxcbiAgR2V0TWVzc2FnZXNPcHRpb25zLFxuICBHZXRSZWFjdGlvbnMsXG4gIEdldFNjaGVkdWxlZEV2ZW50cyxcbiAgR2V0U2NoZWR1bGVkRXZlbnRVc2VycyxcbiAgR2V0V2ViaG9va01lc3NhZ2VPcHRpb25zLFxuICBJbnRlcmFjdGlvbkNhbGxiYWNrRGF0YSxcbiAgSW50ZXJhY3Rpb25SZXNwb25zZSxcbiAgTGlzdEFyY2hpdmVkVGhyZWFkcyxcbiAgTGlzdEd1aWxkTWVtYmVycyxcbiAgTWZhTGV2ZWxzLFxuICBNb2RpZnlDaGFubmVsLFxuICBNb2RpZnlHdWlsZCxcbiAgTW9kaWZ5R3VpbGRDaGFubmVsUG9zaXRpb25zLFxuICBNb2RpZnlHdWlsZEVtb2ppLFxuICBNb2RpZnlSb2xlUG9zaXRpb25zLFxuICBNb2RpZnlXZWJob29rLFxuICBTZWFyY2hNZW1iZXJzLFxuICBTdGFydFRocmVhZFdpdGhNZXNzYWdlLFxuICBTdGFydFRocmVhZFdpdGhvdXRNZXNzYWdlLFxuICBXaXRoUmVhc29uLFxufSBmcm9tICdAZGlzY29yZGVuby90eXBlcydcbmltcG9ydCB0eXBlIHsgSW52YWxpZFJlcXVlc3RCdWNrZXQgfSBmcm9tICcuL2ludmFsaWRCdWNrZXQuanMnXG5cbi8vIFRPRE86IG1ha2UgZHluYW1pYyBiYXNlZCBvbiBwYWNrYWdlLmpzb24gZmlsZVxuY29uc3QgdmVyc2lvbiA9ICcxOS4wLjAtYWxwaGEuMSdcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlc3RNYW5hZ2VyKG9wdGlvbnM6IENyZWF0ZVJlc3RNYW5hZ2VyT3B0aW9ucyk6IFJlc3RNYW5hZ2VyIHtcbiAgLy8gRmFsc3kgdG9rZW4gc3RyaW5nIGNoZWNrXG4gIGlmICghb3B0aW9ucy50b2tlbikgdGhyb3cgbmV3IEVycm9yKCdZb3UgbXVzdCBwcm92aWRlIGEgdmFsaWQgdG9rZW4uJylcblxuICBjb25zdCByZXN0OiBSZXN0TWFuYWdlciA9IHtcbiAgICB0b2tlbjogb3B0aW9ucy50b2tlbixcbiAgICBhcHBsaWNhdGlvbklkOiBvcHRpb25zLmFwcGxpY2F0aW9uSWQgPyBCaWdJbnQob3B0aW9ucy5hcHBsaWNhdGlvbklkKSA6IGdldEJvdElkRnJvbVRva2VuKG9wdGlvbnMudG9rZW4pLFxuICAgIHZlcnNpb246IG9wdGlvbnMudmVyc2lvbiA/PyAxMCxcbiAgICBiYXNlVXJsOiBvcHRpb25zLmJhc2VVcmwgPz8gJ2h0dHBzOi8vZGlzY29yZC5jb20vYXBpJyxcbiAgICBtYXhSZXRyeUNvdW50OiBJbmZpbml0eSxcbiAgICBnbG9iYWxseVJhdGVMaW1pdGVkOiBmYWxzZSxcbiAgICBwcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRoczogZmFsc2UsXG4gICAgZGVsZXRlUXVldWVEZWxheTogNjAwMDAsXG4gICAgcXVldWVzOiBuZXcgTWFwKCksXG4gICAgcmF0ZUxpbWl0ZWRQYXRoczogbmV3IE1hcCgpLFxuICAgIGludmFsaWRCdWNrZXQ6IGNyZWF0ZUludmFsaWRSZXF1ZXN0QnVja2V0KHt9KSxcblxuICAgIHJvdXRlczoge1xuICAgICAgd2ViaG9va3M6IHtcbiAgICAgICAgaWQ6ICh3ZWJob29rSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC93ZWJob29rcy8ke3dlYmhvb2tJZH1gXG4gICAgICAgIH0sXG4gICAgICAgIG1lc3NhZ2U6ICh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICBsZXQgdXJsID0gYC93ZWJob29rcy8ke3dlYmhvb2tJZH0vJHt0b2tlbn0vbWVzc2FnZXMvJHttZXNzYWdlSWR9P2BcblxuICAgICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy50aHJlYWRJZCkgdXJsICs9IGB0aHJlYWRfaWQ9JHtvcHRpb25zLnRocmVhZElkfWBcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgIH0sXG4gICAgICAgIG9yaWdpbmFsOiAod2ViaG9va0lkLCB0b2tlbiwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgIGxldCB1cmwgPSBgL3dlYmhvb2tzLyR7d2ViaG9va0lkfS8ke3Rva2VufS9tZXNzYWdlcy9Ab3JpZ2luYWw/YFxuXG4gICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnRocmVhZElkKSB1cmwgKz0gYHRocmVhZF9pZD0ke29wdGlvbnMudGhyZWFkSWR9YFxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB1cmxcbiAgICAgICAgfSxcbiAgICAgICAgd2ViaG9vazogKHdlYmhvb2tJZCwgdG9rZW4sIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICBsZXQgdXJsID0gYC93ZWJob29rcy8ke3dlYmhvb2tJZH0vJHt0b2tlbn0/YFxuXG4gICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zPy53YWl0ICE9PSB1bmRlZmluZWQpIHVybCArPSBgd2FpdD0ke29wdGlvbnMud2FpdC50b1N0cmluZygpfWBcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnRocmVhZElkKSB1cmwgKz0gYHRocmVhZF9pZD0ke29wdGlvbnMudGhyZWFkSWR9YFxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB1cmxcbiAgICAgICAgfSxcbiAgICAgIH0sXG5cbiAgICAgIC8vIE1pc2NlbGxhbmVvdXMgRW5kcG9pbnRzXG4gICAgICBzZXNzaW9uSW5mbzogKCkgPT4gcmVzdC5yb3V0ZXMuZ2F0ZXdheUJvdCgpLFxuXG4gICAgICAvLyBDaGFubmVsIEVuZHBvaW50c1xuICAgICAgY2hhbm5lbHM6IHtcbiAgICAgICAgYnVsazogKGNoYW5uZWxJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS9tZXNzYWdlcy9idWxrLWRlbGV0ZWBcbiAgICAgICAgfSxcbiAgICAgICAgZG06ICgpID0+IHtcbiAgICAgICAgICByZXR1cm4gJy91c2Vycy9AbWUvY2hhbm5lbHMnXG4gICAgICAgIH0sXG4gICAgICAgIHBpbjogKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L3BpbnMvJHttZXNzYWdlSWR9YFxuICAgICAgICB9LFxuICAgICAgICBwaW5zOiAoY2hhbm5lbElkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L3BpbnNgXG4gICAgICAgIH0sXG4gICAgICAgIHJlYWN0aW9uczoge1xuICAgICAgICAgIGJvdDogKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCBlbW9qaSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L21lc3NhZ2VzLyR7bWVzc2FnZUlkfS9yZWFjdGlvbnMvJHtlbmNvZGVVUklDb21wb25lbnQoZW1vamkpfS9AbWVgXG4gICAgICAgICAgfSxcbiAgICAgICAgICB1c2VyOiAoY2hhbm5lbElkLCBtZXNzYWdlSWQsIGVtb2ppLCB1c2VySWQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS9tZXNzYWdlcy8ke21lc3NhZ2VJZH0vcmVhY3Rpb25zLyR7ZW5jb2RlVVJJQ29tcG9uZW50KGVtb2ppKX0vJHt1c2VySWR9YFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWxsOiAoY2hhbm5lbElkLCBtZXNzYWdlSWQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS9tZXNzYWdlcy8ke21lc3NhZ2VJZH0vcmVhY3Rpb25zYFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZW1vamk6IChjaGFubmVsSWQsIG1lc3NhZ2VJZCwgZW1vamksIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGxldCB1cmwgPSBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS9tZXNzYWdlcy8ke21lc3NhZ2VJZH0vcmVhY3Rpb25zLyR7ZW5jb2RlVVJJQ29tcG9uZW50KGVtb2ppKX0/YFxuXG4gICAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLmFmdGVyKSB1cmwgKz0gYGFmdGVyPSR7b3B0aW9ucy5hZnRlcn1gXG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtdGVtcGxhdGUtZXhwcmVzc2lvbnNcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMubGltaXQpIHVybCArPSBgJmxpbWl0PSR7b3B0aW9ucy5saW1pdH1gXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB1cmxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1lc3NhZ2U6IChjaGFubmVsSWQsIG1lc3NhZ2VJZCwgZW1vamksIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGxldCB1cmwgPSBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS9tZXNzYWdlcy8ke21lc3NhZ2VJZH0vcmVhY3Rpb25zLyR7ZW5jb2RlVVJJQ29tcG9uZW50KGVtb2ppKX0/YFxuXG4gICAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLmFmdGVyKSB1cmwgKz0gYGFmdGVyPSR7b3B0aW9ucy5hZnRlcn1gXG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtdGVtcGxhdGUtZXhwcmVzc2lvbnNcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMubGltaXQpIHVybCArPSBgJmxpbWl0PSR7b3B0aW9ucy5saW1pdH1gXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB1cmxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB3ZWJob29rczogKGNoYW5uZWxJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS93ZWJob29rc2BcbiAgICAgICAgfSxcblxuICAgICAgICBjaGFubmVsOiAoY2hhbm5lbElkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9YFxuICAgICAgICB9LFxuXG4gICAgICAgIGZvbGxvdzogKGNoYW5uZWxJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS9mb2xsb3dlcnNgXG4gICAgICAgIH0sXG5cbiAgICAgICAgZm9ydW06IChjaGFubmVsSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vdGhyZWFkcz9oYXNfbWVzc2FnZT10cnVlYFxuICAgICAgICB9LFxuXG4gICAgICAgIGludml0ZXM6IChjaGFubmVsSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vaW52aXRlc2BcbiAgICAgICAgfSxcblxuICAgICAgICBtZXNzYWdlOiAoY2hhbm5lbElkLCBtZXNzYWdlSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vbWVzc2FnZXMvJHttZXNzYWdlSWR9YFxuICAgICAgICB9LFxuXG4gICAgICAgIG1lc3NhZ2VzOiAoY2hhbm5lbElkLCBvcHRpb25zPzogR2V0TWVzc2FnZXNPcHRpb25zKSA9PiB7XG4gICAgICAgICAgbGV0IHVybCA9IGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L21lc3NhZ2VzP2BcblxuICAgICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICBpZiAoaXNHZXRNZXNzYWdlc0FmdGVyKG9wdGlvbnMpICYmIG9wdGlvbnMuYWZ0ZXIpIHtcbiAgICAgICAgICAgICAgdXJsICs9IGBhZnRlcj0ke29wdGlvbnMuYWZ0ZXJ9YFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzR2V0TWVzc2FnZXNCZWZvcmUob3B0aW9ucykgJiYgb3B0aW9ucy5iZWZvcmUpIHtcbiAgICAgICAgICAgICAgdXJsICs9IGAmYmVmb3JlPSR7b3B0aW9ucy5iZWZvcmV9YFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzR2V0TWVzc2FnZXNBcm91bmQob3B0aW9ucykgJiYgb3B0aW9ucy5hcm91bmQpIHtcbiAgICAgICAgICAgICAgdXJsICs9IGAmYXJvdW5kPSR7b3B0aW9ucy5hcm91bmR9YFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzR2V0TWVzc2FnZXNMaW1pdChvcHRpb25zKSAmJiBvcHRpb25zLmxpbWl0KSB7XG4gICAgICAgICAgICAgIHVybCArPSBgJmxpbWl0PSR7b3B0aW9ucy5saW1pdH1gXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICB9LFxuXG4gICAgICAgIG92ZXJ3cml0ZTogKGNoYW5uZWxJZCwgb3ZlcndyaXRlSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vcGVybWlzc2lvbnMvJHtvdmVyd3JpdGVJZH1gXG4gICAgICAgIH0sXG5cbiAgICAgICAgY3Jvc3Nwb3N0OiAoY2hhbm5lbElkLCBtZXNzYWdlSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vbWVzc2FnZXMvJHttZXNzYWdlSWR9L2Nyb3NzcG9zdGBcbiAgICAgICAgfSxcblxuICAgICAgICBzdGFnZXM6ICgpID0+IHtcbiAgICAgICAgICByZXR1cm4gJy9zdGFnZS1pbnN0YW5jZXMnXG4gICAgICAgIH0sXG5cbiAgICAgICAgc3RhZ2U6IChjaGFubmVsSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9zdGFnZS1pbnN0YW5jZXMvJHtjaGFubmVsSWR9YFxuICAgICAgICB9LFxuXG4gICAgICAgIC8vIFRocmVhZCBFbmRwb2ludHNcbiAgICAgICAgdGhyZWFkczoge1xuICAgICAgICAgIG1lc3NhZ2U6IChjaGFubmVsSWQsIG1lc3NhZ2VJZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L21lc3NhZ2VzLyR7bWVzc2FnZUlkfS90aHJlYWRzYFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWxsOiAoY2hhbm5lbElkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vdGhyZWFkc2BcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFjdGl2ZTogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L3RocmVhZHMvYWN0aXZlYFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWVtYmVyczogKGNoYW5uZWxJZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L3RocmVhZC1tZW1iZXJzYFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWU6IChjaGFubmVsSWQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS90aHJlYWQtbWVtYmVycy9AbWVgXG4gICAgICAgICAgfSxcbiAgICAgICAgICB1c2VyOiAoY2hhbm5lbElkLCB1c2VySWQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS90aHJlYWQtbWVtYmVycy8ke3VzZXJJZH1gXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhcmNoaXZlZDogKGNoYW5uZWxJZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L3RocmVhZHMvYXJjaGl2ZWRgXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwdWJsaWM6IChjaGFubmVsSWQsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGxldCB1cmwgPSBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS90aHJlYWRzL2FyY2hpdmVkL3B1YmxpYz9gXG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLmJlZm9yZSkge1xuICAgICAgICAgICAgICAgIHVybCArPSBgYmVmb3JlPSR7bmV3IERhdGUob3B0aW9ucy5iZWZvcmUpLnRvSVNPU3RyaW5nKCl9YFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtdGVtcGxhdGUtZXhwcmVzc2lvbnNcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMubGltaXQpIHVybCArPSBgJmxpbWl0PSR7b3B0aW9ucy5saW1pdH1gXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB1cmxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHByaXZhdGU6IChjaGFubmVsSWQsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGxldCB1cmwgPSBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS90aHJlYWRzL2FyY2hpdmVkL3ByaXZhdGU/YFxuXG4gICAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgICBpZiAob3B0aW9ucy5iZWZvcmUpIHtcbiAgICAgICAgICAgICAgICB1cmwgKz0gYGJlZm9yZT0ke25ldyBEYXRlKG9wdGlvbnMuYmVmb3JlKS50b0lTT1N0cmluZygpfWBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLmxpbWl0KSB1cmwgKz0gYCZsaW1pdD0ke29wdGlvbnMubGltaXR9YFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBqb2luZWQ6IChjaGFubmVsSWQsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGxldCB1cmwgPSBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS91c2Vycy9AbWUvdGhyZWFkcy9hcmNoaXZlZC9wcml2YXRlP2BcblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYmVmb3JlKSB7XG4gICAgICAgICAgICAgICAgdXJsICs9IGBiZWZvcmU9JHtuZXcgRGF0ZShvcHRpb25zLmJlZm9yZSkudG9JU09TdHJpbmcoKX1gXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgICBpZiAob3B0aW9ucy5saW1pdCkgdXJsICs9IGAmbGltaXQ9JHtvcHRpb25zLmxpbWl0fWBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG5cbiAgICAgICAgdHlwaW5nOiAoY2hhbm5lbElkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L3R5cGluZ2BcbiAgICAgICAgfSxcbiAgICAgIH0sXG5cbiAgICAgIC8vIEd1aWxkIEVuZHBvaW50c1xuICAgICAgZ3VpbGRzOiB7XG4gICAgICAgIGFsbDogKCkgPT4ge1xuICAgICAgICAgIHJldHVybiAnL2d1aWxkcydcbiAgICAgICAgfSxcbiAgICAgICAgYXVkaXRsb2dzOiAoZ3VpbGRJZCwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgIGxldCB1cmwgPSBgL2d1aWxkcy8ke2d1aWxkSWR9L2F1ZGl0LWxvZ3M/YFxuXG4gICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtdGVtcGxhdGUtZXhwcmVzc2lvbnNcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmFjdGlvblR5cGUpIHVybCArPSBgYWN0aW9uX3R5cGU9JHtvcHRpb25zLmFjdGlvblR5cGV9YFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuYmVmb3JlKSB1cmwgKz0gYCZiZWZvcmU9JHtvcHRpb25zLmJlZm9yZX1gXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5saW1pdCkgdXJsICs9IGAmbGltaXQ9JHtvcHRpb25zLmxpbWl0fWBcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtdGVtcGxhdGUtZXhwcmVzc2lvbnNcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnVzZXJJZCkgdXJsICs9IGAmdXNlcl9pZD0ke29wdGlvbnMudXNlcklkfWBcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgIH0sXG4gICAgICAgIGF1dG9tb2Q6IHtcbiAgICAgICAgICBydWxlOiAoZ3VpbGRJZCwgcnVsZUlkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS9hdXRvLW1vZGVyYXRpb24vcnVsZXMvJHtydWxlSWR9YFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcnVsZXM6IChndWlsZElkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS9hdXRvLW1vZGVyYXRpb24vcnVsZXNgXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgY2hhbm5lbHM6IChndWlsZElkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vY2hhbm5lbHNgXG4gICAgICAgIH0sXG4gICAgICAgIGVtb2ppOiAoZ3VpbGRJZCwgZW1vamlJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L2Vtb2ppcy8ke2Vtb2ppSWR9YFxuICAgICAgICB9LFxuICAgICAgICBlbW9qaXM6IChndWlsZElkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vZW1vamlzYFxuICAgICAgICB9LFxuICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICBldmVudHM6IChndWlsZElkLCB3aXRoVXNlckNvdW50PzogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgbGV0IHVybCA9IGAvZ3VpbGRzLyR7Z3VpbGRJZH0vc2NoZWR1bGVkLWV2ZW50cz9gXG5cbiAgICAgICAgICAgIGlmICh3aXRoVXNlckNvdW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgdXJsICs9IGB3aXRoX3VzZXJfY291bnQ9JHt3aXRoVXNlckNvdW50LnRvU3RyaW5nKCl9YFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZXZlbnQ6IChndWlsZElkLCBldmVudElkLCB3aXRoVXNlckNvdW50PzogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgbGV0IHVybCA9IGAvZ3VpbGRzLyR7Z3VpbGRJZH0vc2NoZWR1bGVkLWV2ZW50cy8ke2V2ZW50SWR9YFxuXG4gICAgICAgICAgICBpZiAod2l0aFVzZXJDb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHVybCArPSBgd2l0aF91c2VyX2NvdW50PSR7d2l0aFVzZXJDb3VudC50b1N0cmluZygpfWBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdXNlcnM6IChndWlsZElkLCBldmVudElkLCBvcHRpb25zPzogR2V0U2NoZWR1bGVkRXZlbnRVc2VycykgPT4ge1xuICAgICAgICAgICAgbGV0IHVybCA9IGAvZ3VpbGRzLyR7Z3VpbGRJZH0vc2NoZWR1bGVkLWV2ZW50cy8ke2V2ZW50SWR9L3VzZXJzP2BcblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgICBpZiAob3B0aW9ucy5saW1pdCAhPT0gdW5kZWZpbmVkKSB1cmwgKz0gYGxpbWl0PSR7b3B0aW9ucy5saW1pdH1gXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLndpdGhNZW1iZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtdGVtcGxhdGUtZXhwcmVzc2lvbnNcbiAgICAgICAgICAgICAgICB1cmwgKz0gYCZ3aXRoX21lbWJlcj0ke29wdGlvbnMud2l0aE1lbWJlci50b1N0cmluZygpfWBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLmFmdGVyICE9PSB1bmRlZmluZWQpIHVybCArPSBgJmFmdGVyPSR7b3B0aW9ucy5hZnRlcn1gXG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtdGVtcGxhdGUtZXhwcmVzc2lvbnNcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYmVmb3JlICE9PSB1bmRlZmluZWQpIHVybCArPSBgJmJlZm9yZT0ke29wdGlvbnMuYmVmb3JlfWBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGd1aWxkKGd1aWxkSWQsIHdpdGhDb3VudHMpIHtcbiAgICAgICAgICBsZXQgdXJsID0gYC9ndWlsZHMvJHtndWlsZElkfT9gXG5cbiAgICAgICAgICBpZiAod2l0aENvdW50cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB1cmwgKz0gYHdpdGhfY291bnRzPSR7d2l0aENvdW50cy50b1N0cmluZygpfWBcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgIH0sXG4gICAgICAgIGludGVncmF0aW9uKGd1aWxkSWQsIGludGVncmF0aW9uSWQpIHtcbiAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS9pbnRlZ3JhdGlvbnMvJHtpbnRlZ3JhdGlvbklkfWBcbiAgICAgICAgfSxcbiAgICAgICAgaW50ZWdyYXRpb25zOiAoZ3VpbGRJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L2ludGVncmF0aW9ucz9pbmNsdWRlX2FwcGxpY2F0aW9ucz10cnVlYFxuICAgICAgICB9LFxuICAgICAgICBpbnZpdGUoaW52aXRlQ29kZSwgb3B0aW9ucykge1xuICAgICAgICAgIGxldCB1cmwgPSBgL2ludml0ZXMvJHtpbnZpdGVDb2RlfT9gXG5cbiAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMud2l0aENvdW50cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtdGVtcGxhdGUtZXhwcmVzc2lvbnNcbiAgICAgICAgICAgICAgdXJsICs9IGB3aXRoX2NvdW50cz0ke29wdGlvbnMud2l0aENvdW50cy50b1N0cmluZygpfWBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRpb25zLndpdGhFeHBpcmF0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgICB1cmwgKz0gYCZ3aXRoX2V4cGlyYXRpb249JHtvcHRpb25zLndpdGhFeHBpcmF0aW9uLnRvU3RyaW5nKCl9YFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuc2NoZWR1bGVkRXZlbnRJZCkge1xuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgICAgICAgICAgIHVybCArPSBgJmd1aWxkX3NjaGVkdWxlZF9ldmVudF9pZD0ke29wdGlvbnMuc2NoZWR1bGVkRXZlbnRJZH1gXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICB9LFxuICAgICAgICBpbnZpdGVzOiAoZ3VpbGRJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L2ludml0ZXNgXG4gICAgICAgIH0sXG4gICAgICAgIGxlYXZlOiAoZ3VpbGRJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL3VzZXJzL0BtZS9ndWlsZHMvJHtndWlsZElkfWBcbiAgICAgICAgfSxcbiAgICAgICAgbWVtYmVyczoge1xuICAgICAgICAgIGJhbjogKGd1aWxkSWQsIHVzZXJJZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vYmFucy8ke3VzZXJJZH1gXG4gICAgICAgICAgfSxcbiAgICAgICAgICBiYW5zOiAoZ3VpbGRJZCwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgbGV0IHVybCA9IGAvZ3VpbGRzLyR7Z3VpbGRJZH0vYmFucz9gXG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtdGVtcGxhdGUtZXhwcmVzc2lvbnNcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMubGltaXQpIHVybCArPSBgbGltaXQ9JHtvcHRpb25zLmxpbWl0fWBcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgICBpZiAob3B0aW9ucy5hZnRlcikgdXJsICs9IGAmYWZ0ZXI9JHtvcHRpb25zLmFmdGVyfWBcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgICBpZiAob3B0aW9ucy5iZWZvcmUpIHVybCArPSBgJmJlZm9yZT0ke29wdGlvbnMuYmVmb3JlfWBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYm90OiAoZ3VpbGRJZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vbWVtYmVycy9AbWVgXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtZW1iZXI6IChndWlsZElkLCB1c2VySWQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L21lbWJlcnMvJHt1c2VySWR9YFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWVtYmVyczogKGd1aWxkSWQsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGxldCB1cmwgPSBgL2d1aWxkcy8ke2d1aWxkSWR9L21lbWJlcnM/YFxuXG4gICAgICAgICAgICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtdGVtcGxhdGUtZXhwcmVzc2lvbnNcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMubGltaXQpIHVybCArPSBgbGltaXQ9JHtvcHRpb25zLmxpbWl0fWBcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgICBpZiAob3B0aW9ucy5hZnRlcikgdXJsICs9IGAmYWZ0ZXI9JHtvcHRpb25zLmFmdGVyfWBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2VhcmNoOiAoZ3VpbGRJZCwgcXVlcnksIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGxldCB1cmwgPSBgL2d1aWxkcy8ke2d1aWxkSWR9L21lbWJlcnMvc2VhcmNoP3F1ZXJ5PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHF1ZXJ5KX1gXG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLmxpbWl0ICE9PSB1bmRlZmluZWQpIHVybCArPSBgJmxpbWl0PSR7b3B0aW9ucy5saW1pdH1gXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB1cmxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHBydW5lOiAoZ3VpbGRJZCwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgbGV0IHVybCA9IGAvZ3VpbGRzLyR7Z3VpbGRJZH0vcHJ1bmU/YFxuXG4gICAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLmRheXMpIHVybCArPSBgZGF5cz0ke29wdGlvbnMuZGF5c31gXG4gICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMuaW5jbHVkZVJvbGVzKSkge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtdGVtcGxhdGUtZXhwcmVzc2lvbnNcbiAgICAgICAgICAgICAgICB1cmwgKz0gYCZpbmNsdWRlX3JvbGVzPSR7b3B0aW9ucy5pbmNsdWRlUm9sZXMuam9pbignLCcpfWBcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmluY2x1ZGVSb2xlcykge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtdGVtcGxhdGUtZXhwcmVzc2lvbnNcbiAgICAgICAgICAgICAgICB1cmwgKz0gYCZpbmNsdWRlX3JvbGVzPSR7b3B0aW9ucy5pbmNsdWRlUm9sZXN9YFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB1cmxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBtZmE6IChndWlsZElkKSA9PiBgL2d1aWxkcy8ke2d1aWxkSWR9L21mYWAsXG4gICAgICAgIHByZXZpZXc6IChndWlsZElkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vcHJldmlld2BcbiAgICAgICAgfSxcbiAgICAgICAgcHJ1bmU6IChndWlsZElkLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgbGV0IHVybCA9IGAvZ3VpbGRzLyR7Z3VpbGRJZH0vcHJ1bmU/YFxuXG4gICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtdGVtcGxhdGUtZXhwcmVzc2lvbnNcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmRheXMpIHVybCArPSBgZGF5cz0ke29wdGlvbnMuZGF5c31gXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zLmluY2x1ZGVSb2xlcykpIHtcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgICB1cmwgKz0gYCZpbmNsdWRlX3JvbGVzPSR7b3B0aW9ucy5pbmNsdWRlUm9sZXMuam9pbignLCcpfWBcbiAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5pbmNsdWRlUm9sZXMpIHtcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgICB1cmwgKz0gYCZpbmNsdWRlX3JvbGVzPSR7b3B0aW9ucy5pbmNsdWRlUm9sZXN9YFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB1cmxcbiAgICAgICAgfSxcbiAgICAgICAgcm9sZXM6IHtcbiAgICAgICAgICBvbmU6IChndWlsZElkLCByb2xlSWQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L3JvbGVzLyR7cm9sZUlkfWBcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFsbDogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L3JvbGVzYFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWVtYmVyOiAoZ3VpbGRJZCwgbWVtYmVySWQsIHJvbGVJZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vbWVtYmVycy8ke21lbWJlcklkfS9yb2xlcy8ke3JvbGVJZH1gXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc3RpY2tlcnM6IChndWlsZElkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vc3RpY2tlcnNgXG4gICAgICAgIH0sXG4gICAgICAgIHN0aWNrZXI6IChndWlsZElkLCBzdGlja2VySWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS9zdGlja2Vycy8ke3N0aWNrZXJJZH1gXG4gICAgICAgIH0sXG4gICAgICAgIHZvaWNlOiAoZ3VpbGRJZCwgdXNlcklkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vdm9pY2Utc3RhdGVzLyR7dXNlcklkID8/ICdAbWUnfWBcbiAgICAgICAgfSxcbiAgICAgICAgdGVtcGxhdGVzOiB7XG4gICAgICAgICAgY29kZTogKGNvZGUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBgL2d1aWxkcy90ZW1wbGF0ZXMvJHtjb2RlfWBcbiAgICAgICAgICB9LFxuICAgICAgICAgIGd1aWxkOiAoZ3VpbGRJZCwgY29kZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vdGVtcGxhdGVzLyR7Y29kZX1gXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhbGw6IChndWlsZElkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS90ZW1wbGF0ZXNgXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgdmFuaXR5OiAoZ3VpbGRJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L3Zhbml0eS11cmxgXG4gICAgICAgIH0sXG4gICAgICAgIHJlZ2lvbnM6IChndWlsZElkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vcmVnaW9uc2BcbiAgICAgICAgfSxcbiAgICAgICAgd2ViaG9va3M6IChndWlsZElkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vd2ViaG9va3NgXG4gICAgICAgIH0sXG4gICAgICAgIHdlbGNvbWU6IChndWlsZElkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vd2VsY29tZS1zY3JlZW5gXG4gICAgICAgIH0sXG4gICAgICAgIHdpZGdldDogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS93aWRnZXRgXG4gICAgICAgIH0sXG4gICAgICAgIHdpZGdldEpzb246IChndWlsZElkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vd2lkZ2V0Lmpzb25gXG4gICAgICAgIH0sXG4gICAgICB9LFxuXG4gICAgICBzdGlja2VyOiAoc3RpY2tlcklkOiBCaWdTdHJpbmcpID0+IHtcbiAgICAgICAgcmV0dXJuIGAvc3RpY2tlcnMvJHtzdGlja2VySWR9YFxuICAgICAgfSxcblxuICAgICAgcmVnaW9uczogKCkgPT4ge1xuICAgICAgICByZXR1cm4gJy92b2ljZS9yZWdpb25zJ1xuICAgICAgfSxcblxuICAgICAgLy8gSW50ZXJhY3Rpb24gRW5kcG9pbnRzXG4gICAgICBpbnRlcmFjdGlvbnM6IHtcbiAgICAgICAgY29tbWFuZHM6IHtcbiAgICAgICAgICAvLyBBcHBsaWNhdGlvbiBFbmRwb2ludHNcbiAgICAgICAgICBjb21tYW5kczogKGFwcGxpY2F0aW9uSWQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBgL2FwcGxpY2F0aW9ucy8ke2FwcGxpY2F0aW9uSWR9L2NvbW1hbmRzYFxuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBndWlsZHM6IHtcbiAgICAgICAgICAgIGFsbChhcHBsaWNhdGlvbklkLCBndWlsZElkKSB7XG4gICAgICAgICAgICAgIHJldHVybiBgL2FwcGxpY2F0aW9ucy8ke2FwcGxpY2F0aW9uSWR9L2d1aWxkcy8ke2d1aWxkSWR9L2NvbW1hbmRzYFxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgb25lKGFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCwgd2l0aExvY2FsaXphdGlvbnMpIHtcbiAgICAgICAgICAgICAgbGV0IHVybCA9IGAvYXBwbGljYXRpb25zLyR7YXBwbGljYXRpb25JZH0vZ3VpbGRzLyR7Z3VpbGRJZH0vY29tbWFuZHMvJHtjb21tYW5kSWR9P2BcblxuICAgICAgICAgICAgICBpZiAod2l0aExvY2FsaXphdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHVybCArPSBgd2l0aF9sb2NhbGl6YXRpb25zPSR7d2l0aExvY2FsaXphdGlvbnMudG9TdHJpbmcoKX1gXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGVybWlzc2lvbnM6IChhcHBsaWNhdGlvbklkLCBndWlsZElkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYC9hcHBsaWNhdGlvbnMvJHthcHBsaWNhdGlvbklkfS9ndWlsZHMvJHtndWlsZElkfS9jb21tYW5kcy9wZXJtaXNzaW9uc2BcbiAgICAgICAgICB9LFxuICAgICAgICAgIHBlcm1pc3Npb246IChhcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBgL2FwcGxpY2F0aW9ucy8ke2FwcGxpY2F0aW9uSWR9L2d1aWxkcy8ke2d1aWxkSWR9L2NvbW1hbmRzLyR7Y29tbWFuZElkfS9wZXJtaXNzaW9uc2BcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbW1hbmQ6IChhcHBsaWNhdGlvbklkLCBjb21tYW5kSWQsIHdpdGhMb2NhbGl6YXRpb25zKSA9PiB7XG4gICAgICAgICAgICBsZXQgdXJsID0gYC9hcHBsaWNhdGlvbnMvJHthcHBsaWNhdGlvbklkfS9jb21tYW5kcy8ke2NvbW1hbmRJZH0/YFxuXG4gICAgICAgICAgICBpZiAod2l0aExvY2FsaXphdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICB1cmwgKz0gYHdpdGhMb2NhbGl6YXRpb25zPSR7d2l0aExvY2FsaXphdGlvbnMudG9TdHJpbmcoKX1gXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB1cmxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuXG4gICAgICAgIHJlc3BvbnNlczoge1xuICAgICAgICAgIC8vIEludGVyYWN0aW9uIEVuZHBvaW50c1xuICAgICAgICAgIGNhbGxiYWNrOiAoaW50ZXJhY3Rpb25JZCwgdG9rZW4pID0+IHtcbiAgICAgICAgICAgIHJldHVybiBgL2ludGVyYWN0aW9ucy8ke2ludGVyYWN0aW9uSWR9LyR7dG9rZW59L2NhbGxiYWNrYFxuICAgICAgICAgIH0sXG4gICAgICAgICAgb3JpZ2luYWw6IChpbnRlcmFjdGlvbklkLCB0b2tlbikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvd2ViaG9va3MvJHtpbnRlcmFjdGlvbklkfS8ke3Rva2VufS9tZXNzYWdlcy9Ab3JpZ2luYWxgXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtZXNzYWdlOiAoYXBwbGljYXRpb25JZCwgdG9rZW4sIG1lc3NhZ2VJZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvd2ViaG9va3MvJHthcHBsaWNhdGlvbklkfS8ke3Rva2VufS9tZXNzYWdlcy8ke21lc3NhZ2VJZH1gXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG5cbiAgICAgIC8vIFVzZXIgZW5kcG9pbnRzXG4gICAgICB1c2VyKHVzZXJJZCkge1xuICAgICAgICByZXR1cm4gYC91c2Vycy8ke3VzZXJJZH1gXG4gICAgICB9LFxuXG4gICAgICB1c2VyQm90KCkge1xuICAgICAgICByZXR1cm4gJy91c2Vycy9AbWUnXG4gICAgICB9LFxuXG4gICAgICBvYXV0aDJBcHBsaWNhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuICdvYXV0aDIvYXBwbGljYXRpb25zL0BtZSdcbiAgICAgIH0sXG5cbiAgICAgIGdhdGV3YXlCb3QoKSB7XG4gICAgICAgIHJldHVybiAnL2dhdGV3YXkvYm90J1xuICAgICAgfSxcblxuICAgICAgbml0cm9TdGlja2VyUGFja3MoKSB7XG4gICAgICAgIHJldHVybiAnL3N0aWNrZXItcGFja3MnXG4gICAgICB9LFxuICAgIH0sXG5cbiAgICBjaGVja1JhdGVMaW1pdHModXJsKSB7XG4gICAgICBjb25zdCByYXRlbGltaXRlZCA9IHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5nZXQodXJsKVxuICAgICAgY29uc3QgZ2xvYmFsID0gcmVzdC5yYXRlTGltaXRlZFBhdGhzLmdldCgnZ2xvYmFsJylcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KClcblxuICAgICAgaWYgKHJhdGVsaW1pdGVkICYmIG5vdyA8IHJhdGVsaW1pdGVkLnJlc2V0VGltZXN0YW1wKSB7XG4gICAgICAgIHJldHVybiByYXRlbGltaXRlZC5yZXNldFRpbWVzdGFtcCAtIG5vd1xuICAgICAgfVxuXG4gICAgICBpZiAoZ2xvYmFsICYmIG5vdyA8IGdsb2JhbC5yZXNldFRpbWVzdGFtcCkge1xuICAgICAgICByZXR1cm4gZ2xvYmFsLnJlc2V0VGltZXN0YW1wIC0gbm93XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBjaGFuZ2VUb0Rpc2NvcmRGb3JtYXQob2JqOiBhbnkpOiBhbnkge1xuICAgICAgaWYgKG9iaiA9PT0gbnVsbCkgcmV0dXJuIG51bGxcblxuICAgICAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgICByZXR1cm4gb2JqLm1hcCgoaXRlbSkgPT4gcmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQoaXRlbSkpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXdPYmo6IGFueSA9IHt9XG5cbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob2JqKSkge1xuICAgICAgICAgIGlmIChrZXkgPT09ICdwZXJtaXNzaW9ucycpIHtcbiAgICAgICAgICAgIG5ld09iai5wZXJtaXNzaW9ucyA9IGNhbGN1bGF0ZUJpdHMob2JqW2tleV0pXG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIG5ld09ialtjYW1lbFRvU25ha2VDYXNlKGtleSldID0gcmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQob2JqW2tleV0pXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3T2JqXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygb2JqID09PSAnYmlnaW50JykgcmV0dXJuIG9iai50b1N0cmluZygpXG5cbiAgICAgIHJldHVybiBvYmpcbiAgICB9LFxuXG4gICAgY3JlYXRlUmVxdWVzdChvcHRpb25zKSB7XG4gICAgICBjb25zdCBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgICAndXNlci1hZ2VudCc6IGBEaXNjb3JkQm90IChodHRwczovL2dpdGh1Yi5jb20vZGlzY29yZGVuby9kaXNjb3JkZW5vLCB2JHt2ZXJzaW9ufSlgLFxuICAgICAgfVxuXG4gICAgICBpZiAoIW9wdGlvbnMudW5hdXRob3JpemVkKSBoZWFkZXJzLmF1dGhvcml6YXRpb24gPSBgQm90ICR7cmVzdC50b2tlbn1gXG5cbiAgICAgIC8vIFNPTUVUSU1FUyBTUEVDSUFMIEhFQURFUlMgKEUuRy4gQ1VTVE9NIEFVVEhPUklaQVRJT04pIE5FRUQgVE8gQkUgVVNFRFxuICAgICAgaWYgKG9wdGlvbnMuaGVhZGVycykge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBvcHRpb25zLmhlYWRlcnMpIHtcbiAgICAgICAgICBoZWFkZXJzW2tleS50b0xvd2VyQ2FzZSgpXSA9IG9wdGlvbnMuaGVhZGVyc1trZXldXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gR0VUIE1FVEhPRFMgU0hPVUxEIE5PVCBIQVZFIEEgQk9EWVxuICAgICAgaWYgKG9wdGlvbnMubWV0aG9kID09PSAnR0VUJykge1xuICAgICAgICBvcHRpb25zLmJvZHkgPSB1bmRlZmluZWRcbiAgICAgIH1cblxuICAgICAgLy8gSUYgQSBSRUFTT04gSVMgUFJPVklERUQgRU5DT0RFIElUIElOIEhFQURFUlNcbiAgICAgIGlmIChvcHRpb25zLmJvZHk/LnJlYXNvbikge1xuICAgICAgICBoZWFkZXJzWydYLUF1ZGl0LUxvZy1SZWFzb24nXSA9IGVuY29kZVVSSUNvbXBvbmVudChvcHRpb25zLmJvZHkucmVhc29uIGFzIHN0cmluZylcbiAgICAgICAgb3B0aW9ucy5ib2R5LnJlYXNvbiA9IHVuZGVmaW5lZFxuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5ib2R5KSB7XG4gICAgICAgIGNvbnN0IHsgZmlsZSB9ID0gb3B0aW9ucy5ib2R5XG4gICAgICAgIGlmIChmaWxlKSB7XG4gICAgICAgICAgY29uc3QgZmlsZXMgPSBmaW5kRmlsZXMoZmlsZSlcbiAgICAgICAgICBjb25zdCBmb3JtID0gbmV3IEZvcm1EYXRhKClcblxuICAgICAgICAgIC8vIFdIRU4gQ1JFQVRJTkcgQSBTVElDS0VSLCBESVNDT1JEIFdBTlRTIEZPUk0gREFUQSBPTkxZXG4gICAgICAgICAgaWYgKG9wdGlvbnMudXJsPy5lbmRzV2l0aCgnL3N0aWNrZXJzJykgJiYgb3B0aW9ucy5tZXRob2QgPT09ICdQT1NUJykge1xuICAgICAgICAgICAgZm9ybS5hcHBlbmQoJ2ZpbGUnLCBmaWxlc1swXS5ibG9iLCBmaWxlc1swXS5uYW1lKVxuICAgICAgICAgICAgZm9ybS5hcHBlbmQoJ25hbWUnLCBvcHRpb25zLmJvZHkubmFtZSBhcyBzdHJpbmcpXG4gICAgICAgICAgICBmb3JtLmFwcGVuZCgnZGVzY3JpcHRpb24nLCBvcHRpb25zLmJvZHkuZGVzY3JpcHRpb24gYXMgc3RyaW5nKVxuICAgICAgICAgICAgZm9ybS5hcHBlbmQoJ3RhZ3MnLCBvcHRpb25zLmJvZHkudGFncyBhcyBzdHJpbmcpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgZm9ybS5hcHBlbmQoYGZpbGUke2l9YCwgZmlsZXNbaV0uYmxvYiwgZmlsZXNbaV0ubmFtZSlcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGZpbGUpIG9wdGlvbnMuYm9keS5maWxlID0gdW5kZWZpbmVkXG4gICAgICAgICAgICBmb3JtLmFwcGVuZCgncGF5bG9hZF9qc29uJywgSlNPTi5zdHJpbmdpZnkocmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQob3B0aW9ucy5ib2R5KSkpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgb3B0aW9ucy5ib2R5LmZpbGUgPSBmb3JtXG4gICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5ib2R5ICYmICFbJ0dFVCcsICdERUxFVEUnXS5pbmNsdWRlcyhvcHRpb25zLm1ldGhvZCkpIHtcbiAgICAgICAgICBoZWFkZXJzWydDb250ZW50LVR5cGUnXSA9ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIGJvZHk6IChvcHRpb25zLmJvZHk/LmZpbGUgPz8gSlNPTi5zdHJpbmdpZnkocmVzdC5jaGFuZ2VUb0Rpc2NvcmRGb3JtYXQob3B0aW9ucy5ib2R5KSkpIGFzIEZvcm1EYXRhIHwgc3RyaW5nLFxuICAgICAgICBtZXRob2Q6IG9wdGlvbnMubWV0aG9kLFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocygpIHtcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KClcblxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgcmVzdC5yYXRlTGltaXRlZFBhdGhzLmVudHJpZXMoKSkge1xuICAgICAgICAvLyAgIHJlc3QuZGVidWcoXG4gICAgICAgIC8vIGBbUkVTVCAtIHByb2Nlc3NSYXRlTGltaXRlZFBhdGhzXSBSdW5uaW5nIGZvciBvZiBsb29wLiAke1xuICAgICAgICAvLyAgIHZhbHVlLnJlc2V0VGltZXN0YW1wIC0gbm93XG4gICAgICAgIC8vIH1gXG4gICAgICAgIC8vICAgKVxuICAgICAgICAvLyBJZiB0aGUgdGltZSBoYXMgbm90IHJlYWNoZWQgY2FuY2VsXG4gICAgICAgIGlmICh2YWx1ZS5yZXNldFRpbWVzdGFtcCA+IG5vdykgY29udGludWVcblxuICAgICAgICAvLyBSYXRlIGxpbWl0IGlzIG92ZXIsIGRlbGV0ZSB0aGUgcmF0ZSBsaW1pdGVyXG4gICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5kZWxldGUoa2V5KVxuICAgICAgICAvLyBJZiBpdCB3YXMgZ2xvYmFsLCBhbHNvIG1hcmsgdGhlIGdsb2JhbCB2YWx1ZSBhcyBmYWxzZVxuICAgICAgICBpZiAoa2V5ID09PSAnZ2xvYmFsJykgcmVzdC5nbG9iYWxseVJhdGVMaW1pdGVkID0gZmFsc2VcbiAgICAgIH1cblxuICAgICAgLy8gQUxMIFBBVEhTIEFSRSBDTEVBUkVEIENBTiBDQU5DRUwgT1VUIVxuICAgICAgaWYgKHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zaXplID09PSAwKSB7XG4gICAgICAgIHJlc3QucHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHMgPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdC5wcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRocyA9IHRydWVcbiAgICAgICAgLy8gUkVDSEVDSyBJTiAxIFNFQ09ORFxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAvLyByZXN0LmRlYnVnKCdbUkVTVCAtIHByb2Nlc3NSYXRlTGltaXRlZFBhdGhzXSBSdW5uaW5nIHNldFRpbWVvdXQuJylcbiAgICAgICAgICByZXN0LnByb2Nlc3NSYXRlTGltaXRlZFBhdGhzKClcbiAgICAgICAgfSwgMTAwMClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqIFByb2Nlc3NlcyB0aGUgcmF0ZSBsaW1pdCBoZWFkZXJzIGFuZCBkZXRlcm1pbmVzIGlmIGl0IG5lZWRzIHRvIGJlIHJhdGUgbGltaXRlZCBhbmQgcmV0dXJucyB0aGUgYnVja2V0IGlkIGlmIGF2YWlsYWJsZSAqL1xuICAgIHByb2Nlc3NIZWFkZXJzKHVybCwgaGVhZGVycykge1xuICAgICAgbGV0IHJhdGVMaW1pdGVkID0gZmFsc2VcblxuICAgICAgLy8gR0VUIEFMTCBORUNFU1NBUlkgSEVBREVSU1xuICAgICAgY29uc3QgcmVtYWluaW5nID0gaGVhZGVycy5nZXQoJ3gtcmF0ZWxpbWl0LXJlbWFpbmluZycpXG4gICAgICBjb25zdCByZXRyeUFmdGVyID0gaGVhZGVycy5nZXQoJ3gtcmF0ZWxpbWl0LXJlc2V0LWFmdGVyJylcbiAgICAgIGNvbnN0IHJlc2V0ID0gRGF0ZS5ub3coKSArIE51bWJlcihyZXRyeUFmdGVyKSAqIDEwMDBcbiAgICAgIGNvbnN0IGdsb2JhbCA9IGhlYWRlcnMuZ2V0KCd4LXJhdGVsaW1pdC1nbG9iYWwnKVxuICAgICAgLy8gdW5kZWZpbmVkIG92ZXJyaWRlIG51bGwgbmVlZGVkIGZvciB0eXBpbmdzXG4gICAgICBjb25zdCBidWNrZXRJZCA9IGhlYWRlcnMuZ2V0KCd4LXJhdGVsaW1pdC1idWNrZXQnKSA/PyB1bmRlZmluZWRcbiAgICAgIGNvbnN0IGxpbWl0ID0gaGVhZGVycy5nZXQoJ3gtcmF0ZWxpbWl0LWxpbWl0JylcblxuICAgICAgcmVzdC5xdWV1ZXMuZ2V0KHVybCk/LmhhbmRsZUNvbXBsZXRlZFJlcXVlc3Qoe1xuICAgICAgICByZW1haW5pbmc6IHJlbWFpbmluZyA/IE51bWJlcihyZW1haW5pbmcpIDogdW5kZWZpbmVkLFxuICAgICAgICBpbnRlcnZhbDogcmV0cnlBZnRlciA/IE51bWJlcihyZXRyeUFmdGVyKSAqIDEwMDAgOiB1bmRlZmluZWQsXG4gICAgICAgIG1heDogbGltaXQgPyBOdW1iZXIobGltaXQpIDogdW5kZWZpbmVkLFxuICAgICAgfSlcblxuICAgICAgLy8gSUYgVEhFUkUgSVMgTk8gUkVNQUlOSU5HIFJBVEUgTElNSVQsIE1BUksgSVQgQVMgUkFURSBMSU1JVEVEXG4gICAgICBpZiAocmVtYWluaW5nID09PSAnMCcpIHtcbiAgICAgICAgcmF0ZUxpbWl0ZWQgPSB0cnVlXG5cbiAgICAgICAgLy8gU0FWRSBUSEUgVVJMIEFTIExJTUlURUQsIElNUE9SVEFOVCBGT1IgTkVXIFJFUVVFU1RTIEJZIFVTRVIgV0lUSE9VVCBCVUNLRVRcbiAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldCh1cmwsIHtcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgcmVzZXRUaW1lc3RhbXA6IHJlc2V0LFxuICAgICAgICAgIGJ1Y2tldElkLFxuICAgICAgICB9KVxuXG4gICAgICAgIC8vIFNBVkUgVEhFIEJVQ0tFVCBBUyBMSU1JVEVEIFNJTkNFIERJRkZFUkVOVCBVUkxTIE1BWSBTSEFSRSBBIEJVQ0tFVFxuICAgICAgICBpZiAoYnVja2V0SWQpIHtcbiAgICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KGJ1Y2tldElkLCB7XG4gICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICByZXNldFRpbWVzdGFtcDogcmVzZXQsXG4gICAgICAgICAgICBidWNrZXRJZCxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElGIFRIRVJFIElTIE5PIFJFTUFJTklORyBHTE9CQUwgTElNSVQsIE1BUksgSVQgUkFURSBMSU1JVEVEIEdMT0JBTExZXG4gICAgICBpZiAoZ2xvYmFsKSB7XG4gICAgICAgIGNvbnN0IHJldHJ5QWZ0ZXIgPSBoZWFkZXJzLmdldCgncmV0cnktYWZ0ZXInKVxuICAgICAgICBjb25zdCBnbG9iYWxSZXNldCA9IERhdGUubm93KCkgKyBOdW1iZXIocmV0cnlBZnRlcikgKiAxMDAwXG4gICAgICAgIC8vICAgcmVzdC5kZWJ1ZyhcbiAgICAgICAgLy8gYFtSRVNUID0gR2xvYmFsbHkgUmF0ZSBMaW1pdGVkXSBVUkw6ICR7dXJsfSB8IEdsb2JhbCBSZXN0OiAke2dsb2JhbFJlc2V0fWBcbiAgICAgICAgLy8gICApXG4gICAgICAgIHJlc3QuZ2xvYmFsbHlSYXRlTGltaXRlZCA9IHRydWVcbiAgICAgICAgcmF0ZUxpbWl0ZWQgPSB0cnVlXG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgcmVzdC5nbG9iYWxseVJhdGVMaW1pdGVkID0gZmFsc2VcbiAgICAgICAgfSwgZ2xvYmFsUmVzZXQpXG5cbiAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldCgnZ2xvYmFsJywge1xuICAgICAgICAgIHVybDogJ2dsb2JhbCcsXG4gICAgICAgICAgcmVzZXRUaW1lc3RhbXA6IGdsb2JhbFJlc2V0LFxuICAgICAgICAgIGJ1Y2tldElkLFxuICAgICAgICB9KVxuXG4gICAgICAgIGlmIChidWNrZXRJZCkge1xuICAgICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoYnVja2V0SWQsIHtcbiAgICAgICAgICAgIHVybDogJ2dsb2JhbCcsXG4gICAgICAgICAgICByZXNldFRpbWVzdGFtcDogZ2xvYmFsUmVzZXQsXG4gICAgICAgICAgICBidWNrZXRJZCxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChyYXRlTGltaXRlZCAmJiAhcmVzdC5wcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRocykge1xuICAgICAgICByZXN0LnByb2Nlc3NSYXRlTGltaXRlZFBhdGhzKClcbiAgICAgIH1cbiAgICAgIHJldHVybiByYXRlTGltaXRlZCA/IGJ1Y2tldElkIDogdW5kZWZpbmVkXG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRSZXF1ZXN0KG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHVybCA9IG9wdGlvbnMudXJsLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykgPyBvcHRpb25zLnVybCA6IGAke3Jlc3QuYmFzZVVybH0vdiR7cmVzdC52ZXJzaW9ufSR7b3B0aW9ucy51cmx9YFxuICAgICAgY29uc3QgcGF5bG9hZCA9IHJlc3QuY3JlYXRlUmVxdWVzdCh7IG1ldGhvZDogb3B0aW9ucy5tZXRob2QsIHVybDogb3B0aW9ucy51cmwsIGJvZHk6IG9wdGlvbnMuYm9keSwgLi4ub3B0aW9ucy5vcHRpb25zIH0pXG5cbiAgICAgIGxvZ2dlci5kZWJ1Zyhgc2VuZGluZyByZXF1ZXN0IHRvICR7dXJsfWAsICd3aXRoIHBheWxvYWQ6JywgeyAuLi5wYXlsb2FkLCBoZWFkZXJzOiB7IC4uLnBheWxvYWQuaGVhZGVycywgYXV0aG9yaXphdGlvbjogJ0JvdCB0b2tlbmhlcmUnIH0gfSlcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCBwYXlsb2FkKVxuICAgICAgbG9nZ2VyLmRlYnVnKGByZXF1ZXN0IGZldGNoZWQgZnJvbSAke3VybH0gd2l0aCBzdGF0dXMgJHtyZXNwb25zZS5zdGF0dXN9ICYgJHtyZXNwb25zZS5zdGF0dXNUZXh0fWApXG5cbiAgICAgIC8vIFNldCB0aGUgYnVja2V0IGlkIGlmIGl0IHdhcyBhdmFpbGFibGUgb24gdGhlIGhlYWRlcnNcbiAgICAgIGNvbnN0IGJ1Y2tldElkID0gcmVzdC5wcm9jZXNzSGVhZGVycyhyZXN0LnNpbXBsaWZ5VXJsKG9wdGlvbnMudXJsLCBvcHRpb25zLm1ldGhvZCksIHJlc3BvbnNlLmhlYWRlcnMpXG4gICAgICBpZiAoYnVja2V0SWQpIG9wdGlvbnMuYnVja2V0SWQgPSBidWNrZXRJZFxuXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzIDwgMjAwIHx8IHJlc3BvbnNlLnN0YXR1cyA+PSA0MDApIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKGBSZXF1ZXN0IHRvICR7dXJsfSBmYWlsZWQuYClcblxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MjkpIHtcbiAgICAgICAgICBsb2dnZXIuZGVidWcoYFJlcXVlc3QgdG8gJHt1cmx9IHdhcyByYXRlbGltaXRlZC5gKVxuICAgICAgICAgIC8vIFRvbyBtYW55IGF0dGVtcHRzLCBnZXQgcmlkIG9mIHJlcXVlc3QgZnJvbSBxdWV1ZS5cbiAgICAgICAgICBpZiAob3B0aW9ucy5yZXRyeUNvdW50KysgPj0gcmVzdC5tYXhSZXRyeUNvdW50KSB7XG4gICAgICAgICAgICBsb2dnZXIuZGVidWcoYFJlcXVlc3QgdG8gJHt1cmx9IGV4Y2VlZGVkIHRoZSBtYXhpbXVtIGFsbG93ZWQgcmV0cmllcy5gLCAnd2l0aCBwYXlsb2FkOicsIHBheWxvYWQpXG4gICAgICAgICAgICAvLyByZXN0LmRlYnVnKGBbUkVTVCAtIFJldHJpZXNNYXhlZF0gJHtKU09OLnN0cmluZ2lmeShvcHRpb25zKX1gKVxuICAgICAgICAgICAgLy8gUmVtb3ZlIGl0ZW0gZnJvbSBxdWV1ZSB0byBwcmV2ZW50IHJldHJ5XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5yZWplY3Qoe1xuICAgICAgICAgICAgICBvazogZmFsc2UsXG4gICAgICAgICAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICAgICAgICBlcnJvcjogJ1RoZSBvcHRpb25zIHdhcyByYXRlIGxpbWl0ZWQgYW5kIGl0IG1heGVkIG91dCB0aGUgcmV0cmllcyBsaW1pdC4nLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBSYXRlIGxpbWl0ZWQsIGFkZCBiYWNrIHRvIHF1ZXVlXG4gICAgICAgICAgcmVzdC5pbnZhbGlkQnVja2V0LmhhbmRsZUNvbXBsZXRlZFJlcXVlc3QocmVzcG9uc2Uuc3RhdHVzLCByZXNwb25zZS5oZWFkZXJzLmdldCgnWC1SYXRlTGltaXQtU2NvcGUnKSA9PT0gJ3NoYXJlZCcpXG5cbiAgICAgICAgICBjb25zdCByZXNldEFmdGVyID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoJ3gtcmF0ZWxpbWl0LXJlc2V0LWFmdGVyJylcbiAgICAgICAgICBpZiAocmVzZXRBZnRlcikgYXdhaXQgZGVsYXkoTnVtYmVyKHJlc2V0QWZ0ZXIpICogMTAwMClcblxuICAgICAgICAgIHJldHVybiBhd2FpdCBvcHRpb25zLnJldHJ5UmVxdWVzdD8uKG9wdGlvbnMpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb3B0aW9ucy5yZWplY3QoeyBvazogZmFsc2UsIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLCBib2R5OiBKU09OLnN0cmluZ2lmeShhd2FpdCByZXNwb25zZS5qc29uKCkpIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlzMjA0ID0gcmVzcG9uc2Uuc3RhdHVzID09PSAyMDRcbiAgICAgIGNvbnN0IGpzb24gPSBpczIwNCA/IHVuZGVmaW5lZCA6IGF3YWl0IHJlc3BvbnNlLmpzb24oKVxuICAgICAgLy8gRGlzY29yZCBzb21ldGltZXMgc2VuZHMgbm8gcmVzcG9uc2Ugd2l0aCAyMDQgY29kZVxuICAgICAgcmV0dXJuIG9wdGlvbnMucmVzb2x2ZSh7IG9rOiB0cnVlLCBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cywgYm9keTogSlNPTi5zdHJpbmdpZnkoanNvbikgfSlcbiAgICB9LFxuXG4gICAgLy8gQ3JlZGl0czogZ2l0aHViLmNvbS9hYmFsYWJhaGFoYS9lcmlzIGxpYi9yZXN0L1JlcXVlc3RIYW5kbGVyLmpzI0wzOTdcbiAgICAvLyBNb2RpZmllZCBmb3Igb3VyIHVzZS1jYXNlXG4gICAgc2ltcGxpZnlVcmwodXJsLCBtZXRob2QpIHtcbiAgICAgIGxldCByb3V0ZSA9IHVybFxuICAgICAgICAucmVwbGFjZSgvXFwvKFthLXotXSspXFwvKD86WzAtOV17MTcsMTl9KS9nLCBmdW5jdGlvbiAobWF0Y2gsIHA6IHN0cmluZykge1xuICAgICAgICAgIHJldHVybiBbJ2NoYW5uZWxzJywgJ2d1aWxkcyddLmluY2x1ZGVzKHApID8gbWF0Y2ggOiBgLyR7cH0veGBcbiAgICAgICAgfSlcbiAgICAgICAgLnJlcGxhY2UoL1xcL3JlYWN0aW9uc1xcL1teL10rL2csICcvcmVhY3Rpb25zL3gnKVxuXG4gICAgICAvLyBHRU5FUkFMIC9yZWFjdGlvbnMgYW5kIC9yZWFjdGlvbnMvZW1vamkvQG1lIHNoYXJlIHRoZSBidWNrZXRzXG4gICAgICBpZiAocm91dGUuaW5jbHVkZXMoJy9yZWFjdGlvbnMnKSkge1xuICAgICAgICByb3V0ZSA9IHJvdXRlLnN1YnN0cmluZygwLCByb3V0ZS5pbmRleE9mKCcvcmVhY3Rpb25zJykgKyAnL3JlYWN0aW9ucycubGVuZ3RoKVxuICAgICAgfVxuXG4gICAgICAvLyBEZWxldGUgTWVzc2FnZSBlbmRwb2ludCBoYXMgaXRzIG93biByYXRlIGxpbWl0XG4gICAgICBpZiAobWV0aG9kID09PSAnREVMRVRFJyAmJiByb3V0ZS5lbmRzV2l0aCgnL21lc3NhZ2VzL3gnKSkge1xuICAgICAgICByb3V0ZSA9IG1ldGhvZCArIHJvdXRlXG4gICAgICB9XG5cbiAgICAgIHJldHVybiByb3V0ZVxuICAgIH0sXG5cbiAgICBwcm9jZXNzUmVxdWVzdChyZXF1ZXN0OiBTZW5kUmVxdWVzdE9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJvdXRlID0gcmVxdWVzdC51cmwuc3Vic3RyaW5nKHJlcXVlc3QudXJsLmluZGV4T2YoJ2FwaS8nKSlcbiAgICAgIGNvbnN0IHBhcnRzID0gcm91dGUuc3BsaXQoJy8nKVxuICAgICAgLy8gUmVtb3ZlIHRoZSBhcGkvXG4gICAgICBwYXJ0cy5zaGlmdCgpXG4gICAgICAvLyBSZW1vdmVzIHRoZSAvdiMvXG4gICAgICBpZiAocGFydHNbMF0/LnN0YXJ0c1dpdGgoJ3YnKSkgcGFydHMuc2hpZnQoKVxuICAgICAgLy8gU2V0IHRoZSBmdWxsIHVybCB0byBkaXNjb3JkIGFwaSBpbiBjYXNlIGl0IHdhcyByZWNpZXZlZCBpbiBhIHByb3h5IHJlc3RcbiAgICAgIHJlcXVlc3QudXJsID0gYCR7cmVzdC5iYXNlVXJsfS92JHtyZXN0LnZlcnNpb259LyR7cGFydHMuam9pbignLycpfWBcblxuICAgICAgY29uc3QgdXJsID0gcmVzdC5zaW1wbGlmeVVybChyZXF1ZXN0LnVybCwgcmVxdWVzdC5tZXRob2QpXG4gICAgICBjb25zdCBxdWV1ZSA9IHJlc3QucXVldWVzLmdldCh1cmwpXG5cbiAgICAgIGlmIChxdWV1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHF1ZXVlLm1ha2VSZXF1ZXN0KHJlcXVlc3QpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBDUkVBVEVTIEEgTkVXIFFVRVVFXG4gICAgICAgIGNvbnN0IGJ1Y2tldFF1ZXVlID0gbmV3IFF1ZXVlKHJlc3QsIHsgdXJsLCBkZWxldGVRdWV1ZURlbGF5OiByZXN0LmRlbGV0ZVF1ZXVlRGVsYXkgfSlcblxuICAgICAgICAvLyBBZGQgcmVxdWVzdCB0byBxdWV1ZVxuICAgICAgICBidWNrZXRRdWV1ZS5tYWtlUmVxdWVzdChyZXF1ZXN0KVxuICAgICAgICAvLyBTYXZlIHF1ZXVlXG4gICAgICAgIHJlc3QucXVldWVzLnNldCh1cmwsIGJ1Y2tldFF1ZXVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBtYWtlUmVxdWVzdChtZXRob2QsIHVybCwgYm9keSwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgcmVzdC5wcm9jZXNzUmVxdWVzdCh7XG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICBib2R5LFxuICAgICAgICAgIHJldHJ5Q291bnQ6IDAsXG4gICAgICAgICAgcmV0cnlSZXF1ZXN0OiBhc3luYyBmdW5jdGlvbiAob3B0aW9uczogU2VuZFJlcXVlc3RPcHRpb25zKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBzaG91bGQgY2hhbmdlIHRvIHJlcHJvY2VzcyBxdWV1ZSBpdGVtXG4gICAgICAgICAgICBhd2FpdCByZXN0LnNlbmRSZXF1ZXN0KG9wdGlvbnMpXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXNvbHZlOiAoZGF0YSkgPT4gcmVzb2x2ZShkYXRhLnN0YXR1cyAhPT0gMjA0ID8gSlNPTi5wYXJzZShkYXRhLmJvZHkgPz8gJ3t9JykgOiB1bmRlZmluZWQpLFxuICAgICAgICAgIHJlamVjdCxcbiAgICAgICAgICBvcHRpb25zLFxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0PFQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4odXJsOiBzdHJpbmcpIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdHRVQnLCB1cmwpKSBhcyBDYW1lbGl6ZTxUPlxuICAgIH0sXG5cbiAgICBhc3luYyBwb3N0PFQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4odXJsOiBzdHJpbmcsIGJvZHk/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XG4gICAgICByZXR1cm4gY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUE9TVCcsIHVybCwgYm9keSkpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZSh1cmw6IHN0cmluZywgYm9keT86IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdERUxFVEUnLCB1cmwsIGJvZHkpKVxuICAgIH0sXG5cbiAgICBhc3luYyBwYXRjaDxUID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHVybDogc3RyaW5nLCBib2R5PzogUmVjb3JkPHN0cmluZywgYW55Pikge1xuICAgICAgcmV0dXJuIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ1BBVENIJywgdXJsLCBib2R5KSkgYXMgQ2FtZWxpemU8VD5cbiAgICB9LFxuXG4gICAgYXN5bmMgcHV0PFQgPSB2b2lkPih1cmw6IHN0cmluZywgYm9keT86IFJlY29yZDxzdHJpbmcsIGFueT4sIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XG4gICAgICByZXR1cm4gY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUFVUJywgdXJsLCBib2R5LCBvcHRpb25zKSkgYXMgQ2FtZWxpemU8VD5cbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSB7XG4gICAgICByZWFjdGlvbiA9IHByb2Nlc3NSZWFjdGlvblN0cmluZyhyZWFjdGlvbilcblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5ib3QoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkUmVhY3Rpb25zKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbnMsIG9yZGVyZWQgPSBmYWxzZSkge1xuICAgICAgaWYgKCFvcmRlcmVkKSB7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHJlYWN0aW9ucy5tYXAoYXN5bmMgKHJlYWN0aW9uKSA9PiBhd2FpdCByZXN0LmFkZFJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikpKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCByZWFjdGlvbiBvZiByZWFjdGlvbnMpIHtcbiAgICAgICAgYXdhaXQgcmVzdC5hZGRSZWFjdGlvbihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGFkZFJvbGUoZ3VpbGRJZCwgdXNlcklkLCByb2xlSWQsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCByb2xlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBhZGRUaHJlYWRNZW1iZXIoY2hhbm5lbElkLCB1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnVzZXIoY2hhbm5lbElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVBdXRvbW9kUnVsZShndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGU+KHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGVzKGd1aWxkSWQpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVDaGFubmVsKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmd1aWxkcy5jaGFubmVscyhndWlsZElkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlRW1vamkoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaXMoZ3VpbGRJZCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kcyhyZXN0LmFwcGxpY2F0aW9uSWQpLCBjb21tYW5kKVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZChvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRHdWlsZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmFsbCgpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kLCBndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMuYWxsKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCksIGNvbW1hbmQpXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkRnJvbVRlbXBsYXRlKHRlbXBsYXRlQ29kZSwgb3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbnMuaWNvbikge1xuICAgICAgICBvcHRpb25zLmljb24gPSBhd2FpdCB1cmxUb0Jhc2U2NChvcHRpb25zLmljb24pXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEd1aWxkPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmNvZGUodGVtcGxhdGVDb2RlKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR3VpbGRTdGlja2VyKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFN0aWNrZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5zdGlja2VycyhndWlsZElkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR3VpbGRUZW1wbGF0ZShndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRUZW1wbGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5hbGwoZ3VpbGRJZCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUZvcnVtVGhyZWFkKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZm9ydW0oY2hhbm5lbElkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlSW52aXRlKGNoYW5uZWxJZCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRJbnZpdGU+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmludml0ZXMoY2hhbm5lbElkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlUm9sZShndWlsZElkLCBvcHRpb25zLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFJvbGU+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5hbGwoZ3VpbGRJZCksIHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlU2NoZWR1bGVkRXZlbnQoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkU2NoZWR1bGVkRXZlbnQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMuZXZlbnRzKGd1aWxkSWQpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVTdGFnZUluc3RhbmNlKG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFN0YWdlSW5zdGFuY2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnN0YWdlcygpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVXZWJob29rKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMud2ViaG9va3MoY2hhbm5lbElkKSwge1xuICAgICAgICBuYW1lOiBvcHRpb25zLm5hbWUsXG4gICAgICAgIGF2YXRhcjogb3B0aW9ucy5hdmF0YXIgPyBhd2FpdCB1cmxUb0Jhc2U2NChvcHRpb25zLmF2YXRhcikgOiB1bmRlZmluZWQsXG4gICAgICAgIHJlYXNvbjogb3B0aW9ucy5yZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVBdXRvbW9kUnVsZShndWlsZElkLCBydWxlSWQsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGUoZ3VpbGRJZCwgcnVsZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlQ2hhbm5lbChjaGFubmVsSWQsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLmNoYW5uZWwoY2hhbm5lbElkKSwge1xuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlKGNoYW5uZWxJZCwgb3ZlcndyaXRlSWQsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLm92ZXJ3cml0ZShjaGFubmVsSWQsIG92ZXJ3cml0ZUlkKSwgcmVhc29uID8geyByZWFzb24gfSA6IHVuZGVmaW5lZClcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlRW1vamkoZ3VpbGRJZCwgaWQsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaShndWlsZElkLCBpZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUZvbGxvd3VwTWVzc2FnZSh0b2tlbiwgbWVzc2FnZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5tZXNzYWdlKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4sIG1lc3NhZ2VJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZChyZXN0LmFwcGxpY2F0aW9uSWQsIGNvbW1hbmRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUd1aWxkKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuZ3VpbGQoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUd1aWxkQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCwgZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMub25lKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGRTdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkKSwgcmVhc29uID8geyByZWFzb24gfSA6IHVuZGVmaW5lZClcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGRUZW1wbGF0ZShndWlsZElkLCB0ZW1wbGF0ZUNvZGUpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmd1aWxkKGd1aWxkSWQsIHRlbXBsYXRlQ29kZSkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUludGVncmF0aW9uKGd1aWxkSWQsIGludGVncmF0aW9uSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuaW50ZWdyYXRpb24oZ3VpbGRJZCwgaW50ZWdyYXRpb25JZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUludml0ZShpbnZpdGVDb2RlLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuaW52aXRlKGludml0ZUNvZGUpLCByZWFzb24gPyB7IHJlYXNvbiB9IDogdW5kZWZpbmVkKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVNZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlTWVzc2FnZXMoY2hhbm5lbElkLCBtZXNzYWdlSWRzLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3QocmVzdC5yb3V0ZXMuY2hhbm5lbHMuYnVsayhjaGFubmVsSWQpLCB7XG4gICAgICAgIG1lc3NhZ2VzOiBtZXNzYWdlSWRzLnNsaWNlKDAsIDEwMCkubWFwKChpZCkgPT4gaWQudG9TdHJpbmcoKSksXG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZU9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSh0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMub3JpZ2luYWwocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbikpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZU93blJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikge1xuICAgICAgcmVhY3Rpb24gPSBwcm9jZXNzUmVhY3Rpb25TdHJpbmcocmVhY3Rpb24pXG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMuYm90KGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVJlYWN0aW9uc0FsbChjaGFubmVsSWQsIG1lc3NhZ2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5hbGwoY2hhbm5lbElkLCBtZXNzYWdlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVSZWFjdGlvbnNFbW9qaShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pIHtcbiAgICAgIHJlYWN0aW9uID0gcHJvY2Vzc1JlYWN0aW9uU3RyaW5nKHJlYWN0aW9uKVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLmVtb2ppKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVJvbGUoZ3VpbGRJZCwgcm9sZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm9uZShndWlsZElkLCByb2xlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVTY2hlZHVsZWRFdmVudChndWlsZElkLCBldmVudElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudChndWlsZElkLCBldmVudElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlU3RhZ2VJbnN0YW5jZShjaGFubmVsSWQsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnN0YWdlKGNoYW5uZWxJZCksIHJlYXNvbiA/IHsgcmVhc29uIH0gOiB1bmRlZmluZWQpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVVzZXJSZWFjdGlvbihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgdXNlcklkLCByZWFjdGlvbikge1xuICAgICAgcmVhY3Rpb24gPSBwcm9jZXNzUmVhY3Rpb25TdHJpbmcocmVhY3Rpb24pXG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMudXNlcihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24sIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVdlYmhvb2sod2ViaG9va0lkLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy53ZWJob29rcy5pZCh3ZWJob29rSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVXZWJob29rTWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy53ZWJob29rcy5tZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVdlYmhvb2tXaXRoVG9rZW4od2ViaG9va0lkLCB0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2sod2ViaG9va0lkLCB0b2tlbikpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucyhndWlsZElkLCBjb21tYW5kSWQsIGJlYXJlclRva2VuLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zPihcbiAgICAgICAgcmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLnBlcm1pc3Npb24ocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpLFxuICAgICAgICB7XG4gICAgICAgICAgcGVybWlzc2lvbnM6IG9wdGlvbnMsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBoZWFkZXJzOiB7IGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtiZWFyZXJUb2tlbn1gIH0sXG4gICAgICAgIH0sXG4gICAgICApXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRBdXRvbW9kUnVsZShndWlsZElkLCBydWxlSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGU+KHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGUoZ3VpbGRJZCwgcnVsZUlkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEJvdFByb2ZpbGUob3B0aW9ucykge1xuICAgICAgY29uc3QgYXZhdGFyID0gb3B0aW9ucz8uYm90QXZhdGFyVVJMID8gYXdhaXQgdXJsVG9CYXNlNjQob3B0aW9ucz8uYm90QXZhdGFyVVJMKSA6IG9wdGlvbnM/LmJvdEF2YXRhclVSTFxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkVXNlcj4ocmVzdC5yb3V0ZXMudXNlckJvdCgpLCB7XG4gICAgICAgIHVzZXJuYW1lOiBvcHRpb25zLnVzZXJuYW1lPy50cmltKCksXG4gICAgICAgIGF2YXRhcixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRDaGFubmVsKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmNoYW5uZWwoY2hhbm5lbElkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdENoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGVzKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLm92ZXJ3cml0ZShjaGFubmVsSWQsIG9wdGlvbnMuaWQpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Q2hhbm5lbFBvc2l0aW9ucyhndWlsZElkLCBjaGFubmVsUG9zaXRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaChyZXN0LnJvdXRlcy5ndWlsZHMuY2hhbm5lbHMoZ3VpbGRJZCksIGNoYW5uZWxQb3NpdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRFbW9qaShndWlsZElkLCBpZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamkoZ3VpbGRJZCwgaWQpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Rm9sbG93dXBNZXNzYWdlKHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm1lc3NhZ2UocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiwgbWVzc2FnZUlkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kKHJlc3QuYXBwbGljYXRpb25JZCwgY29tbWFuZElkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRHdWlsZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmd1aWxkKGd1aWxkSWQpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihcbiAgICAgICAgcmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5vbmUocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGRNZmFMZXZlbChndWlsZElkOiBCaWdTdHJpbmcsIG1mYUxldmVsOiBNZmFMZXZlbHMsIHJlYXNvbj86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5ndWlsZHMubWZhKGd1aWxkSWQpLCB7IGxldmVsOiBtZmFMZXZlbCwgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZFN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkU3RpY2tlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkVGVtcGxhdGUoZ3VpbGRJZCwgdGVtcGxhdGVDb2RlOiBzdHJpbmcsIG9wdGlvbnM6IE1vZGlmeUd1aWxkVGVtcGxhdGUpOiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRUZW1wbGF0ZT4+IHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRUZW1wbGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5ndWlsZChndWlsZElkLCB0ZW1wbGF0ZUNvZGUpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0TWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0T3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlKHRva2VuLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5vcmlnaW5hbChyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE9yaWdpbmFsV2ViaG9va01lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLndlYmhvb2tzLm9yaWdpbmFsKHdlYmhvb2tJZCwgdG9rZW4sIG9wdGlvbnMpLCB7XG4gICAgICAgIHR5cGU6IEludGVyYWN0aW9uUmVzcG9uc2VUeXBlcy5VcGRhdGVNZXNzYWdlLFxuICAgICAgICBkYXRhOiBvcHRpb25zLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE93blZvaWNlU3RhdGUoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2gocmVzdC5yb3V0ZXMuZ3VpbGRzLnZvaWNlKGd1aWxkSWQpLCB7XG4gICAgICAgIGNoYW5uZWxfaWQ6IG9wdGlvbnMuY2hhbm5lbElkLFxuICAgICAgICBzdXBwcmVzczogb3B0aW9ucy5zdXBwcmVzcyxcbiAgICAgICAgcmVxdWVzdF90b19zcGVha190aW1lc3RhbXA6IG9wdGlvbnMucmVxdWVzdFRvU3BlYWtUaW1lc3RhbXBcbiAgICAgICAgICA/IG5ldyBEYXRlKG9wdGlvbnMucmVxdWVzdFRvU3BlYWtUaW1lc3RhbXApLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICA6IG9wdGlvbnMucmVxdWVzdFRvU3BlYWtUaW1lc3RhbXAsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0U2NoZWR1bGVkRXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFNjaGVkdWxlZEV2ZW50PihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50KGd1aWxkSWQsIGV2ZW50SWQpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Um9sZShndWlsZElkLCByb2xlSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRSb2xlPihyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMub25lKGd1aWxkSWQsIHJvbGVJZCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRSb2xlUG9zaXRpb25zKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRSb2xlW10+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5hbGwoZ3VpbGRJZCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRTdGFnZUluc3RhbmNlKGNoYW5uZWxJZCwgZGF0YSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFN0YWdlSW5zdGFuY2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnN0YWdlKGNoYW5uZWxJZCksIHsgdG9waWM6IGRhdGEudG9waWMgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFVzZXJWb2ljZVN0YXRlKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoKHJlc3Qucm91dGVzLmd1aWxkcy52b2ljZShndWlsZElkLCBvcHRpb25zLnVzZXJJZCksIHtcbiAgICAgICAgY2hhbm5lbF9pZDogb3B0aW9ucy5jaGFubmVsSWQsXG4gICAgICAgIHN1cHByZXNzOiBvcHRpb25zLnN1cHByZXNzLFxuICAgICAgICB1c2VyX2lkOiBvcHRpb25zLnVzZXJJZCxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXZWJob29rKHdlYmhvb2tJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFdlYmhvb2s+KHJlc3Qucm91dGVzLndlYmhvb2tzLmlkKHdlYmhvb2tJZCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXZWJob29rTWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy53ZWJob29rcy5tZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucyksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXZWJob29rV2l0aFRva2VuKHdlYmhvb2tJZCwgdG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHdlYmhvb2tJZCwgdG9rZW4pLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0V2VsY29tZVNjcmVlbihndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkV2VsY29tZVNjcmVlbj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndlbGNvbWUoZ3VpbGRJZCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXaWRnZXRTZXR0aW5ncyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkR3VpbGRXaWRnZXRTZXR0aW5ncz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndpZGdldChndWlsZElkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZXhlY3V0ZVdlYmhvb2sod2ViaG9va0lkLCB0b2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayh3ZWJob29rSWQsIHRva2VuLCBvcHRpb25zKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZm9sbG93QW5ub3VuY2VtZW50KHNvdXJjZUNoYW5uZWxJZCwgdGFyZ2V0Q2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRGb2xsb3dlZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmZvbGxvdyhzb3VyY2VDaGFubmVsSWQpLCB7XG4gICAgICAgIHdlYmhvb2tfY2hhbm5lbF9pZDogdGFyZ2V0Q2hhbm5lbElkLFxuICAgICAgfSBhcyBEaXNjb3JkRm9sbG93QW5ub3VuY2VtZW50Q2hhbm5lbClcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QWN0aXZlVGhyZWFkcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZExpc3RBY3RpdmVUaHJlYWRzPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLmFjdGl2ZShndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbihndWlsZElkLCBjb21tYW5kSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnM+KFxuICAgICAgICByZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMucGVybWlzc2lvbihyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCksXG4gICAgICApXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnNbXT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLnBlcm1pc3Npb25zKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEFwcGxpY2F0aW9uSW5mbygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb24+KHJlc3Qucm91dGVzLm9hdXRoMkFwcGxpY2F0aW9uKCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEF1ZGl0TG9nKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXVkaXRMb2c+KHJlc3Qucm91dGVzLmd1aWxkcy5hdWRpdGxvZ3MoZ3VpbGRJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEF1dG9tb2RSdWxlKGd1aWxkSWQsIHJ1bGVJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGU+KHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGUoZ3VpbGRJZCwgcnVsZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXV0b21vZFJ1bGVzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXV0b01vZGVyYXRpb25SdWxlW10+KHJlc3Qucm91dGVzLmd1aWxkcy5hdXRvbW9kLnJ1bGVzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBdmFpbGFibGVWb2ljZVJlZ2lvbnMoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFZvaWNlUmVnaW9uW10+KHJlc3Qucm91dGVzLnJlZ2lvbnMoKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QmFuKGd1aWxkSWQsIHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRCYW4+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJhbihndWlsZElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRCYW5zKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQmFuW10+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJhbnMoZ3VpbGRJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldENoYW5uZWwoaWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuY2hhbm5lbChpZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldENoYW5uZWxJbnZpdGVzKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRJbnZpdGVNZXRhZGF0YVtdPihyZXN0LnJvdXRlcy5jaGFubmVscy5pbnZpdGVzKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldENoYW5uZWxzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQ2hhbm5lbFtdPihyZXN0LnJvdXRlcy5ndWlsZHMuY2hhbm5lbHMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldENoYW5uZWxXZWJob29rcyhjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2ViaG9va1tdPihyZXN0LnJvdXRlcy5jaGFubmVscy53ZWJob29rcyhjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXREbUNoYW5uZWwodXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5kbSgpLCB7XG4gICAgICAgIHJlY2lwaWVudF9pZDogdXNlcklkLnRvU3RyaW5nKCksXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRFbW9qaShndWlsZElkLCBlbW9qaUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEVtb2ppPihyZXN0LnJvdXRlcy5ndWlsZHMuZW1vamkoZ3VpbGRJZCwgZW1vamlJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEVtb2ppcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEVtb2ppW10+KHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaXMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEZvbGxvd3VwTWVzc2FnZSh0b2tlbiwgbWVzc2FnZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMubWVzc2FnZShyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuLCBtZXNzYWdlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHYXRld2F5Qm90KCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHZXRHYXRld2F5Qm90PihyZXN0LnJvdXRlcy5nYXRld2F5Qm90KCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZChyZXN0LmFwcGxpY2F0aW9uSWQsIGNvbW1hbmRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHMoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZHMocmVzdC5hcHBsaWNhdGlvbklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGQoZ3VpbGRJZCwgb3B0aW9ucyA9IHsgY291bnRzOiB0cnVlIH0pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ndWlsZChndWlsZElkLCBvcHRpb25zLmNvdW50cykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCwgZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMub25lKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kW10+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMuYWxsKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkUHJldmlldyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkUHJldmlldz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnByZXZpZXcoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkVGVtcGxhdGUodGVtcGxhdGVDb2RlKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFRlbXBsYXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmNvZGUodGVtcGxhdGVDb2RlKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRUZW1wbGF0ZXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRUZW1wbGF0ZVtdPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmFsbChndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRXZWJob29rcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFdlYmhvb2tbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndlYmhvb2tzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRJbnRlZ3JhdGlvbnMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRJbnRlZ3JhdGlvbltdPihyZXN0LnJvdXRlcy5ndWlsZHMuaW50ZWdyYXRpb25zKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRJbnZpdGUoaW52aXRlQ29kZSwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRJbnZpdGVNZXRhZGF0YT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmludml0ZShpbnZpdGVDb2RlLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0SW52aXRlcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEludml0ZU1ldGFkYXRhW10+KHJlc3Qucm91dGVzLmd1aWxkcy5pbnZpdGVzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRNZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRNZXNzYWdlcyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZVtdPihyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlcyhjaGFubmVsSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXROaXRyb1N0aWNrZXJQYWNrcygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlclBhY2tbXT4ocmVzdC5yb3V0ZXMubml0cm9TdGlja2VyUGFja3MoKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0T3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlKHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMub3JpZ2luYWwocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbikpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFBpbm5lZE1lc3NhZ2VzKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnBpbnMoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UHJpdmF0ZUFyY2hpdmVkVGhyZWFkcyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTGlzdEFyY2hpdmVkVGhyZWFkcz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5wcml2YXRlKGNoYW5uZWxJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFByaXZhdGVKb2luZWRBcmNoaXZlZFRocmVhZHMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHM+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMuam9pbmVkKGNoYW5uZWxJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFBydW5lQ291bnQoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRQcnVuZWRDb3VudD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnBydW5lKGd1aWxkSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQdWJsaWNBcmNoaXZlZFRocmVhZHMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZExpc3RBcmNoaXZlZFRocmVhZHM+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMucHVibGljKGNoYW5uZWxJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFJvbGVzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkUm9sZVtdPihyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMuYWxsKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTY2hlZHVsZWRFdmVudChndWlsZElkLCBldmVudElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFNjaGVkdWxlZEV2ZW50PihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50KGd1aWxkSWQsIGV2ZW50SWQsIG9wdGlvbnM/LndpdGhVc2VyQ291bnQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTY2hlZHVsZWRFdmVudHMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTY2hlZHVsZWRFdmVudFtdPihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50cyhndWlsZElkLCBvcHRpb25zPy53aXRoVXNlckNvdW50KSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2NoZWR1bGVkRXZlbnRVc2VycyhndWlsZElkLCBldmVudElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8QXJyYXk8eyB1c2VyOiBEaXNjb3JkVXNlcjsgbWVtYmVyPzogRGlzY29yZE1lbWJlciB9Pj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy51c2VycyhndWlsZElkLCBldmVudElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U2Vzc2lvbkluZm8oKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXRHYXRld2F5Qm90KClcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3RhZ2VJbnN0YW5jZShjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RhZ2VJbnN0YW5jZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuc3RhZ2UoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0U3RpY2tlcihzdGlja2VySWQ6IEJpZ1N0cmluZykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyPihyZXN0LnJvdXRlcy5zdGlja2VyKHN0aWNrZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEd1aWxkU3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRTdGlja2VycyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0aWNrZXJbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXJzKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRUaHJlYWRNZW1iZXIoY2hhbm5lbElkLCB1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVGhyZWFkTWVtYmVyPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnVzZXIoY2hhbm5lbElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRUaHJlYWRNZW1iZXJzKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRUaHJlYWRNZW1iZXJbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5tZW1iZXJzKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFJlYWN0aW9ucyhjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVXNlcltdPihyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24sIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRVc2VyKGlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFVzZXI+KHJlc3Qucm91dGVzLnVzZXIoaWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRWYW5pdHlVcmwoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRWYW5pdHlVcmw+KHJlc3Qucm91dGVzLmd1aWxkcy52YW5pdHkoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFZvaWNlUmVnaW9ucyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFZvaWNlUmVnaW9uW10+KHJlc3Qucm91dGVzLmd1aWxkcy5yZWdpb25zKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWJob29rKHdlYmhvb2tJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy53ZWJob29rcy5pZCh3ZWJob29rSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWJob29rTWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMud2ViaG9va3MubWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBtZXNzYWdlSWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWJob29rV2l0aFRva2VuKHdlYmhvb2tJZCwgdG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayh3ZWJob29rSWQsIHRva2VuKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2VsY29tZVNjcmVlbihndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFdlbGNvbWVTY3JlZW4+KHJlc3Qucm91dGVzLmd1aWxkcy53ZWxjb21lKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXaWRnZXQoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZFdpZGdldD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndpZGdldEpzb24oZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdpZGdldFNldHRpbmdzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRXaWRnZXRTZXR0aW5ncz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndpZGdldChndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgam9pblRocmVhZChjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGxlYXZlR3VpbGQoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5sZWF2ZShndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGVhdmVUaHJlYWQoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5tZShjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBwdWJsaXNoTWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuY3Jvc3Nwb3N0KGNoYW5uZWxJZCwgbWVzc2FnZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVtb3ZlUm9sZShndWlsZElkLCB1c2VySWQsIHJvbGVJZCwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm1lbWJlcihndWlsZElkLCB1c2VySWQsIHJvbGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHJlbW92ZVRocmVhZE1lbWJlcihjaGFubmVsSWQsIHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMudXNlcihjaGFubmVsSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRGb2xsb3d1cE1lc3NhZ2UodG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHJlc3Quc2VuZFJlcXVlc3Qoe1xuICAgICAgICAgIHVybDogcmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayhyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuKSxcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBvcHRpb25zLFxuICAgICAgICAgIHJldHJ5Q291bnQ6IDAsXG4gICAgICAgICAgcmV0cnlSZXF1ZXN0OiBhc3luYyBmdW5jdGlvbiAob3B0aW9uczogU2VuZFJlcXVlc3RPcHRpb25zKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBzaG91bGQgY2hhbmdlIHRvIHJlcHJvY2VzcyBxdWV1ZSBpdGVtXG4gICAgICAgICAgICBhd2FpdCByZXN0LnNlbmRSZXF1ZXN0KG9wdGlvbnMpXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXNvbHZlOiAoZGF0YSkgPT4gcmVzb2x2ZShkYXRhLnN0YXR1cyAhPT0gMjA0ID8gSlNPTi5wYXJzZShkYXRhLmJvZHkgPz8gJ3t9JykgOiB1bmRlZmluZWQpLFxuICAgICAgICAgIHJlamVjdCxcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRJbnRlcmFjdGlvblJlc3BvbnNlKGludGVyYWN0aW9uSWQsIHRva2VuLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICByZXN0LnNlbmRSZXF1ZXN0KHtcbiAgICAgICAgICB1cmw6IHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMuY2FsbGJhY2soaW50ZXJhY3Rpb25JZCwgdG9rZW4pLFxuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgICAgcmV0cnlDb3VudDogMCxcbiAgICAgICAgICByZXRyeVJlcXVlc3Q6IGFzeW5jIGZ1bmN0aW9uIChvcHRpb25zOiBTZW5kUmVxdWVzdE9wdGlvbnMpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IHNob3VsZCBjaGFuZ2UgdG8gcmVwcm9jZXNzIHF1ZXVlIGl0ZW1cbiAgICAgICAgICAgIGF3YWl0IHJlc3Quc2VuZFJlcXVlc3Qob3B0aW9ucylcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc29sdmU6IChkYXRhKSA9PiByZXNvbHZlKGRhdGEuc3RhdHVzICE9PSAyMDQgPyBKU09OLnBhcnNlKGRhdGEuYm9keSA/PyAne30nKSA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgcmVqZWN0LFxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZE1lc3NhZ2UoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5tZXNzYWdlcyhjaGFubmVsSWQpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBzdGFydFRocmVhZFdpdGhNZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBzdGFydFRocmVhZFdpdGhvdXRNZXNzYWdlKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5hbGwoY2hhbm5lbElkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgc3luY0d1aWxkVGVtcGxhdGUoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRUZW1wbGF0ZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnRlbXBsYXRlcy5hbGwoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGJhbk1lbWJlcihndWlsZElkLCB1c2VySWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDx2b2lkPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5iYW4oZ3VpbGRJZCwgdXNlcklkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEJvdE1lbWJlcihndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVtYmVyPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5ib3QoZ3VpbGRJZCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRNZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVtYmVyV2l0aFVzZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLm1lbWJlcihndWlsZElkLCB1c2VySWQpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRNZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lbWJlcldpdGhVc2VyPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0TWVtYmVycyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lbWJlcldpdGhVc2VyW10+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLm1lbWJlcnMoZ3VpbGRJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGtpY2tNZW1iZXIoZ3VpbGRJZCwgdXNlcklkLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5tZW1iZXIoZ3VpbGRJZCwgdXNlcklkKSwge1xuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBwaW5NZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dChyZXN0LnJvdXRlcy5jaGFubmVscy5waW4oY2hhbm5lbElkLCBtZXNzYWdlSWQpLCByZWFzb24gPyB7IHJlYXNvbiB9IDogdW5kZWZpbmVkKVxuICAgIH0sXG5cbiAgICBhc3luYyBwcnVuZU1lbWJlcnMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDx7IHBydW5lZDogbnVtYmVyIHwgbnVsbCB9PihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5wcnVuZShndWlsZElkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VhcmNoTWVtYmVycyhndWlsZElkLCBxdWVyeSwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZW1iZXJXaXRoVXNlcltdPihyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5zZWFyY2goZ3VpbGRJZCwgcXVlcnksIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyB1bmJhbk1lbWJlcihndWlsZElkLCB1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMubWVtYmVycy5iYW4oZ3VpbGRJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdW5waW5NZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5waW4oY2hhbm5lbElkLCBtZXNzYWdlSWQpLCByZWFzb24gPyB7IHJlYXNvbiB9IDogdW5kZWZpbmVkKVxuICAgIH0sXG5cbiAgICBhc3luYyB0cmlnZ2VyVHlwaW5nSW5kaWNhdG9yKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5jaGFubmVscy50eXBpbmcoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBzZXJ0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kcyhjb21tYW5kcykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmRzKHJlc3QuYXBwbGljYXRpb25JZCksIGNvbW1hbmRzKVxuICAgIH0sXG5cbiAgICBhc3luYyB1cHNlcnRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMoZ3VpbGRJZCwgY29tbWFuZHMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kW10+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5ndWlsZHMuYWxsKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCksIGNvbW1hbmRzKVxuICAgIH0sXG4gIH1cblxuICByZXR1cm4gcmVzdFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZVJlc3RNYW5hZ2VyT3B0aW9ucyB7XG4gIC8qKiBUaGUgYm90IHRva2VuIHdoaWNoIHdpbGwgYmUgdXNlZCB0byBtYWtlIHJlcXVlc3RzLiAqL1xuICB0b2tlbjogc3RyaW5nXG4gIC8qKlxuICAgKiBGb3Igb2xkIGJvdHMgdGhhdCBoYXZlIGEgZGlmZmVyZW50IGJvdCBpZCBhbmQgYXBwbGljYXRpb24gaWQuXG4gICAqIEBkZWZhdWx0IGJvdCBpZCBmcm9tIHRva2VuXG4gICAqL1xuICBhcHBsaWNhdGlvbklkPzogQmlnU3RyaW5nXG4gIC8qKlxuICAgKiBUaGUgYmFzZSB1cmwgdG8gY29ubmVjdCB0by4gSWYgeW91IGNyZWF0ZSBhIHByb3h5IHJlc3QsIHRoYXQgdXJsIHdvdWxkIGdvIGhlcmUuXG4gICAqIElUIFNIT1VMRCBOT1QgRU5EIFdJVEggQSAvXG4gICAqIEBkZWZhdWx0IGh0dHBzOi8vZGlzY29yZC5jb20vYXBpXG4gICAqL1xuICBiYXNlVXJsPzogc3RyaW5nXG4gIC8qKlxuICAgKiBUaGUgYXBpIHZlcnNpb25zIHdoaWNoIGNhbiBiZSB1c2VkIHRvIG1ha2UgcmVxdWVzdHMuXG4gICAqIEBkZWZhdWx0IDEwXG4gICAqL1xuICB2ZXJzaW9uPzogQXBpVmVyc2lvbnNcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXN0TWFuYWdlciB7XG4gIC8qKiBUaGUgYm90IHRva2VuIHdoaWNoIHdpbGwgYmUgdXNlZCB0byBtYWtlIHJlcXVlc3RzLiAqL1xuICB0b2tlbjogc3RyaW5nXG4gIC8qKiBUaGUgYXBwbGljYXRpb24gaWQuIE5vcm1hbGx5IHRoaXMgaXMgbm90IHJlcXVpcmVkIGZvciByZWNlbnQgYm90cyBidXQgb2xkIGJvdCdzIGFwcGxpY2F0aW9uIGlkIGlzIHNvbWV0aW1lcyBkaWZmZXJlbnQgZnJvbSB0aGUgYm90IGlkIHNvIGl0IGlzIHJlcXVpcmVkIGZvciB0aG9zZSBib3RzLiAqL1xuICBhcHBsaWNhdGlvbklkOiBiaWdpbnRcbiAgLyoqIFRoZSBhcGkgdmVyc2lvbiB0byB1c2Ugd2hlbiBtYWtpbmcgcmVxdWVzdHMuIE9ubHkgdGhlIGxhdGVzdCBzdXBwb3J0ZWQgdmVyc2lvbiB3aWxsIGJlIHRlc3RlZC4gKi9cbiAgdmVyc2lvbjogQXBpVmVyc2lvbnNcbiAgLyoqXG4gICAqIFRoZSBiYXNlIHVybCB0byBjb25uZWN0IHRvLiBJZiB5b3UgY3JlYXRlIGEgcHJveHkgcmVzdCwgdGhhdCB1cmwgd291bGQgZ28gaGVyZS5cbiAgICogSVQgU0hPVUxEIE5PVCBFTkQgV0lUSCBBIC9cbiAgICogQGRlZmF1bHQgaHR0cHM6Ly9kaXNjb3JkLmNvbS9hcGlcbiAgICovXG4gIGJhc2VVcmw6IHN0cmluZ1xuICAvKiogVGhlIG1heGltdW0gYW1vdW50IG9mIHRpbWVzIGEgcmVxdWVzdCBzaG91bGQgYmUgcmV0cmllZC4gRGVmYXVsdHMgdG8gSW5maW5pdHkgKi9cbiAgbWF4UmV0cnlDb3VudDogbnVtYmVyXG4gIC8qKiBXaGV0aGVyIG9yIG5vdCB0aGUgbWFuYWdlciBpcyByYXRlIGxpbWl0ZWQgZ2xvYmFsbHkgYWNyb3NzIGFsbCByZXF1ZXN0cy4gRGVmYXVsdHMgdG8gZmFsc2UuICovXG4gIGdsb2JhbGx5UmF0ZUxpbWl0ZWQ6IGJvb2xlYW5cbiAgLyoqIFdoZXRoZXIgb3Igbm90IHRoZSByYXRlIGxpbWl0ZWQgcGF0aHMgYXJlIGJlaW5nIHByb2Nlc3NlZCB0byBhbGxvdyByZXF1ZXN0cyB0byBiZSBtYWRlIG9uY2UgdGltZSBpcyB1cC4gRGVmYXVsdHMgdG8gZmFsc2UuICovXG4gIHByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzOiBib29sZWFuXG4gIC8qKiBUaGUgdGltZSBpbiBtaWxsaXNlY29uZHMgdG8gd2FpdCBiZWZvcmUgZGVsZXRpbmcgdGhpcyBxdWV1ZSBpZiBpdCBpcyBlbXB0eS4gRGVmYXVsdHMgdG8gNjAwMDAob25lIG1pbnV0ZSkuICovXG4gIGRlbGV0ZVF1ZXVlRGVsYXk6IG51bWJlclxuICAvKiogVGhlIHF1ZXVlcyB0aGF0IGhvbGQgYWxsIHRoZSByZXF1ZXN0cyB0byBiZSBwcm9jZXNzZWQuICovXG4gIHF1ZXVlczogTWFwPHN0cmluZywgUXVldWU+XG4gIC8qKiBUaGUgcGF0aHMgdGhhdCBhcmUgY3VycmVudGx5IHJhdGUgbGltaXRlZC4gKi9cbiAgcmF0ZUxpbWl0ZWRQYXRoczogTWFwPHN0cmluZywgUmVzdFJhdGVMaW1pdGVkUGF0aD5cbiAgLyoqIFRoZSBidWNrZXQgZm9yIGhhbmRsaW5nIGFueSBpbnZhbGlkIHJlcXVlc3RzLiAgKi9cbiAgaW52YWxpZEJ1Y2tldDogSW52YWxpZFJlcXVlc3RCdWNrZXRcbiAgLyoqIFRoZSByb3V0ZXMgdGhhdCBhcmUgYXZhaWxhYmxlIGZvciB0aGlzIG1hbmFnZXIuICovXG4gIHJvdXRlczoge1xuICAgIC8qKiBSb3V0ZSB0byBnZXQgYSBib3RzIHNlc3Npb24gaW5mby4gKi9cbiAgICBzZXNzaW9uSW5mbzogKCkgPT4gc3RyaW5nXG4gICAgLyoqIEEgc3BlY2lmaWMgdXNlciByb3V0ZS4gKi9cbiAgICB1c2VyOiAoaWQ6IEJpZ1N0cmluZykgPT4gc3RyaW5nXG4gICAgLyoqIEN1cnJlbnQgYm90IHVzZXIgcm91dGUuICovXG4gICAgdXNlckJvdDogKCkgPT4gc3RyaW5nXG4gICAgLy8gT0F1dGgyXG4gICAgb2F1dGgyQXBwbGljYXRpb246ICgpID0+IHN0cmluZ1xuICAgIC8vIEdhdGV3YXkgQm90XG4gICAgZ2F0ZXdheUJvdDogKCkgPT4gc3RyaW5nXG4gICAgLy8gTml0cm8gU3RpY2tlciBQYWNrc1xuICAgIG5pdHJvU3RpY2tlclBhY2tzOiAoKSA9PiBzdHJpbmdcbiAgICAvKiogUm91dGVzIGZvciB3ZWJob29rIHJlbGF0ZWQgcm91dGVzLiAqL1xuICAgIHdlYmhvb2tzOiB7XG4gICAgICAvKiogUm91dGUgZm9yIG1hbmFnaW5nIHRoZSBvcmlnaW5hbCBtZXNzYWdlIHNlbnQgYnkgYSB3ZWJob29rLiAqL1xuICAgICAgb3JpZ2luYWw6ICh3ZWJob29rSWQ6IEJpZ1N0cmluZywgdG9rZW46IHN0cmluZywgb3B0aW9ucz86IHsgdGhyZWFkSWQ/OiBCaWdTdHJpbmcgfSkgPT4gc3RyaW5nXG4gICAgICAvKiogUm91dGUgZm9yIHdlYmhvb2sgd2l0aCBhIGlkLiAqL1xuICAgICAgaWQ6ICh3ZWJob29rSWQ6IEJpZ1N0cmluZykgPT4gc3RyaW5nXG4gICAgICAvKiogUm91dGUgZm9yIGhhbmRsaW5nIGEgd2ViaG9vayB3aXRoIGEgdG9rZW4uICovXG4gICAgICB3ZWJob29rOiAod2ViaG9va0lkOiBCaWdTdHJpbmcsIHRva2VuOiBzdHJpbmcsIG9wdGlvbnM/OiB7IHdhaXQ/OiBib29sZWFuOyB0aHJlYWRJZD86IEJpZ1N0cmluZyB9KSA9PiBzdHJpbmdcbiAgICAgIC8qKiBSb3V0ZSBmb3IgaGFuZGxpbmcgYSBtZXNzYWdlIHRoYXQgd2FzIHNlbnQgdGhyb3VnaCBhIHdlYmhvb2suICovXG4gICAgICBtZXNzYWdlOiAod2ViaG9va0lkOiBCaWdTdHJpbmcsIHRva2VuOiBzdHJpbmcsIG1lc3NhZ2VJZDogQmlnU3RyaW5nLCBvcHRpb25zPzogeyB0aHJlYWRJZD86IEJpZ1N0cmluZyB9KSA9PiBzdHJpbmdcbiAgICB9XG4gICAgLyoqIFJvdXRlcyBmb3IgY2hhbm5lbCByZWxhdGVkIGVuZHBvaW50cy4gKi9cbiAgICBjaGFubmVsczoge1xuICAgICAgLyoqIFJvdXRlIGZvciBoYW5kbGluZyBidWxrIG1lc3NhZ2VzIGluIGEgY2hhbm5lbC4gKi9cbiAgICAgIGJ1bGs6IChjaGFubmVsSWQ6IEJpZ1N0cmluZykgPT4gc3RyaW5nXG4gICAgICAvKiogUm91dGUgZm9yIG5vbi1zcGVjaWZpYyBkbSBjaGFubmVsLiAqL1xuICAgICAgZG06ICgpID0+IHN0cmluZ1xuICAgICAgLyoqIFJvdXRlIGZvciBoYW5kbGluZyBhIHNwZWNpZmljIHBpbi4gKi9cbiAgICAgIHBpbjogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZykgPT4gc3RyaW5nXG4gICAgICAvKiogUm91dGUgZm9yIGhhbmRsaW5nIGEgY2hhbm5lbHMgcGlucy4gKi9cbiAgICAgIHBpbnM6IChjaGFubmVsSWQ6IEJpZ1N0cmluZykgPT4gc3RyaW5nXG4gICAgICAvKiogUm91dGUgZm9yIG5vbi1zcGVjaWZpYyB3ZWJob29rIGluIGEgY2hhbm5lbC4gKi9cbiAgICAgIHdlYmhvb2tzOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcpID0+IHN0cmluZ1xuICAgICAgLyoqIFJvdXRlIGZvciBhIHNwZWNpZmljIGNoYW5uZWwuICovXG4gICAgICBjaGFubmVsOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcpID0+IHN0cmluZ1xuICAgICAgLyoqIFJvdXRlIGZvciBmb2xsb3dpbmcgYSBzcGVjaWZpYyBjaGFubmVsLiAqL1xuICAgICAgZm9sbG93OiAoY2hhbm5lbElkOiBCaWdTdHJpbmcpID0+IHN0cmluZ1xuICAgICAgLyoqIFJvdXRlIGZvciBtYW5hZ2luZyBhIGZvcnVtIHdpdGggYSBtZXNzYWdlLiAqL1xuICAgICAgZm9ydW06IChjaGFubmVsSWQ6IEJpZ1N0cmluZykgPT4gc3RyaW5nXG4gICAgICAvKiogUm91dGUgZm9yIGEgc3BlY2lmaWMgY2hhbm5lbCdzIGludml0ZXMuICovXG4gICAgICBpbnZpdGVzOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcpID0+IHN0cmluZ1xuICAgICAgLyoqIFJvdXRlIGZvciBhIHNwZWNpZmljIG1lc3NhZ2UgKi9cbiAgICAgIG1lc3NhZ2U6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgaWQ6IEJpZ1N0cmluZykgPT4gc3RyaW5nXG4gICAgICAvKiogUm91dGUgZm9yIGhhbmRsaW5nIG5vbi1zcGVjaWZpYyBtZXNzYWdlcy4gKi9cbiAgICAgIG1lc3NhZ2VzOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiBHZXRNZXNzYWdlc09wdGlvbnMpID0+IHN0cmluZ1xuICAgICAgLyoqIFJvdXRlIGZvciBoYW5kbGluZyBhIHNwZWNpZmljIG92ZXJ3cml0ZS4gKi9cbiAgICAgIG92ZXJ3cml0ZTogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBvdmVyd3JpdGVJZDogQmlnU3RyaW5nKSA9PiBzdHJpbmdcbiAgICAgIC8qKiBSb3V0ZSBmb3IgaGFuZGxpbmcgY3Jvc3Nwb3N0aW5nIGEgc3BlY2lmaWMgbWVzc2FnZS4gKi9cbiAgICAgIGNyb3NzcG9zdDogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZykgPT4gc3RyaW5nXG4gICAgICAvKiogUm91dGUgZm9yIGhhbmRsaW5nIG5vbi1zcGVjaWZpYyBzdGFnZXMgKi9cbiAgICAgIHN0YWdlczogKCkgPT4gc3RyaW5nXG4gICAgICAvKiogUm91dGUgZm9yIGhhbmRsaW5nIGEgc3BlY2lmaWMgc3RhZ2UgKi9cbiAgICAgIHN0YWdlOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcpID0+IHN0cmluZ1xuICAgICAgLyoqIFJvdXRlcyBmb3IgaGFuZGxpbmcgdGhyZWFkIHJlbGF0ZWQgdG8gYSBjaGFubmVsLiAqL1xuICAgICAgdGhyZWFkczoge1xuICAgICAgICAvKiogUm91dGUgZm9yIHRocmVhZCBhIHNwZWNpZmljIG1lc3NhZ2UuICovXG4gICAgICAgIG1lc3NhZ2U6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgbWVzc2FnZUlkOiBCaWdTdHJpbmcpID0+IHN0cmluZ1xuICAgICAgICAvKiogUm91dGUgZm9yIHRocmVhZCB3aXRob3V0IGEgbWVzc2FnZS4gKi9cbiAgICAgICAgYWxsOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcpID0+IHN0cmluZ1xuICAgICAgICAvKiogUm91dGUgZm9yIGFjdGl2ZSB0aHJlYWRzLiAqL1xuICAgICAgICBhY3RpdmU6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IHN0cmluZ1xuICAgICAgICAvKiogUm91dGUgZm9yIG1lbWJlcnMgaW4gYSB0aHJlYWQuICovXG4gICAgICAgIG1lbWJlcnM6IChjaGFubmVsSWQ6IEJpZ1N0cmluZykgPT4gc3RyaW5nXG4gICAgICAgIC8qKiBSb3V0ZSBmb3IgdGhlIGJvdCBtZW1iZXIgaW4gYSB0aHJlYWQuICovXG4gICAgICAgIG1lOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcpID0+IHN0cmluZ1xuICAgICAgICAvKiogUm91dGUgZm9yIGEgc3BlY2lmaWMgbWVtYmVyIGluIGEgdGhyZWFkLiAqL1xuICAgICAgICB1c2VyOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIHVzZXJJZDogQmlnU3RyaW5nKSA9PiBzdHJpbmdcbiAgICAgICAgLyoqIFJvdXRlIGZvciBoYW5kbGluZyBhcmNoaXZlZCB0aHJlYWRzLiAqL1xuICAgICAgICBhcmNoaXZlZDogKGNoYW5uZWxJZDogQmlnU3RyaW5nKSA9PiBzdHJpbmdcbiAgICAgICAgLyoqIFJvdXRlIGZvciBoYW5kbGluZyBwdWJsaWNhbGx5IGFyY2hpdmVkIHRocmVhZHMuICovXG4gICAgICAgIHB1YmxpYzogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBvcHRpb25zPzogTGlzdEFyY2hpdmVkVGhyZWFkcykgPT4gc3RyaW5nXG4gICAgICAgIC8qKiBSb3V0ZSBmb3IgaGFuZGxpbmcgcHJpdmF0ZSBhcmNoaXZlZCB0aHJlYWRzLiAqL1xuICAgICAgICBwcml2YXRlOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiBMaXN0QXJjaGl2ZWRUaHJlYWRzKSA9PiBzdHJpbmdcbiAgICAgICAgLyoqIFJvdXRlIGZvciBoYW5kbGluZyBwcml2YXRlIGFyY2hpdmVkIHRocmVhZHMgdGhhdCB0aGUgYm90IGhhcyBqb2luZWQuICovXG4gICAgICAgIGpvaW5lZDogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBvcHRpb25zPzogTGlzdEFyY2hpdmVkVGhyZWFkcykgPT4gc3RyaW5nXG4gICAgICB9XG4gICAgICAvKiogUm91dGUgZm9yIGhhbmRsaW5nIHR5cGluZyBpbmRpY2F0b3JzIGluIGEgY8KraGFubmVsLiAqL1xuICAgICAgdHlwaW5nOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcpID0+IHN0cmluZ1xuICAgICAgLyoqIFJvdXRlcyBmb3IgaGFuZGxpbmcgcmVhY3Rpb25zIG9uIGEgbWVzc2FnZS4gKi9cbiAgICAgIHJlYWN0aW9uczoge1xuICAgICAgICAvKiogUm91dGUgZm9yIGhhbmRsaW5nIGEgYm90cyByZWFjdGlvbi4gKi9cbiAgICAgICAgYm90OiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG1lc3NhZ2VJZDogQmlnU3RyaW5nLCBlbW9qaTogc3RyaW5nKSA9PiBzdHJpbmdcbiAgICAgICAgLyoqIFJvdXRlIGZvciBoYW5kbGluZyBhIHVzZXIncyByZWFjdGlvbnMuICovXG4gICAgICAgIHVzZXI6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgbWVzc2FnZUlkOiBCaWdTdHJpbmcsIGVtb2ppOiBzdHJpbmcsIHVzZXJJZDogQmlnU3RyaW5nKSA9PiBzdHJpbmdcbiAgICAgICAgLyoqIFJvdXRlIGZvciBoYW5kbGluZyBhbGwgdGhlIHJlYWN0aW9ucyBvbiBhIG1lc3NhZ2UuICovXG4gICAgICAgIGFsbDogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZykgPT4gc3RyaW5nXG4gICAgICAgIC8qKiBSb3V0ZSBmb3IgaGFuZGxpbmcgYWxsIHJlYWN0aW9ucyBmb3IgYSBzaW5nbGUgZW1vamkgb24gYSBtZXNzYWdlLiAqL1xuICAgICAgICBlbW9qaTogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZywgZW1vamk6IHN0cmluZywgb3B0aW9ucz86IEdldFJlYWN0aW9ucykgPT4gc3RyaW5nXG4gICAgICAgIC8qKiBSb3V0ZSBmb3IgaGFuZGxpbmcgYSBzcGVjaWZpYyByZWFjdGlvbiBvbiBhIG1lc3NhZ2UuICovXG4gICAgICAgIG1lc3NhZ2U6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgbWVzc2FnZUlkOiBCaWdTdHJpbmcsIGVtb2ppOiBzdHJpbmcsIG9wdGlvbnM/OiBHZXRSZWFjdGlvbnMpID0+IHN0cmluZ1xuICAgICAgfVxuICAgIH1cbiAgICAvKiogUm91dGVzIGZvciBndWlsZCByZWxhdGVkIGVuZHBvaW50cy4gKi9cbiAgICBndWlsZHM6IHtcbiAgICAgIC8qKiBSb3V0ZXMgZm9yIGhhbmRsaW5nIGEgbm9uLXNwZWNpZmljIGd1aWxkLiAqL1xuICAgICAgYWxsOiAoKSA9PiBzdHJpbmdcbiAgICAgIC8qKiBSb3V0ZSBmb3IgaGFuZGxpbmcgYXVkaXQgbG9ncyBpbiBhIGd1aWxkLiAqL1xuICAgICAgYXVkaXRsb2dzOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zPzogR2V0R3VpbGRBdWRpdExvZykgPT4gc3RyaW5nXG4gICAgICAvKiogUm91dGVzIGZvciBhIGd1aWxkcyBhdXRvbW9kZXJhdGlvbi4gKi9cbiAgICAgIGF1dG9tb2Q6IHtcbiAgICAgICAgLyoqIFJvdXRlIGZvciBoYW5kbGluZyBhIGd1aWxkJ3MgYXV0b21vZGVyYXRpb24uICovXG4gICAgICAgIHJ1bGVzOiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBzdHJpbmdcbiAgICAgICAgLyoqIFJvdXRlIGZvciBoYW5kbGluZyBhIHNwZWNpZmljIGF1dG9tb2RlcmF0aW9uIHJ1bGUgZ3VpbGQncyAqL1xuICAgICAgICBydWxlOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBydWxlSWQ6IEJpZ1N0cmluZykgPT4gc3RyaW5nXG4gICAgICB9XG4gICAgICAvKiogUm91dGVzIGZvciBoYW5kbGluZyBhIGd1aWxkJ3Mgc2NoZWR1bGVkIGV2ZW50cy4gKi9cbiAgICAgIGV2ZW50czoge1xuICAgICAgICAvKiogUm91dGUgZm9yIGhhbmRsaW5nIG5vbi1zcGVjaWZpYyBzY2hlZHVsZWQgZXZlbnQuICovXG4gICAgICAgIGV2ZW50czogKGd1aWxkSWQ6IEJpZ1N0cmluZywgd2l0aFVzZXJDb3VudD86IGJvb2xlYW4pID0+IHN0cmluZ1xuICAgICAgICAvKiogUm91dGUgZm9yIGhhbmRsaW5nIGEgc3BlY2lmaWMgc2NoZWR1bGVkIGV2ZW50LiAqL1xuICAgICAgICBldmVudDogKGd1aWxkSWQ6IEJpZ1N0cmluZywgZXZlbnRJZDogQmlnU3RyaW5nLCB3aXRoVXNlckNvdW50PzogYm9vbGVhbikgPT4gc3RyaW5nXG4gICAgICAgIC8qKiBSb3V0ZSBmb3IgaGFuZGxpbmcgYSBzY2hlZHVsZWQgZXZlbnQgdXNlcnMuICovXG4gICAgICAgIHVzZXJzOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBldmVudElkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiBHZXRTY2hlZHVsZWRFdmVudFVzZXJzKSA9PiBzdHJpbmdcbiAgICAgIH1cbiAgICAgIC8qKiBSb3V0ZSBmb3IgaGFuZGxpbmcgbm9uLXNwZWNpZmljIGNoYW5uZWxzIGluIGEgZ3VpbGQgKi9cbiAgICAgIGNoYW5uZWxzOiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBzdHJpbmdcbiAgICAgIC8qKiBSb3V0ZSBmb3IgaGFuZGxpbmcgYSBzcGVjaWZpYyBlbW9qaS4gKi9cbiAgICAgIGVtb2ppOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBpZDogQmlnU3RyaW5nKSA9PiBzdHJpbmdcbiAgICAgIC8qKiBSb3V0ZSBmb3IgaGFuZGxpbmcgbm9uLXNwZWNpZmljIGVtb2ppcy4gKi9cbiAgICAgIGVtb2ppczogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gc3RyaW5nXG4gICAgICAvKiogUm91dGUgZm9yIGhhbmRsaW5nIGEgc3BlY2lmaWMgZ3VpbGQuICovXG4gICAgICBndWlsZDogKGd1aWxkSWQ6IEJpZ1N0cmluZywgd2l0aENvdW50cz86IGJvb2xlYW4pID0+IHN0cmluZ1xuICAgICAgLyoqIFJvdXRlIGZvciBoYW5kbGluZyBhIHNwZWNpZmljIGludGVncmF0aW9uLiAqL1xuICAgICAgaW50ZWdyYXRpb246IChndWlsZElkOiBCaWdTdHJpbmcsIGludGVncmF0aW9uSWQ6IEJpZ1N0cmluZykgPT4gc3RyaW5nXG4gICAgICAvKiogUm91dGUgZm9yIGhhbmRsaW5nIG5vbi1zcGVjaWZpYyBpbnRlZ3JhdGlvbnMuICovXG4gICAgICBpbnRlZ3JhdGlvbnM6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IHN0cmluZ1xuICAgICAgLyoqIFJvdXRlIGZvciBoYW5kbGluZyBhIHNwZWNpZmljIGd1aWxkIGludml0ZS4gKi9cbiAgICAgIGludml0ZTogKGludml0ZUNvZGU6IHN0cmluZywgb3B0aW9ucz86IEdldEludml0ZSkgPT4gc3RyaW5nXG4gICAgICAvKiogUm91dGUgZm9yIGhhbmRsaW5nIG5vbi1zcGVjaWZpYyBpbnZpdGVzIGluIGEgZ3VpbGQuICovXG4gICAgICBpbnZpdGVzOiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBzdHJpbmdcbiAgICAgIC8qKiBSb3V0ZSBmb3IgaGFuZGxpbmcgYSBib3QgbGVhdmluZyBhIGd1aWxkLiAqL1xuICAgICAgbGVhdmU6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IHN0cmluZ1xuICAgICAgLyoqIFJvdXRlIGZvciBoYW5kbGluZyBhIGd1aWxkJ3MgcHJldmlldy4gKi9cbiAgICAgIHByZXZpZXc6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IHN0cmluZ1xuICAgICAgLyoqIFJvdXRlIGZvciBoYW5kbGluZyBwcnVuaW5nIG9mIGEgZ3VpbGQuICovXG4gICAgICBwcnVuZTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IEdldEd1aWxkUHJ1bmVDb3VudFF1ZXJ5KSA9PiBzdHJpbmdcbiAgICAgIC8qKiBSb3V0ZSBmb3IgaGFuZGxpbmcgbm9uLXNwZWNpZmljIHdlYmhvb2tzIGluIGEgZ3VpbGQgKi9cbiAgICAgIHdlYmhvb2tzOiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBzdHJpbmdcbiAgICAgIC8qKiBSb3V0ZSBmb3IgaGFuZGxpbmcgYSBndWlsZCdzIHdlbGNvbWUgc2NyZWVuLiAqL1xuICAgICAgd2VsY29tZTogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gc3RyaW5nXG4gICAgICAvKiogUm91dGUgZm9yIGhhbmRsaW5nIGEgZ3VpbGQncyB3aWRnZXQuICovXG4gICAgICB3aWRnZXQ6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IHN0cmluZ1xuICAgICAgLyoqIFJvdXRlIGZvciBoYW5kbGluZyBhIGd1aWxkJ3Mgd2lkZ2V0IGluIHRoZSBmb3JtIG9mIGpzb24uICovXG4gICAgICB3aWRnZXRKc29uOiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBzdHJpbmdcbiAgICAgIC8qKiBSb3V0ZSBmb3IgaGFuZGxpbmcgYSBndWlsZHMgbWZhIGxldmVsLiAqL1xuICAgICAgbWZhOiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBzdHJpbmdcbiAgICAgIC8qKiBSb3V0ZXMgZm9yIGhhbmRsaW5nIGEgZ3VpbGQncyBtZW1iZXJzLiAqL1xuICAgICAgbWVtYmVyczoge1xuICAgICAgICAvKiogUm91dGUgZm9yIGhhbmRsaW5nIGEgc3BlY2lmaWMgZ3VpbGQgbWVtYmVyJ3MgYmFuLiAqL1xuICAgICAgICBiYW46IChndWlsZElkOiBCaWdTdHJpbmcsIHVzZXJJZDogQmlnU3RyaW5nKSA9PiBzdHJpbmdcbiAgICAgICAgLyoqIFJvdXRlIGZvciBoYW5kbGluZyBub24tc3BlY2lmaWMgYmFucyBpbiBhIGd1aWxkLiAqL1xuICAgICAgICBiYW5zOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zPzogR2V0QmFucykgPT4gc3RyaW5nXG4gICAgICAgIC8qKiBSb3V0ZSBmb3IgaGFuZGxpbmcgYSB0aGUgYm90IGd1aWxkIG1lbWJlci4gKi9cbiAgICAgICAgYm90OiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBzdHJpbmdcbiAgICAgICAgLyoqIFJvdXRlIGZvciBoYW5kbGluZyBhIHNwZWNpZmljIGd1aWxkIG1lbWJlci4gKi9cbiAgICAgICAgbWVtYmVyOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCB1c2VySWQ6IEJpZ1N0cmluZykgPT4gc3RyaW5nXG4gICAgICAgIC8qKiBSb3V0ZSBmb3IgaGFuZGxpbmcgbm9uLXNwZWNpZmljIGd1aWxkIG1lbWJlcnMuICovXG4gICAgICAgIG1lbWJlcnM6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiBMaXN0R3VpbGRNZW1iZXJzKSA9PiBzdHJpbmdcbiAgICAgICAgLyoqIFJvdXRlIGZvciBoYW5kbGluZyBtZW1iZXIgc2VhcmNoaW5nIGluIGEgZ3VpbGQuICovXG4gICAgICAgIHNlYXJjaDogKGd1aWxkSWQ6IEJpZ1N0cmluZywgcXVlcnk6IHN0cmluZywgb3B0aW9ucz86IHsgbGltaXQ/OiBudW1iZXIgfSkgPT4gc3RyaW5nXG4gICAgICAgIC8qKiBSb3V0ZSBmb3IgaGFuZGxpbmcgcHJ1bmluZyBndWlsZCBtZW1iZXJzLiAqL1xuICAgICAgICBwcnVuZTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IEdldEd1aWxkUHJ1bmVDb3VudFF1ZXJ5KSA9PiBzdHJpbmdcbiAgICAgIH1cbiAgICAgIC8qKiBSb3V0ZXMgZm9yIGhhbmRsaW5nIGEgZ3VpbGQncyB0ZW1wbGF0ZXMuICovXG4gICAgICB0ZW1wbGF0ZXM6IHtcbiAgICAgICAgLyoqIFJvdXRlIGZvciBoYW5kbGluZyBhIHNwZWNpZmMgZ3VpbGQncyB0ZW1wbGF0ZXMgd2l0aCBhIGNvZGUgb25seS4gKi9cbiAgICAgICAgY29kZTogKGNvZGU6IHN0cmluZykgPT4gc3RyaW5nXG4gICAgICAgIC8qKiBSb3V0ZSBmb3IgaGFuZGxpbmcgYSBzcGVjaWZpYyBndWlsZCdzIHRlbXBsYXRlIHdpdGggYSBndWlsZCBpZCBhbmQgY29kZS4gKi9cbiAgICAgICAgZ3VpbGQ6IChndWlsZElkOiBCaWdTdHJpbmcsIGNvZGU6IHN0cmluZykgPT4gc3RyaW5nXG4gICAgICAgIC8qKiBSb3V0ZSBmb3IgaGFuZGxpbmcgbm9uLXNwZWNpZmljIGd1aWxkJ3MgdGVtcGxhdGVzLiAqL1xuICAgICAgICBhbGw6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IHN0cmluZ1xuICAgICAgfVxuICAgICAgLyoqIFJvdXRlIGZvciBoYW5kbGluZyBhIGd1aWxkJ3MgdmFuaXR5IHVybC4gKi9cbiAgICAgIHZhbml0eTogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gc3RyaW5nXG4gICAgICAvKiogUm91dGUgZm9yIGhhbmRsaW5nIGEgZ3VpbGQncyByZWdpb25zLiAqL1xuICAgICAgcmVnaW9uczogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gc3RyaW5nXG4gICAgICAvKiogUm91dGVzIGZvciBoYW5kbGluZyBhIGd1aWxkJ3Mgcm9sZXMuICovXG4gICAgICByb2xlczoge1xuICAgICAgICAvKiogUm91dGUgZm9yIGhhbmRsaW5nIGEgc3BlY2lmaWMgZ3VpbGQgcm9sZS4gKi9cbiAgICAgICAgb25lOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCByb2xlSWQ6IEJpZ1N0cmluZykgPT4gc3RyaW5nXG4gICAgICAgIC8qKiBSb3V0ZSBmb3IgaGFuZGxpbmcgYSBndWlsZCdzIHJvbGVzLiAqL1xuICAgICAgICBhbGw6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IHN0cmluZ1xuICAgICAgICAvKiogUm91dGUgZm9yIGhhbmRsaW5nIGEgbWVtYmVycyByb2xlcyBpbiBhIGd1aWxkLiAqL1xuICAgICAgICBtZW1iZXI6IChndWlsZElkOiBCaWdTdHJpbmcsIG1lbWJlcklkOiBCaWdTdHJpbmcsIHJvbGVJZDogQmlnU3RyaW5nKSA9PiBzdHJpbmdcbiAgICAgIH1cbiAgICAgIC8qKiBSb3V0ZSBmb3IgaGFuZGxpbmcgYSBzcGVjaWZpYyBndWlsZCBzdGlja2VyLiAqL1xuICAgICAgc3RpY2tlcnM6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IHN0cmluZ1xuICAgICAgLyoqIFJvdXRlIGZvciBoYW5kbGluZyBub24tc3BlY2lmaWMgZ3VpbGQgc3RpY2tlcnMuICovXG4gICAgICBzdGlja2VyOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBzdGlja2VySWQ6IEJpZ1N0cmluZykgPT4gc3RyaW5nXG4gICAgICAvKiogUm91dGUgZm9yIGhhbmRsaW5nIGEgdm9pY2Ugc3RhdGUuICovXG4gICAgICB2b2ljZTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgdXNlcklkPzogQmlnU3RyaW5nKSA9PiBzdHJpbmdcbiAgICB9XG4gICAgLyoqIFJvdXRlcyBmb3IgaW50ZXJhY3Rpb24gcmVsYXRlZCBlbmRwb2ludHMuICovXG4gICAgaW50ZXJhY3Rpb25zOiB7XG4gICAgICAvKiogUm91dGVzIGZvciBpbnRlcmFjdGlvbiBjb21tYW5kIHJlbGF0ZWQgZW5kcG9pbnRzLiAqL1xuICAgICAgY29tbWFuZHM6IHtcbiAgICAgICAgLyoqIFJvdXRlIGZvciBub24tc3BlY2lmaWMgY29tbWFuZHMuICovXG4gICAgICAgIGNvbW1hbmRzOiAoYXBwbGljYXRpb25JZDogQmlnU3RyaW5nKSA9PiBzdHJpbmdcbiAgICAgICAgLyoqIFJvdXRlIGZvciBndWlsZCByZWxhdGVkIGNvbW1hbmRzLiAqL1xuICAgICAgICBndWlsZHM6IHtcbiAgICAgICAgICAvKiogUm91dGUgZm9yIG5vbi1zcGVjaWZpYyBndWlsZCBjb21tYW5kcy4gKi9cbiAgICAgICAgICBhbGw6IChhcHBsaWNhdGlvbklkOiBCaWdTdHJpbmcsIGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gc3RyaW5nXG4gICAgICAgICAgLyoqIFJvdXRlIGZvciBhIHNwZWNpZmljIGd1aWxkIGNvbW1hbmQuICovXG4gICAgICAgICAgb25lOiAoYXBwbGljYXRpb25JZDogQmlnU3RyaW5nLCBndWlsZElkOiBCaWdTdHJpbmcsIGNvbW1hbmRJZDogQmlnU3RyaW5nLCB3aXRoTG9jYWxpemF0aW9ucz86IGJvb2xlYW4pID0+IHN0cmluZ1xuICAgICAgICB9XG4gICAgICAgIC8qKiBSb3V0ZSBmb3Igbm9uLXNwZWNpZmljIGNvbW1hbmQgcGVybWlzc2lvbnMuICovXG4gICAgICAgIHBlcm1pc3Npb25zOiAoYXBwbGljYXRpb25JZDogQmlnU3RyaW5nLCBndWlsZElkOiBCaWdTdHJpbmcpID0+IHN0cmluZ1xuICAgICAgICAvKiogUm91dGUgZm9yIGEgc3BlY2lmaWMgY29tbWFuZCdzIHBlcm1pc3Npb24uICovXG4gICAgICAgIHBlcm1pc3Npb246IChhcHBsaWNhdGlvbklkOiBCaWdTdHJpbmcsIGd1aWxkSWQ6IEJpZ1N0cmluZywgY29tbWFuZElkOiBCaWdTdHJpbmcpID0+IHN0cmluZ1xuICAgICAgICAvKiogUm91dGUgZm9yIGEgc3BlY2lmaWMgY29tbWFuZC4gKi9cbiAgICAgICAgY29tbWFuZDogKGFwcGxpY2F0aW9uSWQ6IEJpZ1N0cmluZywgY29tbWFuZElkOiBCaWdTdHJpbmcsIHdpdGhMb2NhbGl6YXRpb25zPzogYm9vbGVhbikgPT4gc3RyaW5nXG4gICAgICB9XG4gICAgICAvKiogUm91dGVzIGZvciBpbnRlcmFjdGlvbiByZXNwb25zZSByZWxhdGVkIGVuZHBvaW50cy4gKi9cbiAgICAgIHJlc3BvbnNlczoge1xuICAgICAgICAvKiogUm91dGUgZm9yIGhhbmRsaW5nIGEgY2FsbGJhY2sgcmVzcG9uc2Ugd2l0aCBpZCBhbmQgdG9rZW4uICovXG4gICAgICAgIGNhbGxiYWNrOiAoaW50ZXJhY3Rpb25JZDogQmlnU3RyaW5nLCB0b2tlbjogc3RyaW5nKSA9PiBzdHJpbmdcbiAgICAgICAgLyoqIFJvdXRlIGZvciBoYW5kbGluZyB0aGUgb3JpZ2luYWwgcmVzcG9uc2UgdXNpbmcgaWQgYW5kIHRva2VuLiAqL1xuICAgICAgICBvcmlnaW5hbDogKGludGVyYWN0aW9uSWQ6IEJpZ1N0cmluZywgdG9rZW46IHN0cmluZykgPT4gc3RyaW5nXG4gICAgICAgIC8qKiBSb3V0ZSBmb3IgaGFuZGxpbmcgYSBmb2xsb3d1cCBtZXNzYWdlIGZyb20gYSBpbnRlcmFjdGlvbiByZXNwb25zZS4gKi9cbiAgICAgICAgbWVzc2FnZTogKGFwcGxpY2F0aW9uSWQ6IEJpZ1N0cmluZywgdG9rZW46IHN0cmluZywgbWVzc2FnZUlkOiBCaWdTdHJpbmcpID0+IHN0cmluZ1xuICAgICAgfVxuICAgIH1cbiAgICAvKiogUm91dGUgZm9yIGhhbmRsaW5nIGEgc3RpY2tlci4gKi9cbiAgICBzdGlja2VyOiAoc3RpY2tlcklkOiBCaWdTdHJpbmcpID0+IHN0cmluZ1xuICAgIC8qKiBSb3V0ZSBmb3IgaGFuZGxpbmcgYWxsIHZvaWNlIHJlZ2lvbnMuICovXG4gICAgcmVnaW9uczogKCkgPT4gc3RyaW5nXG4gIH1cbiAgLyoqIENoZWNrIHRoZSByYXRlIGxpbWl0cyBmb3IgYSB1cmwgb3IgYSBidWNrZXQuICovXG4gIGNoZWNrUmF0ZUxpbWl0czogKHVybDogc3RyaW5nKSA9PiBudW1iZXIgfCBmYWxzZVxuICAvKiogUmVzaGFwZXMgYW5kIG1vZGlmaWVzIHRoZSBvYmogYXMgbmVlZGVkIHRvIG1ha2UgaXQgcmVhZHkgZm9yIGRpc2NvcmRzIGFwaS4gKi9cbiAgY2hhbmdlVG9EaXNjb3JkRm9ybWF0OiAob2JqOiBhbnkpID0+IGFueVxuICAvKiogQ3JlYXRlcyB0aGUgcmVxdWVzdCBib2R5IGFuZCBoZWFkZXJzIHRoYXQgYXJlIG5lY2Vzc2FyeSB0byBzZW5kIGEgcmVxdWVzdC4gV2lsbCBoYW5kbGUgZGlmZmVyZW50IHR5cGVzIG9mIG1ldGhvZHMgYW5kIGV2ZXJ5dGhpbmcgbmVjZXNzYXJ5IGZvciBkaXNjb3JkLiAqL1xuICBjcmVhdGVSZXF1ZXN0OiAob3B0aW9uczogQ3JlYXRlUmVxdWVzdEJvZHlPcHRpb25zKSA9PiBSZXF1ZXN0Qm9keVxuICAvKiogVGhpcyB3aWxsIGNyZWF0ZSBhIGluZmluaXRlIGxvb3AgcnVubmluZyBpbiAxIHNlY29uZHMgdXNpbmcgdGFpbCByZWN1cnNpb24gdG8ga2VlcCByYXRlIGxpbWl0cyBjbGVhbi4gV2hlbiBhIHJhdGUgbGltaXQgcmVzZXRzLCB0aGlzIHdpbGwgcmVtb3ZlIGl0IHNvIHRoZSBxdWV1ZSBjYW4gcHJvY2VlZC4gKi9cbiAgcHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHM6ICgpID0+IHZvaWRcbiAgLyoqIFByb2Nlc3NlcyB0aGUgcmF0ZSBsaW1pdCBoZWFkZXJzIGFuZCBkZXRlcm1pbmVzIGlmIGl0IG5lZWRzIHRvIGJlIHJhdGUgbGltaXRlZCBhbmQgcmV0dXJucyB0aGUgYnVja2V0IGlkIGlmIGF2YWlsYWJsZSAqL1xuICBwcm9jZXNzSGVhZGVyczogKHVybDogc3RyaW5nLCBoZWFkZXJzOiBIZWFkZXJzKSA9PiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgLyoqIFNlbmRzIGEgcmVxdWVzdCB0byB0aGUgYXBpLiAqL1xuICBzZW5kUmVxdWVzdDogKG9wdGlvbnM6IFNlbmRSZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKiogU3BsaXQgYSB1cmwgdG8gc2VwYXJhdGUgcmF0ZSBsaW1pdCBidWNrZXRzIGJhc2VkIG9uIG1ham9yL21pbm9yIHBhcmFtZXRlcnMuICovXG4gIHNpbXBsaWZ5VXJsOiAodXJsOiBzdHJpbmcsIG1ldGhvZDogUmVxdWVzdE1ldGhvZHMpID0+IHN0cmluZ1xuICAvKiogTWFrZSBhIHJlcXVlc3QgdG8gYmUgc2VudCB0byB0aGUgYXBpLiAqL1xuICBtYWtlUmVxdWVzdDogPFQgPSB1bmtub3duPihtZXRob2Q6IFJlcXVlc3RNZXRob2RzLCB1cmw6IHN0cmluZywgYm9keT86IFJlY29yZDxzdHJpbmcsIGFueT4sIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiBQcm9taXNlPFQ+XG4gIC8qKiBUYWtlcyBhIHJlcXVlc3QgYW5kIHByb2Nlc3NlcyBpdCBpbnRvIGEgcXVldWUuICovXG4gIHByb2Nlc3NSZXF1ZXN0OiAocmVxdWVzdDogU2VuZFJlcXVlc3RPcHRpb25zKSA9PiB2b2lkXG4gIC8qKiBNYWtlIGEgZ2V0IHJlcXVlc3QgdG8gdGhlIGFwaSAqL1xuICBnZXQ6IDxUID0gdm9pZD4odXJsOiBzdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8VD4+XG4gIC8qKiBNYWtlIGEgcG9zdCByZXF1ZXN0IHRvIHRoZSBhcGkuICovXG4gIHBvc3Q6IDxUID0gdm9pZD4odXJsOiBzdHJpbmcsIGJvZHk/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiBQcm9taXNlPENhbWVsaXplPFQ+PlxuICAvKiogTWFrZSBhIHB1dCByZXF1ZXN0IHRvIHRoZSBhcGkuICovXG4gIHB1dDogPFQgPSB2b2lkPih1cmw6IHN0cmluZywgYm9keT86IFJlY29yZDxzdHJpbmcsIGFueT4sIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiBQcm9taXNlPENhbWVsaXplPFQ+PlxuICAvKiogTWFrZSBhIGRlbGV0ZSByZXF1ZXN0IHRvIHRoZSBhcGkuICovXG4gIGRlbGV0ZTogKHVybDogc3RyaW5nLCBib2R5PzogUmVjb3JkPHN0cmluZywgYW55PikgPT4gUHJvbWlzZTx2b2lkPlxuICAvKiogTWFrZSBhIHBhdGNoIHJlcXVlc3QgdG8gdGhlIGFwaS4gKi9cbiAgcGF0Y2g6IDxUID0gdm9pZD4odXJsOiBzdHJpbmcsIGJvZHk/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiBQcm9taXNlPENhbWVsaXplPFQ+PlxuICAvKipcbiAgICogQWRkcyBhIHJlYWN0aW9uIHRvIGEgbWVzc2FnZS5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0aGUgbWVzc2FnZSB0byBhZGQgYSByZWFjdGlvbiB0byBpcyBpbi5cbiAgICogQHBhcmFtIG1lc3NhZ2VJZCAtIFRoZSBJRCBvZiB0aGUgbWVzc2FnZSB0byBhZGQgYSByZWFjdGlvbiB0by5cbiAgICogQHBhcmFtIHJlYWN0aW9uIC0gVGhlIHJlYWN0aW9uIHRvIGFkZCB0byB0aGUgbWVzc2FnZS5cbiAgICogQHJldHVybnNcbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBSRUFEX01FU1NBR0VfSElTVE9SWWAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogSWYgbm9ib2R5IGVsc2UgaGFzIHJlYWN0ZWQgdG8gdGhlIG1lc3NhZ2U6XG4gICAqIC0gUmVxdWlyZXMgdGhlIGBBRERfUkVBQ1RJT05TYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9NZXNzYWdlIFJlYWN0aW9uIEFkZF8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjY3JlYXRlLXJlYWN0aW9ufVxuICAgKi9cbiAgYWRkUmVhY3Rpb246IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgbWVzc2FnZUlkOiBCaWdTdHJpbmcsIHJlYWN0aW9uOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIEFkZHMgbXVsdGlwbGUgYSByZWFjdGlvbiB0byBhIG1lc3NhZ2UuXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgYGFkZFJlYWN0aW9uKClgIGhlbHBlciBiZWhpbmQgdGhlIHNjZW5lcy5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0aGUgbWVzc2FnZSB0byBhZGQgcmVhY3Rpb25zIHRvIGlzIGluLlxuICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gVGhlIElEIG9mIHRoZSBtZXNzYWdlIHRvIGFkZCB0aGUgcmVhY3Rpb25zIHRvLlxuICAgKiBAcGFyYW0gcmVhY3Rpb25zIC0gVGhlIHJlYWN0aW9ucyB0byBhZGQgdG8gdGhlIG1lc3NhZ2UuXG4gICAqIEBwYXJhbSBvcmRlcmVkIC0gV2hldGhlciB0aGUgcmVhY3Rpb25zIG11c3QgYmUgYWRkZWQgaW4gb3JkZXIgb3Igbm90LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYFJFQURfTUVTU0FHRV9ISVNUT1JZYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBJZiBub2JvZHkgZWxzZSBoYXMgcmVhY3RlZCB0byB0aGUgbWVzc2FnZTpcbiAgICogLSBSZXF1aXJlcyB0aGUgYEFERF9SRUFDVElPTlNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgUmVhY3Rpb24gQWRkXyBnYXRld2F5IGV2ZW50IGZvciBldmVyeSByZWFjdGlvbiBhZGRlZC5cbiAgICovXG4gIGFkZFJlYWN0aW9uczogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZywgcmVhY3Rpb25zOiBzdHJpbmdbXSwgb3JkZXJlZD86IGJvb2xlYW4pID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIEFkZHMgYSByb2xlIHRvIGEgbWVtYmVyLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdGhlIG1lbWJlciB0byBhZGQgdGhlIHJvbGUgdG8gaXMgaW4uXG4gICAqIEBwYXJhbSB1c2VySWQgLSBUaGUgdXNlciBJRCBvZiB0aGUgbWVtYmVyIHRvIGFkZCB0aGUgcm9sZSB0by5cbiAgICogQHBhcmFtIHJvbGVJZCAtIFRoZSBJRCBvZiB0aGUgcm9sZSB0byBhZGQgdG8gdGhlIG1lbWJlci5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfUk9MRVNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIE1lbWJlciBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNhZGQtZ3VpbGQtbWVtYmVyLXJvbGV9XG4gICAqL1xuICBhZGRSb2xlOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCB1c2VySWQ6IEJpZ1N0cmluZywgcm9sZUlkOiBCaWdTdHJpbmcsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogQWRkcyBhIG1lbWJlciB0byBhIHRocmVhZC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgdGhyZWFkIHRvIGFkZCB0aGUgbWVtYmVyIHRvLlxuICAgKiBAcGFyYW0gdXNlcklkIC0gVGhlIHVzZXIgSUQgb2YgdGhlIG1lbWJlciB0byBhZGQgdG8gdGhlIHRocmVhZC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGFiaWxpdHkgdG8gc2VuZCBtZXNzYWdlcyBpbiB0aGUgdGhyZWFkLlxuICAgKiBSZXF1aXJlcyB0aGUgdGhyZWFkIG5vdCBiZSBhcmNoaXZlZC5cbiAgICpcbiAgICogRmlyZXMgYSBfVGhyZWFkIE1lbWJlcnMgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNhZGQtdGhyZWFkLW1lbWJlcn1cbiAgICovXG4gIGFkZFRocmVhZE1lbWJlcjogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCB1c2VySWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBhdXRvbW9kIHJ1bGUgaW4gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGNyZWF0ZSB0aGUgcnVsZSBpbi5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSBydWxlLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3JlYXRlZCB7QGxpbmsgRGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0dVSUxEYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhbiBfQXV0byBNb2RlcmF0aW9uIFJ1bGUgQ3JlYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvYXV0by1tb2RlcmF0aW9uI2NyZWF0ZS1hdXRvLW1vZGVyYXRpb24tcnVsZX1cbiAgICovXG4gIGNyZWF0ZUF1dG9tb2RSdWxlOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBDcmVhdGVBdXRvTW9kZXJhdGlvblJ1bGVPcHRpb25zKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGU+PlxuICAvKipcbiAgICogQ3JlYXRlcyBhIGNoYW5uZWwgd2l0aGluIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBjcmVhdGUgdGhlIGNoYW5uZWwgd2l0aGluLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIGNoYW5uZWwuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBEaXNjb3JkQ2hhbm5lbH0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0NIQU5ORUxTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBJZiBzZXR0aW5nIHBlcm1pc3Npb24gb3ZlcndyaXRlcywgb25seSB0aGUgcGVybWlzc2lvbnMgdGhlIGJvdCB1c2VyIGhhcyBpbiB0aGUgZ3VpbGQgY2FuIGJlIGFsbG93ZWQgb3IgZGVuaWVkLlxuICAgKlxuICAgKiBTZXR0aW5nIHRoZSBgTUFOQUdFX1JPTEVTYCBwZXJtaXNzaW9uIGlzIG9ubHkgcG9zc2libGUgZm9yIGd1aWxkIGFkbWluaXN0cmF0b3JzLlxuICAgKlxuICAgKiBGaXJlcyBhIF9DaGFubmVsIENyZWF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI2NyZWF0ZS1ndWlsZC1jaGFubmVsfVxuICAgKi9cbiAgY3JlYXRlQ2hhbm5lbDogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogQ3JlYXRlR3VpbGRDaGFubmVsKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRDaGFubmVsPj5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gZW1vamkgaW4gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIGluIHdoaWNoIHRvIGNyZWF0ZSB0aGUgZW1vamkuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgZW1vamkuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBEaXNjb3JkRW1vaml9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9FTU9KSVNfQU5EX1NUSUNLRVJTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBFbW9qaXMgaGF2ZSBhIG1heGltdW0gZmlsZSBzaXplIG9mIDI1NiBraWxvYml0cy4gQXR0ZW1wdGluZyB0byB1cGxvYWQgYSBsYXJnZXIgZW1vamkgd2lsbCBjYXVzZSB0aGUgcm91dGUgdG8gcmV0dXJuIDQwMCBCYWQgUmVxdWVzdC5cbiAgICpcbiAgICogRmlyZXMgYSBfR3VpbGQgRW1vamlzIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2Vtb2ppI2NyZWF0ZS1ndWlsZC1lbW9qaX1cbiAgICovXG4gIGNyZWF0ZUVtb2ppOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBDcmVhdGVHdWlsZEVtb2ppKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRFbW9qaT4+XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IHRocmVhZCBpbiBhIGZvcnVtIGNoYW5uZWwsIGFuZCBzZW5kcyBhIG1lc3NhZ2Ugd2l0aGluIHRoZSBjcmVhdGVkIHRocmVhZC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgZm9ydW0gY2hhbm5lbCB0byBjcmVhdGUgdGhlIHRocmVhZCB3aXRoaW4uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgdGhyZWFkLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZENoYW5uZWx9IHdpdGggYSBuZXN0ZWQge0BsaW5rIE1lc3NhZ2V9IG9iamVjdC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBDUkVBVEVfTUVTU0FHRVNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX1RocmVhZCBDcmVhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgQ3JlYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNzdGFydC10aHJlYWQtaW4tZm9ydW0tY2hhbm5lbH1cbiAgICpcbiAgICogQGV4cGVyaW1lbnRhbFxuICAgKi9cbiAgY3JlYXRlRm9ydW1UaHJlYWQ6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogQ3JlYXRlRm9ydW1Qb3N0V2l0aE1lc3NhZ2UpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZENoYW5uZWw+PlxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBhcHBsaWNhdGlvbiBjb21tYW5kIGFjY2Vzc2libGUgZ2xvYmFsbHk7IGFjcm9zcyBkaWZmZXJlbnQgZ3VpbGRzIGFuZCBjaGFubmVscy5cbiAgICpcbiAgICogQHBhcmFtIGNvbW1hbmQgLSBUaGUgY29tbWFuZCB0byBjcmVhdGUuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBBcHBsaWNhdGlvbkNvbW1hbmR9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiDimqDvuI8gQ3JlYXRpbmcgYSBjb21tYW5kIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBhbiBleGlzdGluZyBjb21tYW5kIGZvciB5b3VyIGFwcGxpY2F0aW9uIHdpbGwgb3ZlcndyaXRlIHRoZSBvbGQgY29tbWFuZC5cbiAgICog4pqg77iPIEdsb2JhbCBjb21tYW5kcyBvbmNlIGNyZWF0ZWQgYXJlIGNhY2hlZCBmb3IgcGVyaW9kcyBvZiBfX2FuIGhvdXJfXywgc28gY2hhbmdlcyBtYWRlIHRvIGV4aXN0aW5nIGNvbW1hbmRzIHdpbGwgdGFrZSBhbiBob3VyIHRvIHN1cmZhY2UuXG4gICAqIOKaoO+4jyBZb3UgY2FuIG9ubHkgY3JlYXRlIHVwIHRvIDIwMCBfbmV3XyBjb21tYW5kcyBkYWlseS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvaW50ZXJhY3Rpb25zL2FwcGxpY2F0aW9uLWNvbW1hbmRzI2NyZWF0ZS1nbG9iYWwtYXBwbGljYXRpb24tY29tbWFuZH1cbiAgICovXG4gIGNyZWF0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZDogKGNvbW1hbmQ6IENyZWF0ZUFwcGxpY2F0aW9uQ29tbWFuZCkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPj5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSBndWlsZC5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGNyZWF0ZWQge0BsaW5rIERpc2NvcmRHdWlsZH0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIOKaoO+4jyBUaGlzIHJvdXRlIGNhbiBvbmx5IGJlIHVzZWQgYnkgYm90cyBpbiBfX2Zld2VyIHRoYW4gMTAgZ3VpbGRzX18uXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIENyZWF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI2NyZWF0ZS1ndWlsZH1cbiAgICovXG4gIGNyZWF0ZUd1aWxkOiAob3B0aW9uczogQ3JlYXRlR3VpbGQpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEd1aWxkPj5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gYXBwbGljYXRpb24gY29tbWFuZCBvbmx5IGFjY2Vzc2libGUgaW4gYSBzcGVjaWZpYyBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGNvbW1hbmQgLSBUaGUgY29tbWFuZCB0byBjcmVhdGUuXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBjcmVhdGUgdGhlIGNvbW1hbmQgZm9yLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3JlYXRlZCB7QGxpbmsgQXBwbGljYXRpb25Db21tYW5kfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICog4pqg77iPIENyZWF0aW5nIGEgY29tbWFuZCB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgYW4gZXhpc3RpbmcgY29tbWFuZCBmb3IgeW91ciBhcHBsaWNhdGlvbiB3aWxsIG92ZXJ3cml0ZSB0aGUgb2xkIGNvbW1hbmQuXG4gICAqIOKaoO+4jyBZb3UgY2FuIG9ubHkgY3JlYXRlIHVwIHRvIDIwMCBfbmV3XyBjb21tYW5kcyBkYWlseS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvaW50ZXJhY3Rpb25zL2FwcGxpY2F0aW9uLWNvbW1hbmRzI2NyZWF0ZS1ndWlsZC1hcHBsaWNhdGlvbi1jb21tYW5kfVxuICAgKi9cbiAgY3JlYXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQ6IChjb21tYW5kOiBDcmVhdGVBcHBsaWNhdGlvbkNvbW1hbmQsIGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPj5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBndWlsZCBmcm9tIGEgdGVtcGxhdGUuXG4gICAqXG4gICAqIEBwYXJhbSB0ZW1wbGF0ZUNvZGUgLSBUaGUgY29kZSBvZiB0aGUgdGVtcGxhdGUuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgZ3VpbGQuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBHdWlsZH0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIOKaoO+4jyBUaGlzIHJvdXRlIGNhbiBvbmx5IGJlIHVzZWQgYnkgYm90cyBpbiBfX2Zld2VyIHRoYW4gMTAgZ3VpbGRzX18uXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIENyZWF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkLXRlbXBsYXRlI2NyZWF0ZS1ndWlsZC1mcm9tLWd1aWxkLXRlbXBsYXRlfVxuICAgKi9cbiAgY3JlYXRlR3VpbGRGcm9tVGVtcGxhdGU6ICh0ZW1wbGF0ZUNvZGU6IHN0cmluZywgb3B0aW9uczogQ3JlYXRlR3VpbGRGcm9tVGVtcGxhdGUpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEd1aWxkPj5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBzdGlja2VyIGZvciB0aGUgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0XG4gICAqIEByZXR1cm4gQSB7QGxpbmsgRGlzY29yZFN0aWNrZXJ9XG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0VNT0pJU19BTkRfU1RJQ0tFUlNgIHBlcm1pc3Npb24uXG4gICAqIEZpcmVzIGEgR3VpbGQgU3RpY2tlcnMgVXBkYXRlIEdhdGV3YXkgZXZlbnQuXG4gICAqIEV2ZXJ5IGd1aWxkcyBoYXMgZml2ZSBmcmVlIHN0aWNrZXIgc2xvdHMgYnkgZGVmYXVsdCwgYW5kIGVhY2ggQm9vc3QgbGV2ZWwgd2lsbCBncmFudCBhY2Nlc3MgdG8gbW9yZSBzbG90cy5cbiAgICogTG90dGllIHN0aWNrZXJzIGNhbiBvbmx5IGJlIHVwbG9hZGVkIG9uIGd1aWxkcyB0aGF0IGhhdmUgZWl0aGVyIHRoZSBgVkVSSUZJRURgIGFuZC9vciB0aGUgYFBBUlRORVJFRGAgZ3VpbGQgZmVhdHVyZS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3N0aWNrZXIjY3JlYXRlLWd1aWxkLXN0aWNrZXJ9XG4gICAqL1xuICBjcmVhdGVHdWlsZFN0aWNrZXI6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IENyZWF0ZUd1aWxkU3RpY2tlck9wdGlvbnMpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFN0aWNrZXI+PlxuICAvKipcbiAgICogQ3JlYXRlcyBhIHRlbXBsYXRlIGZyb20gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGNyZWF0ZSB0aGUgdGVtcGxhdGUgZnJvbS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSB0ZW1wbGF0ZS5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGNyZWF0ZWQge0BsaW5rIFRlbXBsYXRlfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkLXRlbXBsYXRlI2NyZWF0ZS1ndWlsZC10ZW1wbGF0ZX1cbiAgICovXG4gIGNyZWF0ZUd1aWxkVGVtcGxhdGU6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IENyZWF0ZVRlbXBsYXRlKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRUZW1wbGF0ZT4+XG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGludml0ZSB0byBhIGNoYW5uZWwgaW4gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0byBjcmVhdGUgdGhlIGludml0ZSB0by5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSBpbnZpdGUuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBEaXNjb3JkSW52aXRlfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBDUkVBVEVfSU5TVEFOVF9JTlZJVEVgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGFuIF9JbnZpdGUgQ3JlYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAcHJpdmF0ZVJlbWFya3NcbiAgICogVGhlIHJlcXVlc3QgYm9keSBpcyBub3Qgb3B0aW9uYWwsIGFuZCBhbiBlbXB0eSBKU09OIG9iamVjdCBtdXN0IGJlIHNlbnQgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGFueSBmaWVsZHMgYXJlIGJlaW5nIHRyYW5zbWl0dGVkLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNjcmVhdGUtY2hhbm5lbC1pbnZpdGV9XG4gICAqL1xuICBjcmVhdGVJbnZpdGU6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IENyZWF0ZUNoYW5uZWxJbnZpdGUpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEludml0ZT4+XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgcm9sZSBpbiBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gY3JlYXRlIHRoZSByb2xlIGluLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIHJvbGUuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBEaXNjb3JkUm9sZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1JPTEVTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBSb2xlIENyZWF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI2NyZWF0ZS1ndWlsZC1yb2xlfVxuICAgKi9cbiAgY3JlYXRlUm9sZTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogQ3JlYXRlR3VpbGRSb2xlLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFJvbGU+PlxuICAvKipcbiAgICogQ3JlYXRlcyBhIHNjaGVkdWxlZCBldmVudCBpbiBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gY3JlYXRlIHRoZSBzY2hlZHVsZWQgZXZlbnQgaW4uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgc2NoZWR1bGVkIGV2ZW50LlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3JlYXRlZCB7QGxpbmsgU2NoZWR1bGVkRXZlbnR9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9FVkVOVFNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEEgZ3VpbGQgY2FuIG9ubHkgaGF2ZSBhIG1heGltdW0gb2YgMTAwIGV2ZW50cyB3aXRoIGEgc3RhdHVzIG9mIHtAbGluayBTY2hlZHVsZWRFdmVudFN0YXR1cy5BY3RpdmV9IG9yIHtAbGluayBTY2hlZHVsZWRFdmVudFN0YXR1cy5TY2hlZHVsZWR9IChpbmNsdXNpdmUpLlxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBTY2hlZHVsZWQgRXZlbnQgQ3JlYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQtc2NoZWR1bGVkLWV2ZW50I2NyZWF0ZS1ndWlsZC1zY2hlZHVsZWQtZXZlbnR9XG4gICAqL1xuICBjcmVhdGVTY2hlZHVsZWRFdmVudDogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogQ3JlYXRlU2NoZWR1bGVkRXZlbnQpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFNjaGVkdWxlZEV2ZW50Pj5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBzdGFnZSBpbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggYSBzdGFnZSBjaGFubmVsLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIHN0YWdlIGluc3RhbmNlLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3JlYXRlZCB7QGxpbmsgRGlzY29yZFN0YWdlSW5zdGFuY2V9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgdXNlciB0byBiZSBhIG1vZGVyYXRvciBvZiB0aGUgc3RhZ2UgY2hhbm5lbC5cbiAgICpcbiAgICogRmlyZXMgYSBfU3RhZ2UgSW5zdGFuY2UgQ3JlYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvc3RhZ2UtaW5zdGFuY2UjY3JlYXRlLXN0YWdlLWluc3RhbmNlfVxuICAgKi9cbiAgY3JlYXRlU3RhZ2VJbnN0YW5jZTogKG9wdGlvbnM6IENyZWF0ZVN0YWdlSW5zdGFuY2UpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFN0YWdlSW5zdGFuY2U+PlxuICAvKipcbiAgICogQ3JlYXRlcyBhIHdlYmhvb2suXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgdG8gY3JlYXRlIHRoZSB3ZWJob29rIGluLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIHdlYmhvb2suXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBEaXNjb3JkV2ViaG9va30uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1dFQkhPT0tTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiDimqDvuI8gVGhlIHdlYmhvb2sgbmFtZSBtdXN0IG5vdCBjb250YWluIHRoZSBzdHJpbmcgJ2NseWRlJyAoY2FzZS1pbnNlbnNpdGl2ZSkuXG4gICAqXG4gICAqIEZpcmVzIGEgX1dlYmhvb2tzIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3dlYmhvb2sjY3JlYXRlLXdlYmhvb2t9XG4gICAqL1xuICBjcmVhdGVXZWJob29rOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IENyZWF0ZVdlYmhvb2spID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFdlYmhvb2s+PlxuICAvKipcbiAgICogRGVsZXRlcyBhbiBhdXRvbW9kIHJ1bGUuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBkZWxldGUgdGhlIHJ1bGUgZnJvbS5cbiAgICogQHBhcmFtIHJ1bGVJZCAtIFRoZSBJRCBvZiB0aGUgYXV0b21vZCBydWxlIHRvIGRlbGV0ZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGFuIF9BdXRvIE1vZGVyYXRpb24gUnVsZSBEZWxldGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9hdXRvLW1vZGVyYXRpb24jZGVsZXRlLWF1dG8tbW9kZXJhdGlvbi1ydWxlfVxuICAgKi9cbiAgZGVsZXRlQXV0b21vZFJ1bGU6IChndWlsZElkOiBCaWdTdHJpbmcsIHJ1bGVJZDogQmlnU3RyaW5nLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYSBjaGFubmVsIGZyb20gd2l0aGluIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgdG8gZGVsZXRlLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZGVsZXRlZCB7QGxpbmsgQ2hhbm5lbH0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEZvciBjb21tdW5pdHkgZ3VpbGRzLCB0aGUgX1J1bGVzXywgX0d1aWRlbGluZXNfIGFuZCBfQ29tbXVuaXR5IFVwZGF0ZV8gY2hhbm5lbHMgY2Fubm90IGJlIGRlbGV0ZWQuXG4gICAqXG4gICAqIElmIHRoZSBjaGFubmVsIGlzIGEgdGhyZWFkOlxuICAgKiAtIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1RIUkVBRFNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIC0gRmlyZXMgYSBfVGhyZWFkIERlbGV0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogT3RoZXJ3aXNlOlxuICAgKiAtIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0NIQU5ORUxTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiAtIOKaoO+4jyBEZWxldGluZyBhIGNhdGVnb3J5IGNoYW5uZWwgZG9lcyBub3QgZGVsZXRlIGl0cyBjaGlsZCBjaGFubmVscy5cbiAgICogICBJbnN0ZWFkLCB0aGV5IHdpbGwgaGF2ZSB0aGVpciBgcGFyZW50X2lkYCBwcm9wZXJ0eSByZW1vdmVkLCBhbmQgYSBgQ2hhbm5lbCBVcGRhdGVgIGdhdGV3YXkgZXZlbnQgd2lsbCBmaXJlIGZvciBlYWNoIG9mIHRoZW0uXG4gICAqXG4gICAqIC0gRmlyZXMgYSBfQ2hhbm5lbCBEZWxldGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI2RlbGV0ZWNsb3NlLWNoYW5uZWx9XG4gICAqL1xuICBkZWxldGVDaGFubmVsOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogRGVsZXRlcyBhIHBlcm1pc3Npb24gb3ZlcnJpZGUgZm9yIGEgdXNlciBvciByb2xlIGluIGEgY2hhbm5lbC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0byBkZWxldGUgdGhlIHBlcm1pc3Npb24gb3ZlcnJpZGUgb2YuXG4gICAqIEBwYXJhbSBvdmVyd3JpdGVJZCAtIFRoZSBJRCBvZiB0aGUgcGVybWlzc2lvbiBvdmVycmlkZSB0byBkZWxldGUuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1JPTEVTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9DaGFubmVsIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjZGVsZXRlLWNoYW5uZWwtcGVybWlzc2lvbn1cbiAgICovXG4gIGRlbGV0ZUNoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGU6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgb3ZlcndyaXRlSWQ6IEJpZ1N0cmluZywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBEZWxldGVzIGFuIGVtb2ppIGZyb20gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIGZyb20gd2hpY2ggdG8gZGVsZXRlIHRoZSBlbW9qaS5cbiAgICogQHBhcmFtIGlkIC0gVGhlIElEIG9mIHRoZSBlbW9qaSB0byBkZWxldGUuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0VNT0pJU19BTkRfU1RJQ0tFUlNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIEVtb2ppcyBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9lbW9qaSNkZWxldGUtZ3VpbGQtZW1vaml9XG4gICAqL1xuICBkZWxldGVFbW9qaTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgaWQ6IEJpZ1N0cmluZywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBEZWxldGVzIGEgZm9sbG93LXVwIG1lc3NhZ2UgdG8gYW4gaW50ZXJhY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB0b2tlbiAtIFRoZSBpbnRlcmFjdGlvbiB0b2tlbiB0byB1c2UsIHByb3ZpZGVkIGluIHRoZSBvcmlnaW5hbCBpbnRlcmFjdGlvbi5cbiAgICogQHBhcmFtIG1lc3NhZ2VJZCAtIFRoZSBJRCBvZiB0aGUgbWVzc2FnZSB0byBkZWxldGUuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFVubGlrZSBgZGVsZXRlTWVzc2FnZSgpYCwgdGhpcyBlbmRwb2ludCBhbGxvd3MgdGhlIGJvdCB1c2VyIHRvIGFjdCB3aXRob3V0IG5lZWRpbmcgdG8gc2VlIHRoZSBjaGFubmVsIHRoZSBtZXNzYWdlIGlzIGluLlxuICAgKlxuICAgKiBGaXJlcyBhIF9NZXNzYWdlIERlbGV0ZV8gZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL2ludGVyYWN0aW9ucy9yZWNlaXZpbmctYW5kLXJlc3BvbmRpbmcjZGVsZXRlLWZvbGxvd3VwLW1lc3NhZ2V9XG4gICAqL1xuICBkZWxldGVGb2xsb3d1cE1lc3NhZ2U6ICh0b2tlbjogc3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogRGVsZXRlcyBhbiBhcHBsaWNhdGlvbiBjb21tYW5kIHJlZ2lzdGVyZWQgZ2xvYmFsbHkuXG4gICAqXG4gICAqIEBwYXJhbSBjb21tYW5kSWQgLSBUaGUgSUQgb2YgdGhlIGNvbW1hbmQgdG8gZGVsZXRlLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjZGVsZXRlLWdsb2JhbC1hcHBsaWNhdGlvbi1jb21tYW5kfVxuICAgKi9cbiAgZGVsZXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kOiAoY29tbWFuZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGRlbGV0ZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhlIGJvdCB1c2VyIG11c3QgYmUgdGhlIG93bmVyIG9mIHRoZSBndWlsZC5cbiAgICpcbiAgICogRmlyZXMgYSBfR3VpbGQgRGVsZXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjZGVsZXRlLWd1aWxkfVxuICAgKi9cbiAgZGVsZXRlR3VpbGQ6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYW4gYXBwbGljYXRpb24gY29tbWFuZCByZWdpc3RlcmVkIGluIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBkZWxldGUgdGhlIGNvbW1hbmQgZnJvbS5cbiAgICogQHBhcmFtIGNvbW1hbmRJZCAtIFRoZSBJRCBvZiB0aGUgY29tbWFuZCB0byBkZWxldGUgZnJvbSB0aGUgZ3VpbGQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL2ludGVyYWN0aW9ucy9hcHBsaWNhdGlvbi1jb21tYW5kcyNkZWxldGUtZ3VpbGQtYXBwbGljYXRpb24tY29tbWFuZH1cbiAgICovXG4gIGRlbGV0ZUd1aWxkQXBwbGljYXRpb25Db21tYW5kOiAoY29tbWFuZElkOiBCaWdTdHJpbmcsIGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogRGVsZXRlIGEgbmV3IHN0aWNrZXIgZm9yIHRoZSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXRcbiAgICogQHJldHVybiBBIHtAbGluayBEaXNjb3JkU3RpY2tlcn1cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfRU1PSklTX0FORF9TVElDS0VSU2AgcGVybWlzc2lvbi5cbiAgICogRmlyZXMgYSBHdWlsZCBTdGlja2VycyBVcGRhdGUgR2F0ZXdheSBldmVudC5cbiAgICogRXZlcnkgZ3VpbGRzIGhhcyBmaXZlIGZyZWUgc3RpY2tlciBzbG90cyBieSBkZWZhdWx0LCBhbmQgZWFjaCBCb29zdCBsZXZlbCB3aWxsIGdyYW50IGFjY2VzcyB0byBtb3JlIHNsb3RzLlxuICAgKiBMb3R0aWUgc3RpY2tlcnMgY2FuIG9ubHkgYmUgdXBsb2FkZWQgb24gZ3VpbGRzIHRoYXQgaGF2ZSBlaXRoZXIgdGhlIGBWRVJJRklFRGAgYW5kL29yIHRoZSBgUEFSVE5FUkVEYCBndWlsZCBmZWF0dXJlLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvc3RpY2tlciNkZWxldGUtZ3VpbGQtc3RpY2tlcn1cbiAgICovXG4gIGRlbGV0ZUd1aWxkU3RpY2tlcjogKGd1aWxkSWQ6IEJpZ1N0cmluZywgc3RpY2tlcklkOiBCaWdTdHJpbmcsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogRGVsZXRlcyBhIHRlbXBsYXRlIGZyb20gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGRlbGV0ZSB0aGUgdGVtcGxhdGUgZnJvbS5cbiAgICogQHBhcmFtIHRlbXBsYXRlQ29kZSAtIFRoZSBjb2RlIG9mIHRoZSB0ZW1wbGF0ZSB0byBkZWxldGUuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0dVSUxEYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZC10ZW1wbGF0ZSNkZWxldGUtZ3VpbGQtdGVtcGxhdGV9XG4gICAqL1xuICBkZWxldGVHdWlsZFRlbXBsYXRlOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCB0ZW1wbGF0ZUNvZGU6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogRGVsZXRlcyBhbiBpbnRlZ3JhdGlvbiBhdHRhY2hlZCB0byBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgZnJvbSB3aGljaCB0byBkZWxldGUgdGhlIGludGVncmF0aW9uLlxuICAgKiBAcGFyYW0gaW50ZWdyYXRpb25JZCAtIFRoZSBJRCBvZiB0aGUgaW50ZWdyYXRpb24gdG8gZGVsZXRlIGZyb20gdGhlIGd1aWxkLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRGVsZXRlcyBhbGwgd2ViaG9va3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbnRlZ3JhdGlvbiwgYW5kIGtpY2tzIHRoZSBhc3NvY2lhdGVkIGJvdCBpZiB0aGVyZSBpcyBvbmUuXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIEludGVncmF0aW9ucyBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqIEZpcmVzIGEgX0ludGVncmF0aW9uIERlbGV0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI2RlbGV0ZS1ndWlsZC1pbnRlZ3JhdGlvbn1cbiAgICovXG4gIGRlbGV0ZUludGVncmF0aW9uOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBpbnRlZ3JhdGlvbklkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYW4gaW52aXRlIHRvIGEgY2hhbm5lbC5cbiAgICpcbiAgICogQHBhcmFtIGludml0ZUNvZGUgLSBUaGUgaW52aXRlIGNvZGUgb2YgdGhlIGludml0ZSB0byBkZWxldGUuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0NIQU5ORUxTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhbiBfSW52aXRlIERlbGV0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjZGVsZXRlLWNoYW5uZWwtaW52aXRlfVxuICAgKi9cbiAgZGVsZXRlSW52aXRlOiAoaW52aXRlQ29kZTogc3RyaW5nLCByZWFzb24/OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYSBtZXNzYWdlIGZyb20gYSBjaGFubmVsLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRvIGRlbGV0ZSB0aGUgbWVzc2FnZSBmcm9tLlxuICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gVGhlIElEIG9mIHRoZSBtZXNzYWdlIHRvIGRlbGV0ZSBmcm9tIHRoZSBjaGFubmVsLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBJZiBub3QgZGVsZXRpbmcgb3duIG1lc3NhZ2U6XG4gICAqIC0gUmVxdWlyZXMgdGhlIGBNQU5BR0VfTUVTU0FHRVNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgRGVsZXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNkZWxldGUtbWVzc2FnZX1cbiAgICovXG4gIGRlbGV0ZU1lc3NhZ2U6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgbWVzc2FnZUlkOiBCaWdTdHJpbmcsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogRGVsZXRlcyBtdWx0aXBsZSBtZXNzYWdlcyBmcm9tIGEgY2hhbm5lbC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0byBkZWxldGUgdGhlIG1lc3NhZ2VzIGZyb20uXG4gICAqIEBwYXJhbSBtZXNzYWdlSWRzIC0gVGhlIElEcyBvZiB0aGUgbWVzc2FnZXMgdG8gZGVsZXRlIGZyb20gdGhlIGNoYW5uZWwuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX01FU1NBR0VTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiDimqDvuI8gTWVzc2FnZXMgb2xkZXIgdGhhbiAyIHdlZWtzIG9sZCBjYW5ub3QgYmUgZGVsZXRlZC5cbiAgICpcbiAgICogRmlyZXMgYSBfTWVzc2FnZSBEZWxldGUgQnVsa18gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjYnVsay1kZWxldGUtbWVzc2FnZXN9XG4gICAqL1xuICBkZWxldGVNZXNzYWdlczogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBtZXNzYWdlSWRzOiBCaWdTdHJpbmdbXSwgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBpbml0aWFsIG1lc3NhZ2UgcmVzcG9uc2UgdG8gYW4gaW50ZXJhY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB0b2tlbiAtIFRoZSBpbnRlcmFjdGlvbiB0b2tlbiB0byB1c2UsIHByb3ZpZGVkIGluIHRoZSBvcmlnaW5hbCBpbnRlcmFjdGlvbi5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVW5saWtlIGBkZWxldGVNZXNzYWdlKClgLCB0aGlzIGVuZHBvaW50IGFsbG93cyB0aGUgYm90IHVzZXIgdG8gYWN0IHdpdGhvdXQgbmVlZGluZyB0byBzZWUgdGhlIGNoYW5uZWwgdGhlIG1lc3NhZ2UgaXMgaW4uXG4gICAqXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgRGVsZXRlXyBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvaW50ZXJhY3Rpb25zL3JlY2VpdmluZy1hbmQtcmVzcG9uZGluZyNkZWxldGUtb3JpZ2luYWwtaW50ZXJhY3Rpb24tcmVzcG9uc2V9XG4gICAqL1xuICBkZWxldGVPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2U6ICh0b2tlbjogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBEZWxldGVzIGEgcmVhY3Rpb24gYWRkZWQgYnkgdGhlIGJvdCB1c2VyIGZyb20gYSBtZXNzYWdlLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRoZSBtZXNzYWdlIHRvIGRlbGV0ZSB0aGUgcmVhY3Rpb24gZnJvbSBpcyBpbi5cbiAgICogQHBhcmFtIG1lc3NhZ2VJZCAtIFRoZSBJRCBvZiB0aGUgbWVzc2FnZSB0byBkZWxldGUgdGhlIHJlYWN0aW9uIGZyb20uXG4gICAqIEBwYXJhbSByZWFjdGlvbiAtIFRoZSByZWFjdGlvbiB0byBkZWxldGUgZnJvbSB0aGUgbWVzc2FnZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBSRUFEX01FU1NBR0VfSElTVE9SWWAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfTWVzc2FnZSBSZWFjdGlvbiBSZW1vdmVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI2RlbGV0ZS1vd24tcmVhY3Rpb259XG4gICAqL1xuICBkZWxldGVPd25SZWFjdGlvbjogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZywgcmVhY3Rpb246IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogRGVsZXRlcyBhbGwgcmVhY3Rpb25zIGZvciBhbGwgZW1vamlzIGZyb20gYSBtZXNzYWdlLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRoZSBtZXNzYWdlIHRvIGRlbGV0ZSB0aGUgcmVhY3Rpb25zIGZyb20gaXMgaW4uXG4gICAqIEBwYXJhbSBtZXNzYWdlSWQgLSBUaGUgSUQgb2YgdGhlIG1lc3NhZ2UgdG8gZGVsZXRlIHRoZSByZWFjdGlvbnMgZnJvbS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBSRUFEX01FU1NBR0VfSElTVE9SWWAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfTUVTU0FHRVNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgUmVhY3Rpb24gUmVtb3ZlIEFsbF8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjZGVsZXRlLWFsbC1yZWFjdGlvbnN9XG4gICAqL1xuICBkZWxldGVSZWFjdGlvbnNBbGw6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgbWVzc2FnZUlkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYWxsIHJlYWN0aW9ucyBmb3IgYW4gZW1vamkgZnJvbSBhIG1lc3NhZ2UuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgdGhlIG1lc3NhZ2UgdG8gZGVsZXRlIHRoZSByZWFjdGlvbnMgZnJvbSBpcyBpbi5cbiAgICogQHBhcmFtIG1lc3NhZ2VJZCAtIFRoZSBJRCBvZiB0aGUgbWVzc2FnZSB0byBkZWxldGUgdGhlIHJlYWN0aW9ucyBmcm9tLlxuICAgKiBAcGFyYW0gcmVhY3Rpb24gLSBUaGUgcmVhY3Rpb24gdG8gcmVtb3ZlIGZyb20gdGhlIG1lc3NhZ2UuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgUkVBRF9NRVNTQUdFX0hJU1RPUllgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX01FU1NBR0VTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9NZXNzYWdlIFJlYWN0aW9uIFJlbW92ZSBFbW9qaV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjZGVsZXRlLWFsbC1yZWFjdGlvbnMtZm9yLWVtb2ppfVxuICAgKi9cbiAgZGVsZXRlUmVhY3Rpb25zRW1vamk6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgbWVzc2FnZUlkOiBCaWdTdHJpbmcsIHJlYWN0aW9uOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYSByb2xlIGZyb20gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGRlbGV0ZSB0aGUgcm9sZSBmcm9tLlxuICAgKiBAcGFyYW0gcm9sZUlkIC0gVGhlIElEIG9mIHRoZSByb2xlIHRvIGRlbGV0ZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfUk9MRVNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIFJvbGUgRGVsZXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjZGVsZXRlLWd1aWxkLXJvbGV9XG4gICAqL1xuICBkZWxldGVSb2xlOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCByb2xlSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogRGVsZXRlcyBhIHNjaGVkdWxlZCBldmVudCBmcm9tIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBkZWxldGUgdGhlIHNjaGVkdWxlZCBldmVudCBmcm9tLlxuICAgKiBAcGFyYW0gZXZlbnRJZCAtIFRoZSBJRCBvZiB0aGUgc2NoZWR1bGVkIGV2ZW50IHRvIGRlbGV0ZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfRVZFTlRTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBTY2hlZHVsZWQgRXZlbnQgRGVsZXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQtc2NoZWR1bGVkLWV2ZW50I2RlbGV0ZS1ndWlsZC1zY2hlZHVsZWQtZXZlbnR9XG4gICAqL1xuICBkZWxldGVTY2hlZHVsZWRFdmVudDogKGd1aWxkSWQ6IEJpZ1N0cmluZywgZXZlbnRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBEZWxldGVzIHRoZSBzdGFnZSBpbnN0YW5jZSBhc3NvY2lhdGVkIHdpdGggYSBzdGFnZSBjaGFubmVsLCBpZiBvbmUgZXhpc3RzLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBzdGFnZSBjaGFubmVsIHRoZSBzdGFnZSBpbnN0YW5jZSBpcyBhc3NvY2lhdGVkIHdpdGguXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSB1c2VyIHRvIGJlIGEgbW9kZXJhdG9yIG9mIHRoZSBzdGFnZSBjaGFubmVsLlxuICAgKlxuICAgKiBGaXJlcyBhIF9TdGFnZSBJbnN0YW5jZSBEZWxldGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9zdGFnZS1pbnN0YW5jZSNkZWxldGUtc3RhZ2UtaW5zdGFuY2V9XG4gICAqL1xuICBkZWxldGVTdGFnZUluc3RhbmNlOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogRGVsZXRlcyBhIHVzZXIncyByZWFjdGlvbiBmcm9tIGEgbWVzc2FnZS5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0aGUgbWVzc2FnZSB0byBkZWxldGUgdGhlIHJlYWN0aW9uIGZyb20gaXMgaW4uXG4gICAqIEBwYXJhbSBtZXNzYWdlSWQgLSBUaGUgSUQgb2YgdGhlIG1lc3NhZ2UgdG8gZGVsZXRlIHRoZSByZWFjdGlvbiBmcm9tLlxuICAgKiBAcGFyYW0gdXNlcklkIC0gVGhlIElEIG9mIHRoZSB1c2VyIHdob3NlIHJlYWN0aW9uIHRvIGRlbGV0ZS5cbiAgICogQHBhcmFtIHJlYWN0aW9uIC0gVGhlIHJlYWN0aW9uIHRvIGRlbGV0ZSBmcm9tIHRoZSBtZXNzYWdlLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYFJFQURfTUVTU0FHRV9ISVNUT1JZYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9NRVNTQUdFU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfTWVzc2FnZSBSZWFjdGlvbiBSZW1vdmVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI2RlbGV0ZS11c2VyLXJlYWN0aW9ufVxuICAgKi9cbiAgZGVsZXRlVXNlclJlYWN0aW9uOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG1lc3NhZ2VJZDogQmlnU3RyaW5nLCB1c2VySWQ6IEJpZ1N0cmluZywgcmVhY3Rpb246IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogRGVsZXRlcyBhIHdlYmhvb2suXG4gICAqXG4gICAqIEBwYXJhbSB3ZWJob29rSWQgLSBUaGUgSUQgb2YgdGhlIHdlYmhvb2sgdG8gZGVsZXRlLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9XRUJIT09LU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfV2ViaG9va3MgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvd2ViaG9vayNkZWxldGUtd2ViaG9va31cbiAgICovXG4gIGRlbGV0ZVdlYmhvb2s6ICh3ZWJob29rSWQ6IEJpZ1N0cmluZywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBEZWxldGVzIGEgd2ViaG9vayBtZXNzYWdlLlxuICAgKlxuICAgKiBAcGFyYW0gd2ViaG9va0lkIC0gVGhlIElEIG9mIHRoZSB3ZWJob29rIHRvIGRlbGV0ZSB0aGUgbWVzc2FnZSBiZWxvbmdpbmcgdG8uXG4gICAqIEBwYXJhbSB0b2tlbiAtIFRoZSB3ZWJob29rIHRva2VuLCB1c2VkIHRvIG1hbmFnZSB0aGUgd2ViaG9vay5cbiAgICogQHBhcmFtIG1lc3NhZ2VJZCAtIFRoZSBJRCBvZiB0aGUgbWVzc2FnZSB0byBkZWxldGUuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBkZWxldGlvbiBvZiB0aGUgbWVzc2FnZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogRmlyZXMgYSBfTWVzc2FnZSBEZWxldGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy93ZWJob29rI2RlbGV0ZS13ZWJob29rfVxuICAgKi9cbiAgZGVsZXRlV2ViaG9va01lc3NhZ2U6ICh3ZWJob29rSWQ6IEJpZ1N0cmluZywgdG9rZW46IHN0cmluZywgbWVzc2FnZUlkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiBEZWxldGVXZWJob29rTWVzc2FnZU9wdGlvbnMpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYSB3ZWJob29rIG1lc3NhZ2UgdXNpbmcgdGhlIHdlYmhvb2sgdG9rZW4sIHRoZXJlYnkgYnlwYXNzaW5nIHRoZSBuZWVkIGZvciBhdXRoZW50aWNhdGlvbiArIHBlcm1pc3Npb25zLlxuICAgKlxuICAgKiBAcGFyYW0gd2ViaG9va0lkIC0gVGhlIElEIG9mIHRoZSB3ZWJob29rIHRvIGRlbGV0ZSB0aGUgbWVzc2FnZSBiZWxvbmdpbmcgdG8uXG4gICAqIEBwYXJhbSB0b2tlbiAtIFRoZSB3ZWJob29rIHRva2VuLCB1c2VkIHRvIGRlbGV0ZSB0aGUgd2ViaG9vay5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogRmlyZXMgYSBfTWVzc2FnZSBEZWxldGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy93ZWJob29rI2RlbGV0ZS13ZWJob29rLXdpdGgtdG9rZW59XG4gICAqL1xuICBkZWxldGVXZWJob29rV2l0aFRva2VuOiAod2ViaG9va0lkOiBCaWdTdHJpbmcsIHRva2VuOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIEVkaXRzIHRoZSBwZXJtaXNzaW9ucyBmb3IgYSBndWlsZCBhcHBsaWNhdGlvbiBjb21tYW5kLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdGhlIGNvbW1hbmQgaXMgcmVnaXN0ZXJlZCBpbi5cbiAgICogQHBhcmFtIGNvbW1hbmRJZCAtIFRoZSBJRCBvZiB0aGUgY29tbWFuZCB0byBlZGl0IHRoZSBwZXJtaXNzaW9ucyBvZi5cbiAgICogQHBhcmFtIGJlYXJlclRva2VuIC0gVGhlIGJlYXJlciB0b2tlbiB0byB1c2UgdG8gbWFrZSB0aGUgcmVxdWVzdC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGVkaXQgb2YgdGhlIGNvbW1hbmQgcGVybWlzc2lvbnMuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb259LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGUgYmVhcmVyIHRva2VuIHJlcXVpcmVzIHRoZSBgYXBwbGljYXRpb25zLmNvbW1hbmRzLnBlcm1pc3Npb25zLnVwZGF0ZWAgc2NvcGUgdG8gYmUgZW5hYmxlZCwgYW5kIHRvIGhhdmUgYWNjZXNzIHRvIHRoZSBndWlsZCB3aG9zZSBJRCBoYXMgYmVlbiBwcm92aWRlZCBpbiB0aGUgcGFyYW1ldGVycy5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvaW50ZXJhY3Rpb25zL2FwcGxpY2F0aW9uLWNvbW1hbmRzI2VkaXQtYXBwbGljYXRpb24tY29tbWFuZC1wZXJtaXNzaW9uc31cbiAgICovXG4gIGVkaXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9uczogKFxuICAgIGd1aWxkSWQ6IEJpZ1N0cmluZyxcbiAgICBjb21tYW5kSWQ6IEJpZ1N0cmluZyxcbiAgICBiZWFyZXJUb2tlbjogc3RyaW5nLFxuICAgIG9wdGlvbnM6IEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zW10sXG4gICkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnM+PlxuICAvKipcbiAgICogRWRpdHMgYW4gYXV0b21vZCBydWxlLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZWRpdCB0aGUgcnVsZSBpbi5cbiAgICogQHBhcmFtIHJ1bGVJZCAtIFRoZSBJRCBvZiB0aGUgcnVsZSB0byBlZGl0LlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZWRpdCBvZiB0aGUgcnVsZS5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGVkaXRlZCB7QGxpbmsgRGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0dVSUxEYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhbiBfQXV0byBNb2RlcmF0aW9uIFJ1bGUgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvYXV0by1tb2RlcmF0aW9uI21vZGlmeS1hdXRvLW1vZGVyYXRpb24tcnVsZX1cbiAgICovXG4gIGVkaXRBdXRvbW9kUnVsZTogKFxuICAgIGd1aWxkSWQ6IEJpZ1N0cmluZyxcbiAgICBydWxlSWQ6IEJpZ1N0cmluZyxcbiAgICBvcHRpb25zOiBQYXJ0aWFsPEVkaXRBdXRvTW9kZXJhdGlvblJ1bGVPcHRpb25zPixcbiAgKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGU+PlxuICAvKipcbiAgICogTW9kaWZpZXMgdGhlIGJvdCdzIHVzZXJuYW1lIG9yIGF2YXRhci5cbiAgICogTk9URTogdXNlcm5hbWU6IGlmIGNoYW5nZWQgbWF5IGNhdXNlIHRoZSBib3QncyBkaXNjcmltaW5hdG9yIHRvIGJlIHJhbmRvbWl6ZWQuXG4gICAqL1xuICBlZGl0Qm90UHJvZmlsZTogKG9wdGlvbnM6IHsgdXNlcm5hbWU/OiBzdHJpbmc7IGJvdEF2YXRhclVSTD86IHN0cmluZyB8IG51bGwgfSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkVXNlcj4+XG4gIC8qKlxuICAgKiBFZGl0cyBhIGNoYW5uZWwncyBzZXR0aW5ncy5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0byBlZGl0LlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZWRpdCBvZiB0aGUgY2hhbm5lbC5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGVkaXRlZCB7QGxpbmsgRGlzY29yZENoYW5uZWx9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBJZiBlZGl0aW5nIGEgY2hhbm5lbCBvZiB0eXBlIHtAbGluayBDaGFubmVsVHlwZXMuR3JvdXBEbX06XG4gICAqIC0gRmlyZXMgYSBfQ2hhbm5lbCBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIElmIGVkaXRpbmcgYSB0aHJlYWQgY2hhbm5lbDpcbiAgICogLSBSZXF1aXJlcyB0aGUgYE1BTkFHRV9USFJFQURTYCBwZXJtaXNzaW9uIF9fdW5sZXNzX18gaWYgc2V0dGluZyB0aGUgYGFyY2hpdmVkYCBwcm9wZXJ0eSB0byBgZmFsc2VgIHdoZW4gdGhlIGBsb2NrZWRgIHByb3BlcnR5IGlzIGFsc28gYGZhbHNlYCwgaW4gd2hpY2ggY2FzZSBvbmx5IHRoZSBgU0VORF9NRVNTQUdFU2AgcGVybWlzc2lvbiBpcyByZXF1aXJlZC5cbiAgICpcbiAgICogLSBGaXJlcyBhIF9UaHJlYWQgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBJZiBlZGl0aW5nIGEgZ3VpbGQgY2hhbm5lbDpcbiAgICogLSBSZXF1aXJlcyB0aGUgYE1BTkFHRV9DSEFOTkVMU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogLSBJZiBtb2RpZnlpbmcgcGVybWlzc2lvbiBvdmVycmlkZXM6XG4gICAqICAgLSBSZXF1aXJlcyB0aGUgYE1BTkFHRV9ST0xFU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogICAtIE9ubHkgcGVybWlzc2lvbnMgdGhlIGJvdCB1c2VyIGhhcyBpbiB0aGUgZ3VpbGQgb3IgcGFyZW50IGNoYW5uZWwgY2FuIGJlIGFsbG93ZWQvZGVuaWVkIF9fdW5sZXNzX18gdGhlIGJvdCB1c2VyIGhhcyBhIGBNQU5BR0VfUk9MRVNgIHBlcm1pc3Npb24gb3ZlcnJpZGUgaW4gdGhlIGNoYW5uZWwuXG4gICAqXG4gICAqIC0gSWYgbW9kaWZ5aW5nIGEgY2hhbm5lbCBvZiB0eXBlIHtAbGluayBDaGFubmVsVHlwZXMuR3VpbGRDYXRlZ29yeX06XG4gICAqICAgICAtIEZpcmVzIGEgX0NoYW5uZWwgVXBkYXRlXyBnYXRld2F5IGV2ZW50IGZvciBlYWNoIGNoaWxkIGNoYW5uZWwgaW1wYWN0ZWQgaW4gdGhpcyBjaGFuZ2UuXG4gICAqIC0gT3RoZXJ3aXNlOlxuICAgKiAgICAgLSBGaXJlcyBhIF9DaGFubmVsIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICovXG4gIGVkaXRDaGFubmVsOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IE1vZGlmeUNoYW5uZWwpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZENoYW5uZWw+PlxuICAvKipcbiAgICogRWRpdHMgdGhlIHBlcm1pc3Npb24gb3ZlcnJpZGVzIGZvciBhIHVzZXIgb3Igcm9sZSBpbiBhIGNoYW5uZWwuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgdG8gZWRpdCB0aGUgcGVybWlzc2lvbiBvdmVycmlkZXMgb2YuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBlcm1pc3Npb24gb3ZlcnJpZGUuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1JPTEVTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBPbmx5IHBlcm1pc3Npb25zIHRoZSBib3QgdXNlciBoYXMgaW4gdGhlIGd1aWxkIG9yIHBhcmVudCBjaGFubmVsIGNhbiBiZSBhbGxvd2VkL2RlbmllZCBfX3VubGVzc19fIHRoZSBib3QgdXNlciBoYXMgYSBgTUFOQUdFX1JPTEVTYCBwZXJtaXNzaW9uIG92ZXJyaWRlIGluIHRoZSBjaGFubmVsLlxuICAgKlxuICAgKiBGaXJlcyBhIF9DaGFubmVsIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjZWRpdC1jaGFubmVsLXBlcm1pc3Npb25zfVxuICAgKi9cbiAgZWRpdENoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGVzOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IEVkaXRDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlc09wdGlvbnMpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIEVkaXRzIHRoZSBwb3NpdGlvbnMgb2YgYSBzZXQgb2YgY2hhbm5lbHMgaW4gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIGluIHdoaWNoIHRvIGVkaXQgdGhlIHBvc2l0aW9ucyBvZiB0aGUgY2hhbm5lbHMuXG4gICAqIEBwYXJhbSBjaGFubmVsUG9zaXRpb25zIC0gQSBzZXQgb2Ygb2JqZWN0cyBkZWZpbmluZyB0aGUgdXBkYXRlZCBwb3NpdGlvbnMgb2YgdGhlIGNoYW5uZWxzLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9DSEFOTkVMU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfQ2hhbm5lbCBVcGRhdGVfIGdhdGV3YXkgZXZlbnQgZm9yIGV2ZXJ5IGNoYW5uZWwgaW1wYWN0ZWQgaW4gdGhpcyBjaGFuZ2UuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNtb2RpZnktZ3VpbGQtY2hhbm5lbC1wb3NpdGlvbnN9XG4gICAqL1xuICBlZGl0Q2hhbm5lbFBvc2l0aW9uczogKGd1aWxkSWQ6IEJpZ1N0cmluZywgY2hhbm5lbFBvc2l0aW9uczogTW9kaWZ5R3VpbGRDaGFubmVsUG9zaXRpb25zW10pID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIEVkaXRzIGFuIGVtb2ppLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgaW4gd2hpY2ggdG8gZWRpdCB0aGUgZW1vamkuXG4gICAqIEBwYXJhbSBpZCAtIFRoZSBJRCBvZiB0aGUgZW1vamkgdG8gZWRpdC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGVkaXQgb2YgdGhlIGVtb2ppLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgdXBkYXRlZCB7QGxpbmsgRGlzY29yZEVtb2ppfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfRU1PSklTX0FORF9TVElDS0VSU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBgR3VpbGQgRW1vamlzIFVwZGF0ZWAgZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2Vtb2ppI21vZGlmeS1ndWlsZC1lbW9qaX1cbiAgICovXG4gIGVkaXRFbW9qaTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgaWQ6IEJpZ1N0cmluZywgb3B0aW9uczogTW9kaWZ5R3VpbGRFbW9qaSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkRW1vamk+PlxuICAvKipcbiAgICogRWRpdHMgYSBmb2xsb3ctdXAgbWVzc2FnZSB0byBhbiBpbnRlcmFjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHRva2VuIC0gVGhlIGludGVyYWN0aW9uIHRva2VuIHRvIHVzZSwgcHJvdmlkZWQgaW4gdGhlIG9yaWdpbmFsIGludGVyYWN0aW9uLlxuICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gVGhlIElEIG9mIHRoZSBtZXNzYWdlIHRvIGVkaXQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSBtZXNzYWdlLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZWRpdGVkIHtAbGluayBNZXNzYWdlfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVW5saWtlIGBlZGl0TWVzc2FnZSgpYCwgdGhpcyBlbmRwb2ludCBhbGxvd3MgdGhlIGJvdCB1c2VyIHRvIGFjdCB3aXRob3V0IG5lZWRpbmcgdG8gc2VlIHRoZSBjaGFubmVsIHRoZSBtZXNzYWdlIGlzIGluLlxuICAgKlxuICAgKiBEb2VzIG5vdCBzdXBwb3J0IGVwaGVtZXJhbCBmb2xsb3ctdXAgbWVzc2FnZXMgZHVlIHRvIHRoZXNlIGJlaW5nIHN0YXRlbGVzcy5cbiAgICpcbiAgICogRmlyZXMgYSBfTWVzc2FnZSBVcGRhdGVfIGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvcmVjZWl2aW5nLWFuZC1yZXNwb25kaW5nI2VkaXQtZm9sbG93dXAtbWVzc2FnZX1cbiAgICovXG4gIGVkaXRGb2xsb3d1cE1lc3NhZ2U6ICh0b2tlbjogc3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogSW50ZXJhY3Rpb25DYWxsYmFja0RhdGEpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZE1lc3NhZ2U+PlxuICAvKipcbiAgICogRWRpdHMgYSBnbG9iYWwgYXBwbGljYXRpb24gY29tbWFuZC5cbiAgICpcbiAgICogQHBhcmFtIGNvbW1hbmRJZCAtIFRoZSBJRCBvZiB0aGUgY29tbWFuZCB0byBlZGl0LlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZWRpdCBvZiB0aGUgY29tbWFuZC5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGVkaXRlZCB7QGxpbmsgQXBwbGljYXRpb25Db21tYW5kfS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvaW50ZXJhY3Rpb25zL2FwcGxpY2F0aW9uLWNvbW1hbmRzI2VkaXQtZ2xvYmFsLWFwcGxpY2F0aW9uLWNvbW1hbmR9XG4gICAqL1xuICBlZGl0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kOiAoY29tbWFuZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IENyZWF0ZUFwcGxpY2F0aW9uQ29tbWFuZCkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPj5cbiAgLyoqXG4gICAqIEVkaXRzIGEgZ3VpbGQncyBzZXR0aW5ncy5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGVkaXQuXG4gICAqIEBwYXJhbSBzaGFyZElkIC0gVGhlIElEIG9mIHRoZSBzaGFyZCB0aGUgZ3VpbGQgaXMgaW4uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSBndWlsZC5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGVkaXRlZCB7QGxpbmsgR3VpbGR9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogSWYgYXR0ZW1wdGluZyB0byBhZGQgb3IgcmVtb3ZlIHRoZSB7QGxpbmsgR3VpbGRGZWF0dXJlcy5Db21tdW5pdHl9IGZlYXR1cmU6XG4gICAqIC0gUmVxdWlyZXMgdGhlIGBBRE1JTklTVFJBVE9SYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNtb2RpZnktZ3VpbGR9XG4gICAqL1xuICBlZGl0R3VpbGQ6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IE1vZGlmeUd1aWxkKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRHdWlsZD4+XG4gIC8qKlxuICAgKiBFZGl0cyBhbiBhcHBsaWNhdGlvbiBjb21tYW5kIHJlZ2lzdGVyZWQgaW4gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRoZSBjb21tYW5kIGlzIHJlZ2lzdGVyZWQgaW4uXG4gICAqIEBwYXJhbSBjb21tYW5kSWQgLSBUaGUgSUQgb2YgdGhlIGNvbW1hbmQgdG8gZWRpdC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGVkaXQgb2YgdGhlIGNvbW1hbmQuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIEFwcGxpY2F0aW9uQ29tbWFuZH0uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL2ludGVyYWN0aW9ucy9hcHBsaWNhdGlvbi1jb21tYW5kcyNlZGl0LWd1aWxkLWFwcGxpY2F0aW9uLWNvbW1hbmR9XG4gICAqL1xuICBlZGl0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQ6IChcbiAgICBjb21tYW5kSWQ6IEJpZ1N0cmluZyxcbiAgICBndWlsZElkOiBCaWdTdHJpbmcsXG4gICAgb3B0aW9uczogQ3JlYXRlQXBwbGljYXRpb25Db21tYW5kLFxuICApID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4+XG4gIC8qKiBNb2RpZnkgYSBndWlsZCdzIE1GQSBsZXZlbC4gUmVxdWlyZXMgZ3VpbGQgb3duZXJzaGlwLiAqL1xuICBlZGl0R3VpbGRNZmFMZXZlbDogKGd1aWxkSWQ6IEJpZ1N0cmluZywgbWZhTGV2ZWw6IE1mYUxldmVscywgcmVhc29uPzogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBFZGl0IHRoZSBnaXZlbiBzdGlja2VyLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldFxuICAgKiBAcmV0dXJuIEEge0BsaW5rIERpc2NvcmRTdGlja2VyfVxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9FTU9KSVNfQU5EX1NUSUNLRVJTYCBwZXJtaXNzaW9uLlxuICAgKiBGaXJlcyBhIEd1aWxkIFN0aWNrZXJzIFVwZGF0ZSBHYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvc3RpY2tlciNtb2RpZnktZ3VpbGQtc3RpY2tlcn1cbiAgICovXG4gIGVkaXRHdWlsZFN0aWNrZXI6IChndWlsZElkOiBCaWdTdHJpbmcsIHN0aWNrZXJJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBBdExlYXN0T25lPEVkaXRHdWlsZFN0aWNrZXJPcHRpb25zPikgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkU3RpY2tlcj4+XG4gIC8qKlxuICAgKiBFZGl0cyBhIHRlbXBsYXRlJ3Mgc2V0dGluZ3MuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBlZGl0IGEgdGVtcGxhdGUgb2YuXG4gICAqIEBwYXJhbSB0ZW1wbGF0ZUNvZGUgLSBUaGUgY29kZSBvZiB0aGUgdGVtcGxhdGUgdG8gZWRpdC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGVkaXQgb2YgdGhlIHRlbXBsYXRlLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZWRpdGVkIHtAbGluayBUZW1wbGF0ZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0dVSUxEYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZC10ZW1wbGF0ZSNtb2RpZnktZ3VpbGQtdGVtcGxhdGV9XG4gICAqL1xuICBlZGl0R3VpbGRUZW1wbGF0ZTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgdGVtcGxhdGVDb2RlOiBzdHJpbmcsIG9wdGlvbnM6IE1vZGlmeUd1aWxkVGVtcGxhdGUpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFRlbXBsYXRlPj5cbiAgLyoqXG4gICAqIEVkaXRzIGEgbWVzc2FnZS5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0byBlZGl0IHRoZSBtZXNzYWdlIGluLlxuICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gVGhlIElEcyBvZiB0aGUgbWVzc2FnZSB0byBlZGl0LlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZWRpdCBvZiB0aGUgbWVzc2FnZS5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGVkaXRlZCB7QGxpbmsgTWVzc2FnZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIElmIGVkaXRpbmcgYW5vdGhlciB1c2VyJ3MgbWVzc2FnZTpcbiAgICogLSBSZXF1aXJlcyB0aGUgYE1BTkFHRV9NRVNTQUdFU2AgcGVybWlzc2lvbi5cbiAgICogLSBPbmx5IHRoZSB7QGxpbmsgRWRpdE1lc3NhZ2UuZmxhZ3MgfCBmbGFnc30gcHJvcGVydHkgb2YgdGhlIHtAbGluayBvcHRpb25zfSBvYmplY3QgcGFyYW1ldGVyIGNhbiBiZSBlZGl0ZWQuXG4gICAqXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNlZGl0LW1lc3NhZ2V9XG4gICAqL1xuICBlZGl0TWVzc2FnZTogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogRWRpdE1lc3NhZ2UpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZE1lc3NhZ2U+PlxuICAvKipcbiAgICogRWRpdHMgdGhlIGluaXRpYWwgbWVzc2FnZSByZXNwb25zZSB0byBhbiBpbnRlcmFjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHRva2VuIC0gVGhlIGludGVyYWN0aW9uIHRva2VuIHRvIHVzZSwgcHJvdmlkZWQgaW4gdGhlIG9yaWdpbmFsIGludGVyYWN0aW9uLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZWRpdCBvZiB0aGUgcmVzcG9uc2UuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIE1lc3NhZ2V9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBVbmxpa2UgYGVkaXRNZXNzYWdlKClgLCB0aGlzIGVuZHBvaW50IGFsbG93cyB0aGUgYm90IHVzZXIgdG8gYWN0IHdpdGhvdXQgbmVlZGluZyB0byBzZWUgdGhlIGNoYW5uZWwgdGhlIG1lc3NhZ2UgaXMgaW4uXG4gICAqXG4gICAqIERvZXMgbm90IHN1cHBvcnQgZXBoZW1lcmFsIGZvbGxvdy11cCBtZXNzYWdlcyBkdWUgdG8gdGhlc2UgYmVpbmcgc3RhdGVsZXNzLlxuICAgKlxuICAgKiBGaXJlcyBhIF9NZXNzYWdlIFVwZGF0ZV8gZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL2ludGVyYWN0aW9ucy9yZWNlaXZpbmctYW5kLXJlc3BvbmRpbmcjZWRpdC1vcmlnaW5hbC1pbnRlcmFjdGlvbi1yZXNwb25zZX1cbiAgICovXG4gIGVkaXRPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2U6ICh0b2tlbjogc3RyaW5nLCBvcHRpb25zOiBJbnRlcmFjdGlvbkNhbGxiYWNrRGF0YSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVzc2FnZT4gfCB1bmRlZmluZWQ+XG4gIC8qKlxuICAgKiBFZGl0cyB0aGUgb3JpZ2luYWwgd2ViaG9vayBtZXNzYWdlLlxuICAgKlxuICAgKiBAcGFyYW0gd2ViaG9va0lkIC0gVGhlIElEIG9mIHRoZSB3ZWJob29rIHRvIGVkaXQgdGhlIG9yaWdpbmFsIG1lc3NhZ2Ugb2YuXG4gICAqIEBwYXJhbSB0b2tlbiAtIFRoZSB3ZWJob29rIHRva2VuLCB1c2VkIHRvIGVkaXQgdGhlIG1lc3NhZ2UuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSBtZXNzYWdlLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZWRpdGVkIHtAbGluayBEaXNjb3JkTWVzc2FnZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvd2ViaG9vayNlZGl0LXdlYmhvb2stbWVzc2FnZX1cbiAgICovXG4gIGVkaXRPcmlnaW5hbFdlYmhvb2tNZXNzYWdlOiAoXG4gICAgd2ViaG9va0lkOiBCaWdTdHJpbmcsXG4gICAgdG9rZW46IHN0cmluZyxcbiAgICBvcHRpb25zOiBJbnRlcmFjdGlvbkNhbGxiYWNrRGF0YSAmIHsgdGhyZWFkSWQ/OiBCaWdTdHJpbmcgfSxcbiAgKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZXNzYWdlPj5cbiAgLyoqXG4gICAqIEVkaXRzIHRoZSB2b2ljZSBzdGF0ZSBvZiB0aGUgYm90IHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCBpbiB3aGljaCB0byBlZGl0IHRoZSB2b2ljZSBzdGF0ZSBvZiB0aGUgYm90IHVzZXIuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSB2b2ljZSBzdGF0ZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhlIHtAbGluayBFZGl0T3duVm9pY2VTdGF0ZS5jaGFubmVsSWQgfCBjaGFubmVsSWR9IHByb3BlcnR5IG9mIHRoZSB7QGxpbmsgb3B0aW9uc30gb2JqZWN0IHBhcmFtZXRlciBtdXN0IHBvaW50IHRvIGEgc3RhZ2UgY2hhbm5lbCwgYW5kIHRoZSBib3QgdXNlciBtdXN0IGFscmVhZHkgaGF2ZSBqb2luZWQgaXQuXG4gICAqXG4gICAqIElmIGF0dGVtcHRpbmcgdG8gdW5tdXRlIG9uZXNlbGY6XG4gICAqIC0gUmVxdWlyZXMgdGhlIGBNVVRFX01FTUJFUlNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIElmIGF0dGVtcHRpbmcgdG8gcmVxdWVzdCB0byBzcGVhazpcbiAgICogLSBSZXF1aXJlcyB0aGUgYFJFUVVFU1RfVE9fU1BFQUtgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNtb2RpZnktY3VycmVudC11c2VyLXZvaWNlLXN0YXRlfVxuICAgKi9cbiAgZWRpdE93blZvaWNlU3RhdGU6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IEVkaXRPd25Wb2ljZVN0YXRlKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBFZGl0cyBhIHJvbGUgaW4gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGVkaXQgdGhlIHJvbGUgaW4uXG4gICAqIEBwYXJhbSByb2xlSWQgLSBUaGUgSUQgb2YgdGhlIHJvbGUgdG8gZWRpdC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGVkaXQgb2YgdGhlIHJvbGUuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIERpc2NvcmRSb2xlfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfUk9MRVNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIFJvbGUgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjbW9kaWZ5LWd1aWxkLXJvbGV9XG4gICAqL1xuICBlZGl0Um9sZTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgcm9sZUlkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IEVkaXRHdWlsZFJvbGUpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFJvbGU+PlxuICAvKipcbiAgICogRWRpdHMgdGhlIHBvc2l0aW9ucyBvZiBhIHNldCBvZiByb2xlcy5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGVkaXQgdGhlIHJvbGUgcG9zaXRpb25zIGluLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZWRpdCBvZiB0aGUgcm9sZSBwb3NpdGlvbnMuXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZFJvbGV9IG9iamVjdHMgYXNzb3J0ZWQgYnkgcm9sZSBJRC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfUk9MRVNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIFJvbGUgVXBkYXRlXyBnYXRld2F5IGV2ZW50IGZvciBldmVyeSByb2xlIGltcGFjdGVkIGluIHRoaXMgY2hhbmdlLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjbW9kaWZ5LWd1aWxkLXJvbGUtcG9zaXRpb25zfVxuICAgKi9cbiAgZWRpdFJvbGVQb3NpdGlvbnM6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IE1vZGlmeVJvbGVQb3NpdGlvbnNbXSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkUm9sZVtdPj5cbiAgLyoqXG4gICAqIEVkaXRzIGEgc2NoZWR1bGVkIGV2ZW50LlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZWRpdCB0aGUgc2NoZWR1bGVkIGV2ZW50IGluLlxuICAgKiBAcGFyYW0gZXZlbnRJZCAtIFRoZSBJRCBvZiB0aGUgc2NoZWR1bGVkIGV2ZW50IHRvIGVkaXQuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIFNjaGVkdWxlZEV2ZW50fS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfRVZFTlRTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBUbyBzdGFydCBvciBlbmQgYW4gZXZlbnQsIG1vZGlmeSB0aGUgZXZlbnQncyBgc3RhdHVzYCBwcm9wZXJ0eS5cbiAgICpcbiAgICogVGhlIGBlbnRpdHlfbWV0YWRhdGFgIHByb3BlcnR5IGlzIGRpc2NhcmRlZCBmb3IgZXZlbnRzIHdob3NlIGBlbnRpdHlfdHlwZWAgaXMgbm90IHtAbGluayBTY2hlZHVsZWRFdmVudEVudGl0eVR5cGUuRXh0ZXJuYWx9LlxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBTY2hlZHVsZWQgRXZlbnQgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQtc2NoZWR1bGVkLWV2ZW50I21vZGlmeS1ndWlsZC1zY2hlZHVsZWQtZXZlbnR9XG4gICAqL1xuICBlZGl0U2NoZWR1bGVkRXZlbnQ6IChndWlsZElkOiBCaWdTdHJpbmcsIGV2ZW50SWQ6IEJpZ1N0cmluZywgb3B0aW9uczogUGFydGlhbDxFZGl0U2NoZWR1bGVkRXZlbnQ+KSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRTY2hlZHVsZWRFdmVudD4+XG4gIC8qKlxuICAgKiBFZGl0cyBhIHN0YWdlIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBzdGFnZSBjaGFubmVsIHRoZSBzdGFnZSBpbnN0YW5jZSBpcyBhc3NvY2lhdGVkIHdpdGguXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSB1cGRhdGVkIHtAbGluayBEaXNjb3JkU3RhZ2VJbnN0YW5jZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSB1c2VyIHRvIGJlIGEgbW9kZXJhdG9yIG9mIHRoZSBzdGFnZSBjaGFubmVsLlxuICAgKlxuICAgKiBGaXJlcyBhIF9TdGFnZSBJbnN0YW5jZSBVcGRhdGVfIGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvc3RhZ2UtaW5zdGFuY2UjbW9kaWZ5LXN0YWdlLWluc3RhbmNlfVxuICAgKi9cbiAgZWRpdFN0YWdlSW5zdGFuY2U6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgZGF0YTogRWRpdFN0YWdlSW5zdGFuY2VPcHRpb25zKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRTdGFnZUluc3RhbmNlPj5cbiAgLyoqXG4gICAqIEVkaXRzIHRoZSB2b2ljZSBzdGF0ZSBvZiBhbm90aGVyIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCBpbiB3aGljaCB0byBlZGl0IHRoZSB2b2ljZSBzdGF0ZSBvZiB0aGUgYm90IHVzZXIuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSB2b2ljZSBzdGF0ZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhlIHtAbGluayBFZGl0T3duVm9pY2VTdGF0ZS5jaGFubmVsSWQgfCBjaGFubmVsSWR9IHByb3BlcnR5IG9mIHRoZSB7QGxpbmsgb3B0aW9uc30gb2JqZWN0IHBhcmFtZXRlciBtdXN0IHBvaW50IHRvIGEgc3RhZ2UgY2hhbm5lbCwgYW5kIHRoZSB1c2VyIG11c3QgYWxyZWFkeSBoYXZlIGpvaW5lZCBpdC5cbiAgICpcbiAgICogUmVxdWlyZXMgdGhlIGBNVVRFX01FTUJFUlNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNtb2RpZnktY3VycmVudC11c2VyLXZvaWNlLXN0YXRlfVxuICAgKi9cbiAgZWRpdFVzZXJWb2ljZVN0YXRlOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBFZGl0VXNlclZvaWNlU3RhdGUpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIEVkaXRzIGEgd2ViaG9vay5cbiAgICpcbiAgICogQHBhcmFtIHdlYmhvb2tJZCAtIFRoZSBJRCBvZiB0aGUgd2ViaG9vayB0byBlZGl0LlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZWRpdGVkIHtAbGluayBEaXNjb3JkV2ViaG9va30uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1dFQkhPT0tTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9XZWJob29rcyBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy93ZWJob29rI2VkaXQtd2ViaG9va31cbiAgICovXG4gIGVkaXRXZWJob29rOiAod2ViaG9va0lkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IE1vZGlmeVdlYmhvb2spID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFdlYmhvb2s+PlxuICAvKipcbiAgICogRWRpdHMgYSB3ZWJob29rIG1lc3NhZ2UuXG4gICAqXG4gICAqIEBwYXJhbSB3ZWJob29rSWQgLSBUaGUgSUQgb2YgdGhlIHdlYmhvb2sgdG8gZWRpdCB0aGUgbWVzc2FnZSBvZi5cbiAgICogQHBhcmFtIHRva2VuIC0gVGhlIHdlYmhvb2sgdG9rZW4sIHVzZWQgdG8gZWRpdCB0aGUgbWVzc2FnZS5cbiAgICogQHBhcmFtIG1lc3NhZ2VJZCAtIFRoZSBJRCBvZiB0aGUgbWVzc2FnZSB0byBlZGl0LlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZWRpdCBvZiB0aGUgbWVzc2FnZS5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGVkaXRlZCB7QGxpbmsgRGlzY29yZE1lc3NhZ2V9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBGaXJlcyBhIF9NZXNzYWdlIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3dlYmhvb2sjZWRpdC13ZWJob29rLW1lc3NhZ2V9XG4gICAqL1xuICBlZGl0V2ViaG9va01lc3NhZ2U6IChcbiAgICB3ZWJob29rSWQ6IEJpZ1N0cmluZyxcbiAgICB0b2tlbjogc3RyaW5nLFxuICAgIG1lc3NhZ2VJZDogQmlnU3RyaW5nLFxuICAgIG9wdGlvbnM6IEludGVyYWN0aW9uQ2FsbGJhY2tEYXRhICYgeyB0aHJlYWRJZD86IEJpZ1N0cmluZyB9LFxuICApID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZE1lc3NhZ2U+PlxuICAvKipcbiAgICogRWRpdHMgYSB3ZWJob29rIHVzaW5nIHRoZSB3ZWJob29rIHRva2VuLCB0aGVyZWJ5IGJ5cGFzc2luZyB0aGUgbmVlZCBmb3IgYXV0aGVudGljYXRpb24gKyBwZXJtaXNzaW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHdlYmhvb2tJZCAtIFRoZSBJRCBvZiB0aGUgd2ViaG9vayB0byBlZGl0LlxuICAgKiBAcGFyYW0gdG9rZW4gLSBUaGUgd2ViaG9vayB0b2tlbiwgdXNlZCB0byBlZGl0IHRoZSB3ZWJob29rLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZWRpdGVkIHtAbGluayBEaXNjb3JkV2ViaG9va30uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1dFQkhPT0tTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9XZWJob29rcyBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy93ZWJob29rI21vZGlmeS13ZWJob29rLXdpdGgtdG9rZW59XG4gICAqL1xuICBlZGl0V2ViaG9va1dpdGhUb2tlbjogKHdlYmhvb2tJZDogQmlnU3RyaW5nLCB0b2tlbjogc3RyaW5nLCBvcHRpb25zOiBPbWl0PE1vZGlmeVdlYmhvb2ssICdjaGFubmVsSWQnPikgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkV2ViaG9vaz4+XG4gIC8qKlxuICAgKiBFZGl0cyBhIGd1aWxkJ3Mgd2VsY29tZSBzY3JlZW4uXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBlZGl0IHRoZSB3ZWxjb21lIHNjcmVlbiBvZi5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGVkaXQgb2YgdGhlIHdlbGNvbWUgc2NyZWVuLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZWRpdGVkIHtAbGluayBXZWxjb21lU2NyZWVufS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI21vZGlmeS1ndWlsZC13ZWxjb21lLXNjcmVlbn1cbiAgICovXG4gIGVkaXRXZWxjb21lU2NyZWVuOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBDYW1lbGl6ZTxEaXNjb3JkTW9kaWZ5R3VpbGRXZWxjb21lU2NyZWVuPikgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkV2VsY29tZVNjcmVlbj4+XG4gIC8qKlxuICAgKiBFZGl0cyB0aGUgc2V0dGluZ3Mgb2YgYSBndWlsZCdzIHdpZGdldC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGVkaXQgdGhlIHNldHRpbmdzIG9mIHRoZSB3aWRnZXQgb2YuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBlZGl0ZWQge0BsaW5rIEd1aWxkV2lkZ2V0U2V0dGluZ3N9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfR3VpbGQgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjbW9kaWZ5LWd1aWxkLXdpZGdldH1cbiAgICovXG4gIGVkaXRXaWRnZXRTZXR0aW5nczogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogQ2FtZWxpemU8RGlzY29yZEd1aWxkV2lkZ2V0U2V0dGluZ3M+KSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzPj5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIGEgd2ViaG9vaywgY2F1c2luZyBhIG1lc3NhZ2UgdG8gYmUgcG9zdGVkIGluIHRoZSBjaGFubmVsIGNvbmZpZ3VyZWQgZm9yIHRoZSB3ZWJob29rLlxuICAgKlxuICAgKiBAcGFyYW0gd2ViaG9va0lkIC0gVGhlIElEIG9mIHRoZSB3ZWJob29rIHRvIGV4ZWN1dGUuXG4gICAqIEBwYXJhbSB0b2tlbiAtIFRoZSB3ZWJob29rIHRva2VuLCB1c2VkIHRvIGV4ZWN1dGUgdGhlIHdlYmhvb2suXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBleGVjdXRpb24gb2YgdGhlIHdlYmhvb2suXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBEaXNjb3JkTWVzc2FnZX0sIG9yIGB1bmRlZmluZWRgIGlmIHRoZSB7QGxpbmsgRXhlY3V0ZVdlYmhvb2sud2FpdCB8IHdhaXR9IHByb3BlcnR5IG9mIHRoZSB7QGxpbmsgb3B0aW9uc30gb2JqZWN0IHBhcmFtZXRlciBpcyBzZXQgdG8gYGZhbHNlYC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogSWYgdGhlIHdlYmhvb2sgY2hhbm5lbCBpcyBhIGZvcnVtIGNoYW5uZWwsIHlvdSBtdXN0IHByb3ZpZGUgYSB2YWx1ZSBmb3IgZWl0aGVyIGB0aHJlYWRJZGAgb3IgYHRocmVhZE5hbWVgLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvd2ViaG9vayNleGVjdXRlLXdlYmhvb2t9XG4gICAqL1xuICBleGVjdXRlV2ViaG9vazogKHdlYmhvb2tJZDogQmlnU3RyaW5nLCB0b2tlbjogc3RyaW5nLCBvcHRpb25zOiBFeGVjdXRlV2ViaG9vaykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVzc2FnZT4gfCB1bmRlZmluZWQ+XG4gIC8qKlxuICAgKiBGb2xsb3dzIGFuIGFubm91bmNlbWVudCBjaGFubmVsLCBhbGxvd2luZyBtZXNzYWdlcyBwb3N0ZWQgd2l0aGluIGl0IHRvIGJlIGNyb3NzLXBvc3RlZCBpbnRvIHRoZSB0YXJnZXQgY2hhbm5lbC5cbiAgICpcbiAgICogQHBhcmFtIHNvdXJjZUNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgYW5ub3VuY2VtZW50IGNoYW5uZWwgdG8gZm9sbG93LlxuICAgKiBAcGFyYW0gdGFyZ2V0Q2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSB0YXJnZXQgY2hhbm5lbCAtIHRoZSBjaGFubmVsIHRvIGNyb3NzLXBvc3QgdG8uXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkRm9sbG93ZWRDaGFubmVsfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfV0VCSE9PS1NgIHBlcm1pc3Npb24gaW4gdGhlIF9fdGFyZ2V0IGNoYW5uZWxfXy5cbiAgICpcbiAgICogRmlyZXMgYSBfV2ViaG9va3MgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNmb2xsb3ctYW5ub3VuY2VtZW50LWNoYW5uZWx9XG4gICAqL1xuICBmb2xsb3dBbm5vdW5jZW1lbnQ6IChzb3VyY2VDaGFubmVsSWQ6IEJpZ1N0cmluZywgdGFyZ2V0Q2hhbm5lbElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEZvbGxvd2VkQ2hhbm5lbD4+XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsaXN0IG9mIGFsbCBhY3RpdmUgdGhyZWFkcyBmb3IgYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgdGhyZWFkcyBvZi5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRBY3RpdmVUaHJlYWRzfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmV0dXJucyBib3RoIHB1YmxpYyBhbmQgcHJpdmF0ZSB0aHJlYWRzLlxuICAgKlxuICAgKiBUaHJlYWRzIGFyZSBvcmRlcmVkIGJ5IHRoZSBgaWRgIHByb3BlcnR5IGluIGRlc2NlbmRpbmcgb3JkZXIuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNsaXN0LWFjdGl2ZS1ndWlsZC10aHJlYWRzfVxuICAgKi9cbiAgZ2V0QWN0aXZlVGhyZWFkczogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQWN0aXZlVGhyZWFkcz4+XG4gIC8qKiBHZXQgdGhlIGFwcGxpY2F0aW9ucyBpbmZvICovXG4gIGdldEFwcGxpY2F0aW9uSW5mbzogKCkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXBwbGljYXRpb24+PlxuICAvKipcbiAgICogR2V0cyB0aGUgcGVybWlzc2lvbnMgb2YgYSBndWlsZCBhcHBsaWNhdGlvbiBjb21tYW5kLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdGhlIGNvbW1hbmQgaXMgcmVnaXN0ZXJlZCBpbi5cbiAgICogQHBhcmFtIGNvbW1hbmRJZCAtIFRoZSBJRCBvZiB0aGUgY29tbWFuZCB0byBnZXQgdGhlIHBlcm1pc3Npb25zIG9mLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbn0uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL2ludGVyYWN0aW9ucy9hcHBsaWNhdGlvbi1jb21tYW5kcyNnZXQtYXBwbGljYXRpb24tY29tbWFuZC1wZXJtaXNzaW9uc31cbiAgICovXG4gIGdldEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb246IChndWlsZElkOiBCaWdTdHJpbmcsIGNvbW1hbmRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucz4+XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBwZXJtaXNzaW9ucyBvZiBhbGwgYXBwbGljYXRpb24gY29tbWFuZHMgcmVnaXN0ZXJlZCBpbiBhIGd1aWxkIGJ5IHRoZSBJRCBvZiB0aGUgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIHBlcm1pc3Npb25zIG9iamVjdHMgb2YuXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbn0gb2JqZWN0cyBhc3NvcnRlZCBieSBjb21tYW5kIElELlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjZ2V0LWd1aWxkLWFwcGxpY2F0aW9uLWNvbW1hbmQtcGVybWlzc2lvbnN9XG4gICAqL1xuICBnZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9uczogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnNbXT4+XG4gIC8qKlxuICAgKiBHZXRzIGEgZ3VpbGQncyBhdWRpdCBsb2cuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIGF1ZGl0IGxvZyBvZi5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZldGNoaW5nIG9mIHRoZSBhdWRpdCBsb2cuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBBdWRpdExvZ30uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgVklFV19BVURJVF9MT0dgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9hdWRpdC1sb2cjZ2V0LWd1aWxkLWF1ZGl0LWxvZ31cbiAgICovXG4gIGdldEF1ZGl0TG9nOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zPzogR2V0R3VpbGRBdWRpdExvZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXVkaXRMb2c+PlxuICAvKipcbiAgICogR2V0cyBhbiBhdXRvbW9kIHJ1bGUgYnkgaXRzIElELlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBydWxlIG9mLlxuICAgKiBAcGFyYW0gcnVsZUlkIC0gVGhlIElEIG9mIHRoZSBydWxlIHRvIGdldC5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGV9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2F1dG8tbW9kZXJhdGlvbiNnZXQtYXV0by1tb2RlcmF0aW9uLXJ1bGV9XG4gICAqL1xuICBnZXRBdXRvbW9kUnVsZTogKGd1aWxkSWQ6IEJpZ1N0cmluZywgcnVsZUlkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZT4+XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsaXN0IG9mIGF1dG9tb2QgcnVsZXMgZm9yIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIHJ1bGVzIGZyb20uXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZX0gb2JqZWN0cyBhc3NvcnRlZCBieSBydWxlIElELlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2F1dG8tbW9kZXJhdGlvbiNsaXN0LWF1dG8tbW9kZXJhdGlvbi1ydWxlcy1mb3ItZ3VpbGR9XG4gICAqL1xuICBnZXRBdXRvbW9kUnVsZXM6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZVtdPj5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIHZvaWNlIHJlZ2lvbnMuXG4gICAqXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgVm9pY2VSZWdpb25zIHwgVm9pY2VSZWdpb259IG9iamVjdHMgYXNzb3J0ZWQgYnkgdm9pY2UgcmVnaW9uIElELlxuICAgKi9cbiAgZ2V0QXZhaWxhYmxlVm9pY2VSZWdpb25zOiAoKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRWb2ljZVJlZ2lvbltdPj5cbiAgLyoqXG4gICAqIEdldHMgYSBiYW4gYnkgdXNlciBJRC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgYmFuIGZyb20uXG4gICAqIEBwYXJhbSB1c2VySWQgLSBUaGUgSUQgb2YgdGhlIHVzZXIgdG8gZ2V0IHRoZSBiYW4gZm9yLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZEJhbn0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgQkFOX01FTUJFUlNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNnZXQtZ3VpbGQtYmFufVxuICAgKi9cbiAgZ2V0QmFuOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCB1c2VySWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQmFuPj5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGxpc3Qgb2YgYmFucyBmb3IgYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgbGlzdCBvZiBiYW5zIGZvci5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZldGNoaW5nIG9mIHRoZSBsaXN0IG9mIGJhbnMuXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZEJhbn0gb2JqZWN0cyBhc3NvcnRlZCBieSB1c2VyIElELlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYEJBTl9NRU1CRVJTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBVc2VycyBhcmUgb3JkZXJlZCBieSB0aGVpciBJRHMgaW4gX2FzY2VuZGluZ18gb3JkZXIuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNnZXQtZ3VpbGQtYmFuc31cbiAgICovXG4gIGdldEJhbnM6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiBHZXRCYW5zKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRCYW5bXT4+XG4gIC8qKlxuICAgKiBHZXRzIGEgY2hhbm5lbCBieSBpdHMgSUQuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgdG8gZ2V0LlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZENoYW5uZWx9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBJZiB0aGUgY2hhbm5lbCBpcyBhIHRocmVhZCwgYSB7QGxpbmsgVGhyZWFkTWVtYmVyfSBvYmplY3QgaXMgaW5jbHVkZWQgaW4gdGhlIHJlc3VsdC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjZ2V0LWNoYW5uZWx9XG4gICAqL1xuICBnZXRDaGFubmVsOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZENoYW5uZWw+PlxuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiBpbnZpdGVzIGZvciBhIGNoYW5uZWwuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgdG8gZ2V0IHRoZSBpbnZpdGVzIG9mLlxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRJbnZpdGVNZXRhZGF0YX0gb2JqZWN0cyBhc3NvcnRlZCBieSBpbnZpdGUgY29kZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfQ0hBTk5FTFNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIE9ubHkgdXNhYmxlIGZvciBndWlsZCBjaGFubmVscy5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjZ2V0LWNoYW5uZWwtaW52aXRlc31cbiAgICovXG4gIGdldENoYW5uZWxJbnZpdGVzOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEludml0ZU1ldGFkYXRhW10+PlxuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiBjaGFubmVscyBmb3IgYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgY2hhbm5lbHMgb2YuXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZENoYW5uZWx9IG9iamVjdHMgYXNzb3J0ZWQgYnkgY2hhbm5lbCBJRC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogRXhjbHVkZXMgdGhyZWFkcy5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI2dldC1ndWlsZC1jaGFubmVsc31cbiAgICovXG4gIGdldENoYW5uZWxzOiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRDaGFubmVsW10+PlxuICAvKipcbiAgICogR2V0cyBhIGxpc3Qgb2Ygd2ViaG9va3MgZm9yIGEgY2hhbm5lbC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB3aGljaCB0byBnZXQgdGhlIHdlYmhvb2tzIG9mLlxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRXZWJob29rfSBvYmplY3RzIGFzc29ydGVkIGJ5IHdlYmhvb2sgSUQuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX1dFQkhPT0tTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvd2ViaG9vayNnZXQtY2hhbm5lbC13ZWJob29rc31cbiAgICovXG4gIGdldENoYW5uZWxXZWJob29rczogKGNoYW5uZWxJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRXZWJob29rW10+PlxuICAvKipcbiAgICogR2V0cyBvciBjcmVhdGVzIGEgRE0gY2hhbm5lbCB3aXRoIGEgdXNlci5cbiAgICpcbiAgICogQHBhcmFtIHVzZXJJZCAtIFRoZSBJRCBvZiB0aGUgdXNlciB0byBjcmVhdGUgdGhlIERNIGNoYW5uZWwgd2l0aC5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRDaGFubmVsfS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3VzZXIjY3JlYXRlLWRtfVxuICAgKi9cbiAgZ2V0RG1DaGFubmVsOiAodXNlcklkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZENoYW5uZWw+PlxuICAvKipcbiAgICogR2V0cyBhbiBlbW9qaSBieSBpdHMgSUQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCBmcm9tIHdoaWNoIHRvIGdldCB0aGUgZW1vamkuXG4gICAqIEBwYXJhbSBlbW9qaUlkIC0gVGhlIElEIG9mIHRoZSBlbW9qaSB0byBnZXQuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBEaXNjb3JkRW1vaml9LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZW1vamkjZ2V0LWd1aWxkLWVtb2ppfVxuICAgKi9cbiAgZ2V0RW1vamk6IChndWlsZElkOiBCaWdTdHJpbmcsIGVtb2ppSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkRW1vamk+PlxuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiBlbW9qaXMgZm9yIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB3aGljaCB0byBnZXQgdGhlIGVtb2ppcyBvZi5cbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBEaXNjb3JkRW1vaml9IG9iamVjdHMgYXNzb3J0ZWQgYnkgZW1vamkgSUQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9lbW9qaSNsaXN0LWd1aWxkLWVtb2ppc31cbiAgICovXG4gIGdldEVtb2ppczogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkRW1vamlbXT4+XG4gIC8qKlxuICAgKiBHZXRzIGEgZm9sbG93LXVwIG1lc3NhZ2UgdG8gYW4gaW50ZXJhY3Rpb24gYnkgdGhlIElEIG9mIHRoZSBtZXNzYWdlLlxuICAgKlxuICAgKiBAcGFyYW0gdG9rZW4gLSBUaGUgaW50ZXJhY3Rpb24gdG9rZW4gdG8gdXNlLCBwcm92aWRlZCBpbiB0aGUgb3JpZ2luYWwgaW50ZXJhY3Rpb24uXG4gICAqIEBwYXJhbSBtZXNzYWdlSWQgLSBUaGUgSUQgb2YgdGhlIG1lc3NhZ2UgdG8gZ2V0LlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgTWVzc2FnZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFVubGlrZSBgZ2V0TWVzc2FnZSgpYCwgdGhpcyBlbmRwb2ludCBhbGxvd3MgdGhlIGJvdCB1c2VyIHRvIGFjdCB3aXRob3V0OlxuICAgKiAtIE5lZWRpbmcgdG8gYmUgYWJsZSB0byBzZWUgdGhlIGNvbnRlbnRzIG9mIHRoZSBjaGFubmVsIHRoYXQgdGhlIG1lc3NhZ2UgaXMgaW4uIChgUkVBRF9NRVNTQUdFU2AgcGVybWlzc2lvbi4pXG4gICAqIC0gUmVxdWlyaW5nIHRoZSBgTUVTU0FHRV9DT05URU5UYCBpbnRlbnQuXG4gICAqXG4gICAqIERvZXMgbm90IHN1cHBvcnQgZXBoZW1lcmFsIGZvbGxvdy11cCBtZXNzYWdlcyBkdWUgdG8gdGhlc2UgYmVpbmcgc3RhdGVsZXNzLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvcmVjZWl2aW5nLWFuZC1yZXNwb25kaW5nI2dldC1mb2xsb3d1cC1tZXNzYWdlfVxuICAgKi9cbiAgZ2V0Rm9sbG93dXBNZXNzYWdlOiAodG9rZW46IHN0cmluZywgbWVzc2FnZUlkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZE1lc3NhZ2U+PlxuICAvKiogR2V0IHRoZSBib3RzIEdhdGV3YXkgbWV0YWRhdGEgdGhhdCBjYW4gaGVscCBkdXJpbmcgdGhlIG9wZXJhdGlvbiBvZiBsYXJnZSBvciBzaGFyZGVkIGJvdHMuICovXG4gIGdldEdhdGV3YXlCb3Q6ICgpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEdldEdhdGV3YXlCb3Q+PlxuICAvKipcbiAgICogR2V0cyBhIGdsb2JhbCBhcHBsaWNhdGlvbiBjb21tYW5kIGJ5IGl0cyBJRC5cbiAgICpcbiAgICogQHBhcmFtIGNvbW1hbmRJZCAtIFRoZSBJRCBvZiB0aGUgY29tbWFuZCB0byBnZXQuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBBcHBsaWNhdGlvbkNvbW1hbmR9LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjZ2V0LWdsb2JhbC1hcHBsaWNhdGlvbi1jb21tYW5kfVxuICAgKi9cbiAgZ2V0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kOiAoY29tbWFuZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4+XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsaXN0IG9mIHlvdXIgYm90J3MgZ2xvYmFsIGFwcGxpY2F0aW9uIGNvbW1hbmRzLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIEFwcGxpY2F0aW9uQ29tbWFuZH0gb2JqZWN0cyBhc3NvcnRlZCBieSBjb21tYW5kIElELlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjZ2V0LWdsb2JhbC1hcHBsaWNhdGlvbi1jb21tYW5kc31cbiAgICovXG4gIGdldEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHM6ICgpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPj5cbiAgLyoqXG4gICAqIEdldHMgYSBndWlsZCBieSBpdHMgSUQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmZXRjaGluZyBvZiB0aGUgZ3VpbGQuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBHdWlsZH0uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNnZXQtZ3VpbGR9XG4gICAqL1xuICBnZXRHdWlsZDogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IHsgY291bnRzPzogYm9vbGVhbiB9KSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRHdWlsZD4+XG4gIC8qKlxuICAgKiBHZXRzIGEgZ3VpbGQgYXBwbGljYXRpb24gY29tbWFuZCBieSBpdHMgSUQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0aGUgY29tbWFuZCBpcyByZWdpc3RlcmVkIGluLlxuICAgKiBAcGFyYW0gY29tbWFuZElkIC0gVGhlIElEIG9mIHRoZSBjb21tYW5kIHRvIGdldC5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIEFwcGxpY2F0aW9uQ29tbWFuZH0uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL2ludGVyYWN0aW9ucy9hcHBsaWNhdGlvbi1jb21tYW5kcyNnZXQtZ3VpbGQtYXBwbGljYXRpb24tY29tbWFuZH1cbiAgICovXG4gIGdldEd1aWxkQXBwbGljYXRpb25Db21tYW5kOiAoY29tbWFuZElkOiBCaWdTdHJpbmcsIGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kPj5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGxpc3Qgb2YgYXBwbGljYXRpb24gY29tbWFuZHMgcmVnaXN0ZXJlZCBieSB5b3VyIGJvdCBpbiBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdGhlIGNvbW1hbmRzIGFyZSByZWdpc3RlcmVkIGluLlxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIEFwcGxpY2F0aW9uQ29tbWFuZH0gb2JqZWN0cyBhc3NvcnRlZCBieSBjb21tYW5kIElELlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjZ2V0LWdsb2JhbC1hcHBsaWNhdGlvbi1jb21tYW5kc3N9XG4gICAqL1xuICBnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHM6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPj5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHByZXZpZXcgb2YgYSBndWlsZCBieSBhIGd1aWxkJ3MgSUQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIHByZXZpZXcgb2YuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBHdWlsZFByZXZpZXd9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBJZiB0aGUgYm90IHVzZXIgaXMgbm90IGluIHRoZSBndWlsZCwgdGhlIGd1aWxkIG11c3QgYmUgbHVya2FibGUuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNnZXQtZ3VpbGQtcHJldmlld31cbiAgICovXG4gIGdldEd1aWxkUHJldmlldzogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkR3VpbGRQcmV2aWV3Pj5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdGlja2VyIG9iamVjdCBmb3IgdGhlIGdpdmVuIGd1aWxkIGFuZCBzdGlja2VyIElEcy5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXRcbiAgICogQHBhcmFtIHN0aWNrZXJJZCBUaGUgSUQgb2YgdGhlIHN0aWNrZXIgdG8gZ2V0XG4gICAqIEByZXR1cm4gQSB7QGxpbmsgRGlzY29yZFN0aWNrZXJ9XG4gICAqXG4gICAqIEByZW1hcmtzIEluY2x1ZGVzIHRoZSB1c2VyIGZpZWxkIGlmIHRoZSBib3QgaGFzIHRoZSBgTUFOQUdFX0VNT0pJU19BTkRfU1RJQ0tFUlNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9zdGlja2VyI2dldC1ndWlsZC1zdGlja2VyfVxuICAgKi9cbiAgZ2V0R3VpbGRTdGlja2VyOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBzdGlja2VySWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkU3RpY2tlcj4+XG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIHN0aWNrZXIgb2JqZWN0cyBmb3IgdGhlIGdpdmVuIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldFxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERpc2NvcmRTdGlja2VyfSBvYmplY3RzIGFzc29ydGVkIGJ5IHN0aWNrZXIgSUQuXG4gICAqXG4gICAqIEByZW1hcmtzIEluY2x1ZGVzIHVzZXIgZmllbGRzIGlmIHRoZSBib3QgaGFzIHRoZSBgTUFOQUdFX0VNT0pJU19BTkRfU1RJQ0tFUlNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9zdGlja2VyI2xpc3QtZ3VpbGQtc3RpY2tlcnN9XG4gICAqL1xuICBnZXRHdWlsZFN0aWNrZXJzOiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRTdGlja2VyW10+PlxuICAvKipcbiAgICogR2V0cyBhIHRlbXBsYXRlIGJ5IGl0cyBjb2RlLlxuICAgKlxuICAgKiBAcGFyYW0gdGVtcGxhdGVDb2RlIC0gVGhlIGNvZGUgb2YgdGhlIHRlbXBsYXRlIHRvIGdldC5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIFRlbXBsYXRlfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZC10ZW1wbGF0ZSNnZXQtZ3VpbGQtdGVtcGxhdGV9XG4gICAqL1xuICBnZXRHdWlsZFRlbXBsYXRlOiAodGVtcGxhdGVDb2RlOiBzdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFRlbXBsYXRlPj5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGxpc3Qgb2YgdGVtcGxhdGVzIGZvciBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBsaXN0IG9mIHRlbXBsYXRlcyBmb3IuXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgVGVtcGxhdGV9IG9iamVjdHMgYXNzb3J0ZWQgYnkgdGVtcGxhdGUgY29kZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZC10ZW1wbGF0ZSNnZXQtZ3VpbGQtdGVtcGxhdGVzfVxuICAgKi9cbiAgZ2V0R3VpbGRUZW1wbGF0ZXM6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFRlbXBsYXRlW10+PlxuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiB3ZWJob29rcyBmb3IgYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgbGlzdCBvZiB3ZWJob29rcyBmb3IuXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZFdlYmhvb2t9IG9iamVjdHMgYXNzb3J0ZWQgYnkgd2ViaG9vayBJRC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfV0VCSE9PS1NgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy93ZWJob29rI2dldC1ndWlsZC13ZWJob29rc31cbiAgICovXG4gIGdldEd1aWxkV2ViaG9va3M6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFdlYmhvb2tbXT4+XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsaXN0IG9mIGludGVncmF0aW9ucyBhdHRhY2hlZCB0byBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBsaXN0IG9mIGludGVncmF0aW9ucyBmcm9tLlxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIEludGVncmF0aW9ufSBvYmplY3RzIGFzc29ydGVkIGJ5IGludGVncmF0aW9uIElELlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI2dldC1ndWlsZC1pbnRlZ3JhdGlvbnN9XG4gICAqL1xuICBnZXRJbnRlZ3JhdGlvbnM6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEludGVncmF0aW9uW10+PlxuICAvKipcbiAgICogR2V0cyBhbiBpbnZpdGUgdG8gYSBjaGFubmVsIGJ5IGl0cyBpbnZpdGUgY29kZS5cbiAgICpcbiAgICogQHBhcmFtIGludml0ZUNvZGUgLSBUaGUgaW52aXRlIGNvZGUgb2YgdGhlIGludml0ZSB0byBnZXQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmZXRjaGluZyBvZiB0aGUgaW52aXRlLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZEludml0ZU1ldGFkYXRhfS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2ludml0ZSNnZXQtaW52aXRlfVxuICAgKi9cbiAgZ2V0SW52aXRlOiAoaW52aXRlQ29kZTogc3RyaW5nLCBvcHRpb25zPzogR2V0SW52aXRlKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRJbnZpdGVNZXRhZGF0YT4+XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsaXN0IG9mIGludml0ZXMgZm9yIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIGludml0ZXMgZnJvbS5cbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBJbnZpdGVNZXRhZGF0YSB8IEludml0ZX0gb2JqZWN0cyBhc3NvcnRlZCBieSBpbnZpdGUgY29kZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9pbnZpdGUjZ2V0LWludml0ZXN9XG4gICAqL1xuICBnZXRJbnZpdGVzOiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRJbnZpdGVNZXRhZGF0YVtdPj5cbiAgLyoqXG4gICAqIEdldHMgYSBtZXNzYWdlIGZyb20gYSBjaGFubmVsIGJ5IHRoZSBJRCBvZiB0aGUgbWVzc2FnZS5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCBmcm9tIHdoaWNoIHRvIGdldCB0aGUgbWVzc2FnZS5cbiAgICogQHBhcmFtIG1lc3NhZ2VJZCAtIFRoZSBJRCBvZiB0aGUgbWVzc2FnZSB0byBnZXQuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBNZXNzYWdlfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhhdCB0aGUgYm90IHVzZXIgYmUgYWJsZSB0byBzZWUgdGhlIGNvbnRlbnRzIG9mIHRoZSBjaGFubmVsIGluIHdoaWNoIHRoZSBtZXNzYWdlIHdhcyBwb3N0ZWQuXG4gICAqXG4gICAqIElmIGdldHRpbmcgYSBtZXNzYWdlIGZyb20gYSBndWlsZCBjaGFubmVsOlxuICAgKiAtIFJlcXVpcmVzIHRoZSBgUkVBRF9NRVNTQUdFX0hJU1RPUllgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI2dldC1jaGFubmVsLW1lc3NhZ2V9XG4gICAqL1xuICBnZXRNZXNzYWdlOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG1lc3NhZ2VJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZXNzYWdlPj5cbiAgLyoqXG4gICAqIEdldHMgbXVsdGlwbGUgbWVzc2FnZXMgZnJvbSBhIGNoYW5uZWwuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgZnJvbSB3aGljaCB0byBnZXQgdGhlIG1lc3NhZ2VzLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZmV0Y2hpbmcgb2YgdGhlIG1lc3NhZ2VzLlxuICAgKiBAcmV0dXJucyBBIGNvbGxlY3Rpb24gb2Yge0BsaW5rIE1lc3NhZ2V9IG9iamVjdHMgYXNzb3J0ZWQgYnkgbWVzc2FnZSBJRC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhhdCB0aGUgYm90IHVzZXIgYmUgYWJsZSB0byBzZWUgdGhlIGNvbnRlbnRzIG9mIHRoZSBjaGFubmVsIGluIHdoaWNoIHRoZSBtZXNzYWdlcyB3ZXJlIHBvc3RlZC5cbiAgICpcbiAgICogSWYgZ2V0dGluZyBhIG1lc3NhZ2VzIGZyb20gYSBndWlsZCBjaGFubmVsOlxuICAgKiAtIFJlcXVpcmVzIHRoZSBgUkVBRF9NRVNTQUdFX0hJU1RPUllgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI2dldC1jaGFubmVsLW1lc3NhZ2VzfVxuICAgKi9cbiAgZ2V0TWVzc2FnZXM6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IEdldE1lc3NhZ2VzT3B0aW9ucykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVzc2FnZVtdPj5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGxpc3Qgb2Ygc3RpY2tlciBwYWNrcyBhdmFpbGFibGUgdG8gTml0cm8gc3Vic2NyaWJlcnMuXG4gICAqXG4gICAqIEBwYXJhbSBib3QgVGhlIGJvdCBpbnN0YW5jZSB0byB1c2UgdG8gbWFrZSB0aGUgcmVxdWVzdC5cbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBTdGlja2VyUGFja30gb2JqZWN0cyBhc3NvcnRlZCBieSBzdGlja2VyIElELlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvc3RpY2tlciNsaXN0LW5pdHJvLXN0aWNrZXItcGFja3N9XG4gICAqL1xuICBnZXROaXRyb1N0aWNrZXJQYWNrczogKCkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkU3RpY2tlclBhY2tbXT4+XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBpbml0aWFsIG1lc3NhZ2UgcmVzcG9uc2UgdG8gYW4gaW50ZXJhY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB0b2tlbiAtIFRoZSBpbnRlcmFjdGlvbiB0b2tlbiB0byB1c2UsIHByb3ZpZGVkIGluIHRoZSBvcmlnaW5hbCBpbnRlcmFjdGlvbi5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIE1lc3NhZ2V9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBVbmxpa2UgYGdldE1lc3NhZ2UoKWAsIHRoaXMgZW5kcG9pbnQgYWxsb3dzIHRoZSBib3QgdXNlciB0byBhY3Qgd2l0aG91dDpcbiAgICogLSBOZWVkaW5nIHRvIGJlIGFibGUgdG8gc2VlIHRoZSBjb250ZW50cyBvZiB0aGUgY2hhbm5lbCB0aGF0IHRoZSBtZXNzYWdlIGlzIGluLiAoYFJFQURfTUVTU0FHRVNgIHBlcm1pc3Npb24uKVxuICAgKiAtIFJlcXVpcmluZyB0aGUgYE1FU1NBR0VfQ09OVEVOVGAgaW50ZW50LlxuICAgKlxuICAgKiBEb2VzIG5vdCBzdXBwb3J0IGVwaGVtZXJhbCBmb2xsb3ctdXAgbWVzc2FnZXMgZHVlIHRvIHRoZXNlIGJlaW5nIHN0YXRlbGVzcy5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvaW50ZXJhY3Rpb25zL3JlY2VpdmluZy1hbmQtcmVzcG9uZGluZyNnZXQtb3JpZ2luYWwtaW50ZXJhY3Rpb24tcmVzcG9uc2V9XG4gICAqL1xuICBnZXRPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2U6ICh0b2tlbjogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZXNzYWdlPj5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHBpbm5lZCBtZXNzYWdlcyBmb3IgYSBjaGFubmVsLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRvIGdldCB0aGUgcGlubmVkIG1lc3NhZ2VzIGZvci5cbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBNZXNzYWdlfSBvYmplY3RzIGFzc29ydGVkIGJ5IG1lc3NhZ2UgSUQuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoYXQgdGhlIGJvdCB1c2VyIGJlIGFibGUgdG8gc2VlIHRoZSBjb250ZW50cyBvZiB0aGUgY2hhbm5lbCBpbiB3aGljaCB0aGUgbWVzc2FnZXMgd2VyZSBwb3N0ZWQuXG4gICAqXG4gICAqIElmIGdldHRpbmcgYSBtZXNzYWdlIGZyb20gYSBndWlsZCBjaGFubmVsOlxuICAgKiAtIFJlcXVpcmVzIHRoZSBgUkVBRF9NRVNTQUdFX0hJU1RPUllgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI2dldC1waW5uZWQtbWVzc2FnZXN9XG4gICAqL1xuICBnZXRQaW5uZWRNZXNzYWdlczogKGNoYW5uZWxJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZXNzYWdlW10+PlxuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiBwcml2YXRlIGFyY2hpdmVkIHRocmVhZHMgZm9yIGEgY2hhbm5lbC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCB0byBnZXQgdGhlIGFyY2hpdmVkIHRocmVhZHMgZm9yLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZmV0Y2hpbmcgb2YgdGhyZWFkcy5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRBcmNoaXZlZFRocmVhZHN9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYFJFQURfTUVTU0FHRV9ISVNUT1JZYCBwZXJtaXNzaW9uLlxuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9USFJFQURTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBSZXR1cm5zIHRocmVhZHMgb2YgdHlwZSB7QGxpbmsgQ2hhbm5lbFR5cGVzLkd1aWxkUHJpdmF0ZVRocmVhZH0uXG4gICAqXG4gICAqIFRocmVhZHMgYXJlIG9yZGVyZWQgYnkgdGhlIGBhcmNoaXZlX3RpbWVzdGFtcGAgcHJvcGVydHkgaW5jbHVkZWQgaW4gdGhlIG1ldGFkYXRhIG9mIHRoZSBvYmplY3QgaW4gZGVzY2VuZGluZyBvcmRlci5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjbGlzdC1wcml2YXRlLWFyY2hpdmVkLXRocmVhZHN9XG4gICAqL1xuICBnZXRQcml2YXRlQXJjaGl2ZWRUaHJlYWRzOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiBMaXN0QXJjaGl2ZWRUaHJlYWRzKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBcmNoaXZlZFRocmVhZHM+PlxuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiBwcml2YXRlIGFyY2hpdmVkIHRocmVhZHMgdGhlIGJvdCBpcyBhIG1lbWJlciBvZiBmb3IgYSBjaGFubmVsLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRvIGdldCB0aGUgYXJjaGl2ZWQgdGhyZWFkcyBmb3IuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmZXRjaGluZyBvZiB0aHJlYWRzLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZEFyY2hpdmVkVGhyZWFkc30uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgUkVBRF9NRVNTQUdFX0hJU1RPUllgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIFJldHVybnMgdGhyZWFkcyBvZiB0eXBlIHtAbGluayBDaGFubmVsVHlwZXMuR3VpbGRQcml2YXRlVGhyZWFkfS5cbiAgICpcbiAgICogVGhyZWFkcyBhcmUgb3JkZXJlZCBieSB0aGUgYGlkYCBwcm9wZXJ0eSBpbiBkZXNjZW5kaW5nIG9yZGVyLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNsaXN0LWpvaW5lZC1wcml2YXRlLWFyY2hpdmVkLXRocmVhZHN9XG4gICAqL1xuICBnZXRQcml2YXRlSm9pbmVkQXJjaGl2ZWRUaHJlYWRzOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiBMaXN0QXJjaGl2ZWRUaHJlYWRzKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRBcmNoaXZlZFRocmVhZHM+PlxuICAvKipcbiAgICogR2V0cyB0aGUgbnVtYmVyIG9mIG1lbWJlcnMgdGhhdCB3b3VsZCBiZSBraWNrZWQgZnJvbSBhIGd1aWxkIGR1cmluZyBwcnVuaW5nLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBwcnVuZSBjb3VudCBvZi5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZldGNoaW5nIG9mIHRoZSBwcnVuZSBjb3VudC5cbiAgICogQHJldHVybnMgQSBudW1iZXIgaW5kaWNhdGluZyB0aGUgbnVtYmVyIG9mIG1lbWJlcnMgdGhhdCB3b3VsZCBiZSBraWNrZWQuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgS0lDS19NRU1CRVJTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjZ2V0LWd1aWxkLXBydW5lLWNvdW50fVxuICAgKi9cbiAgZ2V0UHJ1bmVDb3VudDogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IEdldEd1aWxkUHJ1bmVDb3VudFF1ZXJ5KSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRQcnVuZWRDb3VudD4+XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsaXN0IG9mIHB1YmxpYyBhcmNoaXZlZCB0aHJlYWRzIGZvciBhIGNoYW5uZWwuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgdG8gZ2V0IHRoZSBhcmNoaXZlZCB0aHJlYWRzIGZvci5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZldGNoaW5nIG9mIHRocmVhZHMuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBBcmNoaXZlZFRocmVhZHN9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYFJFQURfTUVTU0FHRV9ISVNUT1JZYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBJZiBjYWxsZWQgb24gYSBjaGFubmVsIG9mIHR5cGUge0BsaW5rIENoYW5uZWxUeXBlcy5HdWlsZFRleHR9LCByZXR1cm5zIHRocmVhZHMgb2YgdHlwZSB7QGxpbmsgQ2hhbm5lbFR5cGVzLkd1aWxkUHVibGljVGhyZWFkfS5cbiAgICogSWYgY2FsbGVkIG9uIGEgY2hhbm5lbCBvZiB0eXBlIHtAbGluayBDaGFubmVsVHlwZXMuR3VpbGROZXdzfSwgcmV0dXJucyB0aHJlYWRzIG9mIHR5cGUge0BsaW5rIENoYW5uZWxUeXBlcy5HdWlsZE5ld3NUaHJlYWR9LlxuICAgKlxuICAgKiBUaHJlYWRzIGFyZSBvcmRlcmVkIGJ5IHRoZSBgYXJjaGl2ZV90aW1lc3RhbXBgIHByb3BlcnR5IGluY2x1ZGVkIGluIHRoZSBtZXRhZGF0YSBvZiB0aGUgb2JqZWN0IGluIGRlc2NlbmRpbmcgb3JkZXIuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI2xpc3QtcHVibGljLWFyY2hpdmVkLXRocmVhZHN9XG4gICAqL1xuICBnZXRQdWJsaWNBcmNoaXZlZFRocmVhZHM6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IExpc3RBcmNoaXZlZFRocmVhZHMpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEFyY2hpdmVkVGhyZWFkcz4+XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsaXN0IG9mIHJvbGVzIGZvciBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBsaXN0IG9mIHJvbGVzIGZvci5cbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBEaXNvcmNSb2xlfSBvYmplY3RzIGFzc29ydGVkIGJ5IHJvbGUgSUQuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIOKaoO+4jyBUaGlzIGVuZHBvaW50IHNob3VsZCBiZSB1c2VkIHNwYXJpbmdseSBkdWUgdG8ge0BsaW5rIFVzZXJ9IG9iamVjdHMgYWxyZWFkeSBiZWluZyBpbmNsdWRlZCBpbiBndWlsZCBwYXlsb2Fkcy5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI2dldC1ndWlsZC1yb2xlc31cbiAgICovXG4gIGdldFJvbGVzOiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRSb2xlW10+PlxuICAvKipcbiAgICogR2V0cyBhIHNjaGVkdWxlZCBldmVudCBieSBpdHMgSUQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIHNjaGVkdWxlZCBldmVudCBmcm9tLlxuICAgKiBAcGFyYW0gZXZlbnRJZCAtIFRoZSBJRCBvZiB0aGUgc2NoZWR1bGVkIGV2ZW50IHRvIGdldC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZldGNoaW5nIG9mIHRoZSBzY2hlZHVsZWQgZXZlbnQuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBTY2hlZHVsZWRFdmVudH0uXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZC1zY2hlZHVsZWQtZXZlbnQjZ2V0LWd1aWxkLXNjaGVkdWxlZC1ldmVudH1cbiAgICovXG4gIGdldFNjaGVkdWxlZEV2ZW50OiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBldmVudElkOiBCaWdTdHJpbmcsIG9wdGlvbnM/OiB7IHdpdGhVc2VyQ291bnQ/OiBib29sZWFuIH0pID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFNjaGVkdWxlZEV2ZW50Pj5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGxpc3Qgb2Ygc2NoZWR1bGVkIGV2ZW50cyBmb3IgYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgc2NoZWR1bGVkIGV2ZW50cyBmcm9tLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZmV0Y2hpbmcgb2YgdGhlIHNjaGVkdWxlZCBldmVudHMuXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgU2NoZWR1bGVkRXZlbnR9IG9iamVjdHMgYXNzb3J0ZWQgYnkgZXZlbnQgSUQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZC1zY2hlZHVsZWQtZXZlbnQjbGlzdC1zY2hlZHVsZWQtZXZlbnRzLWZvci1ndWlsZH1cbiAgICovXG4gIGdldFNjaGVkdWxlZEV2ZW50czogKGd1aWxkSWQ6IEJpZ1N0cmluZywgb3B0aW9ucz86IEdldFNjaGVkdWxlZEV2ZW50cykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkU2NoZWR1bGVkRXZlbnRbXT4+XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsaXN0IG9mIHN1YnNjcmliZXJzIHRvIGEgc2NoZWR1bGVkIGV2ZW50IGZyb20gYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGdldCB0aGUgc3Vic2NyaWJlcnMgdG8gdGhlIHNjaGVkdWxlZCBldmVudCBmcm9tLlxuICAgKiBAcGFyYW0gZXZlbnRJZCAtIFRoZSBJRCBvZiB0aGUgc2NoZWR1bGVkIGV2ZW50IHRvIGdldCB0aGUgc3Vic2NyaWJlcnMgb2YuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmZXRjaGluZyBvZiB0aGUgc3Vic2NyaWJlcnMuXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgVXNlcn0gb2JqZWN0cyBhc3NvcnRlZCBieSB1c2VyIElELlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9FVkVOVFNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIFVzZXJzIGFyZSBvcmRlcmVkIGJ5IHRoZWlyIElEcyBpbiBfYXNjZW5kaW5nXyBvcmRlci5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkLXNjaGVkdWxlZC1ldmVudCNnZXQtZ3VpbGQtc2NoZWR1bGVkLWV2ZW50LXVzZXJzfVxuICAgKi9cbiAgZ2V0U2NoZWR1bGVkRXZlbnRVc2VyczogKFxuICAgIGd1aWxkSWQ6IEJpZ1N0cmluZyxcbiAgICBldmVudElkOiBCaWdTdHJpbmcsXG4gICAgb3B0aW9ucz86IEdldFNjaGVkdWxlZEV2ZW50VXNlcnMsXG4gICkgPT4gUHJvbWlzZTxBcnJheTx7IHVzZXI6IENhbWVsaXplPERpc2NvcmRVc2VyPjsgbWVtYmVyPzogQ2FtZWxpemU8RGlzY29yZE1lbWJlcj4gfT4+XG4gIC8qKiBHZXQgdGhlIGJvdHMgR2F0ZXdheSBtZXRhZGF0YSB0aGF0IGNhbiBoZWxwIGR1cmluZyB0aGUgb3BlcmF0aW9uIG9mIGxhcmdlIG9yIHNoYXJkZWQgYm90cy4gKi9cbiAgZ2V0U2Vzc2lvbkluZm86ICgpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEdldEdhdGV3YXlCb3Q+PlxuICAvKipcbiAgICogR2V0cyB0aGUgc3RhZ2UgaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIGEgc3RhZ2UgY2hhbm5lbCwgaWYgb25lIGV4aXN0cy5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgc3RhZ2UgY2hhbm5lbCB0aGUgc3RhZ2UgaW5zdGFuY2UgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZFN0YWdlSW5zdGFuY2V9LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvc3RhZ2UtaW5zdGFuY2UjZ2V0LXN0YWdlLWluc3RhbmNlfVxuICAgKi9cbiAgZ2V0U3RhZ2VJbnN0YW5jZTogKGNoYW5uZWxJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRTdGFnZUluc3RhbmNlPj5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdGlja2VyIG9iamVjdCBmb3IgdGhlIGdpdmVuIHN0aWNrZXIgSUQuXG4gICAqXG4gICAqIEBwYXJhbSBzdGlja2VySWQgVGhlIElEIG9mIHRoZSBzdGlja2VyIHRvIGdldFxuICAgKiBAcmV0dXJucyBBIHtAbGluayBEaXNjb3JkU3RpY2tlcn1cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3N0aWNrZXIjZ2V0LXN0aWNrZXJ9XG4gICAqL1xuICBnZXRTdGlja2VyOiAoc3RpY2tlcklkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFN0aWNrZXI+PlxuICAvKipcbiAgICogR2V0cyBhIHRocmVhZCBtZW1iZXIgYnkgdGhlaXIgdXNlciBJRC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgdGhyZWFkIHRvIGdldCB0aGUgdGhyZWFkIG1lbWJlciBvZi5cbiAgICogQHBhcmFtIHVzZXJJZCAtIFRoZSB1c2VyIElEIG9mIHRoZSB0aHJlYWQgbWVtYmVyIHRvIGdldC5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRUaHJlYWRNZW1iZXJ9LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNnZXQtdGhyZWFkLW1lbWJlcn1cbiAgICovXG4gIGdldFRocmVhZE1lbWJlcjogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCB1c2VySWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkVGhyZWFkTWVtYmVyPj5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGxpc3Qgb2YgdGhyZWFkIG1lbWJlcnMgZm9yIGEgdGhyZWFkLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSB0aHJlYWQgdG8gZ2V0IHRoZSB0aHJlYWQgbWVtYmVycyBvZi5cbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBEaXNjb3JkVGhyZWFkTWVtYmVyfSBhc3NvcnRlZCBieSB1c2VyIElELlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYXBwbGljYXRpb24gdG8gaGF2ZSB0aGUgYEdVSUxEX01FTUJFUlNgIHByaXZpbGVnZWQgaW50ZW50IGVuYWJsZWQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI2xpc3QtdGhyZWFkLW1lbWJlcnN9XG4gICAqL1xuICBnZXRUaHJlYWRNZW1iZXJzOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFRocmVhZE1lbWJlcltdPj5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGxpc3Qgb2YgdXNlcnMgdGhhdCByZWFjdGVkIHdpdGggYW4gZW1vamkgdG8gYSBtZXNzYWdlLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRoZSBtZXNzYWdlIHRvIGdldCB0aGUgdXNlcnMgZm9yIGlzIGluLlxuICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gVGhlIElEIG9mIHRoZSBtZXNzYWdlIHRvIGdldCB0aGUgdXNlcnMgZm9yLlxuICAgKiBAcGFyYW0gcmVhY3Rpb24gLSBUaGUgcmVhY3Rpb24gZm9yIHdoaWNoIHRvIGdldCB0aGUgdXNlcnMuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmZXRjaGluZyBvZiB0aGUgdXNlcnMuXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgVXNlcn0gb2JqZWN0cyBhc3NvcnRlZCBieSB1c2VyIElELlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNnZXQtcmVhY3Rpb25zfVxuICAgKi9cbiAgZ2V0UmVhY3Rpb25zOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG1lc3NhZ2VJZDogQmlnU3RyaW5nLCByZWFjdGlvbjogc3RyaW5nLCBvcHRpb25zPzogR2V0UmVhY3Rpb25zKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRVc2VyW10+PlxuICAvKipcbiAgICogR2V0IGEgdXNlcidzIGRhdGEgZnJvbSB0aGUgYXBpXG4gICAqXG4gICAqIEBwYXJhbSBpZCBUaGUgdXNlcidzIGlkXG4gICAqIEByZXR1cm5zIHtDYW1lbGl6ZTxEaXNjb3JkVXNlcj59XG4gICAqL1xuICBnZXRVc2VyOiAoaWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkVXNlcj4+XG4gIC8qKlxuICAgKiBHZXRzIGluZm9ybWF0aW9uIGFib3V0IHRoZSB2YW5pdHkgdXJsIG9mIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIHZhbml0eSB1cmwgaW5mb3JtYXRpb24gZm9yLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgVmFuaXR5VXJsfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfR1VJTERgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIFRoZSBgY29kZWAgcHJvcGVydHkgd2lsbCBiZSBgbnVsbGAgaWYgdGhlIGd1aWxkIGRvZXMgbm90IGhhdmUgYSBzZXQgdmFuaXR5IHVybC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI2dldC1ndWlsZC12YW5pdHktdXJsfVxuICAgKi9cbiAgZ2V0VmFuaXR5VXJsOiAoZ3VpbGRJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRWYW5pdHlVcmw+PlxuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiB2b2ljZSByZWdpb25zIGZvciBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSB2b2ljZSByZWdpb25zIGZvci5cbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBWb2ljZVJlZ2lvbnMgfCBWb2ljZVJlZ2lvbn0gb2JqZWN0cyBhc3NvcnRlZCBieSB2b2ljZSByZWdpb24gSUQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNnZXQtZ3VpbGQtdm9pY2UtcmVnaW9uc31cbiAgICovXG4gIGdldFZvaWNlUmVnaW9uczogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkVm9pY2VSZWdpb25bXT4+XG4gIC8qKlxuICAgKiBHZXRzIGEgd2ViaG9vayBieSBpdHMgSUQuXG4gICAqXG4gICAqIEBwYXJhbSB3ZWJob29rSWQgLSBUaGUgSUQgb2YgdGhlIHdlYmhvb2sgdG8gZ2V0LlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZFdlYmhvb2t9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9XRUJIT09LU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3dlYmhvb2sjZ2V0LXdlYmhvb2t9XG4gICAqL1xuICBnZXRXZWJob29rOiAod2ViaG9va0lkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFdlYmhvb2s+PlxuICAvKipcbiAgICogR2V0cyBhIHdlYmhvb2sgbWVzc2FnZSBieSBpdHMgSUQuXG4gICAqXG4gICAqIEBwYXJhbSB3ZWJob29rSWQgLSBUaGUgSUQgb2YgdGhlIHdlYmhvb2sgdG8gZ2V0IGEgbWVzc2FnZSBvZi5cbiAgICogQHBhcmFtIHRva2VuIC0gVGhlIHdlYmhvb2sgdG9rZW4sIHVzZWQgdG8gZ2V0IHdlYmhvb2sgbWVzc2FnZXMuXG4gICAqIEBwYXJhbSBtZXNzYWdlSWQgLSB0aGUgSUQgb2YgdGhlIHdlYmhvb2sgbWVzc2FnZSB0byBnZXQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmZXRjaGluZyBvZiB0aGUgbWVzc2FnZS5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRNZXNzYWdlfS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3dlYmhvb2sjZ2V0LXdlYmhvb2stbWVzc2FnZX1cbiAgICovXG4gIGdldFdlYmhvb2tNZXNzYWdlOiAoXG4gICAgd2ViaG9va0lkOiBCaWdTdHJpbmcsXG4gICAgdG9rZW46IHN0cmluZyxcbiAgICBtZXNzYWdlSWQ6IEJpZ1N0cmluZyxcbiAgICBvcHRpb25zPzogR2V0V2ViaG9va01lc3NhZ2VPcHRpb25zLFxuICApID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZE1lc3NhZ2U+PlxuICAvKipcbiAgICogR2V0cyBhIHdlYmhvb2sgdXNpbmcgdGhlIHdlYmhvb2sgdG9rZW4sIHRoZXJlYnkgYnlwYXNzaW5nIHRoZSBuZWVkIGZvciBhdXRoZW50aWNhdGlvbiArIHBlcm1pc3Npb25zLlxuICAgKlxuICAgKiBAcGFyYW0gd2ViaG9va0lkIC0gVGhlIElEIG9mIHRoZSB3ZWJob29rIHRvIGdldC5cbiAgICogQHBhcmFtIHRva2VuIC0gVGhlIHdlYmhvb2sgdG9rZW4sIHVzZWQgdG8gZ2V0IHRoZSB3ZWJob29rLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB7QGxpbmsgRGlzY29yZFdlYmhvb2t9LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvd2ViaG9vayNnZXQtd2ViaG9vay13aXRoLXRva2VufVxuICAgKi9cbiAgZ2V0V2ViaG9va1dpdGhUb2tlbjogKHdlYmhvb2tJZDogQmlnU3RyaW5nLCB0b2tlbjogc3RyaW5nKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRXZWJob29rPj5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHdlbGNvbWUgc2NyZWVuIGZvciBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSB3ZWxjb21lIHNjcmVlbiBmb3IuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHtAbGluayBXZWxjb21lU2NyZWVufS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogSWYgdGhlIHdlbGNvbWUgc2NyZWVuIGlzIG5vdCBlbmFibGVkOlxuICAgKiAtIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0dVSUxEYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjZ2V0LWd1aWxkLXdlbGNvbWUtc2NyZWVufVxuICAgKi9cbiAgZ2V0V2VsY29tZVNjcmVlbjogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkV2VsY29tZVNjcmVlbj4+XG4gIC8qKlxuICAgKiBHZXRzIHRoZSBndWlsZCB3aWRnZXQgYnkgZ3VpbGQgSUQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIHdpZGdldCBvZi5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIEd1aWxkV2lkZ2V0fS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI2dldC1ndWlsZC13aWRnZXR9XG4gICAqL1xuICBnZXRXaWRnZXQ6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZEd1aWxkV2lkZ2V0Pj5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHNldHRpbmdzIG9mIGEgZ3VpbGQncyB3aWRnZXQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIHdpZGdldCBvZi5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIEd1aWxkV2lkZ2V0U2V0dGluZ3N9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9HVUlMRGAgcGVybWlzc2lvbi5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI2dldC1ndWlsZC13aWRnZXQtc2V0dGluZ3N9XG4gICAqL1xuICBnZXRXaWRnZXRTZXR0aW5nczogKGd1aWxkSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkR3VpbGRXaWRnZXRTZXR0aW5ncz4+XG4gIC8qKlxuICAgKiBBZGRzIHRoZSBib3QgdXNlciB0byBhIHRocmVhZC5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgdGhyZWFkIHRvIGFkZCB0aGUgYm90IHVzZXIgdG8uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSB0aHJlYWQgbm90IGJlIGFyY2hpdmVkLlxuICAgKlxuICAgKiBGaXJlcyBhIF9UaHJlYWQgTWVtYmVycyBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI2pvaW4tdGhyZWFkfVxuICAgKi9cbiAgam9pblRocmVhZDogKGNoYW5uZWxJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBMZWF2ZXMgYSBndWlsZC5cbiAgICpcbiAgICogQHBhcmFtIGd1aWxkSWQgLSBUaGUgSUQgb2YgdGhlIGd1aWxkIHRvIGxlYXZlLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBGaXJlcyBhIF9HdWlsZCBEZWxldGVfIGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvdXNlciNsZWF2ZS1ndWlsZH1cbiAgICovXG4gIGxlYXZlR3VpbGQ6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIGJvdCB1c2VyIGZyb20gYSB0aHJlYWQuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIHRocmVhZCB0byByZW1vdmUgdGhlIGJvdCB1c2VyIGZyb20uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSB0aHJlYWQgbm90IGJlIGFyY2hpdmVkLlxuICAgKlxuICAgKiBGaXJlcyBhIF9UaHJlYWQgTWVtYmVycyBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI2xlYXZlLXRocmVhZH1cbiAgICovXG4gIGxlYXZlVGhyZWFkOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIENyb3NzLXBvc3RzIGEgbWVzc2FnZSBwb3N0ZWQgaW4gYW4gYW5ub3VuY2VtZW50IGNoYW5uZWwgdG8gc3Vic2NyaWJlZCBjaGFubmVscy5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgYW5ub3VuY2VtZW50IGNoYW5uZWwuXG4gICAqIEBwYXJhbSBtZXNzYWdlSWQgLSBUaGUgSUQgb2YgdGhlIG1lc3NhZ2UgdG8gY3Jvc3MtcG9zdC5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGNyb3NzLXBvc3RlZCB7QGxpbmsgTWVzc2FnZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgU0VORF9NRVNTQUdFU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogSWYgbm90IGNyb3NzLXBvc3Rpbmcgb3duIG1lc3NhZ2U6XG4gICAqIC0gUmVxdWlyZXMgdGhlIGBNQU5BR0VfTUVTU0FHRVNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgQ3JlYXRlXyBldmVudCBpbiB0aGUgZ3VpbGRzIHRoZSBzdWJzY3JpYmVkIGNoYW5uZWxzIGFyZSBpbi5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjY3Jvc3Nwb3N0LW1lc3NhZ2V9XG4gICAqL1xuICBwdWJsaXNoTWVzc2FnZTogKGNoYW5uZWxJZDogQmlnU3RyaW5nLCBtZXNzYWdlSWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVzc2FnZT4+XG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgcm9sZSBmcm9tIGEgbWVtYmVyLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdGhlIG1lbWJlciB0byByZW1vdmUgdGhlIHJvbGUgZnJvbSBpcyBpbi5cbiAgICogQHBhcmFtIHVzZXJJZCAtIFRoZSB1c2VyIElEIG9mIHRoZSBtZW1iZXIgdG8gcmVtb3ZlIHRoZSByb2xlIGZyb20uXG4gICAqIEBwYXJhbSByb2xlSWQgLSBUaGUgSUQgb2YgdGhlIHJvbGUgdG8gcmVtb3ZlIGZyb20gdGhlIG1lbWJlci5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhlIGBNQU5BR0VfUk9MRVNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIE1lbWJlciBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNyZW1vdmUtZ3VpbGQtbWVtYmVyLXJvbGV9XG4gICAqL1xuICByZW1vdmVSb2xlOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCB1c2VySWQ6IEJpZ1N0cmluZywgcm9sZUlkOiBCaWdTdHJpbmcsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogUmVtb3ZlcyBhIG1lbWJlciBmcm9tIGEgdGhyZWFkLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSB0aHJlYWQgdG8gcmVtb3ZlIHRoZSB0aHJlYWQgbWVtYmVyIG9mLlxuICAgKiBAcGFyYW0gdXNlcklkIC0gVGhlIHVzZXIgSUQgb2YgdGhlIHRocmVhZCBtZW1iZXIgdG8gcmVtb3ZlLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBJZiB0aGUgdGhyZWFkIGlzIG9mIHR5cGUge0BsaW5rIENoYW5uZWxUeXBlcy5HdWlsZFByaXZhdGVUaHJlYWR9LCByZXF1aXJlcyB0byBiZSB0aGUgY3JlYXRvciBvZiB0aGUgdGhyZWFkLlxuICAgKiBPdGhlcndpc2UsIHJlcXVpcmVzIHRoZSBgTUFOQUdFX1RIUkVBRFNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIFJlcXVpcmVzIHRoZSB0aHJlYWQgbm90IGJlIGFyY2hpdmVkLlxuICAgKlxuICAgKiBGaXJlcyBhIF9UaHJlYWQgTWVtYmVycyBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI3JlbW92ZS10aHJlYWQtbWVtYmVyfVxuICAgKi9cbiAgcmVtb3ZlVGhyZWFkTWVtYmVyOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIHVzZXJJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBTZW5kcyBhIG1lc3NhZ2UgdG8gYSBjaGFubmVsLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHRvIHNlbmQgdGhlIG1lc3NhZ2UgaW4uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgbWVzc2FnZS5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGNyZWF0ZWQge0BsaW5rIERpc2NvcmRNZXNzYWdlfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogUmVxdWlyZXMgdGhhdCB0aGUgYm90IHVzZXIgYmUgYWJsZSB0byBzZWUgdGhlIGNvbnRlbnRzIG9mIHRoZSBjaGFubmVsIHRoZSBtZXNzYWdlIGlzIHRvIGJlIHNlbnQgaW4uXG4gICAqXG4gICAqIElmIHNlbmRpbmcgYSBtZXNzYWdlIHRvIGEgZ3VpbGQgY2hhbm5lbDpcbiAgICogLSBSZXF1aXJlcyB0aGUgYFNFTkRfTUVTU0FHRVNgIHBlcm1pc3Npb24uXG4gICAqXG4gICAqIElmIHNlbmRpbmcgYSBUVFMgbWVzc2FnZTpcbiAgICogLSBSZXF1aXJlcyB0aGUgYFNFTkRfVFRTX01FU1NBR0VTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBJZiBzZW5kaW5nIGEgbWVzc2FnZSBhcyBhIHJlcGx5IHRvIGFub3RoZXIgbWVzc2FnZTpcbiAgICogLSBSZXF1aXJlcyB0aGUgYFJFQURfTUVTU0FHRV9ISVNUT1JZYCBwZXJtaXNzaW9uLlxuICAgKiAtIFRoZSBtZXNzYWdlIGJlaW5nIHJlcGxpZWQgdG8gY2Fubm90IGJlIGEgc3lzdGVtIG1lc3NhZ2UuXG4gICAqXG4gICAqIOKaoO+4jyBUaGUgbWF4aW11bSBzaXplIG9mIGEgcmVxdWVzdCAoYWNjb3VudGluZyBmb3IgYW55IGF0dGFjaG1lbnRzIGFuZCBtZXNzYWdlIGNvbnRlbnQpIGZvciBib3QgdXNlcnMgaXMgXzggTWlCXy5cbiAgICpcbiAgICogRmlyZXMgYSBfTWVzc2FnZSBDcmVhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI2NyZWF0ZS1tZXNzYWdlfVxuICAgKi9cbiAgc2VuZE1lc3NhZ2U6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogQ3JlYXRlTWVzc2FnZU9wdGlvbnMpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZE1lc3NhZ2U+PlxuICAvKipcbiAgICogU2VuZHMgYSBmb2xsb3ctdXAgbWVzc2FnZSB0byBhbiBpbnRlcmFjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHRva2VuIC0gVGhlIGludGVyYWN0aW9uIHRva2VuIHRvIHVzZSwgcHJvdmlkZWQgaW4gdGhlIG9yaWdpbmFsIGludGVyYWN0aW9uLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIG1lc3NhZ2UuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBNZXNzYWdlfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICog4pqg77iPIEludGVyYWN0aW9uIHRva2VucyBhcmUgb25seSB2YWxpZCBmb3IgXzE1IG1pbnV0ZXNfLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCBtZW50aW9ucyBhcmUgc3VwcHJlc3NlZC4gVG8gZW5hYmxlIG1lbnRpb25zLCBwYXNzIGEgbWVudGlvbiBvYmplY3Qgd2l0aCB0aGUgY2FsbGJhY2sgZGF0YS5cbiAgICpcbiAgICogVW5saWtlIGBzZW5kTWVzc2FnZSgpYCwgdGhpcyBlbmRwb2ludCBhbGxvd3MgdGhlIGJvdCB1c2VyIHRvIGFjdCB3aXRob3V0OlxuICAgKiAtIE5lZWRpbmcgdG8gYmUgYWJsZSB0byBzZWUgdGhlIGNvbnRlbnRzIG9mIHRoZSBjaGFubmVsIHRoYXQgdGhlIG1lc3NhZ2UgaXMgaW4uIChgUkVBRF9NRVNTQUdFU2AgcGVybWlzc2lvbi4pXG4gICAqIC0gUmVxdWlyaW5nIHRoZSBgTUVTU0FHRV9DT05URU5UYCBpbnRlbnQuXG4gICAqXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgQ3JlYXRlXyBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvaW50ZXJhY3Rpb25zL3JlY2VpdmluZy1hbmQtcmVzcG9uZGluZyNjcmVhdGUtZm9sbG93dXAtbWVzc2FnZX1cbiAgICovXG4gIHNlbmRGb2xsb3d1cE1lc3NhZ2U6ICh0b2tlbjogc3RyaW5nLCBvcHRpb25zOiBJbnRlcmFjdGlvbkNhbGxiYWNrRGF0YSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVzc2FnZT4+XG4gIC8qKlxuICAgKiBTZW5kcyBhIHJlc3BvbnNlIHRvIGFuIGludGVyYWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gaW50ZXJhY3Rpb25JZCAtIFRoZSBJRCBvZiB0aGUgaW50ZXJhY3Rpb24gdG8gcmVzcG9uZCB0by5cbiAgICogQHBhcmFtIHRva2VuIC0gVGhlIGludGVyYWN0aW9uIHRva2VuIHRvIHVzZSwgcHJvdmlkZWQgaW4gdGhlIG9yaWdpbmFsIGludGVyYWN0aW9uLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgY3JlYXRpb24gb2YgdGhlIG1lc3NhZ2UuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBNZXNzYWdlfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICog4pqg77iPIEludGVyYWN0aW9uIHRva2VucyBhcmUgb25seSB2YWxpZCBmb3IgXzE1IG1pbnV0ZXNfLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCBtZW50aW9ucyBhcmUgc3VwcHJlc3NlZC4gVG8gZW5hYmxlIG1lbnRpb25zLCBwYXNzIGEgbWVudGlvbiBvYmplY3Qgd2l0aCB0aGUgY2FsbGJhY2sgZGF0YS5cbiAgICpcbiAgICogVW5saWtlIGBzZW5kTWVzc2FnZSgpYCwgdGhpcyBlbmRwb2ludCBhbGxvd3MgdGhlIGJvdCB1c2VyIHRvIGFjdCB3aXRob3V0OlxuICAgKiAtIE5lZWRpbmcgdG8gYmUgYWJsZSB0byBzZWUgdGhlIGNvbnRlbnRzIG9mIHRoZSBjaGFubmVsIHRoYXQgdGhlIG1lc3NhZ2UgaXMgaW4uIChgUkVBRF9NRVNTQUdFU2AgcGVybWlzc2lvbi4pXG4gICAqIC0gUmVxdWlyaW5nIHRoZSBgTUVTU0FHRV9DT05URU5UYCBpbnRlbnQuXG4gICAqXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgQ3JlYXRlXyBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvaW50ZXJhY3Rpb25zL3JlY2VpdmluZy1hbmQtcmVzcG9uZGluZyNjcmVhdGUtaW50ZXJhY3Rpb24tcmVzcG9uc2V9XG4gICAqL1xuICBzZW5kSW50ZXJhY3Rpb25SZXNwb25zZTogKGludGVyYWN0aW9uSWQ6IEJpZ1N0cmluZywgdG9rZW46IHN0cmluZywgb3B0aW9uczogSW50ZXJhY3Rpb25SZXNwb25zZSkgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogQ3JlYXRlcyBhIHRocmVhZCwgdXNpbmcgYW4gZXhpc3RpbmcgbWVzc2FnZSBhcyBpdHMgcG9pbnQgb2Ygb3JpZ2luLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIGluIHdoaWNoIHRvIGNyZWF0ZSB0aGUgdGhyZWFkLlxuICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gVGhlIElEIG9mIHRoZSBtZXNzYWdlIHRvIHVzZSBhcyB0aGUgdGhyZWFkJ3MgcG9pbnQgb2Ygb3JpZ2luLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIHRvIHVzZSBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSB0aHJlYWQuXG4gICAqIEByZXR1cm5zIEFuIGluc3RhbmNlIG9mIHRoZSBjcmVhdGVkIHtAbGluayBDaGFubmVsIHwgVGhyZWFkfS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogSWYgY2FsbGVkIG9uIGEgY2hhbm5lbCBvZiB0eXBlIHtAbGluayBDaGFubmVsVHlwZXMuR3VpbGRUZXh0fSwgY3JlYXRlcyBhIHtAbGluayBDaGFubmVsVHlwZXMuR3VpbGRQdWJsaWNUaHJlYWR9LlxuICAgKiBJZiBjYWxsZWQgb24gYSBjaGFubmVsIG9mIHR5cGUge0BsaW5rIENoYW5uZWxUeXBlcy5HdWlsZE5ld3N9LCBjcmVhdGVzIGEge0BsaW5rIENoYW5uZWxUeXBlcy5HdWlsZE5ld3NUaHJlYWR9LlxuICAgKiBEb2VzIG5vdCB3b3JrIG9uIGNoYW5uZWxzIG9mIHR5cGUge0BsaW5rIENoYW5uZWxUeXBlcy5HdWlsZEZvcnVtfS5cbiAgICpcbiAgICogVGhlIElEIG9mIHRoZSBjcmVhdGVkIHRocmVhZCB3aWxsIGJlIHRoZSBzYW1lIGFzIHRoZSBJRCBvZiB0aGUgc291cmNlIG1lc3NhZ2UuXG4gICAqXG4gICAqIEZpcmVzIGEgX1RocmVhZCBDcmVhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI3N0YXJ0LXRocmVhZC1mcm9tLW1lc3NhZ2V9XG4gICAqL1xuICBzdGFydFRocmVhZFdpdGhNZXNzYWdlOiAoY2hhbm5lbElkOiBCaWdTdHJpbmcsIG1lc3NhZ2VJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBTdGFydFRocmVhZFdpdGhNZXNzYWdlKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRDaGFubmVsPj5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB0aHJlYWQgd2l0aG91dCB1c2luZyBhIG1lc3NhZ2UgYXMgdGhlIHRocmVhZCdzIHBvaW50IG9mIG9yaWdpbi5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5uZWxJZCAtIFRoZSBJRCBvZiB0aGUgY2hhbm5lbCBpbiB3aGljaCB0byBjcmVhdGUgdGhlIHRocmVhZC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyB0byB1c2UgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgdGhyZWFkLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgY3JlYXRlZCB7QGxpbmsgRGlzY29yZENoYW5uZWwgfCBUaHJlYWR9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBDcmVhdGluZyBhIHByaXZhdGUgdGhyZWFkIHJlcXVpcmVzIHRoZSBzZXJ2ZXIgdG8gYmUgYm9vc3RlZC5cbiAgICpcbiAgICogRmlyZXMgYSBfVGhyZWFkIENyZWF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjc3RhcnQtdGhyZWFkLXdpdGhvdXQtbWVzc2FnZX1cbiAgICovXG4gIHN0YXJ0VGhyZWFkV2l0aG91dE1lc3NhZ2U6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgb3B0aW9uczogU3RhcnRUaHJlYWRXaXRob3V0TWVzc2FnZSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQ2hhbm5lbD4+XG4gIC8qKlxuICAgKiBTeW5jaHJvbmlzZXMgYSB0ZW1wbGF0ZSB3aXRoIHRoZSBjdXJyZW50IHN0YXRlIG9mIGEgZ3VpbGQuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBzeW5jaHJvbmlzZSBhIHRlbXBsYXRlIG9mLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZWRpdGVkIHtAbGluayBUZW1wbGF0ZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX0dVSUxEYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiBGaXJlcyBhIF9HdWlsZCBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZC10ZW1wbGF0ZSNnZXQtZ3VpbGQtdGVtcGxhdGVzfVxuICAgKi9cbiAgc3luY0d1aWxkVGVtcGxhdGU6IChndWlsZElkOiBCaWdTdHJpbmcpID0+IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFRlbXBsYXRlPj5cbiAgLyoqXG4gICAqIFRyaWdnZXJzIGEgdHlwaW5nIGluZGljYXRvciBmb3IgdGhlIGJvdCB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIGluIHdoaWNoIHRvIHRyaWdnZXIgdGhlIHR5cGluZyBpbmRpY2F0b3IuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEdlbmVyYWxseSwgYm90cyBzaG91bGQgX25vdF8gdXNlIHRoaXMgcm91dGUuXG4gICAqXG4gICAqIEZpcmVzIGEgX1R5cGluZyBTdGFydF8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2NoYW5uZWwjdHJpZ2dlci10eXBpbmctaW5kaWNhdG9yfVxuICAgKi9cbiAgdHJpZ2dlclR5cGluZ0luZGljYXRvcjogKGNoYW5uZWxJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBSZS1yZWdpc3RlcnMgdGhlIGxpc3Qgb2YgZ2xvYmFsIGFwcGxpY2F0aW9uIGNvbW1hbmRzLCBvdmVyd3JpdGluZyB0aGUgcHJldmlvdXMgY29tbWFuZHMgY29tcGxldGVseS5cbiAgICpcbiAgICogQHBhcmFtIGNvbW1hbmRzIC0gVGhlIGxpc3Qgb2YgY29tbWFuZHMgdG8gdXNlIHRvIG92ZXJ3cml0ZSB0aGUgcHJldmlvdXMgbGlzdC5cbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBBcHBsaWNhdGlvbkNvbW1hbmR9IG9iamVjdHMgYXNzb3J0ZWQgYnkgY29tbWFuZCBJRC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICog4p2XIENvbW1hbmRzIHRoYXQgYXJlIG5vdCBwcmVzZW50IGluIHRoZSBgY29tbWFuZHNgIGFycmF5IHdpbGwgYmUgX19kZWxldGVkX18uXG4gICAqXG4gICAqIOKaoO+4jyBDb21tYW5kcyB0aGF0IGRvIG5vdCBhbHJlYWR5IGV4aXN0IHdpbGwgY291bnQgdG93YXJkcyB0aGUgZGFpbHkgbGltaXQgb2YgXzIwMF8gbmV3IGNvbW1hbmRzLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjYnVsay1vdmVyd3JpdGUtZ2xvYmFsLWFwcGxpY2F0aW9uLWNvbW1hbmRzfVxuICAgKi9cbiAgdXBzZXJ0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kczogKGNvbW1hbmRzOiBDcmVhdGVBcHBsaWNhdGlvbkNvbW1hbmRbXSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kW10+PlxuICAvKipcbiAgICogUmUtcmVnaXN0ZXJzIHRoZSBsaXN0IG9mIGFwcGxpY2F0aW9uIGNvbW1hbmRzIHJlZ2lzdGVyZWQgaW4gYSBndWlsZCwgb3ZlcndyaXRpbmcgdGhlIHByZXZpb3VzIGNvbW1hbmRzIGNvbXBsZXRlbHkuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB3aG9zZSBsaXN0IG9mIGNvbW1hbmRzIHRvIG92ZXJ3cml0ZS5cbiAgICogQHBhcmFtIGNvbW1hbmRzIC0gVGhlIGxpc3Qgb2YgY29tbWFuZHMgdG8gdXNlIHRvIG92ZXJ3cml0ZSB0aGUgcHJldmlvdXMgbGlzdC5cbiAgICogQHJldHVybnMgQSBjb2xsZWN0aW9uIG9mIHtAbGluayBBcHBsaWNhdGlvbkNvbW1hbmR9IG9iamVjdHMgYXNzb3J0ZWQgYnkgY29tbWFuZCBJRC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICog4p2XIENvbW1hbmRzIHRoYXQgYXJlIG5vdCBwcmVzZW50IGluIHRoZSBgY29tbWFuZHNgIGFycmF5IHdpbGwgYmUgX19kZWxldGVkX18uXG4gICAqXG4gICAqIOKaoO+4jyBDb21tYW5kcyB0aGF0IGRvIG5vdCBhbHJlYWR5IGV4aXN0IHdpbGwgY291bnQgdG93YXJkcyB0aGUgZGFpbHkgbGltaXQgb2YgXzIwMF8gbmV3IGNvbW1hbmRzLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9pbnRlcmFjdGlvbnMvYXBwbGljYXRpb24tY29tbWFuZHMjYnVsay1vdmVyd3JpdGUtZ3VpbGQtYXBwbGljYXRpb24tY29tbWFuZHN9XG4gICAqL1xuICB1cHNlcnRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHM6IChndWlsZElkOiBCaWdTdHJpbmcsIGNvbW1hbmRzOiBDcmVhdGVBcHBsaWNhdGlvbkNvbW1hbmRbXSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kW10+PlxuICAvKipcbiAqIEJhbnMgYSB1c2VyIGZyb20gYSBndWlsZC5cbiAqXG5cbiAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBiYW4gdGhlIHVzZXIgZnJvbS5cbiAqIEBwYXJhbSB1c2VySWQgLSBUaGUgSUQgb2YgdGhlIHVzZXIgdG8gYmFuIGZyb20gdGhlIGd1aWxkLlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSBiYW4uXG4gKlxuICogQHJlbWFya3NcbiAqIFJlcXVpcmVzIHRoZSBgQkFOX01FTUJFUlNgIHBlcm1pc3Npb24uXG4gKlxuICogRmlyZXMgYSBfR3VpbGQgQmFuIEFkZF8gZ2F0ZXdheSBldmVudC5cbiAqXG4gKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvZ3VpbGQjY3JlYXRlLWd1aWxkLWJhbn1cbiAqL1xuICBiYW5NZW1iZXI6IChndWlsZElkOiBCaWdTdHJpbmcsIHVzZXJJZDogQmlnU3RyaW5nLCBvcHRpb25zPzogQ3JlYXRlR3VpbGRCYW4pID0+IFByb21pc2U8dm9pZD5cbiAgLyoqXG4gICAqIEVkaXRzIHRoZSBuaWNrbmFtZSBvZiB0aGUgYm90IHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBlZGl0IHRoZSBuaWNrbmFtZSBvZiB0aGUgYm90IHVzZXIgaW4uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSBuaWNrbmFtZS5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGVkaXRlZCB7QGxpbmsgRGlzY29yZE1lbWJlcn1cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogRmlyZXMgYSBfR3VpbGQgTWVtYmVyIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI21vZGlmeS1jdXJyZW50LW1lbWJlcn1cbiAgICovXG4gIGVkaXRCb3RNZW1iZXI6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IEVkaXRCb3RNZW1iZXJPcHRpb25zKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZW1iZXI+PlxuICAvKipcbiAgICogRWRpdHMgYSBtZW1iZXIncyBwcm9wZXJ0aWVzLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZWRpdCB0aGUgbWVtYmVyIG9mLlxuICAgKiBAcGFyYW0gdXNlcklkIC0gVGhlIHVzZXIgSUQgb2YgdGhlIG1lbWJlciB0byBlZGl0LlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZWRpdCBvZiB0aGUgdXNlci5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVGhpcyBlbmRwb2ludCByZXF1aXJlcyB2YXJpb3VzIHBlcm1pc3Npb25zIGRlcGVuZGluZyBvbiB3aGF0IGlzIGVkaXRlZCBhYm91dCB0aGUgbWVtYmVyLlxuICAgKiBUbyBmaW5kIG91dCB0aGUgcmVxdWlyZWQgcGVybWlzc2lvbiB0byBlbmFjdCBhIGNoYW5nZSwgcmVhZCB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGlzIGVuZHBvaW50J3Mge0BsaW5rIE1vZGlmeUd1aWxkTWVtYmVyIHwgcGFyYW1ldGVyc30uXG4gICAqXG4gICAqIEZpcmVzIGEgX0d1aWxkIE1lbWJlciBVcGRhdGVfIGdhdGV3YXkgZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNtb2RpZnktZ3VpbGQtbWVtYmVyfVxuICAgKi9cbiAgZWRpdE1lbWJlcjogKGd1aWxkSWQ6IEJpZ1N0cmluZywgdXNlcklkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IE1vZGlmeUd1aWxkTWVtYmVyKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZW1iZXI+PlxuICAvKipcbiAqIEdldHMgdGhlIG1lbWJlciBvYmplY3QgYnkgdXNlciBJRC5cbiAqXG5cbiAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBnZXQgdGhlIG1lbWJlciBvYmplY3QgZm9yLlxuICogQHBhcmFtIHVzZXJJZCAtIFRoZSBJRCBvZiB0aGUgdXNlciB0byBnZXQgdGhlIG1lbWJlciBvYmplY3QgZm9yLlxuICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIERpc2NvcmRNZW1iZXJXaXRoVXNlcn0uXG4gKlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI2dldC1ndWlsZC1tZW1iZXJ9XG4gKi9cbiAgZ2V0TWVtYmVyOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCB1c2VySWQ6IEJpZ1N0cmluZykgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVtYmVyV2l0aFVzZXI+PlxuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiBtZW1iZXJzIGZvciBhIGd1aWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gZ2V0IHRoZSBsaXN0IG9mIG1lbWJlcnMgZm9yLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZmV0Y2hpbmcgb2YgdGhlIG1lbWJlcnMuXG4gICAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZE1lbWJlcldpdGhVc2VyfSBvYmplY3RzIGFzc29ydGVkIGJ5IHVzZXIgSUQuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoZSBgR1VJTERfTUVNQkVSU2AgaW50ZW50LlxuICAgKlxuICAgKiDimqDvuI8gSXQgaXMgbm90IHJlY29tbWVuZGVkIHRvIHVzZSB0aGlzIGVuZHBvaW50IHdpdGggdmVyeSBsYXJnZSBib3RzLiBJbnN0ZWFkLCBvcHQgdG8gdXNlIGBmZXRjaE1lbWJlcnMoKWA6XG4gICAqIFJFU1QgY29tbXVuaWNhdGlvbiBvbmx5IHBlcm1pdHMgNTAgcmVxdWVzdHMgdG8gYmUgbWFkZSBwZXIgc2Vjb25kLCB3aGlsZSBnYXRld2F5cyBhbGxvdyBmb3IgdXAgdG8gMTIwIHJlcXVlc3RzXG4gICAqIHBlciBtaW51dGUgcGVyIHNoYXJkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmVhZCB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvdG9waWNzL3JhdGUtbGltaXRzI3JhdGUtbGltaXRzfS5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI2xpc3QtZ3VpbGQtbWVtYmVyc31cbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvdG9waWNzL2dhdGV3YXkjcmVxdWVzdC1ndWlsZC1tZW1iZXJzfVxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy90b3BpY3MvcmF0ZS1saW1pdHMjcmF0ZS1saW1pdHN9XG4gICAqL1xuICBnZXRNZW1iZXJzOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBvcHRpb25zOiBMaXN0R3VpbGRNZW1iZXJzKSA9PiBQcm9taXNlPENhbWVsaXplPERpc2NvcmRNZW1iZXJXaXRoVXNlcltdPj5cblxuICAvKipcbiAqIEtpY2tzIGEgbWVtYmVyIGZyb20gYSBndWlsZC5cbiAqXG5cbiAqIEBwYXJhbSBndWlsZElkIC0gVGhlIElEIG9mIHRoZSBndWlsZCB0byBraWNrIHRoZSBtZW1iZXIgZnJvbS5cbiAqIEBwYXJhbSB1c2VySWQgLSBUaGUgdXNlciBJRCBvZiB0aGUgbWVtYmVyIHRvIGtpY2sgZnJvbSB0aGUgZ3VpbGQuXG4gKlxuICogQHJlbWFya3NcbiAqIFJlcXVpcmVzIHRoZSBgS0lDS19NRU1CRVJTYCBwZXJtaXNzaW9uLlxuICpcbiAqIEZpcmVzIGEgX0d1aWxkIE1lbWJlciBSZW1vdmVfIGdhdGV3YXkgZXZlbnQuXG4gKlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI3JlbW92ZS1ndWlsZC1tZW1iZXJ9XG4gKi9cbiAga2lja01lbWJlcjogKGd1aWxkSWQ6IEJpZ1N0cmluZywgdXNlcklkOiBCaWdTdHJpbmcsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAgICogUGlucyBhIG1lc3NhZ2UgaW4gYSBjaGFubmVsLlxuICAgKlxuICAgKiBAcGFyYW0gY2hhbm5lbElkIC0gVGhlIElEIG9mIHRoZSBjaGFubmVsIHdoZXJlIHRoZSBtZXNzYWdlIGlzIHRvIGJlIHBpbm5lZC5cbiAgICogQHBhcmFtIG1lc3NhZ2VJZCAtIFRoZSBJRCBvZiB0aGUgbWVzc2FnZSB0byBwaW4uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFJlcXVpcmVzIHRoYXQgdGhlIGJvdCB1c2VyIGJlIGFibGUgdG8gc2VlIHRoZSBjb250ZW50cyBvZiB0aGUgY2hhbm5lbCBpbiB3aGljaCB0aGUgbWVzc2FnZXMgd2VyZSBwb3N0ZWQuXG4gICAqXG4gICAqIFJlcXVpcmVzIHRoZSBgTUFOQUdFX01FU1NBR0VTYCBwZXJtaXNzaW9uLlxuICAgKlxuICAgKiDimqDvuI8gVGhlcmUgY2FuIG9ubHkgYmUgYXQgbWF4IDUwIG1lc3NhZ2VzIHBpbm5lZCBpbiBhIGNoYW5uZWwuXG4gICAqXG4gICAqIEZpcmVzIGEgX0NoYW5uZWwgUGlucyBVcGRhdGVfIGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvY2hhbm5lbCNwaW4tbWVzc2FnZX1cbiAgICovXG4gIHBpbk1lc3NhZ2U6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgbWVzc2FnZUlkOiBCaWdTdHJpbmcsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxuICAvKipcbiAqIEluaXRpYXRlcyB0aGUgcHJvY2VzcyBvZiBwcnVuaW5nIGluYWN0aXZlIG1lbWJlcnMuXG4gKlxuXG4gKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gcHJ1bmUgdGhlIG1lbWJlcnMgb2YuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgcHJ1bmluZyBvZiBtZW1iZXJzLlxuICogQHJldHVybnMgQSBudW1iZXIgaW5kaWNhdGluZyBob3cgbWFueSBtZW1iZXJzIHdlcmUgcHJ1bmVkLlxuICpcbiAqIEByZW1hcmtzXG4gKiBSZXF1aXJlcyB0aGUgYEtJQ0tfTUVNQkVSU2AgcGVybWlzc2lvbi5cbiAqXG4gKiDinZcgUmVxdWVzdHMgdG8gdGhpcyBlbmRwb2ludCB3aWxsIHRpbWUgb3V0IGZvciBsYXJnZSBndWlsZHMuIFRvIHByZXZlbnQgdGhpcyBmcm9tIGhhcHBlbmluZywgc2V0IHRoZSB7QGxpbmsgQmVnaW5HdWlsZFBydW5lLmNvbXB1dGVQcnVuZUNvdW50fSBwcm9wZXJ0eSBvZiB0aGUge0BsaW5rIG9wdGlvbnN9IG9iamVjdCBwYXJhbWV0ZXIgdG8gYGZhbHNlYC4gVGhpcyB3aWxsIGJlZ2luIHRoZSBwcm9jZXNzIG9mIHBydW5pbmcsIGFuZCBpbW1lZGlhdGVseSByZXR1cm4gYHVuZGVmaW5lZGAsIHJhdGhlciB0aGFuIHdhaXQgZm9yIHRoZSBwcm9jZXNzIHRvIGNvbXBsZXRlIGJlZm9yZSByZXR1cm5pbmcgdGhlIGFjdHVhbCBjb3VudCBvZiBtZW1iZXJzIHRoYXQgaGF2ZSBiZWVuIGtpY2tlZC5cbiAqXG4gKiDimqDvuI8gQnkgZGVmYXVsdCwgdGhpcyBwcm9jZXNzIHdpbGwgbm90IHJlbW92ZSBtZW1iZXJzIHdpdGggYSByb2xlLiBUbyBpbmNsdWRlIHRoZSBtZW1iZXJzIHdobyBoYXZlIGEgX3BhcnRpY3VsYXIgc3Vic2V0IG9mIHJvbGVzXywgc3BlY2lmeSB0aGUgcm9sZShzKSBpbiB0aGUge0BsaW5rIEJlZ2luR3VpbGRQcnVuZS5pbmNsdWRlUm9sZXMgfCBpbmNsdWRlUm9sZXN9IHByb3BlcnR5IG9mIHRoZSB7QGxpbmsgb3B0aW9uc30gb2JqZWN0IHBhcmFtZXRlci5cbiAqXG4gKiBGaXJlcyBhIF9HdWlsZCBNZW1iZXIgUmVtb3ZlXyBnYXRld2F5IGV2ZW50IGZvciBldmVyeSBtZW1iZXIga2lja2VkLlxuICpcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNiZWdpbi1ndWlsZC1wcnVuZX1cbiAqL1xuICBwcnVuZU1lbWJlcnM6IChndWlsZElkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IEJlZ2luR3VpbGRQcnVuZSkgPT4gUHJvbWlzZTx7IHBydW5lZDogbnVtYmVyIHwgbnVsbCB9PlxuICAvKipcbiAqIEdldHMgdGhlIGxpc3Qgb2YgbWVtYmVycyB3aG9zZSB1c2VybmFtZXMgb3Igbmlja25hbWVzIHN0YXJ0IHdpdGggYSBwcm92aWRlZCBzdHJpbmcuXG4gKlxuXG4gKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gc2VhcmNoIGluLlxuICogQHBhcmFtIHF1ZXJ5IC0gVGhlIHN0cmluZyB0byBtYXRjaCB1c2VybmFtZXMgb3Igbmlja25hbWVzIGFnYWluc3QuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciBzZWFyY2hpbmcgdGhyb3VnaCB0aGUgbWVtYmVycy5cbiAqIEByZXR1cm5zIEEgY29sbGVjdGlvbiBvZiB7QGxpbmsgRGlzY29yZE1lbWJlcn0gb2JqZWN0cyBhc3NvcnRlZCBieSB1c2VyIElELlxuICpcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNzZWFyY2gtZ3VpbGQtbWVtYmVyc31cbiAqL1xuICBzZWFyY2hNZW1iZXJzOiAoZ3VpbGRJZDogQmlnU3RyaW5nLCBxdWVyeTogc3RyaW5nLCBvcHRpb25zPzogT21pdDxTZWFyY2hNZW1iZXJzLCAncXVlcnknPikgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVtYmVyV2l0aFVzZXJbXT4+XG4gIC8qKlxuICogVW5iYW5zIGEgdXNlciBmcm9tIGEgZ3VpbGQuXG4gKlxuXG4gKiBAcGFyYW0gZ3VpbGRJZCAtIFRoZSBJRCBvZiB0aGUgZ3VpbGQgdG8gdW5iYW4gdGhlIHVzZXIgaW4uXG4gKiBAcGFyYW0gdXNlcklkIC0gVGhlIElEIG9mIHRoZSB1c2VyIHRvIHVuYmFuLlxuICpcbiAqIEByZW1hcmtzXG4gKiBSZXF1aXJlcyB0aGUgYEJBTl9NRU1CRVJTYCBwZXJtaXNzaW9uLlxuICpcbiAqIEZpcmVzIGEgX0d1aWxkIEJhbiBSZW1vdmVfIGdhdGV3YXkgZXZlbnQuXG4gKlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI3JlbW92ZS1ndWlsZC1iYW59XG4gKi9cbiAgdW5iYW5NZW1iZXI6IChndWlsZElkOiBCaWdTdHJpbmcsIHVzZXJJZDogQmlnU3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKlxuICAgKiBVbnBpbnMgYSBwaW5uZWQgbWVzc2FnZSBpbiBhIGNoYW5uZWwuXG4gICAqXG4gICAqIEBwYXJhbSBjaGFubmVsSWQgLSBUaGUgSUQgb2YgdGhlIGNoYW5uZWwgd2hlcmUgdGhlIG1lc3NhZ2UgaXMgcGlubmVkLlxuICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gVGhlIElEIG9mIHRoZSBtZXNzYWdlIHRvIHVucGluLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBSZXF1aXJlcyB0aGF0IHRoZSBib3QgdXNlciBiZSBhYmxlIHRvIHNlZSB0aGUgY29udGVudHMgb2YgdGhlIGNoYW5uZWwgaW4gd2hpY2ggdGhlIG1lc3NhZ2VzIHdlcmUgcG9zdGVkLlxuICAgKlxuICAgKiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9NRVNTQUdFU2AgcGVybWlzc2lvbi5cbiAgICpcbiAgICogRmlyZXMgYSBfQ2hhbm5lbCBQaW5zIFVwZGF0ZV8gZXZlbnQuXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9jaGFubmVsI3VucGluLW1lc3NhZ2V9XG4gICAqL1xuICB1bnBpbk1lc3NhZ2U6IChjaGFubmVsSWQ6IEJpZ1N0cmluZywgbWVzc2FnZUlkOiBCaWdTdHJpbmcsIHJlYXNvbj86IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPlxufVxuXG5leHBvcnQgdHlwZSBSZXF1ZXN0TWV0aG9kcyA9ICdHRVQnIHwgJ1BPU1QnIHwgJ0RFTEVURScgfCAnUEFUQ0gnIHwgJ1BVVCdcbmV4cG9ydCB0eXBlIEFwaVZlcnNpb25zID0gOSB8IDEwXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlV2ViaG9vayBleHRlbmRzIFdpdGhSZWFzb24ge1xuICAvKiogTmFtZSBvZiB0aGUgd2ViaG9vayAoMS04MCBjaGFyYWN0ZXJzKSAqL1xuICBuYW1lOiBzdHJpbmdcbiAgLyoqIEltYWdlIHVybCBmb3IgdGhlIGRlZmF1bHQgd2ViaG9vayBhdmF0YXIgKi9cbiAgYXZhdGFyPzogc3RyaW5nIHwgbnVsbFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZVJlcXVlc3RCb2R5T3B0aW9ucyB7XG4gIGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4gIG1ldGhvZDogUmVxdWVzdE1ldGhvZHNcbiAgYm9keT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gIHVuYXV0aG9yaXplZD86IGJvb2xlYW5cbiAgdXJsPzogc3RyaW5nXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVxdWVzdEJvZHkge1xuICBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4gIGJvZHk6IHN0cmluZyB8IEZvcm1EYXRhXG4gIG1ldGhvZDogUmVxdWVzdE1ldGhvZHNcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZW5kUmVxdWVzdE9wdGlvbnMge1xuICAvKiogVGhlIHVybCB0byBzZW5kIHRoZSByZXF1ZXN0IHRvLiAqL1xuICB1cmw6IHN0cmluZ1xuICAvKiogVGhlIG1ldGhvZCB0byB1c2Ugd2hlbiBzZW5kaW5nIHRoZSByZXF1ZXN0LiAqL1xuICBtZXRob2Q6IFJlcXVlc3RNZXRob2RzXG4gIC8qKiBUaGUgYm9keSB0byBiZSBzZW50IGluIHRoZSByZXF1ZXN0LiAqL1xuICBib2R5PzogUmVjb3JkPHN0cmluZywgYW55PlxuICAvKiogVGhlIGFtb3VudCBvZiB0aW1lcyB0aGlzIHJlcXVlc3QgaGFzIGJlZW4gcmV0cmllZC4gKi9cbiAgcmV0cnlDb3VudDogbnVtYmVyXG4gIC8qKiBIYW5kbGVyIHRvIHJldHJ5IGEgcmVxdWVzdCBzaG91bGQgaXQgYmUgcmF0ZSBsaW1pdGVkLiAqL1xuICByZXRyeVJlcXVlc3Q/OiAob3B0aW9uczogU2VuZFJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPHZvaWQ+XG4gIC8qKiBSZXNvbHZlIGhhbmRsZXIgd2hlbiBhIHJlcXVlc3Qgc3VjY2VlZHMuICovXG4gIHJlc29sdmU6ICh2YWx1ZTogUmVzdFJlcXVlc3RSZXNwb25zZSkgPT4gdm9pZFxuICAvKiogUmVqZWN0IGhhbmRsZXIgd2hlbiBhIHJlcXVlc3QgZmFpbHMuICovXG4gIHJlamVjdDogKHJlYXNvbj86IGFueSkgPT4gdm9pZFxuICAvKiogSWYgdGhpcyByZXF1ZXN0IGhhcyBhIGJ1Y2tldCBpZCB3aGljaCBpdCBmYWxscyB1bmRlciBmb3IgcmF0ZSBsaW1pdCAqL1xuICBidWNrZXRJZD86IHN0cmluZ1xuICAvKiogQWRkaXRpb25hbCByZXF1ZXN0IG9wdGlvbnMsIHVzZWQgZm9yIHRoaW5ncyBsaWtlIG92ZXJyaWRpbmcgYXV0aG9yaXphdGlvbiBoZWFkZXIuICovXG4gIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdFJhdGVMaW1pdGVkUGF0aCB7XG4gIHVybDogc3RyaW5nXG4gIHJlc2V0VGltZXN0YW1wOiBudW1iZXJcbiAgYnVja2V0SWQ/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXZWJob29rTWVzc2FnZUVkaXRvciB7XG4gIC8qKlxuICAgKiBFZGl0cyBhIHdlYmhvb2sgbWVzc2FnZS5cbiAgICpcbiAgICogQHBhcmFtIHdlYmhvb2tJZCAtIFRoZSBJRCBvZiB0aGUgd2ViaG9vayB0byBlZGl0IHRoZSBtZXNzYWdlIG9mLlxuICAgKiBAcGFyYW0gdG9rZW4gLSBUaGUgd2ViaG9vayB0b2tlbiwgdXNlZCB0byBlZGl0IHRoZSBtZXNzYWdlLlxuICAgKiBAcGFyYW0gbWVzc2FnZUlkIC0gVGhlIElEIG9mIHRoZSBtZXNzYWdlIHRvIGVkaXQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBlZGl0IG9mIHRoZSBtZXNzYWdlLlxuICAgKiBAcmV0dXJucyBBbiBpbnN0YW5jZSBvZiB0aGUgZWRpdGVkIHtAbGluayBEaXNjb3JkTWVzc2FnZX0uXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEZpcmVzIGEgX01lc3NhZ2UgVXBkYXRlXyBnYXRld2F5IGV2ZW50LlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2Rpc2NvcmQuY29tL2RldmVsb3BlcnMvZG9jcy9yZXNvdXJjZXMvd2ViaG9vayNlZGl0LXdlYmhvb2stbWVzc2FnZX1cbiAgICovXG4gICh3ZWJob29rSWQ6IEJpZ1N0cmluZywgdG9rZW46IHN0cmluZywgbWVzc2FnZUlkOiBCaWdTdHJpbmcsIG9wdGlvbnM6IEludGVyYWN0aW9uQ2FsbGJhY2tEYXRhICYgeyB0aHJlYWRJZD86IEJpZ1N0cmluZyB9KTogUHJvbWlzZTxcbiAgICBDYW1lbGl6ZTxEaXNjb3JkTWVzc2FnZT5cbiAgPlxuICAvKipcbiAgICogRWRpdHMgdGhlIG9yaWdpbmFsIHdlYmhvb2sgbWVzc2FnZS5cbiAgICpcbiAgICogQHBhcmFtIHdlYmhvb2tJZCAtIFRoZSBJRCBvZiB0aGUgd2ViaG9vayB0byBlZGl0IHRoZSBvcmlnaW5hbCBtZXNzYWdlIG9mLlxuICAgKiBAcGFyYW0gdG9rZW4gLSBUaGUgd2ViaG9vayB0b2tlbiwgdXNlZCB0byBlZGl0IHRoZSBtZXNzYWdlLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZWRpdCBvZiB0aGUgbWVzc2FnZS5cbiAgICogQHJldHVybnMgQW4gaW5zdGFuY2Ugb2YgdGhlIGVkaXRlZCB7QGxpbmsgRGlzY29yZE1lc3NhZ2V9LlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBGaXJlcyBhIF9NZXNzYWdlIFVwZGF0ZV8gZ2F0ZXdheSBldmVudC5cbiAgICpcbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3dlYmhvb2sjZWRpdC13ZWJob29rLW1lc3NhZ2V9XG4gICAqL1xuICBvcmlnaW5hbDogKHdlYmhvb2tJZDogQmlnU3RyaW5nLCB0b2tlbjogc3RyaW5nLCBvcHRpb25zOiBJbnRlcmFjdGlvbkNhbGxiYWNrRGF0YSAmIHsgdGhyZWFkSWQ/OiBCaWdTdHJpbmcgfSkgPT4gUHJvbWlzZTxDYW1lbGl6ZTxEaXNjb3JkTWVzc2FnZT4+XG59XG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZVRlbXBsYXRlIHtcbiAgLyoqIE5hbWUgd2hpY2ggdGhlIHRlbXBsYXRlIHNob3VsZCBoYXZlICovXG4gIG5hbWU6IHN0cmluZ1xuICAvKiogRGVzY3JpcHRpb24gb2YgdGhlIHRlbXBsYXRlICovXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nXG59XG4vKiogaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL3RlbXBsYXRlI21vZGlmeS1ndWlsZC10ZW1wbGF0ZSAqL1xuZXhwb3J0IGludGVyZmFjZSBNb2RpZnlHdWlsZFRlbXBsYXRlIHtcbiAgLyoqIE5hbWUgb2YgdGhlIHRlbXBsYXRlICgxLTEwMCBjaGFyYWN0ZXJzKSAqL1xuICBuYW1lPzogc3RyaW5nXG4gIC8qKiBEZXNjcmlwdGlvbiBvZiB0aGUgdGVtcGxhdGUgKDAtMTIwIGNoYXJhY3RlcnMpICovXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nIHwgbnVsbFxufVxuLyoqIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNjcmVhdGUtZ3VpbGQtYmFuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZUd1aWxkQmFuIGV4dGVuZHMgV2l0aFJlYXNvbiB7XG4gIC8qKiBOdW1iZXIgb2Ygc2Vjb25kcyB0byBkZWxldGUgbWVzc2FnZXMgZm9yLCBiZXR3ZWVuIDAgYW5kIDYwNDgwMCAoNyBkYXlzKSAqL1xuICBkZWxldGVNZXNzYWdlU2Vjb25kcz86IG51bWJlclxufVxuZXhwb3J0IGludGVyZmFjZSBFZGl0Qm90TWVtYmVyT3B0aW9ucyBleHRlbmRzIFdpdGhSZWFzb24ge1xuICBuaWNrPzogc3RyaW5nIHwgbnVsbFxufVxuLyoqIGh0dHBzOi8vZGlzY29yZC5jb20vZGV2ZWxvcGVycy9kb2NzL3Jlc291cmNlcy9ndWlsZCNtb2RpZnktZ3VpbGQtbWVtYmVyICovXG5leHBvcnQgaW50ZXJmYWNlIE1vZGlmeUd1aWxkTWVtYmVyIHtcbiAgLyoqIFZhbHVlIHRvIHNldCB1c2VycyBuaWNrbmFtZSB0by4gUmVxdWlyZXMgdGhlIGBNQU5BR0VfTklDS05BTUVTYCBwZXJtaXNzaW9uICovXG4gIG5pY2s/OiBzdHJpbmcgfCBudWxsXG4gIC8qKiBBcnJheSBvZiByb2xlIGlkcyB0aGUgbWVtYmVyIGlzIGFzc2lnbmVkLiBSZXF1aXJlcyB0aGUgYE1BTkFHRV9ST0xFU2AgcGVybWlzc2lvbiAqL1xuICByb2xlcz86IEJpZ1N0cmluZ1tdIHwgbnVsbFxuICAvKiogV2hldGhlciB0aGUgdXNlciBpcyBtdXRlZCBpbiB2b2ljZSBjaGFubmVscy4gV2lsbCB0aHJvdyBhIDQwMCBpZiB0aGUgdXNlciBpcyBub3QgaW4gYSB2b2ljZSBjaGFubmVsLiBSZXF1aXJlcyB0aGUgYE1VVEVfTUVNQkVSU2AgcGVybWlzc2lvbiAqL1xuICBtdXRlPzogYm9vbGVhbiB8IG51bGxcbiAgLyoqIFdoZXRoZXIgdGhlIHVzZXIgaXMgZGVhZmVuZWQgaW4gdm9pY2UgY2hhbm5lbHMuIFdpbGwgdGhyb3cgYSA0MDAgaWYgdGhlIHVzZXIgaXMgbm90IGluIGEgdm9pY2UgY2hhbm5lbC4gUmVxdWlyZXMgdGhlIGBNT1ZFX01FTUJFUlNgIHBlcm1pc3Npb24gKi9cbiAgZGVhZj86IGJvb2xlYW4gfCBudWxsXG4gIC8qKiBJZCBvZiBjaGFubmVsIHRvIG1vdmUgdXNlciB0byAoaWYgdGhleSBhcmUgY29ubmVjdGVkIHRvIHZvaWNlKS4gUmVxdWlyZXMgdGhlIGBNT1ZFX01FTUJFUlNgIHBlcm1pc3Npb24gKi9cbiAgY2hhbm5lbElkPzogQmlnU3RyaW5nIHwgbnVsbFxuICAvKiogd2hlbiB0aGUgdXNlcidzIHRpbWVvdXQgd2lsbCBleHBpcmUgYW5kIHRoZSB1c2VyIHdpbGwgYmUgYWJsZSB0byBjb21tdW5pY2F0ZSBpbiB0aGUgZ3VpbGQgYWdhaW4gKHVwIHRvIDI4IGRheXMgaW4gdGhlIGZ1dHVyZSksIHNldCB0byBudWxsIHRvIHJlbW92ZSB0aW1lb3V0LiBSZXF1aXJlcyB0aGUgYE1PREVSQVRFX01FTUJFUlNgIHBlcm1pc3Npb24gKi9cbiAgY29tbXVuaWNhdGlvbkRpc2FibGVkVW50aWw/OiBudW1iZXIgfCBudWxsXG59XG4vKiogaHR0cHM6Ly9kaXNjb3JkLmNvbS9kZXZlbG9wZXJzL2RvY3MvcmVzb3VyY2VzL2d1aWxkI2JlZ2luLWd1aWxkLXBydW5lICovXG5leHBvcnQgaW50ZXJmYWNlIEJlZ2luR3VpbGRQcnVuZSB7XG4gIC8qKiBOdW1iZXIgb2YgZGF5cyB0byBwcnVuZSAoMSBvciBtb3JlKSwgZGVmYXVsdDogNyAqL1xuICBkYXlzPzogbnVtYmVyXG4gIC8qKiBXaGV0aGVyICdwcnVuZWQnIGlzIHJldHVybmVkLCBkaXNjb3VyYWdlZCBmb3IgbGFyZ2UgZ3VpbGRzLCBkZWZhdWx0OiB0cnVlICovXG4gIGNvbXB1dGVQcnVuZUNvdW50PzogYm9vbGVhblxuICAvKiogUm9sZShzKSBybyBpbmNsdWRlLCBkZWZhdWx0OiBub25lICovXG4gIGluY2x1ZGVSb2xlcz86IHN0cmluZ1tdXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzdFJlcXVlc3RSZXNwb25zZSB7XG4gIG9rOiBib29sZWFuXG4gIHN0YXR1czogbnVtYmVyXG4gIGJvZHk/OiBzdHJpbmdcbn1cbiJdLCJuYW1lcyI6WyJJbnRlcmFjdGlvblJlc3BvbnNlVHlwZXMiLCJjYWxjdWxhdGVCaXRzIiwiY2FtZWxpemUiLCJjYW1lbFRvU25ha2VDYXNlIiwiZGVsYXkiLCJmaW5kRmlsZXMiLCJnZXRCb3RJZEZyb21Ub2tlbiIsImlzR2V0TWVzc2FnZXNBZnRlciIsImlzR2V0TWVzc2FnZXNBcm91bmQiLCJpc0dldE1lc3NhZ2VzQmVmb3JlIiwiaXNHZXRNZXNzYWdlc0xpbWl0IiwibG9nZ2VyIiwicHJvY2Vzc1JlYWN0aW9uU3RyaW5nIiwidXJsVG9CYXNlNjQiLCJjcmVhdGVJbnZhbGlkUmVxdWVzdEJ1Y2tldCIsIlF1ZXVlIiwiY3JlYXRlUmVzdE1hbmFnZXIiLCJvcHRpb25zIiwidG9rZW4iLCJFcnJvciIsInJlc3QiLCJhcHBsaWNhdGlvbklkIiwiQmlnSW50IiwidmVyc2lvbiIsImJhc2VVcmwiLCJtYXhSZXRyeUNvdW50IiwiSW5maW5pdHkiLCJnbG9iYWxseVJhdGVMaW1pdGVkIiwicHJvY2Vzc2luZ1JhdGVMaW1pdGVkUGF0aHMiLCJkZWxldGVRdWV1ZURlbGF5IiwicXVldWVzIiwiTWFwIiwicmF0ZUxpbWl0ZWRQYXRocyIsImludmFsaWRCdWNrZXQiLCJyb3V0ZXMiLCJ3ZWJob29rcyIsImlkIiwid2ViaG9va0lkIiwibWVzc2FnZSIsIm1lc3NhZ2VJZCIsInVybCIsInRocmVhZElkIiwib3JpZ2luYWwiLCJ3ZWJob29rIiwid2FpdCIsInVuZGVmaW5lZCIsInRvU3RyaW5nIiwic2Vzc2lvbkluZm8iLCJnYXRld2F5Qm90IiwiY2hhbm5lbHMiLCJidWxrIiwiY2hhbm5lbElkIiwiZG0iLCJwaW4iLCJwaW5zIiwicmVhY3Rpb25zIiwiYm90IiwiZW1vamkiLCJlbmNvZGVVUklDb21wb25lbnQiLCJ1c2VyIiwidXNlcklkIiwiYWxsIiwiYWZ0ZXIiLCJsaW1pdCIsImNoYW5uZWwiLCJmb2xsb3ciLCJmb3J1bSIsImludml0ZXMiLCJtZXNzYWdlcyIsImJlZm9yZSIsImFyb3VuZCIsIm92ZXJ3cml0ZSIsIm92ZXJ3cml0ZUlkIiwiY3Jvc3Nwb3N0Iiwic3RhZ2VzIiwic3RhZ2UiLCJ0aHJlYWRzIiwiYWN0aXZlIiwiZ3VpbGRJZCIsIm1lbWJlcnMiLCJtZSIsImFyY2hpdmVkIiwicHVibGljIiwiRGF0ZSIsInRvSVNPU3RyaW5nIiwicHJpdmF0ZSIsImpvaW5lZCIsInR5cGluZyIsImd1aWxkcyIsImF1ZGl0bG9ncyIsImFjdGlvblR5cGUiLCJhdXRvbW9kIiwicnVsZSIsInJ1bGVJZCIsInJ1bGVzIiwiZW1vamlJZCIsImVtb2ppcyIsImV2ZW50cyIsIndpdGhVc2VyQ291bnQiLCJldmVudCIsImV2ZW50SWQiLCJ1c2VycyIsIndpdGhNZW1iZXIiLCJndWlsZCIsIndpdGhDb3VudHMiLCJpbnRlZ3JhdGlvbiIsImludGVncmF0aW9uSWQiLCJpbnRlZ3JhdGlvbnMiLCJpbnZpdGUiLCJpbnZpdGVDb2RlIiwid2l0aEV4cGlyYXRpb24iLCJzY2hlZHVsZWRFdmVudElkIiwibGVhdmUiLCJiYW4iLCJiYW5zIiwibWVtYmVyIiwic2VhcmNoIiwicXVlcnkiLCJwcnVuZSIsImRheXMiLCJBcnJheSIsImlzQXJyYXkiLCJpbmNsdWRlUm9sZXMiLCJqb2luIiwibWZhIiwicHJldmlldyIsInJvbGVzIiwib25lIiwicm9sZUlkIiwibWVtYmVySWQiLCJzdGlja2VycyIsInN0aWNrZXIiLCJzdGlja2VySWQiLCJ2b2ljZSIsInRlbXBsYXRlcyIsImNvZGUiLCJ2YW5pdHkiLCJyZWdpb25zIiwid2VsY29tZSIsIndpZGdldCIsIndpZGdldEpzb24iLCJpbnRlcmFjdGlvbnMiLCJjb21tYW5kcyIsImNvbW1hbmRJZCIsIndpdGhMb2NhbGl6YXRpb25zIiwicGVybWlzc2lvbnMiLCJwZXJtaXNzaW9uIiwiY29tbWFuZCIsInJlc3BvbnNlcyIsImNhbGxiYWNrIiwiaW50ZXJhY3Rpb25JZCIsInVzZXJCb3QiLCJvYXV0aDJBcHBsaWNhdGlvbiIsIm5pdHJvU3RpY2tlclBhY2tzIiwiY2hlY2tSYXRlTGltaXRzIiwicmF0ZWxpbWl0ZWQiLCJnZXQiLCJnbG9iYWwiLCJub3ciLCJyZXNldFRpbWVzdGFtcCIsImNoYW5nZVRvRGlzY29yZEZvcm1hdCIsIm9iaiIsIm1hcCIsIml0ZW0iLCJuZXdPYmoiLCJrZXkiLCJPYmplY3QiLCJrZXlzIiwiY3JlYXRlUmVxdWVzdCIsImhlYWRlcnMiLCJ1bmF1dGhvcml6ZWQiLCJhdXRob3JpemF0aW9uIiwidG9Mb3dlckNhc2UiLCJtZXRob2QiLCJib2R5IiwicmVhc29uIiwiZmlsZSIsImZpbGVzIiwiZm9ybSIsIkZvcm1EYXRhIiwiZW5kc1dpdGgiLCJhcHBlbmQiLCJibG9iIiwibmFtZSIsImRlc2NyaXB0aW9uIiwidGFncyIsImkiLCJsZW5ndGgiLCJKU09OIiwic3RyaW5naWZ5IiwiaW5jbHVkZXMiLCJwcm9jZXNzUmF0ZUxpbWl0ZWRQYXRocyIsInZhbHVlIiwiZW50cmllcyIsImRlbGV0ZSIsInNpemUiLCJzZXRUaW1lb3V0IiwicHJvY2Vzc0hlYWRlcnMiLCJyYXRlTGltaXRlZCIsInJlbWFpbmluZyIsInJldHJ5QWZ0ZXIiLCJyZXNldCIsIk51bWJlciIsImJ1Y2tldElkIiwiaGFuZGxlQ29tcGxldGVkUmVxdWVzdCIsImludGVydmFsIiwibWF4Iiwic2V0IiwiZ2xvYmFsUmVzZXQiLCJzZW5kUmVxdWVzdCIsInN0YXJ0c1dpdGgiLCJwYXlsb2FkIiwiZGVidWciLCJyZXNwb25zZSIsImZldGNoIiwic3RhdHVzIiwic3RhdHVzVGV4dCIsInNpbXBsaWZ5VXJsIiwicmV0cnlDb3VudCIsInJlamVjdCIsIm9rIiwiZXJyb3IiLCJyZXNldEFmdGVyIiwicmV0cnlSZXF1ZXN0IiwianNvbiIsImlzMjA0IiwicmVzb2x2ZSIsInJvdXRlIiwicmVwbGFjZSIsIm1hdGNoIiwicCIsInN1YnN0cmluZyIsImluZGV4T2YiLCJwcm9jZXNzUmVxdWVzdCIsInJlcXVlc3QiLCJwYXJ0cyIsInNwbGl0Iiwic2hpZnQiLCJxdWV1ZSIsIm1ha2VSZXF1ZXN0IiwiYnVja2V0UXVldWUiLCJQcm9taXNlIiwiZGF0YSIsInBhcnNlIiwicG9zdCIsInBhdGNoIiwicHV0IiwiYWRkUmVhY3Rpb24iLCJyZWFjdGlvbiIsImFkZFJlYWN0aW9ucyIsIm9yZGVyZWQiLCJhZGRSb2xlIiwiYWRkVGhyZWFkTWVtYmVyIiwiY3JlYXRlQXV0b21vZFJ1bGUiLCJjcmVhdGVDaGFubmVsIiwiY3JlYXRlRW1vamkiLCJjcmVhdGVHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQiLCJjcmVhdGVHdWlsZCIsImNyZWF0ZUd1aWxkQXBwbGljYXRpb25Db21tYW5kIiwiY3JlYXRlR3VpbGRGcm9tVGVtcGxhdGUiLCJ0ZW1wbGF0ZUNvZGUiLCJpY29uIiwiY3JlYXRlR3VpbGRTdGlja2VyIiwiY3JlYXRlR3VpbGRUZW1wbGF0ZSIsImNyZWF0ZUZvcnVtVGhyZWFkIiwiY3JlYXRlSW52aXRlIiwiY3JlYXRlUm9sZSIsImNyZWF0ZVNjaGVkdWxlZEV2ZW50IiwiY3JlYXRlU3RhZ2VJbnN0YW5jZSIsImNyZWF0ZVdlYmhvb2siLCJhdmF0YXIiLCJkZWxldGVBdXRvbW9kUnVsZSIsImRlbGV0ZUNoYW5uZWwiLCJkZWxldGVDaGFubmVsUGVybWlzc2lvbk92ZXJyaWRlIiwiZGVsZXRlRW1vamkiLCJkZWxldGVGb2xsb3d1cE1lc3NhZ2UiLCJkZWxldGVHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQiLCJkZWxldGVHdWlsZCIsImRlbGV0ZUd1aWxkQXBwbGljYXRpb25Db21tYW5kIiwiZGVsZXRlR3VpbGRTdGlja2VyIiwiZGVsZXRlR3VpbGRUZW1wbGF0ZSIsImRlbGV0ZUludGVncmF0aW9uIiwiZGVsZXRlSW52aXRlIiwiZGVsZXRlTWVzc2FnZSIsImRlbGV0ZU1lc3NhZ2VzIiwibWVzc2FnZUlkcyIsInNsaWNlIiwiZGVsZXRlT3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlIiwiZGVsZXRlT3duUmVhY3Rpb24iLCJkZWxldGVSZWFjdGlvbnNBbGwiLCJkZWxldGVSZWFjdGlvbnNFbW9qaSIsImRlbGV0ZVJvbGUiLCJkZWxldGVTY2hlZHVsZWRFdmVudCIsImRlbGV0ZVN0YWdlSW5zdGFuY2UiLCJkZWxldGVVc2VyUmVhY3Rpb24iLCJkZWxldGVXZWJob29rIiwiZGVsZXRlV2ViaG9va01lc3NhZ2UiLCJkZWxldGVXZWJob29rV2l0aFRva2VuIiwiZWRpdEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zIiwiYmVhcmVyVG9rZW4iLCJlZGl0QXV0b21vZFJ1bGUiLCJlZGl0Qm90UHJvZmlsZSIsImJvdEF2YXRhclVSTCIsInVzZXJuYW1lIiwidHJpbSIsImVkaXRDaGFubmVsIiwiZWRpdENoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGVzIiwiZWRpdENoYW5uZWxQb3NpdGlvbnMiLCJjaGFubmVsUG9zaXRpb25zIiwiZWRpdEVtb2ppIiwiZWRpdEZvbGxvd3VwTWVzc2FnZSIsImVkaXRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmQiLCJlZGl0R3VpbGQiLCJlZGl0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQiLCJlZGl0R3VpbGRNZmFMZXZlbCIsIm1mYUxldmVsIiwibGV2ZWwiLCJlZGl0R3VpbGRTdGlja2VyIiwiZWRpdEd1aWxkVGVtcGxhdGUiLCJlZGl0TWVzc2FnZSIsImVkaXRPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UiLCJlZGl0T3JpZ2luYWxXZWJob29rTWVzc2FnZSIsInR5cGUiLCJVcGRhdGVNZXNzYWdlIiwiZWRpdE93blZvaWNlU3RhdGUiLCJjaGFubmVsX2lkIiwic3VwcHJlc3MiLCJyZXF1ZXN0X3RvX3NwZWFrX3RpbWVzdGFtcCIsInJlcXVlc3RUb1NwZWFrVGltZXN0YW1wIiwiZWRpdFNjaGVkdWxlZEV2ZW50IiwiZWRpdFJvbGUiLCJlZGl0Um9sZVBvc2l0aW9ucyIsImVkaXRTdGFnZUluc3RhbmNlIiwidG9waWMiLCJlZGl0VXNlclZvaWNlU3RhdGUiLCJ1c2VyX2lkIiwiZWRpdFdlYmhvb2siLCJlZGl0V2ViaG9va01lc3NhZ2UiLCJlZGl0V2ViaG9va1dpdGhUb2tlbiIsImVkaXRXZWxjb21lU2NyZWVuIiwiZWRpdFdpZGdldFNldHRpbmdzIiwiZXhlY3V0ZVdlYmhvb2siLCJmb2xsb3dBbm5vdW5jZW1lbnQiLCJzb3VyY2VDaGFubmVsSWQiLCJ0YXJnZXRDaGFubmVsSWQiLCJ3ZWJob29rX2NoYW5uZWxfaWQiLCJnZXRBY3RpdmVUaHJlYWRzIiwiZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbiIsImdldEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zIiwiZ2V0QXBwbGljYXRpb25JbmZvIiwiZ2V0QXVkaXRMb2ciLCJnZXRBdXRvbW9kUnVsZSIsImdldEF1dG9tb2RSdWxlcyIsImdldEF2YWlsYWJsZVZvaWNlUmVnaW9ucyIsImdldEJhbiIsImdldEJhbnMiLCJnZXRDaGFubmVsIiwiZ2V0Q2hhbm5lbEludml0ZXMiLCJnZXRDaGFubmVscyIsImdldENoYW5uZWxXZWJob29rcyIsImdldERtQ2hhbm5lbCIsInJlY2lwaWVudF9pZCIsImdldEVtb2ppIiwiZ2V0RW1vamlzIiwiZ2V0Rm9sbG93dXBNZXNzYWdlIiwiZ2V0R2F0ZXdheUJvdCIsImdldEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZCIsImdldEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJnZXRHdWlsZCIsImNvdW50cyIsImdldEd1aWxkQXBwbGljYXRpb25Db21tYW5kIiwiZ2V0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRzIiwiZ2V0R3VpbGRQcmV2aWV3IiwiZ2V0R3VpbGRUZW1wbGF0ZSIsImdldEd1aWxkVGVtcGxhdGVzIiwiZ2V0R3VpbGRXZWJob29rcyIsImdldEludGVncmF0aW9ucyIsImdldEludml0ZSIsImdldEludml0ZXMiLCJnZXRNZXNzYWdlIiwiZ2V0TWVzc2FnZXMiLCJnZXROaXRyb1N0aWNrZXJQYWNrcyIsImdldE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSIsImdldFBpbm5lZE1lc3NhZ2VzIiwiZ2V0UHJpdmF0ZUFyY2hpdmVkVGhyZWFkcyIsImdldFByaXZhdGVKb2luZWRBcmNoaXZlZFRocmVhZHMiLCJnZXRQcnVuZUNvdW50IiwiZ2V0UHVibGljQXJjaGl2ZWRUaHJlYWRzIiwiZ2V0Um9sZXMiLCJnZXRTY2hlZHVsZWRFdmVudCIsImdldFNjaGVkdWxlZEV2ZW50cyIsImdldFNjaGVkdWxlZEV2ZW50VXNlcnMiLCJnZXRTZXNzaW9uSW5mbyIsImdldFN0YWdlSW5zdGFuY2UiLCJnZXRTdGlja2VyIiwiZ2V0R3VpbGRTdGlja2VyIiwiZ2V0R3VpbGRTdGlja2VycyIsImdldFRocmVhZE1lbWJlciIsImdldFRocmVhZE1lbWJlcnMiLCJnZXRSZWFjdGlvbnMiLCJnZXRVc2VyIiwiZ2V0VmFuaXR5VXJsIiwiZ2V0Vm9pY2VSZWdpb25zIiwiZ2V0V2ViaG9vayIsImdldFdlYmhvb2tNZXNzYWdlIiwiZ2V0V2ViaG9va1dpdGhUb2tlbiIsImdldFdlbGNvbWVTY3JlZW4iLCJnZXRXaWRnZXQiLCJnZXRXaWRnZXRTZXR0aW5ncyIsImpvaW5UaHJlYWQiLCJsZWF2ZUd1aWxkIiwibGVhdmVUaHJlYWQiLCJwdWJsaXNoTWVzc2FnZSIsInJlbW92ZVJvbGUiLCJyZW1vdmVUaHJlYWRNZW1iZXIiLCJzZW5kRm9sbG93dXBNZXNzYWdlIiwic2VuZEludGVyYWN0aW9uUmVzcG9uc2UiLCJzZW5kTWVzc2FnZSIsInN0YXJ0VGhyZWFkV2l0aE1lc3NhZ2UiLCJzdGFydFRocmVhZFdpdGhvdXRNZXNzYWdlIiwic3luY0d1aWxkVGVtcGxhdGUiLCJiYW5NZW1iZXIiLCJlZGl0Qm90TWVtYmVyIiwiZWRpdE1lbWJlciIsImdldE1lbWJlciIsImdldE1lbWJlcnMiLCJraWNrTWVtYmVyIiwicGluTWVzc2FnZSIsInBydW5lTWVtYmVycyIsInNlYXJjaE1lbWJlcnMiLCJ1bmJhbk1lbWJlciIsInVucGluTWVzc2FnZSIsInRyaWdnZXJUeXBpbmdJbmRpY2F0b3IiLCJ1cHNlcnRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRzIiwidXBzZXJ0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmRzIl0sIm1hcHBpbmdzIjoiQUFFQSxPQUFTQSw0QkFBQUEsQ0FBd0IsS0FBUSxtQkFBbUIsQUFDNUQsUUFDRUMsaUJBQUFBLENBQWEsQ0FDYkMsWUFBQUEsQ0FBUSxDQUNSQyxvQkFBQUEsQ0FBZ0IsQ0FDaEJDLFNBQUFBLENBQUssQ0FDTEMsYUFBQUEsQ0FBUyxDQUNUQyxxQkFBQUEsQ0FBaUIsQ0FDakJDLHNCQUFBQSxDQUFrQixDQUNsQkMsdUJBQUFBLENBQW1CLENBQ25CQyx1QkFBQUEsQ0FBbUIsQ0FDbkJDLHNCQUFBQSxDQUFrQixDQUNsQkMsVUFBQUEsQ0FBTSxDQUNOQyx5QkFBQUEsQ0FBcUIsQ0FDckJDLGVBQUFBLENBQVcsS0FDTixtQkFBbUIsQUFFMUIsUUFBU0MsOEJBQUFBLENBQTBCLEtBQVEsb0JBQW9CLEFBQy9ELFFBQVNDLFNBQUFBLENBQUssS0FBUSxZQUFZLEFBb0dsQyxRQUFPLFNB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
1
+ import{InteractionResponseTypes as e}from"@discordeno/types";import{calculateBits as t,camelize as s,camelToSnakeCase as a,delay as i,findFiles as n,getBotIdFromToken as o,isGetMessagesAfter as r,isGetMessagesAround as l,isGetMessagesBefore as d,isGetMessagesLimit as u,logger as c,processReactionString as m,urlToBase64 as g}from"@discordeno/utils";import{createInvalidRequestBucket as p}from"./invalidBucket.js";import{Queue as h}from"./queue.js";export function createRestManager(w){if(!w.token)throw Error("You must provide a valid token.");let y={token:w.token,applicationId:w.applicationId?BigInt(w.applicationId):o(w.token),version:w.version??10,baseUrl:w.baseUrl??"https://discord.com/api",maxRetryCount:1/0,globallyRateLimited:!1,processingRateLimitedPaths:!1,deleteQueueDelay:6e4,queues:new Map,rateLimitedPaths:new Map,invalidBucket:p({}),routes:{webhooks:{id:e=>`/webhooks/${e}`,message:(e,t,s,a)=>{let i=`/webhooks/${e}/${t}/messages/${s}?`;return a&&a.threadId&&(i+=`thread_id=${a.threadId}`),i},original:(e,t,s)=>{let a=`/webhooks/${e}/${t}/messages/@original?`;return s&&s.threadId&&(a+=`thread_id=${s.threadId}`),a},webhook:(e,t,s)=>{let a=`/webhooks/${e}/${t}?`;return s&&(s?.wait!==void 0&&(a+=`wait=${s.wait.toString()}`),s.threadId&&(a+=`thread_id=${s.threadId}`)),a}},sessionInfo:()=>y.routes.gatewayBot(),channels:{bulk:e=>`/channels/${e}/messages/bulk-delete`,dm:()=>"/users/@me/channels",pin:(e,t)=>`/channels/${e}/pins/${t}`,pins:e=>`/channels/${e}/pins`,reactions:{bot:(e,t,s)=>`/channels/${e}/messages/${t}/reactions/${encodeURIComponent(s)}/@me`,user:(e,t,s,a)=>`/channels/${e}/messages/${t}/reactions/${encodeURIComponent(s)}/${a}`,all:(e,t)=>`/channels/${e}/messages/${t}/reactions`,emoji:(e,t,s,a)=>{let i=`/channels/${e}/messages/${t}/reactions/${encodeURIComponent(s)}?`;return a&&(a.after&&(i+=`after=${a.after}`),a.limit&&(i+=`&limit=${a.limit}`)),i},message:(e,t,s,a)=>{let i=`/channels/${e}/messages/${t}/reactions/${encodeURIComponent(s)}?`;return a&&(a.after&&(i+=`after=${a.after}`),a.limit&&(i+=`&limit=${a.limit}`)),i}},webhooks:e=>`/channels/${e}/webhooks`,channel:e=>`/channels/${e}`,follow:e=>`/channels/${e}/followers`,forum:e=>`/channels/${e}/threads?has_message=true`,invites:e=>`/channels/${e}/invites`,message:(e,t)=>`/channels/${e}/messages/${t}`,messages:(e,t)=>{let s=`/channels/${e}/messages?`;return t&&(r(t)&&t.after&&(s+=`after=${t.after}`),d(t)&&t.before&&(s+=`&before=${t.before}`),l(t)&&t.around&&(s+=`&around=${t.around}`),u(t)&&t.limit&&(s+=`&limit=${t.limit}`)),s},overwrite:(e,t)=>`/channels/${e}/permissions/${t}`,crosspost:(e,t)=>`/channels/${e}/messages/${t}/crosspost`,stages:()=>"/stage-instances",stage:e=>`/stage-instances/${e}`,threads:{message:(e,t)=>`/channels/${e}/messages/${t}/threads`,all:e=>`/channels/${e}/threads`,active:e=>`/guilds/${e}/threads/active`,members:e=>`/channels/${e}/thread-members`,me:e=>`/channels/${e}/thread-members/@me`,user:(e,t)=>`/channels/${e}/thread-members/${t}`,archived:e=>`/channels/${e}/threads/archived`,public:(e,t)=>{let s=`/channels/${e}/threads/archived/public?`;return t&&(t.before&&(s+=`before=${new Date(t.before).toISOString()}`),t.limit&&(s+=`&limit=${t.limit}`)),s},private:(e,t)=>{let s=`/channels/${e}/threads/archived/private?`;return t&&(t.before&&(s+=`before=${new Date(t.before).toISOString()}`),t.limit&&(s+=`&limit=${t.limit}`)),s},joined:(e,t)=>{let s=`/channels/${e}/users/@me/threads/archived/private?`;return t&&(t.before&&(s+=`before=${new Date(t.before).toISOString()}`),t.limit&&(s+=`&limit=${t.limit}`)),s}},typing:e=>`/channels/${e}/typing`},guilds:{all:()=>"/guilds",auditlogs:(e,t)=>{let s=`/guilds/${e}/audit-logs?`;return t&&(t.actionType&&(s+=`action_type=${t.actionType}`),t.before&&(s+=`&before=${t.before}`),t.limit&&(s+=`&limit=${t.limit}`),t.userId&&(s+=`&user_id=${t.userId}`)),s},automod:{rule:(e,t)=>`/guilds/${e}/auto-moderation/rules/${t}`,rules:e=>`/guilds/${e}/auto-moderation/rules`},channels:e=>`/guilds/${e}/channels`,emoji:(e,t)=>`/guilds/${e}/emojis/${t}`,emojis:e=>`/guilds/${e}/emojis`,events:{events:(e,t)=>{let s=`/guilds/${e}/scheduled-events?`;return void 0!==t&&(s+=`with_user_count=${t.toString()}`),s},event:(e,t,s)=>{let a=`/guilds/${e}/scheduled-events/${t}`;return void 0!==s&&(a+=`with_user_count=${s.toString()}`),a},users:(e,t,s)=>{let a=`/guilds/${e}/scheduled-events/${t}/users?`;return s&&(void 0!==s.limit&&(a+=`limit=${s.limit}`),void 0!==s.withMember&&(a+=`&with_member=${s.withMember.toString()}`),void 0!==s.after&&(a+=`&after=${s.after}`),void 0!==s.before&&(a+=`&before=${s.before}`)),a}},guild(e,t){let s=`/guilds/${e}?`;return void 0!==t&&(s+=`with_counts=${t.toString()}`),s},integration:(e,t)=>`/guilds/${e}/integrations/${t}`,integrations:e=>`/guilds/${e}/integrations?include_applications=true`,invite(e,t){let s=`/invites/${e}?`;return t&&(void 0!==t.withCounts&&(s+=`with_counts=${t.withCounts.toString()}`),void 0!==t.withExpiration&&(s+=`&with_expiration=${t.withExpiration.toString()}`),t.scheduledEventId&&(s+=`&guild_scheduled_event_id=${t.scheduledEventId}`)),s},invites:e=>`/guilds/${e}/invites`,leave:e=>`/users/@me/guilds/${e}`,members:{ban:(e,t)=>`/guilds/${e}/bans/${t}`,bans:(e,t)=>{let s=`/guilds/${e}/bans?`;return t&&(t.limit&&(s+=`limit=${t.limit}`),t.after&&(s+=`&after=${t.after}`),t.before&&(s+=`&before=${t.before}`)),s},bot:e=>`/guilds/${e}/members/@me`,member:(e,t)=>`/guilds/${e}/members/${t}`,members:(e,t)=>{let s=`/guilds/${e}/members?`;return void 0!==t&&(t.limit&&(s+=`limit=${t.limit}`),t.after&&(s+=`&after=${t.after}`)),s},search:(e,t,s)=>{let a=`/guilds/${e}/members/search?query=${encodeURIComponent(t)}`;return s&&void 0!==s.limit&&(a+=`&limit=${s.limit}`),a},prune:(e,t)=>{let s=`/guilds/${e}/prune?`;return t&&(t.days&&(s+=`days=${t.days}`),Array.isArray(t.includeRoles)?s+=`&include_roles=${t.includeRoles.join(",")}`:t.includeRoles&&(s+=`&include_roles=${t.includeRoles}`)),s}},mfa:e=>`/guilds/${e}/mfa`,preview:e=>`/guilds/${e}/preview`,prune:(e,t)=>{let s=`/guilds/${e}/prune?`;return t&&(t.days&&(s+=`days=${t.days}`),Array.isArray(t.includeRoles)?s+=`&include_roles=${t.includeRoles.join(",")}`:t.includeRoles&&(s+=`&include_roles=${t.includeRoles}`)),s},roles:{one:(e,t)=>`/guilds/${e}/roles/${t}`,all:e=>`/guilds/${e}/roles`,member:(e,t,s)=>`/guilds/${e}/members/${t}/roles/${s}`},stickers:e=>`/guilds/${e}/stickers`,sticker:(e,t)=>`/guilds/${e}/stickers/${t}`,voice:(e,t)=>`/guilds/${e}/voice-states/${t??"@me"}`,templates:{code:e=>`/guilds/templates/${e}`,guild:(e,t)=>`/guilds/${e}/templates/${t}`,all:e=>`/guilds/${e}/templates`},vanity:e=>`/guilds/${e}/vanity-url`,regions:e=>`/guilds/${e}/regions`,webhooks:e=>`/guilds/${e}/webhooks`,welcome:e=>`/guilds/${e}/welcome-screen`,widget:e=>`/guilds/${e}/widget`,widgetJson:e=>`/guilds/${e}/widget.json`},sticker:e=>`/stickers/${e}`,regions:()=>"/voice/regions",interactions:{commands:{commands:e=>`/applications/${e}/commands`,guilds:{all:(e,t)=>`/applications/${e}/guilds/${t}/commands`,one(e,t,s,a){let i=`/applications/${e}/guilds/${t}/commands/${s}?`;return void 0!==a&&(i+=`with_localizations=${a.toString()}`),i}},permissions:(e,t)=>`/applications/${e}/guilds/${t}/commands/permissions`,permission:(e,t,s)=>`/applications/${e}/guilds/${t}/commands/${s}/permissions`,command:(e,t,s)=>{let a=`/applications/${e}/commands/${t}?`;return void 0!==s&&(a+=`withLocalizations=${s.toString()}`),a}},responses:{callback:(e,t)=>`/interactions/${e}/${t}/callback`,original:(e,t)=>`/webhooks/${e}/${t}/messages/@original`,message:(e,t,s)=>`/webhooks/${e}/${t}/messages/${s}`}},user:e=>`/users/${e}`,userBot:()=>"/users/@me",oauth2Application:()=>"oauth2/applications/@me",gatewayBot:()=>"/gateway/bot",nitroStickerPacks:()=>"/sticker-packs"},checkRateLimits(e){let t=y.rateLimitedPaths.get(e),s=y.rateLimitedPaths.get("global"),a=Date.now();return t&&a<t.resetTimestamp?t.resetTimestamp-a:!!s&&a<s.resetTimestamp&&s.resetTimestamp-a},changeToDiscordFormat(e){if(null===e)return null;if("object"==typeof e){if(Array.isArray(e))return e.map(e=>y.changeToDiscordFormat(e));let s={};for(let i of Object.keys(e)){if("permissions"===i){s.permissions=t(e[i]);continue}s[a(i)]=y.changeToDiscordFormat(e[i])}return s}return"bigint"==typeof e?e.toString():e},createRequest(e){let t={"user-agent":"DiscordBot (https://github.com/discordeno/discordeno, v19.0.0-alpha.1)"};if(e.unauthorized||(t.authorization=`Bot ${y.token}`),e.headers)for(let s in e.headers)t[s.toLowerCase()]=e.headers[s];if("GET"===e.method&&(e.body=void 0),e.body?.reason&&(t["X-Audit-Log-Reason"]=encodeURIComponent(e.body.reason),e.body.reason=void 0),e.body){let{file:a}=e.body;if(a){let i=n(a),o=new FormData;if(e.url?.endsWith("/stickers")&&"POST"===e.method)o.append("file",i[0].blob,i[0].name),o.append("name",e.body.name),o.append("description",e.body.description),o.append("tags",e.body.tags);else{for(let r=0;r<i.length;r++)o.append(`file${r}`,i[r].blob,i[r].name);a&&(e.body.file=void 0),o.append("payload_json",JSON.stringify(y.changeToDiscordFormat(e.body)))}e.body.file=o}else e.body&&!["GET","DELETE"].includes(e.method)&&(t["Content-Type"]="application/json")}return{headers:t,body:e.body?.file??JSON.stringify(y.changeToDiscordFormat(e.body)),method:e.method}},processRateLimitedPaths(){let e=Date.now();for(let[t,s]of y.rateLimitedPaths.entries())s.resetTimestamp>e||(y.rateLimitedPaths.delete(t),"global"!==t||(y.globallyRateLimited=!1));0===y.rateLimitedPaths.size?y.processingRateLimitedPaths=!1:(y.processingRateLimitedPaths=!0,setTimeout(()=>{y.processRateLimitedPaths()},1e3))},processHeaders(e,t){let s=!1,a=t.get("x-ratelimit-remaining"),i=t.get("x-ratelimit-reset-after"),n=Date.now()+1e3*Number(i),o=t.get("x-ratelimit-global"),r=t.get("x-ratelimit-bucket")??void 0,l=t.get("x-ratelimit-limit");if(y.queues.get(e)?.handleCompletedRequest({remaining:a?Number(a):void 0,interval:i?1e3*Number(i):void 0,max:l?Number(l):void 0}),"0"===a&&(s=!0,y.rateLimitedPaths.set(e,{url:e,resetTimestamp:n,bucketId:r}),r&&y.rateLimitedPaths.set(r,{url:e,resetTimestamp:n,bucketId:r})),o){let d=t.get("retry-after"),u=Date.now()+1e3*Number(d);y.globallyRateLimited=!0,s=!0,setTimeout(()=>{y.globallyRateLimited=!1},u),y.rateLimitedPaths.set("global",{url:"global",resetTimestamp:u,bucketId:r}),r&&y.rateLimitedPaths.set(r,{url:"global",resetTimestamp:u,bucketId:r})}return s&&!y.processingRateLimitedPaths&&y.processRateLimitedPaths(),s?r:void 0},async sendRequest(e){let t=e.url.startsWith("https://")?e.url:`${y.baseUrl}/v${y.version}${e.url}`,s=y.createRequest({method:e.method,url:e.url,body:e.body,...e.options});c.debug(`sending request to ${t}`,"with payload:",{...s,headers:{...s.headers,authorization:"Bot tokenhere"}});let a=await fetch(t,s);c.debug(`request fetched from ${t} with status ${a.status} & ${a.statusText}`);let n=y.processHeaders(y.simplifyUrl(e.url,e.method),a.headers);if(n&&(e.bucketId=n),a.status<200||a.status>=400){if(c.debug(`Request to ${t} failed.`),429===a.status){if(c.debug(`Request to ${t} was ratelimited.`),e.retryCount++>=y.maxRetryCount)return c.debug(`Request to ${t} exceeded the maximum allowed retries.`,"with payload:",s),e.reject({ok:!1,status:a.status,error:"The options was rate limited and it maxed out the retries limit."});y.invalidBucket.handleCompletedRequest(a.status,"shared"===a.headers.get("X-RateLimit-Scope"));let o=a.headers.get("x-ratelimit-reset-after");return c.warn(`Request to ${t} was rate limited. Reset after ${o} seconds.`),o&&await i(1e3*Number(o)),await a.json(),await e.retryRequest?.(e)}return e.reject({ok:!1,status:a.status,body:JSON.stringify(await a.json())})}let r=204===a.status,l=r?void 0:await a.json();return e.resolve({ok:!0,status:a.status,body:JSON.stringify(l)})},simplifyUrl(e,t){let s=e.replace(/\/([a-z-]+)\/(?:[0-9]{17,19})/g,function(e,t){return["channels","guilds"].includes(t)?e:`/${t}/x`}).replace(/\/reactions\/[^/]+/g,"/reactions/x");return s.includes("/reactions")&&(s=s.substring(0,s.indexOf("/reactions")+10)),"DELETE"===t&&s.endsWith("/messages/x")&&(s=t+s),s},processRequest(e){let t=e.url.substring(e.url.indexOf("api/")),s=t.split("/");s.shift(),s[0]?.startsWith("v")&&s.shift(),e.url=`${y.baseUrl}/v${y.version}/${s.join("/")}`;let a=y.simplifyUrl(e.url,e.method),i=y.queues.get(a);if(void 0!==i)i.makeRequest(e);else{let n=new h(y,{url:a,deleteQueueDelay:y.deleteQueueDelay});n.makeRequest(e),y.queues.set(a,n)}},makeRequest:async(e,t,s,a)=>await new Promise((i,n)=>{let o={url:t,method:e,body:s,retryCount:0,retryRequest:async function(e){y.processRequest(o)},resolve:e=>i(204!==e.status?JSON.parse(e.body??"{}"):void 0),reject:n,options:a};y.processRequest(o)}),get:async e=>s(await y.makeRequest("GET",e)),post:async(e,t)=>s(await y.makeRequest("POST",e,t)),delete:async(e,t)=>s(await y.makeRequest("DELETE",e,t)),patch:async(e,t)=>s(await y.makeRequest("PATCH",e,t)),put:async(e,t,a)=>s(await y.makeRequest("PUT",e,t,a)),addReaction:async(e,t,s)=>await y.put(y.routes.channels.reactions.bot(e,t,s=m(s))),async addReactions(e,t,s,a=!1){if(!a){await Promise.all(s.map(async s=>await y.addReaction(e,t,s)));return}for(let i of s)await y.addReaction(e,t,i)},addRole:async(e,t,s,a)=>await y.put(y.routes.guilds.roles.member(e,t,s),{reason:a}),addThreadMember:async(e,t)=>await y.put(y.routes.channels.threads.user(e,t)),createAutomodRule:async(e,t)=>await y.post(y.routes.guilds.automod.rules(e),t),createChannel:async(e,t)=>await y.post(y.routes.guilds.channels(e),t),createEmoji:async(e,t)=>await y.post(y.routes.guilds.emojis(e),t),createGlobalApplicationCommand:async e=>await y.post(y.routes.interactions.commands.commands(y.applicationId),e),createGuild:async e=>await y.post(y.routes.guilds.all(),e),createGuildApplicationCommand:async(e,t)=>await y.post(y.routes.interactions.commands.guilds.all(y.applicationId,t),e),createGuildFromTemplate:async(e,t)=>(t.icon&&(t.icon=await g(t.icon)),await y.post(y.routes.guilds.templates.code(e),t)),createGuildSticker:async(e,t)=>await y.post(y.routes.guilds.stickers(e),t),createGuildTemplate:async(e,t)=>await y.post(y.routes.guilds.templates.all(e),t),createForumThread:async(e,t)=>await y.post(y.routes.channels.forum(e),t),createInvite:async(e,t={})=>await y.post(y.routes.channels.invites(e),t),createRole:async(e,t,s)=>await y.post(y.routes.guilds.roles.all(e),{...t,reason:s}),createScheduledEvent:async(e,t)=>await y.post(y.routes.guilds.events.events(e),t),createStageInstance:async e=>await y.post(y.routes.channels.stages(),e),createWebhook:async(e,t)=>await y.post(y.routes.channels.webhooks(e),{name:t.name,avatar:t.avatar?await g(t.avatar):void 0,reason:t.reason}),deleteAutomodRule:async(e,t,s)=>await y.delete(y.routes.guilds.automod.rule(e,t),{reason:s}),deleteChannel:async(e,t)=>await y.delete(y.routes.channels.channel(e),{reason:t}),deleteChannelPermissionOverride:async(e,t,s)=>await y.delete(y.routes.channels.overwrite(e,t),s?{reason:s}:void 0),deleteEmoji:async(e,t,s)=>await y.delete(y.routes.guilds.emoji(e,t),{reason:s}),deleteFollowupMessage:async(e,t)=>await y.delete(y.routes.interactions.responses.message(y.applicationId,e,t)),deleteGlobalApplicationCommand:async e=>await y.delete(y.routes.interactions.commands.command(y.applicationId,e)),deleteGuild:async e=>await y.delete(y.routes.guilds.guild(e)),deleteGuildApplicationCommand:async(e,t)=>await y.delete(y.routes.interactions.commands.guilds.one(y.applicationId,t,e)),deleteGuildSticker:async(e,t,s)=>await y.delete(y.routes.guilds.sticker(e,t),s?{reason:s}:void 0),deleteGuildTemplate:async(e,t)=>await y.delete(y.routes.guilds.templates.guild(e,t)),deleteIntegration:async(e,t)=>await y.delete(y.routes.guilds.integration(e,t)),deleteInvite:async(e,t)=>await y.delete(y.routes.guilds.invite(e),t?{reason:t}:void 0),deleteMessage:async(e,t,s)=>await y.delete(y.routes.channels.message(e,t),{reason:s}),deleteMessages:async(e,t,s)=>await y.post(y.routes.channels.bulk(e),{messages:t.slice(0,100).map(e=>e.toString()),reason:s}),deleteOriginalInteractionResponse:async e=>await y.delete(y.routes.interactions.responses.original(y.applicationId,e)),deleteOwnReaction:async(e,t,s)=>await y.delete(y.routes.channels.reactions.bot(e,t,s=m(s))),deleteReactionsAll:async(e,t)=>await y.delete(y.routes.channels.reactions.all(e,t)),deleteReactionsEmoji:async(e,t,s)=>await y.delete(y.routes.channels.reactions.emoji(e,t,s=m(s))),deleteRole:async(e,t)=>await y.delete(y.routes.guilds.roles.one(e,t)),deleteScheduledEvent:async(e,t)=>await y.delete(y.routes.guilds.events.event(e,t)),deleteStageInstance:async(e,t)=>await y.delete(y.routes.channels.stage(e),t?{reason:t}:void 0),deleteUserReaction:async(e,t,s,a)=>await y.delete(y.routes.channels.reactions.user(e,t,a=m(a),s)),deleteWebhook:async(e,t)=>await y.delete(y.routes.webhooks.id(e),{reason:t}),deleteWebhookMessage:async(e,t,s,a)=>await y.delete(y.routes.webhooks.message(e,t,s,a)),deleteWebhookWithToken:async(e,t)=>await y.delete(y.routes.webhooks.webhook(e,t)),editApplicationCommandPermissions:async(e,t,s,a)=>await y.put(y.routes.interactions.commands.permission(y.applicationId,e,t),{permissions:a},{headers:{authorization:`Bearer ${s}`}}),editAutomodRule:async(e,t,s)=>await y.patch(y.routes.guilds.automod.rule(e,t),s),async editBotProfile(e){let t=e?.botAvatarURL?await g(e?.botAvatarURL):e?.botAvatarURL;return await y.patch(y.routes.userBot(),{username:e.username?.trim(),avatar:t})},editChannel:async(e,t)=>await y.patch(y.routes.channels.channel(e),t),editChannelPermissionOverrides:async(e,t)=>await y.put(y.routes.channels.overwrite(e,t.id),t),editChannelPositions:async(e,t)=>await y.patch(y.routes.guilds.channels(e),t),editEmoji:async(e,t,s)=>await y.patch(y.routes.guilds.emoji(e,t),s),editFollowupMessage:async(e,t,s)=>await y.patch(y.routes.interactions.responses.message(y.applicationId,e,t),s),editGlobalApplicationCommand:async(e,t)=>await y.patch(y.routes.interactions.commands.command(y.applicationId,e),t),editGuild:async(e,t)=>await y.patch(y.routes.guilds.guild(e),t),editGuildApplicationCommand:async(e,t,s)=>await y.patch(y.routes.interactions.commands.guilds.one(y.applicationId,t,e),s),editGuildMfaLevel:async(e,t,s)=>await y.post(y.routes.guilds.mfa(e),{level:t,reason:s}),editGuildSticker:async(e,t,s)=>await y.patch(y.routes.guilds.sticker(e,t),s),editGuildTemplate:async(e,t,s)=>await y.patch(y.routes.guilds.templates.guild(e,t),s),editMessage:async(e,t,s)=>await y.patch(y.routes.channels.message(e,t),s),editOriginalInteractionResponse:async(e,t)=>await y.patch(y.routes.interactions.responses.original(y.applicationId,e),t),editOriginalWebhookMessage:async(t,s,a)=>await y.patch(y.routes.webhooks.original(t,s,a),{type:e.UpdateMessage,data:a}),editOwnVoiceState:async(e,t)=>await y.patch(y.routes.guilds.voice(e),{channel_id:t.channelId,suppress:t.suppress,request_to_speak_timestamp:t.requestToSpeakTimestamp?new Date(t.requestToSpeakTimestamp).toISOString():t.requestToSpeakTimestamp}),editScheduledEvent:async(e,t,s)=>await y.patch(y.routes.guilds.events.event(e,t),s),editRole:async(e,t,s)=>await y.patch(y.routes.guilds.roles.one(e,t),s),editRolePositions:async(e,t)=>await y.patch(y.routes.guilds.roles.all(e),t),editStageInstance:async(e,t)=>await y.patch(y.routes.channels.stage(e),{topic:t.topic}),editUserVoiceState:async(e,t)=>await y.patch(y.routes.guilds.voice(e,t.userId),{channel_id:t.channelId,suppress:t.suppress,user_id:t.userId}),editWebhook:async(e,t)=>await y.patch(y.routes.webhooks.id(e),t),editWebhookMessage:async(e,t,s,a)=>await y.patch(y.routes.webhooks.message(e,t,s,a),a),editWebhookWithToken:async(e,t,s)=>await y.patch(y.routes.webhooks.webhook(e,t),s),editWelcomeScreen:async(e,t)=>await y.patch(y.routes.guilds.welcome(e),t),editWidgetSettings:async(e,t)=>await y.patch(y.routes.guilds.widget(e),t),executeWebhook:async(e,t,s)=>await y.post(y.routes.webhooks.webhook(e,t,s),s),followAnnouncement:async(e,t)=>await y.post(y.routes.channels.follow(e),{webhook_channel_id:t}),getActiveThreads:async e=>await y.get(y.routes.channels.threads.active(e)),getApplicationCommandPermission:async(e,t)=>await y.get(y.routes.interactions.commands.permission(y.applicationId,e,t)),getApplicationCommandPermissions:async e=>await y.get(y.routes.interactions.commands.permissions(y.applicationId,e)),getApplicationInfo:async()=>await y.get(y.routes.oauth2Application()),getAuditLog:async(e,t)=>await y.get(y.routes.guilds.auditlogs(e,t)),getAutomodRule:async(e,t)=>await y.get(y.routes.guilds.automod.rule(e,t)),getAutomodRules:async e=>await y.get(y.routes.guilds.automod.rules(e)),getAvailableVoiceRegions:async()=>await y.get(y.routes.regions()),getBan:async(e,t)=>await y.get(y.routes.guilds.members.ban(e,t)),getBans:async(e,t)=>await y.get(y.routes.guilds.members.bans(e,t)),getChannel:async e=>await y.get(y.routes.channels.channel(e)),getChannelInvites:async e=>await y.get(y.routes.channels.invites(e)),getChannels:async e=>await y.get(y.routes.guilds.channels(e)),getChannelWebhooks:async e=>await y.get(y.routes.channels.webhooks(e)),getDmChannel:async e=>await y.post(y.routes.channels.dm(),{recipient_id:e.toString()}),getEmoji:async(e,t)=>await y.get(y.routes.guilds.emoji(e,t)),getEmojis:async e=>await y.get(y.routes.guilds.emojis(e)),getFollowupMessage:async(e,t)=>await y.get(y.routes.interactions.responses.message(y.applicationId,e,t)),getGatewayBot:async()=>await y.get(y.routes.gatewayBot()),getGlobalApplicationCommand:async e=>await y.get(y.routes.interactions.commands.command(y.applicationId,e)),getGlobalApplicationCommands:async()=>await y.get(y.routes.interactions.commands.commands(y.applicationId)),getGuild:async(e,t={counts:!0})=>await y.get(y.routes.guilds.guild(e,t.counts)),getGuildApplicationCommand:async(e,t)=>await y.get(y.routes.interactions.commands.guilds.one(y.applicationId,t,e)),getGuildApplicationCommands:async e=>await y.get(y.routes.interactions.commands.guilds.all(y.applicationId,e)),getGuildPreview:async e=>await y.get(y.routes.guilds.preview(e)),getGuildTemplate:async e=>await y.get(y.routes.guilds.templates.code(e)),getGuildTemplates:async e=>await y.get(y.routes.guilds.templates.all(e)),getGuildWebhooks:async e=>await y.get(y.routes.guilds.webhooks(e)),getIntegrations:async e=>await y.get(y.routes.guilds.integrations(e)),getInvite:async(e,t)=>await y.get(y.routes.guilds.invite(e,t)),getInvites:async e=>await y.get(y.routes.guilds.invites(e)),getMessage:async(e,t)=>await y.get(y.routes.channels.message(e,t)),getMessages:async(e,t)=>await y.get(y.routes.channels.messages(e,t)),getNitroStickerPacks:async()=>await y.get(y.routes.nitroStickerPacks()),getOriginalInteractionResponse:async e=>await y.get(y.routes.interactions.responses.original(y.applicationId,e)),getPinnedMessages:async e=>await y.get(y.routes.channels.pins(e)),getPrivateArchivedThreads:async(e,t)=>await y.get(y.routes.channels.threads.private(e,t)),getPrivateJoinedArchivedThreads:async(e,t)=>await y.get(y.routes.channels.threads.joined(e,t)),getPruneCount:async(e,t)=>await y.get(y.routes.guilds.prune(e,t)),getPublicArchivedThreads:async(e,t)=>await y.get(y.routes.channels.threads.public(e,t)),getRoles:async e=>await y.get(y.routes.guilds.roles.all(e)),getScheduledEvent:async(e,t,s)=>await y.get(y.routes.guilds.events.event(e,t,s?.withUserCount)),getScheduledEvents:async(e,t)=>await y.get(y.routes.guilds.events.events(e,t?.withUserCount)),getScheduledEventUsers:async(e,t,s)=>await y.get(y.routes.guilds.events.users(e,t,s)),getSessionInfo:async()=>await y.getGatewayBot(),getStageInstance:async e=>await y.get(y.routes.channels.stage(e)),getSticker:async e=>await y.get(y.routes.sticker(e)),getGuildSticker:async(e,t)=>await y.get(y.routes.guilds.sticker(e,t)),getGuildStickers:async e=>await y.get(y.routes.guilds.stickers(e)),getThreadMember:async(e,t)=>await y.get(y.routes.channels.threads.user(e,t)),getThreadMembers:async e=>await y.get(y.routes.channels.threads.members(e)),getReactions:async(e,t,s,a)=>await y.get(y.routes.channels.reactions.message(e,t,s,a)),getUser:async e=>await y.get(y.routes.user(e)),getVanityUrl:async e=>await y.get(y.routes.guilds.vanity(e)),getVoiceRegions:async e=>await y.get(y.routes.guilds.regions(e)),getWebhook:async e=>await y.get(y.routes.webhooks.id(e)),getWebhookMessage:async(e,t,s,a)=>await y.get(y.routes.webhooks.message(e,t,s,a)),getWebhookWithToken:async(e,t)=>await y.get(y.routes.webhooks.webhook(e,t)),getWelcomeScreen:async e=>await y.get(y.routes.guilds.welcome(e)),getWidget:async e=>await y.get(y.routes.guilds.widgetJson(e)),getWidgetSettings:async e=>await y.get(y.routes.guilds.widget(e)),joinThread:async e=>await y.put(y.routes.channels.threads.me(e)),leaveGuild:async e=>await y.delete(y.routes.guilds.leave(e)),leaveThread:async e=>await y.delete(y.routes.channels.threads.me(e)),publishMessage:async(e,t)=>await y.post(y.routes.channels.crosspost(e,t)),removeRole:async(e,t,s,a)=>await y.delete(y.routes.guilds.roles.member(e,t,s),{reason:a}),removeThreadMember:async(e,t)=>await y.delete(y.routes.channels.threads.user(e,t)),sendFollowupMessage:async(e,t)=>await new Promise((s,a)=>{y.sendRequest({url:y.routes.webhooks.webhook(y.applicationId,e),method:"POST",body:t,retryCount:0,retryRequest:async function(e){await y.sendRequest(e)},resolve:e=>s(204!==e.status?JSON.parse(e.body??"{}"):void 0),reject:a})}),sendInteractionResponse:async(e,t,s)=>await new Promise((a,i)=>{y.sendRequest({url:y.routes.interactions.responses.callback(e,t),method:"POST",body:s,retryCount:0,retryRequest:async function(e){await y.sendRequest(e)},resolve:e=>a(204!==e.status?JSON.parse(e.body??"{}"):void 0),reject:i})}),sendMessage:async(e,t)=>await y.post(y.routes.channels.messages(e),t),startThreadWithMessage:async(e,t,s)=>await y.post(y.routes.channels.threads.message(e,t),s),startThreadWithoutMessage:async(e,t)=>await y.post(y.routes.channels.threads.all(e),t),syncGuildTemplate:async e=>await y.put(y.routes.guilds.templates.all(e)),banMember:async(e,t,s)=>await y.put(y.routes.guilds.members.ban(e,t),s),editBotMember:async(e,t)=>await y.patch(y.routes.guilds.members.bot(e),t),editMember:async(e,t,s)=>await y.patch(y.routes.guilds.members.member(e,t),s),getMember:async(e,t)=>await y.get(y.routes.guilds.members.member(e,t)),getMembers:async(e,t)=>await y.get(y.routes.guilds.members.members(e,t)),kickMember:async(e,t,s)=>await y.delete(y.routes.guilds.members.member(e,t),{reason:s}),pinMessage:async(e,t,s)=>await y.put(y.routes.channels.pin(e,t),s?{reason:s}:void 0),pruneMembers:async(e,t)=>await y.post(y.routes.guilds.members.prune(e),t),searchMembers:async(e,t,s)=>await y.get(y.routes.guilds.members.search(e,t,s)),unbanMember:async(e,t)=>await y.delete(y.routes.guilds.members.ban(e,t)),unpinMessage:async(e,t,s)=>await y.delete(y.routes.channels.pin(e,t),s?{reason:s}:void 0),triggerTypingIndicator:async e=>await y.post(y.routes.channels.typing(e)),upsertGlobalApplicationCommands:async e=>await y.put(y.routes.interactions.commands.commands(y.applicationId),e),upsertGuildApplicationCommands:async(e,t)=>await y.put(y.routes.interactions.commands.guilds.all(y.applicationId,e),t)};return y}
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9tYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9ucyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY29uc3QtYXNzaWduICovXG5pbXBvcnQgeyBJbnRlcmFjdGlvblJlc3BvbnNlVHlwZXMgfSBmcm9tICdAZGlzY29yZGVuby90eXBlcydcbmltcG9ydCB7XG4gIGNhbGN1bGF0ZUJpdHMsXG4gIGNhbWVsaXplLFxuICBjYW1lbFRvU25ha2VDYXNlLFxuICBkZWxheSxcbiAgZmluZEZpbGVzLFxuICBnZXRCb3RJZEZyb21Ub2tlbixcbiAgaXNHZXRNZXNzYWdlc0FmdGVyLFxuICBpc0dldE1lc3NhZ2VzQXJvdW5kLFxuICBpc0dldE1lc3NhZ2VzQmVmb3JlLFxuICBpc0dldE1lc3NhZ2VzTGltaXQsXG4gIGxvZ2dlcixcbiAgcHJvY2Vzc1JlYWN0aW9uU3RyaW5nLFxuICB1cmxUb0Jhc2U2NCxcbn0gZnJvbSAnQGRpc2NvcmRlbm8vdXRpbHMnXG5cbmltcG9ydCB7IGNyZWF0ZUludmFsaWRSZXF1ZXN0QnVja2V0IH0gZnJvbSAnLi9pbnZhbGlkQnVja2V0LmpzJ1xuaW1wb3J0IHsgUXVldWUgfSBmcm9tICcuL3F1ZXVlLmpzJ1xuXG5pbXBvcnQgdHlwZSB7XG4gIEJpZ1N0cmluZyxcbiAgQ2FtZWxpemUsXG4gIERpc2NvcmRBcHBsaWNhdGlvbixcbiAgRGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZCxcbiAgRGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zLFxuICBEaXNjb3JkQXVkaXRMb2csXG4gIERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGUsXG4gIERpc2NvcmRCYW4sXG4gIERpc2NvcmRDaGFubmVsLFxuICBEaXNjb3JkRW1vamksXG4gIERpc2NvcmRGb2xsb3dBbm5vdW5jZW1lbnRDaGFubmVsLFxuICBEaXNjb3JkRm9sbG93ZWRDaGFubmVsLFxuICBEaXNjb3JkR2V0R2F0ZXdheUJvdCxcbiAgRGlzY29yZEd1aWxkLFxuICBEaXNjb3JkR3VpbGRQcmV2aWV3LFxuICBEaXNjb3JkR3VpbGRXaWRnZXQsXG4gIERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzLFxuICBEaXNjb3JkSW50ZWdyYXRpb24sXG4gIERpc2NvcmRJbnZpdGUsXG4gIERpc2NvcmRJbnZpdGVNZXRhZGF0YSxcbiAgRGlzY29yZExpc3RBY3RpdmVUaHJlYWRzLFxuICBEaXNjb3JkTGlzdEFyY2hpdmVkVGhyZWFkcyxcbiAgRGlzY29yZE1lbWJlcixcbiAgRGlzY29yZE1lbWJlcldpdGhVc2VyLFxuICBEaXNjb3JkTWVzc2FnZSxcbiAgRGlzY29yZFBydW5lZENvdW50LFxuICBEaXNjb3JkUm9sZSxcbiAgRGlzY29yZFNjaGVkdWxlZEV2ZW50LFxuICBEaXNjb3JkU3RhZ2VJbnN0YW5jZSxcbiAgRGlzY29yZFN0aWNrZXIsXG4gIERpc2NvcmRTdGlja2VyUGFjayxcbiAgRGlzY29yZFRlbXBsYXRlLFxuICBEaXNjb3JkVGhyZWFkTWVtYmVyLFxuICBEaXNjb3JkVXNlcixcbiAgRGlzY29yZFZhbml0eVVybCxcbiAgRGlzY29yZFZvaWNlUmVnaW9uLFxuICBEaXNjb3JkV2ViaG9vayxcbiAgRGlzY29yZFdlbGNvbWVTY3JlZW4sXG4gIEdldE1lc3NhZ2VzT3B0aW9ucyxcbiAgR2V0U2NoZWR1bGVkRXZlbnRVc2VycyxcbiAgTWZhTGV2ZWxzLFxuICBNb2RpZnlHdWlsZFRlbXBsYXRlLFxufSBmcm9tICdAZGlzY29yZGVuby90eXBlcydcbmltcG9ydCB0eXBlIHsgQ3JlYXRlUmVzdE1hbmFnZXJPcHRpb25zLCBSZXN0TWFuYWdlciwgU2VuZFJlcXVlc3RPcHRpb25zIH0gZnJvbSAnLi90eXBlcy5qcydcblxuLy8gVE9ETzogbWFrZSBkeW5hbWljIGJhc2VkIG9uIHBhY2thZ2UuanNvbiBmaWxlXG5jb25zdCB2ZXJzaW9uID0gJzE5LjAuMC1hbHBoYS4xJ1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVzdE1hbmFnZXIob3B0aW9uczogQ3JlYXRlUmVzdE1hbmFnZXJPcHRpb25zKTogUmVzdE1hbmFnZXIge1xuICAvLyBGYWxzeSB0b2tlbiBzdHJpbmcgY2hlY2tcbiAgaWYgKCFvcHRpb25zLnRva2VuKSB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBtdXN0IHByb3ZpZGUgYSB2YWxpZCB0b2tlbi4nKVxuXG4gIGNvbnN0IHJlc3Q6IFJlc3RNYW5hZ2VyID0ge1xuICAgIHRva2VuOiBvcHRpb25zLnRva2VuLFxuICAgIGFwcGxpY2F0aW9uSWQ6IG9wdGlvbnMuYXBwbGljYXRpb25JZCA/IEJpZ0ludChvcHRpb25zLmFwcGxpY2F0aW9uSWQpIDogZ2V0Qm90SWRGcm9tVG9rZW4ob3B0aW9ucy50b2tlbiksXG4gICAgdmVyc2lvbjogb3B0aW9ucy52ZXJzaW9uID8/IDEwLFxuICAgIGJhc2VVcmw6IG9wdGlvbnMuYmFzZVVybCA/PyAnaHR0cHM6Ly9kaXNjb3JkLmNvbS9hcGknLFxuICAgIG1heFJldHJ5Q291bnQ6IEluZmluaXR5LFxuICAgIGdsb2JhbGx5UmF0ZUxpbWl0ZWQ6IGZhbHNlLFxuICAgIHByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzOiBmYWxzZSxcbiAgICBkZWxldGVRdWV1ZURlbGF5OiA2MDAwMCxcbiAgICBxdWV1ZXM6IG5ldyBNYXAoKSxcbiAgICByYXRlTGltaXRlZFBhdGhzOiBuZXcgTWFwKCksXG4gICAgaW52YWxpZEJ1Y2tldDogY3JlYXRlSW52YWxpZFJlcXVlc3RCdWNrZXQoe30pLFxuXG4gICAgcm91dGVzOiB7XG4gICAgICB3ZWJob29rczoge1xuICAgICAgICBpZDogKHdlYmhvb2tJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL3dlYmhvb2tzLyR7d2ViaG9va0lkfWBcbiAgICAgICAgfSxcbiAgICAgICAgbWVzc2FnZTogKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgIGxldCB1cmwgPSBgL3dlYmhvb2tzLyR7d2ViaG9va0lkfS8ke3Rva2VufS9tZXNzYWdlcy8ke21lc3NhZ2VJZH0/YFxuXG4gICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnRocmVhZElkKSB1cmwgKz0gYHRocmVhZF9pZD0ke29wdGlvbnMudGhyZWFkSWR9YFxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB1cmxcbiAgICAgICAgfSxcbiAgICAgICAgb3JpZ2luYWw6ICh3ZWJob29rSWQsIHRva2VuLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgbGV0IHVybCA9IGAvd2ViaG9va3MvJHt3ZWJob29rSWR9LyR7dG9rZW59L21lc3NhZ2VzL0BvcmlnaW5hbD9gXG5cbiAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMudGhyZWFkSWQpIHVybCArPSBgdGhyZWFkX2lkPSR7b3B0aW9ucy50aHJlYWRJZH1gXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICB9LFxuICAgICAgICB3ZWJob29rOiAod2ViaG9va0lkLCB0b2tlbiwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgIGxldCB1cmwgPSBgL3dlYmhvb2tzLyR7d2ViaG9va0lkfS8ke3Rva2VufT9gXG5cbiAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnM/LndhaXQgIT09IHVuZGVmaW5lZCkgdXJsICs9IGB3YWl0PSR7b3B0aW9ucy53YWl0LnRvU3RyaW5nKCl9YFxuICAgICAgICAgICAgaWYgKG9wdGlvbnMudGhyZWFkSWQpIHVybCArPSBgdGhyZWFkX2lkPSR7b3B0aW9ucy50aHJlYWRJZH1gXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICB9LFxuICAgICAgfSxcblxuICAgICAgLy8gTWlzY2VsbGFuZW91cyBFbmRwb2ludHNcbiAgICAgIHNlc3Npb25JbmZvOiAoKSA9PiByZXN0LnJvdXRlcy5nYXRld2F5Qm90KCksXG5cbiAgICAgIC8vIENoYW5uZWwgRW5kcG9pbnRzXG4gICAgICBjaGFubmVsczoge1xuICAgICAgICBidWxrOiAoY2hhbm5lbElkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L21lc3NhZ2VzL2J1bGstZGVsZXRlYFxuICAgICAgICB9LFxuICAgICAgICBkbTogKCkgPT4ge1xuICAgICAgICAgIHJldHVybiAnL3VzZXJzL0BtZS9jaGFubmVscydcbiAgICAgICAgfSxcbiAgICAgICAgcGluOiAoY2hhbm5lbElkLCBtZXNzYWdlSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vcGlucy8ke21lc3NhZ2VJZH1gXG4gICAgICAgIH0sXG4gICAgICAgIHBpbnM6IChjaGFubmVsSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vcGluc2BcbiAgICAgICAgfSxcbiAgICAgICAgcmVhY3Rpb25zOiB7XG4gICAgICAgICAgYm90OiAoY2hhbm5lbElkLCBtZXNzYWdlSWQsIGVtb2ppKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vbWVzc2FnZXMvJHttZXNzYWdlSWR9L3JlYWN0aW9ucy8ke2VuY29kZVVSSUNvbXBvbmVudChlbW9qaSl9L0BtZWBcbiAgICAgICAgICB9LFxuICAgICAgICAgIHVzZXI6IChjaGFubmVsSWQsIG1lc3NhZ2VJZCwgZW1vamksIHVzZXJJZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L21lc3NhZ2VzLyR7bWVzc2FnZUlkfS9yZWFjdGlvbnMvJHtlbmNvZGVVUklDb21wb25lbnQoZW1vamkpfS8ke3VzZXJJZH1gXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhbGw6IChjaGFubmVsSWQsIG1lc3NhZ2VJZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L21lc3NhZ2VzLyR7bWVzc2FnZUlkfS9yZWFjdGlvbnNgXG4gICAgICAgICAgfSxcbiAgICAgICAgICBlbW9qaTogKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCBlbW9qaSwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgbGV0IHVybCA9IGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L21lc3NhZ2VzLyR7bWVzc2FnZUlkfS9yZWFjdGlvbnMvJHtlbmNvZGVVUklDb21wb25lbnQoZW1vamkpfT9gXG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtdGVtcGxhdGUtZXhwcmVzc2lvbnNcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYWZ0ZXIpIHVybCArPSBgYWZ0ZXI9JHtvcHRpb25zLmFmdGVyfWBcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgICBpZiAob3B0aW9ucy5saW1pdCkgdXJsICs9IGAmbGltaXQ9JHtvcHRpb25zLmxpbWl0fWBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWVzc2FnZTogKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCBlbW9qaSwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgbGV0IHVybCA9IGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L21lc3NhZ2VzLyR7bWVzc2FnZUlkfS9yZWFjdGlvbnMvJHtlbmNvZGVVUklDb21wb25lbnQoZW1vamkpfT9gXG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtdGVtcGxhdGUtZXhwcmVzc2lvbnNcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYWZ0ZXIpIHVybCArPSBgYWZ0ZXI9JHtvcHRpb25zLmFmdGVyfWBcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgICBpZiAob3B0aW9ucy5saW1pdCkgdXJsICs9IGAmbGltaXQ9JHtvcHRpb25zLmxpbWl0fWBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHdlYmhvb2tzOiAoY2hhbm5lbElkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L3dlYmhvb2tzYFxuICAgICAgICB9LFxuXG4gICAgICAgIGNoYW5uZWw6IChjaGFubmVsSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH1gXG4gICAgICAgIH0sXG5cbiAgICAgICAgZm9sbG93OiAoY2hhbm5lbElkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L2ZvbGxvd2Vyc2BcbiAgICAgICAgfSxcblxuICAgICAgICBmb3J1bTogKGNoYW5uZWxJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS90aHJlYWRzP2hhc19tZXNzYWdlPXRydWVgXG4gICAgICAgIH0sXG5cbiAgICAgICAgaW52aXRlczogKGNoYW5uZWxJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS9pbnZpdGVzYFxuICAgICAgICB9LFxuXG4gICAgICAgIG1lc3NhZ2U6IChjaGFubmVsSWQsIG1lc3NhZ2VJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS9tZXNzYWdlcy8ke21lc3NhZ2VJZH1gXG4gICAgICAgIH0sXG5cbiAgICAgICAgbWVzc2FnZXM6IChjaGFubmVsSWQsIG9wdGlvbnM/OiBHZXRNZXNzYWdlc09wdGlvbnMpID0+IHtcbiAgICAgICAgICBsZXQgdXJsID0gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vbWVzc2FnZXM/YFxuXG4gICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChpc0dldE1lc3NhZ2VzQWZ0ZXIob3B0aW9ucykgJiYgb3B0aW9ucy5hZnRlcikge1xuICAgICAgICAgICAgICB1cmwgKz0gYGFmdGVyPSR7b3B0aW9ucy5hZnRlcn1gXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNHZXRNZXNzYWdlc0JlZm9yZShvcHRpb25zKSAmJiBvcHRpb25zLmJlZm9yZSkge1xuICAgICAgICAgICAgICB1cmwgKz0gYCZiZWZvcmU9JHtvcHRpb25zLmJlZm9yZX1gXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNHZXRNZXNzYWdlc0Fyb3VuZChvcHRpb25zKSAmJiBvcHRpb25zLmFyb3VuZCkge1xuICAgICAgICAgICAgICB1cmwgKz0gYCZhcm91bmQ9JHtvcHRpb25zLmFyb3VuZH1gXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNHZXRNZXNzYWdlc0xpbWl0KG9wdGlvbnMpICYmIG9wdGlvbnMubGltaXQpIHtcbiAgICAgICAgICAgICAgdXJsICs9IGAmbGltaXQ9JHtvcHRpb25zLmxpbWl0fWBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgIH0sXG5cbiAgICAgICAgb3ZlcndyaXRlOiAoY2hhbm5lbElkLCBvdmVyd3JpdGVJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS9wZXJtaXNzaW9ucy8ke292ZXJ3cml0ZUlkfWBcbiAgICAgICAgfSxcblxuICAgICAgICBjcm9zc3Bvc3Q6IChjaGFubmVsSWQsIG1lc3NhZ2VJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS9tZXNzYWdlcy8ke21lc3NhZ2VJZH0vY3Jvc3Nwb3N0YFxuICAgICAgICB9LFxuXG4gICAgICAgIHN0YWdlczogKCkgPT4ge1xuICAgICAgICAgIHJldHVybiAnL3N0YWdlLWluc3RhbmNlcydcbiAgICAgICAgfSxcblxuICAgICAgICBzdGFnZTogKGNoYW5uZWxJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL3N0YWdlLWluc3RhbmNlcy8ke2NoYW5uZWxJZH1gXG4gICAgICAgIH0sXG5cbiAgICAgICAgLy8gVGhyZWFkIEVuZHBvaW50c1xuICAgICAgICB0aHJlYWRzOiB7XG4gICAgICAgICAgbWVzc2FnZTogKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vbWVzc2FnZXMvJHttZXNzYWdlSWR9L3RocmVhZHNgXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhbGw6IChjaGFubmVsSWQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBgL2NoYW5uZWxzLyR7Y2hhbm5lbElkfS90aHJlYWRzYFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWN0aXZlOiAoZ3VpbGRJZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vdGhyZWFkcy9hY3RpdmVgXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtZW1iZXJzOiAoY2hhbm5lbElkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vdGhyZWFkLW1lbWJlcnNgXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtZTogKGNoYW5uZWxJZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L3RocmVhZC1tZW1iZXJzL0BtZWBcbiAgICAgICAgICB9LFxuICAgICAgICAgIHVzZXI6IChjaGFubmVsSWQsIHVzZXJJZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L3RocmVhZC1tZW1iZXJzLyR7dXNlcklkfWBcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFyY2hpdmVkOiAoY2hhbm5lbElkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vdGhyZWFkcy9hcmNoaXZlZGBcbiAgICAgICAgICB9LFxuICAgICAgICAgIHB1YmxpYzogKGNoYW5uZWxJZCwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgbGV0IHVybCA9IGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L3RocmVhZHMvYXJjaGl2ZWQvcHVibGljP2BcblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYmVmb3JlKSB7XG4gICAgICAgICAgICAgICAgdXJsICs9IGBiZWZvcmU9JHtuZXcgRGF0ZShvcHRpb25zLmJlZm9yZSkudG9JU09TdHJpbmcoKX1gXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgICBpZiAob3B0aW9ucy5saW1pdCkgdXJsICs9IGAmbGltaXQ9JHtvcHRpb25zLmxpbWl0fWBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcHJpdmF0ZTogKGNoYW5uZWxJZCwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgbGV0IHVybCA9IGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L3RocmVhZHMvYXJjaGl2ZWQvcHJpdmF0ZT9gXG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLmJlZm9yZSkge1xuICAgICAgICAgICAgICAgIHVybCArPSBgYmVmb3JlPSR7bmV3IERhdGUob3B0aW9ucy5iZWZvcmUpLnRvSVNPU3RyaW5nKCl9YFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtdGVtcGxhdGUtZXhwcmVzc2lvbnNcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMubGltaXQpIHVybCArPSBgJmxpbWl0PSR7b3B0aW9ucy5saW1pdH1gXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB1cmxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGpvaW5lZDogKGNoYW5uZWxJZCwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgbGV0IHVybCA9IGAvY2hhbm5lbHMvJHtjaGFubmVsSWR9L3VzZXJzL0BtZS90aHJlYWRzL2FyY2hpdmVkL3ByaXZhdGU/YFxuXG4gICAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgICBpZiAob3B0aW9ucy5iZWZvcmUpIHtcbiAgICAgICAgICAgICAgICB1cmwgKz0gYGJlZm9yZT0ke25ldyBEYXRlKG9wdGlvbnMuYmVmb3JlKS50b0lTT1N0cmluZygpfWBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLmxpbWl0KSB1cmwgKz0gYCZsaW1pdD0ke29wdGlvbnMubGltaXR9YFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcblxuICAgICAgICB0eXBpbmc6IChjaGFubmVsSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9jaGFubmVscy8ke2NoYW5uZWxJZH0vdHlwaW5nYFxuICAgICAgICB9LFxuICAgICAgfSxcblxuICAgICAgLy8gR3VpbGQgRW5kcG9pbnRzXG4gICAgICBndWlsZHM6IHtcbiAgICAgICAgYWxsOiAoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuICcvZ3VpbGRzJ1xuICAgICAgICB9LFxuICAgICAgICBhdWRpdGxvZ3M6IChndWlsZElkLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgbGV0IHVybCA9IGAvZ3VpbGRzLyR7Z3VpbGRJZH0vYXVkaXQtbG9ncz9gXG5cbiAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuYWN0aW9uVHlwZSkgdXJsICs9IGBhY3Rpb25fdHlwZT0ke29wdGlvbnMuYWN0aW9uVHlwZX1gXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5iZWZvcmUpIHVybCArPSBgJmJlZm9yZT0ke29wdGlvbnMuYmVmb3JlfWBcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtdGVtcGxhdGUtZXhwcmVzc2lvbnNcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmxpbWl0KSB1cmwgKz0gYCZsaW1pdD0ke29wdGlvbnMubGltaXR9YFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMudXNlcklkKSB1cmwgKz0gYCZ1c2VyX2lkPSR7b3B0aW9ucy51c2VySWR9YFxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB1cmxcbiAgICAgICAgfSxcbiAgICAgICAgYXV0b21vZDoge1xuICAgICAgICAgIHJ1bGU6IChndWlsZElkLCBydWxlSWQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L2F1dG8tbW9kZXJhdGlvbi9ydWxlcy8ke3J1bGVJZH1gXG4gICAgICAgICAgfSxcbiAgICAgICAgICBydWxlczogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L2F1dG8tbW9kZXJhdGlvbi9ydWxlc2BcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBjaGFubmVsczogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS9jaGFubmVsc2BcbiAgICAgICAgfSxcbiAgICAgICAgZW1vamk6IChndWlsZElkLCBlbW9qaUlkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vZW1vamlzLyR7ZW1vamlJZH1gXG4gICAgICAgIH0sXG4gICAgICAgIGVtb2ppczogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS9lbW9qaXNgXG4gICAgICAgIH0sXG4gICAgICAgIGV2ZW50czoge1xuICAgICAgICAgIGV2ZW50czogKGd1aWxkSWQsIHdpdGhVc2VyQ291bnQ/OiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgICBsZXQgdXJsID0gYC9ndWlsZHMvJHtndWlsZElkfS9zY2hlZHVsZWQtZXZlbnRzP2BcblxuICAgICAgICAgICAgaWYgKHdpdGhVc2VyQ291bnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICB1cmwgKz0gYHdpdGhfdXNlcl9jb3VudD0ke3dpdGhVc2VyQ291bnQudG9TdHJpbmcoKX1gXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBldmVudDogKGd1aWxkSWQsIGV2ZW50SWQsIHdpdGhVc2VyQ291bnQ/OiBib29sZWFuKSA9PiB7XG4gICAgICAgICAgICBsZXQgdXJsID0gYC9ndWlsZHMvJHtndWlsZElkfS9zY2hlZHVsZWQtZXZlbnRzLyR7ZXZlbnRJZH1gXG5cbiAgICAgICAgICAgIGlmICh3aXRoVXNlckNvdW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgdXJsICs9IGB3aXRoX3VzZXJfY291bnQ9JHt3aXRoVXNlckNvdW50LnRvU3RyaW5nKCl9YFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB1c2VyczogKGd1aWxkSWQsIGV2ZW50SWQsIG9wdGlvbnM/OiBHZXRTY2hlZHVsZWRFdmVudFVzZXJzKSA9PiB7XG4gICAgICAgICAgICBsZXQgdXJsID0gYC9ndWlsZHMvJHtndWlsZElkfS9zY2hlZHVsZWQtZXZlbnRzLyR7ZXZlbnRJZH0vdXNlcnM/YFxuXG4gICAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLmxpbWl0ICE9PSB1bmRlZmluZWQpIHVybCArPSBgbGltaXQ9JHtvcHRpb25zLmxpbWl0fWBcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMud2l0aE1lbWJlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgICAgIHVybCArPSBgJndpdGhfbWVtYmVyPSR7b3B0aW9ucy53aXRoTWVtYmVyLnRvU3RyaW5nKCl9YFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtdGVtcGxhdGUtZXhwcmVzc2lvbnNcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuYWZ0ZXIgIT09IHVuZGVmaW5lZCkgdXJsICs9IGAmYWZ0ZXI9JHtvcHRpb25zLmFmdGVyfWBcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgICBpZiAob3B0aW9ucy5iZWZvcmUgIT09IHVuZGVmaW5lZCkgdXJsICs9IGAmYmVmb3JlPSR7b3B0aW9ucy5iZWZvcmV9YFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgZ3VpbGQoZ3VpbGRJZCwgd2l0aENvdW50cykge1xuICAgICAgICAgIGxldCB1cmwgPSBgL2d1aWxkcy8ke2d1aWxkSWR9P2BcblxuICAgICAgICAgIGlmICh3aXRoQ291bnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHVybCArPSBgd2l0aF9jb3VudHM9JHt3aXRoQ291bnRzLnRvU3RyaW5nKCl9YFxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB1cmxcbiAgICAgICAgfSxcbiAgICAgICAgaW50ZWdyYXRpb24oZ3VpbGRJZCwgaW50ZWdyYXRpb25JZCkge1xuICAgICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L2ludGVncmF0aW9ucy8ke2ludGVncmF0aW9uSWR9YFxuICAgICAgICB9LFxuICAgICAgICBpbnRlZ3JhdGlvbnM6IChndWlsZElkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vaW50ZWdyYXRpb25zP2luY2x1ZGVfYXBwbGljYXRpb25zPXRydWVgXG4gICAgICAgIH0sXG4gICAgICAgIGludml0ZShpbnZpdGVDb2RlLCBvcHRpb25zKSB7XG4gICAgICAgICAgbGV0IHVybCA9IGAvaW52aXRlcy8ke2ludml0ZUNvZGV9P2BcblxuICAgICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy53aXRoQ291bnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgICB1cmwgKz0gYHdpdGhfY291bnRzPSR7b3B0aW9ucy53aXRoQ291bnRzLnRvU3RyaW5nKCl9YFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnMud2l0aEV4cGlyYXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgICAgICAgICAgIHVybCArPSBgJndpdGhfZXhwaXJhdGlvbj0ke29wdGlvbnMud2l0aEV4cGlyYXRpb24udG9TdHJpbmcoKX1gXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5zY2hlZHVsZWRFdmVudElkKSB7XG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtdGVtcGxhdGUtZXhwcmVzc2lvbnNcbiAgICAgICAgICAgICAgdXJsICs9IGAmZ3VpbGRfc2NoZWR1bGVkX2V2ZW50X2lkPSR7b3B0aW9ucy5zY2hlZHVsZWRFdmVudElkfWBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgIH0sXG4gICAgICAgIGludml0ZXM6IChndWlsZElkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vaW52aXRlc2BcbiAgICAgICAgfSxcbiAgICAgICAgbGVhdmU6IChndWlsZElkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvdXNlcnMvQG1lL2d1aWxkcy8ke2d1aWxkSWR9YFxuICAgICAgICB9LFxuICAgICAgICBtZW1iZXJzOiB7XG4gICAgICAgICAgYmFuOiAoZ3VpbGRJZCwgdXNlcklkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS9iYW5zLyR7dXNlcklkfWBcbiAgICAgICAgICB9LFxuICAgICAgICAgIGJhbnM6IChndWlsZElkLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBsZXQgdXJsID0gYC9ndWlsZHMvJHtndWlsZElkfS9iYW5zP2BcblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgICBpZiAob3B0aW9ucy5saW1pdCkgdXJsICs9IGBsaW1pdD0ke29wdGlvbnMubGltaXR9YFxuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLmFmdGVyKSB1cmwgKz0gYCZhZnRlcj0ke29wdGlvbnMuYWZ0ZXJ9YFxuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLmJlZm9yZSkgdXJsICs9IGAmYmVmb3JlPSR7b3B0aW9ucy5iZWZvcmV9YFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBib3Q6IChndWlsZElkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS9tZW1iZXJzL0BtZWBcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1lbWJlcjogKGd1aWxkSWQsIHVzZXJJZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vbWVtYmVycy8ke3VzZXJJZH1gXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtZW1iZXJzOiAoZ3VpbGRJZCwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgbGV0IHVybCA9IGAvZ3VpbGRzLyR7Z3VpbGRJZH0vbWVtYmVycz9gXG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgICBpZiAob3B0aW9ucy5saW1pdCkgdXJsICs9IGBsaW1pdD0ke29wdGlvbnMubGltaXR9YFxuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLmFmdGVyKSB1cmwgKz0gYCZhZnRlcj0ke29wdGlvbnMuYWZ0ZXJ9YFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdXJsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZWFyY2g6IChndWlsZElkLCBxdWVyeSwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgbGV0IHVybCA9IGAvZ3VpbGRzLyR7Z3VpbGRJZH0vbWVtYmVycy9zZWFyY2g/cXVlcnk9JHtlbmNvZGVVUklDb21wb25lbnQocXVlcnkpfWBcblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMubGltaXQgIT09IHVuZGVmaW5lZCkgdXJsICs9IGAmbGltaXQ9JHtvcHRpb25zLmxpbWl0fWBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcHJ1bmU6IChndWlsZElkLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICBsZXQgdXJsID0gYC9ndWlsZHMvJHtndWlsZElkfS9wcnVuZT9gXG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcmVzdHJpY3QtdGVtcGxhdGUtZXhwcmVzc2lvbnNcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZGF5cykgdXJsICs9IGBkYXlzPSR7b3B0aW9ucy5kYXlzfWBcbiAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucy5pbmNsdWRlUm9sZXMpKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgICAgIHVybCArPSBgJmluY2x1ZGVfcm9sZXM9JHtvcHRpb25zLmluY2x1ZGVSb2xlcy5qb2luKCcsJyl9YFxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuaW5jbHVkZVJvbGVzKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgICAgIHVybCArPSBgJmluY2x1ZGVfcm9sZXM9JHtvcHRpb25zLmluY2x1ZGVSb2xlc31gXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIG1mYTogKGd1aWxkSWQpID0+IGAvZ3VpbGRzLyR7Z3VpbGRJZH0vbWZhYCxcbiAgICAgICAgcHJldmlldzogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS9wcmV2aWV3YFxuICAgICAgICB9LFxuICAgICAgICBwcnVuZTogKGd1aWxkSWQsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgICBsZXQgdXJsID0gYC9ndWlsZHMvJHtndWlsZElkfS9wcnVuZT9gXG5cbiAgICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9yZXN0cmljdC10ZW1wbGF0ZS1leHByZXNzaW9uc1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuZGF5cykgdXJsICs9IGBkYXlzPSR7b3B0aW9ucy5kYXlzfWBcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMuaW5jbHVkZVJvbGVzKSkge1xuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgICAgICAgICAgIHVybCArPSBgJmluY2x1ZGVfcm9sZXM9JHtvcHRpb25zLmluY2x1ZGVSb2xlcy5qb2luKCcsJyl9YFxuICAgICAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmluY2x1ZGVSb2xlcykge1xuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3Jlc3RyaWN0LXRlbXBsYXRlLWV4cHJlc3Npb25zXG4gICAgICAgICAgICAgIHVybCArPSBgJmluY2x1ZGVfcm9sZXM9JHtvcHRpb25zLmluY2x1ZGVSb2xlc31gXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICB9LFxuICAgICAgICByb2xlczoge1xuICAgICAgICAgIG9uZTogKGd1aWxkSWQsIHJvbGVJZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vcm9sZXMvJHtyb2xlSWR9YFxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWxsOiAoZ3VpbGRJZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vcm9sZXNgXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtZW1iZXI6IChndWlsZElkLCBtZW1iZXJJZCwgcm9sZUlkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS9tZW1iZXJzLyR7bWVtYmVySWR9L3JvbGVzLyR7cm9sZUlkfWBcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzdGlja2VyczogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS9zdGlja2Vyc2BcbiAgICAgICAgfSxcbiAgICAgICAgc3RpY2tlcjogKGd1aWxkSWQsIHN0aWNrZXJJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L3N0aWNrZXJzLyR7c3RpY2tlcklkfWBcbiAgICAgICAgfSxcbiAgICAgICAgdm9pY2U6IChndWlsZElkLCB1c2VySWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS92b2ljZS1zdGF0ZXMvJHt1c2VySWQgPz8gJ0BtZSd9YFxuICAgICAgICB9LFxuICAgICAgICB0ZW1wbGF0ZXM6IHtcbiAgICAgICAgICBjb2RlOiAoY29kZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzL3RlbXBsYXRlcy8ke2NvZGV9YFxuICAgICAgICAgIH0sXG4gICAgICAgICAgZ3VpbGQ6IChndWlsZElkLCBjb2RlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS90ZW1wbGF0ZXMvJHtjb2RlfWBcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFsbDogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L3RlbXBsYXRlc2BcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB2YW5pdHk6IChndWlsZElkKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGAvZ3VpbGRzLyR7Z3VpbGRJZH0vdmFuaXR5LXVybGBcbiAgICAgICAgfSxcbiAgICAgICAgcmVnaW9uczogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS9yZWdpb25zYFxuICAgICAgICB9LFxuICAgICAgICB3ZWJob29rczogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS93ZWJob29rc2BcbiAgICAgICAgfSxcbiAgICAgICAgd2VsY29tZTogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS93ZWxjb21lLXNjcmVlbmBcbiAgICAgICAgfSxcbiAgICAgICAgd2lkZ2V0OiAoZ3VpbGRJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiBgL2d1aWxkcy8ke2d1aWxkSWR9L3dpZGdldGBcbiAgICAgICAgfSxcbiAgICAgICAgd2lkZ2V0SnNvbjogKGd1aWxkSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gYC9ndWlsZHMvJHtndWlsZElkfS93aWRnZXQuanNvbmBcbiAgICAgICAgfSxcbiAgICAgIH0sXG5cbiAgICAgIHN0aWNrZXI6IChzdGlja2VySWQ6IEJpZ1N0cmluZykgPT4ge1xuICAgICAgICByZXR1cm4gYC9zdGlja2Vycy8ke3N0aWNrZXJJZH1gXG4gICAgICB9LFxuXG4gICAgICByZWdpb25zOiAoKSA9PiB7XG4gICAgICAgIHJldHVybiAnL3ZvaWNlL3JlZ2lvbnMnXG4gICAgICB9LFxuXG4gICAgICAvLyBJbnRlcmFjdGlvbiBFbmRwb2ludHNcbiAgICAgIGludGVyYWN0aW9uczoge1xuICAgICAgICBjb21tYW5kczoge1xuICAgICAgICAgIC8vIEFwcGxpY2F0aW9uIEVuZHBvaW50c1xuICAgICAgICAgIGNvbW1hbmRzOiAoYXBwbGljYXRpb25JZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvYXBwbGljYXRpb25zLyR7YXBwbGljYXRpb25JZH0vY29tbWFuZHNgXG4gICAgICAgICAgfSxcblxuICAgICAgICAgIGd1aWxkczoge1xuICAgICAgICAgICAgYWxsKGFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGAvYXBwbGljYXRpb25zLyR7YXBwbGljYXRpb25JZH0vZ3VpbGRzLyR7Z3VpbGRJZH0vY29tbWFuZHNgXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBvbmUoYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkLCB3aXRoTG9jYWxpemF0aW9ucykge1xuICAgICAgICAgICAgICBsZXQgdXJsID0gYC9hcHBsaWNhdGlvbnMvJHthcHBsaWNhdGlvbklkfS9ndWlsZHMvJHtndWlsZElkfS9jb21tYW5kcy8ke2NvbW1hbmRJZH0/YFxuXG4gICAgICAgICAgICAgIGlmICh3aXRoTG9jYWxpemF0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdXJsICs9IGB3aXRoX2xvY2FsaXphdGlvbnM9JHt3aXRoTG9jYWxpemF0aW9ucy50b1N0cmluZygpfWBcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiB1cmxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBwZXJtaXNzaW9uczogKGFwcGxpY2F0aW9uSWQsIGd1aWxkSWQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBgL2FwcGxpY2F0aW9ucy8ke2FwcGxpY2F0aW9uSWR9L2d1aWxkcy8ke2d1aWxkSWR9L2NvbW1hbmRzL3Blcm1pc3Npb25zYFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGVybWlzc2lvbjogKGFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvYXBwbGljYXRpb25zLyR7YXBwbGljYXRpb25JZH0vZ3VpbGRzLyR7Z3VpbGRJZH0vY29tbWFuZHMvJHtjb21tYW5kSWR9L3Blcm1pc3Npb25zYFxuICAgICAgICAgIH0sXG4gICAgICAgICAgY29tbWFuZDogKGFwcGxpY2F0aW9uSWQsIGNvbW1hbmRJZCwgd2l0aExvY2FsaXphdGlvbnMpID0+IHtcbiAgICAgICAgICAgIGxldCB1cmwgPSBgL2FwcGxpY2F0aW9ucy8ke2FwcGxpY2F0aW9uSWR9L2NvbW1hbmRzLyR7Y29tbWFuZElkfT9gXG5cbiAgICAgICAgICAgIGlmICh3aXRoTG9jYWxpemF0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHVybCArPSBgd2l0aExvY2FsaXphdGlvbnM9JHt3aXRoTG9jYWxpemF0aW9ucy50b1N0cmluZygpfWBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHVybFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG5cbiAgICAgICAgcmVzcG9uc2VzOiB7XG4gICAgICAgICAgLy8gSW50ZXJhY3Rpb24gRW5kcG9pbnRzXG4gICAgICAgICAgY2FsbGJhY2s6IChpbnRlcmFjdGlvbklkLCB0b2tlbikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGAvaW50ZXJhY3Rpb25zLyR7aW50ZXJhY3Rpb25JZH0vJHt0b2tlbn0vY2FsbGJhY2tgXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvcmlnaW5hbDogKGludGVyYWN0aW9uSWQsIHRva2VuKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYC93ZWJob29rcy8ke2ludGVyYWN0aW9uSWR9LyR7dG9rZW59L21lc3NhZ2VzL0BvcmlnaW5hbGBcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1lc3NhZ2U6IChhcHBsaWNhdGlvbklkLCB0b2tlbiwgbWVzc2FnZUlkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYC93ZWJob29rcy8ke2FwcGxpY2F0aW9uSWR9LyR7dG9rZW59L21lc3NhZ2VzLyR7bWVzc2FnZUlkfWBcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcblxuICAgICAgLy8gVXNlciBlbmRwb2ludHNcbiAgICAgIHVzZXIodXNlcklkKSB7XG4gICAgICAgIHJldHVybiBgL3VzZXJzLyR7dXNlcklkfWBcbiAgICAgIH0sXG5cbiAgICAgIHVzZXJCb3QoKSB7XG4gICAgICAgIHJldHVybiAnL3VzZXJzL0BtZSdcbiAgICAgIH0sXG5cbiAgICAgIG9hdXRoMkFwcGxpY2F0aW9uKCkge1xuICAgICAgICByZXR1cm4gJ29hdXRoMi9hcHBsaWNhdGlvbnMvQG1lJ1xuICAgICAgfSxcblxuICAgICAgZ2F0ZXdheUJvdCgpIHtcbiAgICAgICAgcmV0dXJuICcvZ2F0ZXdheS9ib3QnXG4gICAgICB9LFxuXG4gICAgICBuaXRyb1N0aWNrZXJQYWNrcygpIHtcbiAgICAgICAgcmV0dXJuICcvc3RpY2tlci1wYWNrcydcbiAgICAgIH0sXG4gICAgfSxcblxuICAgIGNoZWNrUmF0ZUxpbWl0cyh1cmwpIHtcbiAgICAgIGNvbnN0IHJhdGVsaW1pdGVkID0gcmVzdC5yYXRlTGltaXRlZFBhdGhzLmdldCh1cmwpXG4gICAgICBjb25zdCBnbG9iYWwgPSByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZ2V0KCdnbG9iYWwnKVxuICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKVxuXG4gICAgICBpZiAocmF0ZWxpbWl0ZWQgJiYgbm93IDwgcmF0ZWxpbWl0ZWQucmVzZXRUaW1lc3RhbXApIHtcbiAgICAgICAgcmV0dXJuIHJhdGVsaW1pdGVkLnJlc2V0VGltZXN0YW1wIC0gbm93XG4gICAgICB9XG5cbiAgICAgIGlmIChnbG9iYWwgJiYgbm93IDwgZ2xvYmFsLnJlc2V0VGltZXN0YW1wKSB7XG4gICAgICAgIHJldHVybiBnbG9iYWwucmVzZXRUaW1lc3RhbXAgLSBub3dcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGNoYW5nZVRvRGlzY29yZEZvcm1hdChvYmo6IGFueSk6IGFueSB7XG4gICAgICBpZiAob2JqID09PSBudWxsKSByZXR1cm4gbnVsbFxuXG4gICAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgICAgIHJldHVybiBvYmoubWFwKChpdGVtKSA9PiByZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdChpdGVtKSlcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5ld09iajogYW55ID0ge31cblxuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhvYmopKSB7XG4gICAgICAgICAgaWYgKGtleSA9PT0gJ3Blcm1pc3Npb25zJykge1xuICAgICAgICAgICAgbmV3T2JqLnBlcm1pc3Npb25zID0gY2FsY3VsYXRlQml0cyhvYmpba2V5XSlcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV3T2JqW2NhbWVsVG9TbmFrZUNhc2Uoa2V5KV0gPSByZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdChvYmpba2V5XSlcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXdPYmpcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBvYmogPT09ICdiaWdpbnQnKSByZXR1cm4gb2JqLnRvU3RyaW5nKClcblxuICAgICAgcmV0dXJuIG9ialxuICAgIH0sXG5cbiAgICBjcmVhdGVSZXF1ZXN0KG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAgICd1c2VyLWFnZW50JzogYERpc2NvcmRCb3QgKGh0dHBzOi8vZ2l0aHViLmNvbS9kaXNjb3JkZW5vL2Rpc2NvcmRlbm8sIHYke3ZlcnNpb259KWAsXG4gICAgICB9XG5cbiAgICAgIGlmICghb3B0aW9ucy51bmF1dGhvcml6ZWQpIGhlYWRlcnMuYXV0aG9yaXphdGlvbiA9IGBCb3QgJHtyZXN0LnRva2VufWBcblxuICAgICAgLy8gU09NRVRJTUVTIFNQRUNJQUwgSEVBREVSUyAoRS5HLiBDVVNUT00gQVVUSE9SSVpBVElPTikgTkVFRCBUTyBCRSBVU0VEXG4gICAgICBpZiAob3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIG9wdGlvbnMuaGVhZGVycykge1xuICAgICAgICAgIGhlYWRlcnNba2V5LnRvTG93ZXJDYXNlKCldID0gb3B0aW9ucy5oZWFkZXJzW2tleV1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBHRVQgTUVUSE9EUyBTSE9VTEQgTk9UIEhBVkUgQSBCT0RZXG4gICAgICBpZiAob3B0aW9ucy5tZXRob2QgPT09ICdHRVQnKSB7XG4gICAgICAgIG9wdGlvbnMuYm9keSA9IHVuZGVmaW5lZFxuICAgICAgfVxuXG4gICAgICAvLyBJRiBBIFJFQVNPTiBJUyBQUk9WSURFRCBFTkNPREUgSVQgSU4gSEVBREVSU1xuICAgICAgaWYgKG9wdGlvbnMuYm9keT8ucmVhc29uKSB7XG4gICAgICAgIGhlYWRlcnNbJ1gtQXVkaXQtTG9nLVJlYXNvbiddID0gZW5jb2RlVVJJQ29tcG9uZW50KG9wdGlvbnMuYm9keS5yZWFzb24gYXMgc3RyaW5nKVxuICAgICAgICBvcHRpb25zLmJvZHkucmVhc29uID0gdW5kZWZpbmVkXG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLmJvZHkpIHtcbiAgICAgICAgY29uc3QgeyBmaWxlIH0gPSBvcHRpb25zLmJvZHlcbiAgICAgICAgaWYgKGZpbGUpIHtcbiAgICAgICAgICBjb25zdCBmaWxlcyA9IGZpbmRGaWxlcyhmaWxlKVxuICAgICAgICAgIGNvbnN0IGZvcm0gPSBuZXcgRm9ybURhdGEoKVxuXG4gICAgICAgICAgLy8gV0hFTiBDUkVBVElORyBBIFNUSUNLRVIsIERJU0NPUkQgV0FOVFMgRk9STSBEQVRBIE9OTFlcbiAgICAgICAgICBpZiAob3B0aW9ucy51cmw/LmVuZHNXaXRoKCcvc3RpY2tlcnMnKSAmJiBvcHRpb25zLm1ldGhvZCA9PT0gJ1BPU1QnKSB7XG4gICAgICAgICAgICBmb3JtLmFwcGVuZCgnZmlsZScsIGZpbGVzWzBdLmJsb2IsIGZpbGVzWzBdLm5hbWUpXG4gICAgICAgICAgICBmb3JtLmFwcGVuZCgnbmFtZScsIG9wdGlvbnMuYm9keS5uYW1lIGFzIHN0cmluZylcbiAgICAgICAgICAgIGZvcm0uYXBwZW5kKCdkZXNjcmlwdGlvbicsIG9wdGlvbnMuYm9keS5kZXNjcmlwdGlvbiBhcyBzdHJpbmcpXG4gICAgICAgICAgICBmb3JtLmFwcGVuZCgndGFncycsIG9wdGlvbnMuYm9keS50YWdzIGFzIHN0cmluZylcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBmb3JtLmFwcGVuZChgZmlsZSR7aX1gLCBmaWxlc1tpXS5ibG9iLCBmaWxlc1tpXS5uYW1lKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZmlsZSkgb3B0aW9ucy5ib2R5LmZpbGUgPSB1bmRlZmluZWRcbiAgICAgICAgICAgIGZvcm0uYXBwZW5kKCdwYXlsb2FkX2pzb24nLCBKU09OLnN0cmluZ2lmeShyZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdChvcHRpb25zLmJvZHkpKSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBvcHRpb25zLmJvZHkuZmlsZSA9IGZvcm1cbiAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmJvZHkgJiYgIVsnR0VUJywgJ0RFTEVURSddLmluY2x1ZGVzKG9wdGlvbnMubWV0aG9kKSkge1xuICAgICAgICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgYm9keTogKG9wdGlvbnMuYm9keT8uZmlsZSA/PyBKU09OLnN0cmluZ2lmeShyZXN0LmNoYW5nZVRvRGlzY29yZEZvcm1hdChvcHRpb25zLmJvZHkpKSkgYXMgRm9ybURhdGEgfCBzdHJpbmcsXG4gICAgICAgIG1ldGhvZDogb3B0aW9ucy5tZXRob2QsXG4gICAgICB9XG4gICAgfSxcblxuICAgIHByb2Nlc3NSYXRlTGltaXRlZFBhdGhzKCkge1xuICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKVxuXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiByZXN0LnJhdGVMaW1pdGVkUGF0aHMuZW50cmllcygpKSB7XG4gICAgICAgIC8vICAgcmVzdC5kZWJ1ZyhcbiAgICAgICAgLy8gYFtSRVNUIC0gcHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHNdIFJ1bm5pbmcgZm9yIG9mIGxvb3AuICR7XG4gICAgICAgIC8vICAgdmFsdWUucmVzZXRUaW1lc3RhbXAgLSBub3dcbiAgICAgICAgLy8gfWBcbiAgICAgICAgLy8gICApXG4gICAgICAgIC8vIElmIHRoZSB0aW1lIGhhcyBub3QgcmVhY2hlZCBjYW5jZWxcbiAgICAgICAgaWYgKHZhbHVlLnJlc2V0VGltZXN0YW1wID4gbm93KSBjb250aW51ZVxuXG4gICAgICAgIC8vIFJhdGUgbGltaXQgaXMgb3ZlciwgZGVsZXRlIHRoZSByYXRlIGxpbWl0ZXJcbiAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLmRlbGV0ZShrZXkpXG4gICAgICAgIC8vIElmIGl0IHdhcyBnbG9iYWwsIGFsc28gbWFyayB0aGUgZ2xvYmFsIHZhbHVlIGFzIGZhbHNlXG4gICAgICAgIGlmIChrZXkgPT09ICdnbG9iYWwnKSByZXN0Lmdsb2JhbGx5UmF0ZUxpbWl0ZWQgPSBmYWxzZVxuICAgICAgfVxuXG4gICAgICAvLyBBTEwgUEFUSFMgQVJFIENMRUFSRUQgQ0FOIENBTkNFTCBPVVQhXG4gICAgICBpZiAocmVzdC5yYXRlTGltaXRlZFBhdGhzLnNpemUgPT09IDApIHtcbiAgICAgICAgcmVzdC5wcm9jZXNzaW5nUmF0ZUxpbWl0ZWRQYXRocyA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN0LnByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzID0gdHJ1ZVxuICAgICAgICAvLyBSRUNIRUNLIElOIDEgU0VDT05EXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIC8vIHJlc3QuZGVidWcoJ1tSRVNUIC0gcHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHNdIFJ1bm5pbmcgc2V0VGltZW91dC4nKVxuICAgICAgICAgIHJlc3QucHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHMoKVxuICAgICAgICB9LCAxMDAwKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvKiogUHJvY2Vzc2VzIHRoZSByYXRlIGxpbWl0IGhlYWRlcnMgYW5kIGRldGVybWluZXMgaWYgaXQgbmVlZHMgdG8gYmUgcmF0ZSBsaW1pdGVkIGFuZCByZXR1cm5zIHRoZSBidWNrZXQgaWQgaWYgYXZhaWxhYmxlICovXG4gICAgcHJvY2Vzc0hlYWRlcnModXJsLCBoZWFkZXJzKSB7XG4gICAgICBsZXQgcmF0ZUxpbWl0ZWQgPSBmYWxzZVxuXG4gICAgICAvLyBHRVQgQUxMIE5FQ0VTU0FSWSBIRUFERVJTXG4gICAgICBjb25zdCByZW1haW5pbmcgPSBoZWFkZXJzLmdldCgneC1yYXRlbGltaXQtcmVtYWluaW5nJylcbiAgICAgIGNvbnN0IHJldHJ5QWZ0ZXIgPSBoZWFkZXJzLmdldCgneC1yYXRlbGltaXQtcmVzZXQtYWZ0ZXInKVxuICAgICAgY29uc3QgcmVzZXQgPSBEYXRlLm5vdygpICsgTnVtYmVyKHJldHJ5QWZ0ZXIpICogMTAwMFxuICAgICAgY29uc3QgZ2xvYmFsID0gaGVhZGVycy5nZXQoJ3gtcmF0ZWxpbWl0LWdsb2JhbCcpXG4gICAgICAvLyB1bmRlZmluZWQgb3ZlcnJpZGUgbnVsbCBuZWVkZWQgZm9yIHR5cGluZ3NcbiAgICAgIGNvbnN0IGJ1Y2tldElkID0gaGVhZGVycy5nZXQoJ3gtcmF0ZWxpbWl0LWJ1Y2tldCcpID8/IHVuZGVmaW5lZFxuICAgICAgY29uc3QgbGltaXQgPSBoZWFkZXJzLmdldCgneC1yYXRlbGltaXQtbGltaXQnKVxuXG4gICAgICByZXN0LnF1ZXVlcy5nZXQodXJsKT8uaGFuZGxlQ29tcGxldGVkUmVxdWVzdCh7XG4gICAgICAgIHJlbWFpbmluZzogcmVtYWluaW5nID8gTnVtYmVyKHJlbWFpbmluZykgOiB1bmRlZmluZWQsXG4gICAgICAgIGludGVydmFsOiByZXRyeUFmdGVyID8gTnVtYmVyKHJldHJ5QWZ0ZXIpICogMTAwMCA6IHVuZGVmaW5lZCxcbiAgICAgICAgbWF4OiBsaW1pdCA/IE51bWJlcihsaW1pdCkgOiB1bmRlZmluZWQsXG4gICAgICB9KVxuXG4gICAgICAvLyBJRiBUSEVSRSBJUyBOTyBSRU1BSU5JTkcgUkFURSBMSU1JVCwgTUFSSyBJVCBBUyBSQVRFIExJTUlURURcbiAgICAgIGlmIChyZW1haW5pbmcgPT09ICcwJykge1xuICAgICAgICByYXRlTGltaXRlZCA9IHRydWVcblxuICAgICAgICAvLyBTQVZFIFRIRSBVUkwgQVMgTElNSVRFRCwgSU1QT1JUQU5UIEZPUiBORVcgUkVRVUVTVFMgQlkgVVNFUiBXSVRIT1VUIEJVQ0tFVFxuICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KHVybCwge1xuICAgICAgICAgIHVybCxcbiAgICAgICAgICByZXNldFRpbWVzdGFtcDogcmVzZXQsXG4gICAgICAgICAgYnVja2V0SWQsXG4gICAgICAgIH0pXG5cbiAgICAgICAgLy8gU0FWRSBUSEUgQlVDS0VUIEFTIExJTUlURUQgU0lOQ0UgRElGRkVSRU5UIFVSTFMgTUFZIFNIQVJFIEEgQlVDS0VUXG4gICAgICAgIGlmIChidWNrZXRJZCkge1xuICAgICAgICAgIHJlc3QucmF0ZUxpbWl0ZWRQYXRocy5zZXQoYnVja2V0SWQsIHtcbiAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgIHJlc2V0VGltZXN0YW1wOiByZXNldCxcbiAgICAgICAgICAgIGJ1Y2tldElkLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSUYgVEhFUkUgSVMgTk8gUkVNQUlOSU5HIEdMT0JBTCBMSU1JVCwgTUFSSyBJVCBSQVRFIExJTUlURUQgR0xPQkFMTFlcbiAgICAgIGlmIChnbG9iYWwpIHtcbiAgICAgICAgY29uc3QgcmV0cnlBZnRlciA9IGhlYWRlcnMuZ2V0KCdyZXRyeS1hZnRlcicpXG4gICAgICAgIGNvbnN0IGdsb2JhbFJlc2V0ID0gRGF0ZS5ub3coKSArIE51bWJlcihyZXRyeUFmdGVyKSAqIDEwMDBcbiAgICAgICAgLy8gICByZXN0LmRlYnVnKFxuICAgICAgICAvLyBgW1JFU1QgPSBHbG9iYWxseSBSYXRlIExpbWl0ZWRdIFVSTDogJHt1cmx9IHwgR2xvYmFsIFJlc3Q6ICR7Z2xvYmFsUmVzZXR9YFxuICAgICAgICAvLyAgIClcbiAgICAgICAgcmVzdC5nbG9iYWxseVJhdGVMaW1pdGVkID0gdHJ1ZVxuICAgICAgICByYXRlTGltaXRlZCA9IHRydWVcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICByZXN0Lmdsb2JhbGx5UmF0ZUxpbWl0ZWQgPSBmYWxzZVxuICAgICAgICB9LCBnbG9iYWxSZXNldClcblxuICAgICAgICByZXN0LnJhdGVMaW1pdGVkUGF0aHMuc2V0KCdnbG9iYWwnLCB7XG4gICAgICAgICAgdXJsOiAnZ2xvYmFsJyxcbiAgICAgICAgICByZXNldFRpbWVzdGFtcDogZ2xvYmFsUmVzZXQsXG4gICAgICAgICAgYnVja2V0SWQsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKGJ1Y2tldElkKSB7XG4gICAgICAgICAgcmVzdC5yYXRlTGltaXRlZFBhdGhzLnNldChidWNrZXRJZCwge1xuICAgICAgICAgICAgdXJsOiAnZ2xvYmFsJyxcbiAgICAgICAgICAgIHJlc2V0VGltZXN0YW1wOiBnbG9iYWxSZXNldCxcbiAgICAgICAgICAgIGJ1Y2tldElkLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHJhdGVMaW1pdGVkICYmICFyZXN0LnByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzKSB7XG4gICAgICAgIHJlc3QucHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHMoKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJhdGVMaW1pdGVkID8gYnVja2V0SWQgOiB1bmRlZmluZWRcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZFJlcXVlc3Qob3B0aW9ucykge1xuICAgICAgY29uc3QgdXJsID0gb3B0aW9ucy51cmwuc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSA/IG9wdGlvbnMudXJsIDogYCR7cmVzdC5iYXNlVXJsfS92JHtyZXN0LnZlcnNpb259JHtvcHRpb25zLnVybH1gXG4gICAgICBjb25zdCBwYXlsb2FkID0gcmVzdC5jcmVhdGVSZXF1ZXN0KHsgbWV0aG9kOiBvcHRpb25zLm1ldGhvZCwgdXJsOiBvcHRpb25zLnVybCwgYm9keTogb3B0aW9ucy5ib2R5LCAuLi5vcHRpb25zLm9wdGlvbnMgfSlcblxuICAgICAgbG9nZ2VyLmRlYnVnKGBzZW5kaW5nIHJlcXVlc3QgdG8gJHt1cmx9YCwgJ3dpdGggcGF5bG9hZDonLCB7IC4uLnBheWxvYWQsIGhlYWRlcnM6IHsgLi4ucGF5bG9hZC5oZWFkZXJzLCBhdXRob3JpemF0aW9uOiAnQm90IHRva2VuaGVyZScgfSB9KVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHBheWxvYWQpXG4gICAgICBsb2dnZXIuZGVidWcoYHJlcXVlc3QgZmV0Y2hlZCBmcm9tICR7dXJsfSB3aXRoIHN0YXR1cyAke3Jlc3BvbnNlLnN0YXR1c30gJiAke3Jlc3BvbnNlLnN0YXR1c1RleHR9YClcblxuICAgICAgLy8gU2V0IHRoZSBidWNrZXQgaWQgaWYgaXQgd2FzIGF2YWlsYWJsZSBvbiB0aGUgaGVhZGVyc1xuICAgICAgY29uc3QgYnVja2V0SWQgPSByZXN0LnByb2Nlc3NIZWFkZXJzKHJlc3Quc2ltcGxpZnlVcmwob3B0aW9ucy51cmwsIG9wdGlvbnMubWV0aG9kKSwgcmVzcG9uc2UuaGVhZGVycylcbiAgICAgIGlmIChidWNrZXRJZCkgb3B0aW9ucy5idWNrZXRJZCA9IGJ1Y2tldElkXG5cbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPCAyMDAgfHwgcmVzcG9uc2Uuc3RhdHVzID49IDQwMCkge1xuICAgICAgICBsb2dnZXIuZGVidWcoYFJlcXVlc3QgdG8gJHt1cmx9IGZhaWxlZC5gKVxuXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQyOSkge1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgUmVxdWVzdCB0byAke3VybH0gd2FzIHJhdGVsaW1pdGVkLmApXG4gICAgICAgICAgLy8gVG9vIG1hbnkgYXR0ZW1wdHMsIGdldCByaWQgb2YgcmVxdWVzdCBmcm9tIHF1ZXVlLlxuICAgICAgICAgIGlmIChvcHRpb25zLnJldHJ5Q291bnQrKyA+PSByZXN0Lm1heFJldHJ5Q291bnQpIHtcbiAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhgUmVxdWVzdCB0byAke3VybH0gZXhjZWVkZWQgdGhlIG1heGltdW0gYWxsb3dlZCByZXRyaWVzLmAsICd3aXRoIHBheWxvYWQ6JywgcGF5bG9hZClcbiAgICAgICAgICAgIC8vIHJlc3QuZGVidWcoYFtSRVNUIC0gUmV0cmllc01heGVkXSAke0pTT04uc3RyaW5naWZ5KG9wdGlvbnMpfWApXG4gICAgICAgICAgICAvLyBSZW1vdmUgaXRlbSBmcm9tIHF1ZXVlIHRvIHByZXZlbnQgcmV0cnlcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25zLnJlamVjdCh7XG4gICAgICAgICAgICAgIG9rOiBmYWxzZSxcbiAgICAgICAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgICAgICAgIGVycm9yOiAnVGhlIG9wdGlvbnMgd2FzIHJhdGUgbGltaXRlZCBhbmQgaXQgbWF4ZWQgb3V0IHRoZSByZXRyaWVzIGxpbWl0LicsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFJhdGUgbGltaXRlZCwgYWRkIGJhY2sgdG8gcXVldWVcbiAgICAgICAgICByZXN0LmludmFsaWRCdWNrZXQuaGFuZGxlQ29tcGxldGVkUmVxdWVzdChyZXNwb25zZS5zdGF0dXMsIHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdYLVJhdGVMaW1pdC1TY29wZScpID09PSAnc2hhcmVkJylcblxuICAgICAgICAgIGNvbnN0IHJlc2V0QWZ0ZXIgPSByZXNwb25zZS5oZWFkZXJzLmdldCgneC1yYXRlbGltaXQtcmVzZXQtYWZ0ZXInKVxuICAgICAgICAgIGxvZ2dlci53YXJuKGBSZXF1ZXN0IHRvICR7dXJsfSB3YXMgcmF0ZSBsaW1pdGVkLiBSZXNldCBhZnRlciAke3Jlc2V0QWZ0ZXJ9IHNlY29uZHMuYClcbiAgICAgICAgICBpZiAocmVzZXRBZnRlcikgYXdhaXQgZGVsYXkoTnVtYmVyKHJlc2V0QWZ0ZXIpICogMTAwMClcbiAgICAgICAgICAvLyBwcm9jZXNzIHRoZSByZXNwb25zZSB0byBwcmV2ZW50IG1lbSBsZWFrXG4gICAgICAgICAgYXdhaXQgcmVzcG9uc2UuanNvbigpXG5cbiAgICAgICAgICByZXR1cm4gYXdhaXQgb3B0aW9ucy5yZXRyeVJlcXVlc3Q/LihvcHRpb25zKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9wdGlvbnMucmVqZWN0KHsgb2s6IGZhbHNlLCBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cywgYm9keTogSlNPTi5zdHJpbmdpZnkoYXdhaXQgcmVzcG9uc2UuanNvbigpKSB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBpczIwNCA9IHJlc3BvbnNlLnN0YXR1cyA9PT0gMjA0XG4gICAgICBjb25zdCBqc29uID0gaXMyMDQgPyB1bmRlZmluZWQgOiBhd2FpdCByZXNwb25zZS5qc29uKClcbiAgICAgIC8vIERpc2NvcmQgc29tZXRpbWVzIHNlbmRzIG5vIHJlc3BvbnNlIHdpdGggMjA0IGNvZGVcbiAgICAgIHJldHVybiBvcHRpb25zLnJlc29sdmUoeyBvazogdHJ1ZSwgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsIGJvZHk6IEpTT04uc3RyaW5naWZ5KGpzb24pIH0pXG4gICAgfSxcblxuICAgIC8vIENyZWRpdHM6IGdpdGh1Yi5jb20vYWJhbGFiYWhhaGEvZXJpcyBsaWIvcmVzdC9SZXF1ZXN0SGFuZGxlci5qcyNMMzk3XG4gICAgLy8gTW9kaWZpZWQgZm9yIG91ciB1c2UtY2FzZVxuICAgIHNpbXBsaWZ5VXJsKHVybCwgbWV0aG9kKSB7XG4gICAgICBsZXQgcm91dGUgPSB1cmxcbiAgICAgICAgLnJlcGxhY2UoL1xcLyhbYS16LV0rKVxcLyg/OlswLTldezE3LDE5fSkvZywgZnVuY3Rpb24gKG1hdGNoLCBwOiBzdHJpbmcpIHtcbiAgICAgICAgICByZXR1cm4gWydjaGFubmVscycsICdndWlsZHMnXS5pbmNsdWRlcyhwKSA/IG1hdGNoIDogYC8ke3B9L3hgXG4gICAgICAgIH0pXG4gICAgICAgIC5yZXBsYWNlKC9cXC9yZWFjdGlvbnNcXC9bXi9dKy9nLCAnL3JlYWN0aW9ucy94JylcblxuICAgICAgLy8gR0VORVJBTCAvcmVhY3Rpb25zIGFuZCAvcmVhY3Rpb25zL2Vtb2ppL0BtZSBzaGFyZSB0aGUgYnVja2V0c1xuICAgICAgaWYgKHJvdXRlLmluY2x1ZGVzKCcvcmVhY3Rpb25zJykpIHtcbiAgICAgICAgcm91dGUgPSByb3V0ZS5zdWJzdHJpbmcoMCwgcm91dGUuaW5kZXhPZignL3JlYWN0aW9ucycpICsgJy9yZWFjdGlvbnMnLmxlbmd0aClcbiAgICAgIH1cblxuICAgICAgLy8gRGVsZXRlIE1lc3NhZ2UgZW5kcG9pbnQgaGFzIGl0cyBvd24gcmF0ZSBsaW1pdFxuICAgICAgaWYgKG1ldGhvZCA9PT0gJ0RFTEVURScgJiYgcm91dGUuZW5kc1dpdGgoJy9tZXNzYWdlcy94JykpIHtcbiAgICAgICAgcm91dGUgPSBtZXRob2QgKyByb3V0ZVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcm91dGVcbiAgICB9LFxuXG4gICAgcHJvY2Vzc1JlcXVlc3QocmVxdWVzdDogU2VuZFJlcXVlc3RPcHRpb25zKSB7XG4gICAgICBjb25zdCByb3V0ZSA9IHJlcXVlc3QudXJsLnN1YnN0cmluZyhyZXF1ZXN0LnVybC5pbmRleE9mKCdhcGkvJykpXG4gICAgICBjb25zdCBwYXJ0cyA9IHJvdXRlLnNwbGl0KCcvJylcbiAgICAgIC8vIFJlbW92ZSB0aGUgYXBpL1xuICAgICAgcGFydHMuc2hpZnQoKVxuICAgICAgLy8gUmVtb3ZlcyB0aGUgL3YjL1xuICAgICAgaWYgKHBhcnRzWzBdPy5zdGFydHNXaXRoKCd2JykpIHBhcnRzLnNoaWZ0KClcbiAgICAgIC8vIFNldCB0aGUgZnVsbCB1cmwgdG8gZGlzY29yZCBhcGkgaW4gY2FzZSBpdCB3YXMgcmVjaWV2ZWQgaW4gYSBwcm94eSByZXN0XG4gICAgICByZXF1ZXN0LnVybCA9IGAke3Jlc3QuYmFzZVVybH0vdiR7cmVzdC52ZXJzaW9ufS8ke3BhcnRzLmpvaW4oJy8nKX1gXG5cbiAgICAgIGNvbnN0IHVybCA9IHJlc3Quc2ltcGxpZnlVcmwocmVxdWVzdC51cmwsIHJlcXVlc3QubWV0aG9kKVxuICAgICAgY29uc3QgcXVldWUgPSByZXN0LnF1ZXVlcy5nZXQodXJsKVxuXG4gICAgICBpZiAocXVldWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBxdWV1ZS5tYWtlUmVxdWVzdChyZXF1ZXN0KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQ1JFQVRFUyBBIE5FVyBRVUVVRVxuICAgICAgICBjb25zdCBidWNrZXRRdWV1ZSA9IG5ldyBRdWV1ZShyZXN0LCB7IHVybCwgZGVsZXRlUXVldWVEZWxheTogcmVzdC5kZWxldGVRdWV1ZURlbGF5IH0pXG5cbiAgICAgICAgLy8gQWRkIHJlcXVlc3QgdG8gcXVldWVcbiAgICAgICAgYnVja2V0UXVldWUubWFrZVJlcXVlc3QocmVxdWVzdClcbiAgICAgICAgLy8gU2F2ZSBxdWV1ZVxuICAgICAgICByZXN0LnF1ZXVlcy5zZXQodXJsLCBidWNrZXRRdWV1ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgbWFrZVJlcXVlc3QobWV0aG9kLCB1cmwsIGJvZHksIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHBheWxvYWQ6IFNlbmRSZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICAgICAgICB1cmwsXG4gICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgIGJvZHksXG4gICAgICAgICAgcmV0cnlDb3VudDogMCxcbiAgICAgICAgICByZXRyeVJlcXVlc3Q6IGFzeW5jIGZ1bmN0aW9uIChvcHRpb25zOiBTZW5kUmVxdWVzdE9wdGlvbnMpIHtcbiAgICAgICAgICAgIHJlc3QucHJvY2Vzc1JlcXVlc3QocGF5bG9hZClcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc29sdmU6IChkYXRhKSA9PiByZXNvbHZlKGRhdGEuc3RhdHVzICE9PSAyMDQgPyBKU09OLnBhcnNlKGRhdGEuYm9keSA/PyAne30nKSA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgcmVqZWN0LFxuICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgIH1cblxuICAgICAgICByZXN0LnByb2Nlc3NSZXF1ZXN0KHBheWxvYWQpXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXQ8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih1cmw6IHN0cmluZykge1xuICAgICAgcmV0dXJuIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ0dFVCcsIHVybCkpIGFzIENhbWVsaXplPFQ+XG4gICAgfSxcblxuICAgIGFzeW5jIHBvc3Q8VCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+Pih1cmw6IHN0cmluZywgYm9keT86IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQT1NUJywgdXJsLCBib2R5KSkgYXMgQ2FtZWxpemU8VD5cbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlKHVybDogc3RyaW5nLCBib2R5PzogUmVjb3JkPHN0cmluZywgYW55Pikge1xuICAgICAgcmV0dXJuIGNhbWVsaXplKGF3YWl0IHJlc3QubWFrZVJlcXVlc3QoJ0RFTEVURScsIHVybCwgYm9keSkpXG4gICAgfSxcblxuICAgIGFzeW5jIHBhdGNoPFQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4odXJsOiBzdHJpbmcsIGJvZHk/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XG4gICAgICByZXR1cm4gY2FtZWxpemUoYXdhaXQgcmVzdC5tYWtlUmVxdWVzdCgnUEFUQ0gnLCB1cmwsIGJvZHkpKSBhcyBDYW1lbGl6ZTxUPlxuICAgIH0sXG5cbiAgICBhc3luYyBwdXQ8VCA9IHZvaWQ+KHVybDogc3RyaW5nLCBib2R5PzogUmVjb3JkPHN0cmluZywgYW55Piwgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcbiAgICAgIHJldHVybiBjYW1lbGl6ZShhd2FpdCByZXN0Lm1ha2VSZXF1ZXN0KCdQVVQnLCB1cmwsIGJvZHksIG9wdGlvbnMpKSBhcyBDYW1lbGl6ZTxUPlxuICAgIH0sXG5cbiAgICBhc3luYyBhZGRSZWFjdGlvbihjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pIHtcbiAgICAgIHJlYWN0aW9uID0gcHJvY2Vzc1JlYWN0aW9uU3RyaW5nKHJlYWN0aW9uKVxuXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLmJvdChjaGFubmVsSWQsIG1lc3NhZ2VJZCwgcmVhY3Rpb24pKVxuICAgIH0sXG5cbiAgICBhc3luYyBhZGRSZWFjdGlvbnMoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9ucywgb3JkZXJlZCA9IGZhbHNlKSB7XG4gICAgICBpZiAoIW9yZGVyZWQpIHtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocmVhY3Rpb25zLm1hcChhc3luYyAocmVhY3Rpb24pID0+IGF3YWl0IHJlc3QuYWRkUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSkpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IHJlYWN0aW9uIG9mIHJlYWN0aW9ucykge1xuICAgICAgICBhd2FpdCByZXN0LmFkZFJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbilcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgYWRkUm9sZShndWlsZElkLCB1c2VySWQsIHJvbGVJZCwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLm1lbWJlcihndWlsZElkLCB1c2VySWQsIHJvbGVJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGFkZFRocmVhZE1lbWJlcihjaGFubmVsSWQsIHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMudXNlcihjaGFubmVsSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUF1dG9tb2RSdWxlKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZXMoZ3VpbGRJZCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUNoYW5uZWwoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmNoYW5uZWxzKGd1aWxkSWQpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVFbW9qaShndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRFbW9qaT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmVtb2ppcyhndWlsZElkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmRzKHJlc3QuYXBwbGljYXRpb25JZCksIGNvbW1hbmQpXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkKG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEd1aWxkPihyZXN0LnJvdXRlcy5ndWlsZHMuYWxsKCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZUd1aWxkQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmQsIGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5hbGwocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkKSwgY29tbWFuZClcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlR3VpbGRGcm9tVGVtcGxhdGUodGVtcGxhdGVDb2RlLCBvcHRpb25zKSB7XG4gICAgICBpZiAob3B0aW9ucy5pY29uKSB7XG4gICAgICAgIG9wdGlvbnMuaWNvbiA9IGF3YWl0IHVybFRvQmFzZTY0KG9wdGlvbnMuaWNvbilcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkR3VpbGQ+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuY29kZSh0ZW1wbGF0ZUNvZGUpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZFN0aWNrZXIoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkU3RpY2tlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnN0aWNrZXJzKGd1aWxkSWQpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVHdWlsZFRlbXBsYXRlKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZFRlbXBsYXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmFsbChndWlsZElkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgY3JlYXRlRm9ydW1UaHJlYWQoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5mb3J1bShjaGFubmVsSWQpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVJbnZpdGUoY2hhbm5lbElkLCBvcHRpb25zID0ge30pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEludml0ZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuaW52aXRlcyhjaGFubmVsSWQpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVSb2xlKGd1aWxkSWQsIG9wdGlvbnMsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkUm9sZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLmFsbChndWlsZElkKSwge1xuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICByZWFzb24sXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBjcmVhdGVTY2hlZHVsZWRFdmVudChndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRTY2hlZHVsZWRFdmVudD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmV2ZW50cy5ldmVudHMoZ3VpbGRJZCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVN0YWdlSW5zdGFuY2Uob3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdDxEaXNjb3JkU3RhZ2VJbnN0YW5jZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuc3RhZ2VzKCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGNyZWF0ZVdlYmhvb2soY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy5jaGFubmVscy53ZWJob29rcyhjaGFubmVsSWQpLCB7XG4gICAgICAgIG5hbWU6IG9wdGlvbnMubmFtZSxcbiAgICAgICAgYXZhdGFyOiBvcHRpb25zLmF2YXRhciA/IGF3YWl0IHVybFRvQmFzZTY0KG9wdGlvbnMuYXZhdGFyKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgcmVhc29uOiBvcHRpb25zLnJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUF1dG9tb2RSdWxlKGd1aWxkSWQsIHJ1bGVJZCwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZShndWlsZElkLCBydWxlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVDaGFubmVsKGNoYW5uZWxJZCwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMuY2hhbm5lbChjaGFubmVsSWQpLCB7XG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZUNoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGUoY2hhbm5lbElkLCBvdmVyd3JpdGVJZCwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMub3ZlcndyaXRlKGNoYW5uZWxJZCwgb3ZlcndyaXRlSWQpLCByZWFzb24gPyB7IHJlYXNvbiB9IDogdW5kZWZpbmVkKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVFbW9qaShndWlsZElkLCBpZCwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmVtb2ppKGd1aWxkSWQsIGlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlRm9sbG93dXBNZXNzYWdlKHRva2VuLCBtZXNzYWdlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm1lc3NhZ2UocmVzdC5hcHBsaWNhdGlvbklkLCB0b2tlbiwgbWVzc2FnZUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR2xvYmFsQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kKHJlc3QuYXBwbGljYXRpb25JZCwgY29tbWFuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGQoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5ndWlsZChndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5vbmUocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZFN0aWNrZXIoZ3VpbGRJZCwgc3RpY2tlcklkLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpLCByZWFzb24gPyB7IHJlYXNvbiB9IDogdW5kZWZpbmVkKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVHdWlsZFRlbXBsYXRlKGd1aWxkSWQsIHRlbXBsYXRlQ29kZSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuZ3VpbGQoZ3VpbGRJZCwgdGVtcGxhdGVDb2RlKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlSW50ZWdyYXRpb24oZ3VpbGRJZCwgaW50ZWdyYXRpb25JZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5pbnRlZ3JhdGlvbihndWlsZElkLCBpbnRlZ3JhdGlvbklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlSW52aXRlKGludml0ZUNvZGUsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5pbnZpdGUoaW52aXRlQ29kZSksIHJlYXNvbiA/IHsgcmVhc29uIH0gOiB1bmRlZmluZWQpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZU1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpLCB7IHJlYXNvbiB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVNZXNzYWdlcyhjaGFubmVsSWQsIG1lc3NhZ2VJZHMsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucG9zdChyZXN0LnJvdXRlcy5jaGFubmVscy5idWxrKGNoYW5uZWxJZCksIHtcbiAgICAgICAgbWVzc2FnZXM6IG1lc3NhZ2VJZHMuc2xpY2UoMCwgMTAwKS5tYXAoKGlkKSA9PiBpZC50b1N0cmluZygpKSxcbiAgICAgICAgcmVhc29uLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlT3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlKHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5vcmlnaW5hbChyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlT3duUmVhY3Rpb24oY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSB7XG4gICAgICByZWFjdGlvbiA9IHByb2Nlc3NSZWFjdGlvblN0cmluZyhyZWFjdGlvbilcblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5ib3QoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlUmVhY3Rpb25zQWxsKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMucmVhY3Rpb25zLmFsbChjaGFubmVsSWQsIG1lc3NhZ2VJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVJlYWN0aW9uc0Vtb2ppKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbikge1xuICAgICAgcmVhY3Rpb24gPSBwcm9jZXNzUmVhY3Rpb25TdHJpbmcocmVhY3Rpb24pXG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy5yZWFjdGlvbnMuZW1vamkoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYWN0aW9uKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlUm9sZShndWlsZElkLCByb2xlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMub25lKGd1aWxkSWQsIHJvbGVJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVNjaGVkdWxlZEV2ZW50KGd1aWxkSWQsIGV2ZW50SWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLmV2ZW50KGd1aWxkSWQsIGV2ZW50SWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGVTdGFnZUluc3RhbmNlKGNoYW5uZWxJZCwgcmVhc29uKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMuc3RhZ2UoY2hhbm5lbElkKSwgcmVhc29uID8geyByZWFzb24gfSA6IHVuZGVmaW5lZClcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlVXNlclJlYWN0aW9uKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCB1c2VySWQsIHJlYWN0aW9uKSB7XG4gICAgICByZWFjdGlvbiA9IHByb2Nlc3NSZWFjdGlvblN0cmluZyhyZWFjdGlvbilcblxuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy51c2VyKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbiwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlV2ViaG9vayh3ZWJob29rSWQsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLndlYmhvb2tzLmlkKHdlYmhvb2tJZCksIHsgcmVhc29uIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZVdlYmhvb2tNZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLndlYmhvb2tzLm1lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlV2ViaG9va1dpdGhUb2tlbih3ZWJob29rSWQsIHRva2VuKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMud2ViaG9va3Mud2ViaG9vayh3ZWJob29rSWQsIHRva2VuKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEFwcGxpY2F0aW9uQ29tbWFuZFBlcm1pc3Npb25zKGd1aWxkSWQsIGNvbW1hbmRJZCwgYmVhcmVyVG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnB1dDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnM+KFxuICAgICAgICByZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMucGVybWlzc2lvbihyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCksXG4gICAgICAgIHtcbiAgICAgICAgICBwZXJtaXNzaW9uczogb3B0aW9ucyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGhlYWRlcnM6IHsgYXV0aG9yaXphdGlvbjogYEJlYXJlciAke2JlYXJlclRva2VufWAgfSxcbiAgICAgICAgfSxcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEF1dG9tb2RSdWxlKGd1aWxkSWQsIHJ1bGVJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZShndWlsZElkLCBydWxlSWQpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Qm90UHJvZmlsZShvcHRpb25zKSB7XG4gICAgICBjb25zdCBhdmF0YXIgPSBvcHRpb25zPy5ib3RBdmF0YXJVUkwgPyBhd2FpdCB1cmxUb0Jhc2U2NChvcHRpb25zPy5ib3RBdmF0YXJVUkwpIDogb3B0aW9ucz8uYm90QXZhdGFyVVJMXG5cbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRVc2VyPihyZXN0LnJvdXRlcy51c2VyQm90KCksIHtcbiAgICAgICAgdXNlcm5hbWU6IG9wdGlvbnMudXNlcm5hbWU/LnRyaW0oKSxcbiAgICAgICAgYXZhdGFyLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdENoYW5uZWwoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuY2hhbm5lbChjaGFubmVsSWQpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Q2hhbm5lbFBlcm1pc3Npb25PdmVycmlkZXMoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQocmVzdC5yb3V0ZXMuY2hhbm5lbHMub3ZlcndyaXRlKGNoYW5uZWxJZCwgb3B0aW9ucy5pZCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRDaGFubmVsUG9zaXRpb25zKGd1aWxkSWQsIGNoYW5uZWxQb3NpdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoKHJlc3Qucm91dGVzLmd1aWxkcy5jaGFubmVscyhndWlsZElkKSwgY2hhbm5lbFBvc2l0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEVtb2ppKGd1aWxkSWQsIGlkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaShndWlsZElkLCBpZCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRGb2xsb3d1cE1lc3NhZ2UodG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5yZXNwb25zZXMubWVzc2FnZShyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuLCBtZXNzYWdlSWQpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmNvbW1hbmQocmVzdC5hcHBsaWNhdGlvbklkLCBjb21tYW5kSWQpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGQoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZEd1aWxkPihyZXN0LnJvdXRlcy5ndWlsZHMuZ3VpbGQoZ3VpbGRJZCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZChjb21tYW5kSWQsIGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KFxuICAgICAgICByZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuZ3VpbGRzLm9uZShyZXN0LmFwcGxpY2F0aW9uSWQsIGd1aWxkSWQsIGNvbW1hbmRJZCksXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICApXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRHdWlsZE1mYUxldmVsKGd1aWxkSWQ6IEJpZ1N0cmluZywgbWZhTGV2ZWw6IE1mYUxldmVscywgcmVhc29uPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLmd1aWxkcy5tZmEoZ3VpbGRJZCksIHsgbGV2ZWw6IG1mYUxldmVsLCByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdEd1aWxkU3RpY2tlcihndWlsZElkLCBzdGlja2VySWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRTdGlja2VyPihyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0R3VpbGRUZW1wbGF0ZShndWlsZElkLCB0ZW1wbGF0ZUNvZGU6IHN0cmluZywgb3B0aW9uczogTW9kaWZ5R3VpbGRUZW1wbGF0ZSk6IFByb21pc2U8Q2FtZWxpemU8RGlzY29yZFRlbXBsYXRlPj4ge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFRlbXBsYXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmd1aWxkKGd1aWxkSWQsIHRlbXBsYXRlQ29kZSksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRNZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UodG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMucmVzcG9uc2VzLm9yaWdpbmFsKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4pLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0T3JpZ2luYWxXZWJob29rTWVzc2FnZSh3ZWJob29rSWQsIHRva2VuLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMud2ViaG9va3Mub3JpZ2luYWwod2ViaG9va0lkLCB0b2tlbiwgb3B0aW9ucyksIHtcbiAgICAgICAgdHlwZTogSW50ZXJhY3Rpb25SZXNwb25zZVR5cGVzLlVwZGF0ZU1lc3NhZ2UsXG4gICAgICAgIGRhdGE6IG9wdGlvbnMsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0T3duVm9pY2VTdGF0ZShndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaChyZXN0LnJvdXRlcy5ndWlsZHMudm9pY2UoZ3VpbGRJZCksIHtcbiAgICAgICAgY2hhbm5lbF9pZDogb3B0aW9ucy5jaGFubmVsSWQsXG4gICAgICAgIHN1cHByZXNzOiBvcHRpb25zLnN1cHByZXNzLFxuICAgICAgICByZXF1ZXN0X3RvX3NwZWFrX3RpbWVzdGFtcDogb3B0aW9ucy5yZXF1ZXN0VG9TcGVha1RpbWVzdGFtcFxuICAgICAgICAgID8gbmV3IERhdGUob3B0aW9ucy5yZXF1ZXN0VG9TcGVha1RpbWVzdGFtcCkudG9JU09TdHJpbmcoKVxuICAgICAgICAgIDogb3B0aW9ucy5yZXF1ZXN0VG9TcGVha1RpbWVzdGFtcCxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRTY2hlZHVsZWRFdmVudChndWlsZElkLCBldmVudElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkU2NoZWR1bGVkRXZlbnQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMuZXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRSb2xlKGd1aWxkSWQsIHJvbGVJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFJvbGU+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5vbmUoZ3VpbGRJZCwgcm9sZUlkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFJvbGVQb3NpdGlvbnMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFJvbGVbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJvbGVzLmFsbChndWlsZElkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFN0YWdlSW5zdGFuY2UoY2hhbm5lbElkLCBkYXRhKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkU3RhZ2VJbnN0YW5jZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuc3RhZ2UoY2hhbm5lbElkKSwgeyB0b3BpYzogZGF0YS50b3BpYyB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0VXNlclZvaWNlU3RhdGUoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2gocmVzdC5yb3V0ZXMuZ3VpbGRzLnZvaWNlKGd1aWxkSWQsIG9wdGlvbnMudXNlcklkKSwge1xuICAgICAgICBjaGFubmVsX2lkOiBvcHRpb25zLmNoYW5uZWxJZCxcbiAgICAgICAgc3VwcHJlc3M6IG9wdGlvbnMuc3VwcHJlc3MsXG4gICAgICAgIHVzZXJfaWQ6IG9wdGlvbnMudXNlcklkLFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdlYmhvb2sod2ViaG9va0lkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wYXRjaDxEaXNjb3JkV2ViaG9vaz4ocmVzdC5yb3V0ZXMud2ViaG9va3MuaWQod2ViaG9va0lkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdlYmhvb2tNZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLndlYmhvb2tzLm1lc3NhZ2Uod2ViaG9va0lkLCB0b2tlbiwgbWVzc2FnZUlkLCBvcHRpb25zKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdlYmhvb2tXaXRoVG9rZW4od2ViaG9va0lkLCB0b2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucGF0Y2g8RGlzY29yZFdlYmhvb2s+KHJlc3Qucm91dGVzLndlYmhvb2tzLndlYmhvb2sod2ViaG9va0lkLCB0b2tlbiksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGVkaXRXZWxjb21lU2NyZWVuKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRXZWxjb21lU2NyZWVuPihyZXN0LnJvdXRlcy5ndWlsZHMud2VsY29tZShndWlsZElkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdFdpZGdldFNldHRpbmdzKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzPihyZXN0LnJvdXRlcy5ndWlsZHMud2lkZ2V0KGd1aWxkSWQpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBleGVjdXRlV2ViaG9vayh3ZWJob29rSWQsIHRva2VuLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHdlYmhvb2tJZCwgdG9rZW4sIG9wdGlvbnMpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBmb2xsb3dBbm5vdW5jZW1lbnQoc291cmNlQ2hhbm5lbElkLCB0YXJnZXRDaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZEZvbGxvd2VkQ2hhbm5lbD4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMuZm9sbG93KHNvdXJjZUNoYW5uZWxJZCksIHtcbiAgICAgICAgd2ViaG9va19jaGFubmVsX2lkOiB0YXJnZXRDaGFubmVsSWQsXG4gICAgICB9IGFzIERpc2NvcmRGb2xsb3dBbm5vdW5jZW1lbnRDaGFubmVsKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBY3RpdmVUaHJlYWRzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTGlzdEFjdGl2ZVRocmVhZHM+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMuYWN0aXZlKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9uKGd1aWxkSWQsIGNvbW1hbmRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9ucz4oXG4gICAgICAgIHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5wZXJtaXNzaW9uKHJlc3QuYXBwbGljYXRpb25JZCwgZ3VpbGRJZCwgY29tbWFuZElkKSxcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9uc1tdPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMucGVybWlzc2lvbnMocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXBwbGljYXRpb25JbmZvKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbj4ocmVzdC5yb3V0ZXMub2F1dGgyQXBwbGljYXRpb24oKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXVkaXRMb2coZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBdWRpdExvZz4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1ZGl0bG9ncyhndWlsZElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0QXV0b21vZFJ1bGUoZ3VpbGRJZCwgcnVsZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEF1dG9Nb2RlcmF0aW9uUnVsZT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZShndWlsZElkLCBydWxlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRBdXRvbW9kUnVsZXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBdXRvTW9kZXJhdGlvblJ1bGVbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmF1dG9tb2QucnVsZXMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEF2YWlsYWJsZVZvaWNlUmVnaW9ucygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVm9pY2VSZWdpb25bXT4ocmVzdC5yb3V0ZXMucmVnaW9ucygpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRCYW4oZ3VpbGRJZCwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEJhbj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFuKGd1aWxkSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEJhbnMoZ3VpbGRJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRCYW5bXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMuYmFucyhndWlsZElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbChpZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy5jaGFubmVsKGlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbEludml0ZXMoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEludml0ZU1ldGFkYXRhW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmludml0ZXMoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbHMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRDaGFubmVsW10+KHJlc3Qucm91dGVzLmd1aWxkcy5jaGFubmVscyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2hhbm5lbFdlYmhvb2tzKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLndlYmhvb2tzKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldERtQ2hhbm5lbCh1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLmRtKCksIHtcbiAgICAgICAgcmVjaXBpZW50X2lkOiB1c2VySWQudG9TdHJpbmcoKSxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEVtb2ppKGd1aWxkSWQsIGVtb2ppSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkRW1vamk+KHJlc3Qucm91dGVzLmd1aWxkcy5lbW9qaShndWlsZElkLCBlbW9qaUlkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0RW1vamlzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkRW1vamlbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmVtb2ppcyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Rm9sbG93dXBNZXNzYWdlKHRva2VuLCBtZXNzYWdlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5tZXNzYWdlKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4sIG1lc3NhZ2VJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEdhdGV3YXlCb3QoKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEdldEdhdGV3YXlCb3Q+KHJlc3Qucm91dGVzLmdhdGV3YXlCb3QoKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kKGNvbW1hbmRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmQ+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kKHJlc3QuYXBwbGljYXRpb25JZCwgY29tbWFuZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kcygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkQXBwbGljYXRpb25Db21tYW5kW10+KHJlc3Qucm91dGVzLmludGVyYWN0aW9ucy5jb21tYW5kcy5jb21tYW5kcyhyZXN0LmFwcGxpY2F0aW9uSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZChndWlsZElkLCBvcHRpb25zID0geyBjb3VudHM6IHRydWUgfSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmd1aWxkKGd1aWxkSWQsIG9wdGlvbnMuY291bnRzKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQoY29tbWFuZElkLCBndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZD4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5vbmUocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkLCBjb21tYW5kSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5hbGwocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRQcmV2aWV3KGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkR3VpbGRQcmV2aWV3PihyZXN0LnJvdXRlcy5ndWlsZHMucHJldmlldyhndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRUZW1wbGF0ZSh0ZW1wbGF0ZUNvZGUpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVGVtcGxhdGU+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuY29kZSh0ZW1wbGF0ZUNvZGUpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFRlbXBsYXRlcyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFRlbXBsYXRlW10+KHJlc3Qucm91dGVzLmd1aWxkcy50ZW1wbGF0ZXMuYWxsKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFdlYmhvb2tzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2ViaG9va1tdPihyZXN0LnJvdXRlcy5ndWlsZHMud2ViaG9va3MoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEludGVncmF0aW9ucyhndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEludGVncmF0aW9uW10+KHJlc3Qucm91dGVzLmd1aWxkcy5pbnRlZ3JhdGlvbnMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldEludml0ZShpbnZpdGVDb2RlLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEludml0ZU1ldGFkYXRhPihyZXN0LnJvdXRlcy5ndWlsZHMuaW52aXRlKGludml0ZUNvZGUsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRJbnZpdGVzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkSW52aXRlTWV0YWRhdGFbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLmludml0ZXMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE1lc3NhZ2VzKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2VzKGNoYW5uZWxJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE5pdHJvU3RpY2tlclBhY2tzKCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyUGFja1tdPihyZXN0LnJvdXRlcy5uaXRyb1N0aWNrZXJQYWNrcygpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UodG9rZW4pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVzc2FnZT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5vcmlnaW5hbChyZXN0LmFwcGxpY2F0aW9uSWQsIHRva2VuKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UGlubmVkTWVzc2FnZXMoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lc3NhZ2VbXT4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMucGlucyhjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRQcml2YXRlQXJjaGl2ZWRUaHJlYWRzKGNoYW5uZWxJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRMaXN0QXJjaGl2ZWRUaHJlYWRzPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLnByaXZhdGUoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UHJpdmF0ZUpvaW5lZEFyY2hpdmVkVGhyZWFkcyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTGlzdEFyY2hpdmVkVGhyZWFkcz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5qb2luZWQoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UHJ1bmVDb3VudChndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFBydW5lZENvdW50PihyZXN0LnJvdXRlcy5ndWlsZHMucHJ1bmUoZ3VpbGRJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFB1YmxpY0FyY2hpdmVkVGhyZWFkcyhjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTGlzdEFyY2hpdmVkVGhyZWFkcz4ocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy5wdWJsaWMoY2hhbm5lbElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Um9sZXMoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRSb2xlW10+KHJlc3Qucm91dGVzLmd1aWxkcy5yb2xlcy5hbGwoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFNjaGVkdWxlZEV2ZW50KGd1aWxkSWQsIGV2ZW50SWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU2NoZWR1bGVkRXZlbnQ+KHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMuZXZlbnQoZ3VpbGRJZCwgZXZlbnRJZCwgb3B0aW9ucz8ud2l0aFVzZXJDb3VudCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFNjaGVkdWxlZEV2ZW50cyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFNjaGVkdWxlZEV2ZW50W10+KHJlc3Qucm91dGVzLmd1aWxkcy5ldmVudHMuZXZlbnRzKGd1aWxkSWQsIG9wdGlvbnM/LndpdGhVc2VyQ291bnQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTY2hlZHVsZWRFdmVudFVzZXJzKGd1aWxkSWQsIGV2ZW50SWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxBcnJheTx7IHVzZXI6IERpc2NvcmRVc2VyOyBtZW1iZXI/OiBEaXNjb3JkTWVtYmVyIH0+PihyZXN0LnJvdXRlcy5ndWlsZHMuZXZlbnRzLnVzZXJzKGd1aWxkSWQsIGV2ZW50SWQsIG9wdGlvbnMpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTZXNzaW9uSW5mbygpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldEdhdGV3YXlCb3QoKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTdGFnZUluc3RhbmNlKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGFnZUluc3RhbmNlPihyZXN0LnJvdXRlcy5jaGFubmVscy5zdGFnZShjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRTdGlja2VyKHN0aWNrZXJJZDogQmlnU3RyaW5nKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFN0aWNrZXI+KHJlc3Qucm91dGVzLnN0aWNrZXIoc3RpY2tlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0R3VpbGRTdGlja2VyKGd1aWxkSWQsIHN0aWNrZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRTdGlja2VyPihyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcihndWlsZElkLCBzdGlja2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRHdWlsZFN0aWNrZXJzKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkU3RpY2tlcltdPihyZXN0LnJvdXRlcy5ndWlsZHMuc3RpY2tlcnMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFRocmVhZE1lbWJlcihjaGFubmVsSWQsIHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRUaHJlYWRNZW1iZXI+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMudXNlcihjaGFubmVsSWQsIHVzZXJJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFRocmVhZE1lbWJlcnMoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFRocmVhZE1lbWJlcltdPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lbWJlcnMoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0UmVhY3Rpb25zKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRVc2VyW10+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnJlYWN0aW9ucy5tZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkLCByZWFjdGlvbiwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFVzZXIoaWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVXNlcj4ocmVzdC5yb3V0ZXMudXNlcihpZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFZhbml0eVVybChndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFZhbml0eVVybD4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnZhbml0eShndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Vm9pY2VSZWdpb25zKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkVm9pY2VSZWdpb25bXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLnJlZ2lvbnMoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdlYmhvb2sod2ViaG9va0lkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZFdlYmhvb2s+KHJlc3Qucm91dGVzLndlYmhvb2tzLmlkKHdlYmhvb2tJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdlYmhvb2tNZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy53ZWJob29rcy5tZXNzYWdlKHdlYmhvb2tJZCwgdG9rZW4sIG1lc3NhZ2VJZCwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdlYmhvb2tXaXRoVG9rZW4od2ViaG9va0lkLCB0b2tlbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRXZWJob29rPihyZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHdlYmhvb2tJZCwgdG9rZW4pKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRXZWxjb21lU2NyZWVuKGd1aWxkSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkV2VsY29tZVNjcmVlbj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLndlbGNvbWUoZ3VpbGRJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldFdpZGdldChndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZEd1aWxkV2lkZ2V0PihyZXN0LnJvdXRlcy5ndWlsZHMud2lkZ2V0SnNvbihndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0V2lkZ2V0U2V0dGluZ3MoZ3VpbGRJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZ2V0PERpc2NvcmRHdWlsZFdpZGdldFNldHRpbmdzPihyZXN0LnJvdXRlcy5ndWlsZHMud2lkZ2V0KGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBqb2luVGhyZWFkKGNoYW5uZWxJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMubWUoY2hhbm5lbElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbGVhdmVHdWlsZChndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuZ3VpbGRzLmxlYXZlKGd1aWxkSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBsZWF2ZVRocmVhZChjaGFubmVsSWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLm1lKGNoYW5uZWxJZCkpXG4gICAgfSxcblxuICAgIGFzeW5jIHB1Ymxpc2hNZXNzYWdlKGNoYW5uZWxJZCwgbWVzc2FnZUlkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRNZXNzYWdlPihyZXN0LnJvdXRlcy5jaGFubmVscy5jcm9zc3Bvc3QoY2hhbm5lbElkLCBtZXNzYWdlSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyByZW1vdmVSb2xlKGd1aWxkSWQsIHVzZXJJZCwgcm9sZUlkLCByZWFzb24pIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmRlbGV0ZShyZXN0LnJvdXRlcy5ndWlsZHMucm9sZXMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgcm9sZUlkKSwgeyByZWFzb24gfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVtb3ZlVGhyZWFkTWVtYmVyKGNoYW5uZWxJZCwgdXNlcklkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5kZWxldGUocmVzdC5yb3V0ZXMuY2hhbm5lbHMudGhyZWFkcy51c2VyKGNoYW5uZWxJZCwgdXNlcklkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZEZvbGxvd3VwTWVzc2FnZSh0b2tlbiwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgcmVzdC5zZW5kUmVxdWVzdCh7XG4gICAgICAgICAgdXJsOiByZXN0LnJvdXRlcy53ZWJob29rcy53ZWJob29rKHJlc3QuYXBwbGljYXRpb25JZCwgdG9rZW4pLFxuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IG9wdGlvbnMsXG4gICAgICAgICAgcmV0cnlDb3VudDogMCxcbiAgICAgICAgICByZXRyeVJlcXVlc3Q6IGFzeW5jIGZ1bmN0aW9uIChvcHRpb25zOiBTZW5kUmVxdWVzdE9wdGlvbnMpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IHNob3VsZCBjaGFuZ2UgdG8gcmVwcm9jZXNzIHF1ZXVlIGl0ZW1cbiAgICAgICAgICAgIGF3YWl0IHJlc3Quc2VuZFJlcXVlc3Qob3B0aW9ucylcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc29sdmU6IChkYXRhKSA9PiByZXNvbHZlKGRhdGEuc3RhdHVzICE9PSAyMDQgPyBKU09OLnBhcnNlKGRhdGEuYm9keSA/PyAne30nKSA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgcmVqZWN0LFxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZEludGVyYWN0aW9uUmVzcG9uc2UoaW50ZXJhY3Rpb25JZCwgdG9rZW4sIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHJlc3Quc2VuZFJlcXVlc3Qoe1xuICAgICAgICAgIHVybDogcmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLnJlc3BvbnNlcy5jYWxsYmFjayhpbnRlcmFjdGlvbklkLCB0b2tlbiksXG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogb3B0aW9ucyxcbiAgICAgICAgICByZXRyeUNvdW50OiAwLFxuICAgICAgICAgIHJldHJ5UmVxdWVzdDogYXN5bmMgZnVuY3Rpb24gKG9wdGlvbnM6IFNlbmRSZXF1ZXN0T3B0aW9ucykge1xuICAgICAgICAgICAgLy8gVE9ETzogc2hvdWxkIGNoYW5nZSB0byByZXByb2Nlc3MgcXVldWUgaXRlbVxuICAgICAgICAgICAgYXdhaXQgcmVzdC5zZW5kUmVxdWVzdChvcHRpb25zKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzb2x2ZTogKGRhdGEpID0+IHJlc29sdmUoZGF0YS5zdGF0dXMgIT09IDIwNCA/IEpTT04ucGFyc2UoZGF0YS5ib2R5ID8/ICd7fScpIDogdW5kZWZpbmVkKSxcbiAgICAgICAgICByZWplY3QsXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kTWVzc2FnZShjaGFubmVsSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZE1lc3NhZ2U+KHJlc3Qucm91dGVzLmNoYW5uZWxzLm1lc3NhZ2VzKGNoYW5uZWxJZCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIHN0YXJ0VGhyZWFkV2l0aE1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBvc3Q8RGlzY29yZENoYW5uZWw+KHJlc3Qucm91dGVzLmNoYW5uZWxzLnRocmVhZHMubWVzc2FnZShjaGFubmVsSWQsIG1lc3NhZ2VJZCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIHN0YXJ0VGhyZWFkV2l0aG91dE1lc3NhZ2UoY2hhbm5lbElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PERpc2NvcmRDaGFubmVsPihyZXN0LnJvdXRlcy5jaGFubmVscy50aHJlYWRzLmFsbChjaGFubmVsSWQpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBzeW5jR3VpbGRUZW1wbGF0ZShndWlsZElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZFRlbXBsYXRlPihyZXN0LnJvdXRlcy5ndWlsZHMudGVtcGxhdGVzLmFsbChndWlsZElkKSlcbiAgICB9LFxuXG4gICAgYXN5bmMgYmFuTWVtYmVyKGd1aWxkSWQsIHVzZXJJZCwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PHZvaWQ+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJhbihndWlsZElkLCB1c2VySWQpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBlZGl0Qm90TWVtYmVyKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZW1iZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJvdChndWlsZElkKSwgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgZWRpdE1lbWJlcihndWlsZElkLCB1c2VySWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LnBhdGNoPERpc2NvcmRNZW1iZXJXaXRoVXNlcj4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVyKGd1aWxkSWQsIHVzZXJJZCksIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIGdldE1lbWJlcihndWlsZElkLCB1c2VySWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVtYmVyV2l0aFVzZXI+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLm1lbWJlcihndWlsZElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyBnZXRNZW1iZXJzKGd1aWxkSWQsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhd2FpdCByZXN0LmdldDxEaXNjb3JkTWVtYmVyV2l0aFVzZXJbXT4ocmVzdC5yb3V0ZXMuZ3VpbGRzLm1lbWJlcnMubWVtYmVycyhndWlsZElkLCBvcHRpb25zKSlcbiAgICB9LFxuXG4gICAgYXN5bmMga2lja01lbWJlcihndWlsZElkLCB1c2VySWQsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLm1lbWJlcihndWlsZElkLCB1c2VySWQpLCB7XG4gICAgICAgIHJlYXNvbixcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIHBpbk1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0KHJlc3Qucm91dGVzLmNoYW5uZWxzLnBpbihjaGFubmVsSWQsIG1lc3NhZ2VJZCksIHJlYXNvbiA/IHsgcmVhc29uIH0gOiB1bmRlZmluZWQpXG4gICAgfSxcblxuICAgIGFzeW5jIHBydW5lTWVtYmVycyhndWlsZElkLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0PHsgcHJ1bmVkOiBudW1iZXIgfCBudWxsIH0+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLnBydW5lKGd1aWxkSWQpLCBvcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBzZWFyY2hNZW1iZXJzKGd1aWxkSWQsIHF1ZXJ5LCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5nZXQ8RGlzY29yZE1lbWJlcldpdGhVc2VyW10+KHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLnNlYXJjaChndWlsZElkLCBxdWVyeSwgb3B0aW9ucykpXG4gICAgfSxcblxuICAgIGFzeW5jIHVuYmFuTWVtYmVyKGd1aWxkSWQsIHVzZXJJZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmd1aWxkcy5tZW1iZXJzLmJhbihndWlsZElkLCB1c2VySWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyB1bnBpbk1lc3NhZ2UoY2hhbm5lbElkLCBtZXNzYWdlSWQsIHJlYXNvbikge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QuZGVsZXRlKHJlc3Qucm91dGVzLmNoYW5uZWxzLnBpbihjaGFubmVsSWQsIG1lc3NhZ2VJZCksIHJlYXNvbiA/IHsgcmVhc29uIH0gOiB1bmRlZmluZWQpXG4gICAgfSxcblxuICAgIGFzeW5jIHRyaWdnZXJUeXBpbmdJbmRpY2F0b3IoY2hhbm5lbElkKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wb3N0KHJlc3Qucm91dGVzLmNoYW5uZWxzLnR5cGluZyhjaGFubmVsSWQpKVxuICAgIH0sXG5cbiAgICBhc3luYyB1cHNlcnRHbG9iYWxBcHBsaWNhdGlvbkNvbW1hbmRzKGNvbW1hbmRzKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcmVzdC5wdXQ8RGlzY29yZEFwcGxpY2F0aW9uQ29tbWFuZFtdPihyZXN0LnJvdXRlcy5pbnRlcmFjdGlvbnMuY29tbWFuZHMuY29tbWFuZHMocmVzdC5hcHBsaWNhdGlvbklkKSwgY29tbWFuZHMpXG4gICAgfSxcblxuICAgIGFzeW5jIHVwc2VydEd1aWxkQXBwbGljYXRpb25Db21tYW5kcyhndWlsZElkLCBjb21tYW5kcykge1xuICAgICAgcmV0dXJuIGF3YWl0IHJlc3QucHV0PERpc2NvcmRBcHBsaWNhdGlvbkNvbW1hbmRbXT4ocmVzdC5yb3V0ZXMuaW50ZXJhY3Rpb25zLmNvbW1hbmRzLmd1aWxkcy5hbGwocmVzdC5hcHBsaWNhdGlvbklkLCBndWlsZElkKSwgY29tbWFuZHMpXG4gICAgfSxcbiAgfVxuXG4gIHJldHVybiByZXN0XG59XG4iXSwibmFtZXMiOlsiSW50ZXJhY3Rpb25SZXNwb25zZVR5cGVzIiwiY2FsY3VsYXRlQml0cyIsImNhbWVsaXplIiwiY2FtZWxUb1NuYWtlQ2FzZSIsImRlbGF5IiwiZmluZEZpbGVzIiwiZ2V0Qm90SWRGcm9tVG9rZW4iLCJpc0dldE1lc3NhZ2VzQWZ0ZXIiLCJpc0dldE1lc3NhZ2VzQXJvdW5kIiwiaXNHZXRNZXNzYWdlc0JlZm9yZSIsImlzR2V0TWVzc2FnZXNMaW1pdCIsImxvZ2dlciIsInByb2Nlc3NSZWFjdGlvblN0cmluZyIsInVybFRvQmFzZTY0IiwiY3JlYXRlSW52YWxpZFJlcXVlc3RCdWNrZXQiLCJRdWV1ZSIsImNyZWF0ZVJlc3RNYW5hZ2VyIiwib3B0aW9ucyIsInRva2VuIiwiRXJyb3IiLCJyZXN0IiwiYXBwbGljYXRpb25JZCIsIkJpZ0ludCIsInZlcnNpb24iLCJiYXNlVXJsIiwibWF4UmV0cnlDb3VudCIsIkluZmluaXR5IiwiZ2xvYmFsbHlSYXRlTGltaXRlZCIsInByb2Nlc3NpbmdSYXRlTGltaXRlZFBhdGhzIiwiZGVsZXRlUXVldWVEZWxheSIsInF1ZXVlcyIsIk1hcCIsInJhdGVMaW1pdGVkUGF0aHMiLCJpbnZhbGlkQnVja2V0Iiwicm91dGVzIiwid2ViaG9va3MiLCJpZCIsIndlYmhvb2tJZCIsIm1lc3NhZ2UiLCJtZXNzYWdlSWQiLCJ1cmwiLCJ0aHJlYWRJZCIsIm9yaWdpbmFsIiwid2ViaG9vayIsIndhaXQiLCJ1bmRlZmluZWQiLCJ0b1N0cmluZyIsInNlc3Npb25JbmZvIiwiZ2F0ZXdheUJvdCIsImNoYW5uZWxzIiwiYnVsayIsImNoYW5uZWxJZCIsImRtIiwicGluIiwicGlucyIsInJlYWN0aW9ucyIsImJvdCIsImVtb2ppIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwidXNlciIsInVzZXJJZCIsImFsbCIsImFmdGVyIiwibGltaXQiLCJjaGFubmVsIiwiZm9sbG93IiwiZm9ydW0iLCJpbnZpdGVzIiwibWVzc2FnZXMiLCJiZWZvcmUiLCJhcm91bmQiLCJvdmVyd3JpdGUiLCJvdmVyd3JpdGVJZCIsImNyb3NzcG9zdCIsInN0YWdlcyIsInN0YWdlIiwidGhyZWFkcyIsImFjdGl2ZSIsImd1aWxkSWQiLCJtZW1iZXJzIiwibWUiLCJhcmNoaXZlZCIsInB1YmxpYyIsIkRhdGUiLCJ0b0lTT1N0cmluZyIsInByaXZhdGUiLCJqb2luZWQiLCJ0eXBpbmciLCJndWlsZHMiLCJhdWRpdGxvZ3MiLCJhY3Rpb25UeXBlIiwiYXV0b21vZCIsInJ1bGUiLCJydWxlSWQiLCJydWxlcyIsImVtb2ppSWQiLCJlbW9qaXMiLCJldmVudHMiLCJ3aXRoVXNlckNvdW50IiwiZXZlbnQiLCJldmVudElkIiwidXNlcnMiLCJ3aXRoTWVtYmVyIiwiZ3VpbGQiLCJ3aXRoQ291bnRzIiwiaW50ZWdyYXRpb24iLCJpbnRlZ3JhdGlvbklkIiwiaW50ZWdyYXRpb25zIiwiaW52aXRlIiwiaW52aXRlQ29kZSIsIndpdGhFeHBpcmF0aW9uIiwic2NoZWR1bGVkRXZlbnRJZCIsImxlYXZlIiwiYmFuIiwiYmFucyIsIm1lbWJlciIsInNlYXJjaCIsInF1ZXJ5IiwicHJ1bmUiLCJkYXlzIiwiQXJyYXkiLCJpc0FycmF5IiwiaW5jbHVkZVJvbGVzIiwiam9pbiIsIm1mYSIsInByZXZpZXciLCJyb2xlcyIsIm9uZSIsInJvbGVJZCIsIm1lbWJlcklkIiwic3RpY2tlcnMiLCJzdGlja2VyIiwic3RpY2tlcklkIiwidm9pY2UiLCJ0ZW1wbGF0ZXMiLCJjb2RlIiwidmFuaXR5IiwicmVnaW9ucyIsIndlbGNvbWUiLCJ3aWRnZXQiLCJ3aWRnZXRKc29uIiwiaW50ZXJhY3Rpb25zIiwiY29tbWFuZHMiLCJjb21tYW5kSWQiLCJ3aXRoTG9jYWxpemF0aW9ucyIsInBlcm1pc3Npb25zIiwicGVybWlzc2lvbiIsImNvbW1hbmQiLCJyZXNwb25zZXMiLCJjYWxsYmFjayIsImludGVyYWN0aW9uSWQiLCJ1c2VyQm90Iiwib2F1dGgyQXBwbGljYXRpb24iLCJuaXRyb1N0aWNrZXJQYWNrcyIsImNoZWNrUmF0ZUxpbWl0cyIsInJhdGVsaW1pdGVkIiwiZ2V0IiwiZ2xvYmFsIiwibm93IiwicmVzZXRUaW1lc3RhbXAiLCJjaGFuZ2VUb0Rpc2NvcmRGb3JtYXQiLCJvYmoiLCJtYXAiLCJpdGVtIiwibmV3T2JqIiwia2V5IiwiT2JqZWN0Iiwia2V5cyIsImNyZWF0ZVJlcXVlc3QiLCJoZWFkZXJzIiwidW5hdXRob3JpemVkIiwiYXV0aG9yaXphdGlvbiIsInRvTG93ZXJDYXNlIiwibWV0aG9kIiwiYm9keSIsInJlYXNvbiIsImZpbGUiLCJmaWxlcyIsImZvcm0iLCJGb3JtRGF0YSIsImVuZHNXaXRoIiwiYXBwZW5kIiwiYmxvYiIsIm5hbWUiLCJkZXNjcmlwdGlvbiIsInRhZ3MiLCJpIiwibGVuZ3RoIiwiSlNPTiIsInN0cmluZ2lmeSIsImluY2x1ZGVzIiwicHJvY2Vzc1JhdGVMaW1pdGVkUGF0aHMiLCJ2YWx1ZSIsImVudHJpZXMiLCJkZWxldGUiLCJzaXplIiwic2V0VGltZW91dCIsInByb2Nlc3NIZWFkZXJzIiwicmF0ZUxpbWl0ZWQiLCJyZW1haW5pbmciLCJyZXRyeUFmdGVyIiwicmVzZXQiLCJOdW1iZXIiLCJidWNrZXRJZCIsImhhbmRsZUNvbXBsZXRlZFJlcXVlc3QiLCJpbnRlcnZhbCIsIm1heCIsInNldCIsImdsb2JhbFJlc2V0Iiwic2VuZFJlcXVlc3QiLCJzdGFydHNXaXRoIiwicGF5bG9hZCIsImRlYnVnIiwicmVzcG9uc2UiLCJmZXRjaCIsInN0YXR1cyIsInN0YXR1c1RleHQiLCJzaW1wbGlmeVVybCIsInJldHJ5Q291bnQiLCJyZWplY3QiLCJvayIsImVycm9yIiwicmVzZXRBZnRlciIsIndhcm4iLCJqc29uIiwicmV0cnlSZXF1ZXN0IiwiaXMyMDQiLCJyZXNvbHZlIiwicm91dGUiLCJyZXBsYWNlIiwibWF0Y2giLCJwIiwic3Vic3RyaW5nIiwiaW5kZXhPZiIsInByb2Nlc3NSZXF1ZXN0IiwicmVxdWVzdCIsInBhcnRzIiwic3BsaXQiLCJzaGlmdCIsInF1ZXVlIiwibWFrZVJlcXVlc3QiLCJidWNrZXRRdWV1ZSIsIlByb21pc2UiLCJkYXRhIiwicGFyc2UiLCJwb3N0IiwicGF0Y2giLCJwdXQiLCJhZGRSZWFjdGlvbiIsInJlYWN0aW9uIiwiYWRkUmVhY3Rpb25zIiwib3JkZXJlZCIsImFkZFJvbGUiLCJhZGRUaHJlYWRNZW1iZXIiLCJjcmVhdGVBdXRvbW9kUnVsZSIsImNyZWF0ZUNoYW5uZWwiLCJjcmVhdGVFbW9qaSIsImNyZWF0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZCIsImNyZWF0ZUd1aWxkIiwiY3JlYXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQiLCJjcmVhdGVHdWlsZEZyb21UZW1wbGF0ZSIsInRlbXBsYXRlQ29kZSIsImljb24iLCJjcmVhdGVHdWlsZFN0aWNrZXIiLCJjcmVhdGVHdWlsZFRlbXBsYXRlIiwiY3JlYXRlRm9ydW1UaHJlYWQiLCJjcmVhdGVJbnZpdGUiLCJjcmVhdGVSb2xlIiwiY3JlYXRlU2NoZWR1bGVkRXZlbnQiLCJjcmVhdGVTdGFnZUluc3RhbmNlIiwiY3JlYXRlV2ViaG9vayIsImF2YXRhciIsImRlbGV0ZUF1dG9tb2RSdWxlIiwiZGVsZXRlQ2hhbm5lbCIsImRlbGV0ZUNoYW5uZWxQZXJtaXNzaW9uT3ZlcnJpZGUiLCJkZWxldGVFbW9qaSIsImRlbGV0ZUZvbGxvd3VwTWVzc2FnZSIsImRlbGV0ZUdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZCIsImRlbGV0ZUd1aWxkIiwiZGVsZXRlR3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQiLCJkZWxldGVHdWlsZFN0aWNrZXIiLCJkZWxldGVHdWlsZFRlbXBsYXRlIiwiZGVsZXRlSW50ZWdyYXRpb24iLCJkZWxldGVJbnZpdGUiLCJkZWxldGVNZXNzYWdlIiwiZGVsZXRlTWVzc2FnZXMiLCJtZXNzYWdlSWRzIiwic2xpY2UiLCJkZWxldGVPcmlnaW5hbEludGVyYWN0aW9uUmVzcG9uc2UiLCJkZWxldGVPd25SZWFjdGlvbiIsImRlbGV0ZVJlYWN0aW9uc0FsbCIsImRlbGV0ZVJlYWN0aW9uc0Vtb2ppIiwiZGVsZXRlUm9sZSIsImRlbGV0ZVNjaGVkdWxlZEV2ZW50IiwiZGVsZXRlU3RhZ2VJbnN0YW5jZSIsImRlbGV0ZVVzZXJSZWFjdGlvbiIsImRlbGV0ZVdlYmhvb2siLCJkZWxldGVXZWJob29rTWVzc2FnZSIsImRlbGV0ZVdlYmhvb2tXaXRoVG9rZW4iLCJlZGl0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnMiLCJiZWFyZXJUb2tlbiIsImVkaXRBdXRvbW9kUnVsZSIsImVkaXRCb3RQcm9maWxlIiwiYm90QXZhdGFyVVJMIiwidXNlcm5hbWUiLCJ0cmltIiwiZWRpdENoYW5uZWwiLCJlZGl0Q2hhbm5lbFBlcm1pc3Npb25PdmVycmlkZXMiLCJlZGl0Q2hhbm5lbFBvc2l0aW9ucyIsImNoYW5uZWxQb3NpdGlvbnMiLCJlZGl0RW1vamkiLCJlZGl0Rm9sbG93dXBNZXNzYWdlIiwiZWRpdEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZCIsImVkaXRHdWlsZCIsImVkaXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZCIsImVkaXRHdWlsZE1mYUxldmVsIiwibWZhTGV2ZWwiLCJsZXZlbCIsImVkaXRHdWlsZFN0aWNrZXIiLCJlZGl0R3VpbGRUZW1wbGF0ZSIsImVkaXRNZXNzYWdlIiwiZWRpdE9yaWdpbmFsSW50ZXJhY3Rpb25SZXNwb25zZSIsImVkaXRPcmlnaW5hbFdlYmhvb2tNZXNzYWdlIiwidHlwZSIsIlVwZGF0ZU1lc3NhZ2UiLCJlZGl0T3duVm9pY2VTdGF0ZSIsImNoYW5uZWxfaWQiLCJzdXBwcmVzcyIsInJlcXVlc3RfdG9fc3BlYWtfdGltZXN0YW1wIiwicmVxdWVzdFRvU3BlYWtUaW1lc3RhbXAiLCJlZGl0U2NoZWR1bGVkRXZlbnQiLCJlZGl0Um9sZSIsImVkaXRSb2xlUG9zaXRpb25zIiwiZWRpdFN0YWdlSW5zdGFuY2UiLCJ0b3BpYyIsImVkaXRVc2VyVm9pY2VTdGF0ZSIsInVzZXJfaWQiLCJlZGl0V2ViaG9vayIsImVkaXRXZWJob29rTWVzc2FnZSIsImVkaXRXZWJob29rV2l0aFRva2VuIiwiZWRpdFdlbGNvbWVTY3JlZW4iLCJlZGl0V2lkZ2V0U2V0dGluZ3MiLCJleGVjdXRlV2ViaG9vayIsImZvbGxvd0Fubm91bmNlbWVudCIsInNvdXJjZUNoYW5uZWxJZCIsInRhcmdldENoYW5uZWxJZCIsIndlYmhvb2tfY2hhbm5lbF9pZCIsImdldEFjdGl2ZVRocmVhZHMiLCJnZXRBcHBsaWNhdGlvbkNvbW1hbmRQZXJtaXNzaW9uIiwiZ2V0QXBwbGljYXRpb25Db21tYW5kUGVybWlzc2lvbnMiLCJnZXRBcHBsaWNhdGlvbkluZm8iLCJnZXRBdWRpdExvZyIsImdldEF1dG9tb2RSdWxlIiwiZ2V0QXV0b21vZFJ1bGVzIiwiZ2V0QXZhaWxhYmxlVm9pY2VSZWdpb25zIiwiZ2V0QmFuIiwiZ2V0QmFucyIsImdldENoYW5uZWwiLCJnZXRDaGFubmVsSW52aXRlcyIsImdldENoYW5uZWxzIiwiZ2V0Q2hhbm5lbFdlYmhvb2tzIiwiZ2V0RG1DaGFubmVsIiwicmVjaXBpZW50X2lkIiwiZ2V0RW1vamkiLCJnZXRFbW9qaXMiLCJnZXRGb2xsb3d1cE1lc3NhZ2UiLCJnZXRHYXRld2F5Qm90IiwiZ2V0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kIiwiZ2V0R2xvYmFsQXBwbGljYXRpb25Db21tYW5kcyIsImdldEd1aWxkIiwiY291bnRzIiwiZ2V0R3VpbGRBcHBsaWNhdGlvbkNvbW1hbmQiLCJnZXRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJnZXRHdWlsZFByZXZpZXciLCJnZXRHdWlsZFRlbXBsYXRlIiwiZ2V0R3VpbGRUZW1wbGF0ZXMiLCJnZXRHdWlsZFdlYmhvb2tzIiwiZ2V0SW50ZWdyYXRpb25zIiwiZ2V0SW52aXRlIiwiZ2V0SW52aXRlcyIsImdldE1lc3NhZ2UiLCJnZXRNZXNzYWdlcyIsImdldE5pdHJvU3RpY2tlclBhY2tzIiwiZ2V0T3JpZ2luYWxJbnRlcmFjdGlvblJlc3BvbnNlIiwiZ2V0UGlubmVkTWVzc2FnZXMiLCJnZXRQcml2YXRlQXJjaGl2ZWRUaHJlYWRzIiwiZ2V0UHJpdmF0ZUpvaW5lZEFyY2hpdmVkVGhyZWFkcyIsImdldFBydW5lQ291bnQiLCJnZXRQdWJsaWNBcmNoaXZlZFRocmVhZHMiLCJnZXRSb2xlcyIsImdldFNjaGVkdWxlZEV2ZW50IiwiZ2V0U2NoZWR1bGVkRXZlbnRzIiwiZ2V0U2NoZWR1bGVkRXZlbnRVc2VycyIsImdldFNlc3Npb25JbmZvIiwiZ2V0U3RhZ2VJbnN0YW5jZSIsImdldFN0aWNrZXIiLCJnZXRHdWlsZFN0aWNrZXIiLCJnZXRHdWlsZFN0aWNrZXJzIiwiZ2V0VGhyZWFkTWVtYmVyIiwiZ2V0VGhyZWFkTWVtYmVycyIsImdldFJlYWN0aW9ucyIsImdldFVzZXIiLCJnZXRWYW5pdHlVcmwiLCJnZXRWb2ljZVJlZ2lvbnMiLCJnZXRXZWJob29rIiwiZ2V0V2ViaG9va01lc3NhZ2UiLCJnZXRXZWJob29rV2l0aFRva2VuIiwiZ2V0V2VsY29tZVNjcmVlbiIsImdldFdpZGdldCIsImdldFdpZGdldFNldHRpbmdzIiwiam9pblRocmVhZCIsImxlYXZlR3VpbGQiLCJsZWF2ZVRocmVhZCIsInB1Ymxpc2hNZXNzYWdlIiwicmVtb3ZlUm9sZSIsInJlbW92ZVRocmVhZE1lbWJlciIsInNlbmRGb2xsb3d1cE1lc3NhZ2UiLCJzZW5kSW50ZXJhY3Rpb25SZXNwb25zZSIsInNlbmRNZXNzYWdlIiwic3RhcnRUaHJlYWRXaXRoTWVzc2FnZSIsInN0YXJ0VGhyZWFkV2l0aG91dE1lc3NhZ2UiLCJzeW5jR3VpbGRUZW1wbGF0ZSIsImJhbk1lbWJlciIsImVkaXRCb3RNZW1iZXIiLCJlZGl0TWVtYmVyIiwiZ2V0TWVtYmVyIiwiZ2V0TWVtYmVycyIsImtpY2tNZW1iZXIiLCJwaW5NZXNzYWdlIiwicHJ1bmVNZW1iZXJzIiwic2VhcmNoTWVtYmVycyIsInVuYmFuTWVtYmVyIiwidW5waW5NZXNzYWdlIiwidHJpZ2dlclR5cGluZ0luZGljYXRvciIsInVwc2VydEdsb2JhbEFwcGxpY2F0aW9uQ29tbWFuZHMiLCJ1cHNlcnRHdWlsZEFwcGxpY2F0aW9uQ29tbWFuZHMiXSwibWFwcGluZ3MiOiJBQUVBLE9BQVNBLDRCQUFBQSxDQUF3QixLQUFRLG1CQUFtQixBQUM1RCxRQUNFQyxpQkFBQUEsQ0FBYSxDQUNiQyxZQUFBQSxDQUFRLENBQ1JDLG9CQUFBQSxDQUFnQixDQUNoQkMsU0FBQUEsQ0FBSyxDQUNMQyxhQUFBQSxDQUFTLENBQ1RDLHFCQUFBQSxDQUFpQixDQUNqQkMsc0JBQUFBLENBQWtCLENBQ2xCQyx1QkFBQUEsQ0FBbUIsQ0FDbkJDLHVCQUFBQSxDQUFtQixDQUNuQkMsc0JBQUFBLENBQWtCLENBQ2xCQyxVQUFBQSxDQUFNLENBQ05DLHlCQUFBQSxDQUFxQixDQUNyQkMsZUFBQUEsQ0FBVyxLQUNOLG1CQUFtQixBQUUxQixR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